2015-11-15 11 views

回答

5

SPARQL有兩種用於否定的操作:使用你最自然的操作。當我閱讀問題描述時,它更像下面的第一個問題,但在這種問題情況下,它們非常相似。當模式的某個部分或其他部分與任何內容不匹配或者沒有共同的變量時,它們的效果會有所不同。

NOT EXISTS測試模式的不存在(還有EXISTS)。它是應用於第一個模式的每個解決方案的過濾器。它就像一個嵌套的ASK,其中變量被替換爲傳入的過濾器。

PREFIX : <http://example/> 
SELECT * { 
    GRAPH :yesterday { ?s ?p ?o } 
    FILTER NOT EXISTS { GRAPH :today { ?s ?p ?o } } 
} 

MINUS執行兩種模式(左右兩側),然後在沒有匹配的一個右側任意位置以返回左邊的行。這是一個反連接。

PREFIX : <http://example/> 
SELECT * { 
    GRAPH :yesterday { ?s ?p ?o } 
    MINUS { GRAPH :today { ?s ?p ?o } } 
} 

對於這兩個我得到:

------------------------ 
| s | p  | o | 
======================== 
| :Foo | :likes | :Qux | 
------------------------ 

TRIG:

@prefix : <http://example/> . 

:yesterday { 
    :Foo 
    :likes :Bar ; 
    :likes :Qux . 
} 

:today { 
    :Foo 
    :likes :Bar ; 
    :likes :Baz . 
} 
+1

感覺有點傻,現在可以用來遺忘的命名圖形時,我拉我的頭髮試圖找出正確的爲什麼我的過濾器不存在塊不會過濾':Bar'。感謝您花時間回答,我希望其他人在未來發現它有用。 –