XML (eXtensible Markup Language) bevezető II. rész
July 13th, 2007
Az első rész folytatása következik.
XML dokumentum logikai szerkezete
Egy XML dokumentum tartalma különböző összetevőkre bontható. XML-ben ezeket az összetevőket elemnek (element) nevezik.
Minden elem egy logikai részét jelöli a dokumentumnak, és tartalmazhat további elemeket, karaktereket (character data). Van egy elem, ami mindegyik másikat tartalmazza, ezt gyökér-elemnek (root-element) vagy dokumentum-elemnek (document-element) nevezik. Ezt a hierarchikus szerkezetet fa-szerkezetnek (tree) is nevezik, bár az elemek között lehetséges egyéb kapcsolatok (linkek) miatt inkább gráfról lehet beszélni.
Minden elemnek van típusa (neve), illetve lehet még nulla vagy több attribútuma (attribute). Az attribútumok az elemre vonatkozó tulajdonságokat tárolhatják.

XML dokumentum fizikai szerkezete (entity)
Az XML specifikáció lehetővé teszi az XML dokumentum több részre osztását. Ezeknek az egységeknek az angol neve „entity”. A dokumentum entity kivételével minden egyes entity névvel van ellátva, hogy nevük alapján hivatkozhassunk rájuk (entity reference). Egy entity lehet egy szöveg vagy egy karakter, vagy lehet akár egy egész fejezet egy könyvben, amely egy külsõ fájlban van tárolva. Az ilyen külsõ egységeket (external entity) az XML feldolgozó programok (XML processor) ismét karakterek sorozatává alakítják.
Mielőtt egy entity-re hivatkoznánk, deklarálni kell a dokumentum típus deklarációban:
a deklarációt követően a dokumentumon belül akárhányszor hivatkozhatunk rá:
Minden XML feldolgozó a következő beépített entity-ket tartalmazza (built-in entities):
| hivatkozás | értéke |
|---|---|
| < | < |
| > | &rt; |
| & | & |
| ' | ' |
| " | " |
Az entity-ket többnyire gyakran ismétlődő adatok egy külső központi fájlban tárolására használják. Így az esetleges módosítást csak egy helyen kell elvégezni. Hosszabb kifejezéseket egy rövidebb azonosítóval ellátva megkönnyítjük munkánkat, mivel a hosszú kifejezés helyett egy gyorsabban beírható rövid azonosítóval lehet rá hivatkozni.
Az egységeknek (entity) két fajtáját különböztetik meg attól függően, hogy a tartalma XML (parsed entity) vagy sem (unparsed entity vagy data entity).

Névtér (Namespace)
Vannak esetek, amikor egy XML dokumentum elemei egynél több nyelvtanból (DTD) származnak. Például az XSLT (lásd tovább) megkívánja, hogy az XSLT nyelv elemei mellett a cél dokumentum nyelvi elemei is szerepeljenek. Ebben az esetben az elemekről egyértelműen meg kell tudni mondani, hogy melyik nyelvből származnak. Mivel előfordulhat, hogy két különböző nyelvből származó elemnek ugyanaz lesz a neve, az elemek neve nem elég az egyértelmű azonosításukra. Ezt a problémát a namespace úgy oldja meg, hogy az elemek nevei elé egy prefixum kerül. A prefixum az adott névtér egyedi URI-je. A felhasznált névteret deklarálni kell.

XML feldolgozó
Az XML alkalmazások egyik legfontosabb kelléke az XML feldolgozó (XML processor). Az XML feldolgozó egy szoftver komponens, amely az alkalmazás és az XML fájl között helyezkedik el. Az XML feldolgozó egyik fontos része az adatfolyam elemző (parser), amely egy szabványos felületen (például W3C XML DOM) keresztül teszi elérhetővé az XML dokumentum szerkezetét, ami lényegesen megkönnyíti a programozók munkáját.
Az XML dokumentumok elérésére két szabványos API felület terjedt el:
- W3C XML DOM (Document Object Modell)
A DOM felépíti az XML adatfolyamnak megfelelő, objektumokból álló fát, aminek az elemeit ezután közvetlenül el lehet érni. Mivel az egész XML dokumentum struktúráját építi fel egyszerre a memóriában, hosszabb XML dokumentumok esetében jelentős memóriát vesz igénybe. Emiatt a DOM nem alkalmas nagyon nagy adattömegek feldolgozására. - SAX (Simple API for XML)
A SAX nem épít fel DOM szerkezetet, ugyanis itt az elemzés során mindíg csak az aktuális elem látható. A SAX emiatt nem teszi lehetővé az XML elemek közvetlen elérését, azokat csak sorosan olvassa fel, aminek következtében események generálódnak. Az elemző alkalmazás ezekre az eseményekre határozza meg az eseménykezelő metódusokat. A SAX nem olvassa be az egész XML dokumentumot a memóriába, így nagyobb adattömegek feldolgozására alkalmasabb, mint a DOM. A SAX egyelőre nem W3C ajánlás.
Az XML feldolgozó minden esetben ellenőrzi, hogy a beolvasott XML dokumentum helyesen formált-e (well-formed). Ha nem, akkor hibaüzenetet ad át az alkalmazásnak.
Egyes XML feldolgozók képesek az XML dokumentum érvényességét is vizsgálni, amennyiben az XML fájlhoz létezik valamilyen sémaleírás (DTD, XDR, XSD,..).
XML technológiák
Az XML megjelenése óta számos XML technológia jelent meg, amelyek gyakran előforduló XML-hez kapcsolódó problémákhoz nyújtanak segítséget.
- Xlink, Xpointer
A XLink és az XPointer hivatott felváltani a HTML egyszerű linkjét, összetettebb linkelési lehetőségeket kínálva. Az XLink különböző források – nem csak XML dokumentumok – címzését teszi lehetővé, míg az XPointer – az XPath segítségével, egy-két kiegészítéssel – az XML dokumentum egy részét címzi meg. - XDR (XML Data Reduced)
A Microsoft gyorsan lemondott a DTD használatáról, és gyors ütemben belekezdett egy XML formátumú sémaleíró nyelv kidolgozásába, amelyet a Word Wide Web konzorciumnak is elküldött szabványosításra. Amellett, hogy XML formátumú még jóval rugalmasabb is, mint a DTD. A DTD-ben leírt struktúrának maradéktalanul meg kell felelni egy XML dokumentumnak. Az XDR is tud ilyen szigorú lenni, de emellett azt is elő lehet írni, hogy az ellenőrizendő dokumentum egyes részeiben lehetnek további elemek is, amelyet a séma nem ír le.
Emellett az XDR bővíthető, azaz az igények megváltozásakor nem kell a sémát kidobni, csak egy másik névtér bevezetésével kiegészíteni a meglévőt. Utolsó, de nagyon fontos szolgáltatás az XDR-ben, hogy az elemek és attribútumoknak meg lehet adni a típusát (egész szám, karakter,..). - XSD, XML Schema Definition
- XPath (XML Path Language)
Az XPath XML dokumentumok részeinek címzésére szolgál, de tartalmaz néhány sztring alapműveletet is. Az XSLT és XPointer fejlesztések kapcsán hozták létre. A dokumentumot csomópontok (node-ok) halmazának tekinti. A node lehet bármilyen alkotórész: gyökérelem, elem, attribútum, karakteradat, névtér, feldolgozó utasítás, megjegyzés.

Leave a Reply