Что значит! Означает в SPARQL? - PullRequest
3 голосов
/ 28 марта 2019

Я использую 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, но это еще не помогает мне понять.)

1 Ответ

6 голосов
/ 29 марта 2019

!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.

...