具有可变服务的 Startdog 联合查询
Startdog Federated Query with variable service
我的 Stardog 数据库包含 SPARQL 端点的服务描述。我现在正在尝试 select 特定服务并在查询中调用它,如 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执行联邦查询?
Stardog,从 4.1 版开始,不支持服务 URL 的变量([=17= 中的 See the documentation). You can only have a variable in the service URL if you set the parameter value before execution, e.g. using --bind
option in the CLI or the Query.parameter(String,Value)
函数)。因此您需要先执行查询检索服务 URLs 对每个结果执行一个查询。
更新:从 5.2 版开始,Stardog 支持服务变量,因此此查询应该按原样工作。
我的 Stardog 数据库包含 SPARQL 端点的服务描述。我现在正在尝试 select 特定服务并在查询中调用它,如 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执行联邦查询?
Stardog,从 4.1 版开始,不支持服务 URL 的变量([=17= 中的 See the documentation). You can only have a variable in the service URL if you set the parameter value before execution, e.g. using --bind
option in the CLI or the Query.parameter(String,Value)
函数)。因此您需要先执行查询检索服务 URLs 对每个结果执行一个查询。
更新:从 5.2 版开始,Stardog 支持服务变量,因此此查询应该按原样工作。