我如何编写sparql查询,我可以比较变量(?a,?b),如果我有以下例如? (这有什么问题吗?):
<ont:XXXXX rdf:about="http://www.myOntDomain#C">
<ro:part_of rdf:resource="http://www.myOntDomain#A">
<ro:part_of rdf:resource="http://www.myOntDomain#B">
</ont:XXXXX>
这不能给我我想要的东西:
select ?s ?a ?b
where {
?s a ont:XXXXX; ro:part_of ?a; ro:part_of ?b .
filter(str(?a) = "http://www.myOntDomain#A" && str(?b) = "http://www.myOntDomain#B")
}
我想:
http://www.myOntDomain#C http://www.myOntDomain#A http://www.myOntDomain#B
非常感谢提前。
答案 0 :(得分:3)
您的问题,或者更确切地说是您的意图,是相当不清楚的,因为您编写的查询中唯一未知的是:C
。您已经知道:A
和:B
的身份,因为您在查询本身中引用了他们的URI 。
我可以想到你想要做的两种解释:
首先,您只想知道?s
ont:XXXXX
并且part_of
:A
和:B
:
select ?s where {
?s a ont:XXXXX ;
ro:part_of <http://www.myOntDomain#A> ;
ro:part_of <http://www.myOntDomain#B>
}
或者,您想知道?s
是ont:XXXXX
,并且(至少)有两个不同的部分:
select ?s ?a ?b where {
?s a ont:XXXXX ;
ro:part_of ?a, ?b
FILTER (?a != ?b)
}
如果这些都与您实际尝试的内容相匹配,则需要让问题更清晰。