KAPITOLA 8.: NÁVRHOVÝ VZOR PSEUDOJEDINEC

Tvorba jedinců

Omezení hasValue

Pseudojedinec

Otázky a odpovědi

Tvorba definovaných tříd s Pseudojedincem


V minulé kapitole jsme se seznámili s návrhovým vzorem Rozklad hodnot. Naše poznatky o návrhových vzorech obohatíme o další vzor a to o Pseudojedince. Tento návrhový vzor nám dovoluje reprezentovat jedince. Doposud jsme pracovali jen s třídami a o jedincích jsme se příliš nezmiňovali.

Budeme chtít reprezentovat, odkud pochází určitý druh papouška. Existují dva způsoby, jak to udělat. První cestou je vytvoření jedinců, které budou odpovídat názvům míst původu. Druhou cestou je vytvoření návrhového vzoru Pseudojedinec. Ukážeme si nejdřív první pak druhý způsob.

Tvorba jedinců

Nejprve si vytvoříme třídu CountryOfOrigin jako podtřídu třídy Thing. Ta bude jedince obsahovat. K tvorbě jedinců je určena záložka Individual v prostředí Protégé, takže na ni přejdeme. Označíme třídu, která má jedince obsahovat, tj. CountryOfOrigin a pomocí tlačítka Create instance v sekci Instance Browser vytvoříme následující jedince: Africa, Asia, Australia, China, Europe, India, NorthAmerica a SouthAmerica, viz. obrázek Tvorba jedinců v Protégé.


Tvorba jedinců v Protégé

Obrázek: Tvorba jedinců v Protégé

Teď budeme chtít popsat jednotlivé třídy papoušků - reprezentovat jejich místo původu. Popíšeme například třídu ParrotAmazonan (papoušek Amazoňan) tak, že jedinec této třídy je původně z Jižní Ameriky. Mějme na vědomí, že Jižní Amerika je reprezentována jako jedinec. Jestliže by Jižní Amerika byla ve formě třídy, použili bychom klasické existenciální omezení. Jedná se ale o jedince, takže pro tento účel se používá tzv. hasValue omezení .

HasValue omezení

HasValue omezení je obdobou existenciálního omezení. Vytváří vazbu mezi skupinou všech jedinců vybrané třídy a jedním konkrétním jedincem, přičemž se (obdobně jako u existenciálního omezení) připouští relace s jiným jedincem z jiné třídy, viz. obrázek HasValue omezení a funkcionalita.


Před tím, než budeme moci popsat třídu ParrotAmazonan, musíme vytvořit ještě objektovou vlastnost hasCountryOfOrigin s definičním oborem Animal a oborem hodnot CountryOfOrigin. Chceme dále zajistit, aby náš milý Amazoňan pocházel jen s Jižní Ameriky a z žádného jiného kontinentu nebo země. Vlastnost hasCountryOfOrigin proto bude funkcionální vlastností. HasValue omezení nám u každého Amazoňana vlastně zajišťuje kardinalitu min. 1 a dodání funkcionality vlastnosti definujeme, že kardinalita bude přesně rovna jedné, tj. každý jedinec z třídy ParrotAmazonan (tedy každý Amazoňan) bude mít jen jeden vztah k jedinci SouthAmerica, viz. obrázek níže.


HasValue omezení a funkcionalita

Obrázek: HasValue omezení a funkcionalita

Obrázek níže uvádí způsob tvorby hasValue omezení spolu s použitím jedinců.


HasValue omezení v Protégé

Obrázek: HasValue omezení v Protégé

Tvorba návrhového vzoru Pseudojedinec

Jak vidíme, tvorba jedinců není složitou záležitostí a není to důvod, proč tvorbu jedinců tímto způsobem používat nebudeme :-). Při klasifikaci ontologie (viz. kapitola 9.) OWL klasifikátor neumí dobře s jedinci pracovat a tedy se nedoporučuje tímto způsobem jedince tvořit. Užíváme proto návrhový vzor Pseudojedinec. Naše krajina původu CountryOfOrigin bude tzv. pseudotřídou, která bude obsahovat podtřídy tzv. pseudojedince. Každá podtřída bude reprezentovat našeho jedince, resp. náš kontinent nebo zemi původu papouška. Pseudojedinec totiž není nic jiného než třída v ontologickém modelu, která hraje roli skutečného jedince, kterého bychom jinak vytvořili v sekci Individuals.

