SPARQL不同运算符 SPARQL查询
我有一些SPARQL查询,如下所示:SPARQL不同运算符 SPARQL查询,sparql,Sparql,我有一些SPARQL查询,如下所示: SELECT DISTINCT ?name1 WHERE { GRAPH <blabla> { ?k swrc:author ?x . ?x foaf:name ?name1 . } . GRAPH <blabla2> { ?l swrc:author ?y .
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) .
}
选择不同的名称1
在哪里{
图表
{
k swrc:作者?x。
x foaf:名称?名称1。
} .
图表
{
l swrc:作者?y。
y foaf:姓名?姓名2。
} .
过滤器(?x!=?y)。
}
我想获得仅存在于第一个图形blabla
中的名称
问题
与直觉相反,我得到了一些实际上属于交叉点的名字。这是因为b(集合A的)=b(集合b的)
问题:
的语义到底是什么=代码>?我怎样才能超越这个问题?的语义=代码>的左参数与右参数不相等。但是,过滤器会针对每个可能的值组合进行计算-因此,在制定查询时,它将返回?x
的所有名称值,其中?y
的某些值不等于该值
如果只想获取?x
的名称值,而?y
的所有值都不等于该值,则应使用不存在
子句:
SELECT DISTINCT ?name1
WHERE {
GRAPH <blabla>
{
?k swrc:author ?x.
?x foaf:name ?name1.
}
FILTER NOT EXISTS {
GRAPH <blabla2>
{
?l swrc:author ?x.
}
}
选择不同的名称1
在哪里{
图表
{
k swrc:作者?x。
x foaf:名称?名称1。
}
筛选器不存在{
图表
{
l swrc:作者?x。
}
}
}
注意,使用这种方法实际上可以完全去掉变量?y
:您可以更改条件,只检查在第一个图中找到的author?x
在第二个图中是否也出现 命名图只是三元组的集合。它不“拥有”三元组中出现的资源。RDF资源可以是URI、空白节点或文本。无论URI出现在哪个图形中,它都是相同的。这实际上是使用URI作为标识符的一个重要特性。这意味着你可以描述某些资源,其他人也可以。考虑到URI是相同的,无论它们出现在哪里,这似乎与你前面的问题重复,模块化了你正在使用不同的模式绑定变量的事实。这仍然是一个问题:如果你想要一个集差{e:e在a中,e不是在B}
,你需要一个类似..的查询。e是a的一个元素。。。筛选器不存在{…?e是B…}的元素
。