Az OWL Web Ontológia Nyelv – Útmutató

(Ez a fordítás a W3C Magyar Irodájának megbízásából, az
Informatikai és Hírközlési Minisztérium

támogatásával készült)

Az eredeti dokumentum:
OWL Web Ontology Languaguage Guide
http://www.w3.org/TR/2004/REC-owl-guide-20040210/
A lefordított dokumentum:
http://www.w3c.hu/forditasok/OWL/REC-owl-guide-20040210.html
Magyar fordítás (Hungarian translation):
Pataki Ernő (pataki.erno@w3c.hu)
A fordítás státusa:
Kézirat. Lezárva: 2004.10.16.
Utoljára módosítva: 2005.04.25.
Fontos figyelmeztetés:
Ez a fordítás a W3C engedélyével, a fordításokra előírt formai szabályok szerint, lelkiismeretes szakfordítói munkával készült. Ennek ellenére nem lehet kizárni, hogy hibák maradtak a fordításban. Emellett a magyar fordítás nem is követi feltétlenül az eredeti angol nyelvű dokumentumon végrehajtott jövőbeli változtatásokat. Ezért a fordítás nem tekinthető normatív W3C dokumentumnak. A dokumentum normatív, mindenkori legújabb, hivatalos, angol nyelvű változatát lásd a W3C megfelelő weblapján: http://www.w3.org/TR/owl-guide/ .
Megjegyzések a fordításhoz:
1.) A fordítással kapcsolatos olvasói észrevételeket a fenti e-posta címre kérjük.
2.) A fordító a saját megjegyzéseit feltűnően elkülöníti a dokumentum szövegében.
3.) A fordító terminológiai kérdésekkel kapcsolatos diszkusszióját és egyéb információit lásd a Köszönetnyilvánítás és megjegyzések a magyar fordításhoz című mellékletben.
4.) A W3C Magyar Irodája a lehetőségek szerint lefordíttatja az OWL-ra és az RDF-re vonatkozó W3C ajánlások legtöbb dokumentumát. Ha tehát egy lefordított dokumentumból olyan OWL/RDF dokumentumra történik hipertext-hivatkozás, mely magyar változatban is rendelkezésre áll, akkor a megfelelő URL általában a magyar változatra mutat. A kivételt azok a hivatkozások képezik, amelyeknek a W3C szándéka szerint az eredeti dokumentumra kell mutatniuk.
W3C

Az OWL Web Ontológia Nyelv – Útmutató

W3C Ajánlás, 2004. február 10.

Jelen verzió (angol eredeti):
http://www.w3.org/TR/2004/REC-owl-guide-20040210/
Utolsó verzió (angol eredeti):
http://www.w3.org/TR/owl-guide/
Előző verzió (angol eredeti):
http://www.w3.org/TR/2003/PR-owl-guide-20031215/
Szerkesztők:
Michael K. Smith, Electronic Data Systems, Michael dot Smith at e d s dot com
Chris Welty, IBM Research, Chris dot Welty at u s dot ibm dot com
Deborah L. McGuinness, Stanford University, d l m at k s l dot stanford dot edu

Kérjük, kövesse figyelemmel a dokumentum eredeti angol nyelvű változatára vonatkozó hibajegyzéket, mert ez normatív korrekciókat is tartalmazhat.

A dokumentumról további fordítások is rendelkezésre állnak.


Absztrakt

A World Wide Web a mai formájában leginkább egy rosszul feltérképezett terepre hasonlít. A dokumentumokba történő bepillantásunk és a velük kapcsolatos lehetőségeink a kulcsszavas keresésre épülnek, amit támogat még a dokumentumok összekapcsolhatóságának és alkalmazási módszereinek ügyes kihasználása. Ennek az óriási ütemben növekvő adattömegnek a kezelése megoldhatatlan egy erőteljesebb eszköztámogatás nélkül. Ahhoz, hogy ezt az áttekinthetetlen terepet pontosabban fel tudjuk térképezni, a feldolgozó ágenseknek szükségük van a Weben hozzáférhető erőforrások géppel értelmezhető leírására. Ezeknek a leírásoknak ki kell egészíteniük az információ ember által olvasható változatait.

Az OWL Web Ontológia Nyelv arra szolgál, hogy leírjuk vele a web dokumentumaiban és alkalmazásaiban előforduló lényeges és jellemző osztályokat, és a közöttük lévő kapcsolatokat.

Ez a dokumentum bemutatja, hogy miként használható az OWL nyelv arra, hogy

  1. formalizáljunk egy tématerületet osztályok és tulajdonságaik definiálása útján,
  2. egyedeket határozzunk meg, és a tulajdonságaikról kijelentéseket tegyünk,
  3. többletinformációkat következtessünk ki ezekről az osztályokról és egyedekről, amilyen mértékben ezt az OWL nyelv formális szemantikája lehetővé teszi.

Az anyag szekcióit úgy szerveztük rendszerbe, hogy az osztályok, tulajdonságok és egyedek halmazának inkrementális definícióját mutassa be, a legalapvetőbb nyelvi elemektől a komplexebbek felé haladva.


A dokumentum státusa

Ezt a dokumentumot a W3C Tagjai és más érdekelt résztvevők ellenőrizték, és az Igazgató W3C Ajánlásként hitelesítette. Az Ajánlás elkészítésével a W3C célja és szerepe az, hogy ráirányítsa a figyelmet a specifikációra, és elősegítse annak széles körű alkalmazását. Ez megnöveli a Web használhatóságát, és javítja a Weben történő együttműködést.

Ez a dokumentum annak a hat részből álló W3C Ajánlásnak egyik része, mely az OWL Web Ontológia Nyelvet szabványosítja. Ezt az Ajánlást a W3C Szemantikus Web Munkaprogramja keretében a Web Ontológia Munkacsoport dolgozta ki, és 2004. február 10. dátummal publikálta. (Lásd a Munkaprogram-nyilatkozatot és a Munkacsoport Alapszabályát.)

Az OWL konstrukciójának a dokumentumok korábbi verziójában leírt változatát jelentősen átdolgozták, s ez a konstrukció kielégíti a Munkacsoport technikai követelményeit. A Munkacsoport megvizsgálta az összes beérkezett észrevételt, és elvégezte a szükséges javításokat. Az Ajánlástervezet óta a jelen Ajánlás megszületéséig a dokumentumon végrehajtott módosításokat a Változtatási napló részletezi.

A Munkacsoport szívesen fogadja az észrevételeket a public-webont-comments@w3.org (E-mail archívum) címén, az idevágó technológiák általános vitáját pedig a www-rdf-logic@w3.org (E-mail archívum) címén folytatja.

Rendelkezésre áll egy konszignáció az ismert alkalmazásokról.

A W3C listát vezet továbbá azokról a felfedett szabadalmi igényekről is, amelyek ehhez a munkához kapcsolódnak.

Ez a szekció a dokumentumnak a publikáláskor érvényes státusát rögzíti. Más dokumentumok hatálytalaníthatják ezt a dokumentumot. A legújabb W3C publikációk listája, valamint e technikai riport utolsó kiadása megtalálható a W3C technikai riportok indexében a http://www.w3.org/TR/ alatt.


Tartalomjegyzék


1. Bevezetés

"Mondd meg nekem, milyen borokat kellene beszereznem az alábbi menü különböző fogásaihoz! De, hogy el ne felejtsem mondani, nem kedvelem a Sauternes fajtát."

Ma még nehéz volna építeni egy olyan Web ágenst, amelyik fel tudná hajtani a fenti kereső kritériumot kielégítő találatot. Vagy próbáljuk elképzelni, hogy egy szoftver ágensre bízhatnánk azt a feladatot, hogy készítsen számunkra egy ésszerű utazási tervet. (További alkalmazási eseteket ismertet az OWL Alkalmazási esetek és követelmények dokumentum.)

Ahhoz, hogy támogatást adjunk efféle számítógépes feladatok megoldásához, messze meg kell haladnunk a kulcsszavas keresést, és specifikálnunk kell a Web források (resoure-ok) egzakt jelentését. Az értelmezésnek ez az újabb rétege az adatok szemantikáját ragadja meg.

Az OWL Web Ontológia Nyelv egy Web ontológiák tervezésére és előállítására szolgáló nyelv. Az ontológia kifejezést a filozófiából vették kölcsön, és azt a tudományt jelöli meg, mely a világ entitásainak típusait, és ezek egymáshoz való viszonyát írja le.

Egy OWL ontológia magában foglalhatja osztályok, tulajdonságok, és ezek egyedeinek leírását. Ha van egy ilyen ontológiánk, az OWL formális szemantikája megmondja, hogy miként lehet ebből olyan logikai következtetéseket levonni, azaz olyan újabb tényeket megállapítani, amelyek explicite nincsenek benne az ontológiában, de származtathatók (levezethetők, kikövetkeztethetõk) belőle a szemantika segítségével. Ezek a levezetések alapulhatnak egyetlen dokumentumon, vagy több elosztott dokumentumon, amelyek összekapcsolhatók az erre a célra szolgáló OWL mechanizmusok segítségével.

A jelen dokumentum annak az OWL Web Ontológia Nyelv leírásnak egyik komponense, amelyet a W3C Web Ontológia Munkacsoportja (WebOnt) készít. Az [OWL Áttekintés] című dokumentum 1.1 A javasolt olvasási sorrend szekciója leírja az egyes részdokumentumokat, és hogy ezek miként illeszkednek egymáshoz.

Amikor leírunk egy újabb XML Web szabványt, felmerülhet a kérdés: "mit hoz ez a konyhára, amit az XML és az XML Séma nem? Két válasz is van erre a kérdésre:

1.1. Az OWL fajtái

Az OWL nyelv három, egyre nagyobb kifejező erejű alnyelvet tartalmaz, amelyeket a fejlesztők és felhasználók különböző kategóriái számára dolgoztak ki.

E három alnyelv mindegyike az egyszerűbb elődjének a kiterjesztése abban a tekintetben, hogy mit lehet vele legálisan kifejezni, és abban a tekintetben is, hogy a velük ábrázolt ontológiából mit lehet érvényesen kikövetkeztetni. E nyelvekre vonatkozóan az alábbi kijelentések érvényesek

Azok az ontológiafejlesztők, akik használni akarják az OWL nyelvet, jó ha megfontolják, melyik alnyelv a legalkalmasabb a céljaikra. Az OWL Lite és az OWL DL közötti választás attól függ, hogy a felhasználónak milyen mértékben van szüksége az OWL DL nagyobb kifejező erejű nyelvi konstrukcióira. Az OWL Lite következtető rendszerei megfelelő számítási tulajdonságokkal fognak rendelkezni. Az OWL DL következtető rendszerei, noha eldönthető alnyelvvel van dolguk, szélsőséges esetekben ki vannak téve a túlzott bonyolultság veszélyének. Az OWL DL és az OWL Full közötti döntés alapvetõ kritériuma az, hogy a felhasználó milyen mértékben igényli az RDF Séma meta-modellező eszközeit (azaz osztályok osztályának definiálását). Amikor OWL Full-t használunk, a következtetések teljes körû szoftvertámogatása az OWL DL-éhez képest kevésbé valószínű. Erről a kérdésről további információk találhatók az OWL Szemantika dokumentumban.

Amikor a felhasználó RDF dokumentumokat kíván OWL környezetbe átvinni, bizonyos óvatosságra van szüksége, hogy az eredeti RDF dokumentumok megfeleljenek azoknak a korlátozásoknak, amelyeket az OWL Lite és az OWL DL támaszt a dokumentumokkal szemben. Az OWL DL-re és az OWL Lite-ra vonatkozó ilyen, és egyéb korlátozások részleteit az OWL Referencia E. melléklete tartalmazza.

Az anyag további részében azokat a nyelvi konstrukciókat, amelyek csak az OWL DL-ben vagy az OWL Full-ban engedélyezettek, mindig az "[OWL DL]" kifejezéssel jelöljük meg.

1.2. A dokumentum szerkezete

Annak érdekében, hogy e dokumentumban végig egy konzisztens példahalmazt használhassunk, kidolgoztunk egy Bor és egy Étel ontológiát. Ezek OWL DL ontológiák. Egyes diszkusszióink ugyan az OWL Full lehetőségeire vonatkoznak, de ezt külön jelezni fogjuk. A Bor és az Étel ontológia a nagy multú DAML ontológia könyvtár egyik elemének jelentősen módosított változata. Ezt az elemet eredetileg McGuinness fejlesztette ki mint CLASSIC leíró logikai (description logic) példát, amely később egy leíró logika tankönyvvé, végül pedig egy ontológia tankönyvvé terebélyesedett.

Ebben a dokumentumban a példákat az RDF/XML szintaxis ([RDF], 5) segítségével írjuk le, arra gondolva, hogy az XML az olvasók többségének már ismerős. (A normatív OWL hordozható szintaxis mindig RDF/XML szintaxis). Az OWL-t ugyanis úgy tervezték, hogy maximálisan kompatibilis legyen az RDF-fel és az RDF Sémával. Ezek az XML és RDF formátumok tehát az OWL szabványnak is részei.

Az ebben a dokumentumban bemutatott összes példát a wine.rdf és a food.rdf ontológiákból vettük, kivéve azokat, amelyek jobb alsó sarkában egy  ¬  jel látható.


2. Az ontológiák struktúrája

Az OWL fejlesztése a Szemantikus Web munkaprogram része, és arra irányul, hogy a Web adatforrásait alkalmasabbá tegyék az automatikus feldolgozásra azáltal, hogy egzakt információkat adnak meg azokról az adatforrásokról, amelyek [szövegesen] leírják vagy [programmatikailag] előállítják a Web tartalmát. Tekintve, hogy a Szemantikus Web a jellegéből adódóan elosztott rendszer, az OWL-nak lehetővé kell tennie, hogy az információkat elosztott forrásokból is lehessen gyűjteni. Ezt részben az által valósítja meg, hogy lehetővé teszi az ontológiák összekapcsolását (oly módon is, hogy az ontológiák explicit módon információkat importálhatnak más ontológiákból).

Mindemellett az OWL nyitott világot feltételez. Vagyis, az erőforrások leírásai nem korlátozódnak egyetlen fájlra vagy egyetlen területre. Például: ha a C1 osztályt eredetileg az O1 ontológiában definiálták, ez más ontológiákban kiterjeszthető. A C1-re vonatkozó állítások következményei azonban csak előre mutató (monoton) jellegűek, tehát az új információk nem érvénytelenítik az előzőeket. Az új információk ellentmondásosak lehetnek, de tények és következmények mindig csak hozzáadhatók, sohasem törölhetők.

Az ellentmondások lehetősége egy olyan dolog, amit az ontológia tervezőjének figyelembe kell vennie. Várható, hogy a támogató eszközök segítséget adnak majd az ilyen helyzetek automatikus felismeréséhez.

Ahhoz, hogy olyan ontológiát írhassunk, amelyet az ágensek egyértelműen interpretálhatnak és alkalmazhatnak, egy szintaxisra és egy formális szemantikára van szükség az OWL-ban. Az OWL az RDF szókészletének egy kiterjesztése [RDF Semantics]. Az OWL szemantikáját Az OWL Web Ontológia Nyelv – Szemantika és absztrakt szintaxis című dokumentum definiálja.

2.1. Névterek

Mielőtt egy kifejezés halmazt elkezdünk használni, pontosan meg kell jelölnünk, hogy melyik konkrét szókészletből való. Az ontológiák szabványos bevezető eleme egy sor XML névtér deklarációt tartalmaz az rdf:RDF nyitóteggel bevezetve. Ezek az ontológia további szövegét könnyebben olvashatóvá, az azonosítók interpretálását pedig egyértelművé teszik. Egy tipikus OWL ontológia az alábbihoz hasonló névtérdeklarációval kezdődik (Természetesen, egy konkrét ontológia URI-jai valószínűleg nem w3.org hivatkozások lesznek):

<rdf:RDF 
    xmlns     ="http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" 
    xmlns:vin ="http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#"       
    xml:base  ="http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#"       
    xmlns:food="http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#"    
    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/2001/XMLSchema#"> 

