MASARYKOVA UNIVERZITA

FAKULTA INFORMATIKY

Jazyk OWL a sémantický web

Bakalářská práce

Jaroslav Hradský

jaro 2003

Obsah

Úvod
Sémantický web
Co je to sémantický web ?
Dnešní Internet zastarává
Značky sémantického webu
Vyhledávací agenti
Základní kameny sémantického webu
XML
RDF
Ontologie
Jazyk OWL
Jmenné prostory
Hlavička
Informace o verzích
rdfs:comment
owl:imports
Třídy
Třídy definované identifikátorem
Třídy definované výčtem prvků
Třídy definované sjednocením
Třídy definované průnikem
Třídy definované doplňkem
Vlastnosti
rdfs:subPropertyOf
rdfs:domain
rdfs:range
Individua
owl:sameAs (owl:sameIndividualAs)
owl:differentFrom, owl:AllDifferent
Omezení
Omezení používaná při definici tříd
Omezení používaná při definici vlastností
Axiomy
rdfs:subClassOf, rdfs:subPropertyOf
owl:equivalentClass, owl:equivalentProperty
owl:disjointWith
Verze jazyka
OWL Full
OWL DL
OWL Lite
Závěr
Bibliografie
Rejstřík
Obsah | Rejstřík

Kapitola 1. Úvod

S celosvětovým rozmachem informačních technologií vzrůstá i množství dat, která lze nalézt na Internetu. Tím pádem se zvyšuje pravděpodobnost, že informace, kterou hledáme, se na Internetu skutečně vyskytuje. Ovšem na druhou stranu je celkem zřejmé, že prohledáváním většího množství dat se zvyšuje doba vyhledávání dané informace. Snaha zkrátit tuto dobu vedla ke vzniku internetových portálů a vyhledávacích služeb. Jenže už ani to dnes nestačí. Dat na Internetu zkrátka nezadržitelně přibývá a tak obrovské množství již není snadné prohledávat v přijatelném časovém okamžiku. Proto vzniká nový způsob uchovávání dat na Internetu - sémantický web.

Cílem bakalářské práce je seznámit s problematikou sémantického webu. Zejména pak s problematikou jazyka OWL(DAML+OIL), jedné ze součástí sémantického webu. Jazyka pro popis ontologií.

Obsah | Rejstřík

Kapitola 2. Sémantický web

Co je to sémantický web ?

Kolem roku 2005 by měla spatřit světlo světa tzv. druhá generace Internetu, též označovaná jako sémantický web. Jedná se o novou technologii poskytování a sdílení informací na Internetu, která má podstatně usnadnit vyhledávání. Současný web má jedno zásadní omezení. Informace jsou na něm prezentovány tak, aby byly dobře čitelné pro člověka. To, co je však bez obtíží srozumitelné člověku, nemusí být zdaleka tak dobře pochopitelné počítači[Lee]. Sémantický web by měl toto změnit. Význam informace bude definován takovým způsobem, který pochopí i počítač. "Sémantický web je rozšířením současného webu, v jehož rámci bude mít informace přesně definovaný význam a tím umožní lepší spolupráci člověka a počítače", vysvětluje pojem sémantický web Timothy J. Berners-Lee, duchovní otec dnešního World Wide Webu a ředitel koncorcia W3C[1]. Tim Berners-Lee koordinuje práci desítek vědeckých pracovišť po celém světě, podílejících se na vývoji sémantického webu. V květnu 2001 zveřejnili Tim Berners-Lee, James Hendler a Ora Lassila článek [2], ve kterém nastiňují základní principy sémantického webu.

Obsah | Rejstřík

Dnešní Internet zastarává

Současný Internet je velmi náročný na prohledávání. Je to pochopitelné, protože množství dat na Internetu neustále narůstá. Chceme-li získat obecnější informaci o dokumentech, musíme se spoléhat na služby nějakého internetového portálu nebo svěřit svůj dotaz některému z vyhledávačů. Obě možnosti mají své nevýhody [Ogbuji]. Internetový portál je velice náročný na údržbu. Je nutné neustále aktualizovat databázi se stávajícími odkazy. Nevýhodou vyhledávačů je jejich obrovská náročnost na zdroje. Je velmi složité efektivně vyhledat právě ty odkazy, které jsou pro nás důležité. Každý se již setkal s tím, že na svůj dotaz obdržel od vyhledávače odpověď v podobě tisíců odkazů. Z výše uvedených skutečností tedy vyplývá, že najít na dnešním Internetu nějakou konkrétnější informaci, se stává stále složitější.

Obsah | Rejstřík

Značky sémantického webu

Vyřešit otázku lepší spolupráce člověka a počítače a tím i efektivního vyhledávání na Internetu si klade za cíl sémantický web. Jeho myšlenka spočívá v opatření dokumentu určitými značkami (tagy), jež jsou obdobou dnešních HTML tagů.

Nedostatek HTML tagů však spočívá v tom, že dokument formátují do podoby, které rozumí pouze člověk a stroj si s pochopením informací v něm obsažených neví rady[Ogbuji]. Zaměřují se především na formátování výstupu tak, aby sdělovaná informace byla co nejčitelnější pro lidského čtenáře. Tím se však nestává dobře čitelnou pro stroj. Dnešní internetový prohlížeč podle značek, v kterých je informace uzavřená, pozná, že daná část textu má být napsána kurzívou nebo že na určitém místě je obrázek a dokáže podle toho zformátovat výstup odpovídajícím způsobem. Ale o významu dané informace nedokáže zjistit nic, neví, co text popisuje či co je vyobrazeno na obrázku. Prohlížíme-li si stránku se základními informacemi o Dánském království, je nám jasné, co znamená zápis "hlavní město: Kodaň". Počítač ale neví nic jiného, než že má např. slovo "Kodaň " zobrazit větším písmem, z čehož může maximálně usoudit, že se jedná o důležitou informaci. Počítač rovněž nerozliší, jestli výraz "Kodaň" v dokumentu označuje hlavní město Dánska nebo oblíbenou restauraci autora zpracovávaného dokumentu.

