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)?
问题
!=
的语义到底是什么?我怎样才能克服这个问题?
发布于 2014-01-31 05:12:01
!=
的语义就是它的左参数不等于右参数。但是过滤器是针对每个可能的值组合进行评估的-因此,您制定的查询将返回?x
的所有名称值,对于这些值,?y
的某些值不等于它。
如果您只想返回?y
的所有值都不等于的?x
的名称值,则应该使用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
:您可以更改条件,只检查第一个图中发现的author ?x
是否也出现在第二个图中。
https://stackoverflow.com/questions/21467292
复制相似问题