Как это работает "? Person rdf: type? P" и как выбрать правильный тип?Я не чувствую, что я установил переменную? Person как переменную типа Person (это класс, который я создал, и он описывает человека как сущность), даже если он выдает именно тот результат, который мне нужен.
Не выбирается правильный тип.Он выбирает a тип, любой тип (а также любой индивидуальный).Предположительно, причина того, что вы видите ожидаемый результат, заключается во второй части вашего запроса:
?person my:Nationality ?nationality.
В ваших данных это свойство есть только у физических лиц, поэтому только они будут соответствовать полному запросу (даже еслидругие люди, имеющие другой тип).
Принцип работы SPARQL - это, по сути, сопоставление с образцом.Вы указываете шаблон для своего графика RDF, переменные в запросе являются "дырами" в этом шаблоне.Независимо от того, какие части вашего графика соответствуют всему шаблону, будут возвращены.
Другими словами, ваш запрос запрашивает следующее: «дайте мне все, что имеет тип, и национальность».Может быть много вещей, которые имеют тип, но так как только люди имеют национальность, возвращаются только люди.
Если вы хотите, вы можете прямо заявить, что вас интересуют только лица типа Person,заменив переменную ?p
идентификатором класса для людей, например:
?person rdf:type my:Person.
?person my:Nationality ?nationality.