Značky sémantického webu popisují informace v dokumentu takovou formou, že jim je počítač schopen porozumět. Umožňují rovněž zachytit vztahy mezi různorodými množinami dat. Počítač pak např. rozpozná, že položka RC v databázi označuje totéž jako pole formuláře webové stránky s označením RODNE CISLO. To pomáhá počítači efektivněji shromažďovat informace z různých zdrojů [Ogbuji].

Obsah | Rejstřík

Vyhledávací agenti

Vize sémantického webu počítá s existencí inteligentních vyhledávacích agentů - softwarových nástrojů, které dokáží efektivně procházet Internet a vybírat pouze relevantní informace. Jsou schopni odpovědět na složité uživatelské dotazy v krátkých časových intervalech. Úkolem těchto agentů nebude pouze porozumět významu prohledávaných dat, ale také nacházet souvislosti mezi již známými skutečnostmi[Lee]. Spojíme-li tyto vlastnosti s existencí téměř neomezeného zdroje informací, kterým Internet dozajista je, získáme obrovský potenciál.

Obsah | Rejstřík

Základní kameny sémantického webu

Stejně jako pro stávající Internet, tak i pro Internet druhé generace hraje nezbytnou roli URI[3] (Uniform Resource Identifier), umožňující jednoznačně adresovat určitý objekt na Internetu.

XML

Základním kamenem sémantického webu je XML (eXtensible Markup Language)[4]. XML je značkovacím jazykem pro popis dokumentů obsahujících strukturovaná data[XML]. Zaměřuje se na strukturu dat, nikoliv na jejich vzhled. Poskytuje tak syntaktický základ pro tvorbu složitějších struktur a vztahů mezi daty. Umožňuje autorovi přidávat do dokumentu jakoukoliv strukturu, ale neříká nic o tom, co daná struktura znamená. Poté, co v našem příkladu s hlavním městem Dánska, označíme důležité údaje patřičnými značkami, je již přínos XML patrný. Počítač sice stále ještě neví, co znamenají výrazy "hlavní město" a "Kodaň", ale již ví, že "Kodaň " je hodnotou proměnné "hlavní město", která může být kupříkladu součástí něčeho, co označíme "základní informace o státě". XML závisí na použití uživatelem vytvořených tagů. Vyhledávací agent porozumí struktuře dokumentu, ale stále ještě nedokáže porozumět jeho obsahu. Od toho je tady RDF.

RDF

RDF (Resource Description Framework)[5] je základ pro zpracování metadat. Napomáhá spolupráci mezi webovými aplikacemi, které si vyměňují strojově čitelná data. RDF je v podstatě kombinace slovníku a tezauru pro značky XML. Kóduje význam pomocí jednoduchých tvrzení, jimž softwaroví agenti dokáží porozumět a zpracovat je. Jedná se o systém trojic[Ogbuji]. Každá trojice obsahuje subjekt, predikát a objekt nějakého tvrzení. V našem příkladu: Kodaň (subjekt) je hlavním městem (predikát) Dánského království (objekt). Nad takovýmito jednoduchými větami dokážeme vybudovat i rozsáhlé struktury, popisující skutečnosti téměř stejně dobře jako přirozená řeč. Subjektem i objektem mohou být celé dokumenty nebo jen jejich části. Jednoduchost, jednotnost a nezávislost na aplikační doméně dělá RDF volně přenositelným mezi různorodými systémy[Ogbuji].

Ontologie

Ontologie je on-line encyklopedie, která detailně popisuje vztahy mezi výrazy XML a položkami RDF. Jedná se o ucelenou sbírku informací o určité oblasti zájmů. Běžné typy ontologií pro web obsahují určitou taxonomii a množinu odvozovacích pravidel[Lee]. Taxonomie definuje třídy objektů a vztahy mezi nimi. Pomocí odvozovacích pravidel pak z již známých faktů, je počítač schopen vyvodit nové skutečnosti. Zatímco XML zprostředkovává syntaktickou vrstvu sémantického webu, ontologie tvoří vrstvu sémantickou.

Obsah | Rejstřík

Kapitola 3. Jazyk OWL

Jazyk OWL (Ontology Web Language) je značkovací jazyk navržený pro tvorbu ontologíí. Rozšiřuje slovník RDF[6] a RDF Schema [7] o další elementy vztahující se k třídám a vlastnostem. Předchůdcem jazyka OWL byl jazyk DAML+OIL[8], který vznikl doplněním jazyka DAML (DARPA Agent Markup Language), vyvinutého americkou armádní organizací DARPA, o některé konstrukce evropského projektu OIL (Ontology Inference Layer).

Vytvářením tříd, definováním vztahů mezi třídami a popisem vlastností prvků těchto tříd modelujeme v jazyce OWL určitý systém znalostí o dané oblasti zájmu.

V následujícím textu se budu snažit formou příkladů nastínit tvorbu základních struktur a vztahů v ontologii napsané v jazyce OWL. Jako inspirace pro tvorbu příkladů poslouží organizační struktura Masarykovy univerzity v Brně. Zdrojem pro popis jazyka mi byly především internetové stránky konsorcia W3C[9]. A z nich pak nejvíce dokumenty OWL Web Ontology Language Reference[10] a OWL Web Ontology Language Guide[11].

Obsah | Rejstřík

Jmenné prostory

Na začátku každé ontologie by neměl chybět seznam dokumentů (slovníků), jež obsahují značky, které budeme při tvorbě nové ontologie používat. Proto hned na úvod uvedeme deklarace jmenných prostorů uzavřené v tagu <rdf:RDF>.

Jmenné prostory nám zajistí přiřazení jednoznačného jména elementům definovaným v jiných ontologiích. Tím zabráníme kupříkladu konfiktu jmen, ke kterému by došlo v případě, že by v ontologii byl uveden element, jehož význam by byl definován ve dvou různých slovnících. Díky jmenným prostorům však můžeme stejně se jmenující elementy rozlišit pomocí jednoduchých prefixů.

<rdf:RDF 
    xmlns      ="http://www.vzorova.ontologie.cz/#" 
    xmlns:muni ="http://www.vzorova.ontologie.cz/muni#"       
    xmlns:owl  ="http://www.w3.org/2002/07/owl#"
    xmlns:rdf  ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs ="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:xsd  ="http://www.w3.org/2000/10/XMLSchema#"
    xmlns:msmt ="http://www.msmt.cz/namespace/msmt#"

