XML

Bevezetés



Az XML-ről nagy vonalakban

A számítógépek képesek arra, hogy képeket, zenéket és videót tartalmazó elektronikus dokumentumot kezeljenek. A szöveg és más médiák együttes kezeléséhez, továbbításához és megjelenítéséhez mindezeket valamilyen szerkezetbe kell rendezni. Az XML (Extensible Markup Language) szabvány egy ilyen lehetőséget kínál. Az XML dokumentum speciális utasításokat, jelölő elemeket tartalmaz, amelyek a dokumentum egy azonosítható részét határolják.

Az XML alapú dokumentumnak van logikai és fizikai szerkezete is. A logikai szerkezet lehetővé teszi, hogy a dokumentumot nevet viselő egységekre, alegységekre bontsunk, amelyeket elemeknek neveznek. A fizikai felépítés során lehetőség van arra, hogy a dokumentum részeit, az ún. egyedeket elnevezzük, és külön fájlban tároljuk.

Az XML igazából egy köztes nyelv, ami azt jelenti, hogy egy olyan nyelv, amely más nyelvek leírását tartalmazza. Nincs előre definiált elemlista. A felhasználó az alkalmazásnak megfelelő, beszédes nevű elemeket használhat. Létezik azonban egy eljárás, amely segítségével az egy dokumentumosztályban megengedett elemek meghatározhatók, elkerülve ezzel az elnevezések keveredését. Ez a DTD (Document Type Definition). XML dokumentumokat tetszőleges szövegszerkesztő programmal létrehozhatunk.

Minden esetben, ha bonyolult adatformátumot kell két program között mozgatni, az XML megfelelő formátum lehet. Az XML ideális adatleíró nyelv olyan részben strukturált dokumentumok számára, mint referenciamunkák, oktatási anyagok, jelentések. Az XML-lel egyszerű a köztes adatok generálása.

A GML–től az XML-ig – történeti áttekintés:

Charles F. Goldfarb két munkatársa Ed Mosher és Ray Lorie bevonásával az IBM felkérésére 1969-ben kifejlesztett egy nyelvet, a GML-t,amely szándékuk szerint egy nem rendszer-specifikus szöveg (dokumentum) formázó nyelv általuk megfogalmazott követelményeknek tesz eleget. A név a három kutató nevének kezdőbetűiből született, de Goldfarb a kérdésre, hogy miből származik, a Genralized Markup Language hangzatos kifejezéssel válaszolt.
Charles F. Goldfarb 1974-ben javaslatot tett a GML-ben készített dokumentumok érvényesítési elemzési eljárás bevezetésére. Egy ilyen eljárásnak az a lényege, hogy a dokumentumok érdemi feldolgozása nélkül a dokumentum-típus definíció (ez lényegében rögzíti a dokumentum megengedett strukturális felépítését és megengedett formázási szabályait) ismeretében ellenőrizze a dokumentum strukturális és formai helyességét. A GML ennek a javaslatnak az elfogadásától kezdődően tekinthető SGML-nek. A javaslat részletes kidolgozására, az elemzés követelményeinek pontos meghatározására és az ISO8879 szerinti dokumentálására 1978-1986 között került sor C: F. Goldfarb vezetésével, és ennek eredményeképpen született meg az Standard Generalized Markup Language (SGML) 1986-ban.

Az SGML-t megalkotó csoport, jelenleg JTC1/SC34 néven működik, és tovább dolgozik az SGML-lel kapcsolatos szabványok létrehozásán. A két legfontosabb ezek közül a HyTime (Hypermedia/Time-based Structuring Language) és a DSSSL (Document Style Semantics and Specification Language).

Tim Berners-Lee és kollégája Anders Berglund (mindketten fizikusok) 1989-ben azzal az ötlettel álltak elő, hogy a CERN European Nuclear Research Facility szervezetén belül az információ „jól darabolható”, egymásra ún. hyperlink-ekkel hivatkozó SGML jellegű dokumentumokba szervezhető. Az SGML szabvány egy egyszerű, példaként közölt dokumentum-típusából kiindulva kifejlesztették annak „hypertext” változatát, ami a HyperText Markup Language (HTML) nevet kapta. Tim Berners-Lee a létrehozott hypertext rendszert World Wide Web-nek nevezte. A HTML, bevezetése után, „tökéletesítési ötletek” garmadáját indította el. Ezeket az ötleteket azután eléggé el nem ítélhető módon meg is valósítottak egy-egy software- és hardware környezetben. Az így megvalósított HTML mutációk többségükben a „szabványos” kezdő és záró tagokat (, stb.) leszámítva még köszönőviszonyban sem voltak egymással, és ennek köszönhetően ugyanez volt elmondható a hypertext processzorok különböző mutánsairól is. Az időközben Tim Berners-Lee elnökletével megalakult W3C (World Wide Web Consortium) a kialakulóban levő káosz terjedésének megállítására stratégiát dolgozott ki:

