我正在使用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
包中的代码,以了解有些类和接口可能应该实现和扩展,例如SpatialAlgebra
,SpatialSupport
,SpatialSupportInitializer
。看来许多功能并未在空间逻辑中完全(或部分)实现。显然,有一个DefaultSpatialAlgebra
返回了大量的notSupported
。无论如何,了解使GEOSPARQL正常工作的正确过程是一个混乱的过程(没有文档记录)。他们只是说您可以实现自己的SpatialSupportInitializer
,但是之后如何使用它是一个谜。
从文档中看,显然还有一种使用其他SAIL的方法,但同样,这还不清楚。
任何人都可以为我提供一些指导,或者至少是一段代码,向其展示如何将SpatialAlgebra
或SpatialSupport
或SpatialSupportInitializer
实际传递给引擎不是默认的吗?还是已经存在实现所有这些方法的SAIL,该如何使用?谢谢。
PS:我实际上是依靠2.4.0 M2版本的RDF4J,它似乎没有org.eclipse.rdf4j.query.algebra.evaluation.function.geosparql
包(我手动导入)。我也尝试使用2.3.1版,但是遇到了同样的问题。
答案 0 :(得分:2)
更新自RDF4J 2.4.0-M3起,GeoSPARQL功能支持更加全面。 improved documentation提供了所有受支持功能的完整列表,并希望对如何开始使用GeoSPARQL提供更好的解释。简短而有趣的是,您需要做的就是添加以下Maven模块:
<dependency>
<groupId>org.eclipse.rdf4j</groupId>
<artifactId>rdf4j-queryalgebra-geosparql</artifactId>
<version>2.4.0-M3</version>
</dependency>
您可以在任何类型的RDF4J存储库上使用GeoSPARQL。
RDF4J还支持其他几项GeoSPARQL函数:除了 distance
,union
,intersection
,symDifference
,{{1} },difference
,convexHull
,boundary
和envelope
也至少受支持。不幸的是,getSRID
当前不属于默认设置。这主要是由于RDF4J在早期版本的JTS库中存在许可问题(需要多边形支持)。但是,作为LocationTech项目的一部分,已经完成了更多的JTS发布,并且这些许可证问题已得到解决,因此我们希望能够在不久的将来进行扩展(在https://github.com/eclipse/rdf4j-storage/issues/89处存在跟踪该问题的问题)。