První dvě deklarace zajistí, že nebude-li před značkou uveden žádný prefix (resp. prefix "muni"), bude se uvažovat element definovaný ve stávajícím dokumentu. Následující deklarace odkazují na jmenné prostory OWL, RDF, RDF Schema a XML Schema, protože jejich konstrukce budeme při vytváření ontologie používat. Poslední deklarace je uvedena čistě pro ilustraci a odkazuje na (ve skutečnosti neexistující) jmenný prostor Ministerstva školství, mládeže a tělovýchovy, který by mohl obsahovat některé elementy, které budeme chtít použít.

Tag <rdf:RDF> zůstává neuzavřen. Bude uzavřen až na úplném konci dokumentu, až bude definice ontologie kompletní.

Obsah | Rejstřík

Hlavička

Hlavička obsahuje některá důležitá sdělení o ontologii. Tato tvrzení jsou uzavřena v tagu <owl:Ontology>. Nachází se zde komentáře, informace o verzi dokumentu a o vnoření dalších ontologií.

<owl:Ontology rdf:about="http://www.vzorova.ontologie.cz/muni">
  <owl:versionInfo>v 1.0, 13.01.2003, 14:21</owl:versionInfo>
  <owl:priorVersion rdf:resource=
      "http://www.vzorova.ontologie.cz/muni030101.owl"/> 
  <rdfs:comment> Vzorová OWL ontologie pro bakalářskou 
      práci Jazyk OWL a sémantický web
  </rdfs:comment>
  <owl:imports rdf:resource="http://vzorova.ontologie/msmt"/>
</owl:Ontology>

Atribut about označuje zdroj, jež je v dokumentu popisován. Standardně to bývá URL stávajícího dokumentu.

Informace o verzích

V hlavičce se může nacházet více druhů tagů, sloužících pro práci s různými verzemi dokumentu. Owl:versionInfo udává verzi stávajícího dokumentu. Verze je uváděna v nějakém předem sjednaném tvaru, aby tato informace mohla být použita například automatickým kontrolním systémem apod. Owl:priorVersion označuje předchozí verzi dokumentu. Tuto informaci opět využívají automatizované systémy. Pokud stávající verze není kompatibilní s předcházející, použije se značky owl:incompatibleWith. Lze použít rovněž owl:backwardCompatibleWith, který udává, že dokument je zpětně kompatibilní. Pokud tento tag chybí, zpětnou kompatibilitu nelze zaručit. Syntaxe dvou naposledy uvedených tagů je stejná jako u owl:priorVersion uvedeného v příkladě.

Posledními možnostmi jsou tagy owl:deprecatedClass a owl:deprecatedProperty, sloužící k označení třídy (resp. vlastnosti), jež je do ontologie zařazena z historických důvodů, ještě je podporována, ale v příštích verzích bude nahrazena jinou třídou (vlastností) nebo zrušena.

<owl:DeprecatedClass rdf:ID="Fakulta informatiky">
  <rdfs:comment>Tato třída bude v budoucnu nahrazena 
                třídou FI</rdfs:comment>
</owl:DeprecatedClass>

rdfs:comment

Rdfs:comment je tag pro komentář. Nijak neovlivňuje strukturu ontologie.

owl:imports

Owl:imports vkládá do dokumentu jinou ontologii, uvedenou atributem rdf:resource. Rozdíl mezi použitím tohoto tagu a použitím jmenného prostoru je ten, že deklarace jmenného prostoru pouze přiřazuje jednoznačná jména elementům z jiných ontologií, zatímco owl:imports přenáší do dokumentu i struktury a vztahy. Tento tag se proto používá většinou pro ontologie, které obsahují pouze definice a nezavádějí nová jména. V případě, že se v importované ontologii zavádějí nová jména, se doporučuje pro tyto ontologie deklarovat též jmenný prostor.

Hlavičku uzavřeme tagem </owl:Ontology>. Následuje seznam definic tříd a vztahů mezi nimi tvořící vlastní ontologii.

Obsah | Rejstřík

Třídy

Základem každé ontologie jsou třídy, což jsou zpravidla hierarchicky uspořádané množiny prvků se stejnými vlastnostmi. Třídu jednoznačně popisuje její jméno a soubor vlastností jejích prvků[OWL]. Prvky třídy nazýváme individuy či instancemi třídy a jedná se v podstatě o objekty zájmu určité oblasti. Jak bude ještě uvedeno v kapitole zabývající se rozdíly mezi jednotlivými verzemi jazyka OWL, závisí na konkrétní verzi používaného jazyka, zda instancemi mohou být také třídy samotné či nikoliv.

Existuje několik základních způsobů definice třídy.

Třídy definované identifikátorem

Třída lze definovat pouze uvedením svého jména.

<owl:Class rdf:ID="Student"/>

Tento příkaz nám o třídě říká jedinou věc. A to, že existuje. Nijak nepopisuje množinu jejích členů ani vlastnosti, které musí její prvky splňovat. V jazyce OWL jsou dvě třídy již předem definovány. Jsou to owl:Thing a owl:Nothing. Element owl:Thing označuje množinu všech individuí, která se v ontologii vyskytují. Každá třída definované ontologie je tedy podtřídou owl:Thing. Na druhou stranu owl:Nothing označuje prázdnou množinu a to znamená, že je podtřídou každé námi definované třídy.

Třídy definované výčtem prvků

Prvním z netriviálních způsobů jak definovat třídy, je vyjmenování jejích prvků. V tomto případě používáme element owl:oneOf s atributem rdf:parseType="Collection". Je důležité si uvědomit, že výčet prvků je konečný, proto nelze v průběhu dalšího návrhu ontologie přidávat do třídy žádná další individua.

<owl:Class>
  <owl:oneOf rdf:parseType="Collection">
    <owl:Thing rdf:about="#FI"/>      
    <owl:Thing rdf:about="#FSS"/>
     .
     .
    <owl:Thing rdf:about="#PrF"/>
  </owl:oneOf>
</owl:Class>

