Trochę o ontologii OWL

- autor: tsissput

Co to jest ontologia?

Ontologia jest to logiczna reprezentacja różnych dziedzin wiedzy i związanych między nimi relacji. Ontologia różni się jednak od innych sposobów reprezentowania wiedzy, ponieważ nie tylko dostarcza nam schemat lub opis danej dziedziny, ale także za pomocą narzędzi logiki pozwala na określenie hierarchii elementów oraz pozwala określić kryteria ich klasyfikacji.

Czym jest OWL?

OWL (Web Ontology Language) jest językiem umożliwiającym przetwarzanie informacji w sieci WWW będący specyfikacją W3C, przygotowany z myślą o tworzeniu ontologii w środowisku internetowym? Web Ontology Language jest częścią wizji Semantycznego Weba, w której informacja ma określone znaczenie, może być przetwarzana przez komputery, zaś komputery mogą łączyć ze sobą i „rozumieć” różnego typu informacje. Język ten został opracowany w celu prostego tworzenia łatwo rozszerzalnych ontologii i scalania ich w wieloaspektowe, udostępniane za pomocą internetu reprezentacje wiedzy oraz platformy do tworzenia oraz integrowania aplikacji i systemów informatycznych.  Ważną cechą standardu OWL jest to, że nie służy jedynie do zapisu samego modelu, lecz pozwala zasilać go danymi.  Podstawowym formatem OWL jest niezwykle rozpowszechniony, XML, co ułatwia zastosowanie ontologii, jako podstawy do budowania aplikacji w różny sposób wykorzystujących zapisywaną w nich wiedzę. Język OWL występuje w trzech odmianach:

  • OWL Lite – Został zaprojektowany z myślą stworzenia prostego języka, który będzie wystarczający dla użytkowników potrzebujących jedynie prostych klasyfikacji i prostych ustalonych cech.
  • OWL DL – Posiada w sobie OWL Lite i dodatkowo zawiera pełny zbiór słownictwa interpretowanego pod kątem zbiorów prostych z ustalonych cech.
  • OWL Full – Zawiera w sobie OWL DL a do tego zawiera pełne słownictwo OWL, które jest interpretowane znacznie szerzej niż w wersji OWL DL z pełnymi możliwościami zapewnianymi przez RDF. Klasa w OWL Full może być traktowana równocześnie, jako zbiór jednostek i jako jednostka, jako taka.

Po co jest ontologia? 

Ontologia jest podstawowym elementem przy tworzeniu aplikacji, której zadaniem będzie klasyfikowanie danych. Ponieważ ontologia oznacza zawsze analizę oraz uporządkowaną wiedze o elementy danej dziedziny oraz w jaki sposób jest wyrażana.

Podczas tworzenia ontologii podajemy przestrzenie nazw, z jakich będziemy korzystać oraz deklarujemy podstawowy adres URI dla dokumentu

<rdf:RDF 
     xmlns     =”http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#”   
     xmlns:vin =”http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#”       
     xml:base  =”http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#”       
     xmlns:food=”http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#”    
     xmlns:owl =”http://www.w3.org/2002/07/owl#&#8221;  
     xmlns:rdf =”http://www.w3.org/1999/02/22-rdf-syntax-ns#&#8221; xmlns:rdfs=”http://www.w3.org/2000/01/rdf-schema#&#8221;
     xmlns:xsd =”http://www.w3.org/2001/XMLSchema#”&gt;

Teraz po określeniu przestrzeni nazw możemy stworzyć przykładową ontologię

<owl:Ontology rdf:about=”http://www.example.org/wine”> 
     <rdfs:comment>Przykladowa ontologia</rdfs:comment>
    <owl:versionInfo>
        $Id: semantic_web.xml,v 1.4 2003/12/30 00:21:51 winfried Exp $
     </owl:versionInfo>  
    <owl:imports rdf:resource=”http://www.w3.org/TR/2002/WD-owl-guide-20021104/food.owl”/>      
     </owl:Ontology>
</rdf:RDF>

W OWL każda jednostka jest członkiem klasy <owl:Thing>. Podczas tworzenia ontologii dla danej dziedziny, najpierw jest tworzona klasa główna dla danej dziedziny i dopiero na bazie tejże klasy zostaje zbudowana hierarchia podklas. Zdefiniowane zostały trzy klasy główne

<owl:Class rdf:ID=”Wino”/>
<owl:Class rdf:ID=”Region”/>
<owl:Class rdf:ID=”ArtykulSpozywczy”/>

Następnie zostaje utworzona podklasa ArtykułuSpożywczego, o nazwie Napój.

<owl:Class rdf:ID=”Napoje”>
    <rdfs:subClassOf rdf:resource=”#ArtykulSpozywczy” />
    <!– dalsze dane o klasie –>
</owl:Class>

Nie są to jednak elementy ontologii win, ale klasy pomocnicze. Przy definiowaniu ontologii win, klasy „spożywcze” są importowane. Następnie tworzymy prostą definicję klasy Wino w następujący sposób.

<owl:Class rdf:ID=”Wino”>
    <rdfs:subClassOf rdf:resource=”#Napój”/>
    <rdfs:label xml:lang=”en”>wine</rdfs:label>
    <rdfs:label xml:lang=”fr”>vin</rdfs:label>
    <rdfs:label xml:lang=”pl”>wino</rdfs:label>
    …
</owl:Class>

Poza stworzeniem klas definiujemy również jednostki. Najprostszym sposobem stworzenia takiej definicji jest stwierdzenie, że dana jednostka jest członkiem konkretnej klasy

<Region rdf:ID=”RegionNadmorski” />

