SPARQL 三角函数

SPARQL trigonometric functions

我正在使用 Sesame 服务器来存储和查询三元组集。在我的存储库中,我有一组三元组,代表地球上由经度和纬度定义的位置。

示例:

PREFIX ont:<http://example.org/myontology.owl#>

<http://foo.com/location-a> a ont:Location.
<http://foo.com/location-a> ont:hasLatitude "25.91239"^^xsd:double.
<http://foo.com/location-a> ont:hasLongitude "30.3911"^^xsd:double.

<http://foo.com/location-b> a ont:Location.
<http://foo.com/location-b> ont:hasLatitude "15.7778"^^xsd:double.
<http://foo.com/location-b> ont:hasLongitude "13.6755"^^xsd:double.

...

我想编写一个查询,返回由圆心(Latidude_Center、Longitude_Center)和半径(以公里为单位)定义的圆表面上的所有位置或学位)。

为了实现这个目标,我必须使用一些暗示三角函数的数学公式。据我所知SPARQL不支持三角函数。

是否有其他方法可以创建此功能?

您可以自己以编程方式向 Sesame 的 SPARQL 引擎添加自定义函数。前段时间我写了 a tutorial 介绍如何做到这一点。它的要点是:

  1. 为实现 org.openrdf.query.algebra.evaluation.function.Function 接口的函数创建一个 class。

例如:

public class SinusFunction implements Function {

     /** return the name of the function for use in SPARQL */
     public String getURI() {
          return "http://example.org/function/sin";
     }

     public Value evaluate(ValueFactory valueFactory, Value... args)
         throws ValueExprEvaluationException
     {
           // TODO implement computing the function return value
           // based on the input args 
     }
}
  1. 为您的自定义函数创建一个带有服务提供商接口 (SPI) 注册表配置的 jar。

这涉及到在 jar 文件的 META-INF/services 目录中有一个名为 org.openrdf.query.algebra.evaluation.function.Function 的文件。该文件的内容应该是每个函数实现的完全限定名称,每行一个。

  1. 将您的 jar 放到 Sesame Server 的运行时 classpath 某处,然后重新启动。