SPARQL代数:如果任何三元组不存在,则从命名图形中获取棘手的ASK

时间:2015-11-15 09:34:58

标签: sparql semantic-web linked-data triples named-graphs

取这两个命名图:

# graph :yesterday
:Foo 
     :likes :Bar ;
     :likes :Qux .

# graph :today
:Foo
    :likes :Bar ;
    :likes :Baz .

现在说你想知道图:yesterday中是否存在来自图:today的三元组中的任何三元组。您如何ASK此查询?

ASK
FROM NAMED :yesterday
FROM NAMED :today
{
    GRAPH :yesterday {
        ?s ?p ?o .
        ...
    }
}

1 个答案:

答案 0 :(得分: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 .
}