Podczas budowy ontologii ważne jest odpowiednie dobranie klas i jednostek. Dlatego też można stwierdzić, że Klasa reprezentuje typ obiektu oraz zbiór właściwości, które każdy członek tej klasy będzie posiadać. Natomiast jednostki są to konkretne istniejące elementy, dające posegregować się w klasie. Do stworzenia lepszej ontologii posłużymy się właściwościami, które w OWL-u możemy podzielić na dwie grup:

  • Właściwości danych – stanowią relacje pomiędzy klasami a typami danych XML
  • Właściwości obiektów – stanowią relacje pomiędzy elementami dwóch klas.

Podczas definiowania danej właściwości możemy posłużyć się dwoma sposobami na ograniczenie elementów danej relacji. Możemy podobnie ustalić dziedzinę oraz zasięg

<owl:ObjectProperty rdf:ID=”zrobioneZWinogron”>
    <rdfs:domain rdf:resource=”#Wino”/>
    <rdfs:range rdf:resource=”#Winogrono”/>
</owl:ObjectProperty>

Właściwości podobnie jak klasy możemy organizować w hierarchię

<owl:ObjectProperty rdf:ID=”OpisWina” />
<owl:Class rdf:ID=”KolorWina”>
    <rdfs:subClassOf rdf:resource=”#OpisWina” />
    …
</owl:Class>
<owl:ObjectProperty rdf:ID=”maOpisWina”>
    <rdfs:domain rdf:resource=”#Wino” />
    <rdfs:range rdf:resource=”#OpisWina” />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID=”maKolor”>
    <rdfs:subPropertyOf rdf:resource=”#maOpisWina” />
    <rdfs:range rdf:resource=”#KolorWina” />
</owl:ObjectProperty>

Podobnie jak w innych językach do opisu ontologii tak OWL posiada mechanizmy, które pozwalają mu na ograniczanie relacji pomiędzy obiektami. Mechanizmy te pozwalają zastosować ograniczenia, które są podobne do zasięgu, ale w kontekście lokalnym. Relacja AllValuesFrom jest relacją silną, wymuszającą fakt, że wszystkie wartości danej właściwości będą określonej klasy. Natomiast someValuesFrom jest nieco mniej restrykcyjne, wymusza jednak to, że chociaż w jednym przypadku wartością właściwości jest element będący członkiem takiej klasy.

<owl:Class rdf:ID=”Wino”>
    …
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource=”#posiadaProducenta” />
            <owl:allValuesFrom rdf:resource=”#Winiarnia” />
        </owl:Restriction>
    </rdfs:subClassOf>
    …
</owl:Class>

Ostatnią właściwością, którą możemy wpasować do naszej ontologii jest, <owl: cardinality> która odpowiada za dokładną ilość elementów w relacji. Przykładowo możemy określić, że Rocznik będzie klasą może mieć tylko jeden Rok

<owl:Class rdf:ID=”Rocznik”>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource=”#wyprodukowanyWRoku”/>
            <owl:cardinality>1</owl:cardinality>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>

Czy istnieją jakieś edytory?

Przy tworzeniu ontologii możemy posłuży się edytorem OWL. Jednym z najbardziej lubianych edytorów OWL jest Protégé[2]. Protégé jest darmowym środowiskiem, dzięki któremu możemy wykonywać proste operacie na plikach OWL takich jak tworzenie ontologii OWL lub wprowadzać dane jak i zawansowane takie jak możliwość bezpośredniego użycia klasyfikatorów, graficzna prezentacja modelu, zaawansowane statystyki, przechowywanie ontologii w relacyjnej bazie danych.  Program jest open-source’owym środowiskiem, w którym możemy tworzyć własne plug-in’y lub nawet własne wersje edytora.

Co jeszcze jest potrzebne do stworzenia aplikacji klasyfikującej dane?

Do stworzenia w pełni działającej aplikacji musimy jeszcze wybrać interfejs programistyczny oraz Klasyfikator.

Czym jest interfejs programistyczny?

Interfejs programistyczny służy do manipulowania obiektami OWL, zasilania naszych ontologii danymi, korzystania z klasyfikatorów. Jednym z lepszych interfejsów jest interfejs OWL API, który został specjalnie zaprojektowany do pracy z ontologiami OWL. Dostarcza wiele zawansowanych funkcji takich jak np. mechanizm obsługi eksplantacji dostarczanych przez klasyfikatory, dzięki temu interfejsowi w łatwy sposób można rozszerzyć ontologie OWL o reguły SWRL.

Czy istnieją darmowe klasyfikatory?

Istnieje wiele darmowych klasyfikatorów możemy zastosować w aplikacji, jednym z bardzo wydajnych klasyfikatorów jest FaCT++ jest to klasyfikator bardzo wydajny, którego możemy użyć tylko wtedy, kiedy nasza ontologia OWL jest ontologią, która nie zawiera rozszerzenia SWRL w przeciwnym wypadku możemy użyć klasyfikatora Pellet, który jest wykorzystywany w rozwiązaniach firmy Oracle lub HermiT.

Na dzień dzisiejszy najłatwiej można zbudować aplikację klasyfikującą za pomocą interfejsów stworzonych w języki JAVA. Interfejsy te zapewniają łatwe korzystanie z klasyfikatorów oraz mają możliwość wszechstronnego manipulowania zawartością ontologii OWL.

http://www.w3.org/TR/owl-ref/

http://owl.cs.manchester.ac.uk/tutorials/protegeowltutorial/resources/ProtegeOWLTutorialP4_v1_3.pdf

http://en.wikipedia.org/wiki/Semantic_reasoner

http://www.w3.org/DesignIssues/Notation3.html

103889

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: