!a在SPARQL中是什么意思?

时间:2019-03-28 18:18:00

标签: sparql

我正在使用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是什么意思? (我知道ardf:type的快捷方式,但这还不能帮助我理解。)

1 个答案:

答案 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