gpt4 book ai didi

java - RDF4J 和 GEOSparql 空间函数不起作用(或未实现)

转载 作者:行者123 更新时间:2023-11-30 02:05:13 30 4
gpt4 key购买 nike

我正在使用 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包中的代码,以了解我可能应该了解一些类和接口(interface)实现和扩展,例如SpatialAlgebraSpatialSupportSpatialSupportInitializer。看起来许多功能并未完全(或部分)在空间逻辑中实现。显然,有一个 DefaultSpatialAlgebra 返回大量 notSupported。不管怎样,理解什么是让 GEOSPARQL 正常工作的正确过程是相当困惑的(并且没有记录)。他们只说你可以实现自己的SpatialSupportInitializer,但之后如何使用它是一个谜。

从文档来看,显然还有一种使用其他 SAIL 的方法,但同样,对此还不清楚。

任何人都可以为我提供一些指导,或者至少提供一段代码,其中显示如何实际将 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函数支持更加全面。 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 , difference , convexHull , boundary , envelope ,和getSRID也至少得到支持。 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 本身中。

关于java - RDF4J 和 GEOSparql 空间函数不起作用(或未实现),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51561417/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com