(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 RDF (Resource Description Framework) egy keretrendszer a weben történõ információábrázolás céljára.
Ez a dokumentum egy XML szintaxist definiál az RDF számára az XML névterek, az XML Információhalmaz (XML Information Set) és az XML Bázis (XML Base) fogalmai alapján. Ezt a szintaxist RDF/XML-nek nevezzük. A szintaxis formális nyelvtanához olyan akciók vannak csatolva, amelyek az RDF gráfok tripletjeit generálják, ahogyan ezeket Az RDF alapfogalmai és absztrakt szintaxisa címû dokumentum definiálja. A tripleteket az N-Triples konvenció szerinti gráfsorosító formátumban írjuk, mely egy pontosabb, géppel feldolgozható leképezés rögzítését teszi lehetõvé. A leképezést teszt-esetek formájában adja meg a nyelvtan; ezeket Az RDF tesztsorozata címû dokumentum foglalja egybe.
A dokumentum státusaEzt 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 egyike annak a hat dokumentumnak (Bevezetés, Fogalmak, Szintaxis, Szemantika, Szókészlet és Tesztsorozat), amelyek együttesen felváltják az eredeti Resource Description Framework specifikációkat: az RDF Model and Syntax (1999 Recommendation) és az RDF Schema (2000 Candidate Recommendation) címû dokumentumokat. A jelen dokumentumot az RDF Core Working Group (RDF-mag Munkacsoport) dolgozta ki a W3C Szemantikus Web Munkaprogramja keretében, és 2004. február 10. dátummal publikálta. (Lásd a Munkaprogram-nyilatkozatot és a Munkacsoport alapszabályát).
Az Elõzetes Ajánlástervezet munkaanyag ó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 olvasóközönség észrevételeit a www-rdf-comments@w3.org (archive) címén; az idevágó technológiák általános vitáját pedig a www-rdf-interest@w3.org (archive) 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.
1 BevezetésEz a dokumentum az RDF gráfok XML szintaxisát definiálja, amelyet eredetileg az RDF Model & Syntax - [RDF-MS] W3C ajánlás definiált. E szintaxis egymást követõ implementációinak tapasztalatai, valamint az általuk kiadott RDF gráfok összehasonlításai azt mutatták, hogy némi inkonzisztencia van a rendszerben, és bizonyos szintaxisformákat nem is implementáltak elég széles körben a fejlesztõk.
A jelen a dokumentum revízió alá veszi az eredeti RDF/XML nyelvtant az XML Információhalmaz ([INFOSET]) információtételei szempontjából, és ebben eltávolodik az XML meglehetõsen alacsony szintû részleteitõl (mint pl. az üres elemek különbözõ formái). Ez lehetõvé teszi a nyelvtan pontosabb rögzítését, és az XML szintaxis RDF gráfokra történõ leképezésének világosabb bemutatását. Az RDF gráfokra történõ leképezés úgy történik, hogy az elemi kijelentéseket Az RDF Tesztsorozata [RDF-TESZTEK] címû dokumentum által definiált N-Triples notációban adja ki a nyelvtan, és így olyan gráfot állít elõ, amelynek szemantikája megfelel az [RDF-SZEMANTIKA] dokumentumban definiált szemantikának.
Az RDF teljes specifikációja az alábbi dokumentumokból áll:
Egy hosszabb bevezetést tartalmaz az RDF/XML-hez (történeti megvilágításban is) az RDF: Understanding the Striped RDF/XML Syntax [STRIPEDRDF] dokumentum.
2 Egy XML szintaxis az RDF számáraEz a fejezet egy bevezetés az RDF/XML szintaxisba, mely leírja, és példákon keresztül is illusztrálja, hogy hogyan történik az RDF gráfok kódolása. Ha bármilyen ütközés fordulna elõ ezen informális leírás és a 6. fejezet: A szintaxis adatmodell, vagy a 7. fejezet: RDF/XML Nyelvtan formális leírása között, akkor mindig ez utóbbiak az irányadók.
2.1 Bevezetés"Az RDF alapfogalmai és absztrakt szintaxisa" [RDF-FOGALMAK] dokumentum 3.1 szekciója definiálja az RDF gráf adatmodellt, a 6. fejezete pedig az RDF Gráf absztrakt szintaxisát. Ezek a részek "Az RDF szemantikája" [RDF-SZEMANTIKA] dokumentum anyagával együtt egy absztrakt szintaxist definiálnak, a hozzá tartozó formális szemantikával együtt. Az RDF gráf csomópontokból, és címkézett, irányított élekbõl áll, ahol az élek csomópont-párokat kötnek össze. Ezt a gráfot RDF tripletek halmazával ábrázoljuk, ahol minden tripletnek van egy alany-csomópontja, egy állítmánya és egy tárgy-csomópontja. A csomópontok RDF URI hivatkozások, RDF literálok vagy üres csomópontok lehetnek. Az üres csomópontoknak adhatunk egy, csak a dokumentumon belül érvényes, nem RDF URI hivatkozás jellegû, helyi nevet, amelyet ürescsomópont-azonosítónak hívunk. Az állítmányok mindig RDF URI hivatkozások, és felfoghatók két csomópont közötti viszonyként, vagy olyan tulajdonságok definícióiként, amelyek az alany-csomóponthoz egy tulajdonságértéket (tárgy-csomópontot) kapcsolnak.
Hogy XML-ben kódolhassuk a gráfot, a csomópontokat és az állítmányokat XML kifejezésekkel – elemnevekkel, attribútum-nevekkel, elemtartalommal és attribútum-értékekkel – kell ábrázolnunk. Az RDF/XML XML minõsített neveket (QNames) használ az URI hivatkozások ábrázolására, ahogyan azt a Namespaces in XML - [XML-NS] dokumentum definiálja. Minden minõsített név egy névtér-névbõl, és egy rövid helyi névbõl áll. A névtér-név, mely egy URI hivatkozás, helyettesíthetõ egy rövidített prefixszel is a minõsített névben, vagy akár el is hagyható, amennyiben deklarálunk számára egy alapértelmezett névtér-nevet (amelynek révén végül is lesz egy névtér-név a hivatkozásban).
A minõsített névvel ábrázolt RDF URI hivatkozás úgy jön létre, hogy a név helyi részét a névtér-név végéhez illesztjük. Az ilyen neveket az állítmányok, valamint néhány csomópont nevének a rövidítésére használjuk. Az alany- és tárgy-csomópontokat azonosító RDF URI hivatkozásokat XML attribútum-értékként is használhatjuk. Az RDF literálokat, amelyek csak tárgy-csomópontok lehetnek, vagy XML elemek szöveges tartalmaként, vagy XML attribútumok értékeként használhatjuk.
Egy gráf felfogható olyan útvonalak gyûjteményének is, amelyen váltakozva jelenik meg egy csomópont, majd egy állítmány-él, majd ismét egy csomópont, és így tovább, amíg le nem fedi a teljes gráfot. Az RDF/XML-ben ezek a komponensek egymásba ágyazódó elemek sorozataként, váltakozva, hol csomópontként, hol állítmány-élként jelennek meg, és ezért a gráfot leíró XML kódot csomópont-él "csíkok" sorozatának is tekinthetjük. A sorozat elején lévõ csomópont lesz a legkülsõ szülõ elem, a következõ állítmány-él a gyermek elem és így tovább. A csíkok sorozata általában az XML dokumentum elején indul, és mindig csomóponttal kezdõdik.
A következõ szekciókban több olyan RDF/XML példát is bemutatunk, amelyek komplett RDF/XML dokumentumot építenek fel (a 7. példa lesz az elsõ komplett RDF/XML dokumentum). Az 1. ábrán bemutatott gráf, történetesen, a jelen dokumentum (rdf-syntax-grammar) néhány tulajdonságát írja le: a dokumentum címét (title), a szerkesztõjét (editor), a szerkesztõ nevét (Name) és a szerkesztõ honlapját (homePage):
2.2 Csomópont-elemek és tulajdonságelemekAz 1. ábrán egy RDF gráfot adtunk meg, ahol a csomópontokat oválisok ábrázolják, amelyek saját RDF URI hivatkozásaikat tartalmazzák (már ahol vannak ilyenek); az állítmány-éleket szintén azok RDF URI hivatkozásaival címkézzük; a típus nélküli literálok csomópontjait pedig dobozok szimbolizálják, ezekben a literálok értékeit tüntetjük fel.
A 2. ábrán kövessük végig az egyik csomópont-él-csomópont... útvonalat:
A 2. ábra bal oldalán végigfutó gráf megfelel az alábbi csomópont/állítmány-él csíkozásnak:
http://www.w3.org/TR/rdf-syntax-grammar
http://example.org/terms/editor
http://example.org/terms/homePage
:
//purl.org/net/dajobe/
A 2. ábra bal oldalán látható 5 gráfkomponens az RDF/XML kódban megfelel öt, egymásba ágyazott XML elemnek, amelyek két típusa (gráf csomópont és állítmány-él) váltakozva fordul elõ. Ezeket konvencionálisan csomópont-elemeknek, illetve tulajdonságelemeknek nevezzük. Az 1. példában látható csíkozásában az rdf:Description
a csomópont-elem (amelyet három alkalommal használtunk a három csomópontnak megfelelõen), az ex:editor
és az ex:homePage
pedig a két tulajdonságelem.
<rdf:Description>
<ex:editor>
<rdf:Description>
<ex:homePage>
<rdf:Description>
</rdf:Description>
</ex:homePage>
</rdf:Description>
</ex:editor>
</rdf:Description>
A 2. ábrán látható gráfban két olyan csomópont van, amelyek RDF URI hivatkozások. Ezeket a hivatkozásokat RDF/XML-ben az rdf:about
attribútum segítségével rendeljük a csomópont-elemekhez, s így a 2. példában látható eredményt kapjuk:
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage> <rdf:Description rdf:about="http://purl.org/net/dajobe/"> </rdf:Description> </ex:homePage> </rdf:Description> </ex:editor> </rdf:Description>
Ha az 1. ábrán látható gráf másik két útvonalát hozzáadnánk a 2. példában szereplõ RDF/XML kódhoz, akkor ez a 3. példa által bemutatott ábrázolást eredményezné. (Az ex:fullName
tulajdonság jelentése: "teljes neve". Ezen a példán most nem ábrázoltuk, hogy az üres csomópont közös a két útvonal számára – lásd a 2.10-nél):
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage> <rdf:Description rdf:about="http://purl.org/net/dajobe/"> </rdf:Description> </ex:homePage> </rdf:Description> </ex:editor> </rdf:Description> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:fullName>Dave Beckett</ex:fullName> </rdf:Description> </ex:editor> </rdf:Description> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <dc:title>RDF/XML Syntax Specification (Revised)</dc:title> </rdf:Description>2.3 Többszörös tulajdonságelemek
Több olyan rövidítési lehetõség van, amellyel megkönnyíthetjük a leggyakrabban elõforduló RDF/XML szerkezetek leírását. Különösen gyakori például, hogy az RDF gráfban az alany-csomópontból több állítmány-él fut ki. Ilyen esetekben, vagyis ahol egy erõforrás-elemnek több tulajdonságeleme van, az RDF/XML egy rövidítési lehetõséget biztosít a szintaxis leírásánál. Ennek lényege, hogy az alany-csomópontot leíró szülõ-elembe több gyermek-elemet építhetünk be.
Vegyük a 3. példát: itt két csomópont-elem van, mely több tulajdonságelemet kaphat. A http://www.w3.org/TR/rdf-syntax-grammar
URI hivatkozással azonosított alany-csomópont tulajdonságelemei az ex:editor
és az ex:title
, az üres csomópont-elem tulajdonságelemei pedig az ex:homePage
és az ex:fullName
. Ennek a rövidítésnek az eredményét a 4. példa mutatja (szemben a 3. példával, itt most már az is látható, hogy csak egyetlen üres csomópont van):
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage> <rdf:Description rdf:about="http://purl.org/net/dajobe/"> </rdf:Description> </ex:homePage> <ex:fullName>Dave Beckett</ex:fullName> </rdf:Description> </ex:editor> <dc:title>RDF/XML Syntax Specification (Revised)</dc:title> </rdf:Description>2.4 Üres tulajdonságelemek
Amikor egy RDF gráfban egy állítmány-él olyan tárgy-csomópontra mutat, amelynek nincsenek további állítmány-élei, és amely úgy jelenik meg RDF/XML-ben mint egy üres csomópont-elem:
(<rdf:Description rdf:about="...">
</rdf:Description>
, vagy <rdf:Description rdf:about="..." />
), akkor ez a szerkezet lerövidíthetõ. A rövidítés úgy történik, hogy az üres tárgyleíró (rdf:Description) elemet kihagyjuk a tulajdonságelembõl, és helyette egy rdf:resource
XML attribútumot adunk neki, amelynek értéke a végzõdõ tárgy-csomópont RDF URI hivatkozása lesz.
A 4. példában még az ex:homePage
tulajdonságelem egy üres csomópont-elemet tartalmazott, amelyet egy rdf:Description
elem írt le, és amelynek az RDF URI hivatkozása http://purl.org/net/dajobe/
volt. Ez a szerkezet helyettesíthetõ egyetlen üres tulajdonságelemmel, és így az 5. ábrán látható RDF/XML kódhoz jutunk (itt az ex:fullName
tulajdonság jelentése: "teljes neve"):
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage rdf:resource="http://purl.org/net/dajobe/"/> <ex:fullName>Dave Beckett</ex:fullName> </rdf:Description> </ex:editor> <dc:title>RDF/XML Syntax Specification (Revised)</dc:title> </rdf:Description>2.5 Tulajdonság-attribútumok
Amikor egy tulajdonságelem tartalma egy karakterlánc típusú literál, akkor ezt XML attribútumként is megadhatjuk a tulajdonságelemet tartalmazó csomópont-elemben. Ezt megtehetjük több olyan tulajdonsággal is, amelyik ugyanarra a csomópont-elemre vonatkozik, feltéve, hogy a tulajdonságelem-nevek nem ismétlõdnek (ezt az XML követeli meg, ugyanis az ilyen neveknek egy adott elemen belül egyedieknek kell lenniük), és feltéve, hogy a tulajdonságelemek karakterlánc literáljának minden szkópban lévõ xml:lang
attribútuma (ha van ilyen) azonos nyelvet nevez meg (lásd a 2.7 szekcióban). Ezt a rövidítést tulajdonság-attribútumnak (property attribute) nevezzük, és minden csomópont-elemben használható.
Ez a rövidítési forma akkor is használható, ha a tulajdonságelem rdf:type
, és van egy olyan rdf:resource
attribútuma, amelynek értéke egy RDF URI hivatkozás típusú tárgy-csomópont.
Az 5. példában két tulajdonságelem (a dc:title
és az ex:fullName
) rendelkezik karakterlánc literál tartalommal. Ezeket helyettesíthetjük tulajdonság-attribútumokkal, és így a 6. példában szereplõ kódot kapjuk eredményül:
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF/XML Syntax Specification (Revised)"> <ex:editor> <rdf:Description ex:fullName="Dave Beckett"> <ex:homePage rdf:resource="http://purl.org/net/dajobe/"/> </rdf:Description> </ex:editor> </rdf:Description>2.6 Teljes dokumentumok létrehozása: Az
rdf:RDF
elem és az XML deklaráció
Hogy egy teljes RDF/XML dokumentumot alakíthassunk ki, a gráf XML-lé történõ átalakítását (sorosítását vagy szerializációját) általában az rdf:RDF
nevû XML elemen belül írjuk le, mely a legkülsõ szintû eleme lesz a dokumentumnak. Konvenció szerint, az rdf:RDF
elemet az alkalmazott XML névterek deklarálására is felhasználjuk, habár ez nem kötelezõ. Ha csak egyetlen csúcs szintû elem lenne az rdf:RDF
elemen belül, akkor az rdf:RDF
elem elhagyható, ám az XML névtereket ilyenkor is deklarálnunk kell.
Az XML specifikáció megenged egy XML deklarációt is a dokumentum legelején, mely jelezheti az XML verzióját, és esetleg az XML tartalom kódolását. Ez egy opcionális, de ajánlott elem.
Az RDF/XML kód teljes dokumentummá történõ kiegészítése elvégezhetõ bármelyik korrekt és komplett gráfpéldánál, a 4. példától felfelé. Ha vesszük a legrövidebbet, a 6. példát, és megadjuk hozzá a befejezõ komponenseket, akkor az eredeti 1. ábra teljes RDF/XML változatát kapjuk eredményül, ahogyan a 7. példa mutatja:
<?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/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF/XML Syntax Specification (Revised)"> <ex:editor> <rdf:Description ex:fullName="Dave Beckett"> <ex:homePage rdf:resource="http://purl.org/net/dajobe/" /> </rdf:Description> </ex:editor> </rdf:Description> </rdf:RDF>
A 7. példában nyugodtan kihagyhattuk volna az rdf:RDF
elemet, minthogy csupán egyetlen legkülsõ szintû rdf:Description
elem van az rdf:RDF
tegpárok között, de ezt itt most nem kívántuk illusztrálni.
xml:lang
Az RDF/XML megengedi az xml:lang
nyelv-azonosító attribútum használatát, ahogyan azt az XML 1.0 ([XML]) dokumentum 2.12 Language Identification szekciója definiálja, annak érdekében hogy azonosítani tudjuk az XML tartalom nyelvét. Az xml:lang
attribútum használható bármelyik csomópont-elemben vagy tulajdonságelemben annak megjelölésére, hogy a benne foglalt tartalom nyelve az attribútummal megadott nyelv. Azokat a tipizált literálokat, amelyek XML-literálokat tartalmaznak, nem érinti ez az attribútum. A legspecifikusabb, szkópban lévõ nyelvet (ha van ilyen megadva), a tulajdonságelemek karakterlánc típusú literáljaira, vagy tulajdonság-attribútumainak értékére alkalmazzuk. Az xml:lang=""
forma jelzi, ha az adott szkópban lévõ tartalomra nincs megadva nyelv-azonosító.
Az RDF tulajdonságok tartalomleíró nyelvének megjelölését mutatja be a 8. példa:
<?xml version="1.0" encoding="utf-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <dc:title>RDF/XML Syntax Specification (Revised)</dc:title> <dc:title xml:lang="en">RDF/XML Syntax Specification (Revised)</dc:title> <dc:title xml:lang="en-US">RDF/XML Syntax Specification (Revised)</dc:title> </rdf:Description> <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> </rdf:Description> </rdf:RDF>2.8 XML-literálok:
rdf:parseType="Literal"
Az RDF lehetõvé teszi XML-literálok megadását állítmányok tárgy-csomópontjaként. (Lásd: [RDF-FOGALMAK] - XML-literálok 5.1: XML tartalom az RDF gráfon belül). Ezeket úgy adjuk meg RDF/XML-ben, mint a tulajdonságelem tartalmát (tehát nem, mint egy tulajdonság-attribútum értékét), és egy rdf:parseType="Literal"
attribútummal jelöljük meg az XML tartalmat befogadó tulajdonságelemben.
Egy XML-literál írását mutatja be a 9. példa, ahol egyetlen triplet van megadva egy alany-csomóponttal (RDF URI hivatkozása: http://example.org/item01
), egy állítmánnyal (RDF URI hivatkozása: http://example.org/stuff/1.0/prop
– az ex:prop
névbõl generálva), valamint egy tárgy-csomóponttal, amelyben az XML-literál tartalma az a:Box
tegpárok között helyezkedik el:
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://example.org/item01"> <ex:prop rdf:parseType="Literal" xmlns:a="http://example.org/a#"><a:Box required="true"> <a:widget size="10" /> <a:grommit id="23" /></a:Box> </ex:prop> </rdf:Description> </rdf:RDF>2.9 Tipizált literálok:
rdf:datatype
Az RDF lehetõvé teszi tipizált literálok megadását is állítmányok tárgy-csomópontjaként. A tipizált literál egy literál karakterláncból és egy adattípusra mutató RDF URI hivatkozásból áll. Ezt RDF/XML-ben ugyanazzal a szintaxissal adjuk meg, mint a literálkarakterlánc-csomópontot a tulajdonságelemen belül (tehát nem egy tulajdonság-attribútumban), de kibõvítve még egy rdf:datatype="
datatypeURI"
attribútummal is, ahol bármilyen RDF URI hivatkozás állhat az idézõjelek között.
Egy RDF tipizált literál írását mutatjuk be a 10. ábrán, ahol egyetlen triplet szerepel egy alany-csomópont elemmel (RDF URI hivatkozása: http://example.org/item01
), egy állítmánnyal (RDF UR hivatkozása: http://example.org/stuff/1.0/size
– az ex:size
névbõl generálva), valamint egy tárgy-csomóponttal, mely egy tipizált literált tartalmaz ("123", http://www.w3.org/2001/XMLSchema#int
), és amelyet egész szám (int) adattípusnak kell értelmezni a W3C XML Schema - [XML-SCHEMA2] specifikáció szerint.
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://example.org/item01"> <ex:size rdf:datatype="http://www.w3.org/2001/XMLSchema#int">123</ex:size> </rdf:Description> </rdf:RDF>2.10 Üres csomópontok azonosítása:
rdf:nodeID
Az RDF gráfokban az üres csomópontok megkülönböztethetõk a többi csomóponttól, bár nem RDF URI hivatkozással azonosítjuk õket. Néha szükséges, hogy a gráfnak ugyanarra az üres csomópontjára az RDF/XML kód több helyérõl is hivatkozhassunk (pl., amikor ez a csomópont több RDF tripletnek is alanya vagy tárgya). Ilyenkor egy ún. ürescsomópont-azonosítót adhatunk az üres csomópontnak, hogy egyértelmûen azonosíthassuk a dokumentumon belül. Ezeknek az azonosítóknak tehát csak az õket tartalmazó XML információhalmaz (XML infoset) dokumentum információtételén (document information item) belül kell egyedieknek lenniük. Az ürescsomópont-azonosítót egy csomópont-elemben az rdf:about="
RDF URI hivatkozás"
attribútum helyettesítésére, egy tulajdonság-elemen belül pedig az rdf:resource="
RDF URI hivatkozás"
attribútum helyettesítésére használjuk, és mindkét esetben az rdf:nodeID="
ürescsomópont-azonosító"
attribútummal váltjuk fel õket.
Ha vesszük a 7. példát, és a benne szereplõ üres csomópontnak explicit módon, "abc"
néven, adunk egy ürescsomópont-azonosítót, akkor a 11. példában látható kódot kapjuk (a második rdf:Description
elem írja le az üres csomópontot):
<?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/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF/XML Syntax Specification (Revised)"> <ex:editor rdf:nodeID="abc"/> </rdf:Description> <rdf:Description rdf:nodeID="abc" ex:fullName="Dave Beckett"> <ex:homePage rdf:resource="http://purl.org/net/dajobe/"/> </rdf:Description> </rdf:RDF>2.11 Az üres csomópontok kihagyása:
rdf:parseType="Resource"
Az RDF gráfokban az üres csomópontokat (de nem az RDF URI hivatkozásokkal azonosított csomópontokat) írhatjuk olyan formában is, mely lehetõvé teszi az <rdf:Description>
</rdf:Description>
pár kihagyását. Ez úgy történik, hogy egy rdf:parseType="Resource"
attribútumot adunk meg az üres csomópontot tartalmazó tulajdonságelemben, és ezáltal azt egy tulajdonság-és-csomópont elemmé változtatjuk (amely maga is rendelkezhet mind tulajdonságelemekkel, mind tulajdonság-attribútumokkal). Tulajdonság-attribútumok és az rdf:nodeID
nincs engedélyezve a tulajdonság-és-csomópont elemekre.
Ismét a 7. példából kiindulva, az ex:editor
tulajdonságelem is írható ilyen alternatív módon, hogy végül a 12. példában szereplõ megoldást kapjuk:
<?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/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF/XML Syntax Specification (Revised)"> <ex:editor rdf:parseType="Resource"> <ex:fullName>Dave Beckett</ex:fullName> <ex:homePage rdf:resource="http://purl.org/net/dajobe/"/> </ex:editor> </rdf:Description> </rdf:RDF>2.12 Csomópontok kihagyása: tulajdonságattribumok egy üres tulajdonságelemre
Ha egy üres csomópont-elemben megadott összes tulajdonságelemnek karakterlánc típusú literális értéke van, ugyanazzal az xml:lang
értékkel (ha meg van adva egy ilyen az adott szkópban), és ha minden ilyen tulajdonságelem csak egyszer fordul elõ, továbbá ha legfeljebb egy rdf:type
tulajdonságelem szerepel benne egy RDF URI hivatkozás típusú tárgy-csomóponttal mint értékkel, akkor ezek lerövidíthetõk oly módon, hogy tulajdonság-attribútumokká alakítjuk õket a befogadó tulajdonságelemben, amelyet ezután üres elemmé alakítunk.
Térjünk vissza az 5. példához, ahol az ex:editor
elem egy üres csomópont-elemet tartalmaz két tulajdonságelemmel: ex:fullname
és ex:homePage
. (Az ex:homePage
nem alkalmas az ilyen rövidítésre, mivel nincs karakterlánc-literál típusú értéke, ezt tehát figyelmen kívül hagyjuk a jelenlegi példánk szempontjából.) A rövidített forma eléréséhez eltávolítjuk az ex:fullName
tulajdonságelemet, és egy új ex:fullName
tulajdonság-attribútumot adunk meg az ex:editor
tulajdonságnak, egy olyan karakterlánc értékkel, mely az imént törölt tulajdonságelem értéke volt. Az üres csomópont-elem így implicitté válik a most már üres ex:editor
tulajdonságelemben. Az eredményt a 13. ábra mutatja:
<?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/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF/XML Syntax Specification (Revised)"> <ex:editor ex:fullName="Dave Beckett" /> <!-- Note the ex:homePage property has been ignored for this example --> </rdf:Description> </rdf:RDF>2.13 Tipizált csomópont-elemek: az
rdf:type
kiváltása
Nagyon gyakori az RDF gráfokban, hogy alany-csomópontokra rdf:type
állítmányt adunk meg. Konvenció szerint, az ilyen csomópontokat a gráfban tipizált csomópontoknak, az RDF/XML-ben pedig tipizált csomópont-elemeknek hívjuk. Az RDF/XML lehetõvé teszi, hogy az ilyen tripleteket tömörebben fogalmazhassuk meg, oly módon, hogy az rdf:Description
csomópont-elem nevét helyettesítjük azzal a minõsített névvel, mely a "típusa" (type) viszony értékét jelentõ RDF URI hivatkozással azonos. Természetesen, lehet egy alanynak több rdf:type
állítmánya, de ezek közül csak egy rövidíthetõ ezzel a módszerrel, a többi pedig változatlanul megmarad tulajdonságelemként vagy tulajdonság-attribútumként a tipizált csomópont-elemben.
A tipizált csomópont-elemeket gyakran használjuk RDF/XML-ben az RDF szókészlet ilyen beépített osztályaival kapcsolatban, mint: rdf:Seq
, rdf:Bag
, rdf:Alt
, rdf:Statement
, rdf:Property
és rdf:List
.
Példaképpen bemutatjuk, hogy miként rövidíthetjük le RDF/XML-ben a 14. példa kódját tipizált csomópont-elem alkalmazásával. Az eredményt a 15. példa mutatja:
<?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/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://example.org/thing"> <rdf:type rdf:resource="http://example.org/stuff/1.0/Document"/> <dc:title>A marvelous thing</dc:title> </rdf:Description> </rdf:RDF>
<?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/" xmlns:ex="http://example.org/stuff/1.0/"> <ex:Document rdf:about="http://example.org/thing"> <dc:title>A marvelous thing</dc:title> </ex:Document> </rdf:RDF>2.14 URI hivatkozások rövidítése:
rdf:ID
és xml:base
Az RDF/XML lehetõvé teszi az XML attribútumokban megadott RDF URI hivatkozások további rövidítését, mégpedig kétféle módon. Az XML információhalmaza (XML Infoset) tartalmazza az xml:base
attribútumot, mely deklarálja a dokumentum bázis-URI-jét, amelyet az XML a relatív RDF URI hivatkozások abszolúttá alakítására használ. (Ha ez az attribútum nincs explicit módon megadva, akkor az implicit bázis-URI mindig az aktuális dokumentum URI-je lesz). A bázis URI minden olyan RDF/XML attribútumra érvényes, amelyben RDF URI hivatkozásokat adhatunk meg; ezek a következõk: rdf:about
, rdf:resource
, rdf:ID
és rdf:datatype
.
Az rdf:ID
attribútum az rdf:about
attribútum helyett használható egy csomóponti elemben (sohasem egy tulajdonságelemben, amelynek egészen más a jelentése), és arra szolgál, hogy megadjon egy relatív RDF URI hivatkozást, ami azonos egy '#' karakter és az rdf:ID
attribútum értékének az egybetoldásával. Így például, ha azt írjuk, hogy rdf:ID="name"
, akkor az megfelel az rdf:about="#name"
hivatkozásnak. Emellett az rdf:ID
egy ellenõrzést is végez, annak megakadályozására, hogy egynél többször deklaráljuk ugyanazt a relatív nevet ugyanazon a xml:base
látókörön (szkópon) belül (vagy, ha nincs explicit bázis megadva, akkor ugyanazon az aktuális dokumentumon belül). Ez tehát egy hasznos segédeszköz arra, hogy egymással összefüggõ, de mégis megkülönböztethetõ helyi relatív neveket használhassunk ugyanahhoz a bázis RDF URI hivatkozáshoz képest.
Amint láthattuk, mindkét hivatkozás rövidítõ forma arra épül, hogy adva van egy bázis URI, akár egy szkópban lévõ xml:base
deklaráció révén, akár az aktuális dokumentum implicit bázis-URI-je formájában.
A 16. példa bemutatja, hogy miként rövidítjük az rdf:Description
elemben a http://example.org/here/#snack
csomópont abszolút RDF URI hivatkozását a http://example.org/here/
bázis URI mint xml:base
, valamint egy rdf:ID
attribútum segítségével. Az ex:prop
állítmány tárgy-csomópontja is egy rövidített RDF URI hivatkozás, amely az rdf:resource
attribútum értéke, valamint az adott xml:base
értéke alapján a http://example.org/here/fruit/apple
abszolút RDF URI hivatkozásnak felel meg.
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/stuff/1.0/" xml:base="http://example.org/here/"> <rdf:Description rdf:ID="snack"> <ex:prop rdf:resource="fruit/apple"/> </rdf:Description> </rdf:RDF>2.15 Konténertagság-tulajdonságok:
rdf:li
és rdf:_
n
Az RDF definiál egy sor konténertagság-tulajdonságot, és az ezeknek megfelelõ tulajdonságelemeket, amelyeket leginkább ilyen konténerosztályok tagjainak a megadására használunk, mint rdf:Seq
, rdf:Bag
és rdf:Alt
(Sorozat, Zsák és Alternatíva-csoport). Az ilyen konténerosztályokat tipizált csomópont-elemként is kódolhatjuk RDF/XML-ben. A konténertagság-tulajdonságokat (rdf:_1
, rdf:_2
stb.) tulajdonságelemekként és tulajdonság-attribútumokként egyaránt írhatjuk, ahogy a 17. ábrán látható. Létezik egy rdf:li
nevû speciális tulajdonságelem is, mely ekvivalens az rdf:_1
, rdf:_2
... tulajdonságokkal; ezt a 7.4 szekció ismerteti részletesebben. Az rdf:li
listaelem-tulajdonságoknak a megfelelõ konténertagság-tulajdonságokra történõ leképezése abban a sorrendben történik, amely sorrendben az rdf:li
elemek megjelennek az XML kódban – itt a dokumentumok sorrendje is szignifikáns. A 17. példának megfelelõ RDF/XML kód, amelyet ilyen formában írtunk meg, a 18. példában látható.
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Seq rdf:about="http://example.org/favourite-fruit"> <rdf:_1 rdf:resource="http://example.org/banana"/> <rdf:_2 rdf:resource="http://example.org/apple"/> <rdf:_3 rdf:resource="http://example.org/pear"/> </rdf:Seq> </rdf:RDF>
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Seq rdf:about="http://example.org/favourite-fruit"> <rdf:li rdf:resource="http://example.org/banana"/> <rdf:li rdf:resource="http://example.org/apple"/> <rdf:li rdf:resource="http://example.org/pear"/> </rdf:Seq> </rdf:RDF>2.16 Kollekciók:
rdf:parseType="Collection"
Az RDF/XML lehetõvé teszi, hogy egy rdf:parseType="Collection"
attribútum segítségével több csomópont-elemet építhessünk be egy tulajdonságelembe. Ezek a beépített csomópont-elemek a kollekció alany-csomópontjainak gyûjteményét alkotják. Ez a szintaxisforma megfelel a tripletek egy olyan halmazának, amely alany-csomópontok kollekcióját kapcsolja össze. Hogy pontosan milyenek azok a tripletek, amelyeket ez a szintaxis generál, azt részletesen a 7.2.19 Produkció: parseTypeCollectionPropertyElt szekció írja le. A kollekció felépítése abban a sorrendben történik, ahogy a csomópont-elemek megjelennek az XML dokumentumban. Az a kérdés, azonban, hogy ez a sorrend szignifikáns-e a feldolgozás szempontjából, kizárólag az alkalmazásoktól függ, ezt tehát itt nem tárgyaljuk.
A 19. ábra leír egy kosarat (basket), amelyben háromféle gyümölcs van: banán, alma és körte (banana, apple, pear). A kosár tartalmát három csomópont-elem kollekciójával ábrázolja a "gyümölcs tartalma" (ex:hasFruit
) tulajdonságelemen belül, a fentebb ismertetett módszerrel.
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://example.org/basket"> <ex:hasFruit rdf:parseType="Collection"> <rdf:Description rdf:about="http://example.org/banana"/> <rdf:Description rdf:about="http://example.org/apple"/> <rdf:Description rdf:about="http://example.org/pear"/> </ex:hasFruit> </rdf:Description> </rdf:RDF>2.17 RDF kijelentések tárgyiasítása:
rdf:ID
Az rdf:ID
attribútumot használhatjuk egy tulajdonságelemben annak a tripletnek a tárgyiasítására/megtestesítésére (reification), amelyet generál (a részleteket lásd a 7.3 Tárgyiasítási szabályok szekcióban). A triplet tényleges azonosítója egy abszolút RDF URI hivatkozás, amelyet egy – szkópban lévõ bázis-URI-hez viszonyított – olyan relatív URI hivatkozásból állítunk elõ, mely egy '#' karakterbõl és az rdf:ID
értékébõl áll. Így pl. egy rdf:ID="triple"
azonosítás egyenértékû egy olyan RDF URI hivatkozással, amelyet a bázis-URI-hez viszonyított #triple
név reprezentál. Minden olyan azonosítópárnak, mely egy rdf:ID
attribútum értékébõl és egy bázis-URI-bõl áll, egyedinek kell lennie egy RDF/XML dokumentumon belül (lásd: constraint-id).
A 20. példában egy rdf:ID
attribútum szerepel, amelyet egy olyan triplet tárgyiasítására használunk, amelyet az ex:prop
tulajdonságelembõl állítunk elõ úgy, hogy a tárgyiasított tripletre történõ RDF URI hivatkozás végeredményben a http://example.org/triples/#triple1
lesz. [A példa által generált triplet és a "tárgyiasító négyes" tripletjei megtekinthetõk az example20.nt weboldalon – a ford.]
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/stuff/1.0/" xml:base="http://example.org/triples/"> <rdf:Description rdf:about="http://example.org/"> <ex:prop rdf:ID="triple1">blah</ex:prop> </rdf:Description> </rdf:RDF>3 Terminológia
A "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" és "OPTIONAL" kulcsszavakat ebben a dokumentumban úgy kell értelmezni, ahogyan azt az RFC 2119 [KEYWORDS] szabvány definiálja. [Az ilyen kifejezéseket tartalmazó dokumentumrészek magyar fordításában (zárójelben) megadjuk ezeket a szabványosított jelentésû angol szavakat, hogy formálisan is fennmaradjon a kompatibilitás ezzel az RFC-vel – a ford.]
Minden karakterlánc, amelyhez nem adunk külön minõsítést, mindig [UNICODE] karakterláncot jelent; azaz olyan karakterek sorozatát, amelyeket egy Unicode kódponttal ábrázolunk. (Lásd a [CHARMOD] dokumentum 3.4 Strings szekciójánál.)
4 RDF MIME típus, fájl-kiterjesztés és Macintosh fájl-típusAz Internet media típus / MIME típus az RDF/XML esetén az "application/rdf+xml
" – lásd a RFC 3023 [RFC-3023] szabvány 8.18. szekciójában.
Regisztrációs megjegyzés (Informatív): A MIME típus regisztráció állapotával kapcsolatban az IANA MIME Media Types [IANA-MEDIA-TYPES] webhelyhez célszerû fordulni.
Ajánlott, hogy az RDF/XML fájlok a ".rdf"
(csupa kisbetûs) kiterjesztést kapják minden platformon.
Ajánlott, hogy azok az RDF/XML fájlok, amelyeket a Macintosh HFS fájlrendszerben tárolnak, az "rdf "
fájltípus nevet kapják (csupa kisbetûvel, és szóköz karakterrel a negyedik karakterpozícióban).
Megjegyzés (Informatív): Az aboutEach
és aboutEachPrefix
neveket az RDF-mag Munkacsoport eltávolította a nyelvbõl és az RDF szókészletbõl. Lásd ezeknek a problémáknak a lezárását az RDF témakövetõ dokumentáció rdfms-abouteach és rdfms-abouteachprefix pontjában.
Megjegyzés (Informatív): A List
, first
, rest
és nil
neveket felvették a szókészletbe az rdfms-seq-representation kérdés megoldása kapcsán. Az XMLLiteral
és datatype
kifejezések is a szókészletbe kerültek az RDF adattípusainak támogatására. Ugyancsak a szókészlet részévé vált a nodeID
név az rdfms-syntax-incomplete kérdés megoldása érdekében. (Lásd az RDF-maggal kapcsolatos nyitott kérdések listáját (RDF Core Issues List).
Az RDF névtér URI hivatkozás (vagy névtér-név): http://www.w3.org/1999/02/22-rdf-syntax-ns#
, amelyet XML-ben tipikusan az rdf
prefixszel helyettesítünk, bár erre a célra bármilyen más prefixet is használhatnánk. Az RDF szókészletet ezzel a névtér-névvel azonosítjuk. A szókészlet csupán az alábbi kifejezésekbõl áll:
RDF Description ID about parseType resource li nodeID datatype
Seq Bag Alt Statement Property XMLLiteral List
subject predicate object type value first rest _
n ,
ahol n egy nullánál nagyobb decimális egész szám, vezetõ nullák nélkül írva.
nil
További nevek nincsenek definiálva, tehát ha ilyenek elõfordulnának, egy figyelmeztetést kellene (SHOULD) kiadnia a szoftvernek, de egyébként normálisan kellene folytatnia a feldolgozást.
Az RDF/XML dokumentumokon belül nem megengedett olyan XML névterek használata, amelyeknek a névtér-neve egy olyan `RDF névtér URI hivatkozás`, amelyhez további karakterek is fûzõdnek. [Az ebben a mondatban szereplõ, speciálisan idézõjelezett `RDF névtér URI hivatkozás` egy hiperlink a kifejezés magyarázatát adó szövegrészre. A továbbiakban is találkozunk ilyen hiperlinkekkel – a ford.]
Ezen a dokumentumon végig, az rdf:
név formájú kifejezést használjuk annak jelölésére, hogy a név az RDF szókészletbõl való, és annak URI hivatkozása az `RDF névtér URI hivatkozás` és a név egybetoldásából keletkezik. Például az rdf:type
teljes URI hivatkozása http://www.w3.org/1999/02/22-rdf-syntax-ns#type
Az RDF Gráf (lásd Az RDF alapfogalmai és absztrakt szintaxisa 3. fejezetében) háromféle csomópontot és egyféle állítmányt definiál:
Egy RDF URI hivatkozás (lásd Az RDF alapfogalmai és absztrakt szintaxisa 3.1 szekciójában) a következõ formákban adható meg:
rdf:ID
attribútum értékeként.Az RDF/XML-en belül a minõsített neveket (QNames) oly módon transzformáljuk RDF URI hivatkozásokká, hogy az XML lokális nevet a névtér-névhez (URI hivatkozáshoz) illesztjük. Például, ha a foo
XML névtér-prefixhez tartozó névtér-név (URI hivatkozás) http://example.org/somewhere
, akkor a foo:bar
minõsített név a http://example.org/somewhere/bar
RDF URI hivatkozásnak felelne meg. Megjegyzendõ, hogy ez korlátozza, hogy milyen RDF URI hivatkozások állíthatók elõ, valamint hogy ugyanaz az URI többféleképpen is elõállítható.
Az rdf:ID
értéket úgy transzformáljuk RDF URI hivatkozásokká, hogy az attribútum értékét egy "#" karakterrel elválasztva a szkópban lévõ bázis-URI-hez illesztjük, ahogyan azt az 5.3 URI-k létrehozása szekció leírja.
Az RDF literálok (lásd Az RDF alapfogalmai és absztrakt szintaxisa 6.5 szekciójában) lehetnek típus nélküli literálok (lásd uo.) vagy tipizált literálok (lásd uo.). Az utóbbiakba beleértendõk az XML literálok (lásd uo. az 5. XML tartalom az RDF gráfon belül címû fejezetben.)
Az üres csomópontoknak megkülönböztetett identitásuk van az RDF gráfban. Amikor a gráfot egy szintaxissal írjuk le (pl. RDF/XML-ben), akkor ezeknek az üres csomópontoknak szükségük van gráfon belüli azonosítókra, és egy olyan szintaxisra, mely megõrzi ezt a megkülönböztetést. Ezeket a helyi azonosítókat ürescsomópont-azonosítóknak nevezzük, és az RDF/XML-ben az rdf:nodeID
attribútum értékeként használjuk egy olyan szintaxissal, amelyet a Produkció: nodeIdAttr definiál. Az ürescsomópont-azonosítókat az RDF/XML az XML Információhalmaz dokumentum-információtételének szkópjába utalja.
Ha ürescsomópont-azonosítót nem adunk meg explicit módon egy rdf:nodeID
attribútum értékeként, akkor azt elõ kell állítani (a 6.3.3 szekció táblázatában lévõ generated-blank-node-id() sor definíciója szerint.) Az ilyen "generált ürescsomópont-azonosítók" nem ütközhetnek az rdf:nodeID
attribútumok értékeibõl származtatott egyetlen ilyen azonosítóval sem. Ez implementálható bármilyen módszerrel, amely fenntartja az összes üres csomópont egyedi identitását a gráfon belül, vagyis, ha sohasem adja ugyanazt az ürescsomópont-azonosítót két vagy több különbözõ üres csomópontnak. Az egyik lehetséges módszer az, hogy egy konstans prefixet adunk minden rdf:nodeID
attribútum értékéhez, és biztosítjuk, hogy a generált ürescsomópont-azonosítók egyike sem használja ezt a prefixet. A másik módszer az lehetne, ha minden rdf:nodeID
attribútum értékét leképeznénk egy-egy új, generált ürescsomópont-azonosítóvá, és ezt a leképezést végrehajtanánk minden ilyen értékre az adott RDF/XML dokumentumban.
Az RDF/XML támogatja az XML Base [XML-BASE] elõírást, mely egy `base-uri` akcesszort definiál minden egyes `root eseményhez` és `elem eseményhez`. A relatív URI hivatkozásokat RDF URI hivatkozásokká kell konvertálni az XML Base [XML-BASE] (és RFC 2396) által specifikált algoritmus szerint. Ezek a specifikációk azonban nem specifikálnak algoritmust külön az erõforrásrész-azonosítók (mint pl. a #foo
vagy az üres karakterlánc ""
) RDF URI hivatkozássá konvertálására. Az RDF/XML-ben egy erõforrásrész-azonosítót úgy konvertálunk RDF URI hivatkozássá, hogy az erõforrásrész-azonosítót a szkópban lévõ bázis-URI végéhez illesztjük. Az üres karakterláncot úgy konvertáljuk RDF URI hivatkozássá, hogy behelyettesítjük azt a szkópban lévõ bázis-URI-vel. Ezeknek az eseteknek a teszteléséhez az alábbi teszt-fájlok állnak rendelkezésre:
Teszt: jelölése: test001.rdf és test001.nt
Teszt: jelölése: test004.rdf és test004.nt
Teszt: jelölése: test008.rdf és test008.nt
Teszt: jelölése: test013.rdf és test013.nt
Teszt: jelölése: test016.rdf és test016.nt
Egy üres saját dokumentumra hivatkozást ("") a bázis-URI URI részével helyettesítjük; az erõforrásrész-azonosító részt figyelmen kívül hagyjuk). Lásd az Uniform Resource Identifiers (URI) [URIS] 4.2 szekciójában.
Teszt: jelölése: test013.rdf és test013.nt
Implementációs megjegyzés (Informatív): Amikor egy hierarchikus bázis-URI-t használunk, amelynek nincs útvonal komponense (/), akkor azt hozzá kell adni, mielõtt a bázis-URI-t felhasználnánk a konverzióhoz.
Teszt: jelölése: test011.rdf és test011.nt
5.4 KorlátozásokA nevek szintaxisának meg kell egyeznie az rdf-id produkcióval.
Teszt: jelölése: test014.rdf és test014.nt
Ez a dokumentum az RDF/XML szintaxisát egy szimbólum-ábécére alkalmazott nyelvtanként specifikálja. A szimbólumokat eseményeknek (event) nevezzük az [XPATH] – Information Set Mapping stílusában. Az események sorozatát rendesen egy XML dokumentumból származtatjuk, és ilyenkor ezek dokumentum sorrendben szerepelnek, ahogyan alább, a 6.2 Információhalmaz-leképezés szekció definiálja. Annak a sorozatnak, amelyet ezek az események alkotnak, hasonlónak kell lennie ahhoz az esemény-sorozathoz, amelyet a [SAX2] XML API produkálna ugyanabból az XML dokumentumból. Az események sorozatát ütköztethetjük a nyelvtannal, hogy megállapíthassuk, hogy megfelelnek-e egy szintaktikailag jól formált RDF/XML-nek.
A nyelvtan produkciói akciókat is tartalmazhatnak, amelyek akkor futnak le, amikor az adott produkciót felismeri a szoftver. Ezeknek az akcióknak az összessége meghatározza azt a transzformációt, mely bármilyen, szintaktikailag jól formált RDF/XML eseménysorozatból egy triplet nyelven (N-Triples) kódolt gráfot állít elõ.
Az itt megadott modell egy lehetséges módját mutatja meg annak, hogy miként állíthatjuk elõ egy RDF/XML dokumentum RDF gráf ábrázolását. Ez nem erõltet semmilyen implementációs módszert; bármilyen módszer, amely ugyanabból az RDF/XML-bõl ugyanazt az RDF gráfot állítja elõ, nyugodtan használható.
Részletesebben:
A szintaxis nem támogatja a rosszul formált XML dokumentumokat, sem pedig azokat a dokumentumokat, amelyek más okból nem tartalmaznak XML Információhalmazt; (például, amelyek nem felelnek meg a Namespaces in XML [XML-NS] elõírásoknak).
Az XML Információhalmaz (XML Infoset) elvárja az XML Base [XML-BASE] konstrukció támogatását. Az RDF/XML használja a [base URI] információtétel tulajdonságot (information item property), ahogyan azt az 5.3 szekció definiálja.
A specifikáció egy olyan XML Információhalmazt [INFOSET] vár el, mely támogatja legalább az alábbi RDF/XML információtételeket és tulajdonságokat:
Az alábbi elemek nincsenek leképezve adatmodell-eseményekre:
Az itt fel nem sorolt információtételek és tulajdonságok szintén nincsenek leképezve adatmodell-eseményekre.
Azok az elem információtételek, amelyek fenntartott XML nevekkel rendelkeznek, (lásd Name az XML 1.0 dokumentumban), ugyancsak nincsenek megfeleltetve adatmodell-eseményeknek. Ide tartozik az összes olyan elem, amelynek a [prefix] tulajdonsága az xml
karakterekkel kezdõdik (kisbetû/nagybetû-független összehasonlításban) és mindazok, amelyeknek a [prefix] tulajdonsága nem rendelkezik értékkel, továbbá, amelyeknek xml
karakterekkel kezdõdõ helyi nevük [local name] van (ugyancsak kisbetû/nagybetû-független összehasonlításban).
Minden olyan információtétel az RDF/XML dokumentumon belül, mely egyezik a parseTypeLiteralPropertyElt produkcióval, egy XML-literált takar, és nem követi ezt a leképezést. További információkért lásd a parseTypeLiteralPropertyElt produkciót.
Ennek a szekciónak a feladata kielégíteni a megfelelési (Conformance) követelményeket az [INFOSET] specifikáció szerint. Ennek érdekében specifikálja azokat az információtételeket és tulajdonságokat amelyek ennek a specifikációnak az implementációjához szükségesek.
6.1 A szintaxis adatmodell eseményeiA következõ alszekciókban az események kilenc típusát definiáljuk. A legtöbb esemény az XML Infoset egy-egy információtételbõl épül fel (kivétel az URI hivatkozás, üres csomópont, típus nélküli literál és a tipizált literál). Egy esemény-konstruktor hatása az, hogy egy új eseményt állít elõ, önálló identitással, mely különbözik minden más eseménytõl. Az események akcesszor mûveletekkel rendelkeznek, és a legtöbbnek string-value (karakterlánc érték) akcesszora van, mely lehet egy statikus érték, és lehet egy dinamikusan elõállított érték is.
6.1.1 Gyökér eseményA dokumentum információtétel-bõl állítjuk elõ és a következõ akcesszorokat és értékeket kapja:
Egy elem információtétel-bõl állítjuk elõ, és következõ akcesszorokat és értékeket kapja:
Az elem információtétel [attributes] tulajdonságának értékébõl állítjuk elõ, ami nem más, mint attribute információtételek halmaza.
Ha ez a halmaz tartalmaz egy xml:lang
attribute információtételt ([namespace name] tulajdonság = "http://www.w3.org/XML/1998/namespace" értékkel és egy [local name] tulajdonság = "lang" értékkel), akkor azt eltávolítjuk az attribute információtételek halmazából és a `language` akcesszort beállítjuk az attribute információtétel [normalized-value] tulajdonságára.
Minden megmaradó rezervált XML név (lásd Name az XML 1.0-ban) most már el van távolítva a halmazból, vagyis: minden olyan attribute információtétel a halmazban, amelynek a [prefix] tulajdonsága xml
karakterlánccal kezdõdik (kisbetû/nagybetû-független összehasonlításban), továbbá minden olyan attribute információtétel, amelynek a [prefix] tulajdonsága nem rendelkezik értékkel, vagy amelyiknek a [local name] tulajdonsága xml karakterlánccal kezdõdik (kisbetû/nagybetû-független összehasonlításban). Megjegyzendõ, hogy a [base URI] akcesszor értékét kiszámítja az XML Base, mielõtt bármelyik xml:base
attribute információtételt törölné.
Az attribute információtételek megmaradó halmaza most már az attribute események új halmazának felépítésére használható, amit azután, értékként, ehhez az akcesszorhoz rendelünk.
Értéke a következõ elemek egymás után fûzésébõl áll, ebben a sorrendben: "<", az `URI` akcesszor escape-rezolvált értéke, ">".
Az `URI` akcesszor escape-rezolúciója a tripletnyelv (N-Triples) URI hivatkozásaira megadott escape-rezolúciót használja, ahogyan azt az N-Triples dokumentum 3.3 URI References szekciója definiálja.
Nem rendelkezik akcesszorokkal. A befogadó elem végét jelöli meg a sorozatban.
6.1.4 Attribútum eseményAz attribute információtétel-bõl állítjuk elõ, és az alábbi akcesszorokat és értékeket kapja:
Ha a `namespace-name` akcesszor jelen van, akkor a `namespace-name` akcesszor és a `local-name` akcesszor egybetoldott értékére van állítva. Egyébként, ha a `local-name` egy ID
, about
, resource
, parseType
vagy egy type
, akkor az `RDF névtér URI hivatkozás` és a `local-name` akcesszor egybetoldott értékére van állítva. Másfajta, névtér nélküli `local-name` akcesszor érték használata tilos.
A névtér-minõsítés nélküli nevek egy korlátozott halmazának a támogatása kötelezõ (REQUIRED), és arra szolgál, hogy lehetõvé tegye, hogy az [RDF-MS]-ben specifikált RDF/XML dokumentumok érvényesek maradjanak. Új dokumentumok lehetõleg ne használják (SHOULD NOT use) ezeket a minõsítés nélküli attribútumokat, és az alkalmazások dönthetnek úgy (MAY choose), hogy egy figyelmeztetést adnak ki, amikor egy ilyen minõsítés nélküli forma felbukkan az elemzett dokumentumban.
Az RDF URI hivatkozások elõállítása XML attribútumokból, létrehozhatja ugyanazokat az RDF URI hivatkozásokat különbözõ XML attribútumokból. Ez félreértésekre vezethet a nyelvtanban az attribute események ütköztetésénél (ilyen eset, pl., amikor egy rdf:about
és egy XML about
attribútum is jelen van). Azok a dokumentumok, amelyekben ez elõfordul, illegálisak.
Az `URI` akcesszor escape-rezolúciója a tripletnyelv (N-Triples) URI hivatkozásaira megadott escape-rezolúciót használja, ahogyan azt az N-Triples dokumentum 3.3 URI References szekciója definiálja.
Egy vagy több, egymás után következõ character információtétel sorozatából állítjuk elõ. Az egyetlen akcesszora:
Egy esemény az RDF URI hivatkozások számára, mely a következõ akcesszorokkal rendelkezik:
Az `identifier` akcesszor escape-rezolúciója a tripletnyelv (N-Triples) URI hivatkozásaira megadott escape-rezolúciót használja, ahogyan azt az N-Triples dokumentum 3.3 URI References szekciója definiálja.
Ezeket az eseményeket úgy állítjuk elõ, hogy egy értéket adunk az `identifier` akcesszornak.
További információk az RDF gráfban elõforduló azonosítókról, az 5.2 szekcióban találhatók.
6.1.7 Ürescsomópont-azonosító eseményEgy esemény az ürescsomópont-azonosítók számára, mely a következõ akcesszorokat tartalmazza:
Ezeket az eseményeket úgy állítjuk elõ, hogy egy értéket adunk az `identifier` akcesszornak.
További információk az RDF gráfban elõforduló azonosítókról az 5.2 szekcióban találhatók.
6.1.8 Típus nélküli literál eseményEgy esemény a típus nélküli literálok számára, mely az alábbi akcesszorokkal rendelkezhet:
Az értékét a többi akcesszor értékébõl számítjuk ki, a következõképpen:
Ha a `literal-language` egy üres karakterlánc, akkor az érték a következõ elemek összefûzésébõl jön létre: egy """ (1 idézõjel), a `literal-value` akcesszor escape-rezolvált értéke, és egy """ (1 idézõjel).
Egyébként az érték a következõ elemek összefûzésébõl jön létre: egy """ (1 idézõjel), a `literal-value` akcesszor escape-rezolvált értéke, ""@" (1 idézõjel és egy 'kukac' karakter), és a `literal-language` akcesszor értéke.
A `literal-value` akcesszor escape-rezolúciója a tripletnyelv (N-Triples) karakterláncaira megadott escape-rezolúciót használja, ahogyan azt az N-Triples dokumentum 3.2 Strings szekciója definiálja (például ilyen karakterek átugratására mint az idézõjel (") )
Ezeket az eseményeket úgy állítjuk elõ, hogy egy értéket adunk a `literal-value` és a `literal-language` akcesszoroknak.
Együttmûködési megjegyzés (Informatív): Azok a literálok, amelyek egy kombinált Unicode karakterrel kezdõdnek, engedélyezettek, azonban ez együttmûködési problémákhoz vezethet a szoftverek között (lásd a további információkat a [CHARMOD]-nál)
6.1.9 Tipizált literál eseményEgy esemény a tipizált literálok számára, mely a következõ akcesszorokat kaphatja:
A `literal-value` akcesszor escape-rezolúciója a tripletnyelv (N-Triples) karakterláncaira megadott escape-rezolúciót használja, ahogyan azt az N-Triples dokumentum 3.2 Strings szekciója definiálja (például ilyen karakterek átugratására mint az idézõjel (") )
A `literal-datatype` akcesszor escape-rezolúciója a tripletnyelv (N-Triples) karakterláncaira megadott escape-rezolúciót használja, ahogyan azt az N-Triples dokumentum 3.3 URI References szekciója definiálja.
Ezeket az eseményeket úgy állítjuk elõ, hogy egy értéket adunk a `literal-value` és a `literal-datatype` akcesszoroknak.
Együttmûködési megjegyzés (Informatív): Azok a literálok, amelyek egy kombinált Unicode karakterrel kezdõdnek, engedélyezettek, azonban ez együttmûködési problémákhoz vezethet a szoftverek között (lásd a további információkat a [CHARMOD]-nál)
Implementációs megjegyzés (Informatív): Az XML Schema (part 1) [XML-SCHEMA1], szerint white space normalizáció történik az érvényességellenõrzés (validáció) során a whiteSpace facet értéke szerint. Az ebben a dokumentumban végrehajtott szintaxisleképezés csak ez után történik, úgy hogy a whiteSpace facet-nek formálisan nincs további hatása.
6.2 Az információhalmaz leképezéseAhhoz, hogy egy dokumentum teljes XML információhalmazát, dokumentum sorrendben megadott események sorozatává alakítsuk át, minden információtételt úgy kell transzformálnunk, ahogyan fentebb leírtuk, s ennek eredményeként megkapjuk a fa-struktúrába szervezett eseményeket, azok akcesszoraival és értékeivel együtt. Ezt követõen az összes elem eseményt az alább leírt módon rendezzük át, hogy az események fa-struktúráját az események dokumentum sorrendben megadott lineáris sorozatává alakítsuk át.
Az alábbi notációt használjuk egyrészt annak leírására, hogy miként ütköztetjük a nyelvtani produkciókat az adatmodell 6 fejezetben leírt eseményeinek sorozatával, másrészt pedig azoknak az akcióknak a leírására, amelyeket találat esetén végre kell hajtani. Az RDF/XML nyelvtan oly módon van definiálva, hogy a találatot mutató adatmodell-eseményeket tripletekre képezze le az alábbi formájú notáció segítségével:
sorszám esemény-típus esemény-tartalom
ahol az esemény-tartalom egy kifejezés, mely az esemény-típus-nak felel meg (ahogyan a 6.1 szekció leírja), és amelyet egy olyan leíró nyelven adunk meg, amelyet a következõ szekciók ismertetnek. A sorszámot csak hivatkozási célokra használjuk. A nyelvtani akció magában foglalhatja új tripletek generálását is a gráf számára, N-Triples nyelven megfogalmazva.
Az alábbi három szekció leírja az általános, az esemény ütköztetõ és az akciós nyelvtani elemek notációit.
6.3.1 Általános nyelvtani notációk Általános nyelvtani notációk. Notáció Jelentése esemény.accessor Az esemény akcesszor értéke.rdf:
X Egy URI, ahogy az 5.1 szekció definiálja. "ABC" Egy karakterlánc A, B, C sorrendû karakterekkel. 6.3.2 Az esemény ütköztetések nyelvtani notációja Az esemény ütköztetések nyelvtani notációja. Notáció Jelentése A == B Az A esemény akcesszor megegyezik B kifejezéssel. A != B A nem egyenlõ B-vel. A | B | ... Az A, B, ... kifejezések alternatívák. A - B A kifejezései, B kifejezések kihagyásával. anyURI. Bármilyen URI. anyString. Bármilyen karakterlánc. list(item1, item2, ...); list() Események rendezett sora. Egy üres lista. set(item1, item2, ...); set() Események rendezetlen halmaza. Egy üres halmaz. * Zéró vagy több a megelõzõ kifejezésekbõl. ? Zéró vagy egy a megelõzõ kifejezésekbõl. + Egy vagy több a megelõzõ kifejezésekbõl. root(acc1 == value1,
rdf:RDF
| rdf:ID
| rdf:about
| rdf:parseType
| rdf:resource
| rdf:nodeID
| rdf:datatype
7.2.3 syntaxTerms coreSyntaxTerms | rdf:Description
| rdf:li
7.2.4 oldTerms rdf:aboutEach
| rdf:aboutEachPrefix
| rdf:bagID
7.2.5 nodeElementURIs anyURI - ( coreSyntaxTerms | rdf:li
| oldTerms ) 7.2.6 propertyElementURIs anyURI - ( coreSyntaxTerms | rdf:Description
| oldTerms ) 7.2.7 propertyAttributeURIs anyURI - ( coreSyntaxTerms | rdf:Description
| rdf:li
| oldTerms ) 7.2.8 doc root(dokumentum-elem == RDF, children == list(RDF)) 7.2.9 RDF start-elem(URI == rdf:RDF
, attributes == set())
rdf:ID
, string-value == rdf-id) 7.2.23 nodeIdAttr attribute(URI == rdf:nodeID
, string-value == rdf-id) 7.2.24 aboutAttr attribute(URI == rdf:about
, string-value == URI-reference) 7.2.25 propertyAttr attribute(URI == propertyAttributeURIs, string-value == anyString) 7.2.26 resourceAttr attribute(URI == rdf:resource
, string-value == URI-reference) 7.2.27 datatypeAttr attribute(URI == rdf:datatype
, string-value == URI-reference) 7.2.28 parseLiteral attribute(URI == rdf:parseType
, string-value == "Literal") 7.2.29 parseResource attribute(URI == rdf:parseType
, string-value == "Resource") 7.2.30 parseCollection attribute(URI == rdf:parseType
, string-value == "Collection") 7.2.31 parseOther attribute(URI == rdf:parseType
, string-value == anyString - ("Resource" | "Literal" | "Collection") ) 7.2.32 URI-reference Egy RDF URI hivatkozás. 7.2.33 literal Bármilyen XML elemtartalom, mely megengedett az [XML] Content of Elements Rule [43] content definíciója szerint a 3.1 Start-Tags, End-Tags, and Empty-Element Tags szekcióban. 7.2.34 rdf-id Egy attribútum esemény `string-value` akcesszor érték, mely egyezik bármilyen legális [XML-NS] NCName névvel. 7.2 Nyelvtani produkciók 7.2.1 A nyelvtani elemzés kezdete
Ha az RDF/XML egy önálló XML dokumentum (melyet egy ilyen prezentáció azonosít mint egy application/rdf+xml RDF MIME type objektum, vagy valamilyen más eszköz), akkor a nyelvtan indulhat a doc produkcióval, vagy egy nodeElement produkcióval.
Ha tartalom a kontextusból felismerhetõen RDF/XML (például, amikor az RDF/XML be van ágyazva más XML tartalomba), akkor a nyelvtan indulhat vagy egy Elem esemény RDF produkciójával (de csak akkor, ha az elem legális az XML-nek ezen a pontján), vagy indulhat egy nodeElementList produkcióval (de csak akkor, ha az elem tartalma legális, mivel elemek listájáról van szó). Az ilyen beágyazott RDF/XML-nél a `base-uri` értékét a legkülsõ elemben be kell állítani a befogadó XML-bõl, mivel ilyenkor nem áll rendelkezésre Gyökér esemény. Megjegyzendõ, hogy ha ilyen beágyazás történik, akkor a nyelvtanba többször is be lehet lépni, de nem várható el, hogy az elemzõ állapota a két belépés között megmarad.
7.2.2 Produkció: – coreSyntaxTermsrdf:RDF
| rdf:ID
| rdf:about
| rdf:parseType
| rdf:resource
| rdf:nodeID
| rdf:datatype
Az RDF szókészlet 5.1 szekcióban felsorolt szintaktikai kifejezéseinek egy részhalmaza, mely az RDF/XML-ben használható.
7.2.3 Produkció: – syntaxTermsAz összes olyan szintaktikai kifejezés az 5.1 szekcióban felsorolt RDF szókészletbõl, mely az RDF/XML-ben használható.
7.2.4 Produkció: – oldTermsrdf:aboutEach
| rdf:aboutEachPrefix
| rdf:bagID
Ezek olyan nevek az RDF szókészletbõl, amelyeket mára már töröltek a nyelvbõl. (A további részletek tekintetében lásd az rdfms-aboutEach-on-object, az rdfms-abouteachprefix, és a timbl-01 kérdés megoldását az RDF-mag témakövetõ dokumentációjának jelzett helyein).
Hiba-teszt: jelölése: error001.rdf és error002.rdf
7.2.5 Produkció: – nodeElementURIsAzok az RDF URI hivatkozások, amelyek engedélyezettek csomópont-elemekben.
7.2.6 Produkció: – propertyElementURIsAzok az URI-k, amelyek engedélyezettek tulajdonságelemekben.
7.2.7 Produkció: – propertyAttributeURIsAzok az RDF URI hivatkozások, amelyek engedélyezettek tulajdonság-attribútumokban.
7.2.8 Produkció: – doc 7.2.9 Produkció: – RDF 7.2.10 Produkció: – nodeElementList 7.2.11 Produkció: – nodeElementEgy e csomópont-elem számára néhány attribútum feldolgozását el kell végezni az egyéb munkák elõtt (például mielõtt a gyermek eseményekkel, vagy más attribútumokkal foglalkoznánk). Ezek bármilyen sorrendben feldolgozhatók:
rdf:ID
, akkor e.subject := uri(identifier := resolve(e, concat("#", a.string-value))).rdf:nodeID
, akkor e.subject := bnodeid(identifier:=a.string-value).rdf:about
akkor e.subject := uri(identifier := resolve(e, a.string-value)).Ha e.subject üres, akkor e.subject := bnodeid(identifier := generated-blank-node-id()).
Akkor az alábbiak végrehajthatók bármilyen sorrendben:
rdf:Description
akkor a következõ tripletet hozzáadjuk a gráfhoz:rdf:type
akkor u:=uri(identifier:=resolve(a.string-value)) és a következõ tripletet hozzáadjuk a gráfhoz:rdf:type
), a Unicode karakterlánc a.string-value értékének Normal Form C[NFC] kódolásúnak kellene (SHOULD) lennie, o := literal(literal-value := a.string-value, literal-language := e.language) és a következõ tripletet hozzáadjuk a gráfhoz:Ha az e elemnek van egy e.URI = rdf:li
lista-eleme, akkor alkalmazzuk a lista kiterjesztõ szabályokat az e.parent elemre (ahogy a 7.4 szekció leírja), hogy egy új u URI-t kapjunk, és e.URI := u legyen.
Ennek a produkciónak az akcióját végre kell hajtani az alárendelt találatok (resourcePropertyElt ... emptyPropertyElt) bármelyikének elsõ akciója elõtt.
7.2.15 Produkció: – resourcePropertyEltAz e elem, valamint az egyetlen benne lévõ n nodeElement számára, elõször n-t fel kell dolgozni a nodeElement produkció segítségével. Azután a következõ tripletet hozzá kell adni a gráfhoz:
Ha az a rdf:ID
attribútum meg van adva, a fenti triplet tárgyiasítható a 7.3 szekcióban ismertetett tárgyiasítási szabályok szerint, az i := uri(identifier := resolve(e, concat("#", a.string-value))) akcióval, valamint az e.subject := i akcióval.
Megjegyezzük, hogy az üres literál eset az emptyPropertyElt produkcióban van definiálva.
Az e elem, és a t szöveg esemény számára a t.string-value Unicode karakterláncnak Normal Form C[NFC] kódolásban kell lennie (SHOULD). Ha a d rdf:datatype
attribute meg van adva, akkor o := typed-literal(literal-value := t.string-value, literal-datatype := d.string-value) egyébként o := literal(literal-value := t.string-value, literal-language := e.language), és a következõ tripletet hozzáadjuk a gráfhoz:
Ha az a rdf:ID
attribútum meg van adva, a fenti tripletet a 7.3 szekcióban ismertetett tárgyiasítási szabályok szerint, az i := uri(identifier := resolve(e, concat("#", a.string-value))) akcióval valamint az e.subject := i akcióval tárgyiasítjuk.
Az e elem és az l literál vagyis, az rdf:parseType="Literal"
tartalom számára. Az l-t nem transzformálja eseményekké a szintaxis-adatmodell leképezése (ahogyan a 6. Syntaxis adatmodell fejezet megjegyzi), hanem az XML információtételek XML információhalmaza marad).
Az l-t az alábbi algoritmussal transzformáljuk az XML-literál lexikális formájára (mely egy Unicode karakterlánc) az x RDF gráfban. Ez nem egy kötelezõ implementációs módszer – bármilyen módszer, mely ugyanezt az eredményt szolgáltatja, szabadon használható:
Ezt követõen végrehajtjuk az o := typed-literal(literal-value := x, literal-datatype := http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral
) akciót, és a következõ tripletet a gráfhoz adjuk:
Teszt: Üres literál eset: jelölése: test009.rdf és test009.nt
Ha az a rdf:ID
attribútum meg van adva, a fenti tripletet a 7.3 szekcióban ismertetett tárgyiasítási szabályok szerint, az i := uri(identifier := resolve(e, concat("#", a.string-value))) akcióval, valamint az e.subject := i akcióval tárgyiasítjuk.
Az e elem számára, esetleg c üres elem tartalommal.
n := bnodeid(identifier := generated-blank-node-id()).
És a következõ tripletet a gráfhoz adjuk:
Teszt: jelölése: test004.rdf és test004.nt
Ha az a rdf:ID
attribútum meg van adva, a fenti tripletet a 7.3 szekcióban ismertetett tárgyiasítási szabályok szerint, az i := uri(identifier := resolve(e, concat("#", a.string-value))) akcióval, valamint az e.subject := i akcióval tárgyiasítjuk.
Ha a c elemtartalom nem üres, akkor használjuk az n eseményt új események sorozatának elõállítására, ahogy alább következik:
Ezt követõen dolgozzuk fel az eredményül kapott sorozatot a nodeElement produkció segítségével
7.2.19 Produkció: – parseTypeCollectionPropertyEltAz e elem esemény számára, esetleg l üres nodeElementList listával. Végezzük el az s:=list() hozzárendelést.
Minden f elem esemény számára l-ben, n := bnodeid(identifier := generated-blank-node-id()), és illesszük n-t az s-hez, hogy végül megkapjuk az események sorozatát.
Ha s nem üres, n az elsõ eseményazonosító s-ben, és a következõ tripletet adjuk a gráfhoz:
egyébként pedig a következõ tripletet adjuk a gráfhoz:
Ha az a rdf:ID
attribútum meg van adva, a fenti tripletet a 7.3 szekcióban ismertetett tárgyiasítási szabályok szerint, az i := uri(identifier := resolve(e, concat("#", a.string-value))) akcióval tárgyiasítjuk.
Ha s üres, egyéb akciót nem kell végrehajtani.
Minden n esemény számára s-ben, és minden neki megfelelõ f elem esemény számára l-ben, a következõ tripletet adjuk a gráfhoz:
Minden egymást követõ és egymást átlapoló (n, o) esemény pár számára s-ben, a következõ tripletet adjuk a gráfhoz:
Ha s nem üres, n az utolsó eseményazonosító s-ben, a következõ tripletet adjuk a gráfhoz:
n.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
A "Resource", "Literal" és "Collection" karakterláncok kivételével, minden rdf:parseType
attribútum-értéket úgy kezelünk, mintha az a "literal" karakterlánc volna. Ez a produkció úgy ütköztet, és olyan akciót hajt végre, mintha a találat egy parseTypeLiteralPropertyElt produkció lenne. További tripleteket nem kell generálni a többi rdf:parseType
érték számára.
Ha nincsenek attribútumok, vagy csak az opcionális
i rdf:ID
attribútum van megadva, akkor o := literal(literal-value:="", literal-language := e.language), és a következõ tripletet adjuk a gráfhoz:
és ezután, ha i meg van adva, akkor a fenti tripletet a 7.3 szekcióban ismertetett tárgyiasítási szabályok szerint, az uri(identifier := resolve(e, concat("#", a.string-value))) akcióval tárgyiasítjuk.
Teszt: jelölése: test002.rdf és test002.nt
Teszt: jelölése: test005.rdf és test005.nt
Egyébként pedig
rdf:resource
attribútum jelen van, akkor r := uri(identifier := resolve(e, i.string-value))rdf:nodeID
attribútum jelen van, akkor r := bnodeid(identifier := i.string-value)Az alábbiakat bármilyen sorrendben végre lehet hajtani:
Minden a propertyAttr attribútum számára (tetszõleges sorrendben)
Ha a.URI == rdf:type
akkor u:=uri(identifier:=resolve(a.string-value)),
és a következõ tripletet adjuk a gráfhoz:
Egyébként az a.string-value Unicode karakterlánc Normal Form C[NFC] kódolású kell legyen (SHOULD), o := literal(literal-value := a.string-value, literal-language := e.language) és a következõ tripletet adjuk a gráfhoz:
Teszt: jelölése: test013.rdf és test013.nt
Teszt: jelölése: test014.rdf és test014.nt
Adjuk a következõ tripletet adjuk a gráfhoz:
és ezután, ha az rdf:ID
attribute i meg van adva, akkor a fenti tripletet a 7.3 szekcióban ismertetett tárgyiasítási szabályok szerint, az uri(identifier := resolve(e, concat("#", a.string-value))) akcióval tárgyiasítjuk.
A constraint-id korlátozás érvényes az rdf:ID
attribútum minden értékére.
Az adott r URI hivatkozás esemény, és az s, p and o kifejezésekbõl álló kijelentés számára, mely megfelel egy
N-Triples szintaxisú tripletnek, adjuk a következõ tripleteket a gráfhoz:
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> s .
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> p .
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> o .
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement> .
Minden adott e lista-elem számára készítünk egy új RDF URI hivatkozást: u := concat("http://www.w3.org/1999/02/22-rdf-syntax-ns#_", e.li-counter), növeljük az e.li-counter (listaelem-számláló) tulajdonság értékét eggyel, majd adjuk ki eredményül u-t.
8 RDF gráfok sorosítása RDF/XML-benAhogy Az RDF alapfogalmai és absztrakt szintaxisa dokumentum definiálja, van néhány olyan RDF gráf, amelyeket nem lehet sorosítani (serialize) RDF/XML-ben. Ezek azok, amelyek:
Implementációs megjegyzés (Informatív): Amikor egy RDF gráfot sorosítunk RDF/XML-ben, és az egy XML Séma adattípust (XSD) tartalmaz, akkor azt olyan formában kell (SHOULD) írnunk mely nem igényel whitespace karakter feldolgozást. Az XSD támogatását NEM várja el sem az RDF, sem az RDF/XML, ez tehát opcionális.
9 RDF/XML kód beágyazása HTML-be és XHTML-beHa RDF/XML kódot ágyazunk be HTML-be, vagy XHTML-be, ez sok olyan új elemet és attribútumot hozhat be az ilyen dokumentumokba, amelyek legtöbbje nem lesz benne az adott DTD-ben. Az ilyen beágyazott kód tehát hibát fog jelezni, amikor a validáció során ütköztetjük a DTD-vel. Az a kézenfekvõnek látszó megoldás, azonban, hogy terjesszük ki, vagy cseréljük le a DTD-t, nem igazán praktikus az alkalmazások egy részénél. Ezt a problémát behatóan elemezte Sean B. Palmer az RDF in HTML: Approaches [RDF-IN-XHTML] címû dolgozatában, és arra a megállapításra jutott, hogy nincs olyan közös beágyazási módszer, mely kielégítené az alkalmazásokat, és mégis egyszerû maradna.
Az ajánlható közelítés az, hogy ne ágyazzunk be RDF/XML-t a HTML-be vagy XHTML-be, hanem ehelyett használjunk egy <link>
elemet a különálló RDF/XML dokumentumra, a HTML vagy XHTML dokumentum <head>
elemében. Ezt a módszert már évek óta használja a saját webhelyén a Dublin Core Metadata Initiative (DCMI).
Ezt a technikát úgy használjuk, hogy a <link>
elem href
attribútumában lévõ URI az RDF/XML tartalomra mutat, a type
attribútum pedig az "application/rdf+xml" értéket kapja, ami az RDF/XML javasolt MIME típusa (lásd a 4. fejezetben).
A rel
attribútum értékét is beállíthatjuk, hogy az a viszonyt jelölje; ez egy alkalmazásfüggõ érték. A DCMI pl. a rel="meta"
értéket használja, a linkhez (RFC 2731 – Encoding Dublin Core Metadata in HTML – [RFC-2731]), de a rel="alternate"
változat is megfelelõ lehet. További információk találhatók a HTML 4.01 link types, XHTML Modularization – LinkTypes és XHTML 2.0 – LinkTypes dokumentumokban azokról az értékekrõl, amelyek alkalmasak lehetnek a HTML különbözõ változataiban.
A 21. példa mutatja ennek a módszernek a használatát, ahol egy HTML dokumentumban egy link
teg csatol be egy külsõ RDF/XML dokumentumot.
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>My document</title> <meta http-equiv="Content-type" content='text/html; charset="utf-8"' /> <link rel="alternate" type="application/rdf+xml" title="RDF Version" href="example21.rdf" /> </head> <body> <h1>My document</h1> </body> </html>10 Az RDF/XML használata SVG-vel (Informatív)
Létezik egy szabványosított módszer, amellyel RDF kompatibilis meta-adatokat kapcsolhatunk SVG-hez. Ez egy olyan meta-adat elem, amelyet kifejezetten erre a célra terveztek, ahogyan azt a Scalable Vector Graphics (SVG) 1.0 Specification – [SVG] dokumentum 21. Metadata fejezete, valamint a Scalable Vector Graphics (SVG) 1.1 Specification – [SVG11] dokumentum 21. Metadata fejezete definiálja.
Ez a dokumentum két gráf-példát tartalmaz SVG-ben ilyen beágyazott RDF/XML kóddal az 1. ábra és a 2. ábra meta-adat elemében.
11 Köszönetnyilvánítás (Informatív)Az alábbi munkatársak értékes hozzájárulását tartalmazza ez a dokumentum:
Ez a dokumentum az RDF-mag Munkacsoport hosszas megfontolásainak az eredménye. Ennek a csoportnak a tagjai: Art Barstow (W3C) Dave Beckett (ILRT), Dan Brickley (W3C/ILRT), Dan Connolly (W3C), Jeremy Carroll (Hewlett Packard), Ron Daniel (Interwoven Inc), Bill dehOra (InterX), Jos De Roo (AGFA), Jan Grant (ILRT), Graham Klyne (Clearswift and Nine by Nine), Frank Manola (MITRE Corporation), Brian McBride (Hewlett Packard), Eric Miller (W3C), Stephen Petschulat (IBM), Patrick Stickler (Nokia), Aaron Swartz (HWG), Mike Dean (BBN Technologies / Verizon), R. V. Guha (Alpiri Inc), Pat Hayes (IHMC), Sergey Melnik (Stanford University), Martyn Horner (Profium Ltd).
Ez a specifikáció merít egyrészt a korábbi RDF Model and Syntax dokumentumból, amelyet Ora Lassilla és Ralph Swick szerkesztettek, másrészt az RDF Séma dokumentumból, amelynek szerkesztõi Dan Brickley and R. V. Guha voltak. Azok az RDF és RDF Séma munkacsoport-tagok, akik munkájukkal hozzájárultak e korábbi specifikációk létrejöttéhez, a következõk voltak: Nick Arnett (Verity), Tim Berners-Lee (W3C), Tim Bray (Textuality), Dan Brickley (ILRT / University of Bristol), Walter Chang (Adobe), Sailesh Chutani (Oracle), Dan Connolly (W3C), Ron Daniel (DATAFUSION), Charles Frankston (Microsoft), Patrick Gannon (CommerceNet), RV Guha (Epinions, previously of Netscape Communications), Tom Hill (Apple Computer), Arthur van Hoff (Marimba), Renato Iannella (DSTC), Sandeep Jain (Oracle), Kevin Jones, (InterMind), Emiko Kezuka (Digital Vision Laboratories), Joe Lapp (webMethods Inc.), Ora Lassila (Nokia Research Center), Andrew Layman (Microsoft), Ralph LeVan (OCLC), John McCarthy (Lawrence Berkeley National Laboratory), Chris McConnell (Microsoft), Murray Maloney (Grif), Michael Mealling (Network Solutions), Norbert Mikula (DataChannel), Eric Miller (OCLC), Jim Miller (W3C, emeritus), Frank Olken (Lawrence Berkeley National Laboratory), Jean Paoli (Microsoft), Sri Raghavan (Digital/Compaq), Lisa Rein (webMethods Inc.), Paul Resnick (University of Michigan), Bill Roberts (KnowledgeCite), Tsuyoshi Sakata (Digital Vision Laboratories), Bob Schloss (IBM), Leon Shklar (Pencom Web Works), David Singer (IBM), Wei (William) Song (SISU), Neel Sundaresan (IBM), Ralph Swick (W3C), Naohiko Uramoto (IBM), Charles Wicksteed (Reuters Ltd.), Misha Wolf (Reuters Ltd.), Lauren Wood (SoftQuad).
12 A hivatkozások listája Normatív hivatkozásokapplication/rdf+xml
is archived at http://www.w3.org/2001/sw/RDFCore/mediatype-registration .
Ez a függelék XML sémákat tartalmaz RDF/XML formák érvényesség-ellenõrzéséhez (validation). Ezek csak példa sémák tájékoztatási célokra, és nem képezik a specifikációnk részét.
A.1 függelék: A RELAX NG kompakt szintaxis-séma (Informatív)Ez egy példa séma az RDF/XML számára RELAX NG Compact formában (a könnyebb olvashatóság kedvéért). Az alkalmazások használhatják a RELAX NG XML version-t is. Ezek a formátumok a RELAX NG ([RELAXNG]) és a RELAX NG Compact ([RELAXNG-COMPACT]) dokumentumokban vannak leírva.
Megjegyzés: Az RNGC sémát aktualizálták, hogy megkíséreljék a nyelvtanhoz igazítani, de ezt nem ellenõrizték, és nem is használták RDF/XML dokumentumok validációjához.
# # RELAX NG Compact Schema for RDF/XML Syntax # # This schema is for information only and NON-NORMATIVE # # It is based on one originally written by James Clark in # http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html # and updated with later changes. # namespace local = "" namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" start = doc # I cannot seem to do this in RNGC so they are expanded in-line # coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype # syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li # oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID # nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms ) # propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms ) # propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms ) # Also needed to allow rdf:li on all property element productions # since we can't capture the rdf:li rewriting to rdf_<n> in relaxng # Need to add these explicitly xmllang = attribute xml:lang { text } xmlbase = attribute xml:base { text } # and to forbid every other xml:* attribute, element doc = RDF | nodeElement RDF = element rdf:RDF { xmllang?, xmlbase?, nodeElementList } nodeElementList = nodeElement* # Should be something like: # ws* , ( nodeElement , ws* )* # but RELAXNG does this by default, ignoring whitespace separating tags. nodeElement = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID ) { (idAttr | nodeIdAttr | aboutAttr )?, xmllang?, xmlbase?, propertyAttr*, propertyEltList } # It is not possible to say "and not things # beginning with _ in the rdf: namespace" in RELAX NG. ws = " " # Not used in this RELAX NG schema; but should be any legal XML # whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S propertyEltList = propertyElt* # Should be something like: # ws* , ( propertyElt , ws* )* # but RELAXNG does this by default, ignoring whitespace separating tags. propertyElt = resourcePropertyElt | literalPropertyElt | parseTypeLiteralPropertyElt | parseTypeResourcePropertyElt | parseTypeCollectionPropertyElt | parseTypeOtherPropertyElt | emptyPropertyElt resourcePropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, xmllang?, xmlbase?, nodeElement } literalPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { (idAttr | datatypeAttr )?, xmllang?, xmlbase?, text } parseTypeLiteralPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, parseLiteral, xmllang?, xmlbase?, literal } parseTypeResourcePropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, parseResource, xmllang?, xmlbase?, propertyEltList } parseTypeCollectionPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, xmllang?, xmlbase?, parseCollection, nodeElementList } parseTypeOtherPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, xmllang?, xmlbase?, parseOther, any } emptyPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, (resourceAttr | nodeIdAttr)?, xmllang?, xmlbase?, propertyAttr* } idAttr = attribute rdf:ID { IDsymbol } nodeIdAttr = attribute rdf:nodeID { IDsymbol } aboutAttr = attribute rdf:about { URI-reference } propertyAttr = attribute * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { string } resourceAttr = attribute rdf:resource { URI-reference } datatypeAttr = attribute rdf:datatype { URI-reference } parseLiteral = attribute rdf:parseType { "Literal" } parseResource = attribute rdf:parseType { "Resource" } parseCollection = attribute rdf:parseType { "Collection" } parseOther = attribute rdf:parseType { text } URI-reference = string literal = any IDsymbol = xsd:NMTOKEN any = mixed { element * { attribute * { text }*, any }* }B. függelék: Változtatások a 2003. október 10-i végleges munkaanyaghoz képest (Informatív)
Javítások a 2003. október 10-i végleges munkaanyag kiadása óta:
Ezeket "szerkesztõi" és "nem szerkesztõi" javításokra bontva közöljük. A nem szerkesztõi javítások között felsoroljuk a következményszerû javításokat is. A szerkesztõi javítások azok, amelyek nem változtatják meg az RDF dokumentum jelentését, vagy egy RDF alkalmazás viselkedését.
B.1 függelék: Nem szerkesztõi javításokNincs
B.2 függelék: Szerkesztõi javításokrdf:parseType="Resource"
esetén, amelyre Sabadello 2003-10-30 keltezésû kommentárja mutatott rá.
A 6.1.2, 6.1.4 szekciókban új elem/attribútum URI-string-value akcesszorok.
A 7.2.11, 7.2.21 szekciókban új URI hivatkozás esemény alkalmazása az rdf:type
eseteknél.
A 7.2.11-ben (<e.URI> és <a.URI>), a 7.2.15-ben (<e.URI>), a 7.2.16-ban (<e.URI>), a 7.2.17-ben (<e.URI>), a 7.2.18-ban (<e.URI>), a 7.2.19-ben (<e.URI> kétszer), a 7.2.21-ben (<e.URI> kétszer, <a.URI> egyszer) került megváltoztatásra X.URI-ról X.URI-string-value formára (bárhol, ahol "<"..">" jelent meg a nyelvtani akcióban egy fix URI hivatkozással)
A 7.2.32 szekcióban az akció megfogalmazása "Egy RDF URI hivatkozás"-ra változott.
Minden kijavításra került a 2003-10-06 dátumú javaslatból, Patel-Schneider 2003-10-29-i megjegyzései alapján.
Nincs
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.3