class : Human
dataProperties :
hasName ( Domain: Human)
hasHeight ( Domain: Human)
hasWeight ( Domain: Human)
class : Man - subClassOf Human
dataProperties :
hasWife ( Domain: Man)
Я хочу использовать Sparql для запроса всех свойств данных класса: Man не только (hasWife), но и (hasName, hasHeight, hasWeight)
Во-первых, помните, что у классов нет свойств в OWL. Свойства могут иметь домены и диапазоны, но все это означает, что субъект (объект) утверждения является членом домена (диапазона). Хотя существует существует понятие класса, оно не совсем то же самое, что и в (однонаправленном) объектно-ориентированном языке программирования, где свойства "принадлежат" классам.
Тем не менее, похоже, что вы ищете все свойства, которые имеют домен Man или надкласс Man. (Обратите внимание, что я говорю «домен», а не «домен»; свойства могут иметь более одного домена. На самом деле, если вы скажете, что доменом hasWife является Man, тогда Human также является свойством hasWife; после все, если вы знаете, что hasWife(x,y), вы знаете, что x должен быть человеком.) Это не так уж сложно:
select ?p where {
?p rdfs:domain ?class .
:Man rdfs:subClassOf* ?class .
}
Это говорит о том, что нужно найти значения ?p, которые имеют домен ?class, где :Man подключен к ?class путем ссылок rdfs:subClassOf. Обозначение * означает, что путь может быть любой длины, включая нулевую. КОГДА длина пути равна нулю, это означает, что ?class равен :Man. На самом деле вы можете написать этот запрос немного более лаконично, если вы используете оператор ^ для создания обратных путей:
select ?p where {
?class ^rdfs:domain ?p ;
^rdfs:subClassOf* :Man
}
(«домен», потому что свойства могут иметь более одного домена.
person
Joshua Taylor
schedule
26.12.2014