-1

如果我有以下例如,我如何编写 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

提前谢谢了。

4

1 回答 1

3

您的问题,或者更确切地说是您的意图,相当不清楚,因为您所写的查询中唯一的未知数是:C. :A您已经知道and的身份:B,因为您在查询本身中引用了它们的 URI 。

我可以想到对您尝试做的事情的两种解释:

首先,您只想知道?swhich 是 an ont:XXXXXand has part_of :Aand :B

select ?s where {
    ?s a ont:XXXXX ;
       ro:part_of <http://www.myOntDomain#A> ;
       ro:part_of <http://www.myOntDomain#B>
}

或者,您想知道?swhich 是 anont:XXXXX和 which 具有(至少)两个不同的部分:

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

如果这些都不符合你实际想要做的,你需要让问题更清楚。

于 2012-05-14T22:53:46.400 回答