Az első két deklaráció azonosítja azt a névteret, mely ehhez az ontológiához tartozik. Az első a default névteret adja meg, jelezve hogy a prefix nélkül megadott nevek erre az ontológiára hivatkoznak. A második a vin: prefixszel azonosítja a Bor (fõ)ontológiának a névterét. A harmadik a bázis URI-t definiálja a jelen dokumentum számára (lásd alább). A negyedik pedig a food: prefixszel azonosítja az Étel segéd-ontológia névterét.

Az ötödik névtérdeklaráció azt mondja ki, hogy az owl: prefix-szel jelölt elemeket úgy kell értelmezni, hogy azok a http://www.w3.org/2002/07/owl# névtérből származnak. Ezt a konvencionális OWL deklarációt használjuk az OWL szókészletének bevezetésére. A következő három névtérdeklaráció hasonló feladatokat lát el az RDF (rdf:), az RDF Séma (rdfs:) és az XML Séma adattípus(xsd:) névterekkel kapcsolatban.

A hosszú URL-ek írását megkönnyítendő, gyakran használunk entitásdefiníciókat egy Dokumentum Típus Deklarációban (DOCTYPE), amelyek megelőzik az ontológiadefiníciókat. Azoknak a neveknek, amelyeket a névtérdeklarációkban adunk meg, csak az XML tegek részeként van jelentőségük. Az attribútumértékek nem névtér érzékenyek. De az OWL-ban gyakran hivatkozunk ontológiai-azonosítókra attribútum-értékek segítségével is. Ezeket a teljesen kiterjesztett formájukban írhatjuk, pl.: "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#merlot". Alternatív megoldásként azonban ENTITY definíciókkal rövidítéseket is deklarálhatunk, mint pl.:

<!DOCTYPE rdf:RDF [
    <!ENTITY vin  "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" >
    <!ENTITY food "http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#" > 
]>

Ha e két ENTITY deklarációt követően azt az értéket írjuk, hogy "&vin;merlot", ennek a kiterjesztett jelentése ez lesz: "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#merlot".

Talán még fontosabb, hogy az rdf:RDF névtérdeklarációk ezután egyszerűsíthetők, mégpedig úgy, hogy ha később javításokat kell végeznünk az entitásdeklarációkon, azok az egész ontológián végig konzisztens módon érvényesülnek.

<rdf:RDF 
    xmlns     ="&vin;" 
    xmlns:vin ="&vin;" 
    xml:base  ="&vin;" 
    xmlns:food="&food;"
    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/2001/XMLSchema#"> 

2.2. Ontológia-headerek

Ha a névtereket már definiáltuk, akkor az owl:Ontology teg alatt általában teszünk néhány állítást magáról az ontológiáról. Ez a teg olyan lényeges szervezési feladatot lát el, mint az ontológia kommentálása, verziókontroll és más ontológiák beépítése.

<owl:Ontology rdf:about=""> 
  <rdfs:comment>Egy ontológia példa</rdfs:comment>
  <owl:priorVersion rdf:resource="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine"/> 
  <owl:imports rdf:resource="http://www.w3.org/TR/2004/REC-owl-guide-20040210/food"/> 
  <rdfs:label>Wine Ontology</rdfs:label> 
  ...

(Megjegyzés: a három pont azt jelzi, hogy a kód folytatódik, de a kihagyott rész az adott példa szempontjából érdektelen.)

Az owl:Ontology elem az a hely, ahol a dokumentum OWL meta-adatainak nagy részét megadjuk. Ez azonban nem garantálja, hogy a dokumentum az ontológiát a hagyományos értelemben írja le. Néhány közösségben ugyanis az ontológiák nem szólnak egyedekről, hanem csak azokról az osztályokról és tulajdonságokról, amelyek a tématerületet definiálják. Amikor az OWL-t egyedek adatainak leírására használjuk, az owl:Ontology tegre szükség lehet a verzió-információk rögzítéséhez, valamint azoknak a definícióknak az importálásához, amelyekre támaszkodik a dokumentum. Az OWL-ban tehát az ontológia fogalom kiterjed az egyedek leírására is (lásd fent).

Az rdf:about attribútum adja meg az ontológia nevét vagy referenciáját. Amikor az attribútum értéke az üres karakterlánc (""), ami a szokásos érték, az ontológia neve az owl:Ontology bázis URI-ja lesz. Ez pedig tipikusan annak a dokumentumnak az URI-ja szokott lenni, amelyik az ontológiát tartalmazza. Ez alól kivétel az olyan környezet, ahol az xml:base segítségével valamelyik elem bázis URI-ját explicite nem az adott dokumentum URI-jára állítják, hanem valami másra.

Az rdfs:comment elem nyújtja azt a sehol sem nélkülözhető opciót, hogy fontos megjegyzéseket (annotációkat) fűzhessünk egy ontológiához.

Az owl:priorVersion egy szabványos teg, mely kapocsként szolgál az ontológiák verziókontrollját ellátó rendszer számára. Az ontológiák verziókezelésére alább még visszatérünk.

Az owl:imports egy olyan jellegű mechanizmust jelent, mint a C nyelvnél az "#include" direktíva. Az owl:imports egyetlen argumentumot használ, amelyet az rdf:resource attribútum azonosít.

Egy ontológia importálása azt jelenti, hogy beépítjük a hívó ontológiába egy másik ontológia teljes kijelentés készletét. Az importált ontológia legkényelmesebb használata érdekében ennek importálását általában egy névtérdeklarációval kombináljuk. Vegyük észre e két mechanizmus közötti különbséget: a névtérdeklarációk azt teszik lehetővé, hogy más ontológiákban definiált nevekre hivatkozhassunk; az owl:imports útján pedig lényegében azt a szándékunkat jelezzük, hogy a cél-ontológia kijelentéseit be akarjuk építeni a saját ontológiánkba. Figyelembe kell venni azonban, hogy egy másik ontológia (pl. O2) importálása azokat az ontológiákat is importálja, amelyeket O2 a maga részére importál.

Jegyezzük meg, hogy az owl:imports hívás nem feltétlenül sikeres. Amikor a Szemantikus Webről van szó, sejthető, hogy a Weben szétszórt adatforrásokhoz való hozzáférés nem mindig lehetséges. A Szemantikus Web eszközei az implementációjuktól függően választ adnak majd erre a problémára.

Ugyancsak megjegyzendő, hogy az OWL szókészlet használatához nem szükséges importálni az owl.rdf ontológiát (sőt, ennek importálása nem is ajánlott).

Egy közismert teg csoport, amelyet érdemes volna a headerbe (fejléc deklarációba) beépíteni, az a szabványos Dublin Core meta-adat tegek egy bizonyos részhalmaza. Ez azokból a tegekből áll, amelyek egyszerű adattípusokat vagy karakterláncokat kapnak értékül, és ilyen adatokat azonosítanak, mint Cím, Szerző, Leírás, Kiadó és Dátum (lásd: RDF declarations).

Azokat a Tulajdonságokat (Properties) amelyeket annotációként használunk, az owl:AnnotationProperty kifejezéssel deklaráljuk, pl.:

<owl:AnnotationProperty rdf:about="&dc;creator" />

Az OWL több más mechanizmust is használ, amellyel az ontológiánkhoz köthetjük az importált ontológiát (lásd Ontológiák egyesítése).

Az rdfs:label kifejezéssel pl. különböző természetes nyelvű címkéket adhatunk meg, ha pl. támogatni kívánjuk az ontológia többnyelvű használatát.

Az ontológiánk header-definícióját az

</owl:Ontology>

záróteggel fejezzük be.

Ezt a kis "előjátékot" most már követhetik azok a tényleges definíciók, amelyek az ontológiát alkotják. Ezek sorát legvégül az

</rdf:RDF> 

teg zárja le.

2.3. Adategyesítés és a privát jogok

Az OWL-nak az a képessége, hogy ontológiai információt lehet vele kifejezni olyan egyedekről, amelyek több dokumentumból származnak, szigorúan szabályozott módon segíti az adatok összekapcsolását. A nyelv beépített szemantikája támogatja az ilyen információk logikai feldolgozását is, s ez nem várt eredményekhez vezethet. Különösen igaz ez, pl. owl:sameAs kifejezésre, amellyel látszólag különböző egyedekről azt állíthatjuk, hogy valójában azonosak. Az Owl:InverseFunctionalProperty kifejezés szintén alkalmas arra, hogy segítségével egyedeket kapcsoljunk össze. Ha egy olyan tulajdonságról, mint pl. a "TAJszáma" azt jelentjük ki, hogy ez egy Fordított funkcionális tulajdonság, akkor a két különböző egyedet (pl. ugyanazon TAJ-szám két különböző néven szereplő birtokosát) azonosnak lehet tekinteni azon az alapon, hogy ezen tulajdonságuk értéke megegyezik. Amikor az egyedekről ilyen módon meg lehet állapítani, hogy azonosak, akkor a velük kapcsolatos, különböző forrásokból származó információk egyesíthetők. Ez az adategyesítés (aggregation) tehát arra is használható, hogy még olyan tényeket is megállapíthassunk valamely egyedről, amelyek egyik forrásban sincsenek közvetlenül ábrázolva.

A Szemantikus Web-nek az a képessége, hogy több forrásból lehet vele információkat egyesíteni, egy szükséges és rendkívül gyümölcsöző tulajdonság, mely sok alkalmazásnál jól kihasználható. Azonban az a lehetőség, hogy különböző forrásokból adatokat lehet integrálni, kombinálva az OWL következtető képességeivel, magában hordja a visszaélés lehetőségét is. Az OWL felhasználóinak ébereknek kell tehát lenniük, ha el akarják kerülni a privát érdekeik sérülését. A részletes biztonsági megoldásokat a Munkacsoport nem tekintette feladatának. Több olyan szervezet foglalkozik azonban ezekkel a kérdésekkel, amelyek a biztonsági és preferencia megoldások különböző változatait kínálják (lásd, pl. SAML és P3P).


3. Alapvető elemek

Egy OWL ontológia legtöbb eleme az osztályokkal, tulajdonságokkal, az osztályok egyedeivel és a köztük lévő viszonyokkal kapcsolatos. Ez a szekció bemutatja azokat a nyelvi komponenseket, amelyek fontosak az ilyen elemek bevezetéséhez.

3.1. Egyszerű osztályok és egyedek

Egy ontológia sokcélú felhasználási lehetősége attól a képességtől függ, hogy következtetéseket tudunk levonni az egyedekről. Hogy ezt hasznos módon tudjuk megvalósítani, szükségünk van egy olyan mechanizmusra, amellyel le tudjuk írni azokat az osztályokat, amelyekhez az egyedek tartoznak, valamint azokat a tulajdonságokat, amelyeket ezek az egyedek örökölnek azon az alapon, hogy az adott osztály tagjai. Mindig kijelenthetünk specifikus tulajdonságokat az egyedekről, az ontológiák legnagyobb erejét azonban a tulajdonságaik osztály alapon történő kikövetkeztethetősége adja.

Időnként hangsúlyozni kívánjuk a megkülönböztetést osztályok mint objektumok, és osztályok mint halmazok között, amelyek elemeket tartalmaznak. Azoknak az egyedeknek a halmazát, amelyek egy osztály tagjai, az osztály kiterjedésének vagy extenziójának nevezzük.

3.1.1. Egyszerű nevesített osztályok
Class, rdfs:subClassOf

Egy tématerület legáltalánosabb fogalmait olyan osztályoknak kell megfeleltetnünk, amelyek majd a különböző taxonómia fák gyökerei lesznek. Az OWL világában minden egyed az owl:Thing (Valami) osztály tagja. Így a felhasználó által definiált minden osztály implicite szintén az owl:Thing osztály alosztálya. Egy tématerület gyökérosztályait egyszerű nevesített osztályok definiálásával hozzuk létre. Az OWL definiál egy üres osztályt is, amelynek a neve owl:Nothing (Semmi).

A példánkban szereplő Bor tématerület számára három gyökérosztályt definiálunk, rendre: Pincészet, Régió és FogyaszthatóDolog.

<owl:Class rdf:ID="Winery"/> 
<owl:Class rdf:ID="Region"/> 
<owl:Class rdf:ID="ConsumableThing"/> 

Jegyezzük meg, hogy itt egyelőre csak azt mondtuk, hogy létezik három osztály, amelynek ezeket a neveket adtuk, és ezt az 'rdf:ID=' szintaxissal jelöltük. A létezésükön kívül, formálisan, szinte semmit sem tudunk ezekről az osztályokról, annak ellenére sem, hogy ismerős angol kifejezéseket használtunk a megnevezésükre. És, noha ezek az osztályok már léteznek, még nem lehetnek tagjaik. Ebben a pillanatban még csak annyit tudunk, hogy ezt a három dolgot úgy is nevezhetnénk, hogy Thing1, Thing2, és Thing3.

Fontos emlékeznünk arra, hogy a definíciók lehetnek inkrementálisak és elosztottak. Különösen a Winery osztállyal kapcsolatban később még szólunk erről.

A definíció részeként az rdf:ID="Region" típusú szintaxist használjuk egy név bevezetésére. Ez az rdf:ID attribute ([RDF Syntax], 7.2.22), mely hasonlít az XML által definiált, ismerős ID attribútumra. Ebben a dokumentumban a Region osztályra most már a #Region néven hivatkozhatunk, pl. rdf:resource="#Region". Más ontológiák a teljes nevével hivatkozhatnak ugyanerre az osztályra: "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#Region".

Egy másik hivatkozási forma az rdf:about="#Region" szintaxist használja egy forrás definíciójának a kiterjesztésére. Az rdf:about="&ont;#x" szintaxisnak ez a használata kritikus elem az elosztott ontológiák építésében. Ez ugyanis megengedi az x importált definíció kiterjesztését anélkül, hogy módosítaná az eredeti dokumentumot, és ezáltal támogatja egy nagyobb ontológia inkrementális építését.

A megadott azonosítóik használatával most már hivatkozhatunk azokra az osztályokra, amelyeket más OWL nyelvi konstrukciókkal definiáltunk. Ebben a dokumentumban az elsőként deklarált osztályra a #Winery relatív azonosítót használhatjuk. Más dokumentumnál is szükséges lehet, hogy ugyanerre az osztályra hivatkozzék. Ezt legcélszerűbben névtér- és entitásdefiníciók segítségével teheti meg, amelyek forrásként beépítik a definiáló dokumentumokat:

...
<!ENTITY vin  "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" >
<!ENTITY food "http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#" >
...
<rdf:RDF xmlns:vin ="http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#"
         xmlns:food="http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#" ... >
...

E definíciók után most már hivatkozhatunk a Pincészet osztályra, akár a vin:Winery XML teg, akár a &vin;Winery attribútum-érték segítségével. Még explicitebben bármikor hivatkozhatunk egy forrásra a teljes URI-ja segítségével; az adott esetben ez http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#Winery.

Alapvető taxonómiaépítő-elem az osztályok számára az rdfs:subClassOf. Ez egy specifikusabb osztályt definiál, amelyet egy általánosabb osztály alá sorol. Ha X az Y alosztálya, akkor X minden egyede Y-nak is egyede. Az rdfs:subClassOf reláció tranzitív: ha X az Y alosztálya, és Y a Z alosztálya, akkor X szintén alosztálya Z-nek.

<owl:Class rdf:ID="PotableLiquid"> 
  <rdfs:subClassOf rdf:resource="#ConsumableThing" />
  ...
</owl:Class> 

Itt definiáltuk a PotableLiquid (IhatóFolyadék) osztályt mint a ConsumableThing (FogyaszthatóDolog) alosztályát.

A Web alapú ontológiák világában ezt a két osztályt egy-egy külön ontológiában lehetne definiálni, amelyek előállítanák az alapvető építőkockákat az étel és ital ontológiák széles választékához, ahogy meg is tettük. Ezek az osztályok a "food" ontológiában vannak definiálva, amelyet importáltunk a "wine" ontológiába. A "food" ontológia tartalmaz egy sor osztályt, például a Food, az EdibleThing (EhetőDolog), a MealCourse (ÉtkezésiFogás) és a Shellfish (Rákflék), osztályt, amelyek nem tartoznak közvetlenül a bor témák gyűjteményébe, de a "wine" szókészletéhez kell kapcsolnunk, ha hasznos következtetéseket kívánunk a témával kapcsolatban levonni. A "food" és a "wine" ontológiák kölcsönösen függenek egymástól, éppen azért, hogy megfeleljenek a célnak: az ételek és borok párosításának.

