我正在使用SPARQL构建查询,并希望排除某些结果。
我知道FILTER NOT EXISTS
可用于完成任务。例如:
SELECT * {
?sub a ?type .
FILTER NOT EXISTS {?sub a :NotExpectedType.}
}
但是在探索过程中,我偶然发现自己可以写!a
。这是有效的SPARQL查询,但结果与FILTER NOT EXISTS
不同。例如:
SELECT * {
?sub a ?type .
?sub !a :NotExpectedType .
}
那么!a
是什么意思? (我知道a
是rdf:type
的快捷方式,但这还不能帮助我理解。)
答案 0 :(得分:6)
!a
是一个属性路径,它表示“长度为rdf:type
以外的其他属性的路径”。
SELECT ?x {
?x a ?type.
FILTER NOT EXISTS { ?x a :MyClass }
}
上面的查询将找到?x
,其中不存在三元组?x rdf:type :MyClass
。
SELECT ?x {
?x a ?type.
?x !a :MyClass.
}
该查询将找到?x
以外的?x ?property :MyClass
的三个?property
存在的rdf:type
。