2012-08-07 24 views
9

pracuję nad semantycznych wstęg i zastanawiam się: czy jest jakaś różnica w semanitc pisania ograniczenie jak:sowa: allValuesFrom i rdfs: zakres różnica

:Person 
    a owl:Class ; 
    rdfs:subClassOf 
    [ a owl:Restriction ; 
     owl:onProperty :hasParent ; 
     owl:allValuesFrom :Person 
    ] . 

i pisania ograniczenie zakresu takiego :

:hasParent rdfs:range :Person. 

Wydaje mi się, że oznacza to samo: rodzic musi mieć typ Osoby. Czy nie ma żadnej różnicy?

Odpowiedz

9

Pierwszy fragment kodu oznacza, że ​​:Person, który ma rodzica, musi mieć koniecznie numer :Person. Jednak na przykład :Dog może mieć rodzica, który nie jest :Person. Drugi fragment mówi, że wszystko, co ma rodzica, koniecznie ma pewną granicę, niezależnie od tego, co to jest.

Edit po komentarzu krajol za:

allValuesFrom ograniczenie pierwszym fragmencie nie jest równoznaczne z:

:hasParent rdfs:domain :Person; 
      rdfs:range :Person . 

W przypadku ograniczenia allValuesFrom, nadal jest możliwe, że istnieją rodzice, które są nie osoby. W przypadku kombinacji rdfs:domain/rdfs:range nie jest to możliwe. Z ograniczeniami allValuesFrom można powiedzieć, że osoby mają osoby-rodziców, a psy mają rodziców-psów itp. Z domeną/zasięgiem nie można.

+0

Cóż, zgadza się. Ale jeśli oświadczenie takie jak: : hasParent rdfs: domain: Person. został dodany, czy byłby taki sam? – krajol

+0

@krajol, ustawienie domeny na ": Osoba" oznacza, że ​​każdy, kto ma rodzica, jest osobą. Jeśli połączysz to z powyższym ograniczeniem OWL, to tak, logiczną konsekwencją jest to, że wszystko, co ma rodzica, to Osoba, a wszystko, co jest rodzicem, jest Osobą. Różnica między domeną/zakresem z jednej strony a ograniczeniami klas z drugiej jest taka, że ​​domena/zakres są zawsze globalne, a ograniczenia klas są ważne tylko dla klasy, w której je zdefiniowano. –

1

Warto zauważyć jeszcze jedną różnicę. Gdy istnieje więcej niż jeden plik rdfs: range (lub rdfs: domain) potrójny dla klasy, zakres lub domena to koniunkcja (przecięcie) podanych zakresów/domen. Zobacz the RDFS spec, choć sformułowanie jest niejednoznaczne i this post.

Jeśli przeprowadzana jest inferencja w ontologii, przekonasz się, że rdfs: zakres/domena są wnioskowane dla wszystkich nadklas o podanym zakresie/klasie/domenach. Chociaż jest semantycznie poprawny, może to być mylące lub trudne do pracy. Nie stanie się to z allValuesFrom.

+0

Co masz na myśli przez "to nie stanie się z allValuesFrom"? Jeśli masz ': Person rdfs: subClassOf [a owl: Restriction; owl: onProperty: hasParent; owl: allValuesFrom: Person] 'i': Person rdfs: subClassOf: Agent', następnie możesz wywnioskować, że ': Person rdfs: subClassOf [a owl: Restriction; owl: onProperty: hasParent; owl: allValuesFrom: Agent] '. –

0

(Dodanie odpowiedzi na już odpowiedział na pytanie, ponieważ znalazłem istotę akceptowane odpowiedź brakuje.)

[ a owl:Restriction ; 
    owl:onProperty :hasParent ; 
    owl:allValuesFrom :Person 
] 

można odczytać jako „klasę wszystkich rzeczy, dla których każda wartość dla hasParent orzecznika (potencjalnie brak) jest typu Person ".

Mówiąc, że Person jest podklasą tej klasy, mówimy, że jest to bardziej wyspecjalizowana wersja tej klasy. Tak więc Person nadal może mieć tylko inne Person s jako wartość dla hasParent.

Różni się to od rdfs:range, ponieważ nie oświadczamy o ważnej domenie/zasięgu dla samej hasParent. Aby odtworzyć Antoine's example, możemy jeszcze powiedzieć:

:dog1 a :Dog. 
:dog2 a :Dog. 
:dog1 :hasParent :dog2. 
+1

"Klasa wszystkich rzeczy, które mają osobę jako wartość predykatu hasParent" może wprowadzać w błąd. Ta klasa obejmuje na przykład rzeczy, które nie mają żadnej wartości dla właściwości 'hasParent'. Lepiej byłoby powiedzieć "klasa wszystkich rzeczy, których wszyscy rodzice są osobami". –

+0

Dobra uwaga - zaktualizowałem opis, aby wyjaśnić, że ma on również zastosowanie, gdy 'hasParent' nie występuje. – DieterDP