Egy osztálydefiníció két részből áll: egy név bevezetéséből vagy ilyenre való hivatkozásból, valamint az osztály korlátozásainak listájából. Az osztálydefinícióban szereplő minden egyes közvetlen kifejezés tovább szűkíti a definiált osztály lehetséges egyedeinek körét. Így az osztály tényleges egyedeit a korlátozások által meghatározott halmazok metszete jelöli ki. (Habár lásd az owl:equivalentClass részleteit). Eddig olyan példákat láttunk, amelyek csak egyetlen korlátozást tartalmaztak, mégpedig olyat, amelyik az új osztályt valamely más nevesített osztály alosztályaként határozza meg.

Ezen a ponton most már készíthetünk egy egyszerű (de nem komplett) definíciót a Wine osztály számára. Definiáljuk a "Pasta" (Tészta) osztályt is, mint az EdibleThing alosztályát:

<owl:Class rdf:ID="Wine"> 
  <rdfs:subClassOf rdf:resource="&food;PotableLiquid"/> 
  <rdfs:label xml:lang="en">wine</rdfs:label> 
  <rdfs:label xml:lang="fr">vin</rdfs:label> 
  ...  
</owl:Class> 

<owl:Class rdf:ID="Pasta">
  <rdfs:subClassOf rdf:resource="#EdibleThing" />
  ...
</owl:Class>

Az rdfs:label (címke) bejegyzés az osztály ember által olvasható opcionális nevét adja meg a megjelenítő eszközök céljára. Ez a név csupán egy címke, és ugyanúgy, mint egy megjegyzés, transzparens az ontológia logikai értelmezése szempontjából. A "lang" (nyelv) attribútum támogatja a többnyelvűséget.

A "wine" definíciónk még messze nem teljes. Még semmit sem tudunk meg belőle a borról azon kívül, hogy ez Valami, és hogy IhatóFolydék, de már van elegendő információnk ahhoz, hogy megnevezhessük az egyedeit, és ezekről információkat szerezhessünk.

3.1.2. Egyedek

Az osztályok mellett az is szükséges, hogy leírhassuk ezek tagjait. Általában úgy gondolunk az egyedekre, mint a dolgok univerzumának egyedeire. Egy egyed minimális bevezetése az által történik, hogy egy osztály tagjaként deklaráljuk.

<Region rdf:ID="CentralCoastRegion" /> 

Jegyezzük meg, hogy a következő definíciók jelentése azonos a fenti példában szereplőével.

<owl:Thing rdf:ID="CentralCoastRegion" /> 

<owl:Thing rdf:about="#CentralCoastRegion"> 
   <rdf:type rdf:resource="#Region"/> 
</owl:Thing>

(Az rdf:type egy RDF tulajdonság, mely egy egyedet kapcsol egy osztályhoz, s ezáltal annak tagjává teszi.)

Néhány megállapítást le kell szögeznünk erről. Először is: eldöntöttük, hogy a CentralCoastRegion, egy konkrét régió, a Region osztály tagja, mely tartalmazza az összes földrajzi régiót. Másodszor: nem követelmény, hogy a kétrészes példában szereplő két elem közvetlenül egymást kövesse, sőt még az sem, hogy ugyanabban a fájlban szerepeljenek (bár a neveket ilyenkor egy URI-val ki kell terjeszteni). Az ontológiákat eleve úgy tervezzük, hogy elosztattak lesznek. Ezeket importálhatjuk és gazdagíthatjuk, s ily módon leszármaztatott ontológiákat alkothatunk.

Azért, hogy legyen készenlétben még néhány további osztályunk a következő szekciókban bemutatandó tulajdonságok számára, alább definiáljuk a Grape (Szőlő) taxonómia egyik ágát egy alosztálya (WineGrape = Borszőlő), és annak egy egyede (a Cabernet Sauvignon borszőlőfajta) által. A szőlőfajták a "food" ontológiában vannak definiálva:

<owl:Class rdf:ID="Grape">
  ...
</owl:Class>

És így a Wine antológiában a következőket definiálhatjuk:

<owl:Class rdf:ID="WineGrape">
  <rdfs:subClassOf rdf:resource="&food;Grape" />
</owl:Class>

<WineGrape rdf:ID="CabernetSauvignonGrape" />

Amint arról szó lesz a következő szekcióban, a CabernetSauvignonGrape egy egyed, mert egy konkrét borszőlőfajtát azonosít.

3.1.3. A használat megtervezése

Felmerül néhány fontos kérdés az OWL-ban az osztály és az egyed megkülönböztetésével kapcsolatban. Egy osztály nem más, mint egy név, valamint olyan tulajdonságok kollekciója, mely egyedek halmazát írja le. Az egyedek ennek a halmaznak az elemei. Így az osztályoknak meg kell felelniük a dolgok természetes halmazainak a szóban forgó tématerületen, az egyedeknek pedig meg kell felelniük azoknak a konkrét entitásoknak, amelyek ezekbe az osztályokba becsoportosíthatók.

Az ontológiák építésében ez a megkülönböztetés gyakran kétféle okból is homályos lehet:

Meg kell jegyezni, hogy ugyanez a megkülönböztetés érvényes a Wine osztály kezelésére is. A Wine osztály az összes bor fajtát jelöli, és nem azoknak a konkrét palackozott boroknak a halmazát, amelyekből valaki vásárolhat. Egy másfajta célú ontológia a mi ontológiánk Wine osztályának minden egyedét kinevezhetné egy olyan osztálynak, amely az adott fajtájú borral töltött palackokat jelenti. Könnyen elképzelhető egy olyan borkereskedelmi információs rendszer, amelyben az árunyilvántartó/leltározó programnak konkrét palackozott borokkal kell foglalkoznia. Ahhoz, hogy a jelenlegi ontológiánk ilyen módon interpretálhassa a bor fogalmát, arra van szüksége, hogy osztályokat egyedként is kezelni tudjon. Jegyezzük meg, hogy az OWL Full megengedi ennek kifejezését, vagyis lehetővé teszi, hogy egy konkrét borfajtát egyidejűleg olyan osztályként is kezelhessünk, amelynek egyedei palackozott borok.

Hasonló meggondolásból, azokat a borokat, amelyeket a pincészetek a különböző években készítenek, évjáratoknak tekintjük. Ahhoz, hogy az évjárat fogalmát ábrázolni tudjuk, meg kell határoznunk, hogy hová illik ez a fogalom a konkrét ontológiánkban. A Wine osztály egy egyede, mint fentebb elmondtuk, egyetlen pincészet egyetlen borfajtáját jelenti, mint pl. a FormanChardonnay.

Ha tehát, pl. a Forman pincészet 2000. évben termelt Chardonnay borát a FormanChardonnay egyik évjáratának tekintjük, akkor problémába ütközünk, mivel nincs lehetőségünk arra, hogy a borok egy egyedének (a FormanChardonnay-nak) a részhalmazát ábrázoljuk. Az évjárat ugyanis nem egy új borfajta, hanem egy borfajtának egy speciális részhalmaza, amelyet a 2000. évben termeltek. Az egyik megoldás az lehetne, hogy OWL Full-t alkalmazva, a bor egyedeit olyan osztályoknak definiáljuk, amelyek alosztályainak (részhalmazainak) tekinthetjük az évjáratokat. A másik lehetőségünk az, hogy a problémát megkerülve, a Vintage (évjárat) fogalmára egy külön osztályt vezetünk be, amelynek egyedeit az adott évjáratú borokhoz kapcsoljuk. Így például a FormanChardonnay2000 a Vintage osztály egyede lenne, amelyet egy vintageOf (évjárata) tulajdonsággal a FormanChardonnay-hoz kapcsolhatnánk. A Vintage osztályt alább definiáljuk.

Ennek a diszkussziónak a célja az volt, hogy ne feledjük: egy ontológia tervezését mindig az kell hogy vezérelje, hogy milyen célra kívánjuk majd használni. A fenti problémák rávilágítanak az egyik legnagyobb különbségre az OWL Full és OWL DL között. Az OWL Full megengedi az osztályok mint egyedek alkalmazását is, míg az OWL DL ezt tiltja. A Wine otológiát OWL DL-re tervezték, és így az olyan egyedek, mint pl. a FormanChardonnay, nem kezelhetők egyidejűleg osztályként is.

3.2. Egyszerű tulajdonságok

Az osztályok és egyedek világa meglehetősen érdektelen lenne, ha csak taxonómiákat tudnánk definiálni. A Tulajdonságok (Properties) lehetővé teszik számunkra, hogy közös jellemzőket adjunk meg egy osztály összes tagjáról, és hogy egyedi tényeket állítsunk ezek meghatározott egyedeiről.

3.2.1. Tulajdonságok definiálása
ObjectProperty, DatatypeProperty, rdfs:subPropertyOf,
rdfs:domain, rdfs:range

A tulajdonság bináris reláció, azaz két dolog logikai kapcsolatát leíró fogalom. A tulajdonságok két típusát különböztetetjük meg:

Amikor egy tulajdonságot definiálunk, többféle mód van arra, hogy ezt a tulajdonságot korlátozzuk. Meghatározható, pl. a tulajdonság érvényességi köre és az értéktartománya, vagy a tulajdonság definiálható egy már létező tulajdonság specializációjaként (altulajdonságaként). Még további, kifinomultabb korlátozások is lehetségesek, ezekről később még szólunk.

<owl:ObjectProperty rdf:ID="madeFromGrape"> 
  <rdfs:domain rdf:resource="#Wine"/>
  <rdfs:range rdf:resource="#WineGrape"/> 
</owl:ObjectProperty> 

<owl:ObjectProperty rdf:ID="course">
  <rdfs:domain rdf:resource="#Meal" />
  <rdfs:range rdf:resource="#MealCourse" />
</owl:ObjectProperty>

Az OWL-ban az elemek sora explicit operátor nélkül azok implicit konjunkcióját jelenti. A madeFromGrape (~SzőlőbőlKészült) tulajdonság érvényességi köre (domain) a Wine osztály, az értéktartománya (range) pedig a WineGrape osztály. Vagyis, ez a tulajdonság a Wine osztály egyedeit kapcsolja a WineGrape osztály egyedeihez. Több érvényességi kör megadása azt jelenti, hogy a tulajdonság érvényességi köre a megnevezett osztályok metszete (konjunkciója) lesz, és ugyanez érvényes az értéktartományra is.

Hasonlóképpen, a course (fogása) tulajdonság a Meal (Étkezés) osztályt kapcsolja a MealCourse (ÉtkezésiFogás) osztályhoz.

Jegyezzük meg, hogy a domain és a range információk az OWL-ban nem azonosak a programozási nyelvekben használt type információval. A típusokat egyebek között a konzisztencia ellenőrzésére használják a programnyelvek. Az OWL-ban egy range egy típus kikövetkeztetésére használható. Például, ha adott:

<owl:Thing rdf:ID="LindemansBin65Chardonnay">
  <madeFromGrape rdf:resource="#ChardonnayGrape" />
</owl:Thing>                                              ¬ 

akkor ebből kikövetkeztethető, hogy a LindemansBin65Chardonnay egy borfajta (bár explicite még csak Thing-nek deklaráltuk), mivel a madeFromGrape tulajdonság érvényességi körét (domain-jét) a Wine osztály egyedeire korlátoztuk.

A fordító megjegyzése:

Hogy a példák magyarázatában a tripletek állítmányait (tulajdonságait) logikailag helyesen fordíthassuk magyarra, néha beszúrunk egy tilde (~) karaktert ezek nevébe. Ha ennek a helyére képzeljük a tulajdonság értékének (a tárgynak) a nevét, akkor az állítás magyarul is helyes lesz, bár itt is fordított szórendű mondatot eredményez. Pl. a "LindemansBin65Chardonnay""~szőlőbőlKészült""ChardonnayGrape" tripletet úgy olvassuk, hogy "a LindemansBin65Chardonnay bor ChardonnayGrape szőlőből készült". (Lásd a tilde használatának részletes diszkusszióját egy másik fordítói megjegyzésben)

A tulajdonságok, ugyanúgy mint az osztályok, hierarchiába rendezhetők:

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

<owl:Class rdf:ID="WineColor">
  <rdfs:subClassOf rdf:resource="#WineDescriptor" />
  ...
</owl:Class>

<owl:ObjectProperty rdf:ID="hasWineDescriptor">
  <rdfs:domain rdf:resource="#Wine" />
  <rdfs:range  rdf:resource="#WineDescriptor" />
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasColor">
  <rdfs:subPropertyOf rdf:resource="#hasWineDescriptor" />
  <rdfs:range rdf:resource="#WineColor" />
  ...
</owl:ObjectProperty>

A WineDescriptor (BorJellemző) tulajdonságok a borokat a színükkel, az összetevőikkel, és az ízük komponenseivel (édesség, testesség, aroma) kapcsolják össze. A hasColor (színe) tulajdonság a hasWineDescriptor (BorJellemzője) tulajdonság altulajdonsága, amelynek az értéktartományát tovább korlátozzuk a WineColor (BorSzín) osztályra. Az rdfs:subPropertyOf reláció ebben az esetben azt jelenti, hogy bármi, aminek van egy hasColor tulajdonsága X értékkel, annak van egy hasWineDescriptor tulajdonsága is X értékkel.

A következőkben bevezetjük a locatedIn (~banTalálható) tulajdonságot, mely a dolgokat azokkal a régiókkal kapcsolja össze, amelyekben találhatók.

<owl:ObjectProperty rdf:ID="locatedIn">
  ...
  <rdfs:domain rdf:resource="http://www.w3.org/2002/07/owl#Thing" />
  <rdfs:range rdf:resource="#Region" />
</owl:ObjectProperty>

Figyeljük meg, hogyan definiáltuk a locatedIn tulajdonság domain és range korlátozásait. Itt a domain lehetővé teszi bárminek, hogy egy régióban legyen található, beleértve magát a régiót is. Ennek a relációnak a tranzitív kompozíciója lényegében egy olyan hálózatot hoz létre, mely földrajzilag egymásba ágyazott szubrégiókból és Valamikből áll. Azok a Valamik, amelyekben nem található semmi, bármilyen osztályúak lehetnek, míg azok, amelyekben más régiók találhatók, kizárólag Régió osztályúak lehetnek.

Most már kiterjeszthetjük a Wine definíciót azzal a fogalommal, hogy egy bor legalább egy borszőlőfajtából (WineGrape) készül. Ugyanúgy, mint a tulajdonságdefiníciók, az osztálydefiníciók is több alkomponensből állnak, amelyek implicit ÉS-kapcsolatban vannak (halmazmetszetet alkotnak) egymással.

<owl:Class rdf:ID="Wine"> 
  <rdfs:subClassOf rdf:resource="&food;PotableLiquid"/> 
  <rdfs:subClassOf>
    <owl:Restriction> 
      <owl:onProperty rdf:resource="#madeFromGrape"/>
      <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
    </owl:Restriction> 
  </rdfs:subClassOf>
  ...  
</owl:Class>

A fent kiemelt alosztálykorlátozás:

    <owl:Restriction> 
      <owl:onProperty rdf:resource="#madeFromGrape"/>
      <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
    </owl:Restriction> 

egy névtelen osztályt definiál, s ez olyan dolgok halmazát ábrázolja, amelyeknek van legalább egy madeFromGrape tulajdonságuk. E korlátozásnak a Wine definícióba történő bevezetésével azt mondjuk ki, hogy azok a valamik, amelyek borok, ennek a névtelen osztálynak is tagjai. Azaz, minden egyedi bornak kell hogy legyen legalább egy madeFromGrape relációja (mert ennek a relációnak a minimális kardinalitását 1-re állítottuk be).

Most már leírhatjuk a Vintage (Évjárat) osztályt, amelyről előzőleg már szó volt:

<owl:Class rdf:ID="Vintage"> 
  <rdfs:subClassOf>
    <owl:Restriction> 
      <owl:onProperty rdf:resource="#vintageOf"/>
      <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>                                              ¬ 

A vintageOf (évjárata) tulajdonság/reláció egy évjáratot kapcsol egy borhoz:

<owl:ObjectProperty rdf:ID="vintageOf">
  <rdfs:domain rdf:resource="#Vintage" />
  <rdfs:range  rdf:resource="#Wine" />
</owl:ObjectProperty>                                     ¬ 

