例如我有这个查询
SELECT ?x
WHERE {?x :has_input "z"}
然后我想使用 ?x
的结果作为另一个查询的对象
SELECT ?y
WHERE {?y :uses "x"}
有什么想法可以实现这一目标吗?提前致谢
最佳答案
为了举例,让我们定义一些数据:
@prefix : <http://example.org/> .
:node0 :has_input "w", "z" .
:node1 :has_input "x", "y" .
:node2 :has_input "y", "z" .
:node3 :uses :node2 .
:node4 :uses :node1 .
根据这些数据,并指定任何特定的 API(因为您没有指定),您将获得一些 SPARQL 级别选项。第一个是简单地组合查询,在本例中这很容易:
prefix : <http://example.org/>
select ?y where {
?x :has_input "z" .
?y :uses ?x .
}
$ arq --data data.n3 --query combined-query.sparql
----------
| y |
==========
| :node3 |
----------
另一种选择是使用子查询
prefix : <http://example.org/>
select ?y where {
{
select ?x where {
?x :has_input "z" .
}
}
?y :uses ?x .
}
$ arq --data data.n3 --query subquery.sparql
----------
| y |
==========
| :node3 |
----------
如果您必须单独执行查询,第三种可能是您实际需要的,即执行一个为您查找 ?x
值的查询,然后执行一个查询查找 ?y
,但 ?x
值嵌入 values
。第一个查询如下所示并返回:
prefix : <http://example.org/>
select ?x where {
?x :has_input "z" .
}
$ arq --data data.n3 --query xquery.sparql
----------
| x |
==========
| :node2 |
| :node0 |
----------
然后,根据这些值,创建 ?y
的查询:
prefix : <http://example.org/>
select ?y where {
values ?x { :node2 :node0 }
?y :uses ?x .
}
$ arq --data data.n3 --query yquery.sparql
----------
| y |
==========
| :node3 |
----------
关于jquery - 如何将 SPARQL 查询的结果重用于另一个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742950/