7 RDF-perusteet Semanttisen Webin määrittelyteknisen ytimen muodostaa siis Resource Description Framework (RDF) -määritys. Tarkastellaan seuraavassa lyhyesti kielen (kaikille sovelluksille yhteisiä) primitiivejä lähemmin. RDF määrittelee lausumien perusrakenteen lisäksi erityisesti tyypitetyn literaalin käsitteen (vrt. XML Schema). Tämän lisäksi kieli esittelee joukko yksinkertaisia tietorakenteita: säiliöitä ja kokoelmia, sekä ns. reifikaation käsitteen 144
7.1 Välisoitto RDF-tietomalli tähtää siis kaikentyyppiseen mallintamiseen Malli taipuukin useiden sovellusten käyttöön Käytännön sovelluksissa "realistinen minimalismi" RDF:n eri piirteiden hyödyntämisessä on kuitenkin kelpo tie 145
7.2 Vielä tyhjistä solmuista Tyhjä solmu on siis RDF-graafin osa jolle ei haluta pakottaa globaalia nimeä - monipaikkaiset relaatiot - "muuttujat" (vrt. "on olemassa X, s.e. Address(X, "Kotikatu 1") N3-tiedostoissa tyhjä solmu nimetään esim. _:x ex:address "Kotikatu 1". RDF/XML-tiedostoissa tyhjä solmu nimetään attribuutilla rdf:nodeid: <rdf:description rdf:about="http://www.w3.org/tr/rdf-syntax-grammar"> <dc:title>rdf/xml Syntax Specification (Revised)</dc:title> <exterms:editor rdf:nodeid="abc"/> <rdf:description rdf:nodeid="abc"> <exterms:fullname>dave Beckett</exterms:fullName> <exterms:homepage rdf:resource="http://purl.org/net/dajobe/"/> 146
7.3 Tyypitetyt literaalit (1/2) Oletusarvoisesti literaali on vain merkkijono: ex:85740 ex:age "27". Merkkijonon tulkinta voidaan tuntea "etukäteen" sovelluksen perusteella tai kertoa toisella lausumalla Literaaliin voidaan kuitenkin myös liittää tieto datatyypistä (vrt. XML Schema); tuloksena tyypitetty literaali (Typed Literal): ex:85740 ex:age "27"^^<http://www.w3.org/2001/XMLSchema#integer>. tai ex:85740 ex:age "27"^^xsd:integer. RDF määrittelee vain yhden oman datatyypin (rdf:xmlliteral), muuten nojaudutaan toisaalla esiteltyihin (periaatteessa taas mv. URI-nimiä) Osaa XML-skeemojen esimääritellyistä datatyypeistä ei suositella käytettäväksi näiden olettamusten tai tulkinnanvaraisuuden takia 147
7.4 Tyypitetyt literaalit (2/2) RDF/XML-syntaksissa tyypitetty literaali esitetään attribuutilla rdf:datatype: <rdf:rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:exterms="http://www.example.org/terms/"> <rdf:description rdf:about="http://www.example.org/index.html"> <exterms:creation-date rdf:datatype= "http://www.w3.org/2001/xmlschema#date">1999-08-16 </exterms:creation-date> </rdf:rdf> Sama N3-muodossa: ex:index.html exterms:creation-date "1999-08-16"^^xsd:date. Tekstientiteettejä käytetään toisinaan lyhentämään RDF/XML-koodia, esim.: <!DOCTYPE rdf:rdf [<!ENTITY xsd "http://www.w3.org/2001/xmlschema#">]> 148
7.5 URI-nimien sieventäminen RDF/XML sallii suhteellisten nimien käytön resurssien URI-nimien koodaamisessa fragmenttiosoitteiden avulla (tällöin rdf:about rdf:id). Oletetaan esimerkiksi että ao. esimerkkitiedoston osoite on http://www.example.com/2002/04/products. Ts. ao. koodinpätkä... <rdf:description rdf:id="item10245"> <exterms:model rdf:datatype="&xsd;string">overnighter</exterms:model> <exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>...vastaa N3-koodia <http://www.example.com/2002/04/products#item10245> exterms:model "Overnighter"^^xsd:string. RDF/XML sallii myös XML:n base-attribuutin käytön (attribuutti xml:base) N3-tiedostossa voidaan vastaavasti viitata notaatiolla <#item10245> exterms:model "Overnighter"^^xsd:string. 149
7.6 Säiliöt RDF määrittelee kolme ns. säiliöitä (Container) kuvailevaa käsitettä: - pussi (rdf:bag): ei järjestystä (monikerrat sallitaan) - jono (rdf:seq): järjestetty - vaihtoehdot (rdf:alt): 1. arvo on oletusarvo, muuten järjestyksellä ei väliä Säiliöominaisuus voidaan liittää mihin tahansa resurssiin; tällöin halutaan lähinnä käyttää neutraalia jäsenyyspredikaattia rdf:_n missä n=1,2,3,... Yo. määritelmät ovat "vain" tarkoitettuja tulkintoja; RDF ei määrittele käsitteille formaalia tulkintaa (joka olisi erilainen kuin RDF-graafin tulkinta muuten) 150
7.7 Esimerkki: RDF/XML ja vaihtoehdot Säiliössä voidaan käyttää koodia rdf:li: <rdf:rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://example.org/packages/vocab#"> <rdf:description rdf:about="http://example.org/packages/x11"> <s:distributionsite> <rdf:alt> <rdf:li rdf:resource="ftp://ftp.example.org"/> <rdf:li rdf:resource="ftp://ftp1.example.org"/> <rdf:li rdf:resource="ftp://ftp2.example.org"/> </rdf:alt> </s:distributionsite> </rdf:rdf> N3:ssa joudutaan käyttämään numerointia (vrt. tyhjän solmun nimi!): ex:x11 rdf:_1 "ftp://ftp.example.org". 151
7.8 Kokoelmat Säiliötä ei voi "sulkea" kokoelma (Collection) korjaa tämän puutteen Kokoelmat ovat oleellisesti listarakenteita joiden 1. ja viimeinen alkio merkitään erikseen Listan jokainen alkio on implisiittisesti tyyppiä rdf:list: - rdf:first - rdf:rest - rdf:nil 152
7.9 RDF/XML ja kokoelmat <rdf:description rdf:about="http://example.org/courses/6.001"> <s:students rdf:parsetype="collection"> <rdf:description rdf:about="http://example.org/students/amy"/>... <rdf:description rdf:about="http://example.org/students/johann"/> </s:students> /rdf:description> Yo. lyhennemerkintä on käytössä mukavampi kuin täyspitkä versio, esim.: <rdf:description rdf:about="http://example.org/courses/6.001"> <s:students rdf:nodeid="sch1"/>... <rdf:description rdf:nodeid="sch2"> <rdf:first rdf:resource="http://example.org/students/mohamed"/> <rdf:rest rdf:nodeid="sch3"/> <rdf:description rdf:nodeid="sch3"> <rdf:first rdf:resource="http://example.org/students/johann"/> <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntaxns#nil"/> 153
7.10 Reifikaatio Joskus on tarpeen sanoa jotain itse lausumista, esim. kuka sanoi sen Reifikaatio (Reification) tarjoaa mahdollisuuden koodata lausumiin liitettäviä ominaisuuksia: esim. exproducts:item10245 exterms:weight "2.4"^^xsd:decimal. Voidaan nimetä seuraavasti: exproducts:triple12345 rdf:type rdf:statement. exproducts:triple12345 rdf:subject exproducts:item10245. exproducts:triple12345 rdf:predicate exterms:weight. exproducts:triple12345 rdf:object "2.4"^^xsd:decimal. Nyt voidaan sanoa esim. exproducts:triple12345 dc:creator exstaff:85740. Reifikaatio ei kuvaa viittaamansa lausuman sisältöä vaan vain viittaa siihen objektina 154
7.11 Oletusarvo rdf:value Toisinaan on hyödyllistä sanoa mikä tietorakenteen luetelluista arvoista on "tärkein" (vrt. rdf:alt ja oletusarvo). esim. exproduct:item10245 exterms:weight _:weight10245. _:weight10245 rdf:value "2.4"^^xsd:decimal. _:weight10245 exterms:units exunits:kilograms. RDF/XML vastaavasti (huomaa myös rdf:parsetype="resource" joka määrittelee implisiittisesti tyhjän solmun): <rdf:description rdf:about="http://www.example.com/2002/04/products#item10245"> <exterms:weight rdf:parsetype="resource"> <rdf:value rdf:datatype="&xsd;decimal">2.4</rdf:value> <exterms:units rdf:resource="http://www.example.org/units/kilograms"/> </exterms:weight> Aina tärkeintä (yhtä) arvoa ei toki ole (esim. osoitetiedot) 155
7.12 XML-literaalit Toisinaan literaaleihin on tarpeen kirjoittaa myös merkkausta - esim. merkkiviittauksia, matemaattista notaatiota tms. merkkausta <?xml version="1.0"?> <rdf:rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="http://www.example.com/books"> <rdf:description rdf:id="book12345"> <dc:title rdf:parsetype="literal"> <span xml:lang="en"> The <em><br /></em> Element Considered Harmful. </span> </dc:title> </rdf:rdf> Fragmenttiin liitetään RDF/XML-dokumentin nimiavaruuksien prefiksinimet (muttei esim. dokumentin omia xml:lang ja xml:base -tietoja) 156
7.13 RDF ja xml:lang Maailmassa on muitakin kieliä kuin englannin kieli, siispä (literaalien) kieli pitää voida merkitä dokumenttiin attribuutilla xml:lang: <rdf:description rdf:about="http://example.org/buecher/baum" xml:lang="de"> <dc:title>der Baum</dc:title> <dc:description>das Buch ist außergewöhnlich</dc:description> <dc:title xml:lang="en">the Tree</dc:title> Tämä mutkistaa RDF-graafin käsitettä hieman literaalien osalta (kielikoodia voidaan tosin ajatella vain erikoisella tavalla koodattuna ja periytyvänä datatyypin määrittelynä) Kielikoodi ei kuitenkaan periydy XML-literaalin sisään (vrt. edellinen sivu) N3:ssa (laajasti tulkittuna) kielikoodit merkitään "kielitagin" avulla ex:baum dc:title "The Tree"@en. 157
7.14 Lopuksi RDF on pohjimmiltaan melko yksinkertainen tietomalli, joka melko intuitiivisesti rakentaa semanttista yhteensopivuutta sovellusten välille RDF:stä voidaan löytää kaikenlaisia puutteita myös RDF/XML-formaatin pulmat ovat synnyttäneet kokonaisen runsaasti "vaihtoehtoisia" esitystapoja Perusidea on joka tapauksessa ok; omissa sovelluksissa kannattaa kuinkin miettiä kahteen kertaan haluaako todella... - käyttää reifikaatioita (siis oman suunnitteluratkaisun osana) - käyttää säiliöitä (ainakaan sellaisenaan) - käyttää tyhjiä solmuja monipaikkaisten relaatioiden esittämiseen, jne. Pieni on kaunista, tässäkin asiassa 158