A következő szekcióban majd az évjáratokat a konkrét évükhöz kapcsoljuk.

3.2.2. Tulajdonságok és adattípusok

A tulajdonságokat megkülönböztetjük azon az alapon, hogy egyedeket kapcsolnak-e egyedekhez (objektumtulajdonságok), vagy egyedeket adattípusokhoz (adattípus-tulajdonságok). Ez utóbbiak kiterjedhetnek az RDF literálokra és egyszerű adattípusokra, amelyeket az XML Séma adattípusoknak megfelelően definiálunk.

Az OWL használja a legtöbb beépített XML Séma adattípust. Az ilyen adattípusokra való hivatkozás az adattípusnak megfelelő URI referenciával történik: http://www.w3.org/2001/XMLSchema. Az alábbi adattípusok ajánlottak az OWL-ban való használatra:

xsd:string xsd:normalizedString xsd:boolean
xsd:decimal xsd:float xsd:double
xsd:integer xsd:nonNegativeInteger xsd:positiveInteger
xsd:nonPositiveInteger xsd:negativeInteger
xsd:long xsd:int xsd:short xsd:byte
xsd:unsignedLong xsd:unsignedInt xsd:unsignedShort xsd:unsignedByte
xsd:hexBinary xsd:base64Binary
xsd:dateTime xsd:time xsd:date xsd:gYearMonth
xsd:gYear xsd:gMonthDay xsd:gDay xsd:gMonth
xsd:anyURI xsd:token xsd:language
xsd:NMTOKEN xsd:Name xsd:NCName

A fenti adattípusok, plusz az rdfs:Literal alkotják a beépített OWL adattípusokat. Minden OWL következtető/feldolgozó rendszertől elvárja a nyelv, hogy legalább az xsd:integer és az xsd:string adattípusokat támogassa.

Más beépített XML Séma adattípusok is használhatók az OWL Full-ban, de csak az OWL Szemantika és absztrakt szintaxis dokumentumban megfogalmazott óvatosság mellett.

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

<owl:DatatypeProperty rdf:ID="yearValue">
  <rdfs:domain rdf:resource="#VintageYear" />    
  <rdfs:range  rdf:resource="&xsd;positiveInteger"/>
</owl:DatatypeProperty> 

Itt a yearValue (évszáma) adattípus-tulajdonság a VintageYear (ÉvjáratiÉv) osztályt a pozitív egész számok értéktartományához kapcsolja. Bevezetjük a hasVintageYear (évjáratiÉve) tulajdonságot is, mely a Vintage (Évjárat) osztályt a VintageYear (ÉvjáratiÉv) osztályhoz kapcsolja. Lásd alább.

Az OWL Referencia dokumentum ([OWL Referencia], 6.2) leírja az owl:oneOf, az rdf:List és az rdf:rest használatát Felsorolás adattípus definiálására. Ott egy példa azt mutatja be, hogyan építjük fel a tennisGameScore nevű adattípus-tulajdonságot egy olyan értéktartományra korlátozva, amelynek értéke egy egész számokból álló lista: {0, 15, 30, 40}.

3.2.3. Egyedek tulajdonságai

Először leírjuk a Region és a Winery egyedeit, majd pedig definiáljuk az első borunkat, a Cabernet Sauvignont.

<Region rdf:ID="SantaCruzMountainsRegion">
  <locatedIn rdf:resource="#CaliforniaRegion" />
</Region>

<Winery rdf:ID="SantaCruzMountainVineyard" />

<CabernetSauvignon
  rdf:ID="SantaCruzMountainVineyardCabernetSauvignon" >
  <locatedIn   rdf:resource="#SantaCruzMountainsRegion"/>  
  <hasMaker    rdf:resource="#SantaCruzMountainVineyard" />   
</CabernetSauvignon>  

De ez még mindig nem teljes. Több aspektusa van még a borféléknek, amelyeket a teljes ontológia definiál, de a darabok kezdenek összeállni. Elkezdhetnénk, pl. következtetéseket levonni azzal kapcsolatban, hogy az Étel ontológiánkban szereplő étkezési fogásokhoz milyen bor illene. A fenti definícióból tudjuk, hogy borunkat a "Santa Cruz Mountain Vineyard" nevű pincészet állítja elő. Mivel ez a bor Cabernet Sauvignon (lásd wine.rdf), azt is tudjuk, hogy ez egy száraz vörösbor.

Ugyanilyen módon adattípus-tulajdonságokat is rendelhetünk az egyedekhez. Alább leírjuk a VintageYear osztály egyik egyedét, és egy konkrét értéket kapcsolunk hozzá, amelynek adattípusát &xsd:positiveInteger-nek definiáljuk:

<VintageYear rdf:ID="Year1998">
  <yearValue rdf:datatype="&xsd;positiveInteger">1998</yearValue>
</VintageYear> 

3.3. Tulajdonságjellemzők

A következő néhány szakasz azokat a mechanizmusokat írja le, amelyekkel tovább pontosíthatjuk a tulajdonságokat. Lehetőségünk van például tulajdonságjellemzőket (property characteristics) specifikálni, amelyek hatékony mechanizmusokat adnak a kezünkbe a tulajdonságokkal kapcsolatos magasabb rendű következtetések levonására.

3.3.1. Tranzitív tulajdonság

Ha egy P tulajdonságot tranzitívnak specifikálunk, akkor minden x, y és z-re igaz, hogy

ha P(x,y) és P(y,z) akkor P(x,z)

A locatedIn tulajdonság tranzitív.

<owl:ObjectProperty rdf:ID="locatedIn">
  <rdf:type rdf:resource="&owl;TransitiveProperty" />
  <rdfs:domain rdf:resource="&owl;Thing" />
  <rdfs:range rdf:resource="#Region" />
</owl:ObjectProperty>

<Region rdf:ID="SantaCruzMountainsRegion">
  <locatedIn rdf:resource="#CaliforniaRegion" />
</Region>

<Region rdf:ID="CaliforniaRegion">
  <locatedIn rdf:resource="#USRegion" />
</Region>

Vagyis, ha a Santa Cruz Mountains régió a kaliforniai régióban van, akkor egyúttal az USA régióban is van, lévén a locatedIn egy tranzitív tulajdonság.

3.3.2. Szimmetrikus tulajdonság

Ha egy P tulajdonságot szimmetrikusnak címkézünk, akkor minden x-re és y-ra igaz, hogy

ha P(x,y) akkor P(y,x) és megfordítva,

vagyis a két kifejezés kölcsönösen implikálja egymást. Míg az adjacentRegion (szomszédosRégió ) tulajdonság szimmetrikus, a locatedIn nem az. Hogy pontosabbak legyünk, a locatedIn tulajdonságot nem akartuk szimmetrikusnak definiálni. A jelenlegi Bor ontológiában semmi sem akadályozza, hogy szimmetrikus legyen.

<owl:ObjectProperty rdf:ID="adjacentRegion">
  <rdf:type rdf:resource="&owl;SymmetricProperty" />
  <rdfs:domain rdf:resource="#Region" />
  <rdfs:range rdf:resource="#Region" />
</owl:ObjectProperty>

<Region rdf:ID="MendocinoRegion">
  <locatedIn rdf:resource="#CaliforniaRegion" />
  <adjacentRegion rdf:resource="#SonomaRegion" />
</Region>

A Mendocino régió szomszédos a Sonoma régióval, és megfordítva. a Mendocino régió a California régióban van, de fordítva ez nem igaz.

3.3.3. Funkcionális tulajdonság

Ha egy P tulajdonságot funkcionálisnak címkézünk, akkor minden x, y, és z-re igaz, hogy

ha P(x,y) és P(x,z) akkor y = z

A Bor ontológiánkban a hasVintageYear (évjáratiÉve) tulajdonság funkcionális, ugyanis egy konkrét bornak csak egy évjárata lehet. Vagyis, egy adott Vintage egyed csak egyetlen évszámmal kapcsolható össze a hasVintageYear reláció segítségével. Egy owl:FunctionalProperty (egyértékű tulajdonság) esetében nem követelmény, hogy az érvényességi körében (domain-jében) minden egyed rendelkezzék értékkel. Lásd a diszkussziót a Vintage cardinality példánál.

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

<owl:ObjectProperty rdf:ID="hasVintageYear">
  <rdf:type rdf:resource="&owl;FunctionalProperty" />
  <rdfs:domain rdf:resource="#Vintage" />
  <rdfs:range  rdf:resource="#VintageYear" />
</owl:ObjectProperty>

3.3.4. Fordított tulajdonság

Ha egy P1 tulajdonságot úgy címkézünk, hogy owl:inverseOf P2, akkor minden x-re és y-ra igaz, hogy

ha P1(x,y) akkor P2(y,x) és megfordítva,

vagyis a két kifejezés kölcsönösen implikálja egymást. Figyeljük meg, hogy az owl:inverseOf szintaxisa egy másik tulajdonság nevét adja meg argumentumként. A példa azt mondja, hogy a "~bortKészít" (producesWine) tulajdonságnak a fordítottja a "termelője" (hasMaker) tulajdonság:

<owl:ObjectProperty rdf:ID="hasMaker">
  <rdf:type rdf:resource="&owl;FunctionalProperty" />
</owl:ObjectProperty>
  
<owl:ObjectProperty rdf:ID="producesWine">
  <owl:inverseOf rdf:resource="#hasMaker" />
</owl:ObjectProperty>

A boroknak van készítőjük, amelyek a Wine definíciójában a Winery (Pincészet) osztályra vannak korlátozva. Így minden egyes Winery produkál különféle borokat, amelyek definíciói őt viszont a készítőjükként definiálják.

3.3.5. Fordított funkcionális tulajdonság

Ha egy P tulajdonságot InverseFunctional-ként címkézünk akkor minden x, y és z-re igaz, hogy

ha P(y,x) és P(z,x) akkor y = z 

Vegyük észre, hogy az előző szekcióban említett producesWine tulajdonság is fordított funkcionális. Ennek az az oka, hogy egy funkcionális tulajdonság fordítottjának fordított funkcionálisnak kell lennie. Definiálhattuk volna a hasMaker és a producesWine tulajdonságot a következőképpen is, és azonos eredményt kaphattunk volna, mint az előző példában.

<owl:ObjectProperty rdf:ID="hasMaker" />
  
<owl:ObjectProperty rdf:ID="producesWine">
  <rdf:type rdf:resource="&owl;InverseFunctionalProperty" />
  <owl:inverseOf rdf:resource="#hasMaker" />
</owl:ObjectProperty>                                     ¬ 

Egy fordított funkcionális tulajdonság értéktartományának elemeit tekintsük úgy, mintha adatbázis értelemben egyedi kulcsokkal rendelkeznének. Az owl:InverseFunctional tulajdonság implikálja, hogy az értéktartomány elemei egy-egy egyedi azonosítót jelentenek a tulajdonság érvényességi körébe (domain-jébe) tartozó minden elem számára.

Az OWL Fullban egy adattípus-tulajdonságot (DatatypeProperty-t) is címkézhetünk inverseFunctional-nak. Ez lehetővé teszi, hogy egy karakterláncot egyedi kulcsként definiáljunk. Az OWL DL literálok osztálya és az owl:Thing osztály azonban diszjunkt. Emiatt az OWL DL nem engedi meg, hogy az InverseFunctional jellemzőt egy DatatypeProperty-re vonatkoztassuk.

3.4. Tulajdonságkorlátozások

A tulajdonságjellemzők mellett lehetőségünk van még tovább korlátozni egy tulajdonság értéktartományát bizonyos környezetekben és különböző módokon. Ezt a tulajdonságkorlátozásokkal valósítjuk meg. Ezeknek az alábbiakban leírt különböző formáit csak egy owl:Restriction kontextusban (azaz egy ilyen teg-pár által közrefogott definíciószakaszon belül) használhatjuk. Az owl:onProperty elem jelöli a korlátozandó tulajdonságot.

3.4.1. A tulajdonság értékeinek korlátozása

Már láttunk egy módszert arra, hogyan korlátozzuk azon elemek típusait, amelyek egy tulajdonságot alkotnak. A mechanizmusok eddig globálisak voltak (abban az értelemben, hogy a tulajdonság minden előfordulására vonatkoztak). A következő kettő, az allValuesFrom és a someValuesFrom azonban lokálisak, mert csak az őket tartalmazó osztálydefinícióra érvényesek.

Az owl:allValuesFrom korlátozás azt köti ki, hogy egy olyan osztály minden egyede számára, amelyiknek vannak a specifikált tulajdonsággal rendelkező egyedei, a tulajdonság lehetséges értékeit az owl:allValuesFrom klauzulával megjelölt osztály összes tagja alkotja.

<owl:Class rdf:ID="Wine">
  <rdfs:subClassOf rdf:resource="&food;PotableLiquid" />
  ...
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasMaker" />
      <owl:allValuesFrom rdf:resource="#Winery" />
    </owl:Restriction>
  </rdfs:subClassOf>
  ...
</owl:Class>

Ezzel lényegében azt mondtuk ki, hogy egy borféleség (Wine) előállítója (hasMaker) csakis pincészet (Winery) lehet. Az allValuesFrom korlátozás kizárólag a Wine osztályra bevezetett hasMaker tulajdonságra érvényes (a sajtok osztályának hasMaker tulajdonságára például már nem).

Hasonló a helyzet az owl:someValuesFrom korlátozással. Ha a fenti példában kicserélnénk az owl:allValuesFrom korlátozást az owl:someValuesFrom korlátozással, az azt jelentené, hogy a Wine osztály minden egyedének legalább egy alkalommal kell a hasMaker tulajdonsággal a Winery osztály valamelyik egyedéhez kapcsolódnia.

<owl:Class rdf:ID="Wine">
  <rdfs:subClassOf rdf:resource="&food;PotableLiquid" />
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasMaker" />
      <owl:someValuesFrom rdf:resource="#Winery" />
    </owl:Restriction>
  </rdfs:subClassOf>
  ...
</owl:Class>                                             ¬ 

A két korlátozás közötti logikai különbség nem más, mint az elsőrendű logika univerzális és egzisztenciális kvantora közötti különbség.

Reláció Következmények
allValuesFrom Minden borra igaz, hogy ha van előállítója, az mind a Pincészet osztályba tartozik. (Univerzális kvantor)
someValuesFrom   Minden bornak létezik olyan előállítója, amelyik a Pincészet osztályba tartozik. (Egzisztenciális kvantor)

Az első nem köti ki, hogy a bornak kell hogy legyen egy előállítója, hanem csak azt, hogy ha van, akkor az mind a Pincészet osztályhoz tartozik. A második már kiköti, hogy minden bornak legyen legalább egy előállítója, amelyik Pincészet, de azt megengedi, hogy legyen olyan előállítója is, amelyik nem Pincészet.

3.4.2. A tulajdonság kardinalitásának korlátozása

Már láttunk példákat a kardinalitás korlátozására. Eddig azonban ezek csak a kardinalitás minimális értékére vonatkoztak (owl:minCardinality). Ennél még szigorúbb az owl:Cardinality, mely lehetővé teszi, hogy pontosan megadjuk egy adott reláció előfordulásainak a számát egy adott osztály esetén. Például specifikáljuk a Vintage-t olyan osztályként, amelyiknek pontosan egy VintageYear relációja van.

<owl:Class rdf:ID="Vintage"> 
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasVintageYear"/>  
      <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

A hasVintageYear (évjáratiÉve) relációt korábban funkcionális tulajdonságként specifikáltuk, ami ugyanaz, mintha azt mondtuk volna, hogy minden Évjárathoz (Vintage) legfeljebb egy ÉvjáratiÉv (VintageYear) tartozik. A relációnak a fenti korlátozása azonban már erősebb, mert azt jelenti, hogy egy Évjárathoz pontosan egy ÉvjáratiÉv tartozik.

A 0 és 1 értékre korlátozott kardinalitás már az OWL Lite-ban is használható. Ezzel a felhasználó azt mondhatja, hogy annak értéke 'legalább egy', 'legfeljebb egy', vagy 'pontosan egy'. Az OWL DL megengedi a 0 és 1 értékeken kívül, a többi pozitív egész szám megadását is. Az owl:maxCardinality korlátozással a felső határát, az owl:minCardinality-val pedig az alsó határát specifikáljuk. A kettő kombinálásával egy numerikus intervallumon belül határozhatjuk meg, hogy egy adott osztály bármelyik egyede hányszor kapcsolható az így korlátozott relációval más egyedekhez.

