Az RDF (Resource Description Framework) egy erõforrásokat leíró keretrendszer, mely alkalmas arra, hogy tetszõleges erõforráshoz metaadatot rendeljen. RDF számára minden erõforrás, amihez kapcsolódik URI(Universal Resource Identifier). Az RDF alapötlete az, hogy URI-val azonosított erõforrásokat tulajdonságok segítségével más erõforrásokkal, vagy közönséges literálokkal köti össze. Ez az összeköttetés szolgáltatja majd a szemantikus kapcsolatot. Röviden ismertem az RDF szintaxisát, jelöléseit, mindezt az OWL fejezet megértésének könnyítéseképp.
A metaadatok leírhatóságának érdekében az RDF definiál egy halmazelméleti alapokon nyugvó adatmodellt, melybe az alábbi halmazok definiáltak
2.2.1 Erõforrások
Az összes olyan dolog halmaza, amire RDF kijelentés vonatkoztat, ilyen lehet például egy weblap, egy kép, stb. Ezeket az erõforrásokat URI-k azonosítják.
2.2.2 Tulajdonságok
A tulajdonságok erõforráshoz kapcsolható jellemzõk. A tulajdonságok valójában szintén erõforrások, melyeket URI-k azonosítanak, tehát halmazuk az erõforrások halmazának részhalmazát képezi. Minden tulajdonságra meghatározható, hogy milyen erõforrásokhoz kapcsolható és milyen értéket vehet fel, valamint milyen kapcsolatban áll más tulajdonságokkal.
2.2.3 Literálok
A literálok halmazát egyszerû karaktersorozatok képezik.
2.2.4 Kijelentések
A halmaz elemei hármasok(kijelentések), melyek alanyból, állítmányból és tárgyból állnak. Az alany egy tetszõleges RDF erõforrás, az állítmány egy tetszõleges RDF tulajdonság, a tárgy pedig egy RDF erõforrás vagy literál lehet.
<?xml version="1.0" encoding="iso-8859-2">
Jelzi a feldolgozó alkalmazásnak, hogy egy XML típusú dokumentumról van szó.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22/22-rdf-syntax-ns#"
xmlns:s="http://utils.org/utils/">
Az XML dokumentum gyökér eleme, ami jelzi, hogy RDF dokumentumról van szó. A megadott névtér az RDF specifikáció része. A nyitó és záró elem között helyezkedik a tényleges RDF tartalom.
<rdf:Description rdf:about="http://.../cedrus.htm"> <s:festõje>Csontváry Kosztka Tivadar</s:festõje> </rdf:Description>
</rdf:RDF>
Az rdf névtérhez tartozó Description elem rdf:about attribútumának segítségével adhatjuk meg a kifejezés alanyát. Az <s:festõje> minõsített XML név adja meg a kijelentés állítmányát, míg a tartalma a tárgyát.
2.4.1 rdf:resource
<rdf:Description rdf:about="http://people.inf.elte.hu/stelmo"> <s:levélcíme rdf:resource="mailto:stelmo@inf.elte.hu"/> </rdf:Descrition>
Az attribútum használatával erõforrás-erõforrás kapcsolatok adhatók meg.
Jelen esetben a honlapom mint erõforrás hozzárendelõdött az e-mail címemhez.
2.4.2 rdf:parseType
Ez egy általános eszköz a tulajdonság interpretációjának a megváltoztatására. Ha értéke "Literal" akkor a tulajdonságelem tartalmát nem elemzik az RDF feldolgozók. Ha értéke "Resource" akkor a tulajdonságelem tartalmát úgy kell kezelni, mintha egy Description elem része lenne, vagyis mintha erõforrást írna le.
<rdf:Description rdf:about="http://.../cedrus.htm">
<s:festõje rdf:parseType="Resource"> <s:neve>Csontváry Kosztka Tivadar</s:neve> <s:születésiIdeje>1853</s:születésiIdeje> </s:festõje> </rdf:Description>
2.4.3 rdf:nodeID
Az attribútum segítségével egy a dokumentumon belüli lokálisan egyedi azonosítót rendelhetünk az üres csomópontokhoz, vagyis melyekhez nincs erõforrás URI hozzárendelve. Az alábbi módon hivatkozhatunk rájuk:
<rdf:Description rdf:about="http://.../cedrus.htm">
<s:festõje rdf:nodeID="lokális_azonosító"/> </rdf:Description> <rdf:Description rdf:nodeID="lokális_azonosító"> <s:neve>Csontváry Kosztka Tivadar</s:neve> <s:születésiIdeje>1853</s:születésiIdeje>
</rdf:Description>
2.4.4 rdf:ID
Egyedi azonosítót rendelhetünk vele egy erõforráshoz, amelynek nincs URI-je. Az rdf:about attribútum szerepét helyettesíti.
Az rdf:nodeID-hez hasonlóan szintén felhasználhatjuk, hogy hivatkozzunk az általa azonosított erõforrásra.
<rdf:Description rdf:ID="felhasznalo1">
<s:név>Gipsz Jabab</s:név> <s:email rdf:resource="mailto:gj@noname.com"/> </rdf:Description> <rdf:Description rdf:about="felhasznalo1"> <s:telefon>06302221133</s:telefon> </rdf:Description>
2.4.5 rdf:type
Egy adott erõforrásosztály példányosítására használható. Megadható például egy konkrét személyrõl, hogy ember:
<rdf:Description rdf:about="http://people.inf.elte.hu/stelmo"> <rdf:type rdf:resource="http://www.thing.org/rdf/schemas/simple#Ember/> </rdf:Description>
Ennek egy egyszerûsített írásmódja:
<rdf:RDF xmlns:n="http://www.thing.org/rdf/shemas/simple>
<n:Ember rdf:about="http://people.inf.elte.hu/stelmo"/> </rdf:RDF>
2.4.6 rdf:datatype
Az RDF leíró nyelv nem rendelkezik beépített adattípusokkal. Ennek ellenére lehetõség van egyfajta típusosság bevezetésére. Erre szolgál az rdf:datatype. Segítségével az egyes literálokhoz hozzárendelhetjük az XML Schema által definiált adattípusokat.
<s:születésiIdeje rdf:datatype="http://www.w3.org/2001/XMLSchema#date>1953-07-05</s:születésiIdeje>
Ebben a fejezetben bemutatásra kerül néhány olyan RDF osztály, melyek segítségével erõforrásokat foghatunk össze egy csoportba, illetve ezen csoportokról fogalmazhatunk meg kijelentéseket. Az RDF az alábbi konténertípusokat (osztályokat) definiálja:
2.5.1 rdf:Bag
Zsák, melyben sorrendfüggetlenül helyezkednek el az erõforrások vagy literálok és egy elem többször is elõfordulhat.
2.5.2 rdf:Seq
Sor, ahol egy elem többször elõfordulhat, de a sorrend lényeges.
2.5.3 rdf:Alt
Olyan erõforrások vagy literálok rendezetlen csoportja, melyben egy erõforrás többször is szerepelhet. Ezek az elemek bizonyos szempontból egyenértékûnek számítanak ezért felcserélhetõek egymással. A másik két típussal ellentétben ez a típus nem lehet üres, legalább egy elemmel rendelkeznie kell. A konténer elsõ eleme az alapértelmezett elem, tehát az elsõ elem kivételével érvényes, hogy az elemek sorrendje közömbös.
A konténerek elemeit az rdf:_n tulajdonság szerint számozott formában adhatjuk meg.
<rdf:Bag rdf:ID="Hátizsák"> <rdf:_1 rdf:resource="http://www.things.org/calculator"/> <rdf:_2 rdf:resource="http://www.example.com#pen"/> </rdf:Bag>
Nem feltétlenül kell ragaszkodni a sorszámozott megadási módhoz, helyette használható az rdf:li tulajdonság is. Ez valójában csak szintaktikus cukor, hogy ne kelljen explicit módon kiírni az elemek sorszámát.
<rdf:Bag rdf:ID="Hátizsák2"> <rdf:li rdf:resource="http://www.things.org/calculator"/> <rdf:li rdf:resource="http://www.example.com#pen"/> </rdf:Bag>
2.5.4 rdf:List
Az RDF lehetõséget ad zárt csoportok megadására is, vagyis ezek a csoportok csak az általunk megadott elemeket tartalmazhatják. Az ilyen csoportot nevezzük RDF kollekciónak, ami valójában nem más, mint egy lista. Az rdf:first tulajdonsággal adható meg a lista elsõ eleme, míg az rdf:rest segítségével a maradék kollekció.
<rdf:Description rdf:about="http://www.peldahonlap.hu"> <dc:creator> <rdf:List> <rdf:first>Kovács Béla</rdf:first> <rdf:rest> <rdf:List> <rdf:first>Nagy Géza</rdf:first> <rdf:rest rdf:resource="http://.../22-rdf-syntax-ns#nil"> </rdf:List> </rdf:rest> </rdf:List> </dc:creator> </rdf:Description>
Mint korábban láttuk, az rdf:type attribútum segítségével megadható egy erõforrásról, hogy mely osztály példánya. Arról viszont nem esett szó, hogy az rdf:type értékeként rdfs:Class erõforrást kell megadni. Az objektum orientált nyelvekkel szemben az RDF nem hoz létre új osztályt, hanem egy erõforrásról jelenthetjük ki, hogy az egy osztály, a konténerekhez hasonlóan.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:base="http://www.examlpe.org"> <rdf:Description rdf:ID="Állat"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> </rdf:RDF>
Egy osztályról az rdfs:subClassOf tulajdonság segítségével jelenthetjük ki, hogy egy másik osztály alosztálya. Ez a tulajdonság tranzitív. RDF-ben egy osztálynak tetszõleges számú szülõosztálya és alosztálya lehet. Az alábbi példában az Emlõs osztályról jelentjük ki, hogy alosztálya a fent megadott Állat osztálynak.
<rdfs:Class rdf:ID="Emlõs"> <rdfs:subClassOf rdf:resource="http://www.example.org#Állat"/> <rdfs:comment>Az emlõs állatok osztálya</rdfs:comment> </rdfs:Class>
Az rdfs:comment tulajdonság segítségével megjegyzések helyezhetõk el a kódban.
Egy RDF tulajdonság az rdf:Property osztály egy példánya, tehát egy erõforrásról példányosítással tudjuk kijelenteni, hogy az egy tulajdonság. Az osztályokhoz hasonlóan itt is lehetõség van hierarchikus viszonyok definiálására, melyre az rdfs:subPropertyOf tulajdonság szolgál.
<rdf:Description rdf:ID="ismerõse"> <rdf:type rdf:resources="http://www.w3.org/2000/01/rdf-schema#Property"/> <rdfs:comment>Szociológiai reláció</rdfs:comment> </rdf:Property>
<rdf:Property rdf:ID="barátja"> <rdfs:subPropertyOf rdf:resource="#ismerõse"/> <rdfs:comment>Közeli ismerõsök</rdfs:comment> </rdf:Property>
A tulajdonság használata:
<n:Ember rdf:ID="Gipsz Jakab"> <rdfs:comment>Sablon név :)</rdfs:comment> </n:Ember>
<n:Ember rdf:ID="Tetõfedõ Ernõ"> <s:barátja rdf:resource="#Gipsz Jakab"> <rdfs:comment>Tetõfedõ Ernõ barátja Gipsz Jakabnak</rdfs:comment> </n:Ember>
Lehetõség van a tulajdonságok értelmezési tartományának és értékkészletének a korlátozására. Vagyis megadható, hogy a tulajdonságot használó kifejezésben milyen osztályok példányai tölthetik be az alany és tárgy szerepét. Az értelmezési tartomány az rdfs:domain, míg az értékkészlet az rdfs:range tulajdonságok segítségével adható meg.
<rdf:Property rdf:ID="leánykori neve"> <rdfs:domain rdf:resource="#Ember"/> <rdfs:domain rdf:resource="#Nõnemû"/> </rdf:Property>