例如我有这个查询
SELECT ?x
WHERE {?x :has_input "z"}
然后我想使用?x
的结果作为另一个查询的对象
SELECT ?y
WHERE {?y :uses "x"}
任何想法如何实现?提前致谢
答案 0 :(得分:1)
为了举例,让我们定义一些数据:
@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
的值的查询,然后执行查找{{1 },但?y
值嵌入了values
。第一个查询看起来像并返回:
?x
然后,根据这些值,您可以为prefix : <http://example.org/>
select ?x where {
?x :has_input "z" .
}
$ arq --data data.n3 --query xquery.sparql
----------
| x |
==========
| :node2 |
| :node0 |
----------
创建查询:
?y