3.4.3. A tulajdonság értékének megadása [OWL DL]

A hasValue tulajdonságkorlátozás lehetővé teszi, hogy osztályokat definiáljunk egy meghatározott tulajdonságérték megléte alapján. Ebből következően egy egyed ennek az osztálynak a tagja lesz, ha a tulajdonság értékeinek legalább egyike egyenlő a hasValue kifejezésben megadott értékkel.

<owl:Class rdf:ID="Burgundy">
  ...
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasSugar" />
      <owl:hasValue rdf:resource="#Dry" />
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

Itt azt deklaráltuk, hogy minden Burgundi bor száraz. Azaz, kell hogy legyen legalább egy olyan "cukrossága" tulajdonsága, amelynek értéke: "Száraz".

Ugyanúgy, mint az allValuesFrom és a someValuesFrom, ez is egy helyi korlátozás (local restriction), mivel a hasSugar tulajdonságot csak a Burgundy osztályon belül korlátozza.

4. Ontológiák egyesítése

Ahhoz, hogy ontológiáink elérjék a maximális hatásukat, az kell, hogy széles körben használják őket. Ehhez pedig elengedhetetlen, hogy a fejlesztésükhöz szükséges erőfeszítéseket minimalizáljuk. Ezért az ontológiáknak újrafelhasználhatóknak kell lenniük. Az elképzelhető világok legjobbikában az ontológiákat nem is kellene fejleszteni, hanem csak meglévő ontológiákból összeállítani. Például adoptálhatnánk egy dátum ontológiát egyik forrásból, és egy fizikai hely ontológiát egy másikból, és azután kiterjeszthetnénk a hely fogalmát (például elhelyezéssé) úgy, hogy tartalmazza azt az időtartamot is, ameddig egy adott elhelyezés érvényes.

Fontos észrevennünk, hogy az ontológiák fejlesztésében a legtöbb erőfeszítést arra kell fordítanunk, hogy olyan módokon kapcsoljunk össze osztályokat és tulajdonságokat, hogy ezek sokféle információ kinyerésére adjanak lehetőséget. Azt szeretnénk, ha az osztályokról és tagjaikról tett egyszerű állításainkból messzemenő és hasznos következtetéseket lehetne levonni. Az ontológiák fejlesztésében azonban éppen ez a legnagyobb kihívás. Ezért, ha sikerül találnunk egy olyan meglévő ontológiát, amelyik sok finomításon átesett már át, és széles körben használják, akkor érdemes azt adoptálnunk.

Nem lesz azonban könnyű dolog meglévő ontológiákból egy megfelelő újabbat összeállítani. Majdnem biztos, hogy a konzisztencia fenntartásához különleges eszköztámogatásra lesz szükségünk.

4.1. Egyenértékűség osztályok, tulajdonságok között
equivalentClass, equivalentProperty

Ahhoz, hogy egy sor meglévő ontológiát komponensként egy újabb ontológiába beépíthessünk, gyakran meg kell jelölnünk, hogy az egyik ontológiában egy adott osztály vagy tulajdonság egyenértékű egy másik ontológia valamelyik osztályával vagy tulajdonságával. Ezt a lehetőséget azonban körültekintően kell használni. Ha ugyanis a kombinált ontológiák ellentmondásosak (pl. azt mondjuk, hogy minden A egyenértékű minden B-vel, miközben ez nem igaz), akkor az osztálynak esetleg nem lesz olyan kiterjedése, amelyik kielégítené az új kombinációt.

Az étel ontológiában az étkezési fogások leírásánál szeretnénk a Bor ontológia egyes elemeihez kapcsolódni. Ennek egyik módja, hogy definiálunk egy osztályt az Étel ontológiában (&food;Wine) és azt egyenértékűnek deklaráljuk a bor ontológiában már meglévő Bor osztállyal (&vin;Wine).

<owl:Class rdf:ID="Wine">
  <owl:equivalentClass rdf:resource="&vin;Wine"/>
</owl:Class>

Az owl:equivalentClass tulajdonságot használjuk annak jelölésére, hogy a két osztálynak pontosan ugyanazok az egyedei. Megjegyzendő, hogy az OWL DL-ben az osztályok csak egyedek halmazait jelölik, de maguk nem lehetnek egyedek. Az OWL Full-ban viszont használhatjuk az owl:sameAs kifejezést két osztály között annak jelölésére, hogy ezek minden vonatkozásban azonosak.

Természetesen, a fenti példa egy kissé mesterkélt, hiszen mindig használhatnánk az &vin;Wine hivatkozást ott, ahol a #Wine-t, tehát újradefiniálás nélkül is ugyanazt az eredményt kapnánk. Az ekvivalencia valószínűbb használata egy olyan esetben fordulhat elő, amikor a munkánk két függetlenül fejlesztett ontológiától függ, és észrevesszük, pl. hogy ezek, pl. az O1:foo és az O2:bar URI-val hivatkoznak ugyanarra az osztályra. Ilyenkor az owl:equivalentClass deklaráció segítségével közösíthetjük őket, és így kombinálhatjuk a két ontológiából az adott osztállyal kapcsolatban levonható következtetéseket is.

Korábban láthattuk már, hogy osztálykifejezések is lehetnek az rdfs:subClassOf konstruktor célpontjai. Ez az owl:equivalentClass esetére is érvényes. Ez is feleslegessé teszi, hogy nevet kelljen kiagyalnunk minden osztálykifejezés számára, sőt hatékony definíciós lehetőséget biztosít egy tulajdonság kielégítése alapján:

<owl:Class rdf:ID="TexasThings"> 
  <owl:equivalentClass>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#locatedIn" />
      <owl:someValuesFrom rdf:resource="#TexasRegion" />
    </owl:Restriction>
  </owl:equivalentClass>
</owl:Class>                                                ¬ 

Itt azt mondtuk ki, hogy a texasi dolgok (TexasThings) pontosan ugyanazok a dolgok, amelyek a texasi régióban találhatók. A különbség az itt használt owl:equivalentClass, és az rdfs:subClassOf használata között nem más, mint a "szükséges feltétel" és a "szükséges és elegendő feltétel" közötti különbség. A subClassOf esetén azok a dolgok, amelyek Texasban találhatók, nem szükségszerűen texasi dolgok. Az owl:equivalentClass használatánál, ha valami Texasban található, az feltétlenül texasi dolog (a TexasThings osztály tagja).

Reláció Következmény
subClassOf Ha TexasThings(x), akkor locatedIn(x,y) és TexasRegion(y)
equivalentClass   Ha TexasThings(x) akkor locatedIn(x,y) és TexasRegion(y)
Ha locatedIn(x,y) és TexasRegion(y) akkor TexasThings(x)

A tulajdonságok hasonló módon történő összekapcsolására az owl:equivalentProperty konstruktort használjuk.

4.2. Egyedek azonossága
sameAs

Ez a mechanizmus az osztály-ekvivalenciánál leírtakhoz hasonló, de itt két egyedet deklarálunk azonosnak. Egy példa erre:

<Wine rdf:ID="MikesFavoriteWine"> 
  <owl:sameAs rdf:resource="#StGenevieveTexasWhite" /> 
</Wine>                                                  ¬ 

Ennek a példának nincs különösebb haszna. Amit ebből megtudunk, az csak annyi, hogy Mike kedvel egy olcsó helyi borfajtát. Sokkal tipikusabb használata a sameAs kifejezésnek az, amikor két ontológia egyesítése során, két egyedet, amelyet két különböző dokumentumban más-más néven definiáltak, azonosnak jelentünk ki.

Ez ráirányítja a figyelmet egy nagyon fontos dologra: az OWL nem feltételez egyedi neveket. Így tehát pusztán az, hogy a nevek különböznek, még nem jelenti azt, hogy ezek különböző egyedekre is hivatkoznak.

A fenti példában kijelentettük az azonosságot két különböző név között. De az is lehetséges, hogy egy ilyen típusú azonosságot következtetéssel állapítsunk meg. Emlékezzünk azokra a következményekre, amelyeket egy funkcionális tulajdonságnál vontunk le. Ha adott, hogy a hasMaker tulajdonság funkcionális, akkor az alábbiak nem szükségszerűen jelentenek konfliktust.

<owl:Thing rdf:about="#BancroftChardonnay">
  <hasMaker rdf:resource="#Bancroft" />
  <hasMaker rdf:resource="#Beringer" />
</owl:Thing>                                             ¬ 

Feltéve, hogy ez az állítás nem ütközik más információval az ontológiánkban, akkor csupán azt jelenti, hogy Bancroft = Beringer.

Jegyezzük meg, hogy a sameAs használata két osztály egyenlővé tételére nem ugyanaz, mintha az owl:equivalentClass segítségével tettük volna ugyanezt, mert az előbbi forma egyedként interpretál egy osztályt, és ez elegendő ahhoz, hogy ontológiánkat OWL Full kategóriájúvá minősítse át. Az OWL Full-ban a sameAs használható bárminek az egyenlővé nyilvánítására: egy osztálynak és egy egyednek, egy tulajdonságnak és egy osztálynak stb., ugyanis az OWL Full mindkét argumentumot eleve egyednek tekinti.

4.3. Egyedek különbözősége
differentFrom, AllDifferent

Ez a mechanizmus a sameAs hatásának a fordítottját állítja elő.

<WineSugar rdf:ID="Dry" />

<WineSugar rdf:ID="Sweet">  
  <owl:differentFrom rdf:resource="#Dry"/>  
</WineSugar> 

<WineSugar rdf:ID="OffDry">
  <owl:differentFrom rdf:resource="#Dry"/> 
  <owl:differentFrom rdf:resource="#Sweet"/> 
</WineSugar>

Ez egyik módja annak, hogy kijelentsük pl. a bor cukrosságát jelző Sweet, Dry és offDry egyedekről (Édes, Száraz, Félédes), hogy mindegyikük különbözik a többitől. Vannak olyan esetek, amikor garantálnunk kell különböző entitások kölcsönös különbözőségét. Ilyen előzetes garancia nélkül ugyanis nyugodtan leírhatnánk később, pl. egy borról, hogy száraz is, meg édes is. Korábban megállapítottuk, hogy a borral kapcsolatban használt "cukrossága" (hasSugar) tulajdonságnak csak egyetlen értéke lehet. Ha tévedésből azt állítanánk, hogy egy bor száraz és édes, a fenti differentFrom elemek nélkül ez azt jelentené, hogy a Dry és a Sweet fogalom ugyanaz. A fenti elemekkel azonban egy ellentmondás keletkezne, amit a következtetőgép könnyen kimutatna, megelőzve ezáltal a későbbi félreértéseket.

Létezik egy alkalmasabb mechanizmus is, amellyel kölcsönösen különböző egyedek halmazát lehet definiálni. A következő példa azt jelenti ki, hogy a Red, White és Rose egyedek minden párkombinációban különböznek egymástól.

<owl:AllDifferent>
  <owl:distinctMembers rdf:parseType="Collection">
    <vin:WineColor rdf:about="#Red" />
    <vin:WineColor rdf:about="#White" />
    <vin:WineColor rdf:about="#Rose" />
  </owl:distinctMembers>
</owl:AllDifferent>

Megjegyzés: az owl:distinctMembers felsorolás elem csak az owl:AllDifferent-tel kombinálva használható.

A Bor ontológiában az owl:AllDifferent kijelentést alkalmazzuk minden WineDescriptor számára. Azt is kijelentjük, hogy a Pincészet osztály minden egyede különböző. Ha egy újabb egyedet (konkrét pincészetet) szeretnénk ebbe az osztályba besorolni egy másik ontológiában, és kijelentenénk, hogy ez különbözik az összes meglévő egyedtől, akkor az egész eredeti owl:AllDifferent kijelentést egy "copy-paste" művelettel be kellene másolnunk az új ontológiába, és az új pincészetet hozzá kellene adnunk a meglévők listájához. az OWL DL-ben nincs más mód egy owl:AllDifferent kollekciónak a bővítésére. Az OWL Full-ban azonban az RDF tripletek és az rdf:List konstrukciók segítségével erre más megoldás is van.


5. Összetett osztályok [OWL DL]

Az OWL további konstruktorokat is biztosít, amelyekkel osztályokat képezhetünk. Ezek a konstruktorok un. osztálykifejezések előállítására használhatók. Az OWL támogatja az alapvető halmazműveleteket, nevezetesen az uniót, a metszetet és a komplementer (vagy komplemens) halmaz képzését. Ezeket owl:unionOf, owl:intersectionOf és owl:complementOf néven vezeti be a nyelv. Emellett felsorolás osztályokat is deklarálhatunk. Az osztálykiterjedéseket explicit módon a oneOf konstruktorral adhatjuk meg. Az osztályok kiterjedéseit idegen halmazoknak (diszjunkt halmazoknak) is minősíthetjük.

Megjegyezzük, hogy az osztálykifejezések egymásba skatulyázhatók anélkül, hogy a közbülső osztályoknak nevet kellene adnunk. Ez a halmazműveletekkel együtt lehetővé teszi összetett osztályok képzését névtelen osztályokból vagy érték-korlátozott osztályokból.

5.1. Halmazoperátorok
intersectionOf, unionOf, complementOf

Emlékezzünk rá, hogy egy OWL osztály kiterjedése olyan halmaz, mely az osztály egyedeiből áll. Az OWL lehetővé teszi, hogy az alapvető halmazoperátorok segítségével manipulálhassuk az osztályok kiterjedéseit.

5.1.1. Metszet [bizonyos mértékig OWL DL]

Az alábbi példák bemutatják az intersectionOf konstrukció használatát.

<owl:Class rdf:ID="WhiteWine">
  <owl:intersectionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#Wine" />
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasColor" />
      <owl:hasValue rdf:resource="#White" />
    </owl:Restriction>
  </owl:intersectionOf>
</owl:Class>

Azok az osztályok, amelyeket halmazműveletekkel konstruálunk, sokkal inkább hasonlítanak valódi osztálydefiníciókra, mint azok, amelyeket eddig láttunk. Az osztály tagjait teljesen specifikálják a halmazműveletek. A fenti konstrukció azt mondja ki, hogy a FehérBor (WhiteWine) pontosan a Bor osztálynak és a fehér színű dolgok halmazának a metszete. Ez azt jelenti, hogy ha valami bor és fehér, akkor az a FehérBor osztály egyede. Egy ilyen definíció nélkül felismerhetnénk, hogy a FehérBor az bor és fehér, de megfordítva már nem. Ez egy nagyon fontos eszköz az egyedek kategorizálására. (Megjegyzés: az 'rdf:parseType="Collection" ' itt egy szükséges szintaktikai elem.)

<owl:Class rdf:about="#Burgundy">
  <owl:intersectionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#Wine" />
    <owl:Restriction>
      <owl:onProperty rdf:resource="#locatedIn" />
      <owl:hasValue rdf:resource="#BourgogneRegion" />
    </owl:Restriction>
  </owl:intersectionOf>
</owl:Class>

Itt azt definiáltuk, hogy Burgundi alatt pontosan azokat a borokat értjük, amelyeknek legalább egy olyan locatedIn tulajdonságuk van, amelynek értéke a bourgogne-i régió. Deklarálhattunk volna egy új osztályt is, pl. ThingsFromBourgogneRegion néven, és használhattuk volna osztályként az owl:intersectionOf konstrukcióban. De, mivel semmi egyéb célra nem kellene ezt használnunk, ezért a fenti deklaráció rövidebb, világosabb, és nem kellett feleslegesen kitalálnunk egy osztálynevet.

<owl:Class rdf:ID="WhiteBurgundy">
  <owl:intersectionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#Burgundy" />
    <owl:Class rdf:about="#WhiteWine" />
  </owl:intersectionOf> 
</owl:Class>

És végül, a WhiteBurgundy osztályt pontosan meghatároztuk a FehérBor és a Burgundy metszetével. Azt pedig már korábbról tudjuk, hogy a Burgundi borokat a Francia régió bourgogne-i szubrégiójában termelik, és hogy ezek száraz borok. Így minden egyedi bor, amelyik megfelel ezeknek a kritériumoknak, a WhiteBurgundy osztály kiterjedéséhez tartozik.

5.1.2. Unió [OWL DL]

Az alábbi példa demonstrálja a unionOf konstrukció használatát. Ezt pontosan ugyanúgy használjuk, mint az intersectionOf konstrukciót:

<owl:Class rdf:ID="Fruit">
  <owl:unionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#SweetFruit" />
    <owl:Class rdf:about="#NonSweetFruit" />
  </owl:unionOf>
</owl:Class>

A Gyümölcs (Fruit) osztály tartalmazza mind az édes, mind a nem édes gyümölcsöket (SweetFruit, NonSweetFruit).

Figyeljük meg az alábbi példa alapján, hogy milyen nagy mértékben különbözik az Unió típusú konstrukció az Alosztály konstrukciótól.

<owl:Class rdf:ID="Fruit">
  <rdfs:subClassOf rdf:resource="#SweetFruit" />
  <rdfs:subClassOf rdf:resource="#NonSweetFruit" />
</owl:Class>                                             ¬ 

Ez azt mondja, hogy a Gyümölcs osztály egyedeinek halmaza az édes és nem édes gyümölcsök részhalmazainak metszete, aminek a várható értéke az üres halmaz. A metszet itt abból adódik, hogy explicit halmazoperátor nélkül a definícióban felsorolt elemek között implicit logikai ÉS (halmazmetszet) kapcsolat van. Az előző példában viszont az Unió operátor explicit logikai VAGY (halmazunió) kapcsolatot ábrázolt a két gyümölcs kategória között, ami helyes eredményt ad.

5.1.3. Komplemens [OWL DL]

A complementOf konstrukció kiválasztja mindazon egyedeket az ábrázolt tématerületről, amelyek nem tartoznak egy bizonyos osztályhoz. Általában ez az egyedek igen nagy halmazát jelenti:

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

  <owl:Class rdf:ID="NonConsumableThing">
    <owl:complementOf rdf:resource="#ConsumableThing" />
  </owl:Class>

A NemFogyaszthatóDolog (NonConsumableThing) osztály tagjai mindazon egyedek, amelyek nem tartoznak a FogyaszthatóDolog (ConsumableThing) osztály kiterjedéséhez. Ez magában foglalja az összes pincészeteket, régiókat stb. [E mondat angol szövegében a "pincészeteket" (Wineries) helyett a "borokat" (Wines) szó szerepel, ami elírás lehet, hiszen a bor fogyasztható dolog – a ford.] A NonConsumableThing halmaz pontosan az owl:Thing és a ConsumableThing halmazok különbsége. Ezért a complementOf tipikusan csak más halmazoperátorokkal kombinálva fordul elő:

<owl:Class rdf:ID="NonFrenchWine">
  <owl:intersectionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#Wine"/>
    <owl:Class>
      <owl:complementOf>
        <owl:Restriction>
          <owl:onProperty rdf:resource="#locatedIn" />
          <owl:hasValue rdf:resource="#FrenchRegion" />
        </owl:Restriction>
      </owl:complementOf>
    </owl:Class>
  </owl:intersectionOf>
</owl:Class>                                             ¬ 

Ez a példa a NemFranciaBor (NonFrenchWine) osztályt úgy definiálja, hogy hozzá rendeli a Bor osztálynak, és egy olyan osztálynak a metszetét, amelyik a nem Franciaországban található dolgok halmaza.

5.2. Felsorolás osztályok
oneOf [OWL DL]

Az OWL eszközei lehetővé teszik, hogy osztályokat specifikáljunk a tagjaik közvetlen felsorolásával. Ezt a oneOf construkció valósítja meg. Ez az egyetlen olyan definíció, mely véglegesen specifikálja az osztály kiterjedését, vagyis további egyedek utólag már nem deklarálhatók az osztály tagjaiként.

Az alábbi példa a BorSzín (WineColor) osztályt definiálja, amelynek elemei a fehér, a rosé és a vörös (White, Rose és a Red) egyed.

<owl:Class rdf:ID="WineColor">
  <rdfs:subClassOf rdf:resource="#WineDescriptor"/>
  <owl:oneOf rdf:parseType="Collection">
    <owl:Thing rdf:about="#White"/>
    <owl:Thing rdf:about="#Rose"/>
    <owl:Thing rdf:about="#Red"/>
  </owl:oneOf>
</owl:Class>

Az első, amit itt meg kell értenünk az az, hogy semmilyen más egyed nem lehet érvényes BorSzín, mivel az osztályt az egyedek felsorolásával végleg definiáltuk.

A oneOf konstrukció minden elemének egy érvényesen deklarált egyednek kell lennie. Egy egyednek mindig egy osztályhoz kell tartoznia. A fenti példában minden egyedre névvel hivatkoztunk, ehhez pedig a legegyszerűbb klisét, az owl:Thing-et használtuk. Egy másik lehetőségként a halmaz elemeire is hivatkozhattunk volna a specifikus típusukkal (ami történetesen a WineColor), a következőképpen:

<owl:Class rdf:ID="WineColor">
  <rdfs:subClassOf rdf:resource="#WineDescriptor"/>
  <owl:oneOf rdf:parseType="Collection">
    <WineColor rdf:about="#White" />
    <WineColor rdf:about="#Rose" />
    <WineColor rdf:about="#Red" />
  </owl:oneOf>
</owl:Class>

Másféle, ennél komplexebb egyedleírások is érvényes elemei lehetnének a oneOf konstrukciónak, például:

<WineColor rdf:about="#White">
  <rdfs:label>White</rdfs:label>
</WineColor>                                             ¬ 

A oneOf használatával kapcsolatos további példákat találhatunk a Referencia dokumentumban.

5.3. Diszjunkt osztályok
disjointWith [OWL DL]

Az osztályok egy adott halmazának a diszjunkt voltát az owl:disjointWith konstruktorral fejezhetjük ki. Ez garantálja, hogy egy egyed, amelyik egy osztálynak a tagja, nem lehet egyidejűleg egy másik adott osztálynak is a tagja.

<owl:Class rdf:ID="Pasta">
  <rdfs:subClassOf rdf:resource="#EdibleThing"/>
  <owl:disjointWith rdf:resource="#Meat"/>
  <owl:disjointWith rdf:resource="#Fowl"/>
  <owl:disjointWith rdf:resource="#Seafood"/>
  <owl:disjointWith rdf:resource="#Dessert"/>
  <owl:disjointWith rdf:resource="#Fruit"/>
</owl:Class>

A fenti Tészta (Pasta) példánk több diszjunkt osztályt definiál. Jegyezzük meg azonban, hogy itt csak azt állítjuk, hogy a Pasta idegen (diszjunkt) az összes itt felsorolt osztálytól. Nem állítjuk azonban azt, hogy pl. a Meat és a Fruit is idegen egymástól. Ha azt akarjuk kimondani osztályok egy csoportjáról, hogy kölcsönösen idegenek (azaz, hogy nincsenek közös egyedeik), akkor egy külön owl:disjointWith állítást kell tennünk minden lehetséges osztály párral kapcsolatban, amelyik ehhez a csoporthoz tartozik.

Gyakori igény, hogy egy osztályt kölcsönösen diszjunkt alosztályok halmazuniójaként definiáljuk.

<owl:Class rdf:ID="SweetFruit">
  <rdfs:subClassOf rdf:resource="#EdibleThing" />
</owl:Class>

<owl:Class rdf:ID="NonSweetFruit">
  <rdfs:subClassOf rdf:resource="#EdibleThing" />
  <owl:disjointWith rdf:resource="#SweetFruit" />
</owl:Class>

<owl:Class rdf:ID="Fruit">
  <owl:unionOf rdf:parseType="Collection">
    <owl:Class rdf:about="#SweetFruit" />
    <owl:Class rdf:about="#NonSweetFruit" />
  </owl:unionOf>
</owl:Class>

Itt a Fruit osztályt a SweetFruit és a NonSweetFruit uniójának definiáltuk. És tudjuk, hogy ezek az alosztályok pontosan két különböző alosztályra osztják fel a Fruit osztályt, mivel ezek diszjunkt osztályok. Ahogy a kölcsönösen diszjunkt osztályok száma (n) nő, az idegenosztályúság kifejezéséhez szükséges állítások száma n négyzetével arányosan nő. Azokban az alkalmazási esetekben azonban, amelyekkel eddig találkoztunk, n értéke tipikusan alacsony volt.

Amikor n túl nagy, alternatív megoldásokat is használhatunk, hogy a szükséges állítások négyzetes emelkedését elkerüljük. Egy ilyen módszert illusztrál az OWL Tesztsorozat dokumentum.

Az illusztrált módszer a következő: Leírunk egy szülő-osztályt, ahol az egyedeknek van egy olyan tulajdonságuk, amelynek a kardinalitása 1, azaz minden egyednek egy és csak egy értéke van erre a tulajdonságra. Majd pedig a szülő-osztály minden alosztályára kikötjük, hogy egyedeiknek ez a tulajdonsága egyedi értékkel kell, hogy rendelkezzék. Ily módon a különböző alosztályoknak nem lesz közös egyede.


6. Ontológiák verziókezelése

Az ontológiák olyanok, mint a szoftver. Ezeket is folyamatosan karban kell tartani, és így állandóan változnak az idők során. A korábban tárgyalt owl:Ontology elemen belül lehetőségünk van az éppen definiált ontológiát az előző verziójához linkelni. Az owl:priorVersion tulajdonság szolgál ennek a linknek a megadására, és ez biztosítja, hogy visszafelé követni tudjuk egy ontológiaverzió történetét.

<owl:Ontology rdf:about=""> 
  ...
  <owl:priorVersion rdf:resource="http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine"/> 
  ...
</owl:Ontology>

A megjelölt ontológia annak az ontológiának az előző verziója, amelyiket éppen definiáljuk.

Az ontológiák verziói nem feltétlenül kompatibilisek egymással. Például egy ontológia előző verziójában lehetnek olyan állítások, amelyek ellentmondanak a jelenlegi verziónak. Egy owl:Ontology elemen belül az owl:backwardCompatibleWith és az owl:incompatibleWith tegeket használjuk annak megadására, hogy kompatibilis-e a jelenlegi ontológia az előző verzióival, vagy sem. Ha nincs explicite deklarálva a visszamenőleges kompatibilitás (owl:backwardCompatibleWith), akkor nem szabad a kompatibilitást feltételezni. Van még egy owl:versionInfo nevű teg, amellyel a verziókezelő rendszerek számára adhatunk meg további verzió-információkat. Szemben az előző három teggel, az owl:versionInfo objektuma egy literál. Ez a teg nemcsak ontológiák, hanem osztályok és tulajdonságok verzió-adatainak megadására is használható.

Sok alkalmazásban az ontológia szintű verziókövetés nem elegendő. A karbantartóknak szükségük lehet kisebb egységek (osztályok, tulajdonságok és egyedek) szintjén is nyilvántartani a verzió-információkat – és lehet, hogy még ez sem elég. Az OWL-ban az osztálykifejezések inkrementális jellege azzal a következménnyel jár, hogy egyik ontológia újabb korlátozásokat vezethet be egy (nevesített) osztályhoz, és ezek az új korlátozások is verzió-információkat igényelnek.

Az OWL Full rendelkezik olyan kifejező erővel, hogy bármilyen állítást tehetünk egy osztállyal kapcsolatban, beleértve azt is, hogy egyede egy másik osztálynak, vagy hogy egy osztály (tehát nemcsak az egyedei) tulajdonságokkal, a tulajdonságai pedig értékkel rendelkeznek. Ezt a lehetőséget felhasználhatjuk osztályok és tulajdonságok ontológiájának a felépítésére is, amellyel követni lehet a verziókat. Az OWL névtér tartalmaz két előre definiált osztályt ElavultOsztály, illetve ElavultTulajdonság (owl:DeprecatedClass és owl:DeprecatedClass) néven. Ezekkel azt lehet jelezni, hogy a következő verzióban az osztály vagy a tulajdonság valószínűleg inkompatibilis módon fog változni [vagy azt, hogy ez már meg is történt, tehát az osztálynak vagy tulajdonságnak van egy újabb változata, és az elavult változatot csak visszamenőleges érvénnyel szabad használni – a ford.].

...
  <owl:DeprecatedClass rdf:ID="&vin;JugWine" />
  <owl:DeprecatedProperty rdf:ID="&vin;hasSeeds" />
...                                                            ¬ 

Fontos megjegyezni, hogy az owl:DeprecatedClass és az owl:DeprecatedProperty nem rendelkezik ennél több szemantikával, és hogy az eszközfejlesztők és az OWL felhasználók dolga annak biztosítása, hogy ezeket az elemeket a nyelv eredeti szándékainak megfelelően használják.


7. Alkalmazási példák

Ha már rendelkezünk egy tématerületen egy kezdeti ontológiával, nagy számú alkalmazást lehet fejleszteni, amelyek kihasználják ezt az ontológiát. Ebben a szekcióban leírunk néhány minta-alkalmazást a borok tématerületén.

7.1. Borportál

Sok webhely létezik, amelyik "borportálnak" nevezi magát. Például a Google 152,000 találatot ad a "wine portal" kulcsszavakra. A legjobb találatot adó "Wine-Portal.com" honlapjáról eljuthatunk sok ilyen webhelyhez. A legtöbb webhely, amelyik borportálnak nevezi magát, általában információs webhely. Például a wine-portal.com-nál az első helyen álló www.corkcuisine.com/ ismereteket nyújt borok és ételek, borok és ajándékok stb. párosításához.

Ha alaposan végigböngésszük bármelyik ilyen webhely anyagát, találunk egy csomó lapot, amelyik információkat tartalmaz, és olykor találunk olyan lapokat is, amelyek szolgáltatásokat nyújtanak a bor témában. Például a 'tartozékok és ajándékok' lap információt tartalmaz arról, mire ügyeljünk, amikor meghatározott borokat vásárolunk, és felsorol egy jelentős számú online borkereskedést is. Egy másik frekventált terület, a 'shopping', tartalmaz egy olyan részterületet, mint 'wine shopping' ahol a szörföző találhat számtalan online elárusító helyre mutató linket, amelyek országonként vannak kategorizálva. Ez a két webhely típus csupán két reprezentatív példa a sok közül a "wine portal" általános fogalmára, mely információk és szolgáltatások gyűjteményét kínálja a tématerületről.

Amikor kissé részletesebben megnézzük az ilyen webhelyeket, nem tudjuk megállapítani, hogy milyen mértékben támaszkodnak ontológiákra. A lapjaik HTML kódjában például nincs nyoma ontológiák használatának. Pedig nyilvánvaló, hogy ha már létezne valamilyen bor ontológia, akkor nagyon jól ki tudnák használni ezeket.

Portálok esetén az ontológiák egyik egyszerű alkalmazása az információ szervezése és böngészése lehetne. A kategóriák fenti listája kigenerálható volna a borral kapcsolatos osztályok legfelső néhány szintjéből. A lekérdezések pedig kihasználhatnák a bor ontológiát a borra vonatkozó információk megkeresésére. Ha pl. valaki adatot keresne egy olyan kifejezéssel, amelyik az ontológiában megvan, akkor a lekérdezést kiterjeszthetné alosztály információkkal, hogy még pontosabb választ kapjon. A portálokat úgy lehetne felépíteni, hogy automatikusan frissítsék magukat a tématerületről érkező (információjelölt) adatokkal. Az erős következtető képességükkel akár még fel is ismerhetnék a valószínű borkereskedelmi webhelyeket, sőt automatikusan le is tárgyalhatnák azok felvételét a portálra.

7.2. Borügynök

Beindítottunk egy "Borügynök" (wine agent) alkalmazást bemutatási célokra. Első változatában ennek az a feladata, hogy borokat ajánljon a különböző étkezési fogásokhoz. Ez az alkalmazás ugyanazt az ontológiát használja, amelyre ennek a dokumentumnak a példái is épülnek. Ez a bor ontológia elérhető a DAML ontology library-ban, wines néven.

Egy személyre szabott borügynök többféle szolgáltatást képes nyújtani az ember számára. Például arra használható, hogy ajánljon borokat meghatározott korlátozások (mint pl. a felszolgált étel) alapján, vagy keressen információt egy meghatározott borfajtáról, vagy a borok egy meghatározott osztályáról. Kereshet továbbá odaillő tartozékot (pl. egy megfelelő poharat) egy adott bor fajtához stb.

