Egy jól-formázott XML dokumentumot önmagában tekintve csak egy karakterhalmazt látunk, azonban ennél többre is értékelhetjük ha megismerjük a belőle kinyerhető információtartalmat. A W3C ennek érdekében kidolgozott egy ajánlást, amit elnevezett InfoSet-nek és ebben kialakította a jól-formázott XML dokumentumok információtartalmának leírására szolgáló absztrakt adathalmazt.
Egy XML dokumentum rendelkezik Infoset-tel, ha
jól-formált,
megfelel a névtér-specifikációnak.
Azonban az érvényesség nem követelmény!
Alapvetően információelemekből áll, amelyek az XML dokumentumok
részeinek absztrakt leírása, melyhez névvel ellátott tulajdonságok tartoznak.
Legalább egy elemet, a gyökérként funkcionáló document elemet
tartalmazza. A legfontosabb információs elemek a következőek a létező 11 közül:
Dokumentum információs elem (ahonnan közvetlenül vagy közvetetten elérhetőek a további elemek)
[ children ], [ document element ], [ notations ], [ unparsed entities ], [ base URI], …
Element
[ namespace name ], [local name ], [ prefix ], [ children ], [ attributes ], …, [ parent ]
Attribute
[ namespace name ], [local name ], [ prefix ], [ normalized value ], [ attribute type ], [ references ], [ owner element ]
Character
[ character code ], [ element content whitespace ], [ parent ]
Namespace
[prefix], [namespace name]
A W3C oldaláról példa alapján könnyen megérthető, hogy miként is kell elképzelni ez az absztrakt információtartalmat.
<?xml version="1.0"?>
<msg:message doc:date="19990421"
xmlns:doc="http://doc.example.org/namespaces/doc"
xmlns:msg="http://message.example.org/">Phone home!</msg:message>Ennek az XML dokumentumnak az InfoSet-je az alábbi információt hordozza:
egy document elem
egy element elem "http://message.example.org/"
névtérnévvel, message lokális résszel és
msg prefix-szel.
egy attribute elem
"http://doc.example.org/namespaces/doc" névtérnévvel,
date lokális résszel és date
prefix-szel, amihez egy 19990421 normalizált érték tartozik.
három darab névtér elem: http://www.w3.org/XML/1998/namespace, http://doc.example.org/namespaces/doc, http://message.example.org/namespaces
két attribute elem a névtér attribútumokhoz
és 11 character elem a karakteres adatoknak.
Ezek után fontos még megemlíteni, hogy mi nincs jelen az InfoSet-ben:
a DTD tartalommodellje
a DTD neve
és lényeben bármi ami a DTD-ben megadott
a document elemen kívüli tördelő karakterek
a feldolgozó utasításokat követő tagoló karakterek
a karakterek megadási módja (referencia vagy valós leütés)
az üres elemek megadási módja
a nyitó címkéken belüli tagoló karakterek
a sorvégjel megadási módja ( CR, CR-LF vagy LF)
az attribútumok sorrendje
az aposztrófok fajtája (egyszeres vagy dupla)
a CDATA szakaszok határolói
Ami miatt lényeges volt ezt áttekinteni az az, hogy az InfoSet a feldolgozási stratégiákban visszaköszön, mert ez képzi az alapjukat. A legfontosabb implementációja a DOM és az XPath adatmodelljében van. Mielőtt azonban erre rátérnénk, még fontos megemlíteni, hogy létezik az InfoSet-nek egy kibővített változata, amelyet az érvényesítés során kapunk. Magát a folyamatot InfoSet Augmentation néven vezetik be, az általa előálló (augmentated InfoSet) dokumentumot pedig Post-Schema-Validated InfoSet (PSVI) néven ismerhetjük. A legfontosabb, hogy ezt érvényesítés során kapjuk, de erre a séma nyelvek közül csak az XML Schema használható fel.
A Dokumentum Objektum Modell (Document Object Model / DOM) egy platform- és nyelvfüggetlen standard programozói interfész amely a HTML, XHTML, XML valamint rokon formátumaiknak a szerkezetét és az objektumaikkal történő interakciókat modellezi. A DOM egymással szülő-gyermek kapcsolatban álló objektumok rendszere. A dokumentum tartalmát, illetve a dokumentum valamennyi összetevőjét magában foglalja és a módosítás eredménye mindig visszahat böngészők esetén a megjelenített oldalra.
Megszületése alapvetően az 1990-es évek böngészőháborújához vezethető vissza, melyet végül a W3C standardizálási folyamata fejezett be. A DOM legelső 1998-as verziója két újabb jelent meg, 2000 és 2004-ben. Jelenleg is a 2004-es ajánlás van érvényben, de 2012 óta készül a legújabb 4-es verziója is. Emellett még érdemes megemlíteni a 2012-ben az ajánlást még ugyan el nem érő, de már csak egy lépésre lévő szerver oldali események interfészét is.
A DOM architektúráját az alábbi ábra szemlélteti:
A DOM legfontosabb jellemzői:
a dokumentumot logikailag faként ( Node objektumok hierarchiája) kezeli ( szerkezeti modell )
objektummodell a klasszikus OO értelemben
a dokumentumok (és azok egyes részei) azonossággal, struktúrával, viselkedéssel és kapcsolatokkal is rendelkező objektumok
a DOM API kétféle lehetőséget biztosít:
egy öröklődési hierarchián alapuló OO megközelítést
egy egyszerű (kilapított) nézetet ( „ everything is a Node ” )
Alkalmas dokumentumok
létrehozására, felépítésére
szerkezetének bejárására
elemek ill. tartalom hozzáadására, módosítására, törlésére
modulokból áll (kékkel a DOM Core , sárgával az XML DOM)
A DOM használata a következő ábrával szemléltethető:
![]() |
A SAX egy eseményvezérelt értelmező, ami azt jelenti, hogy nem hoz létre egy reprezentációs modellt, mint a DOM, melyet aztán tetszőleges módon bejárhatunk, hanem a dokumentum feldolgozása - mintha csak végig olvasnánk - lineárisan történik. Egy adatfolyamként kezeli a dokumentumot és az értelmezés során bizonyos pontokhoz érve különböző események váltódnak ki, melyekre a programozó az API függvények megfelelő implementálásával reagálhat. A SAX alapvetően nem a W3C gondozásában áll, hanem mindig a Java nyelvi verzió a meghatározó.
A SAX használata a következő ábrával szemléltethető:
![]() |
A DOM-mal szemben nincsenek magának az XML dokumentumnak a reprezentálására szolgáló osztályok, hanem az értelmező egy interfészen keresztül szolgáltatja a feldolgozás alatt lévő dokumentumban szereplő adatokat az adott program számára függvényhívások segítségével. Alapvetően négy típussal dolgozik:
szöveges csomópontok
elem csomópontok
feldolgozó utasítások
megjegyzések.
Ez a módszer a SAX értelmezőnek rendkívüli gyorsaságot és kiváló memóriagazdálkodást kölcsönöz, ugyanis jóval kevesebb memóriát igényel, mint az előzőekben tárgyalt DOM értelmező. A nagy hátránya az, hogy használata bonyolultabb tervezést és implementálást eredményez, mivel nincsenek előre elkészített eszközeink, melyek segítségével a dokumentum szükséges részeit egyszerű módon ábrázolhatnánk és tárolhatnánk. Ezeket a fejlesztőnek kell megterveznie és megvalósítania.
A SAX API használata abban az esetben tanácsos, amikor nagy méretű XML dokumentumok feldolgozása a cél. Ebben az esetben egyrészt kevesebb tárterület szükséges az értelmezés alatt, másrészt lokális fájloknál jelentős sebességnövekedést érhetünk el a DOM API alkalmazásával szemben. Amennyiben belső referenciák használatára vagy az elemek véletlen elérésére van szükségünk - ezáltal a dokumentum jelentős részét használva -, akkor bonyolultsága miatt tanácsosabb hanyagolni ezt az API-t.
A DOM és a SAX gyors összevetése:
DOM
Fa alapú modell (az adatok csomópontokban vannak)
Gyors elérés
Lehetőség a csomópontok hozzáadására/törlésére
SAX
Markup elérésekor hívódnak meg a metódusok
Nagyobb teljesítmény
Kevesebb memória
Inkább csak a dokumentum végigolvasására, nem módosítására