Streaming API for XML

Streaming API for XML (StAX) jest interfejsem programistycznym aplikacji (API) napisanym w języku Java, służącym do odczytywania i zapisywania dokumentów w języku XML. Standard ten jest zrealizowaną w Javie ideą parsingu strumieniowego. Został on opracowany w ramach JSR-173[1], a implementacja parsera była znana także jako Sun Java Streaming XML Parser.

Parsing strumieniowy

Tradycyjnie, API do obsługi XML zbudowane są na bazie modeli:

  • drzewa (DOM) – cały dokument XML jest wczytywany jako obiektowy model drzewa do pamięci operacyjnej, a programista może w dowolnym momencie pobrać referencje do dowolnego elementu;
  • zdarzeń (SAX) – dokument XML jest przetwarzany jednorazowo począwszy od początku, aż do końca, a programista określa szereg metod, które obsługują zdarzenia pojawiające się podczas przetwarzania danych.

Obydwa te podejścia mają zarówno swoje zalety jak i wady. DOM przykładowo oferuje bardzo łatwy, nieograniczony i intuicyjny dostęp do struktury dokumentu XML, lecz niestety w przypadku analizowania dużych dokumentów XML konsumuje olbrzymie zasoby pamięci operacyjnej, a ponadto jest dosyć wolny. SAX natomiast wręcz odwrotnie – nie konsumuje pamięci prawie wcale, jest bardzo szybki, lecz manipulowanie zdarzeniami dostarczanymi z parsera jest bardzo niewygodne, można wręcz rzec toporne, w zestawieniu z DOM.

StAX został zaprojektowany aby przynajmniej częściowo pogodzić te dwa podejścia. Metaforą przetwarzania strumieniowego w StAX jest kursor, który reprezentuje pojedynczy punkt w całym dokumencie XML. Programista zawsze wie, gdzie kursor się znajduje, może na żądanie przesuwać ten kursor do przodu i pobierać informacje z parsera wedle własnego uznania. Jest to podejście podobne do tego używanego w modelu zdarzeń takim jak SAX, lecz z tą różnicą, że informacje z parsera są przesyłane tylko na żądanie, a nie jak w przypadku SAX, który przesyła je bez względu na to czy są potrzebne czy też nie.

Geneza

StAX ma swoje korzenie w wielu niekompatybilnych pomiędzy sobą API do przetwarzania strumieniowego dokumentów XML, lecz przede wszystkim czerpie z bardzo szybkiego rozwiązania jakim jest XML Pull Parser (XPP) autorstwa Stefana Hausteina i Aleksandra Słomińskiego[2].

Istniejące implementacje

  • Implementacja referencyjna. stax.codehaus.org. [zarchiwizowane z tego adresu (2010-07-24)]. (dla specyfikacji JSR-173)
  • Woodstox. woodstox.codehaus.org. [zarchiwizowane z tego adresu (2015-05-25)]. otwarta implementacja StAX (na licencjach LGPL, AL)
  • SJSXP implementacja StAX stworzona przez Sun Microsystems (włączona do JDK v1.6 na licencji GPL v2.0)
  • Aalto – wysoce wydajny procesor XML (licencja GPL lub komercyjna)

Zobacz też

  • Obiektowy model dokumentu
  • SAX

Przypisy

  1. The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 173 [online], www.jcp.org [dostęp 2017-11-26] .
  2. IBM developerWorks : Sorry, that page no longer exists [online], www.ibm.com [dostęp 2018-02-09]  (ang.).

Linki zewnętrzne

  • Różnice pomiędzy DOM, SAX i StAX. blog.yamanyar.com. [zarchiwizowane z tego adresu (2012-08-16)]. (ang.)
  • Porównanie StAX i SAX (ang.)
  • Wstęp do StAX XML.com, Harold, Elliotte Rusty (ang.)
  • Java Streaming API for XML (StAX) – Tutorial. vogella.de. [zarchiwizowane z tego adresu (2012-02-09)]. (ang.)
  • Specyfikacja JSR (#173) (ang.)
  • Artykuły i zasoby dotyczące StAX zebrane przez Aleksandra Słomińskiego (ang.)
  • XMLPull.org. xmlpull.org. [zarchiwizowane z tego adresu (2010-07-24)]. (ang.)
  • Jak efektywnie używać StAX razem z JAXB. javarants.com. [zarchiwizowane z tego adresu (2008-08-28)]. (ang.)
  • StAX i Java na DevX.com (ang.)
  • StAX-Utils – zawiera zestaw klas pomocnych podczas integracji StAX w istniejących aplikacjach. (ang.)
  • StaxMate. staxmate.codehaus.org. [zarchiwizowane z tego adresu (2015-04-07)]. (ang.)