繁体   English   中英

RDF4J和GEOSparql空间功能不起作用(或未实现)

[英]RDF4J and GEOSparql spatial functions not working (or not implemented)

我正在使用RDF4J,这是因为我发现其广告实现是GEOSPARQL(在其他RDF框架中找不到)。 我遵循了基本指南和教程,但是不幸的是,我基本上无法执行任何广告查询。

我阅读并遵循了http://docs.rdf4j.org/programming/#_geosparql上的所有文档以及http://graphdb.ontotext.com/documentation/standard/geosparql-support.html和上的所有示例。 https://portal.opengeospatial.org/files/?artifact_id=47664 似乎在SPARQL查询中起作用的唯一空间功能是geof:distance ,所有其他功能均不产生任何结果。

因此,我最终在org.eclipse.rdf4j.query.algebra.evaluation.function.geosparql包中研究了代码,以了解有些类和接口可能应该实现和扩展,例如SpatialAlgebraSpatialSupportSpatialSupportInitializer 看来许多功能并未在空间逻辑中完全(或部分)实现。 显然,有一个DefaultSpatialAlgebra ,它返回很多notSupported 无论如何,了解使GEOSPARQL正常工作的正确过程是一个混乱的过程(没有文档记录)。 他们只是说您可以实现自己的SpatialSupportInitializer ,但是之后如何使用它是一个谜。

从文档中可以明显看出,还有一种使用其他SAIL的方法,但同样,这还不清楚。

任何人SpatialSupport SpatialSupportInitializer我提供一些指导,或者至少是一段代码片段,其中显示了如何将SpatialAlgebraSpatialSupportSpatialSupportInitializer实际传递给引擎,这不是默认的? 还是已经存在实现所有这些方法的SAIL,该如何使用? 谢谢。

PS:我实际上是依靠2.4.0 M2版本的RDF4J,它似乎没有里面的org.eclipse.rdf4j.query.algebra.evaluation.function.geosparql包(我手动导入了)。 我也尝试使用2.3.1版,但存在相同的问题。

更新自RDF4J 2.4.0-M3起,GeoSPARQL功能支持更加全面。 改进后的文档提供了所有受支持功能的完整列表,并希望能更好地说明如何开始使用GeoSPARQL。 它的简短之处在于,您需要做的就是添加以下Maven模块:

<dependency>
    <groupId>org.eclipse.rdf4j</groupId>
    <artifactId>rdf4j-queryalgebra-geosparql</artifactId>
    <version>2.4.0-M3</version>
</dependency>

并且您可以在任何类型的RDF4J存储库上使用GeoSPARQL。

RDF4J还开箱即用地支持其他几个GeoSPARQL函数:除了distanceunionintersectionsymDifferencedifferenceconvexHullboundaryenvelopegetSRID都至少受支持。 sfContains是, sfContains当前不属于默认设置。 这主要是由于RDF4J在早期版本的JTS库中存在许可问题(需要多边形支持)。 但是,作为LocationTech项目的一部分,完成了更多最新的JTS发布,并且这些许可证问题已得到解决,因此我们希望能够在不久的将来扩展它(在https://github.com上存在跟踪此问题的问题) / eclipse / rdf4j-storage / issues / 89 )。

同时,您确实需要创建自己的`SpatialAlgebra`类,您可以通过`SpatialSupportInitializer`将其添加到RDF4J中。 这是一种变通办法,但是您应该使用org.eclipse.rdf4j.query.algebra.evaluation.function.geosparql.SpatialSupportInitializer`作为其完全限定的名称来创建一个类,并确保它扩展了` org.eclipse.rdf4j.query.algebra.evaluation.function.geosparql.SpatialSupport`抽象类,重写其getSpatialContext和getSpatialAlgebra方法以提供您的自定义变体。 添加到您的类路径并重新启动,RDF4J将选择它并使用您的`SpatialAlgebra`实现而不是其自己的实现。 底线是:这都是beta。 坦率地说,如果您认为可以使用我上面提到的解决方法来实现其他GeoSPARQL功能,那么我们很乐意在实际将其添加到RDF4J本身时提供您的意见(如果可能,还请您提供帮助)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM