Sparql 过滤器不存在,产生混乱的结果
我在sparql中尝试了以下查询:Sparql 过滤器不存在,产生混乱的结果,sparql,Sparql,我在sparql中尝试了以下查询: Select distinct (count(?jel) AS ?jelCount ) Where { ?jel a skos:Concept . ?jel skos:prefLabel ?label . Filter not Exists { ?jel skos:narrower ?narrower . ?jel skos:notation ?notation . } } 然而,它并没有给我
Select distinct (count(?jel) AS ?jelCount )
Where {
?jel a skos:Concept .
?jel skos:prefLabel ?label .
Filter not Exists {
?jel skos:narrower ?narrower .
?jel skos:notation ?notation .
}
}
然而,它并没有给我想要的答案,它实际上什么都没有过滤
但是如果我写:
Select distinct (count(?jel) AS ?jelCount )
Where {
?jel a skos:Concept .
?jel skos:prefLabel ?label .
Filter not Exists {
?jel skos:narrower ?narrower .
}
Filter not Exists {
?jel skos:notation ?notation .
}
}
然后我得到了我想要的答案
我无法解释为什么?有人能告诉我这一点吗?在SPARQL中,每个模式的整体(由
{}
表示)必须匹配才能产生效果
因此,您的第一个查询要求项目中不存在skos:slowner
和skos:notation
三元组的项,因为它们处于相同的过滤器不存在的模式中。假设数据中的某个项目没有同时存在这两个三元组的项目,因此不会过滤掉任何内容
但是,在第二次查询中,您要求的项目中,skos:slower
或skos:notation
的项不存在(因为每个项都在一个单独的过滤器中,不存在模式)。由于您的数据中有些项目有这些三元组,因此有些内容会被过滤掉。微妙但“合乎逻辑”,完全“合乎逻辑”:!谢谢