Как внутренне работает выражение типа SPARQL (например,? A rdf: type? B)? - PullRequest
0 голосов
/ 24 мая 2018
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX my: <http://www.ex.com#>
SELECT distinct ?person ?nationality
WHERE{
    ?person rdf:type ?p.
    ?person my:Nationality ?nationality.
    filter (?nationality = "Some nationality")
}

Я создал онтологию в Протеже, которая описывает компанию по производству музыки.У меня проблемы с пониманием запросов SPARQL и способа их работы.

Некоторые пояснения

?person: переменная, в которой я хочу вывестилюди.Это люди в протеже

?nationality переменная, в которой я хочу выводить национальности.Это свойства данных в Protege

Nationality: свойство данных, которое содержит национальности в виде строк, и у каждого человека есть одно

my:Префикс, который я создал

Как это работает ?person rdf:type ?p и как выбрать правильный тип?Это работает автоматически?Я не чувствую, что установил переменную ?person в качестве переменной типа Person (это класс, который я создал, и он описывает человека как сущность), даже если он выдает именно тот результат, который мне нужен.

1 Ответ

0 голосов
/ 25 мая 2018

Как это работает "? Person rdf: type? P" и как выбрать правильный тип?Я не чувствую, что я установил переменную? Person как переменную типа Person (это класс, который я создал, и он описывает человека как сущность), даже если он выдает именно тот результат, который мне нужен.

Не выбирается правильный тип.Он выбирает a тип, любой тип (а также любой индивидуальный).Предположительно, причина того, что вы видите ожидаемый результат, заключается во второй части вашего запроса:

?person my:Nationality ?nationality.

В ваших данных это свойство есть только у физических лиц, поэтому только они будут соответствовать полному запросу (даже еслидругие люди, имеющие другой тип).

Принцип работы SPARQL - это, по сути, сопоставление с образцом.Вы указываете шаблон для своего графика RDF, переменные в запросе являются "дырами" в этом шаблоне.Независимо от того, какие части вашего графика соответствуют всему шаблону, будут возвращены.

Другими словами, ваш запрос запрашивает следующее: «дайте мне все, что имеет тип, и национальность».Может быть много вещей, которые имеют тип, но так как только люди имеют национальность, возвращаются только люди.

Если вы хотите, вы можете прямо заявить, что вас интересуют только лица типа Person,заменив переменную ?p идентификатором класса для людей, например:

?person rdf:type my:Person.
?person my:Nationality ?nationality.
...