StAX
Streaming API for XML (StAX) je aplikační programovací rozhraní (API) pro čtení a zápis dokumentů XML, pocházející z komunity programovacího jazyka Java.
Tradičně jsou XML API buď:
- Založeno na DOMu - celý dokument je načten do paměti jako stromová struktura pro náhodný přístup volající aplikací,
- Založené na událostech - aplikace se registruje k přijímání událostí, jakmile se v zdrojovém dokumentu objeví entity.
Oba mají výhody: například DOM umožňuje náhodný přístup k celému dokumentu,[1] zatímco událostmi řízený algoritmus jako SAX, má malou paměťovou náročnost a je obvykle mnohem rychlejší.[2][3]
Tyto dva modely přístupu lze považovat za krajní protiklady. API založené na stromech umožňuje neomezený, náhodný přístup a manipulaci, zatímco API založené na událostech představuje „jednorázový“ průchod zdrojovým dokumentem.
Oproti nim byl StAX navržen jako kompromis mezi těmito dvěma protiklady. V modelu StAX je vstupním bodem programový kurzor, který představuje bod v dokumentu. Aplikace posouvá kurzor dopředu – „načítá“ (vytahuje, pull parser[4][5]) informace z analyzátoru podle potřeby. Tím se liší od API založeného na událostech – jako je SAX – které „vkládá“ (push parser[2]) data do aplikace – což vyžaduje, aby aplikace udržovala stav mezi událostmi podle potřeby pro sledování polohy v dokumentu.[4][5][6]
Počátky
[editovat | editovat zdroj]StAX má své kořeny v řadě nekompatibilních pull API pro XML, zejména v XMLPULL, jehož autoři (Stefan Haustein a Aleksander Slominski) spolupracovali mimo jiné se společnostmi BEA Systems, Oracle, Sun a Jamesem Clarkem.
Příklady
[editovat | editovat zdroj]Ze specifikace JSR-173 • Final, V1.0 (používá se v rámci fair use).
- Následující rozhraní Java API ukazuje hlavní metody pro čtení XML v kurzorovém přístupu.
public interface XMLStreamReader {
public int next() throws XMLStreamException;
public boolean hasNext() throws XMLStreamException;
public String getText();
public String getLocalName();
public String getNamespaceURI();
// ...other methods not shown
}
- Strana API pro zápis má metody, které odpovídají straně pro čtení pro typy událostí „StartElement“ a „EndElement“.
public interface XMLStreamWriter {
public void writeStartElement(String localName) throws XMLStreamException;
public void writeEndElement() throws XMLStreamException;
public void writeCharacters(String text) throws XMLStreamException;
// ...other methods not shown
}
- 5.3.1 XMLStreamReader
- Tento příklad ilustruje, jak vytvořit instanci vstupní továrny (Factory), dále čtečku (Reader) a iterovat přes prvky XML dokumentu.
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(...);
while (xmlStreamReader.hasNext()) {
xmlStreamReader.next();
}
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku StAX na anglické Wikipedii.
- ↑ Stromová reprezentace. www.kosek.cz [online]. [cit. 2026-03-21]. Dostupné online.
- 1 2 KOSEK, Jiří. Push parsery [online]. www.kosek.cz [cit. 2026-03-17]. Dostupné online.
- ↑ HEROUT, Pavel. Java a XML. 1. vyd. České Budějovice: Kopp, 2007. 316 s. ISBN 978-80-7232-307-4. Kapitola Java a XML, SAX, s. 117–145.
- 1 2 KOSEK, Jiří. Pull parsery [online]. www.kosek.cz [cit. 2026-03-17]. Dostupné online.
- 1 2 HEROUT, Pavel. Java a XML. 1. vyd. České Budějovice: Kopp, 2007. 316 s. ISBN 978-80-7232-307-4. Kapitola JWSDP, StAX, s. 195–211.
- ↑ Push vs Pull Parsing Approach: What They Are & Key Differences Explained for Beginners (SAX vs StAX) [online]. 2025-11-21 [cit. 2026-03-14]. Dostupné online. (anglicky)
Literatura
[editovat | editovat zdroj]- HEROUT, Pavel. Java a XML. 1. vyd. České Budějovice: Kopp, 2007. 316 s. ISBN 978-80-7232-307-4. Kapitola JWSDP, StAX, s. 117–145. – SAX, push parser
- HEROUT, Pavel. Java a XML. 1. vyd. České Budějovice: Kopp, 2007. 316 s. ISBN 978-80-7232-307-4. Kapitola JWSDP, StAX, s. 195–211. – StAX, pull parser
- KOSEK, Jiří. PHP a XML. 1. vyd. Praha: Grada, 2009. 368 s. ISBN 978-80-247-1116-4. Kapitola XMLReader, s. 163–168. – XMLReader, validující pull parser v PHP
Související články
[editovat | editovat zdroj]Konkurenční a doplňkové způsoby zpracování XML v Javě (pořadí je volně založeno na datu prvního zavedení):
- DOM (Document Object Model), první standardizovaný, jazykově/platformově nezávislý stromový model zpracování XML; alternativní stromové modely Java zahrnují JDOM, Dom4j a XOM
- SAX (Simple API for XML), standardní XML push API
- JAXB (Java XML Binding API), pracuje nad jiným parserem (obvykle streamovacím parserem), váže obsažená data do/z objektů Java.
Externí odkazy
[editovat | editovat zdroj]- Úvod do StAX XML.com, Harold, Elliotte Rusty
- Streamovací API pro XML v jazyce Java (Stax) – Výukový program
- XMLPull Patterns Článek o návrhových vzorech XML Pull (a StAX) od Aleksandera Slominského.
- StAX Parser - Článek o API pro kurzory a iterátory od HowToDoInJava.