Příklad definuje třídu, jež sdružuje individua označující jednotlivé fakulty Masarykovy univerzity. Můžeme si všimnout, že v této definici není uvedeno jméno výsledné třídy. Jedná se proto o definici tzv. anonymní třídy[DAML+OIL]. Na anonymní třídu se nelze v ontologii odkazovat. Používají se proto vštšinou ve složitějších konstrukcích. Vytváříme-li například třídu, která je výsledkem průniku dvou tříd, není nutné mít tyto dvě třídy pojmenované. Stačí nám pojmenovat výsledný průnik. Čtenáře však může napadnout, že je celkem nesmyslné dělat průnik dvou anonymních tříd definovaných výčtem. Vždyť daleko jednodušší je definovat třídu výčtem pouze těch prvků, které patří do obou tříd. To je samozřejmě pravda. Uvědomme si však, že dané dvě třídy nemusí být vůbec definovány výčtem, ale kupříkladu též průnikem nebo sjednocením dalších tříd. V takových složitých konstrukcích již má použití anonymních tříd svůj význam.

Zbývá ještě dodat, že chceme-li tedy nějakou třídu pojmenovat, použijeme v elementu owl:Class atribut rdf:ID="jméno třídy". V našem příkladu bude tedy výsledná třída vypadat

<owl:Class rdf:ID="muni">
  <owl:oneOf rdf:parseType="Collection">
    <owl:Thing rdf:about="#FI"/>      
    <owl:Thing rdf:about="#FSS"/>
     .
     .
    <owl:Thing rdf:about="#PrF"/>
  </owl:oneOf>
</owl:Class>

Rovněž zde vidíme použití elementu owl:Thing s atributem označujícím jméno fakulty. Jak již bylo uvedeno výše, každá třída definované ontologie je podtřídou owl:Thing a tak je naše definice korektní.

Třídy definované sjednocením

Při definici třídy sjednocením se používá konstrukce owl:unionOf. Opět je uveden atribut rdf:parseType="Collection", který vytváří soubor údajů. V našem případě soubor prvků, které náleží alespoň do jedné z uvedených tříd.

<owl:Class>
  <owl:unionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#studentFI_BcInf"/>
    <owl:Class rdf:about="#studentFI_BcApInf"/>
  </owl:unionOf>
</owl:Class>

vytvoří třídu sdružující všechny studenty bakalářského (obor informatika a obor aplikovaná informatika) studia na fakultě informatiky. Samozřejmě počet tříd v seznamu není, stejně jako u následující definice průnikem, omezený na dvě. Definovat třídu lze tedy sjednocením více tříd.

Třídy definované průnikem

Definice je velmi podobná definici předešlé, jen s tím rozdílem, že používáme element owl:intersectionOf. Výsledná třída obsahuje pouze ty prvky, které se vyskytují v každé třídě seznamu.

<owl:Class>
  <owl:intersection rdf:parseType="Collection">
    <owl:Class rdf:about="#studentPrF"/>
    <owl:Class rdf:about="#studentFF"/>
    <owl:Class rdf:about="#studentLF"/>
  </owl:intersection>
</owl:Class>

definuje třídu studentů, kteří studují zároveň na právnické, filosofické a lékařské fakultě. Není zrovna moc pravděpodobné, že se nějaký takový student skutečně vyskytuje, nicméně jako příklad nám to postačuje. Měli bychom si též uvědomit, že naše definice počítá s předpokladem, že všechny položky v seznamu odkazují na navzájem různá individua[OWL]. Ne vždy však musí rozdílné identifikátory odkazovat na rozdílné zdroje, proto se nám může stát, že výsledek průniku, ale například i sjednocení a ostatních operací, může být poněkud matoucí. Je proto dobré si při návrhu ontologie pečlivě rozmyslet, jaké URI odkazuje na který zdroj. Bližší seznámení s tímto problémem bude ještě následovat v sekci o individuích.

Třídy definované doplňkem

Po sjednocení a průniku je doplňek třetí množinovou operací použitelnou v jazyce OWL. Používáme značku owl:complemetOf. Zatímco v předchozích dvou případech mohly mít operace více parametrů, nyní smí být použit pouze jeden. Výsledná třída obsahuje prvky, které nepatří do třídy uváděné jako parametr. Při použití tohoto elementu doporučuji být velmi opatrný. Při samotném použití owl:complementOf může obsahovat výsledná třída obrovské množstí prvků. Například definice

<owl:Class>
  <owl:complementOf>
    <owl:Class rdf:about="#studentPrF"/>
  </owl:complementOf>
</owl:Class>

pro vytvoření třídy všech studentů nestudujících na právnické fakultě, je chybná, protože výsledná třída bude zahrnovat všechna individua, která nejsou studenty právnické fakulty. To znamená i například předměty vyučované na právnické fakultě, učitelé z ostatních fakult, apod. Proto je použití owl:complementOf vhodné kombinovat s ostatními množinovými operátory. Požadovaná třída by pak mohla být definována následovně

<owl:Class>
  <owl:intersectioOf rdf:parseType="Collection">
    <owl:Class rdf:about="#Student"/>
    <owl:complementOf>
      <owl:Class rdf:about="#studentPrF"/>  
    <owl:complementOf/>
  </owl:intersectionOf>
</owl:Class>

Obsah | Rejstřík

Vlastnosti

Zatímco třídy a individua vytvářejí jakousi taxonomi, strukturu ontologie, vlastnosti vnášejí do dokumentu jistá tvrzení o třídách a jejich prvcích. Vlastnost je binární relace, která spojuje buď dva objekty nebo objekt s hodnotou datového typu. Té dříve uvedené budeme říkat objektová vlastnost a definovat elementem owl:objectProperty. Druhou budeme označovat datová nebo též "datotypová" a definovat jí budeme pomocí značky owl:datatypeProperty. Někdy bývá vlastnost též označována pojmem "slot".

Existuje několik způsobů, jak definovat vlastnost. Nejjednodušším, stejně jako při definici tříd, je prosté uvedení její existence uvedením <owl:ObjectProperty rdf:ID="jméno vlastnosti"/> (v případě datotypové vlastnosti <owl:DatatypeProperty rdf:ID="jméno vlastnosti"/>). O vlastnosti se opět nedozvíme nic jiného, než že existuje. Většinou se však vlastnosti definují složitějším způsobem.

rdfs:subPropertyOf