Návrhový vzor Pseudojedinec je tvořen několika třídami, v našem příkladu třídou CountryOfOrigin. Ta obsahuje vybrané pseudojedince - země nebo kontinenty, tj. America, China, Europe, atd. V ontologii musí být navíc výslovně uvedeno, že ty podtřídy třídy CountryOfOrigin jsou pseudojedinci - musíme reprezentovat co hraje roli pseudojedince. Proto musíme uvést v ontologii další třídu např. s názvem Pseudoindividual a jako její podtřídy uvést pseudojedince - naše vybrané země nebo kontinenty, tj. America, China, Europe atd.

Můžete namítnout, že prostředí Protégé umožňuje vytvořit komentář k jednotlivým prvkům ontologie a tedy by bylo možné explicitně uvést, že třída China je pseudojedincem a nebylo by pak nutné uvést Čínu ještě jednou jako podtřídu třídy Pseudoindividual. To je sice možné, ale počítačový program, který by ontologii využíval potřebuje mít vhodnějším způsobem ty jedince reprezentované - musí být zkrátka v té ontologii více vidět. Komentář není přímo součástí ontologického modelu, třída ano.

Máme tedy vytvořenou třídu CountryOfOrigin s podtřídami odpovídající různým zemím a kontinentům. Dále vytvoříme třídu Pseudojedinec, která bude obsahovat podtřídy odpovídající různým zemím a kontinentům. Zaseknout se můžete při tvorbě těchto podtříd, protože o tvorbě tříd, které už jednou v ontologii máme reprezentované jsme se nezmiňovali. Zkrátka vybereme nějakou podtřídu třídy CountryOfOrigin a v sekci Class editor zvolíme volbu Add named class. Můžeme tím přiřadit dalšího rodiče k vybrané třídě, v našem případě to bude Pseudoindividual, viz. obrázek níže.


Pseudojedinec v Protégé

Obrázek: Pseudojedinec v Protégé

Pomocí pluginu OWLViz si můžeme vizualizovat návrhový vzor Pseudojedinec. V záložce s pluginem OWLViz v ontologické struktuře zvolíme třídu CountryOfOrigin, pak volbu Show children. Chceme vidět ale ještě třídu Pseudoindividual, abychom viděli celý návrhový vzor. Zvolíme tedy třídu Pseudoindividual a opět volbu Show children. Výsledek je na obrázku Vizualizace návrhového vzoru Pseudojedinec.


Vizualizace návrhového vzoru Pseudojedinec

Obrázek: Vizualizace návrhového vzoru Pseudojedinec

Popis třídy ParrotAmazonan s použití návrhového vzoru Pseudojedinec je celkem snadná, realizuje se stejně jako jakékoliv jiné omezení třídy. Pracujeme ovšem s třídami reprezentující jedince, nikoliv s jedinci vytvořenými v sekci Individuals a tedy nepoužijeme k popisu třídy ParrotAmazonan hasValue omezení, ale normální existenciální omezení. Funkcionalitu vlastnosti hasCountryOfOrigin ponecháme a můžeme reprezentovat ještě axiom uzávěru vlastnosti.


? OTÁZKY A ODPOVĚDI ?

Jaký je rozdíl mezi návrhovým vzorem Rozklad hodnot a Pseudojedincem?
Návrhový vzor Rozklad hodnot je určen k zjemnění popisu/definice třídy. Dá se říci, že návrhový vzor Pseudojedinec také. Ovšem podtřídy návrhového vzoru Rozklad hodnot (např. podtřídy třídy Size) jsou hodnotami vlastnosti, třeba vlastnosti hasSize. Podtřídy třídy Pseudoindividual nejsou hodnoty vlastnosti, ale zastupují jedince.

Může mít pseudojedinec, třeba třída Europa, nějaké podtřídy?
Ne, nemá mít už žádné podtřídy, protože třída Europa by už měla být atomickou (dále nedělitelnou) jednotkou ontologie.

Stále tomu nerozumím. Jedinec je reprezentován jako třída a kde je teda ten jedinec?
Vezměme si opět třídu Europa, která zastává roli jedince - je pseudojedincem. Tato třída neobsahuje nic jiného než naši Europu - jedince. Obsahuje jen jeho a nic víc, viz. obrázek níže.


Pseudojedinec a jedinec

Obrázek: Pseudojedinec a jedinec

Stažení projektu

parrots07_individuals.zip (reprezentace jedinců)