Az XML dokumentum felépítése
Az XML (eXtensible Markup Language) a W3C által kifejlesztett szabvány. Olyan nyelvet definiál, amely kiválóan alkalmas adatszerkezetek leírására, adatok tárolására, különböző fájlformátumok meghatározására, adatszerkezetek konvertálására, adatcserére.
A Flash esetében épp ennek az utóbbi funkciónak van nagy jelentősége.
Maga a nyelv roppant egyszerű. Alkotóelemei a HTML-ből ismert tag-ek, amelyeket <> (kisebb-nagyobb) jelek között jelenítünk meg.
A tag-eket itt elemeknek is szokás nevezni.
Mivel az XML nem ír le formátumot, a felhasznált tag-ek és attribútumaik nevei nincsenek meghatározva, azok a leírt adatokból adódnak, és a fejlesztő maga adja meg őket.
Ha például CD lemezek adatait akarjuk eltárolni, használhatjuk a következő adatszerkezetet:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<cdtar>
...<cd>
......<cim>Vocal Rendezvous</cim>
......<szerzo>Di Meola Al</szerzo>
......<ar penznem=”HUF”>4990</ar>
......<kiadas>2006-0710</kiadas>
...</cd>
...<cd>
......<cim>Jó lesz 84</cim>
......<szerzo>Európa Kiadó</szerzo>
......<ar penznem=”HUF”>3290</ar>
......<kiadas>1984</kiadas>
...</cd>
...<cd>
......<cim>A napba öltözött leány</cim>
......<szerzo>Kormorán</szerzo>
......<ar penznem=”HUF”>6790</ar>
......<kiadas>2006</kiadas>
...</cd>
</cdtar>
Az első sor jelzi a dokumentumban alkalmazott XML szabványt és a karakterkódolást. Az XML dokumentumnak mindig egy ilyen formátumú sorral kell kezdődnie.
Ezután következnek a tag-ek, mint látjuk „beszédes” nevekkel. A tag-ek között a hozzájuk tartozó adattartalmak találhatók.
Az XML, Extensible Markup Language.
Az SGML-ből származó, adatszerkezetek és azoknak megfelelő adatok együttes szövegszerű leírására, és tárolására kidolgozott szabvány.
Legismertebb felhasználása az XHTML definiálása, de napjainkban a legkülönfélébb adat- és fájlszerkezetek definiálására használják. Az Office 2003 összes fájlformátumát XML-ben adták meg.
Az XML-hez számos bővítmény kapcsolódik, amelyek az XML adatszerkezetek definiálását és a dokumentumok feldolgozását könnyítik meg.
Az adatszerkezetek leírását a DTD, és az XML Schema, az adatok lekérdezést az XPath, és az XQuery teszi lehetővé, az XSLT segítségével pedig XML dokumentum típusok közötti konverzió valósítható meg.
Jól formázott XML dokumentum
Az XML dokumentum kétféle elvárásnak tehet eleget. Lehet jól formázott (well-formed), és lehet érvényes (valid).
A jól formázottság azt jelenti, hogy a dokumentum megfelel a formai követelményeknek:
Az elemeknek mindig kell, hogy legyen záró részük, ami a nyitórészben lévő nevet tartalmazza „/” jellel bevezetve:
<cd>…</cd>
vagy
<cd />
Minden elem úgy ágyazódik be, tehát a dokumentumnak van gyökéreleme
Az elemek nevében megkülönböztetjük a kis- és nagybetűket.
Az elemek attribútumokkal rendelkezhetnek, például: <ar penznem=”HUF”>
Érvényes XML dokumentum
Az XML dokumentum szerkezete szabad.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<cdtar>
...<cd>
......<cim>Vocal Rendezvous</cim>
......<szerzo>Di Meola Al</szerzo>
......<ar penznem=”HUF”>4990</ar>
......<kiadas>2006-0710</kiadas>
...</cd>
...<cd>
</cdtar>
Ha a fejlesztő úgy dönt, elnevezheti másképpen, vagy akár el is hagyhatja a CD-k árait tartalmazó elemet. Ma a dokumentum nem feltétlenül tartalmaz szabályokat saját szerkezetére nézve.
Létezik azonban két további szabvány, amelyekkel egy adatszerkezet egészen precízen leírható. Ezek közül a régibb, de még napjainkban is nagyon elterjedt a DTD (Document Type Declaration, illetve az újabb és teljesen XML kompatibilis az XML Shema).
Akkor mondjuk egy XML dokumentumról, hogy érvényes, ha megfelel a megadott DTD -nek, vagy XML Shema -nak.
DTD (Document Type Definition) XML dokumentumok szerkezeti felépítésének pontos leírására kialakított nyelv, amely az XML dokumentum elején, vagy külső fájlban helyezkedhet el. A DTD alapján eldönthető, hogy az XML dokumentum érvényes–e, azaz megfelel–e a DTD-ben lefektetett struktúrának.
Az XML Shema a W3C által 2001-ben deklarált nyelv, amely a DTD-hez hasonlóan az XML dokumentum szerkezetének leírására szolgál. Segítségével dokumentum formátumok, adatszerkezetek deklarálhatók, és eldönthető, hogy az XML dokumentum érvényes–e.
XSLT
Az XML dokumentumok leírása viszonylag egyszerű, feldolgozásuk azonban már korántsem mindig az. Az XML állományokkal való műveletvégzésre számos XML bővítményt fejlesztettek ki.
Az XPath egy kereső nyelv, amelynek segítségével egészen bonyolult XML dokumentumokban is pontosan és egyértelműen felkutathatunk bizonyos feltételeknek megfelelő elemet, vagy akár elemcsoportot.
Az XSLT olyan nyelv, mellyel a különböző XML formátumok közötti átalakítási folyamat írható le.
Számos cég gyárt olyan szoftvereket, amelyek képesek kezelni az XML dokumentumokat, és az XPath, illetve az XSLT segítségével különböző műveleteket tudnak végrehajtani. Az ilyen szoftvereket nevezzük XML processzoroknak vagy XML parser-nek.
Az alábbi XSLT a cdtar xml -t alapul véve előállítja az adatokat tartalmazó weblapot:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>CD tár</h2>
<table border="1">
<tr bgcolor="#66CCFF ">
<th align="left">Cím</th>
<th align="left">Szerző</th>
<th align="left">Kiadás</th>
<th align="left">Ár</th>
</tr>
<xsl:for-each select="cdtar/cd">
<tr>
<td><xsl:value-of select="cim"/></td>
<td><xsl:value-of select="szerzo"/></td>
<td><xsl:value-of select="kiadas"/></td>
<td><xsl:value-of select="ar"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Az <xsl:template match="/"> sor megkeresi a gyökérelemet (<cdtar>) és helyettesíti a táblázatot leíró tag-ekkel.
A gyökérelemen belül sorra vesz minden cdtar/cd útvonallal elérhető elemet <xsl:for-each select="cdtar/cd">, és egy sorral <tr>…</tr> helyettesíti azt. Ezen belül minden további elemnek egy cellát készít, és beleírja az elem tartalmát, például<td><xsl:value-of select="cim"/></td>.
Az eredmény az alábbi HTML oldal:
<html>
...<body>
......<h2>CD tár</h2>
......<table border="1">
.........<tr bgcolor="#66CCFF">
............<th align="left">Cím</th>
............<th align="left">Szerző</th>
............<th align="left">Kiadás</th>
............<th align="left">Ár</th>
.........</tr>
.........<tr>
............<td>Vocal Rendezvous</td>
............<td>Di Meola Al</td>
............<td>2006-0710</td><td>4990</td>
.........</tr>
.........<tr>
............<td>Jó lesz 84</td>
............<td>Európa Kiadó</td>
............<td>1984</td><td>3290</td>
.........</tr>
.........<tr>
............<td>A napba öltözött leány</td>
............<td>Kormorán</td><td>2006</td>
............<td>6790</td>
.........</tr>
......</table>
...</body>
</html>
Az XSLT (Extensible Stylesheet Language Transformations) egy XML alapú nyelv, amelyet XML dokumentumok transzformálásra, általában két különböző XML-ben megadott formátum közötti átalakításra fejlesztettek ki.
XPath
Az XPath az XML szabvány bővítménye, amely egy pontosan meghatározható szempontrendszernek megfelelő XML elemek kiválasztását teszi lehetővé.
Önmagában vajmi keveset ér, csupán más bővítményekkel együtt használható hatékonyan. Az XSLT az XML dokumentumok formai átalakítását képes elvégezni úgy, hogy elemeket választ ki és eltérő formátumúvá konvertálja őket. Az elemek kiválasztásához XPath kifejezéseket használ. Az itt látható <xsl:for-each select="cdtar/cd"> XSLT sor egy XML aktuális eleméből kiindulva kiválaszt minden cdtar/cd útvonallal elérhető elemet. A select attribútum értéke egy XPath -szal megadott útvonal.
Az XPath az XML dokumentumot felépítő elemek és elemcsoportok pontos és paraméterezhető címzésére kialakított nyelv.
XML kezelése Flashben
A Flash és a környezet közötti adatátadás számos formája ismert, ezek közül kiemelkedik az XML kezelésének lehetősége.
Az XML dokumentumok kezeléséhez rendelkeznünk kell egy XML objektum típusú változóval. Ha a változót deklaráltuk, használhatjuk az objektum metódusait XML állományok megnyitására és bennük lévő állományok feldolgozására. Az XML objektumok kezelése valójában minden komolyabb XML ismeret nélkül elvégezhető.
A példa az alábbi XLT dolgozza fel:
<?xml version="1.0"?>
<messages>
...<message>Ez a mozi egy fényújságot valósít meg!</message>
...<message>Próbáld ki Te is, nem nehéz!</message>
...<message>Az üzenetek XML-ben vannak tárolva.</message>
...<message>Az XML neve messages.xml</message>
</messages>
Az XML változó deklarálása a következőképpen történik:
var változónév:XML=new XML()
például
var msgXML:XML=new XML()
A deklarálás után létrejön az msgXML változó, amelyen keresztül elérjük az objektum metódusait.
//ezt a fájlt fogjuk beolvasni
//A cím lehetne egy PHP script címe is
//ebben az esetben a PHP állítaná elő az XML-t
var urlXML="messages.xml"
//létrehozzuk a változót
var msgURL:XML=new XML();
//nem vesszük figyelembe a fájlon belüli térközöket.
msgXML.ignoreWhite=true
//Beolvassuk a fájlt
msgXML.load(urlXML)
Az XML dokumentum beolvasása időt vesz igénybe, ezért a kezeléshez csak akkor kezdhetünk hozzá, ha a Flash érzékeli, hogy a fájl teljes egészében letöltődött.
Ehhez létre kell hozni egy eseménykezelő függvényt, amit a Flash automatikusan lefuttat, ha a letöltés befejeződött:
msgXML.onLoad=function(success){
if(success){
trace(msgXML)
} else {
trace(„Hiba a letöltéskor”)
}
Ha letöltéskor nem történt hiba if(sucess),akkor kiírjuk az állomány teljes tartalmát, különben hibaüzenetet küldünk.
A Flash XML feldolgozója
Amikor egy XML állomány letöltését elvégeztük, természetesen nem egyben, hanem megfelelő részletekben akarjuk feldolgozni a tartalmat. Előfordul, hogy az egyik részre kíváncsiak vagyunk, a másikra nem, sőt az is lehet, hogy egy elem tartama határozza meg, hogy melyik további elemmel akarjuk folytatni a feldolgozást.
A Flash-ben az elemek kiválogatását, a közöttük történő mozgást az XML objektum metódusai teszik lehetővé.
Képzeljük el az XML dokumentumot úgy, mint egy családfát, amely az őstől indul ki. Ezután a fa szintekre tagolódik, ahol minden szint egy szülőtől származó gyermekekből áll. Az ős az XML gyökéreleme, az első szinten az ő gyermekei vannak, és minden gyermekből további szint indulhat, amennyiben vannak leszármazottai.
A Flash XML metódusaival ebben a struktúrában mozoghatunk, és feldolgozhatjuk a csomópontok tulajdonságait. Gyakorlatilag az alábbi tulajdonságokra és metódusokra támaszkodhatunk:
childNodes: egy szülő node összes gyermekét tartalmazó tulajdonság
childNodes.length: egy node gyermekeinek száma.
childNodes[0]: az első gyermek node (számozásuk 0-val kezdődik)
attributes: egy node összes attribútumút tartalmazó tulajdonság
nextSibling: egy node-ot követő testvér node
previousSibling: egy node-ot megelőző testvér node
lastChield: egy node utolsó gyermek node-ja
firstChild: egy node első gyermek node-ja
nodeName: a node neve
nodeTyle: a node típusa
nodeValue: a node értéke.
Az XML kezelésben gyakran kap szerepet egy további, XMLNode típusú objektum, amely az XML egy node-ját reprezentálja. Metódusai megegyeznek az XML objektum eljárásaival.
Példánkhoz induljunk ki abból, hogy rendelkezésre áll egy cd.xml nevű állomány az SWF -el azonos könyvtárban.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<cdtar>
...<cd>
......<cim>Vocal Rendezvous</cim>
......<szerzo>Di Meola Al</szerzo>
......<ar>4990</ar>
......<kiadas>2006-0710</kiadas>
...</cd>
...<cd>
......<cim>Jó lesz 84</cim>
......<szerzo>Európa Kiadó</szerzo>
......<ar>3290</ar>
......<kiadas>1984</kiadas>
...</cd>
...<cd>
......<cim>A napba öltözött leány</cim>
......<szerzo>Kormorán</szerzo>
......<ar>6790</ar>
......<kiadas>2006</kiadas>
...</cd>
</cdtar>
Lefuttatjuk az alábbi kódot:
var urlXML="cd.xml"
var cdXML:XML=new XML()
cdXML.ignoreWhite=true
cdXML.load(urlXML)
cdXML.onLoad=function(success){
if(success){
var cd_root:XMLNode=cdXML.firstChild
var cd1_cime:XMLNode=cd_root.firstChild.firstChild.nextSibling.firstChild
trace("1. szerző: "+cd1_cime.nodeValue)
var osszes_cd=cd_root.childNodes.length
for(var i=0;i<osszes_cd;i++){
var cim=cd_root.childNodes[i].firstChild.firstChild.nodeValue
trace(i+1+". CD címe: " + cim)
}
} else {
trace("Hiba a letöltéskor")
}
}
A fenti kód az alábbi kimenetet generálja az Output ablakba:
1. szerző: Di Meola Al
1. CD címe: Vocal Rendezvous
2. CD címe: Jó lesz 84
3. CD címe: A napba öltözött leány
Vizsgáljuk meg a kódot és a kimenetet, próbáljuk értelmezni a prgramot!
gramot!