Internet Semantyczny Wstęp do OWL 2
RDFS Podstawowymi elementami które określamy w RDFS są klasy (ang. class) zasobów i właściwości (ang. property) zasobów charakterystyczne dla interesującego nas fragmentu rzeczywistości. Schematy RDF pozwalają nam określić słownictwo, które może być wykorzystane w stwierdzeniach RDF. Schematy RDF posiadają jednak pewne ograniczenia
RDFS ograniczenia
Ontology Web Language W celu bardziej precyzyjnego opisywania wybranych fragmentów rzeczywistości potrzebujemy rozszerzyć możliwości języka RDFS. Rozszerzeniem takim jest język OWL (ang. Ontology Web Language) służący do opisu ontologii. Definicja (Gruber) Ontologia to formalna specyfikacja konceptualizacji pewnego obszaru wiedzy czy opisu elementów rzeczywistości.
OWL Klasy klasy podklasy klasy równoważne klasy rozłączne Możliwości definiowania klas: suma przecięcie dopełnienie ograniczanie właściwości ograniczenia kardynalne właściwości wprost
OWL - właściwości (relacje) właściwości obiektowe właściwości danych podwłaściwości właściwości odwrotne właściwości: symetryczne asymetryczne zwrotne przeciwzwrotne przechodnie funkcjonalne odwrotnie funkcjonalne łańcuchy właściwości
Uwagi 1) Mówimy o elementach, reprezentantach, instancjach, obiektach klas. 2) 3) Fragmenty ontologii Inne fragmenty prefiksy rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# rdfs: http://www.w3.org/2000/01/rdf-schema# owl: http://www.w3.org/2002/07/owl#
Klasy Definicja klasy: klasa rdf:type owl:class. gdzie owl:class jest klasą wszystkich klas. Klasy Publikacja, Ksiazka, PublikcjaInternet definiujemy następująco: :Publikacja rdf:type owl:class. :Ksiazka rdf:type owl:class. :PublikacjaInternet rdf:type owl:class.
Klasy Przynależność do klasy: element rdf:type klasa. Zasoby Marek i Iza należą do klasy osób (Person): :Marek rdf:type :Person. :Iza rdf:type :Person. Zasób może należeć do wielu klas jednocześnie: :Marek rdf:type :Man. :Iza rdf:type :Woman.
Hierarchie klas Klasa może być podklasą innej klasy: klasa1 rdfs:subclassof klasa2. Klasa kobiet jest podklasą klasy osób: Wnioskowanie: :Woman rdfs:subclassof :Person. A rdfs:subclassof B. r rdf:type A. r rdf:type B.
Hierarchie klas Wnioskowanie: :Mother rdfs:subclassof :Woman. :Iza rdf:type :Mother. :Iza rdf:type :Woman. :Woman rdfs:subclassof :Person. :Mother rdfs:subclassof :Woman. :Iza rdf:type :Mother. :Iza rdf:type :Woman. :Iza rdf:type :Person.
Klasy równoważne Zdarza się, że dwie klasy odnoszą się do tych samych zbiorów: klasa1 owl:equivalentclass klasa2. czyli do klasy klasa1 należą te same elementy co do klasy klasa2. Klasa osób jest równoważna klasie ludzi: :Person owl:equivalentclass :Human.
Klasy rozłączne W języku OWL możemy także wyrazić rozłączność klas: [] rdf:type owl:alldisjointclasses ; owl:members ( klasa1 klasa2 ). czyli klasa1 i klasa2 są rozłączne. Klasy kobiet i mężczyzn są rozłączne: [] rdf:type owl:alldisjointclasses ; owl:members ( :Woman :Man ).
Właściwości obiektowe Do tej pory zajmowaliśmy się klasami i zależnościami między nimi: rdfs:subclassof owl:equivalentclass owl:alldisjointclasses Zajmiemy się teraz elementami klas (zasobami) i zależnościami między nimi czyli tzw. właściwościami obiektowymi. właściwość rdf:type owl:objectproperty.
Właściwości obiektowe haswife jest tzw. właściwością obiektową określającą pewną relację między elementami klas. Ważna jest kolejność, zatem :Marek :haswife :Iza. Ale oczywiście nie możemy zapisać: Chociaż może być tak: :Iza :haswife :Marek. :Iza :iswifeof :Marek.
Właściwości obiektowe OWL pozwala zapisać, że między wybranymi elementami relacja nie zachodzi: [] rdf:type owl:negativepropertyassertion ; owl:sourceindividual element1 ; owl:assertionproperty właściwość ; owl:targetindividual element2. Iza nie jest żoną Marka: [] rdf:type owl:negativepropertyassertion ; owl:sourceindividual :Marek ; owl:assertionproperty :haswife ; owl:targetindividual :Iza.
Hierarchie właściwości Właściwość może być podwłaściwością innej właściwości: właściwość1 rdfs:subpropertyof właściwość2. Bycie matką jest podwłaściwością bycia rodzicem : Wnioskowanie: :ismotherof rdfs:subpropertyof :isparentof. P rdfs:subpropertyof R. x P y. x R y.
Hierarchie właściwości Wnioskowanie: :ismotherof rdfs:subpropertyof :isparentof. :Iza :ismothertof :Tomek; :Iza :isparentof :Tomek.
Hierarchie właściwości :hasdaughter rdfs:subpropertyof :haschild.
Dziedzina właściwości Język OWL pozwala określić dziedzinę (domain) właściwości. Definicja dziedziny: właściwość rdfs:domain klasa. Jakie jest znaczenie rdfs:domain? Wnioskowanie: P rdfs:domain R. x P y. x rdf:type R.
Dziedzina właściwości rdfs:domain - określa dziedzinę właściwości P tzn. klasę zasobów, które mogą się pojawić jako zasób z właściwością P. Jeżeli dziedzina nie jest określona może nią być dowolna klasa. Wnioskowanie: :tytul rdfs:domain :Publikacja. :x1 :tytul :x2. :x1 rdf:type :Publikacja.
Zakres właściwości Język OWL pozwala określić zakres (range) właściwości: Definicja dziedziny: właściwość rdfs:range klasa. Jakie jest znaczenie rdfs:range? Wnioskowanie: P rdfs:range R. x P y. y rdf:type R.
Zakres właściwości rdfs:range - określa zakres właściwości P tzn. klasę zasobów, które mogą się pojawić jako wartość właściwości P. Wnioskowanie: :autor rdfs:range :Osoba. :x1 :autor :x2. :x2 rdf:type :Osoba.
Dziedzina i zakres Wnioskowanie: :haswife rdfs:domain :Man ; rdfs:range :Woman. :Marek :haswife :Iza. :Marek rdf:type :Man. :Iza rdf:type :Woman.
Nic nie stoi jednak na przeszkodzie żeby elementy a1 i a3 były tym samym elementem. Chyba, że jawnie wykluczymy taką możliwość Klasy rozłączne [] rdf:type owl:alldisjointclasses ; owl:members ( :Woman :Man ). :a1 rdf:type :Man. :a2 rdf:type :Woman. Ponieważ klasy kobiet i mężczyzn są rozłączne zatem elementy a1 i a2 nie mogą być tym samym elementem. :a3 rdf:type :Man.
Elementy różne W języku OWL możemy zapisać, że dwa elementy są różne: element1 owl:differentfrom element2. czyli element1 jest różny od element2. Marek to nie Piotrek: :Marek owl:differentfrom :Piotrek.
Elementy równe W języku OWL możemy zapisać, że dwa elementy są równe (tożsame): element1 owl:sameas element2. czyli element1 jest tożsamy z element2. Tomasz to Tomek: :Tomasz owl:sameas :Tomek.
Właściwości danych Właściwości obiektowe opisują zależności (relacje) między elementami klas (zasobami). Właściwości danych opisują cechy (atrybuty) obiektów i ich wartościami mogą być różne typy danych. Iza jest żoną Marka: Definicja: właściwość rdf:type owl:datatypeproperty. :Marek :hasage 45. :hasage rdf:type owl:datatypeproperty; rdfs:domain :Person ; rdfs:range Marcin Skulimowski, xsd:nonnegativeinteger Wydział Fizyki i.
RDFS i OWL
Przecięcie klas W języku OWL możemy zdefiniować klasę jako przecięcie dwóch innych klas: Klasa owl:equivalentclass [ rdf:type owl:class ; owl:intersectionof ( Klasa1 Klasa2 ) ]. czyli Klasa to przecięcie klas Klasa1 i Klasa2.
Przecięcie klas Wnioskowanie: :Mother owl:equivalentclass [ rdf:type owl:class ; owl:intersectionof ( :Woman :Parent ) ]. :Iza rdf:type :Mother. :Iza rdf:type :Woman. :Iza rdf:type :Parent.
Suma klas W języku OWL możemy zdefiniować klasę jako sumę dwóch innych klas: Klasa owl:equivalentclass [ rdf:type owl:class ; owl:unionof ( Klasa1 Klasa2 ) ]. czyli Klasa to suma klas Klasa1 i Klasa2.
Suma klas Wnioskowanie: :Parent owl:equivalentclass [ rdf:type owl:class ; owl:unionof ( :Mother :Father ) ]. :Iza rdf:type :Mother. :Iza rdf:type :Parent.
Dopełnienie klasy W języku OWL możemy zdefiniować klasę jako dopełnienie innej klasy. Do dopełnienia klasy A należą te elementy które nie należą do A. Klasa1 owl:equivalentclass [ rdf:type owl:class ; owl:complementof Klasa2 ]. czyli Klasa1 jest dopełnieniem Klasa2.
Dopełnienie klasy :NotParent owl:equivalentclass [ rdf:type owl:class ; owl:complementof :Parent ]. Do klasy NotParent należy każdy element który nie należy do klasy Parent. Klasa osób bezdzietnych :ChildlessPerson owl:equivalentclass [ rdf:type owl:class ; owl:intersectionof ( :Person [ owl:complementof :Parent ] ) ].
Ograniczenia właściwości W języku OWL klasy możemy definiować wykorzystując właściwości, a dokładnie ograniczając właściwości. Klasę Parent możemy zdefiniować jako klasę tych zasobów w przypadku których właściwość haschild przyjmuje dowolną wartość z klasy Person. Klasę HappyPerson możemy zdefiniować jako klasę tych zasobów w przypadku których właściwość haschild przyjmuje tylko wartości z klasy HappyPerson lub nie jest określona (???).
Ograniczenia właściwości Kwantyfikacja egzystencjalna definiuje klasę elementów, które są połączone pewną właściwością (relacją) z elementami należącymi do innej klasy. Klasa1 owl:equivalentclass [ rdf:type owl:restriction ; owl:onproperty właściwość; owl:somevaluesfrom Klasa2 ]. czyli każdy element Klasa1 posiada właściwość której wartością jest jakiś element Klasa2.
Ograniczenia właściwości Formalnie: :Parent owl:equivalentclass [ rdf:type owl:restriction ; owl:onproperty :haschild ; owl:somevaluesfrom :Person ]. Dla każdego elementu klasy rodzic istnieje dziecko będące elementem klasy osoba. A zatem z faktu, że Iza jest rodzicem wynika, że posiada jakieś (przynajmniej jedno) dziecko (wiedza niekompletna).
Ograniczenia właściwości :ParentOfGirl owl:equivalentclass [ rdf:type owl:restriction ; owl:onproperty :haschild ; owl:somevaluesfrom :Girl ].
Ograniczenia właściwości
Ograniczenia właściwości Kwantyfikacja uniwersalna definiuje klasę elementów, które jeżeli posiadają pewną właściwością to jej wartościami są elementy z pewnej klasy. Klasa1 owl:equivalentclass [ rdf:type owl:restriction ; owl:onproperty właściwość; owl:allvaluesfrom Klasa2 ]. czyli jeżeli element Klasa1 posiada właściwość to jej wartością jest na pewno element Klasa2 ale może nie posiadać tej właściwości!
Ograniczenia właściwości Formalnie: :HappyPerson owl:equivalentclass [ rdf:type owl:restriction ; owl:onproperty :haschild ; owl:allvaluesfrom :HappyPerson ]. Osoba szczęśliwa to osoba posiadająca szczęśliwe dzieci (lub nie posiadająca w ogóle dzieci). A zatem z faktu, że Iza jest szczęśliwą osobą wynika, że jeżeli Iza posiada dzieci (a nie musi) to są one osobami szczęśliwymi.
Ograniczenia właściwości Zdefiniujmy klasę osób szczęśliwych jako tych które na pewno posiadają dzieci i dzieci te są osobami szczęśliwymi. :HappyPerson owl:equivalentclass [ rdf:type owl:class ; owl:intersectionof ([ rdf:type owl:restriction ; owl:onproperty :haschild ; owl:somevaluesfrom :HappyPerson ] [ rdf:type owl:restriction ; owl:onproperty :haschild ; owl:allvaluesfrom :HappyPerson ])].
Ograniczenie do elementu Wartość ograniczanej właściwości może być ograniczona do konkretnego elementu a nie całej klasy: :TomChildren owl:equivalentclass [ rdf:type owl:restriction ; owl:onproperty :hasparent ; owl:hasvalue :Tom ]. Klasa dzieci Toma (TomChildren) zdefiniowana jest jako klasa elementów dla których właściwość hasparent ma wartość Tom.
Ograniczenia kardynalne Dotychczas poznane ograniczenia właściwości nie są precyzyjne. Chcielibyśmy np. zapisać, że Marek należy do klasy osób posiadających przynajmniej trójkę dzieci, które same są rodzicami albo Marek należy do klasy osób posiadających co najwyżej trójkę dzieci, które same są rodzicami. albo Marek należy do klasy osób posiadających dokładnie trójkę dzieci, które same są rodzicami.
Ograniczenia kardynalne Marek należy do klasy osób posiadających przynajmniej trójkę dzieci, które same są rodzicami. :Marek rdf:type [ rdf:type owl:restriction ; owl:minqualifiedcardinality "3"^^xsd:nonNegativeInteger ; owl:onproperty :haschild ; owl:onclass :Parent ].
Ograniczenia kardynalne John należy do klasy osób posiadających co najwyżej trójkę dzieci, które same są rodzicami. :John rdf:type [ rdf:type owl:restriction ; owl:maxqualifiedcardinality "3"^^xsd:nonNegativeInteger ; owl:onproperty :haschild ; owl:onclass :Parent ].
Ograniczenia kardynalne John należy do klasy osób posiadających dokładnie trójkę dzieci, które same są rodzicami. :John rdf:type [ rdf:type owl:restriction ; owl:qualifiedcardinality "3"^^xsd:nonNegativeInteger ; owl:onproperty :haschild ; owl:onclass :Parent ].
Ograniczenia kardynalne John należy do klasy osób posiadających przynajmniej trójkę dzieci. :John rdf:type [ rdf:type owl:restriction ; owl:minqualifiedcardinality "3"^^xsd:nonNegativeInteger ; owl:onproperty :haschild ; owl:onclass :Parent ].
Ograniczenia kardynalne John należy do klasy osób posiadających co najwyżej trójkę dzieci. :John rdf:type [ rdf:type owl:restriction ; owl:maxqualifiedcardinality "3"^^xsd:nonNegativeInteger ; owl:onproperty :haschild ; owl:onclass :Parent ].
Ograniczenia kardynalne John należy do klasy osób posiadających dokładnie trójkę dzieci. :John rdf:type [ rdf:type owl:restriction ; owl:qualifiedcardinality "3"^^xsd:nonNegativeInteger ; owl:onproperty :haschild ; owl:onclass :Parent ].
Elementy klasy wprost W języku OWL klasy możemy definiować wykorzystując podając wprost ich elementy. Klasa owl:equivalentclass [ rdf:type owl:class ; owl:oneof ( Elem1 Elem2 Elem3 ) ]. czyli do Klasy należą elementy: Elem1, Elem2, Elem3.
Elementy klasy wprost Klasa złożona z polskich miast w których odbędą się mecze Euro : :MiastaEuro owl:equivalentclass [ rdf:type owl:class ; owl:oneof ( :Poznan :Wroclaw :Gdansk :Warszawa ) ].
Właściwości odwrotne W języku OWL właściwość możemy zdefiniować jako odwrotność innej właściwości: właściwość1 owl:inverseof właściwość2. czyli właściwość 1 jest odwrotnością właściwości 2. Właściwość posiadanie rodzica jest odwrotnością właściwości posiadanie dziecka : :hasparent owl:inverseof :haschild.
Właściwości odwrotne Wnioskowanie R owl:inverseof P. x P y. y R x. :hasparent owl:inverseof :haschild. :Iza :haschild :Tom. :Tom :hasparent :Iza.
Właściwości odwrotne :hasdaughter owl:inverseof :isdaughterof.
Właściwości symetryczne W języku OWL możemy zdefiniować właściwość symetryczną: właściwość rdf:type owl:symmetricproperty. Właściwość bycie kuzynem jest symetryczna: :iscousin rdf:type owl:symmetricproperty.
Właściwości symetryczne Wnioskowanie P rdf:type owl:symmetricproperty. x P y. y P x. :iscousin rdf:type owl:symmetricproperty. :Iza :iscousin :Ewa. :Ewa :iscousin :Iza.
Właściwości symetryczne :borderswith rdf:type owl:symmetricproperty.
Właściwości asymetryczne W języku OWL możemy zdefiniować właściwość antysymetryczną: właściwość rdf:type owl:asymmetricproperty. czyli właściwość jest asymetryczna. Właściwość bycie rodzicem jest asymetryczna: :isparent rdf:type owl:asymmetricproperty.
Właściwości asymetryczne Wnioskowanie P rdf:type owl:asymmetricproperty. x P y. y P x. :Iza :haschild :Tom. :Tom :haschild :Iza.
Właściwości rozłączne W języku OWL możemy zdefiniować właściwości rozłączne: właściwość1 owl:propertydisjointwith właściwość2. Właściwość bycie bratem jest rozłączna z właściwością bycie siostrą : :isbrother owl:propertydisjointwith :issister.
Właściwości rozłączne Wnioskowanie P owl:propertydisjointwith R. x P y. x R y. :Tom :isbrother :Paul. :Tom :issister :Paul.
Właściwości zwrotne W języku OWL możemy zdefiniować właściwości zwrotne: właściwość rdf:type owl:reflexiveproperty. Właściwość zwrotna wiąże element z samym sobą. Właściwość posiadania krewnego jest zwrotna: :hasrelative rdf:type owl:reflexiveproperty.
Właściwości przeciwzwrotne W języku OWL możemy zdefiniować właściwości przeciwzwrotne: właściwość rdf:type owl:irreflexiveproperty. Właściwość przeciwzwrotna nie może wiązać elementu z samym sobą. Właściwość bycia rodzicem jest przeciwzwrotna: :isparentof rdf:type owl:irreflexiveproperty.
Właściwości funkcjonalne W języku OWL możemy zdefiniować właściwości funkcjonalne: właściwość rdf:type owl:functionalproperty. Właściwość funkcjonalna dla danego elementu może przyjąć tylko jedną wartość. Właściwość posiadanie męża jest funkcjonalna: :hashusband rdf:type owl:functionalproperty.
Właściwości funkcjonalne Wnioskowanie P rdf:type owl:functionalproperty. x P y. x P z. y owl:sameas z. :hashusband rdf:type owl:functionalproperty. :Iza :hashusband :Piotrek. :Iza :hashusband :Jacek. :Piotrek owl:sameas :Jacek.
Właściwości funkcjonalne :hasbirthmother rdf:type owl:functionalproperty.
Właściwości odwrotnie funkcjonalne W języku OWL możemy zdefiniować właściwości odwrotnie funkcjonalne: właściwość rdf:type owl:inversefunctionalproperty. Właściwość odwrotnie funkcjonalna dla dwóch różnych obiektów nie może posiadać tej samej wartości. Właściwość posiadanie męża jest odwrotnie funkcjonalna: :hashusband rdf:type owl:inversefunctionalproperty.
Właściwości odwrotnie funkcjonalne Wnioskowanie P rdf:type owl:inversefunctionalproperty. x P z. y P z. x owl:sameas y. :hashusband rdf:type owl:inversefunctionalproperty. :Iza :hashusband :Jacek. :Jola :hashusband :Jacek. :Iza owl:sameas :Jola.
Właściwości odwrotnie funkcjonalne :hasemail rdf:type owl:inversefunctionalproperty.
Właściwości przechodnie W języku OWL możemy zdefiniować właściwości przechodnie: właściwość rdf:type owl:transitiveproperty. Właściwość posiadania przodka jest przechodnia: :hasancestor rdf:type owl:transitiveproperty.
Właściwości przechodnie Wnioskowanie P rdf:type owl:transitiveproperty. x P y. y P z. X P z. :hasancestor rdf:type owl:transitiveproperty. :Iza :hasancestor :Maria. :Maria :hasancestor :Jan. :Iza owl:hasancestor :Jan.
Właściwości przechodnie :hasancestor rdf:type owl:transitiveproperty.
Łańcuchy właściwości W języku OWL możemy zdefiniować właściwości łącząc inne właściwości: właściwość owl:propertychainaxiom ( właściwość1 właściwość2 ). Właściwość posiadania dziadka jest zdefiniowana jako łańcuch właściwości: :hasgrandparent owl:propertychainaxiom ( :hasparent :hasparent ).
Łańcuchy właściwości Wnioskowanie P owl:propertychainaxiom ( P1 P2 ). x P1 y. y P2 z. x P z. :hasgrandparent owl:propertychainaxiom ( :hasparent :hasparent ). :Marek :hasparent :Piotr. :Piotr :hasparent :Jan. :Marek owl:hasgrandparent :Jan.