如何将SPARQL查询的结果重用于另一个查询?

时间:2013-07-19 09:43:45

标签: jquery sparql reusability

例如我有这个查询

SELECT ?x
WHERE {?x :has_input "z"}

然后我想使用?x的结果作为另一个查询的对象

SELECT ?y
WHERE {?y :uses "x"}

任何想法如何实现?提前致谢

1 个答案:

答案 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