· HTML specifikus CSS (Cascading Style Sheets) dokumentum formázó rendszer, amellyel a HTML dokumentumok „kívülről” kaphatják meg a megjelenítési formára vonatkozó utasításokat, vagyis a HTML tag-ek csak a dokumentum szerkezetét írják le. · Egy egyszerű kiterjesztési eszközt a HTML követhető korlátozott kiterjesztésére. · Egy kiterjeszthető dokumentum leíró nyelv létrehozása – ez maga az XML (eXtensible Markup Language), illetőleg az XML-hez illeszkedő hyperlink Xlink (eXstensible Linking Language) és megjelenítési formázási szabályokat leíró XSL (eXtensible Stylesheet Language) szabványok létrehozása.

Mi az az XML dokumentum?

Az XML dokumentumok ún. önleíró vagy öndefiniáló szöveges információk. Az „önleíró” vagy „önmeghatározó” tulajdonságon azt értjük, hogy egy XML dokumentum speciálisan meghatározott formában saját maga leírja az információ szerkezeti felépítését. Ebben valójában semmilyen új gondolat nincs az írott ismereti anyag ilyen tulajdonságaihoz képest (az adathordozó itt és most a papír), hiszen minden hírlapról, könyvről, levélről ugyanez elmondható. A különbség annyi, hogy míg a hagyományos papír adathordozó esetén az információ tagolása, szerkezeti képe fejezetekre, paragrafusokra, bekezdésekre tagolással (fejezetcímek, alcímek, üres sorok, bekezdések, egyéb tabulációk) történik. Digitális formában ezek a szerkezeti formát biztosító elemek nem célra vezetők, mert az ilyen „tipográfiai” megoldások az emberi szem számára jól érzékelhetők, számítógépes érzékelésük azonban nem minden esetben (esetenként egyáltalán nem) lehetséges.

Az XML nyelvi szerkezetei biztosítják a szemmel jól érzékelhető, de számítógépes programmal már kevésbé felismerhető és azonosítható szerkezeti formázást biztosító elemek pontos meghatározásának a lehetőségét. Ennek eredményeképpen olyan dokumentumhoz jutunk, amelynek szerkezeti felépítése, tagoltsága mind az emberi szem, mind a számítógépes programok számára jól felismerhető és azonosítható. Nem mellékes körülmény az sem, hogy teszi mindezt úgy, hogy eközben csak ábrázolható (az emberi kézírásban is alkalmazható és alkalmazott) karaktereket, szimbólumokat használ. Ez egyben azt is jelenti, hogy az XML dokumentumok készítése nem igényel semmiféle speciális dokumentáló rendszert, speciális szövegszerkesztő programot, jóllehet ma már ilyenek szinte minden software környezetben elérhetők. Egy XML dokumentumban leírt ismeretanyag minden nehézség nélkül érthetővé válik egy XML-t nem ismerő, de az ismeretanyag témakörében járatos, vagy legalábbis érintőlegesen tájékozott ember számára is, legfeljebb nem érti, hogy bizonyos, az „érdemi” szövegtől jól elkülönülő furcsa szimbólumok (szerkezeti formázás – markup) miért törik meg helyenként az „érdemi szöveget”. Az alábbi példa egy jól formált XML dokumentum. A „jól formált” tulajdonságra még visszatérünk, bár valószínűleg mindenki érti, még ha pontosan nem is tudja megfogalmazni. Az XML dokumentumként megadott angol nyelvű mondóka azoknak az angol nyelvet ismerők számára is érthető, akik egyébként még csak nem is hallottak az XML-ről.

Példa egy egyszerű XML-dokumentumra:

