KAPITOLA 11.: SWRL PRAVIDLA - Pravidlo 2.: Pohádky produkované ve Velké Británii

Opět přejdeme na záložku SWRL Rules, vyvoláme editační okno pro tvorbu a editaci pravidel a zapíšeme pravidlo. Jeho tvorba není zas tak jednoduchá, jak by se na první pohled mohlo zdát. Potřebujeme přeformulovat pravidlo, které zní česky takto: vybíráme film (?film), který musí mít žánr pohádku (hasGenre (?film, FairytaleGenre)) a zároveň byl vyproduktován ve Velké Británii (hasProduction (?film, GreatBritain)). To, co je výsledkem podmínkové části pravidla, pak musí být prvkem určité třídy. Takovou ovšem nemáme ještě vytvořenou. Založíme si proto v OWL ontologii třídu s názvem FairytaleProducedInGB jako podtřídu třídy Fairytale. Vůbec přitom nevadí, že jsme začali psát pravidlo a nedokončili ho. To, co jsme zatím napsali, editor uchová. Vrátíme se k záložce SWRL Rules, zvolíme tlačítko se symbolem lupy (volbu Edit selected rule in ...) a pravidlo dokončíme. Podoba pravidla je následující: Film(?film) ∧ hasGenre(?film, FairytaleGenre) ∧ hasProduction(?film, GreatBritain)
->
FairytaleProducedInGB(?film)
Následně zvolíme volbu OWL+SWRL -> Jess, Run Jess a Jess->OWL. Zkontrolujeme výsledky odvozování v OWL ontologii. Do třídy FairytaleProducedInGB by měl patřit jedinec Cinderella - Popelka :-).

Pravidlo 3.: Filmový herec

Pravidlo má určit jedince, kteří jsou filmovými herci. Musíme vystačit s tím, co máme v OWL ontologii reprezentováno. Přeložíme si nejprve pravidlo do češtiny: filmový herec je takovou osobou Person(?person), která je mužského pohlaví (hasGender (?person, Man)) a zároveň tato osoba byla již obsazena v nějakém filmu (isOccupiedIn (?person, ?film)). Pak můžeme říci, že je filmovým hercem (FilmActor(?person)). Pro ověření správnosti budoucího pravidla si reprezentujeme mužského jedince třídy Person navíc a nazveme ho PersonX. Uvedeme u něj, že nehrál v žádném filmu. Výsledkem odvozování je to, že do třídy FilmActor spadá sedm jedinců bez našeho dodatečně přidaného PersonX. Což je správně, protože filmový herec už za sebou má nějakou filmovou zkušenost a PersonX nikoliv, takže nemůže být filmovým hercem. Podoba pravidla je následující: Person(?person) ∧ hasGender(?person, Man) ∧ isOccupiedIn(?person, ?film)
->
FilmActor(?person)

Pravidlo 4.: Filmová herečka

U filmové herečky postupujeme obdobně, jen změníme názvy někteřých tříd, viz. podoba pravidla níže. Abychom nemuseli vypisovat podmínku po podmínce, které už máme jednou podobně zachycené v pravidle s filmovými herci, stačí zvolit volbu Clone selected rule a vytvoří se úplně stejné pravidlo, které jen stačí upravit podle potřeb. Výsledkem je 6 jedinců - 6 filmových hereček. Person(?person) ∧ hasGender(?person, Woman) ∧ isOccupiedIn(?person, ?film)
->
FilmActress(?person)

Pravidlo 5.: Filmy s Cate Blanchett

Pravidlo má zjistit, ve kterých filmech hrála herečka Cate Blanchett. Opět nám chybí určitá třída, kterou by bylo vhodné vytvořit, pro umístění filmů, ve kterých hrála herečka Cate Blanchett (FilmWithCateBlanchett). Film(?film) ∧ hasOccupation(CateBlanchett, ?film)
->
FilmWithCateBlanchett(?film)
S výše uvedeným pravidlem není něco v pořádku. Problém je ve vlastnosti hasOccupation, která má přehozené parametry. Nelze říci, že: CateBlanchett hasOccupation ?film, ale správné je použít buď inverzní vlastnosti isOccupiedIn (CateBlanchett, ?film) nebo hasOccupation (?film, CateBlanchett), protože definiční obor vlastnosti hasOccupation je Film a obor hodnot je Person, nikoliv naopak. Takže správné pravidlo, které odvodí jeden film - Pána prstenů: Společenstvo prstenu je následující: Film(?film) ∧ hasOccupation(?film, CateBlanchett)
->
FilmWithCateBlanchett(?film)

Pravidlo 6.: Filmy natočené po roce 2006 až do roku 2008

Pro vytvoření tohoto pravidla potřebujeme mít v naší OWL ontologii reprezentovány roky natočení filmů. Založíme pro to datotypovou vlastnost s názvem hasYearOfProduce s definičním oborem Film a oborem hodnot Int (jako celočíselná hodnota), přičemt tato vlastnost bude funkcionální - určitý film buď nemá uvedenou dobu natočení (není třeba zjištěna, evidována) a nebo má právě jednu. Založíme ještě třídu FilmAfter06Before08 pro kategorizaci jedinců. S dosavadními znalostmi ohledně tvorby pravidel si pro pravidlo č. 6 nevystačíme.

Pro tvorbu pravidel můžeme využívat tzv. vestavěné predikáty. Doposud jsme manipulovali jen s třídami, vlastnostmi a jedinci, o žádný vestavěný (build-in) predikát jsme nezavadili. I když samotný jazyk SWRL přímo nedefinuje vlastní vestavěné predikáty kromě CORE SWRL Build-ins, plugin SWRLTab poskytuje predikáty další. Uvedeme přehled těchto predikátů a pak vybereme ten pro naše šesté pravidlo.

Pro pravidlo č. 6 budeme potřebovat nějaký matematický predikát, který nám ohraničí dobu natočení filmu od čísla 2006 do čísla 2008 včetně. Využijeme tedy predikát z knihovny CORE SWRL, resp. predikát swrlb:greaterThanOrEqual a swrlb:lessThanOrEqual. Tyto predikáty jsou dostupné z editoru pro tvorbu pravidel, viz. následující obrázek.


Vestavěné predikáty

Obrázek: Vestavěné predikáty

Výsledkem spuštění pravidla č. 6 je odvození jednoho jedince s názvem Václav a má následující podobu: Film(?film) ∧ hasYearOfProduce(?film, ?YearOfProduce) ∧ swrlb:greaterThanOrEqual(?YearOfProduce, 2006) ∧ swrlb:lessThanOrEqual(?YearOfProduce, 2008)
->
FilmAfter06Before08(?film)

Import ontologie

Může se stát, že Vámi požadovaný predikát v nabídce pluginu SWRLTab nenajdete. V tom případě lze využít importu příslušné OWL ontologie do Protégé, viz. obrázek níže.


Import ontologie

Obrázek: Import ontologie

Stažení souboru

films_rules.zip (pravidla s odvozenými jedinci)