例如我有这个查询
SELECT ?x
WHERE {?x :has_input "z"}
然后我想将结果?x
作为对象用于另一个查询
SELECT ?y
WHERE {?y :uses "x"}
任何想法如何实现这一目标?提前致谢
例如我有这个查询
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
为您查找值的查询,然后执行一个 find 的查询?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 |
----------