Eiffel-ben a változók alapvetően referenciaként tárolódnak, kivéve ha ezt az expanded (kiterjesztett) minősítő kulcsszóval külön meg nem változtatjuk. Ezt a kulcsszót változók deklarálásakor, illetve osztályok definiálásakor is használhatjuk. Ebben az esetben az adott szimbólum a hozzárendelt objektumot nem referenciaként tartalmazza, hanem hagyományos módon tárolva. Mivel az objektum-orientált programozásban a referenciák nagyon fontosak, a referencia típusok használata a gyakoribb Eiffel-ben, ugyanakkor a beépített típusok (pl.: INTEGER, BOOLEAN) kiterjesztett típusok. Ha T egy referencia típus, akkor bizonyos megszorításokkal expanded T néven használható a neki megfelelõ kiterjesztett típus. Ugyanakkor ez fordítva nem teljesül, azaz ha egy osztályt expanded-ként definiáltunk, akkor nem képezhető belőle automatikusan referencia típus.

Példa:

<say>

    <poem>

        <verse>

            <line> Fuzzy Wazyt was a bear. </line>

            <line> Fuzzy Wazyt had no hair. </line>

            <line> Fuzzy Wazyt was not fuzzy, was it? </line>

        </verse>

    </poem>

</say>

Dokumetumtípus és megadásuk

A valós világ dokumentumai, levelek, folyóiratok, telefonkönyv, regény, műszaki dokumentáció, mind, mind eltérő szerkezettel rendelkeznek, és az ember általában azonnal képes eldönteni egy papírlapról, hogy az feltehetően éppen egy folyóiratból, vagy esetleg egy telefonkönyvből származik. A dokumentum-típust a dokumentum elemei (a benne felhasználható elemtípusok) határozzák meg. Ha két dokumentum alapvetően különböző elemeket (különböző elemtípusokhoz tartozó előfordulásokat) tartalmaz, vagy ugyanolyan típusnévvel illetett elemeket alapvetően különböző sorrendben vagy hierarchiában használja, akkor az a két dokumentum nagy valószínűséggel különböző dokumentumtípushoz tartozik.

Az XML-ben a dokumentumtípusok jól formalizálhatók. Egy dokumentumtípus definíciója (DTD) azt írja le, hogy a dokumentumot alkotó elemek, attribútumok, entitások és jelölések hol és hogyan használhatók föl az XML dokumentumok készítésekor. Egy XML dokumentum specifikálhatja, hogy milyen dokumentumtípushoz tartozik. Ez a dokumentumtípus deklarálása. Példaképpen megadunk egy olyan DTD-t, amelynek megfelel a bevezetőben példaként bemutatott XML dokumentum.

 <!ELEMENT say (poem) >

<!ELEMENT poem (verse+) >

<!ELEMENT verse (line+) >

