我有以下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中如下组合EXISTS
和BIND
:
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 |
---------------------------------