SPARQL不同的运算符

时间:2014-01-30 21:00:41

标签: sparql

SPARQL查询

我有一些SPARQL查询如下所示:

SELECT DISTINCT ?name1 
    WHERE {

        GRAPH <blabla>
        {
            ?k swrc:author ?x .
            ?x foaf:name ?name1 . 
        } .

        GRAPH <blabla2>
        {   
            ?l swrc:author ?y .
            ?y foaf:name ?name2 .
        } .

        FILTER(?x != ?y) . 
    }

我想获取仅存在于第一个图blabla中的名称。

问题

直观地反驳我得到一些实际属于交集的名字。这是因为b(集合A)= b(集合B)?

问题

!=的语义究竟是什么?我怎样才能超越这个问题?

1 个答案:

答案 0 :(得分:4)

!=的语义正是其左参数不等于其右参数。但是,对每个可能的值组合评估FILTER - 因此,在您制定它时,查询将返回?x的所有名称值,其中某些?y不是等于它。

如果您只想取回?x的{​​{1}}的名称值 ?y的所有值不等于它,那么您应该使用{{1子句:

NOT EXISTS

}

请注意,使用此方法您实际上可以完全删除变量SELECT DISTINCT ?name1 WHERE { GRAPH <blabla> { ?k swrc:author ?x. ?x foaf:name ?name1. } FILTER NOT EXISTS { GRAPH <blabla2> { ?l swrc:author ?x. } } :您将条件更改为仅检查第一个图表中找到的作者?y是否也不会出现在第二个图表中。