2015-11-15 10 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'。感谢您花时间回答,我希望其他人在未来发现它有用。 –