<!ELEMENT line (#PCDATA)>

A fenti DTD azt mondja, hogy egy mondóka (say) az egyetlen költemény (poem). A költemény (poem) legalább egy versszakból (verse) áll, amelyek mindegyike legalább egy sort (line) tartalmaz, továbbá, hogy minden sor (line) közönséges szövegből áll. A #PCDATA egy típus, amely a Parsed Character DATA kifejezésből származik, és ennek a típusnak az értékkészletébe beletartozik az egyszerű (XML szerkezetleírót nem tartalmazó) szöveg is, de ennél bővebb. A fenti angol kifejezés jelentése félrevezető, mert azt sugallja, hogy az ilyen típusú adat előfordulást már nem kell elemezni. Bár a PCDATA szó valóban a fenti kifejezésből ered, a fenti kifejezés egy leegyszerűsített és ily módon nagyon pongyola XML zsargon, amely a Character DATA to be Parsed fogalmat helyettesíti. Ahhoz, hogy a bevezetőben leírt dokumentumban deklaráljuk, hogy az a fenti dokumentumtípushoz tartozik, több lehetőségünk van. Az egyik legegyszerűbbet mutatja a következő példa.

<?xml version = “1.0” ?>

<!DOCTYPE say[<!ELEMENT say (poem) >

<!ELEMENT poem (verse+) >

      <!ELEMENT verse (line+) >

      <!ELEMENT line (#PCDATA)>]>

<say>

 <poem>

  <verse>

   <line> Fuzzy Wazyt was a bear. </line>

   <line> Fuzzy Wazyt had no hair. </line>

   <line> Fuzzy Wazyt was not fuzzy, was it? </line>

  </verse>

 </poem>

</say>


Karakterkészlet és kódrendszerek

A karakterkészlet megállapítása (a tekintetbe vett/veendő szükséges karakterek és speciális szimbólumok) az informatika őskorában (akkor ez a szó, hogy informatika még nem volt használatban) lényegében az ábrázolható karakterek halmazára terjedt ki. Ennél még több is igaz, mert a betűk esetében csak az angol abc betűi jelentették az ún. alfabetikus karaktereket hozzájuk véve néhány írásjelet és az alulvonást (underscore). A kezdeti számítógépes környezetekben a karakterkészlet elemeire különböző kódrendszereket használtak. Ezek között a legismertebbek az IBM által bevezetett EBCDIC, a hozzá nagyon hasonló kártyakód, illetőleg az ISO által rögzített ASCII. Ezek a kódrendszerek 7-8 bitet használtak egy-egy karakter digitális kódjához (ASCII 7 bit – 128 karakter, EBCDIC, kártyakód 8 bit – 256 karakter). Napjainkra természetes elvárás lett a legkülönbözőbb természetes nyelvekhez tartozó jelek (jelrendszerek) hozzávétele a karakterek halmazához (ékezetes betűk, az arab nyelv betűi, cirill betűk, az ázsiai képi jelek, stb.). Ezek együttes egymás melletti jelenléte szükségessé tette egy új kódrendszer az UTF-16 (Unicode) kidolgozását. Ez egy 16 bites kódrendszer, amely természetes kiterjesztése az ASCII 7 bites kódrendszernek. Az XML a Unicode (UTF-8) kódrendszert és az általa reprezentált karakterkészletet használja.

Az XML nyelvi elemei

A nyelvi elemek és a szintaxis leírásakor a szokásos meta jeleket használjuk. Egy-egy nyelvi elem nem kötelező voltának jelölésére a [] zárójelpárt használjuk, az egyes szerkezetek ismétlődési lehetőségére pedig az egymást követő három pontot (…). A sp, t, nl szimbólumok rendre a szóköz, a tabulátor és az új sor karaktereket jelölik. A , Unicode szó egy tetszőleges megengedett karakter-előfordulást jelöl. A,URI egy URI-ra (Uniform Resource Identifier) utal. Az XML különbséget tesz a kis- és nagybetűk között. Egy XML dokumentum karakterek egy sorozata. A karaktersorozatban lehetnek adatok (a dokumentum „érdemi szövege”) és szerkezetleírók (markup). A szintaxis leírásakor, ahol arra szükség van UNIX reguláris kifejezéseket is használni fogunk.

szerkezetleírók (markup):

markup ::= kezdő-tag | záró-tag | üreselem-tag | entitás-hivatkozás |

karakter-hivatkozás | magyarázat | CDATA-kijelölés | elhatárolók |

dokumentumtípus-deklaráció | elemtípus-deklaráció | feldolgozás-utasítás

elhatároló ::= “ | ‘

kezdő-tag ::= <elemtípus-név>

záró-tag ::= </ elemtípus-név>

entitás-hivatkozás ::= &entitás-név;

karakter-hivatkozás ::= előre-definiált-entitások
 

A fenti szintaktikus kategóriák közül azokat, amelyek definíciói nem jelennek meg, tartalmi kategóriája miatt külön-külön bekezdésekben definiálunk és/vagy magyarázunk. Ezek rendre az | üreselem-tag, előredefiniált entitások, magyarázat, CDATA-kijelölés, dokumentumtípus-deklaráció, elemtípus-deklaráció és | feldolgozás-utasítás. A „név”-re végződő szintaktikus kategóriák is tartalmi információt hordoznak azon túl, hogy valamennyien nevek.

nem látható karakterek (white spaces):

nem-látható-karakterek ::= sp | t | nl
 

nevek és névszók (names, name tokens):
 

név ::= [A-Za-z] | név[A-Za-z0-9-_:.]
névszó ::= [A-Za-z0-9-_:.] | névszó[A-Za-z0-9-_:.]
 

A nevek és a névszók (name tokens) ugyanazokból a karakterekből építhetők. Különbség köztük csak a kezdő karakterben van. Minden név egyben névszó is, de fordítva ez nem igaz. Az ’XML’ karakterlánccal kezdődő nevek függetlenül attól, hogy kis vagy betűket használunk nem engedélyezettek. Az ilyen nevek szabványosítási célból védettek.

literálok:

literál ::= “optional-string” | ‘optional-string’
optional-string ::= [Unicode…]
 

A literálok idézőjelek vagy aposztrófok között megadott tetszőleges karakterláncok. Az idézőjelek vagy aposztrófok nem tartoznak hozzá a literálhoz, csak a kezdetét és végét jelölik. Az idézőjel és az aposztróf használata között nincs semmilyen különbség. Az azonban lényeges, hogy a literál végét ugyannak (idézőjel vagy aposztróf) kell jelölnie, mint ami a kezdetét jelölte. Az idézőjelekkel megadott literálban az aposztróf közönséges karakternek számít, és fordítva. Természetesen arra is van mód, hogy idézőjelekkel (aposztrófokkal) megadott literál belsejében idézőjelet (aposztrófot) közönséges karakterként használjunk (lásd: előre definiált entitások). A literálok belsejére (alább optional-string) vonatkozó fenti szabály a leggyengébb olyan szabály, amelyet be kell tartanunk. A literálokra a különböző szerkezetleíró környezetekben olykor erősebb megszorításokat kell tenni. Ezeket a szabályokat kísérő magyarázó szövegekben tesszük meg, hogy elkerüljük a szintaktikus definíciók felesleges elbonyolítását.


A dokumentum logikai szerkezete

Az XML dokumentumok logikai szerkezetét a használt elemek definiálják. Az elemek (ELEMENT) az XML dokumentumok egy-egy jól meghatározott komponensét határozzák meg. Ha egy XML dokumentumban egy több hasábos újságcikket akarunk leírni, akkor ebben a dokumentumban a lehetséges elemek például a cikk, a hasáb és a bekezdés nevű elemek.

    Az előző részben példaként közölt XML dokumentum a say, poem, verse és line nevű elemekkel írta le az ottani dokumentum szerkezetét. Az elemeket (kezdetüket és végüket) ún. kezdő- és záró tagok jelölik. A kezdő és záró tag közötti rész az elem (alkalmasint önálló szerkezettel rendelkező) tartalma. A kezdő- és záró tagokat névvel (elemtípus név) azonosítjuk. A fenti példában a say típusú elem, amelynek kezdetét a <say> kezdő tag, végét pedig a </say> zárótag jelzi, egy poem típusú elemet tartalmaz, amelynek tartalma egy verse típusú elem, és így tovább, míg a line típushoz tartozó elem tartalma már nem elem, hanem XML struktúrát már nem hordozó közönséges szöveg. Az elemek kezdetét és végét határoló tagok azt mutatják, hogy az elem tartalma milyen típusú. Az XML dokumentumokban megjelenő elemek valójában (nem feltétlenül különböző) tartalommal rendelkező, az adott elemtípushoz tartozó adat-előfordulások. Ezért lényeges, hogy elemtípus névről és ne tagnévről, vagy elemnévről beszéljünk. Az említett példa-dokumentum szerkezetét egy olyan fával reprezentálhatjuk, amelynek gyökere a say nevet viseli, levelei pedig a mondóka sorai. A fa gyökerével reprezentált elemet a dokumentum gyökérelemének nevezzük, de szokásos a dokumentumelem elnevezés is. Általános szabály, hogy egy jól formált XML dokumentumban az elemek nem nyúlhatnak egymásba, minden elemnek kell kezdő- és záró tagjának lennie, továbbá, hogy a dokumentumelem kivételével minden elemhez tartozzon befogadó elem: más szavakkal egy XML dokumentum mindig reprezentálható legyen egy faszerkezettel, ahol a csomópontok az elemeket reprezentálják. A valós világ dokumentumaira erős megszorítás az, hogy szerkezetük fával legyen reprezentálható. Az XML dokumentumok világában a jól formáltság ezzel szemben (nem túl erős) követelmény. Az XML dokumentumokra előírt jól formáltság látszólag igen sok valós életbeli dokumentumot zár ki az XML dokumentumok világából, de csak látszólag. A nyelvi elemek részletes megismerésekor látni fogjuk, hogy a faszerkezetnél bonyolultabb szerkezettel leírható dokumentumok is előállíthatók XML dokumentumként.

    Az XML dokumentumok két fő részből állnak: a prológus és a dokumentumpéldány. A prológus olyan deklaratív információkat hordoz, amelyekre a dokumentumpéldány feldolgozásához esetleg szükség lehet. Ez a rész opcionális. A prológus áll egy opcionális ún. XML deklarációból, és egy ugyancsak opcionális dokumentumtípus deklarációból. Mindkettő megadása esetén az XML deklarációnak meg kell előznie a dokumentumtípus deklarációt. A kettő között tetszőlegesen keveredve, feldolgozás-utasítások, magyarázatok és nem-látható-karaktereket tartalmazó sorok fordulhatnak elő tetszőleges sokszor. A dokumentumpéldány első eleme a dokumentum-elem vagy gyökér-elem. A prológus ott fejeződik be, ahol az XML dokumentumban az első elem (gyökér-elem) megjelenik.

xml deklaráció:
 

xml-deklaráció ::= <?xml verz-info [sp kód-info] [sp érv-info] [sp] ?>
verz-info ::= version=’verzió’ | “verzió”
kód-info ::= encoding=’UTF-8’ | encoding=”UTF-8”
érv-info ::= standalone=’igen-vagy-nem’ | “igen-vagy-nem”
igen-vagy-nem ::= yes | no
 

xml deklaráció:
 

xml-deklaráció ::= <?xml verz-info [sp kód-info] [sp érv-info] [sp] ?>
verz-info ::= version=’verzió’ | “verzió”
kód-info ::= encoding=’UTF-8’ | encoding=”UTF-8”
érv-info ::= standalone=’igen-vagy-nem’ | “igen-vagy-nem”
igen-vagy-nem ::= yes | no
 

Az xml deklaráció lehetőséget ad a XML verziójának megadására, az XML dokumentum karakterkészletének megadására, továbbá a dokumentum érvényesítési eljárás módjának megadására. Az xml deklaráció formailag olyan, mint egy kezdő-tag attribútumokkal, azonban a benne megadható értékek nem attribútum értékek. Az egyetlen lényeges dolog, ami megkülönbözteti őket az attribútumok megadásától az, hogy megadásuk esetén sorrendjük szigorúan kötött, ami az attribútumok megadásakor nem kritérium. A szintaxisból kiderül, hogy a verzió szám megadása kötelező, ha xml deklarációt egyáltalán megadunk.

·          Verzió megadása: Az XML verziójának megadásakor jelenleg csak az 1.0 verzió (ez az alapértelmezés is) adható meg.

·             Kódolás megadása: Az XML alapértelmezésben a Unicode-ot használja, amely az ASCII 7 bites kódrendszernek egy természetes 8 bites kiterjesztése. Az erre a kódrendszerre való hivatkozás (ez az alapértelmezése is az encoding értékének) az UTF-8 karakterlánccal adható meg.

Érvényesítés módja: Egy speciális lehetőség. Minden részletes magyarázat nélkül az alapértelmezésnek megfelelő, no értéket kell megadni. A kérdéskörre még visszatérünk a dokumentumtípus deklarációjánál.

dokumentumtípus deklaráció:

doktíp-dekl ::= <!DOCTYPE sp név [ sp külső-azonosító ] [sp]

[ [ [markup-deklaráció | parameterentitás-hivatkozás | sp…] ] ] [sp] >
 

külső-azonosító ::= SYSTEM sp System-literál |
 

PUBLIC sp Pubid-literál sp System-literál
 

System-literál ::= URI
 

markup-deklaráció ::= elem-deklaráció | attribútum-deklaráció | entitás-deklaráció |
 

jelölés-deklaráció | feldolgozás-utasítás | magyarázat
 

PubId-literál ::= uri-név
 

A dokumentumtípus az XML dokumentumok érvényesítésekor kap szerepet. Ahhoz hogy egy XML dokumentumot (szerkezetileg) érvényesíteni (validálni) tudjunk, szükséges, hogy legyen egy elérhető dokumentumtípus definíció, amelyre az XML dokumentum hivatkozik (dokumentumtípus deklaráció). Egy dokumentumtípus definíció lényegében azt írja elő, hogy a dokumentum egyes elemei hogyan épülnek föl, megszabja az elemek hierarchiáját, előfordulásuk sorrendjét, „számát” és esetleg egyéb tulajdonságait (attribútumok) is. Az XML dokumentumok érvényesítése az az eljárás, amely ellenőrzi, hogy a dokumentum szerkezetileg eleget tesz-e az általa deklarált dokumentumtípusnak. A dokumentumtípus deklarációjakor három lehetőség áll a rendelkezésünkre:

·         A dokumentumtípus deklarációjában adjuk meg a dokumentumtípus definícióját (lokális, belső definíció)

·         A dokumentumtípus deklarációja egy külső (nem a dokumentumon belül lokálisan megadott) dokumentumtípus definícióra hivatkozik (külső definíció).

·         A dokumentumtípus deklarációja a két fenti eset kombinációját írja elő.

magyarázatok (comment):

magyarázat ::= <!-- magyarázó szöveg  -->

A magyarázatokat a <!-- négy karakterből álló összetett szimbólum vezeti be és a --> három karakterből összetett szimbólum zárja le. A magyarázó szövegre egyetlen megszorítás van: nem tartalmazhat két egymást követő kötőjel karaktert úgy, hogy közöttük nincs szóköz karakter, vagyis nem záródhatnak így: --->.

Előre definiált entitások (Predefined Entities):

Entitás referencia    Karakter

&amp;                    &

&lt;                     <

&gt;                     >

&apos;                   ’

&quot;                   “

A bevezetőben már szó esett arról, hogy a < >  és a & ; jelek között álló szimbólumok a jelekkel együtt szerkezetleírókat (markup) jelölnek. Szerkezetleírónak számít mind az idézőjel, mind az aposztróf (elhatárolók) is, hiszen a literálok kezdetét és végét jelzik. Természetes dolog, hogy ezeknek a karaktereknek használata nem zárható ki az XML dokumentumok „érdemi szöveg” részéből, ezért az XML bevezet karakterentitásokat ezeknek a karaktereknek nem szerkezetleíróként való használatára. Ezek a következők:

CDATA-kijelölés (CDATA section):

CDATA-kijelölés ::= <![CDATA[Unicode…]]>

A karakter entitások használata mellett az XML definiál egy ún. CDATA (Character DATA) részt, amelyben minden „problémás” karakter egyszerű, közönséges karakterként lesz értelmezve. Ez különösen akkor tesz jó szolgálatot, ha valaki XML dokumentumként szeretne elkészíteni egy XML kézikönyvet. A CDATA részben elhelyezett szövegre egyetlen előírás van: nem fordulhat benne elő a CDATA részt lezáró ]]> (erre gyakran a CDEnd XML zsargonnal hivatkoznak) karaktersorozat. Ez nem túl nagy megszorítás, hiszen az előre definiált &gt; karakter entitás használatával ez elkerülhető (még egy XML kézikönyvet tartalmazó dokumentum esetén is).

elemek (Elements):

elem ::= tartalmas-elem | üres-elem

tartalmas-elem ::= kezdő-tag tartalom záro-tag

üres-elem ::= kezdő-tag nem-látható-karakterek záró-tag | üreselem-tag

kezdő-tag ::= <név [sp attribútum]… [sp]>

záró-tag ::= </név [sp] >

üreselem-tag ::= < név [sp attribútum]… [sp] />

Az elemek alapvetően két osztályba sorolhatók. Az olyanok, amelyek kezdő- és záró-tagja között akár tiszta (szerkezetleírót nem tartalmazó) szöveg, akár dokumentum elem, akár vegyesen mind a kettő előfordul, vagy olyanok, amelyek kezdő- és záró-tagja között semmi sincs. Bármilyen adat, amely egy elem kezdő- és záró-tagja között áll, az elem tartalma. A tartalom nélküli elemeket üres elemeknek hívjuk. Az üres elemek ún. üreselem-taggal is reprezentálhatók. Az üres elemek egyetlen szerepe, hogy attribútumaik legyenek.

attribútumok (Attributes):

attribútum ::= név=literál

Az attribútumok megadásakor a literál által képviselt ún. normalizált értéknek meg kell felelnie az attribútum deklarációban megadott attribútum típusnak. A literálban megadott érték normalizálása részben a nem-látható-karakterek szűrése (a bevezető és záró karakterek elhagyása, a köztes nem látható karakterek egyetlen szóközkarakterrel való helyettesítése), részben pedig a szerkezetleírók kifejtése (entitás hivatkozások föloldása). A legtriviálisabb szerkezetleíró kifejtés a befoglaló elhatároló jelek (idézőjel/aposztróf pár) elhagyása. A normalizáció során minden nem karakter entitással hivatkozott & szerkezetleíró értelmezést kap.