具有可变服务的Startdog联合查询

时间:2016-06-01 09:20:34

标签: stardog federated-queries

我的Stardog数据库包含SPARQL端点的服务描述。我正在尝试选择特定服务并在查询中调用它,如https://www.w3.org/TR/2013/REC-sparql11-federated-query-20130321/#values

中所述
PREFIX  void: <http://rdfs.org/ns/void#>
PREFIX  dc:   <http://purl.org/dc/elements/1.1/>
PREFIX  doap: <http://usefulinc.com/ns/doap#> 

SELECT ?service ?projectName
WHERE {
  # Find the service with subject "remote".
  ?p dc:subject ?projectSubject ;
     void:sparqlEndpoint ?service .
     FILTER regex(?projectSubject, "remote")

  # Query that service projects.
  SERVICE ?service {
     ?project  doap:name ?projectName . } 
}

不幸的是,Stardog抛出异常,告诉我该变量不是URI:

com.complexible.stardog.plan.eval.operator.OperatorException: Cannot execute a service query with a variable ref which binds to non-URI values

使用IRI构造函数在BIND语句中强制转换“?service”变量并使用绑定变量也无济于事。如何确保变量是IRI,以便让Stardog执行联合查询?

1 个答案:

答案 0 :(得分:2)

Stardog从版本4.1开始,不支持服务URL(See the documentation)的变量。如果在执行前设置参数值,则只能在服务URL中有一个变量,例如:在CLI中使用--bind选项或在API中使用Query.parameter(String,Value)函数。因此,您需要首先执行查询以检索服务URL,为每个结果执行一次查询。

更新:从版本5.2开始,Stardog支持服务变量,因此该查询应该按原样运行。