KAPITOLA 4.: PŘEDSTAVENÍ JAZYKA OWL - KOMPONENTY JAZYKA OWL
Mezi hlavní komponenty OWL ontologie patří:
- Třída;
- Jedinec;
- Vlastnost.
TŘÍDA (class)
Chápání pojmu Třída v OWL není odlišná od objektově orientovaného principu. Jedná se o soubor jedinců se stejnými vlastnostmi. Jsou organizovány do hierarchie - taxonomie tj. nadtříd a podtříd (superclasses a subclasses). Vytvořením hierarchie tříd dodáváme naší ontologii strukturu. V OWL existují třídy předdefinované nebo námi vytvořené. Jednou z předdefinovaných je owl:Thing . Jedná se o tzv. systémovou nejobecnější třídu, do které spadají všechny ostatní. Je to jakýsi společný předek všech tříd, které vytvoříme. V prostředí Protégé nese název Thing. Další předdefinovanou třídou je owl:Nothing ... opak owl:Thing.
Příkladem třídy může být: Pes, Stát, Vědní obor, Osoba, Koření, apod.
Pro to, abychom dokázali graficky zpodobnit jednotlivé komponenty OWL ontologie, budeme u každé z nich používat specifický symbol. V případě tříd - kolečko.
OWL nenařizuje způsob pojmenovávání tříd, ale nějakou si zavedeme. Doporučuji všechny třídy pojmenovávat stejným způsobem - v našem případě bude každá třída začínat velkým písmenem a v příp. modelování v Protégé budou třídy bez diakritiky, nejlépe v anglickém jazyce. Proč to? Diakritika může způsobovat problémy při vizualizaci ontologie pomocí pluginu OWLViz, který budeme rovněž používat.
JEDINEC (individum, člen, objekt, entita)
Jedinec reprezentuje určitý objekt domény, který náleží určité třídě. Jedná se o konkrétní výskyt - instanci třídy. Jedinec přitom může patřit jedné nebo více třídám. Je rozdíl mezi jedincem a instancí. Jedinec je instancí nějaké třídy.
Příkladem jedince může být: Jan Ámos Komenský, Portugalsko, Phobos, Karel, ...
Pro grafické znázornění jedinců budeme používat kosočtvereček.
OWL nenařizuje způsob pojmenovávání jedinců. Zavedeme stejnou konvenci jako u tříd.
Ve spojení s jedinci hovoříme o UNA (Unique Name Assumption), které jazyk OWL nepodporuje. V OWL musíme explicitně uvést, že určití jedinci jsou navzájem různí nebo stejní, tj., když budeme chtít v naší ontologii zavést jednoho jedince se jménem Albert a Bertík, tak musí být v OWL definováno, že Albert a Bertík je jeden a týž jedinec. Pro tento účel používáme konstrukce: owl:sameAs a owl:differentFrom.
Na obrázku Jednoduchá taxonomie vidíme výčet několika tříd uspořádaných do hierarchie spolu s převodem této hierarchie do grafické podoby tříd. Jsou zde zachyceni i jedinci. Možná se Vám bude zdát, že probírání těchto detailů je zbytečné, ale chci spíš ukázat, jak si máte představit nějakou taxonomii.
VLASTNOST
Vlastnost vytváří vztah - (binární) relaci mezi jedinci. Zkrátka spojuje dva objekty k sobě. Obrázek Vlastnost v OWL rozšiřuje obrázek výše o třídu Person a vlastnost hasDog a hasParrot.
Dělení vlastností [1]:
- objektová;
- datotypová;
- anotační;
- ontologická.
- rdfs:label: více názvů k elementu ontologie, třeba v jiném jazyce;
- rdfs:comment: komentář k elementu ontologie;
- rdfs: seeAlso: URI podoba, související zdroje ke stavebnímu bloku;
- ... )
Na obrázku níže jsou uvedeny příklady některých výše uvedených vlastností.
Obrázek Prvky ontologického modelu shrnuje, jaké elementy lze použít pro konstrukci ontologie.
Praktické otázky
Koncept vs. třída
Někde se můžete dočíst, že v souvislosti s modelováním znalostí se hovoří o konceptech. Koncept je obecnějším pojmem, třída je konkrétní reprezentací konceptu. Z různých literárních zdrojů mám ale dojem, že jsou oba pojmy ztotožňovány.
Konceptualizace vs. ontologie
Slovo konceptualizace znamená výběr určitých konceptů, jejich vlastností a vztahů mezi nimi v závislosti na modelované doméně. Ontologie je praktickou realizací konceptualizace. Konceptualizace je spíš proces nebo jinak nějaký znalostní celek. Ontologie je výsledek znalostního modelování, viz. obrázek níže.
Třída vs. jedinec
Až se dostaneme k modelování jedinců, Vaší klasickou otázkou jistě bude, co má být třída a co UŽ MŮŽE BÝT JEDINEC, jinak řečeno: jak si stanovit hranici, za níž už hovoříme o jedincích a třídách? Mám další třídu modelovat jako podtřídu nebo jako jedince třídy? Odpovědi na tyto otázky nejsou jednoznačené. Třídy jsou určitými abstrakcemi, které se ne tak často mění, jsou víceméně stabilní. Jedinci mají dynamický charakter - v čase se spíš mění a jsou něčím konkrétnějším než třídy. Jak uvádí zdroj [1], záleží také na tom, v jakém systému má být ontologie použita. Nabízí se následující rada:
- jestliže bude budoucí aplikace využívající ontologii hlavně pracovat s daty, zaměřme se spíš na modelování jedinců
- jestliže budeme spíš chtít zachytit sémantiku dat, zaměřme se na modelování tříd než jedinců
Oddělené modelování tříd a jedinců
Od tříd se často odděleně modelují jedinci. V jednom souboru je ontologie (zapsaná v určité syntaxi) a v druhém souboru jsou instance těchto tříd - jedinci. Proč tomu tak je? Třídy definuje uživatel sám, jsou spíš statickými strukturami. Jedinci jsou odrazem reality a jsou součástí našeho světa. Jsou v čase se měnící. Třída se dá připodobnit k databázové tabulce, která se v porovnání s jejími záznamy příliš často nemění. Jedinci, kteří mohou být připodobňováni k záznamům v tabulce se mění častěji. To oddělení souborů je především kvůli aplikacím, které pak budou ontologický znalostní model využívat. Daleko snaději si můžeme zajistit přehled nad prováděnými změnami - v ontologii (s třídami) a v souboru s jedinci. Dosáhneme tak i lepšího managementu verzí obou souborů, viz. obrázek níže.
ZDROJE A DALŠÍ DOTATEČNÉ MATERIÁLY
[1] Lacy, L. W. OWL: Representing Information Using the Web Ontology Language. ISBN 141203448-5[2] A Practical Guide To Building OWL Ontologies Using The Protégé-OWL Plugin and CO-ODE Tools Edition 1.0