KAPITOLA 10.: NORMALIZACE ONTOLOGIE

Normalizace ontologie

Vizualizace odvozené hierarchie tříd

Jak normalizovat?

Vztahy mezi typy tříd



Normalizovaná ontologie je technika, která nám pomáhá pomocí klasifikátoru uchovávat ontologii v udržitelném a modulárním stavu. Základem normalizované ontologie je to, že ontologii vytváříme jako stromovou strukturu nikoliv jako graf, viz. obrázek níže. To znamená, že se snažíme zamezit vzniku tzv. vícenásobné dědičnosti (polyhierarchii). Co je vícenásobná dědičnost? Vícenásobná dědičnost znamená, že třída XY má více nadtříd. Někde se vícenásobné dědičnosti nevyhneme, například u tvorby návrhového vzoru Pseudojedinec. U Pseudojedince jsme museli vytvořit dvě třídy, např. třídu CountryOfOrigin a Pseudoindividual. Daná země v roli třídy, třeba Čína, měla dvě nadtřídy: CountryOfOrigin a Pseudoindividual a to je v normalizované ontologii přípustné. Jinak se tomu snažíme vyvarovat. Klasifikátor sám, nám na základě podmínek uvedených u definovaných a popsaných tříd, tu vícenásobnou dědičnost vytvoří. Výhodou totiž je, že klasifikátor můžeme spouštět několikrát, takže bude vícenásobná dědičnost zachovávána.


Normalizace

Obrázek: Normalizace

Proč přenechávat vytvoření polyhierarchie na odvozovači? Proč máme tvořit jen stromovou strukturu? Stromová struktura je srozumitelnější, jednodušší - uživatel se v ní více vyzná než ve změti dalších tříd mající více nadtříd. Při jejím vytváření se udělá méně chyb.

Normalizovanou ontologii vytváříme tak, že nejprve vytvoříme tři základní skupiny (třídy) tj. skupinu s definovanými třídami (DefinableClass) vymezenými nezbytnými a postačujícími podmíkami, popsanými třídami (PrimitiveClass) vymezenými jen nezbytnými podmínkami a přídavnými třídami (ModifiedClass), které slouží k tvorbě podmínek tříd popsaných i definovaných. Do nich pak rozmístíme příslušné třídy, viz. obrázek Normalizace ontologie.


Normalizace v Protégé

Obrázek: Normalizace v Protégé

Vizualizace odvozené hierarchie tříd

Plugin OWLViz, o kterém jsme již hovořili, umožňuje zobrazit jak vloženou tak odvozenou hierarchii tříd a popř. ji uložit do formátu obrázku, třeba pro potřeby dokumentace. Nové vztahy odvozené pomocí klasifikátoru OWLViz zobrazí jen tehdy, když už jsme provedli klasifikaci. Pokud se klasifikace neprovede, není co zobrazovat - viděli byste před sebou jen sloupec nebo řadu tříd bez jakýchkoliv vztahů, viz. obrázek níže.


Vizualizace normalizované ontologie - nesprávně

Obrázek: Vizualizace normalizované ontologie - nesprávně

Nejprve tedy provedeme klasifikaci ontologie např. pomocí Pelletu, poté přejdeme na záložku OWLViz (pokud není zobrazena, pak zvolíme OWL/Preferencies/Tabs/OWLVizTab), přejdeme na záložku Inferred hierarchy a zobrazíme odvozenou hierarchii tříd pomocí volby, např. Show all classes v menu nástrojů u pluginu.

Poznámka: provedli jste třeba nějaké změny v ontologii, např. jste provedli klasifikaci, změny se automaticky do grafického pohledu v OWLViz nepromítnou. Doporučuji zvolit nejprve volbu Hide all classes a pak znovu Show all classes - je to takový refreshing grafického pohledu na ontologii. Obrázek Vizualizace normalizované ontologie - správně ukazuje jen výsek celé ontologické struktury, resp. tu část, kde je vidět vytvoření nových vztahů (vícenásobnou dědičnost) odvozovačem.


Vizualizace normalizované ontologie - správně

Obrázek: Vizualizace normalizované ontologie - správně

Jak normalizovat?

Můžete si říct, že na tvorbě normalizované ontologie není nic obtížného. Ano, celkem není, ale můžete se dostat i tak do úzkých. Nejkritičtějším místem je tvorba definovaných a primitivních tříd. Příkladem je třeba to, že pokud má být papoušek například africkým papouškem, musí být papouškem tj. mít jako svoji nadtřídu třídu ParrotPsittaciform, jenže ParrotPsittaciform je popsaná (primitivní) třída a jak máme tedy zařídit, aby třída AfricanParrot byla jen podtřídou definované nikoliv primitivní třídy, když primitivní třídy mají mít jen ty primitivní? Tady se musí volit určitý kompromis, zkrátka takto zní naše definice a nic se s tím dělat nedá. Ta definovaná třída AfricanParrot, zkrátka bude mít dvě nadtřídy, ale musíme zabránit tomu, aby jakákoliv primitivní třída byla v sekci s definovanými. Při tvorbě normalizované ontologie v našem příkladu s papoušky postupujeme tak, že jednoduše si vezmeme celou třídu Animal (tím vybíráme i její podtřídy), zrušíme u ní podmínku, že její nadtřída je Thing a uvedeme, že bude mít nadtřídu PrimitiveClass (děláme to s pomocí voleb v sekci Asserted Conditions). Pořád platí, že definované třídy mají nadtřídu ParrotPsittaciform, ale ještě mají být podtřídami třídy DefinableClass. To zařídíme jednoduše. Každá definovaná třída bude mít jako svoji nezbytnou podmínku třídu DefinableClass. Proč nezbytnou a ne také postačující? Přeci není logické, aby třída DefinableClass byla nezbytnou a postačující podmínkou, protože pro jednoznačné zařazení jedince do třídy, např. AfricanParrot je důležité, že je to papoušek a ne definovaná třída. Pokud tento výklad zněl zmatečně, nejlépe je si to přímo zkusit v Protégé.

Vztahy mezi typy tříd

Na závěr nabízím obrázek popisující vztahy mezi třídami Definovanými, Primitivními a Přídavnými.


Vztahy mezi typy tříd

Obrázek: Vztahy mezi typy tříd

Stáhnout projekt

parrot10Normalizace.zip (normalizovaná ontologie)