Říká, že vlastnost je podmnožinou vlastnosti jiné. Přesněji řečeno množina prvků splňujících jednu vlastnost je podmnožinou množinu individuí splňujích vlastnost jinou. Prvkem je v tomto případě myšlena dvojice individuí, mezi kterými existuje patřičná relace.

 
<owl:ObjectProperty rdf:ID="obhajuje_projekt">
  <rdfs:subPropertyOf rdf:resource="#dela_projekt"/>
</owl:ObjectProperty>
  

Jistě množina prvků (např. dvojice student - název projektu) postihující ty studenty, co projekt obhajují, je podmnožinou těch, co na nějakém projektu pouze pracují.

rdfs:domain

Uvádí definiční obor dané vlastnosti. To nedovolí, aby dané vlastnosti mohly nabývat jiné prvky, než prvky třídy uvedené v rdfs:domain.

 
<owl:ObjectProperty rdf:ID="vlastni_ISIC">
  <rdfs:domain>
    <owl:Class rdf:about="#Student"/>
  </rdfs:domain>
</owl:ObjectProperty>  

Příklad říká, že vlastnit ISIC kartu mohou pouze studenti. Přesněji řečeno: vlastnost "vlastni_ISIC" mohou mít pouze individua patřící do třídy "#Student".

rdfs:range

Udává obor hodnot, přičemž jako parametr může být uvedena buď třída nebo datový typ [12].

 
<owl:ObjectProperty rdf:ID="ma_zvlastni_pristup">
  <rdfs:range>
    <owl:Class>    
      <owl:unionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#laboratore"/>
        .
        .
        <owl:Class rdf:about="#neverejny_server"/>
      </owl:unionOf>
    </owl:Class>    
  </rdfs:range>
</owl:ObjectProperty>  

Obsah | Rejstřík

Individua

Individua jsou prvky tříd. Bývají též nazývána instancemi či objekty. Minimální informace, kterou musíme o individuu uvést, je, že náleží do nějaké třídy. Jeden objekt může být členem více tříd.

 
<student rdf:ID="39415" /> 
  

říká, že prvkem třídy "student" je nějaké individuum, odkazované číslem 39415 (uvažujeme, že studenti jsou jednoznačně identifikováni číslem v rámci celé univerzity). Většinou však o prvku třídy uvádíme více skutečností, než pouze jeho příslušnost do určité třídy.

 
<student rdf:ID="39415"> 
 <jmeno rdf:datatype="&xsd;normalizedString">Jaroslav</jmeno> 
 <prijmeni rdf:datatype="&xsd;normalizedString">Hradsky</prijmeni> 
 .
 .
 <studuje_fakultu rdf:resource:"#FI"/>
 <ma_pristup rdf:resource="#FI_hala/>
</student>
  

V prostředí Internetu se nám mnohdy stane, že stejný zdroj je odkazován různými jmény. Je proto důležité umět odlišit, zda dva stejné odkazy označují stejné nebo rozdílné zdroje[OWL]. Při návrhu ontologie bychom měli s touto možností počítat a být připraveni. Jazyk OWL k odlišení či naopak k uvedení, že různá URI odkazují na stejný zdroj, používá elementy owl:sameAs, owl:sameIndividualAs, owl:differentFrom a owl:AllDifferent. Jedná se o vlastnosti, jejichž definičním oborem i oborem hodnot jsou individua.

owl:sameAs (owl:sameIndividualAs)

Tyto dva elementy jsou identické (značka owl:sameIndividualAs je do jazyka zařazena pouze z historických důvodů). Vyjadřují, že dvě různá URI označují to samé individuum. Nemusí se primárně jednat o idividuum, může jít i o jiný zdroj.

 
<student rdf:about="#39415">
  <owl:sameAs rdf:resource="#xhradsky"/>
</student>
  

Příklad říká, že v naší ontologii je jedno, jestli se na daného studenta odkazujeme jeho identifikačním číslem nebo kupříkladu jeho přihlašovacím jménem do informačního systému. Obě dvě možnosti totiž odkazují na stejnou instansi třídy "#student".

owl:differentFrom, owl:AllDifferent

Na rozdíl od předchozího tyto elementy vyjadřují, že dvě URI odkazují na různé zdroje.

 
<student rdf:about="#Jan_Novak">
  <owl:sameAs rdf:resource="#novak"/>
</student>
  

V případě, že chceme uvést více individuí, která se všechna navzájem liší, použijeme owl:AllDifferent. Jedná se o zvláštní třídu, která vždy musí obsahovat vlastnost owl:distinctMembers[OWL].

 
<owl:AllDifferent>
  <owl:distinctMembers rdf:parseType="Collection">
    <predmet rdf:about="#AlgebraI"/>
    <predmet rdf:about="#AlgebraII"/>
    <predmet rdf:about="#Linearni_AlgebraI"/>
    <predmet rdf:about="#Linearni_AlgebraII"/>
  </owl:distinctMembers>
</owl:AllDifferent>  

nám zaručí, že každý z uvedených identifikátorů odkazuje na jiný předmět.

Obsah | Rejstřík

Omezení

Omezení používaná při definici tříd

Kromě způsobů definice tříd již zmíněných v kapitole o třídách, existuje ještě jeden způsob definice. A tím je definování anonymní třídy jako množiny individuí splňujících určitá omezení. Jedná se o tzv. lokální omezení, protože se vztahují na vlastnost pouze v případě jejího použití na konkrétní třídu. Na rozdíl od globálních omezení, která se vztahují na vlastnost jako takovou, tzn. aplikovanou na jakoukoliv třídu. Globální omezení budou popsána v následující podkapitole.

Lokální omezení může být buď omezení rozsahu hodnot nebo omezení mohutnosti[OWL]. První případ specifikuje rozsah hodnot, jakých může vlastnost nabývat. Jako argument je použita buď třída a hodnoty pak smějí být instance této třídy, nebo je jako argument použit určitý rozsah datového typu. Používá elementy owl:allValuesFrom, owl:someValuesFrom a owl:hasValue.

Druhý případ omezuje počet hodnot, kterých smí vlastnost nabývat a používá elementy owl:maxCardinality, owl:minCardinality a owl:cardinality.

owl:allValuesFrom

