DTD Dokumentumtípus definició
XML sémák - alapok jól formázott egy XML dokumentum, ha betartja a formai követelményeket minden nyitó címkének van záró párja az attribútumok ténylegesen kulcs-érték alakúak Érvényes XML dokumentumnak nevezzük azon jólformázott XML dokumentumokat, melyek logikai felépítése és tartalma teljes mértékben megegyezik az XML dokumentumban meghatározott (vagy külső fájlban meghatározott és az XML dokumentumhoz csatolt) szabályoknak. Ezen szabályok megfogalmazhatóak (megírhatóak) Dokumentum Típus Definíció (rövidebb nevén DTD) vagy XML-séma segítségével
Dokumentumtípus definíció (DTD) Lehetővé teszi megszorítások definiálását a dokumentum logikai szerkezetére, valamint tárolási egységek használatát Megadása a dokumentumtípus deklarációban (külső, belső vagy mindkettő) Jelölés deklarációkat tartalmaz
pl. a wml kiterjesztés a WAP (mobil internet) oldalalak leírására szolgáló jelölőnyelv. Egy WML dokumentum nem más, mint egy DTD-vel ellátott XML dokumentum. Ilyen oldalat bárki bármikor írhat, viszont a feldolgozó szoftver egy bizonyos adatstruktúrát vár el az összes feldolgozandó dokumentumtól. A DTD segítségével biztosítva van, hogy a megírt vagy feldolgozni kívánt dokumentum megfelel az elvártaknak. Ráadásul az egyes DTD-k ismerete alapján bárki készíthet érvényes dokumentumot vagy akár feldolgozó alkalmazást, vagyis a DTD nem más mint egy tervrajz az XML dokumentumokhoz. A DTDnek tartalmazni kell az összes elemet és jellemzőt, amelyet a dokumentum tartalmazhat.
Érvényesség (1) Érvényességről akkor beszélhetünk, ha van dokumentumtípus deklaráció A dokumentum érvényes, ha megfelel a DTD által előírt megszorításoknak Az elemek tartalma és az elemek attribútumai kell hogy megfeleljenek a DTDben leírt megszorításoknak, továbbá vannak magukra a jelölés deklarációkra is bizonyos előírások Számos érvényességi megszorítást ír elő a szabvány, amelyeknek teljesülnie kell
Érvényesség (2) Dokumentum érvényessége nagyjából az alábbiakat jelenti: A gyökérelem neve megegyezik a dokumentumtípus deklarációban adott névvel Minden elem pontosan egyszer deklarált a DTD-ben, és tartalma megfelel a deklarációkban leírtaknak Minden elem minden attribútuma deklarált a DTDben, és az attribútumok értékeinek típusai a deklarációknak megfelelnek Ha egy elem egy attribútuma kötelezőként definiált, akkor az elem minden előfordulásánál meg van adva az attribútum
Jelölés deklarációk Elemtípus deklaráció Attribútum-lista deklaráció Entitás deklaráció
Külső és belső DTDk Azon DTDket, amelyeket az XML dokumentum közvetlenül tartalmaz, nevezzük belső DTD alkészletnek, azokat, amelyekre csak hivatkozás van az XML dokumentumban nevezzük külső DTD alkészletnek. A külső és belső DTD alkészletek együttes használata is lehetséges. A végső DTD a külső és belső DTD uniója lesz. Többszörös deklaráció esetén a belső DTD élvez nagyobb prioritást, tehát felülírja az azonos külső DTD alkészletben szereplő deklarációt.
Linkek zvon.org - The Guide to the XML Galaxy Szövegfeldolgozás XML alapokon - Bíró Szabolcs Az XML 1.0 ajánlás - Jeszenszky Péter prog.hu - Érvényes XML dokumentumok létrehozása Tanuljuk meg az XML használatát 24 óra alatt (Michael Morrison)
<?xml version="1.0" encoding="utf-8"?> <!ELEMENT Polcok (Polc+)> <!ELEMENT Polc (Konyv+)> <!ATTLIST Polc ID ID #REQUIRED> <!ELEMENT Konyv (Szerzo?, Masodik_szerzo?, Szerkeszto?, Cim, Sorozat_cim?, Kiado, Megjelenes_eve+, Dedikacio?, Bejegyzes?, Megjegyzes?, OPAC?, Egyeb?)> <!ATTLIST Konyv id NMTOKEN #REQUIRED> <!ELEMENT Szerzo (#PCDATA)> <!ELEMENT Masodik_szerzo (#PCDATA)> <!ELEMENT Szerkeszto (#PCDATA)> <!ELEMENT Cim (#PCDATA)> <!ELEMENT Sorozat_cim (#PCDATA)> <!ELEMENT Kiado (#PCDATA)> <!ELEMENT Megjelenes_eve (#PCDATA)> <!ELEMENT Dedikacio (#PCDATA)> <!ELEMENT Bejegyzes (#PCDATA)> <!ELEMENT Megjegyzes (#PCDATA)> <!ELEMENT OPAC (#PCDATA)> <!ELEMENT Egyeb (#PCDATA)>
<?xml version="1.0" encoding="utf-8"?> <!ELEMENT Polcok (Polc+)> <!ATTLIST Polc ID ID #REQUIRED> <!ELEMENT Konyv (Szerzo?, Masodik_szerzo?, Szerkeszto?, Cim, Sorozat_cim?, Kiado, Megjelenes_eve+, Dedikacio?, Bejegyzes?, Megjegyzes?, OPAC?, Egyeb?)> <!ATTLIST Konyv id NMTOKEN #REQUIRED> <!ELEMENT Szerzo (#PCDATA)> A PCDATA, vagyis Parsed Character DATA kifejezésben a parsed (értelmezett) szó arra utal, hogy a dokumentumnak azt a részét az XML alkalmazás a feldolgozás során értelmezni fogja. Az XML dokumentumok szöveges tartalmának jelentős része ilyen értelmezett tartalom, beleértve a karakteregyedeket is. Az értelmezési folyamat során az alkalmazás először eldobja az összes fölösleges üres karaktert (szóköz, tabulátor), majd a karakteregyedeket azok megfelelőjével helyettesíti. A PCDATA ellentéte a CDATA (Character DATA), ami az XML alkalmazás által fel nem dolgozandó szöveget jelöl. Később megtanuljuk, pontosan mire is jó ez az utóbbi adattípus. Kerek zárójelek (()) - Gyermekelemek sorozatát (sequence) vagy egy választási csoportot (choice group) zárnak közre. Vessző (,) - Egy sorozat elemeit választja el egymástól. A sorozat az elemek kötelező sorrendjét írja elő. Szűrőkarakter ( ) - Az alternatívákat választja el egy választási csoportban. Nincs szimbólum - Azt jelzi, hogy egy gyermekelem pontosan egyszer fordulhat elő. Kérdőjel (?) - Azt jelzi, hogy a kérdéses gyermekelem pontosan egyszer fordulhat elő, vagy egyszer sem. Pluszjel (+) - Azt jelzi, hogy a gyermekelemnek legalább egyszer elő kell fordulnia. Csillag (*) - Az adott gyermekelem tetszőlegesen sokszor fordulhat elő.
Az ID problémája: Az ID elem a könyv esetében a bepecsételt azonosítószámmal egyenlő, ám ennek az XML fájlban szemantikailag nincs jelentősége, ezért áttettem azt jelölőnek. Ugyanígy jelölőt kapnak a polcok is. A polcok esetében az ID tokentípust, míg a könyv esetében a NMTOKEN típust alkalmaztam. Ennek az az oka, hogy a tulajdonságok teljesen megfeleljenek a könyvlista leírásainak, így a polcok megkaphatták a dolgozószoba d jelölését a polcszámozással együtt: <Polc ID="d11">, Ezzel szemben a könyveknél azt az azonosítót alkalmaztam, amit bepecsételtünk a könyvekbe azonosítás céljából. Ez egy négyjegyű számot jelent, ezért nem lehetett ID típusú csak NAMETOKEN típusú, amikor is lehetséges a jellemző bármilyen karakterrel, így akár numerikus karakterrel kezdeni. Ez nem lehetséges az ID esetében, mert ott az XML szigorúbb szabályai érvényesülnek.
Letöltések XML Notepad Butterfly XML Editor
Az alapértelmezett érték mellett az attribútumlista deklarációjának tartalmaznia kell az attribútumok típusát is. Összesen 10 különféle típust használhatunk: CDATA Nem értelmezett (unparsed) szöveges adat Enumerated Karakterláncok sorozata NOTATION Egy a DTD más pontján megadott jelölés ENTITY Külső bináris egyed ENTITIES Több különféle külső bináris egyes üres karakterekkel elválasztva ID Egyedi azonosító IDREF Egy a DTD más pontján deklarált ID-ra mutató hivatkozás IDREFS Több különböző, máshol deklarált ID-ra mutató hivatkozás NMTOKEN XML tokenekből (számok, betűk, pontok, kötőjelek, kettőspontok és aláhúzásjelek) felépített név NMTOKENS Több XML tokenekből felépített név Ahhoz, hogy megérthessük az attribútumtípusok közötti különbségeket, célszerű azokat három csoportra osztani. Vannak karakterláncok, felsorolt típusok és tokenizált típusok. A karakterláncok jelentik az attribútumok legközönségesebb és leggyakrabban használt típusát. Ide tartozik a CDATA típus, amely egy karakterláncból álló attribútumot takar. A következő példa azt mutatja, hogyan deklarálhatunk education elemhez tartozó CDATA típusú attribútumot: <!ATTLIST education school CDATA #REQUIRED> Ebben a példában annak az iskolának a nevét, amelyben az illető a tanulmányait végezte az education elem egy kötelezően megadandó attribútuma (school) hordozza. Ha az attribútum megadását opcionálissá akarjuk tenni, az #IMPLIED szimbólumot kell használnunk: <!ATTLIST education school CDATA #IMPLIED> A felsorolt típushoz tartozó attribútumok értéke csak bizonyos előre meghatározott halmazelemek közül kerülhet ki. A felsorolt típusok amúgy hasonlítanak a CDATA típushoz, a különbség csak annyi, hogy a deklaráció részeként lehetséges értékeket is meg kell adnunk egy felsorolás formájában. Korábbi példánknál maradva nézzük, miként adhatunk meg egy az illető végzettségének típusát tároló attribútumot (degree): <!ATTLIST education degree (associate bachelors masters doctorate) "bachelors">
Amikor egy dokumentumban a degree attribútumot használjuk, annak értékét a fent látható felsorolásból kell választanunk. Ha nem adunk meg semmit, még az attribútum nevét sem, akkor annak alapértelmezett értéke bachelors lesz. A tokenizált attribútumokat az XML alkalmazások nevüknek megfelelően tokenekként kezeik, vagyis eltávolítják előlük és mögülük az összes üres karaktert, a bennük előforduló több összefüggő üres karakterből álló részeket pedig egyetlen szóközre cserélik. Az üres részek eltávolításán túl az alkalmazás validálja is a tokenizált attribútumot annak deklarált típusa alapján. Ez utóbbi lehet ENTITY, ENTITIES, ID, IDREF, IDREFS, NMTOKEN, vagy NMTOKENS. A token az információnak az a legkisebb egysége, amit egy XML alkalmazás képes feldolgozni. A tokenizált attribútum ennek megfelelően olyan attribútum, amelynek értékét az alkalmazás ilyen tokenekre bontja. Az üres karakterek említett eltávolítása ennek a felbontásnak a mellékhatása. (Üresnek számít a szóköz, a tabulátor és az új sor.) A közönséges karakterláncok ezzel szemben feldolgozatlanul jutnak át a folyamaton, így az összes üres karakter is megmarad bennük. Az ENTITY és ENTITIES típusok egyedekre hivatkoznak. A képek tipikusan bináris egyedekként jelennek meg az XML dokumentumokban. Ilyen esetben az ENTITY kulcsszót használjuk a kép és az elem összerendelésre: <!ATTLIST photo image ENTITY #IMPLIED> Az ENTITIES típus hasonló az ENTITY-hez, de lehetővé teszi több egyed felsorolását. Az ID, IDREF és IDREFS attribútumtípusok egyedi azonosítókat jelölnek. Az ID olyan egyedi azonosító, amely segítségével egyedileg hivatkozhatunk a dokumentum valamely elemére: <!ATTLIST part id ID #REQUIRED> Egy adott elemtípushoz csak egyetlen ID típus tartozhat. Az NMTOKEN és NMTOKENS típusok olyan attribútumokkal kapcsolatban használatosak, amelyek név jellegű tokenértékeket hordoznak. A név jellegű tokenérték egyetlen nevet tartalmaz, vagyis nem lehet benne szóköz vagy bármely más üres karakter. Kicsit konkrétabban egy ilyen érték betűket, számokat és a következő karaktereket tartalmazhatja:., -, _ és :.