2

例如我有这个查询

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

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

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

任何想法如何实现这一目标?提前致谢

4

1 回答 1

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为您查找值的查询,然后执行一个 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 |
----------
于 2013-07-19T12:49:29.727 回答