我在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 .
}
Filter not Exists {
?jel skos:notation ?notation .
}
}
然后我得到了我想要的答案。
我无法解释原因?有人可以赐教我吗?
答案 0 :(得分:1)
在SPARQL中,每个模式的整体(由{ }
表示)必须匹配才能生效。
因此,您的第一个查询会询问项目不存在{{1>}和skos:narrower
三元组 的项目,因为它们位于同一个skos:notation
图案。据推测,没有任何项目存在数据中的项目的三个三元组,因此没有任何过滤掉。
但是,在您的第二个查询中,您要求FILTER NOT EXISTS
或skos:narrower
的 不存在的项目(因为每个项目都是单独的skos:notation
模式)。由于数据中的某些项目存在一些三元组,因此有些内容会被过滤掉。