SPARQL中"FILTER NOT EXISTS"的机理



假设三元组如下:

@prefix  :       <http://example/> .
@prefix  rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix  foaf:   <http://xmlns.com/foaf/0.1/> .
:alice  rdf:type   foaf:Person .
:alice  foaf:name  "Alice" .
:bob    rdf:type   foaf:Person .  

然后我们基于SPARQL1.1:执行3个查询

Q1:

SELECT ?s 
WHERE 
{
?s ?p ?o .
FILTER NOT EXISTS { ?s foaf:name ?y }
} 

Q2:

SELECT ?s 
WHERE 
{
?s ?p ?o .
FILTER NOT EXISTS { ?x foaf:name ?y }
} 

Q3:

SELECT ?s 
WHERE 
{
?s ?p ?o .
FILTER NOT EXISTS { ?x foaf:mailbox ?y }
} 

这三个查询返回三个不同的解决方案。有人能帮我弄清楚为什么第二季度的评估结果与第一季度和第三季度相比没有查询解决方案吗?非常感谢:(

Q2不返回任何解决方案,因为在您的数据中存在与?x foaf:name ?y:?x = :alice?y = "Alice"匹配的语句。您没有对?x?y进行进一步的约束。因此,无论查询中的其他变量(?s?p?o(绑定到什么,NOT EXISTS条件都将始终失败,因此查询不会返回任何结果。

最新更新