Definuje třídu všech prvků takových, že všechny hodnoty určité jejich vlastnosti nabývají pouze hodnot v daném rozsahu [OWL]. Tento element odpovídá univerzálnímu kvantifikátoru v predikátové logice. Následující příklad definuje třídu individuí, která učí nějaký (jakýkoliv) předmět.

<owl:Restriction>
  <owl:onProperty rdf:resource="#uci"/>
  <owl:allValuesFrom rdf:resource="#predmet"/>
</owl:Restriction>

owl:someValuesFrom

Podobně jako v předchozím případě, ale tentokrát element odpovídá existenčnímu kvantifikátoru predikátové logiky. Definuje třídu všech prvků takových, že alespoň jedna z hodnot určité vlastnosti spadá do požadovaného rozsahu

<owl:Restriction>
  <owl:onProperty rdf:resource="#uci"/>
  <owl:someValuesFrom rdf:resource="#mat_predmet"/>
</owl:Restriction>

vymezuje všechna individua, která vyučují alespoň jeden předmět matematického charakteru. Zahrnuje samozřejmě i ty vyučující, kteří kromě matematických předmětů vyučují i předměty jiného charakteru. Pro lepší pochopení rozdílu mezi tímto a předchozím elementem bude dobré uvést ještě jeden příklad. Uvedeme v něm opět atribut "#mat_predmet", ale použijeme element z předchozího příkladu.

<owl:Restriction>
  <owl:onProperty rdf:resource="#uci"/>
  <owl:allValuesFrom rdf:resource="#mat_predmet"/>
</owl:Restriction>

definuje třídu takových individuí, která vyučují pouze matematické předměty.

owl:hasValue

Jestliže jsme pochopili použití owl:allValuesFrom a owl:someValuesFrom, s tímto elementem již nemůžeme mít problémy. Jak lze jistě vytušit, vymezuje třídu prvků, jejichž alespoň jedna hodnota dané vlastnosti je rovna právě uvedené hodnotě.

                                                                                          
<owl:Restriction>
  <owl:onProperty rdf:resource="#uci" />
  <owl:hasValue rdf:resource="#Algebra II"  />
</owl:Restriction>

definuje třídu všech individuí, jež vyučují předmět odkazovaný pomocí URI "#Algebra II".

Omezení mohutnosti

Omezení mohutnosti používáme v případě, že chceme definovat třídu, ve které požadujeme, aby některá vlastnost měla omezený počet možných hodnot. Elementy pro omezení mohutnosti obsahují atribut rdf:datatype s hodnotou " &xsd;nonNegativeInteger". Jedná se o datový typ používaný v XML Schema [13].

Představme si, že chceme definovat třídu studentů, kteří mají zapsáno nejvýše 10 předmětů. Použijeme

                                                                                          
<owl:Restriction>
  <owl:onProperty rdf:resource="#ma_zapsano"/>
  <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">
                  10</owl:maxCardinality>
</owl:Restriction>

Počet hodnot dané vlastnosti lze pochopitelně omezovat nejen shora, ale i zdola. K tomu slouží owl:minCardinality. Omezit počet hodnot lze samozřejmě oboustranně a proto množinu studentů, majících zapsáno alespoň 5, ale nejvýše 10 předmětů, definujeme takto

                                                                                          
<owl:Restriction>
  <owl:onProperty rdf:resource="#ma_zapsano"/>
  <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">5
  </owl:minCardinality>
  <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">10
  </owl:maxCardinality>
  owl:Restriction>

Poslední možností jak omezit mohutnost je element owl:cardinality, který udává přesný počet hodnot, jichž smí vlastnost nabývat. Stejného efektu ovšem dosáhneme použijeme-li oba předchozí elementy se stejnou hodnotou. Může se tedy stát, že značka owl:cardinality nebude v dalších verzích jazyka podporována. Proto raději používejme kombinaci owl:maxCardinality a owl:minCardinality.

Omezení používaná při definici vlastností

Jedná se o takzvaná globální omezení, protože se vztahují na vlastnost aplikovanou na jakoukoliv třídu. Do globálních omezení lze zařadit též omezení definičního oboru a oboru hodnot, které jsme popsali v kapitole o vlastnostech. Nebudeme je proto již popisovat.

owl:FunctionalProperty

Jedná se v podstatě o omezení mohutnosti vlastnosti. Mějme však na paměti, že v odlišném významu než omezení mohutnosti při definici tříd. Ještě jednou opakuji, že tentokrát se jedná o globální omezení. Tudíž dané omezení musí splňovat všechna individua mající danou vlastnost. V případě použití owl:FunctionalProperty toto omezení znamená, že ke každému individuu z definičního oboru přísluší právě jedna hodnota z oboru hodnot.

Pokusme se na tento element podívat z matematického hlediska[OWL]. Nechť R(z,k) je binární relace (pro nás vlastnost), vyjadřující fakt, že daný zaměstnanec "z" pracuje v určité kanceláři "k". Potom element owl:FunctionalProperty lze vyjádřit implikací:"Jestliže R(z1,k1) a R(z1,k2), potom k1=k2."

 
<owl:ObjectProperty rdf:ID="ma_kancelar">
  <rdfs:domain rdf:resource="#zamestnanec"/>
  <rdfs:range  rdf:resource="#kancelar"/>
</owl:ObjectProperty>
<owl:FunctionalProperty rdf:about="#ma_kancelar"/>
  

Příklad říká, že jednu kancelář může sdílet více zaměstnanců, ale je celkem zbytečné, aby jeden zaměstnanec měl více kanceláří.

Jen pro úplnost ještě uvedeme, že stejný fakt lze vyjádřit syntakticky poněkud odlišným způsobem.

 
<owl:ObjectProperty rdf:ID="ma_kancelar">
  <rdf:type    rdf:resource="&owl;FunctionalProperty"/>
  <rdfs:domain rdf:resource="#zamestnanec"/>
  <rdfs:range  rdf:resource="#kancelar"/>
</owl:ObjectProperty>  

owl:InverseFunctionalProperty

