如何使用SPARQL查找两个属性不共享任何相同对象的实例?

如何使用SPARQL查找两个属性不共享任何相同对象的实例?,sparql,rdf,Sparql,Rdf,在我公司的分类法中,所有概念都有一个值用于skos:prefLabel,大多数概念都有一组自定义属性的值——我们称之为ex:keyword——其值的数据类型为rdf:langString。我想找到这样的概念,当忽略大小写和语言时,skos:prefLabel的值与ex:keyword的任何值都不完全匹配 为值匹配的概念编写查询非常简单,如下所示: SELECT * WHERE { ?concept skos:prefLabel ?label ; ex:keyword ?kw FI

在我公司的分类法中,所有概念都有一个值用于skos:prefLabel,大多数概念都有一组自定义属性的值——我们称之为ex:keyword——其值的数据类型为rdf:langString。我想找到这样的概念,当忽略大小写和语言时,skos:prefLabel的值与ex:keyword的任何值都不完全匹配

为值匹配的概念编写查询非常简单,如下所示:

SELECT *
WHERE {
  ?concept skos:prefLabel ?label ;
    ex:keyword ?kw
  FILTER (lcase(str(?label)) = lcase(str(?kw)))
}
我被绊倒的地方是试图否定这一点

使用
=只会返回一组情况,其中?label?kw不匹配,这不是我想要的

我想要的是能够使用一个不存在的过滤器,但是这对于像
(?a=?b)
这样的表达式是无效的;它只适用于像
{a?b?c}
这样的东西


我怀疑有一种合适的方式来表示SPARQL中不存在
过滤器(?a=?b)
,但我不知道它是什么。有人能帮忙吗?

诀窍是将匹配关键字的三重模式放在
过滤器不存在的地方,如下所示:

SELECT *
WHERE {
  ?concept skos:prefLabel ?label .
  FILTER NOT EXISTS { ?concept ex:keyword ?kw .
                      FILTER(lcase(str(?label)) = lcase(str(?kw))) 
                    }
}
此查询表示“我希望所有概念都具有preflabel,以便该概念没有与该preflabel匹配的关键字值”