Alább leírunk egy példát egy egyszerű prototípus rendszerről, mely egy diplomamunka keretében készült.

Képzeljük el a következő helyzetet:

Valaki vendégeket vár vacsorára, akik között van legalább egy, aki különösen ért a borokhoz. A házigazda szeretne olyan borokat felszolgálni, amelyek jól illenek a menü különböző fogásaihoz, és szeretne tájékozottnak látszani a felszolgált borok tulajdonságaival kapcsolatban is. Szeretne továbbá beszerezni oda illő szerviz-tartozékokat a borok felszolgálásához. A házigazda úgy dönt, hogy fő fogásként frissen főtt tésztát kapnak a vendégek speciális, paradicsom alapú szósszal.

Hogy megfelelő bort szolgáljon fel az ételhez, házigazdánknak információra van szüksége arról, hogy milyen bor illik a különböző ételekhez. Hogy megmutathassa a borokkal kapcsolatos tájékozottságát, a házigazdánknak jól jönne, ha hozzájuthatna olyan, borral kapcsolatos információkhoz, amelyekre az eseménnyel kapcsolatban szüksége van. Hogy a megfelelő boros-készletet is beszerezhesse, errõl is tudnia kellene, hogy milyen illik az adott eseményhez (és a saját pénztárcájához).

Ha adva van egy bor háttér-ontológia, és le tudjuk írni, hogy milyen ételt kívánunk felszolgálni, akkor az ügynökünk megmondhatja, hogy milyen bort kellene az étel mellé felszolgálnunk. Az ügynök valószínűleg valamilyen zinfandel fajtaválasztékot ajánlana a főételhez (ez egy Kaliforniában elterjedt, tipikusan száraz vörösborfajta). Sőt akár egy konkrét terméket is meg tudna nevezni, így feltehetőleg a Marietta pincészet Zinfandelét ajánlaná. Minthogy most már ismert a kívánt borfajta, az ügynök kereshet egy olyan kereskedelmi portált, ahol nagy választék van zinfandel borokból, vagy akár konkrétan a Marietta Zinfandel változatot is kereshetné. Ha van egy megfelelő háttér-ontológia, amelyben le vannak írva az ilyen borok beszerzési forrásai (esetleg a borforgalmazó és a házigazdánk földrajzi elhelyezkedése szerint osztályozva), az ügynökünk meglátogathatna egy olyan webhelyet, mint a wine.com, és egy keresés alapján adhatna egy listát az ott árusított, és a kívánt célnak megfelelő termékekről. Az ügynök kereshetné a Marietta Zinfandel-t akár közvetlenül a Marietta pincészetnél, akár más forgalmazónál. Ennek során minden bizonnyal megállapítaná (pl. egy Google-nál történő kulcsszavas kereséssel, vagy néhány kiválasztott szakportálnál strukturált kereséssel), hogy a winelibrary.com-nál diszkont áron, 13.99 dollárért kapható Marietta Zinfandel az 1999-es évjáratból. A borügynök még tovább szűrhetné az ajánlatokat a házigazdánk által megadott árhatárok vagy fajtaváltozatok szerint, amíg az optimális vásárlás feltételei létre nem jönnek.

Ezek után az ügynök információkat adhatna a zinfandel borfajtáról általában, és a Marietta Zinfandel-ről különösen. Ehhez egy háttér-ontológiát használhatna azokról a borportálokról, ahol információk találhatók a különféle borokról. (Például az aktuális zinfandel boruk termelőjének a leírása jól használható információforrás lenne). Sokat segítene az olyan borminősítések elolvasása is, amilyeneket olyan tekintélyes szakfórumok publikálnak, mint a Wine Spectator. Ha nem találunk bírálatot a kedvenc borminősítő webhelyünkön a Marietta Zinfandel-ről akkor az ügynökünkkel kerestethetünk minősítéseket az ugyanazon a környéken termett zinfandel borokról is (ebben az esetben például a kaliforniai Sonoma County hasonló borairól).

Az általános háttér-információk is hasznosak lehetnek. A házigazdánk esetleg szívesen olvasna valamilyen könyvet a borokról általában, és a zinfandel-ről speciálisan. Így érdekelhetnék azok a könyvek, amelyeket az Amazon.com forgalmaz a zinfandel témáról. Házigazdánk kíváncsi lehet az ugyanabban a régióban termelt más zinfandel borok tulajdonságaira is, és így érdekelhetnék az információk a sonomai zinfandelekről. Egy borügynöknek az ontológia adatai mellett tudnia kell más, olyan háttér-információkról is, amelyek a szakterületével kapcsolatosak. Mivel a mi borügynökünk ételek és borok párosítására készült, így rendelkeznie kellene egyéb, ingyenes vagy megvásárolható információkkal is erről a témáról. (Ilyen lehetne, pl. a Wine Spectator cikke az egymáshoz illő ételekről és borokról).

A vacsora házigazdája nyilván szeretné előre beszerezni a vendéglátáshoz szükséges eszközöket. Tudja, hogy a borokat a fajtájukhoz illő poharakban szokás felszolgálni. Ha tehát a házigazda olyan fogást kínál, amelyhez zinfandel illik, akkor érdekelheti, hogy a Riedel cég az egyes borfajtákhoz illő boros poharak jól ismert gyártója. És tudnia kellene arról is, hogy létezik egy olyan portál (a Wine Enthusiast, egy jó nevű kereskedő cég, amelyik borral kapcsolatos árukkal foglalkozik), ahol kapható a Riedel's Vinum Zinfandel glass négyszemélyes boros készlet 63.95 dolláros áron (ha két ilyen készletet vásárolunk, akkor 59.95 dolláros diszkont áron). A házigazda jó, ha azt is tudja, hogy az Amazon.com-nál kapható a Reidel's Sommelier Zinfandel single stem glass (kézi gyártású, talpas, ólomkristály pohár zinfandel borokhoz) 49.99 dollárért (a 65.00 dolláros lista ár helyett). Az Amazon.com 79.99 dollárért (lista ár: 119.40) forgalmazza ugyanazt a "Vinum glass" készletet 6-személyesben, amit a Wine Enthusiast 4-személyesben. A borügynök e választék ismeretében készíthet egy listát azokról a pohárfélékről, amelyek illenek a zinfandel felszolgálásához, majd pedig összehasonlíthatja ezeket egyrészt az árak, másrészt az ontológiában szereplő tulajdonságok alapján.

Házigazdánk fontolgathatja más boros tartozékok beszerzését is. Az ontológiából tudjuk, hogy a dugóhúzók szintén boros tartozékok. A háttér-ontológia leírhat dugóhúzó alosztályokat, vagy találhat ilyen információkat az ügynök a megfelelő borportálokon is. A Wine Enthusiast ajánl pl. egy sor dugóhúzó típust, a típusok és az árhatárok leírásával. Itt megkülönböztetnek ilyen típusokat, mint: emelőkaros, pincér, állványos, csavaros és szivattyús. A házigazdánk jó, ha tud ezekről a típusokról, mielőtt vásárolna belőlük.

A borügynök különböző szintű képességekkel rendelkezhet attól függően, hogy milyen ontológiai háttér-tudásra támaszkodhat, és milyen szolgáltató webhelyeket ismerhet az adott tématerületen. Ebben a példában csupán olyan információkról beszéltünk, amelyek a borokra, az egyes borfajtákra, ételek és borok kombinálására, boros tartozékokra, és ezek tulajdonságaira vonatkoztak. Természetesen, ezt ki tudnánk terjeszteni úgy, hogy még több és még finomabban korlátozott/megszűrt információhoz juthasson általuk az ügynökprogram felhasználója.

Ennek a borügynöknek egy kialakulóban lévő, működő változata már hozzáférhető.


Köszönetnyilvánítás

Ez a dokumentum azoknak a széles körű eszmecseréknek és egyeztetéseknek az eredménye, melyeket a Web Ontológia Munkacsoporton, mint egészen belül folytattunk. A résztvevők ebben a munkacsoportban: Yasser alSafadi, Jean-François Baget, James Barnette, Sean Bechhofer, Jonathan Borden, Frederik Brysse, Stephen Buswell, Jeremy Carroll, Dan Connolly, Peter Crowther, Jonathan Dale, Jos De Roo, David De Roure, Mike Dean, Larry Eshelman, Jérôme Euzenat, Tim Finin, Nicholas Gibbins, Sandro Hawke, Patrick Hayes, Jeff Heflin, Ziv Hellman, James Hendler, Bernard Horan, Masahiro Hori, Ian Horrocks, Jane Hunter, Francesco Iannuzzelli, Rüdiger Klein, Natasha Kravtsova, Ora Lassila, Massimo Marchiori, Deborah McGuinness, Enrico Motta, Leo Obrst, Mehrdad Omidvari, Martin Pike, Marwan Sabbouh, Guus Schreiber, Noboru Shimizu, Michael Sintek, Michael K. Smith, John Stanton, Lynn Andrea Stein, Herman ter Horst, David Trastour, Frank van Harmelen, Bernard Vatant, Raphael Volz, Evan Wallace, Christopher Welty, Charles White, and John Yanosy.

Néhány kritikus, korai szöveg az összetett korlátozásokról Raphael Volz-tól származik (Forschungszentrum Informatik, FZI). Alapvető betekintést nyújtott a DAML+OIL Walkthru is. Jeremy Carroll, Jerome Euzenat, Jeff Heflin, Kevin Page és Peter F. Patel-Schneider extenzív bírálatokkal járult hozzá az anyaghoz. A munkacsoport találkozóján (WG Face to Face, 8 October 2002), Stephen Buswell, Ruediger Klein, Enrico Motta, and Evan Wallace részletes bírálatot adott az ontologiáról, amelyek alapvető változtatásokhoz vezettek. A 2003. januári munkacsoport találkozón (WG Face to Face, 10 January 2003), Jonathan Dale, Bernard Horan, Guus Schreiber, and Jeff Heflin részletes bírálatot nyújtottak be az "Útmutatóhoz", amelyek alapján több változtatás történt az anyagban. A nyilvános hozzászólások is számos segítő javaslattal és korrecióval járultak hozzá a dokumentum finomításához.


OWL glosszárium

A fordító megjegyzése:

Más fordításokkal ellentétben, itt megtartottuk az eredeti angol címszavakat és azok ábécé sorrendjét, de megadtuk ezek rövid magyar megfelelőjét is. Ennek a megoldásnak az a célja, hogy a glosszárium a fogalmak értelmezésén túl terminológiai kapcsolatot is létesítsen az angol és magyar nyelvű dokumentumok között. A következő szekcióban (a kifejezések indexében) ugyanilyen okokból tartottuk meg az angol kifejezéseket, de ott a magyar megfelelőjük alapján rendeztük ábécé sorrendbe a címszavakat.

