2017-05-18 58 views
0

給定一個具有多個相同屬性的主體,是否可以檢索它們指向的所有對象/值,而無需事先指定它們的數量?Sparql:如何檢索相同屬性的任意數量的值?

這個問題類似於這個one

實例數據(以上來自鏈接所):

@prefix example: <http://example.org/> . 
example:subject1 example:property example:object1 . 
example:subject1 example:property example:object2 . 
example:subject1 example:property example:object3 . 
... 

有可能通過獲得一個定義的對象的數量:

select ?subject ?object1/2/n 
where {?subject example:property ?object1, ?object2 .} 
filter(?object1 != ?object2). 

但如何做,如果我們不知道電話號碼提前發生的財產? (除了編程)。謝謝。

+0

你只需要'SELECT DISTINCT對象,其中{主題例如:??屬性對象}'?! –

+0

是的。對不起,查詢沒有完成,我會編輯問題。 – ecrin

回答

0

我想,你有點困惑Turtle syntax

事實上,

SELECT ?object1 
    WHERE { 
    ?subject example:property ?object1, ?object2 . 
    FILTER (?object1 != ?object2). 
    } 

只是一個語法糖:

SELECT ?object1 
    WHERE { 
    ?subject example:property ?object1 . 
    ?subject example:property ?object2 . 
    FILTER (?object1 != ?object2). 
    } 

這種模式所有這一切只能通過其對象是彼此不同的三元組相匹配。
我想,「一個具有多個相同屬性的主體」(來自你的問題)意味着「對同一個主題和同一個屬性存在不同的對象」。

該模式是對稱的,即如果:object1綁定到?object1的結果,然後:object1將綁定到?object2在另一個結果。此模式無論是否存在具有不同對象:object3的任何第三個三元組都是無關緊要的,但如果存在,:object3將在另一個結果中綁定到?object1

你也可以嘗試這樣的事情更好地理解:

SELECT DISTINCT ?object1 
    WHERE { 
    ?subject example:property ?object1 . 
    FILTER EXISTS { 
     ?subject example:property ?object2 . 
     FILTER (?object1 != ?object2) 
     } 
    } 
+1

謝謝你的回答。是的,我的意思是「對同一主題和同一個屬性存在不同的對象」。我理解語法糖,但不知道/認識到過濾後的模式可以通過強制2個三元組來區別所有不同的對象。如果我理解得當:任何匹配主題和屬性的三元組都會返回(這實際上是模式的本質,它們適合多種情況(!))。謝謝,現在它更清晰了! – ecrin