我有以下RDF模型:

@prefix : <http://test.com/#> .

:graph1   :hasNode   :node1 ;
          :centerNode   :node1 .

:graph1   :hasNode   :node2 .
:graph1   :hasNode   :node3 .


我想运行一个SPARQL查询,其中如果:nodeX与带有谓词:graphX:centerNode相关,则返回true(或其他指示),否则返回false;结果如下所示:

?n       ?g        ?centered
-----------------------------
:node1   :graph1   true
:node2   :graph1   false
:node3   :graph1   false


在SPARQL 1.0中有没有办法做到这一点?如果没有,可以在SPARQL 1.1中完成吗?

最佳答案

您可以在SPARQL 1.1中如下组合EXISTSBIND

PREFIX : <http://test.com/#>

SELECT * WHERE {
  ?graph :hasNode ?node .
  BIND( EXISTS { ?graph :centerNode ?node } as ?isCentered )
}


使用Jena的ARQ,我得到以下结果:

$ /usr/local/lib/apache-jena-2.10.0/bin/arq \
   --data predicate.n3 \
   --query predicate.sparql
---------------------------------
| graph   | node   | isCentered |
=================================
| :graph1 | :node3 | false      |
| :graph1 | :node2 | false      |
| :graph1 | :node1 | true       |
---------------------------------

08-25 10:32