class : Human
dataProperties :
hasName ( Domain: Human)
hasHeight ( Domain: Human)
hasWeight ( Domain: Human)
class : Man - subClassOf Human
dataProperties :
hasWife ( Domain: Man)
Искам да използвам Sparql за запитване на всички свойства на данните на Class: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