|
||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
Programujeme s XML (7.) - Simple API for XMLSimple API for XML neboli SAX je alternativní rozhraní XML parserů,
osobně si myslím, že je pro běžného programátora užitečné jen ve velmi
speciálních případech, a proto se u něj jen rychle teoreticky zastavíme.
Simple API for XML neboli SAX na rozdíl od rozhraní DOM nenačítá dokument do stromu v paměti, ale pouze jej proudově čte a volá funkce/metody/signály, které si aplikace k tomuto účelu nastavila. Dle mého názoru to není příliš uživatelsky přívětivé, ale pokud pouze potřebujeme dokument rychle projít a nepotřebujeme funkcionalitu DOM, je to rozhodně rychlejší. Za zmínku jistě stojí, že většina implementací DOM používá SAX jako rozhraní k vlastnímu parseru. Implementací SAXu je velmi mnoho, a protože se nejedná o žádný standard, ale spíše takovou úmluvu, je každá poněkud odlišná. Proto se nebudu zabývat konkrétními detaily a omezím se pouze na popis jednotlivých událostí, které jsou ve všech implementacím více méně identické. charactersTato událost je vyvolána pro znaková data ve vstupním proudu. Stejně jako textové uzly v DOM stromu může být vyvoláná několikrát po sobě. V případě SAXu je tato situace navíc daleko pravděpodobnější, jelikož k událostem často dochází již při načítání dokumentu, které se může zastavit uprostřed textu. endDocumentTato událost je, jak již název napovídá, vyvolána na konci dokumentu. Také je vyvolána v případě, že dojde k nějaké chybě během zpracování (dokument není well-formed a podobně). endElementVýskyt uzavírajícího tagu elementu vyvolá tuto událost, jako parametr dostaneme jméno elementu a v případě SAX2 (s podporou jmenných prostorů) také jeho lokální jméno (část za dvojtečkou) a URI jmenného prostoru. endPrefixMappingTato událost dostupná pouze v SAX2 nás informuje o tom, že prefix jmenného prostoru pozbyl platnosti. Pro běžné zpracování dokumentu nepotřebujeme tuto událost nijak řešit. ignorableWhitespacePokud by naše aplikace potřebovala zpracovávat mezery, nové řádky a podobné znaky, které se v XML slučují do jednoho, použijeme tuto událost. processingInstruction
Událost skippedEntityPokud parser z nějakého důvodu přeskočí entitu, vyvolá tuto událost. Důvodem k přeskočení entity může být například to, že neví, za jaký obsah jí má nahradit. startDocumentToto je první skutečná událost, která je vyvolána při zpracování XML dokumentu. Je to vhodné místo pro přípravu datových struktur do kterých načítáme a podobně. startElementOtevírající tag elementu způsobí tuto událost. V parametrech nalezneme jeho jméno (a případně lokální jméno a URI jmenného prostoru) a atributy v podobě poměrně zajímavé datové struktury obsahující i různé další užitečné informace kromě hodnoty, ovšem právě v řešení této struktury se implementace často liší, například v PHP je použito běžné asociativní pole. startPrefixMapping
Tato událost, jež je protějškem události Při tvorbě tohoto popisu jsem vycházel z originální dokumentace javového SAX2 a SAX. Různé implementace se výrazně liší. Jistě se najdou aplikace, pro které je SAX vhodný, ale vzhledem k tomu, že se jedná o dost nízkoúrovňovou záležitost, myslím, že jako rychlý úvod tento článek stačil, a kdo má důvod SAX použít, jistě si sám potřebnou dokumentaci najde a nebo položí dotaz v diskuzi. Příště se, jak jsem již slíbil minule, podíváme na jazyk XSLT určený pro transformace XML dokumentů.
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |