查询rdf三倍

时间:2012-05-14 20:25:11

标签: rdf sparql owl virtuoso

我如何编写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

非常感谢提前。

1 个答案:

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

或者,您想知道?sont:XXXXX,并且(至少)有两个不同的部分:

select ?s ?a ?b where {
    ?s a ont:XXXXX ;
       ro:part_of ?a, ?b
       FILTER (?a != ?b)
}

如果这些都与您实际尝试的内容相匹配,则需要让问题更清晰。