2012-05-14 69 views
-1

如何在我可以比較變量(?a,?b)的地方編寫sparql查詢,如果我有以下例子? (什麼是錯的這個如?):查詢rdf三元組

<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 

提前非常感謝。

回答

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) 
} 

如果這些都不符合你實際要做的事情,那麼你需要使問題更清楚。