Streaming API for XML (StAX) es una interfaz de programación de aplicaciones (API) para leer y escribir documentos XML, originaria de la comunidad del lenguaje de programación Java.
Tradicionalmente, las APIs XML son de uno de tos dos tipos:
basadas en DOM - todo el documento es leído en memoria como una estructura de árbol para acceso aleatorio por la aplicación llamante
basadas en eventos - la aplicación se registra para recibir eventos según las entidades se encuentran en el documento de origen.
Ambos tienen ventajas, el primero (por ejemplo, DOM) permite acceso aleatorio al documento, el segundo (por ejemplo, SAX) requiere una pequeña huella de memoria y es típicamente mucho más rápido.
Estos dos paradigmas de acceso pueden ser considerados como polos opuestos. Una API basada en un árbol permite acceso y manipulación ilimitados y aleatorios, mientras que una API basada en eventos es un pase de 'una sola vez' a través del documento de origen.
StAX fue diseñado como un término medio entre estos dos polos opuestos. En el paradigma StAX, el punto de entrada de programación es un cursor que representa un punto dentro del documento. La aplicación mueve el cursor hacia adelante ("tirando" de la información del analizador según necesita). Esto es diferente de una API basada en eventos, como SAX, que "empuja" los datos a la aplicación (requiriendo que la aplicación mantenga el estado entre los eventos puesto que es necesario para realizar un seguimiento de la ubicación dentro del documento).
Origen
editar
StAX tiene sus raíces en una serie de APIs de tipo pull para XML incompatibles, más notablemente XMLPULL, los autores de la cual (Stefan Haustein y Aleksander Slominski) colaboraron con, entre otros, BEA Systems, Oracle, Sun y James Clark.
Ejemplos
editar
De la especificación final de la JSR-173 V1.0 (utilizada bajo el uso justo).
Cita:
La siguiente API de Java muestra los principales métodos para leer XML en el enfoque del cursor.
publicinterfaceXMLStreamReader{publicintnext()throwsXMLStreamException;publicbooleanhasNext()throwsXMLStreamException;publicStringgetText();publicStringgetLocalName();publicStringgetNamespaceURI();// ...otros métodos no mostrados}
La parte de escritura de la API tiene métodos que corresponden a la parte de lectura para tipos de eventos “StartElement” y “EndElement”.
publicinterfaceXMLStreamWriter{publicvoidwriteStartElement(StringlocalName)throwsXMLStreamException;publicvoidwriteEndElement()throwsXMLStreamException;publicvoidwriteCharacters(Stringtext)throwsXMLStreamException;// ...otros métodos no mostrados}
5.3.1 XMLStreamReader
Este ejemplo ilustra cómo crear una instancia de una fábrica de entrada, crear un lector e iterar sobre los elementos de un documento XML.
Document Object Model (DOM), el primer modelo de procesamiento de XML basado en árbol, estandarizado e independiente del lenguaje/plataforma, modelos de árbol alternativos de Java incluyen JDOM, Dom4j y XOM.
Java XML Binding API (JAXB), trabaja sobre otro analizador (usualmente un analizador de streaming), une los datos contenidos a/en los objetos de Java.
Streaming XML
XQuery API for Java
Enlaces externos
editar
Implementaciones Java
Sun Java StAX XML Processor(enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). Open source. Ships as part of Sun Java Standard Edition 6 runtime.
Reference Implementation (for JSR-173, API specification, under the Apache Software License)
Woodstox Open source StAX implementation (LGPL or Apache license)
Aalto is an ultra-high-performance parser (Apache license)
Utilidades y add-ons
StAX-Utils Provides a set of utility classes that make it easy for developers to integrate StAX into their existing XML processing applications.
StAX-Utils includes classes to provide XML file indenting and formatting.
StaxMate is a light-weight framework that builds on top of Stax API and provides more convenient nested/filtered cursor for reading xml, nested outputters for writing xml (with optional indentation) and other tools (build DOM from Stax sources, write to Stax destinations) for interoperability.
Analizadores construidos sobre StAX
Apache Axiom is a light weight XML object model based on top of Stax and also provides lazy object building.
Apache Pivot uses StAX for the serialization of user interface markup written in BXML.
JavaFX 2.0 uses StAX for the serialization of user interface markup written in FXML.
Analizadores no estándar similares a StAX
XPP Parser based on the very similar but older XMLPull API.
Javolution provides a real-time StAX-like implementation which does not force object creation (e.g. String) and has smaller effect on memory footprint/garbage collection (Note: to reduce object creation, most StAX implementations maintain lookup tables to retrieve and reuse frequently used String objects).