Podobně jako v předchozím případě, matematicky vyjádříme jako:"Jestliže R(z1,k1) a R(z2,k1), potom z1=z2". Nyní relace R vyjadřuje fakt, že zaměstananec má nějaké telefonní číslo. Zaměstnanec může mít více telefonních čísel, ale nepovolíme, a by dva zaměstnanci měli telefonní číslo shodné.

 
<owl:InverseFunctionalProperty rdf:ID="ma_tel_cislo">
  <rdfs:domain rdf:resource="#zamestnanec"/>
  <rdfs:range rdf:resource="#tel_cislo"/>
</owl:InverseFunctionalProperty>
 

Na rozdíl od owl:FunctionalProperty nemusíme uvádět, zda je vlastnost typu owl:objectProperty nebo owl:datatypeProperty, protože se z definice jedná o owl:objectProperty.

owl:inverseOf

Definuje inverzní relaci k nějaké vlastnosti.

 
<owl:ObjectProperty rdf:ID="uci">
  <owl:inverseOf rdf:resource="#je_vyucovan"/>
</owl:ObjectProperty>
  

vyjadřuje inverzní relaci mezi vlastností "uci" (učitel učí nějaký předmět) a "je_vyucovan" (předmět je vyučován učitelem).

owl:SymmetricProperty

Definuje symetrickou relaci.

 
<owl:SymetricProperty rdf:ID="spolupracuje">
  <rdfs:domain rdf:resource="#Student"/>
  <rdfs:range  rdf:resource="#Student"/>
</owl:SymetricProperty>
 

owl:TransitiveProperty

Definuje tranzitivní relaci.

 
<owl:TransitiveProperty rdf:ID="podrizeny">
  <rdfs:domain rdf:resource="#Zamestnanec"/>
  <rdfs:range  rdf:resource="#Zamestnanec"/>
</owl:TransitiveProperty>
 

Obsah | Rejstřík

Axiomy

Axiomy vyjadřují některá nejzákladnější tvrzení o třídách (vlastnostech).

rdfs:subClassOf, rdfs:subPropertyOf

Element rdfs:subClassOf představuje jednu z nezbytných konstrukcí pro tvorbu hierarchické struktury. Definuje, že třída je podtřídou jiné třídy.

Při návrhu ontologie může být někdy obtížné rozlišit, zda nějaké individuum bude reprezentovat instanci určité třídy nebo její podtřídu[ OWL]. Jednoduchou pomůckou pro rozlišení mezi těmito dvěma možnostmi je fakt, že podtřída by měla popisovat nějakou podmnožinu třídy, jíž je podtřídou. Zatímco instance je pouze jedním prvkem třídy. Jestliže třída "muni" popisuje množinou všech fakult Masarykovy univerzity, pak třída "FI" nemůže být označena jako její podtřída, protože nepopisuje podmnožinu fakult. Ona sama je fakultou.

<owl:Class rdf:ID="Ucitel"> 
  <rdfs:subClassOf rdf:resource="#Zamestnanec_skoly" />
</owl:Class> 
 

říká, že všichni učitelé jsou zároveň i zaměstnanci školy.

O elementu rdfs:subPropertyOf jsme již mluvili. Zbývá znad jen dodat, že i on je jedním ze základních axiomů.

owl:equivalentClass, owl:equivalentProperty

Umožňuje vyjádřit, že dvě třídy obsahují shodnou množinu individuí. Resp., že dvě vlastnosti mají stejný definiční obor a obor hodnot. Nepleťme si to ovšem z již zmiňovaným elementem owl:sameAs. Owl:equivalentClass neříká, že struktura těchto tříd je shodná, hovoří pouze o shodných množinách jejich prvků.

owl:disjointWith

Vyjadřuje disjunktnost tříd. Individuum náležící do jedné třídy nesmí zároveň patřit do třídy jiné. Pro příklad použijeme kombinaci s již výše uvedenými konstrukcemi.

<owl:Class rdf:ID="StudentFI_Mgr">
  <rdfs:subClassOf rdf:resource="#StudentFI" />
  <owl:disjointWith rdf:resource="#StudentFI_Bc"/>
  <owl:disjointWith rdf:resource="#StudentFI_D"/>
</owl:Class> 
 

Student magisterského programu na fakultě informatiky je podmnožinou všech studentů na FI, ale nemůže být zároveň studentem bakalářského nebo doktorského studijního programu.

Obsah | Rejstřík

Verze jazyka

Ne každý návrhář ontologie využije k její tvorbě všechny vymoženosti a záludnosti jazyka OWL. Proto byly navrženy i jednodušší verze, které sice neumožňují nějaké vysoce sofistikované konstrukce, ale pro tvorbu základních struktur postačují. V jazyce OWL rozlišujeme tři základní úrovně složitosti (verze jazyka), každá s jinou vyjadřovací silou[OWL].

OWL Full

Obsahuje všechny elementy a konstrukce jazyka. Nemá žádná omezení. Umožňuje i neomezené použití RDF konstrukcí. Třídy smějí být použity jako individua.

V této práci se vychází právě z použití jazyka OWL Full.

OWL DL

Oproti OWL Full přináší již jistá omezení. Není možno používat všechny RDF konstrukce. Třída ani vlastnost nesmí být zároveň indoviduem. Obě množiny vlastností (vlastnosti datového typu i vlastnosti objektů) musí být disjunktní. Tzn., že pro vlastnosti datového typu nesmí být použity elementy owl:inverseOf, owl:InverseFunctionalProperty, owl:SymetricProperty a owl:TransitiveProperty. Všechny axiomy musí být definovány tak, aby se v nich nevyskytovaly žádné nedefinované části. Argumenty elementů owl:same AS, owl:differentFrom a owl:AllDiferent nesmí být nepojmenovaná individua.

OWL Lite

Představuje nejnižší úroveň složitosti. S její pomocí definujeme základní taxonomii a jednoduchá omezení. Kromě omezení pro OWL DL, jsou zde ještě nějaká omezení navíc. OWL Lite zakazuje používání anonymních tříd ve většině elementů. Dále nelze používat elementy owl:oneOf, owl:unionOf, owl:complementOf, owl:hasValue, owl:disjointWith, owl:DataRange a owl:Nothing.

Obsah | Rejstřík

Kapitola 4. Závěr

