1

我正在使用 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,、。看起来许多功能没有完全(或部分)在空间逻辑中实现。显然,有一个返回很多. 无论如何,理解什么是让 GEOSPARQL 正常工作的正确程序是一团糟(并且没有记录)。他们只说你可以实现你自己的,但之后如何使用它是一个谜。SpatialSupportSpatialSupportInitializerDefaultSpatialAlgebranotSupportedSpatialSupportInitializer

从文档中,显然还有一种使用其他 SAIL 的方法,但同样,对此一无所知。

任何人都可以为我提供一些指导,或者至少是一段代码,其中显示了如何实际传递给引擎 a SpatialAlgebraor SpatialSupportor SpatialSupportInitializer,这不是默认的吗?或者是否有任何现有的 SAIL 实现了所有这些方法,我该如何使用它?谢谢。

PS:我其实是依赖2.4.0 M2版本的RDF4J,里面好像没有org.eclipse.rdf4j.query.algebra.evaluation.function.geosparql包(我手动导入的)。我也尝试使用 2.3.1 版本,但我遇到了同样的问题。

4

1 回答 1

2

更新自 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不幸的是,目前不是默认设置的一部分。这主要是由于 RDF4J 与先前版本的 JTS 库(多边形支持所必需的)存在许可问题。然而,最近的 JTS 版本是作为 LocationTech 项目的一部分完成的,并且这些许可证问题已经解决,所以我们希望能够在不久的将来扩展它(在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 实现而不是它自己的实现。 底线是:这都是非常测试版的。坦率地说,如果您认为您可以使用我上面提到的解决方法来处理实现额外的 GeoSPARQL 函数,那么我们很乐意在实际将其添加到 RDF4J 本身时获得您的意见(如果可能的话,还有您的帮助)。
于 2018-08-01T10:14:59.970 回答