Attribute
Attribútum (ugyanaz, mint az XML-nél)
Class Definition
osztálydefiníció (informális kifejezés egy owl:Class elemre)
Class Description
Osztályleírás (egy OWL osztály leírása az osztály nevével, vagy a kiterjedésének megadásával, mely egy névtelen osztályt eredményez)
Class name
Osztálynév (informális kifejezés egy owl:Class rdf:ID attribútum értékére)
Class
Osztály (mint az RDF-nél)
Component
Komponens (egy definíció része. Pl. egy osztálydefinícióban az "intersection-of" argumentuma).
Concept
Fogalom (informális kifejezés, mely az ontológiák által leirt "világ" absztrakcióit jelenti)
Constraint
Korlátozás (informális kifejezés egy megszorítás hatásának megfogalmazására)
Data-valued Property
Adatértékű tulajdonság (alternatív kifejezés az Adattípustulajdonság megnevezésére)
Datatype Property
Adattípustulajdonság (egy OWL tulajdonság, mely egyedeket kapcsol adatértékekhez)
Datatype
Adattípus (egy RDFS adattípus, mely csaknem mindig egy beépített, nem lista típusú XML Séma adattípus)
Element
Elem (1. jelentése: mint az XML-nél; 2. jelentése: egy halmaz eleme)
Entity
Entitás (mint az XML-nél)
Imports Closure
Import klauzúra (az információ egy ontológia dokumentumban, plusz az információ azon dokumentumok import klauzúrájában, amelyeket ez a dokumentum importál.
Individual-valued Property
Egyedértékű tulajdonság (Objektum tulajdonság, szemben az Adattípus tulajdonsággal)
Individual
Egyed (egy OWL osztály tagja, konkrét előfordulása, gyakorlatilag egy erőforrás, mely egy OWL osztály kiterjedéséhez tartozik)
Instance Of
Egyede (a viszony egy egyed és az osztálya között)
Instance
Példány (vagy Egyed, egy OWL osztály kiterjedésének a tagja)
Name
Név (u.a., mint az XML Névtereknél)
Named Class
Nevesített osztály (olyan OWL osztály, amelyhez azonosítót kapcsolunk)
Node
Csomópont (ugyanaz, mint az RDF Gráfoknál)
OWL Class
OWL osztály (egy olyan RDFS osztály, mely az owl:Class osztály kiterjedéséhez tartozik)
Object Property
Objektum-tulajdonság (olyan OWL tulajdonság, mely egyedeket kapcsol más egyedekhez)
Object
Objektum (1. jelentése: egy RDF triplet "tárgy" mondatrésze; 2. jelentése: alternatív kifejezés az Egyed fogalomra, csak örténeti okokból használjuk)
Ontology Document
Ontológia dokumentum (egy Web dokumentum, mely egy ontológiát tartalmaz. Általában egy owl:Ontology szintaktikai elem jelenléte azonosítja)
Ontology
Ontológia (1. jelentése: osztályokról és tulajdonságokról szóló információk gyüjteménye; 2. jelentése: az az információ, amit egy ontológia dokumentum tartalmaz)
Property Definition
Tulajdonságdefiníció (informális kifejezés egy owl:ObjectProperty és/vagy owl:DatatypeProperty elemre)
Resource
Erőforrás/Adatforrás/Forrás (az RDF tématerület egyik eleme)
Restriction, global
Globális korlátozás (az Érvényességi kör és az Értéktartomány korlátozások diszkussziójára fenntartott kifejezés)
Restriction, local
Lokális korlátozás, [Mint fent]
Restriction
Korlátozás (tipikusan egy osztálykifejezés, egy állítás, mely korlátokat fogalmaz meg. Jelző nélküli változatban mindig Lokálisnak tekintendő)
Set
Halmaz (egy matematikai értelemben vett halmaz)
Statement
Állítás (ugyanaz mint az RDF Gráfoknál)
Type
Típus (ugyanaz, mint az RDF-nél az rdf:type)
URI reference
URI hivatkozás (ugyanaz, mint az RDF-nél)
Unnamed Class
Névtelen osztály (egy OWL osztály, hozzá rendelt azonosító nélkül. Általában korlátozás komponensek definiálják)
Vocabulary
Szókészlet (URI hivatkozások halmaza [egy névtér nevei])



A kifejezések indexe és kereszthivatkozásai

A kifejezések Indexe

Kifejezés Szekció
Adattípus (datatype) 3.2.1.
Adattípus-tulajdonság (datatype property) 3.2.1.
Egyed (individual) 3.1.3.
Egyede (instance of) 3.1.3.
Egyedi nevek (unique names) 4.2.
Értéktartomány (range) 3.2.1.
Érvényességi kör (domain) 3.2.1.
Felsorolás osztály (enumerated class) 5.
Importálja (imports) 2.2.
Kardinalitás (cardinality) 3.4.2.
Kiterjedés (extension) 3.1.
Komplemens/komplementer (complement) 5.1.3.
Korlátozás osztály (restriction class) 3.4.1.
Metszete (intersectionOf) 5.1.1.
Monoton (monotonic) 2.
Névtelen osztály (anonimous class) 3.2.1.
Nyitott világ (open world) 2.
Objektumtulajdonságok (object properties) 3.2.1.
Ontológia (ontology) 1.
Osztály (class) 3.1.3.
OWL DL 1.1.
OWL Full 1.1.
OWL Lite 1.1.
Példány, egyed (instance) 3.1.3.
Következmény (entailed) 1.
Tulajdonság (property) 3.2.1.
Unió (union) 5.1.2.

A kereszthivatkozások listája

OWL Útmutató OWL Referencia OWL Szemantika
owl:AllDifferent / 4.3. owl:AllDifferent owl:AllDifferent
owl:allValuesFrom / 3.4.1. owl:allValuesFrom owl:allValuesFrom
owl:AnnotationProperty / 2.2. owl:AnnotationProperty owl:AnnotationProperty
owl:backwardCompatibleWith / 6. owl:backwardCompatibleWith owl:backwardCompatibleWith
owl:cardinality / 3.4.2. owl:cardinality owl:cardinality
owl:Class / 3.1.1. owl:Class owl:Class
owl:complementOf / 5.1.3. owl:complementOf owl:complementOf
  owl:DataRange owl:DataRange
owl:DatatypeProperty / 3.2.2. owl:DatatypeProperty owl:DatatypeProperty
owl:DeprecatedClass / 6. owl:DeprecatedClass  
owl:DeprecatedProperty / 6. owl:DeprecatedProperty  
owl:differentFrom / 4.3. owl:differentFrom owl:differentFrom
owl:disjointWith / 5.3. owl:disjointWith owl:disjointWith
owl:distinctMembers / 4.3. owl:distinctMembers owl:distinctMembers
owl:equivalentClass / 4.1. owl:equivalentClass owl:equivalentClass
owl:equivalentProperty / 4.1. owl:equivalentProperty owl:equivalentProperty
owl:FunctionalProperty / 3.3. owl:FunctionalProperty owl:FunctionalProperty
owl:hasValue / 3.4.3. owl:hasValue owl:hasValue
owl:imports / 2.2. owl:imports owl:imports
owl:incompatibleWith / 6. owl:incompatibleWith owl:incompatibleWith
owl:intersectionOf / 5.1.1. owl:intersectionOf owl:intersectionOf
owl:InverseFunctionalProperty / 3.3. owl:InverseFunctionalProperty owl:InverseFunctionalProperty
owl:inverseOf / 3.3. owl:inverseOf owl:inverseOf
owl:maxCardinality / 3.4.2. owl:maxCardinality owl:maxCardinality
owl:minCardinality / 3.4.2. owl:minCardinality owl:minCardinality
owl:Nothing / 3.1.1. owl:Nothing owl:Nothing
owl:ObjectProperty / 3.2.1. owl:ObjectProperty owl:ObjectProperty
owl:oneOf / 5.2. owl:oneOf owl:oneOf
owl:onProperty / 3.4. owl:onProperty owl:onProperty
owl:Ontology / 2.2. owl:Ontology owl:Ontology
  owl:OntologyProperty owl:OntologyProperty
owl:priorVersion / 6. owl:priorVersion owl:priorVersion
owl:Restriction / 3.4. owl:Restriction owl:Restriction
owl:sameAs / 4.2. owl:sameAs owl:sameAs
owl:someValuesFrom / 3.4.1. owl:someValuesFrom owl:someValuesFrom
owl:SymmetricProperty / 3.3. owl:SymmetricProperty owl:SymmetricProperty
owl:Thing / 3.1.1. owl:Thing owl:Thing
owl:TransitiveProperty / 3.3. owl:TransitiveProperty owl:TransitiveProperty
owl:unionOf / 5.1.2. owl:unionOf owl:unionOf
owl:versionInfo / 6. owl:versionInfo owl:versionInfo
    rdf:List
    rdf:nil
rdf:type   rdf:type
rdfs:comment / 2.2.   rdfs:comment
rdfs:Datatype / 3.2.2.   rdfs:Datatype
rdfs:domain / 3.2.1. rdfs:domain rdfs:domain
rdfs:label / 3.1.1.   rdfs:label
rdfs:Literal / 3.3.   rdfs:Literal
rdfs:range / 3.2.1. rdfs:range rdfs:range
rdfs:subClassOf / 3.1.1. rdfs:subClassOf rdfs:subClassOf
rdfs:subPropertyOf / 3.2.1. rdfs:subPropertyOf rdfs:subPropertyOf

A referenciák listája

OWL

[OWL Szemantika és absztrakt szintaxis]
Az OWL Web Ontológia Nyelv – Szemantika és absztrakt szintaxis, W3C ajánlás, 2004. február 10. Szerkesztők: Peter F. Patel-Schneider, Patrick Hayes, and Ian Horrocks. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/owl-semantics/.
[OWL Áttekintés]
Az OWL Web Ontológia Nyelv – Áttekintés, W3C ajánlás, 2004. február 10. Szerkesztők: Deborah L. McGuinness and Frank van Harmelen. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/owl-features/.
[OWL Referencia]
Az OWL Web Ontológia Nyelv – Referencia, W3C ajánlás, 2004. február 10. Szerkesztők: Mike Dean and Guus Schreiber. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/owl-ref/.
[OWL Követelmények]
Az OWL Web Ontológia Nyelv – Alkalmazási esetek és követelmények, W3C ajánlás, 2004. február 10. Szerkesztő: Jeff Heflin. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/webont-req/.
[OWL Tesztsorozat]
Az OWL Web Ontológia Nyelv – Tesztsorozat, W3C ajánlás, 2004. február 10.

Szerkesztők: Jeremy J. Carroll and Jos De Roo. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/owl-test/.

Egyéb, a témához tartozó W3C szabványok

[RDF]
Resource Description Framework (RDF) Model and Syntax Specification, Ora Lassila, Ralph R. Swick, Editors. World Wide Web Consortium Recommendation, 1999, http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/.
Latest version http://www.w3.org/TR/REC-rdf-syntax/.
[RDFS]
Az RDF Szókészlet Leíró Nyelv 1.0: RDF Séma, W3C ajánlás, 2004. február 10. Szerkesztők: Dan Brickley és R.V. Guha. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/rdf-schema/.
[RDF Concepts]
Az RDF Erőforrás Leíró Keretrendszer alapfogalmai és absztrakt szintaxisa, W3C ajánlás, 2004. február 10. Szerkesztők: Graham Klyne és Jeremy J. Carroll.
A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/rdf-concepts/.
[RDF Semantics]
Az RDF Szemantikája, W3C ajánlás, 2004. február 10. Szerkesztő: Patrick Hayes. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/rdf-mt/.
[RDF Syntax]
Az RDF/XML szintaxis specifikációja (átdolgozott kiadás), W3C ajánlás, 2004. február 10. Szerkesztő: Dave Beckett. A mindenkori legutolsó (eredeti angol) változat: http://www.w3.org/TR/rdf-syntax-grammar.
[URI]
Uniform Resource Identifiers (URI): Generic Syntax, T. Berners-Lee, R. Fielding, and L. Masinter, IETF Draft Standard August, 1998 (RFC 2396).
[XML Base]
XML Base, Jonathan Marsh, Editor. W3C Recommendation, 27 June 2001,
http://www.w3.org/TR/2001/REC-xmlbase-20010627/.
Latest version http://www.w3.org/TR/xmlbase/.
[XML Namespaces]
Namespaces in XML, Tim Bray, Dave Hollander, Andrew Layman, Editors. W3C Recommendation, Jan 1999,
http://www.w3.org/TR/1999/REC-xml-names-19990114/.
Latest version http://www.w3.org/TR/REC-xml-names.
[XML]
Extensible Markup Language (XML) 1.0, Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Editors. W3C Recommendation, 10 February 1998,
http://www.w3.org/TR/1998/REC-xml-19980210.
Latest version http://www.w3.org/TR/REC-xml.
[XML Schema 1]
XML Schema Part 1: Structures, Henry S. Thompson, David Beech, Murray Maloney, and Noah Mendelsohn, Editors. W3C Recommendation, 2 May 2001,
http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/.
A Latest version http://www.w3.org/TR/xmlschema-1/.
[XML Schema 2]
XML Schema Part 2: Datatypes, Paul V. Biron, Ashok Malhotra, Editors. W3C Recommendation, 2 May 2001,
http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/.
Latest version http://www.w3.org/TR/xmlschema-2/.

Minta-ontológiák és alkalmazások

[Integrating Applications]
Integrating Applications on the Semantic Web, James Hendler, Tim Berners-Lee, and Eric Miller. Journal of the Institute of Electrical Engineers of Japan, Vol 122(10), October, 2002, p. 676-680.
[VerticalNet]
Industrial Strength Ontology Management, Aseem Das, Wei Wu, and Deborah L. McGuinness. Stanford Knowledge Systems Laboratory Technical Report KSL-01-09 2001. In the Proceedings of the International Semantic Web Working Symposium, Stanford, CA, July 2001.
[Wine Ontology From Daml.org]
http://www.daml.org/ontologies/76
[Wine Ontology / CLASSIC Tutorial]
Classic Knowledge Representation System Tutorial, Deborah L. McGuinness, Peter F. Patel-Schneider, Richmond H. Thomason, Merryll K. Abrahams, Lori Alperin Resnick, Violetta Cavalli-Sforza, and Cristina Conati. AT&T Bell Laboratories and University of Pittsburgh, 1994.
[Wine Ontology Tutorial]
Ontology Development 101: A Guide to Creating Your First Ontology, Natalya Fridman Noy and Deborah L. McGuinness. Stanford Knowledge Systems Laboratory Technical Report KSL-01-05 and Stanford Medical Informatics Technical Report SMI-2001-0880, March 2001.
[Wine Ontology in CLASSIC]
Living with CLASSIC: When and How to Use a KL-ONE-Like Language, Ronald J. Brachman, Deborah L. McGuinness , Peter F. Patel-Schneider , Lori Alperin Resnick , and Alex Borgida. In Principles of Semantic Networks: Explorations in the representation of knowledge, John Sowa, Editor. Morgan-Kaufmann, San Mateo, California, 1991, pages 401--456.

A tudásábrázoló nyelvekkel kapcsolatos egyéb kutatások

[DAML+OIL]
DAML+OIL W3C Submission, Includes reference description, both model theoretic and axiomatic semantics, annotated walkthrough and examples.
Annotated DAML+OIL Ontology Markup, Dan Connolly, Frank van Harmelen, Ian Horrocks, Deborah McGuinness, Peter F. Patel-Schneider, Lynn Andrea Stein. December 2001.
[DAML-ONT]
DAML-ONT initial release at http://www.daml.org/2000/10/daml-ont.html.
[DAML-ONT KIF]
Partial DAML-ONT axiomatization at http://www.daml.org/2000/10/DAML-Ont-kif-axioms-001107.html.
Defined in KIF (http://logic.stanford.edu/kif/kif.html).
[Description Logics]
The Description Logic Handbook: Theory, Implementation and Application, Franz Baader, Diego Calvanese, Deborah L. McGuinness, Daniele Nardi, and Peter F. Patel-Schneider, Editors. Cambridge University Press, 2002.
[MCF]
Meta Content Framework Using XML, R.V. Guha and Tim Bray. Netscape Communications, 6 June 1997.
[Part Whole]
A Taxonomy of Part-Whole Relations. M. Winston, R. Chaffin & D. Herrmann. Cognitive Science, 11:417-444, 1987.
[XOL]
XOL: An XML-Based Ontology Exchange Language, Peter D. Karp, Vinay K. Chaudhri, and Jerome F. Thomere. Technical Report 559. AI Center, SRI International, 333 Ravenswood Ave., Menlo Park, CA 94025, Jul 1999.

Háttérinformációk és honlapok

[Dublin Core]
Dublin Core Metadata at home page, http://dublincore.org/.
[Dublin Core XML]
Expressing Dublin Core in RDF/XML, Dave Beckett, Eric Brickley, and Dan Brickley.
Dublin Core Metadata Initiative. July 31, 2002,
http://dublincore.org/documents/2001/11/28/dcmes-xml/.
[KAON]
The Karlsruhe Ontology and Semantic Web Tool Suite at http://kaon.semanticweb.org.
[OIL]
OIL Home Page at http://oil.semanticweb.org/.
[Ontobroker]
The Ontobroker home page at http://ontobroker.aifb.uni-karlsruhe.de/index_ob.html.
Institute AIFB, University of Karlsruhe.
[Ontoknowledge]
Ontoknowledge Home Page at http://www.ontoknowledge.org/.
[RDF Home]
RDF: Resource Description Framework. Background information at http://www.w3.org/RDF/.
[SHOE]
Simple HTML Ontology Extensions (SHOE) home page at http://www.cs.umd.edu/projects/plus/SHOE/. University of Maryland.
[KR]
KR Home Page at http://kr.org/.


A. függelék: XML + RDF Alapok

Ez a függelék linkeket tartalmaz olyan szabványok bevezető dokumentumaira, amely szabványokra az OWL is épül.

Ahhoz, hogy az OWL szintaxisát és szemantikáját tökéletesen megérthessük, szükséges ismernünk a témához kapcsolódó, alább felsorolt W3C és IETF szabványokat is. (A minimálisan szükséges bevezetés az XML-be és az RDF-be az első két link alatt található.)


B. függelék: Az OWL történeti áttekintése

A Resource Description Framework (RDF) volt a W3C által specifikált első olyan nyelv, amellyel tetszőleges adatforrásokról szemantikai információt lehet ábrázolni. Az RDF Schema (RDFS) egy W3C ajánlás tervezet az RDF kiterjesztésére, amellyel leírhatjuk az RDF szókészleteket. Az RDFS is ontológiák alkotására alkalmas, de célszerűen könnyített, az OWL-nál kisebb kifejező erővel bíró nyelv.

Ugyanúgy, mint az OWL, az RDFS is osztályokat és tulajdonságokat, és ez utóbbiakra értéktartomány- és érvényességi kör korlátozásokat definiál. Lehetővé teszi öröklési hierarchiák építését osztályokból és tulajdonságokból egyaránt. Röviddel a nyelv megjelenése után a felhasználók elkezdték követelni további lehetőségek beépítését (pl. adattípusokat, felsorolás osztályokat és a tulajdonságok rigorózusabb definiálhatóságát).

A kutatóközösségekben más projektek is vizsgálták már pontosan ugyanilyen lehetőségek megvalósítását. Azok számára, akik mélyebben bele kívánják ásni magukat ebbe a háttéranyagba, az alábbiakban (a teljesség igénye nélkül) adunk egy listát ezekről a projektekről és az általuk fejlesztett nyelvekről:

A kutatók, akik közül sokan fő résztvevői voltak mind az OIL, mind a DAML-ONT projekteknek, ahelyett, hogy folytatták volna az egymástól eltérő ontológia nyelvek fejlesztését a Szemantikus Web számára, alakítottak egy bizottságot (Joint US/EU ad hoc Agent Markup Language Committee), hogy egy új ontológia nyelvet dolgozzanak ki. Ezt a nyelvet (DAML+OIL), mely az OIL-ra és a DAML-ONT-ra épül, az OWL nyelv bázisaként előterjesztették a W3C-nek, és ettől kezdve ezt az OWL kiindulási alapjának tekintik.

Az ontológia nyelvek mellett különféle meglévő taxonómiákat és ontológiákat már kereskedelmi célokra is használnak. Egyes e-kereskedelmi webhelyeken ezek segítik a gépi kommunikációt a vásárló és az eladó között, emellett megkönnyítik a piacok vertikális integrációját, és lehetővé teszik, hogy a leírásokat újra fel lehessen használni különböző piaci szegmensekben. Íme, példaként néhány webhely, ahol ténylegesen használnak ontológiákat kereskedelmi célokra:

Különböző orvosi és gyógyszervegyészeti ontológiákat fejlesztettek ki, hogy segítsék a jelenlegi orvosi és biokémiai kutatások óriási adattömegének kezelését, amelyet ontológiák nélkül nagyon nehéz lenne összetartó egésszé összekapcsolni. Az egyik legnagyobb ilyen forrás a Gene Ontology Consortium, mely ontológiákat definiál az alábbi tématerületekre:

Ez a webhely linkeket tartalmaz ilyen ontológiákra, mint:

Ma már használatban vannak olyan terjedelmes taxonómiák, amelyek elég érettek arra, hogy kiterjesszék őket az OWL területre. Például a North American Industry Classification System (NAICS) definiál egy több, mint 1900 egységből álló hierarchiát, mely a különféle ipari tevékenységeket osztályozza. A NAICS kapcsolódik az International Standard Industrial Classification System (ISIC, Revision 3) osztályozáshoz is, amelynek karbantartása az ENSz keretében történik.


C. függelék: Változtatási napló az Ajánlástervezet (2003. December 15.) óta


Valid XHTML 1.0! Valid CSS!