Sémantický web na své uvedení v širším rozsahu teprve čeká. Vize tvůrců počítá se zásadní změnou formy poskytování dat na Internetu. Dokumenty mají být přesně označkovány, což umožní automatizovaným vyhledávacím nástrojům výrazně zlepšit orientaci jak uvnitř dokumentu tak mezi jednotlivými dokumenty navzájem. Vyhledání konkrétní informace v takovém prostředí je pak daleko rychlejší než v prostředí dnešního Internetu.

Jak již bylo uvedeno, sémantický web na své uvedení ještě čeká, již dnes se však můžeme setkat s technologiemi a standardy, s jejichž použitím sémantický web počítá. Vývoj však jde neustále kupředu a tak z dnes již známých a celkem zavedených formátů, jako je XML nebo RDF, vznikají nová řešení. Jednou z technologií, vyvinutých na základě XML a RDF, je i jazyk OWL. Jazyk pro tvorbu a popis jedné ze součástí znalostního modelování - ontologie.

Cílem práce bylo seznámit čtenáře se základy jeho použítí. Kombinováním jednoduchých struktur popsaných v této práci by měl být potencionální návrhář schopen vytvářet i složitě strukturované a propracované ontologie.

Problémem při psaní práce byl relativně omezený počet zdrojů, zabývajících se danou problematikou. Doufám, že tento dokument bude přínosem zejména pro česky hovořící čtenáře, jež problematika kolem sémantického webu a jazyko OWL zajímá.

Bibliografie

[Lee] Timothy Berners-Lee. James Hendler. Ora Lassila. The Semantic Web. Scientific American, 2001. http://www.sciam.com .

[Ogbuji] Uche Ogbuji. The Languages of the Semantic Web. New Architect Magazine, 2002. http://www.newarchitectmag.com .

[OWL] Frank van Harmelen. Jim Hendler. Ian Horrocks. Deborah L. McGuiness. Peter F. Patel-Schneider. Lynn Andrea Stein. OWL Web Ontology Language Reference, W3C Working Draft 31 March 2003. W3C, 2003. http://www.w3.org/TR/owl-ref/ .

[DAML+OIL] Dan Connoly. Frank van Harmelen. Ian Horrocks. Deborah L. McGuiness. Peter F. Patel-Schneider. Lynn Andrea Stein. Annotated DAML+OIL Ontology Markup, W3C Note 18 December 2001. W3C, 2001. http://www.w3.org/TR/daml+oil-walkthru/ .

[OWL Guide] Michael K. Smith. Chris Welty. Ian Horrocks. Deborah L. McGuiness. OWL Web Ontology Language Guide, W3C Working Draft 31 March 2003. W3C, 2003. http://www.w3.org/TR/owl-guide/ .

[Horrocs] Ian Horrocks. DAML+OIL:A Reason-able Web Ontology Language. University of Manchester, 2002. http://www.cs.man.ac.uk/~horrocks/ .

[Pavlovic] Jan Pavlovič. Tvorba dokumentu v XML. Bakalářská práce FI MU, 2001. http://www.fi.muni.cz/~xpavlov/xml/examples/bc1/bc1.html .

[RDF] Graham Klyne. Jeremy J. Carrol. Resource Description Framework (RDF):Concepts and Abstract Syntax. W3C Working Draft,leden 2003. http://www.w3.org/TR/2003/WD-rdf-concepts-20030123/ .

[XML] Tim Bray, . Jean Paoli, . C.M. Sperberg-McQueen, . Eve Maler. Extensible Markup Language (XML) 1.0 (Second Edition), W3C Recommendation 6 October 2000. W3C, 2000. http://www.w3.org/TR/REC-xml .

Rejstřík

A

agenti, Vyhledávací agenti
axiomy, Axiomy

D

DAML+OIL, Jazyk OWL

H

hlavička, Hlavička
HTML značky, Značky sémantického webu

I

individuum, Individua

J

jmenný prostor, Jmenné prostory

K

kardinalita, Omezení mohutnosti

M

mohutnost, Omezení mohutnosti

O

omezení, Omezení
ontologie, Úvod, Ontologie
OWL, Jazyk OWL, Závěr
OWL DL, OWL DL
OWL Full, OWL Full
OWL Lite, OWL Lite
owl:AllDifferent, owl:differentFrom, owl:AllDifferent
owl:allValuesFrom, owl:allValuesFrom
owl:backwardCompatibleWith, Informace o verzích
owl:cardinality, Omezení mohutnosti
owl:complementOf, Doplňkem ke třídě
owl:deprecatedClass, Informace o verzích
owl:deprecatedProperty, Informace o verzích
owl:differentFrom, owl:differentFrom, owl:AllDifferent
owl:disjointWith, owl:disjointWith
owl:equivalentClass, owl:equivalentClass, owl:equivalentProperty
owl:equivalentProperty, owl:equivalentClass, owl:equivalentProperty
owl:FunctionalProperty, owl:FunctionalProperty
owl:hasValue, owl:hasValue
owl:imports, owl:imports
owl:incompatibleWith, Informace o verzích
owl:intersectionOf, Průnikem tříd
owl:InverseFunctionalProperty, owl:InverseFunctionalProperty
owl:inverseOf, owl:inverseOf
owl:minCardinality, Omezení mohutnosti
owl:oneOf, Výčtem prvků
owl:priorVersion, Informace o verzích
owl:sameAs, owl:sameAs (owl:sameIndividualAs) , owl:equivalentClass, owl:equivalentProperty
owl:sameIndividualAs, owl:sameAs (owl:sameIndividualAs)
owl:someValuesFrom, owl:someValuesFrom
owl:SymetricProperty, owl:SymmetricProperty
owl:TransitiveProperty, owl:TransitiveProperty
owl:unionOf, Sjednocením tříd
owl:versionInfo, Informace o verzích

R

RDF, RDF, Jazyk OWL, Závěr
RDF Schema, Jazyk OWL
rdfs:comment, rdfs:comment
rdfs:domain, rdfs:domain
rdfs:range, rdfs:range
rdfs:subClassOf, rdfs:subClassOf, rdfs:subPropertyOf
rdfs:subpropertyOf, rdfs:subPropertyOf
rdfs:subPropertyOf, rdfs:subClassOf, rdfs:subPropertyOf
restrikce, Omezení

S

současný web, Co je to sémantický web ?
sémantický web, Sémantický web , Závěr