En computación , el API Java para XML Processing , o JAXP ( / dʒ æ k s p i / JAKS -pee ), uno de los Java XML interfaces de programación de aplicaciones , proporciona la capacidad de validar y analizar XML documentos. Tiene tres interfaces de análisis básicas:
- la interfaz de análisis del modelo de objetos de documento o la interfaz DOM
- la API simple para la interfaz de análisis XML o la interfaz SAX
- la API de transmisión para la interfaz XML o StAX (parte de JDK 6; jar separado disponible para JDK 5)
Además de las interfaces de análisis, la API proporciona una interfaz XSLT para proporcionar datos y transformaciones estructurales en un documento XML.
JAXP se desarrolló bajo el Proceso de la comunidad de Java como JSR 5 (JAXP 1.0), JSR 63 (JAXP 1.1 y 1.2) y JSR 206 (JAXP 1.3).
Versión de Java SE | Versión de JAXP incluida |
---|---|
1.4 | 1.1 |
1,5 | 1.3 |
1,6 | 1.4 |
1.7.0 | 1.4.5 |
1.7.40 | 1,5 |
1.8 | 1.6 [1] |
La versión 1.4.4 de JAXP se publicó el 3 de septiembre de 2010. El 12 de febrero de 2008, se declaró el final de la vida útil de JAXP 1.3 .
Interfaz DOM
La interfaz DOM analiza un documento XML completo y construye una representación completa en memoria del documento utilizando las clases y modelando los conceptos que se encuentran en la Especificación principal de nivel 2 del modelo de objetos de documento.
El analizador DOM se llama a DocumentBuilder
, ya que crea una Document
representación en memoria . Javax.xml.parsers.DocumentBuilder es creado por javax.xml.parsers.DocumentBuilderFactory. El DocumentBuilder
crea una org.w3c.dom.Document
instancia: una estructura de árbol que contiene nodos en el documento XML. Cada nodo del árbol de la estructura implementa la org.w3c.dom.Node
interfaz. Entre los muchos tipos diferentes de nodos de árbol, cada uno de los cuales representa el tipo de datos que se encuentran en un documento XML, los más importantes incluyen:
- nodos de elementos que pueden tener atributos
- nodos de texto que representan el texto que se encuentra entre las etiquetas inicial y final de un elemento de documento.
Interfaz SAX
Javax.xml.parsers.SAXParserFactory crea el analizador SAX, llamado SAXParser. A diferencia del analizador DOM, el analizador SAX no crea una representación en memoria del documento XML y, por lo tanto, se ejecuta más rápido y utiliza menos memoria. En cambio, el analizador SAX informa a los clientes de la estructura del documento XML invocando devoluciones de llamada, es decir, invocando métodos en una instancia org.xml.sax.helpers.DefaultHandler proporcionada al analizador. Esta forma de acceder al documento se denomina Streaming XML .
La DefaultHandler
clase implementa las interfaces ContentHandler, ErrorHandler, DTDHandler y EntityResolver. La mayoría de los clientes estarán interesados en los métodos definidos en la ContentHandler
interfaz que se llaman cuando el analizador SAX encuentra los elementos correspondientes en el documento XML. Los métodos más importantes de esta interfaz son:
startDocument()
yendDocument()
métodos que se llaman al principio y al final de un documento XML.startElement()
yendElement()
métodos que se llaman al principio y al final de un elemento de documento.characters()
método que se llama con el contenido de datos de texto incluido entre las etiquetas de inicio y finalización de un elemento de documento XML.
Los clientes proporcionan una subclase de DefaultHandler
que anula estos métodos y procesa los datos. Esto puede implicar almacenar los datos en una base de datos o escribirlos en una secuencia.
Durante el análisis, el analizador puede necesitar acceder a documentos externos. Es posible almacenar un caché local para documentos de uso frecuente utilizando un catálogo XML .
Esto se introdujo con Java 1.3 en mayo de 2000. [2]
Interfaz StAX
StAX fue diseñado como una mediana entre la interfaz DOM y SAX. En su metáfora, el punto de entrada programático es un cursor que representa un punto dentro del documento. La aplicación mueve el cursor hacia adelante, "extrayendo" la información del analizador según sea necesario. Esto es diferente de una API basada en eventos, como SAX, que 'empuja' datos a la aplicación, lo que requiere que la aplicación mantenga el estado entre eventos según sea necesario para realizar un seguimiento de la ubicación dentro del documento.
Interfaz XSLT
El X ML S tylesheet L anguage para T ransformations, o XSLT , permite la conversión de un documento XML en otras formas de datos. JAXP proporciona interfaces en el paquete javax.xml.transform que permite que las aplicaciones invoquen una transformación XSLT. Esta interfaz se llamó originalmente TrAX (API de transformación para XML) y fue desarrollada mediante una colaboración informal entre los desarrolladores de varios procesadores Java XSLT.
Las principales características de la interfaz son
- una clase de fábrica que permite a la aplicación seleccionar dinámicamente qué procesador XSLT desea utilizar (TransformerFactory, TransformerFactory.NewInstance (), TransformerFactory.newInstance (java.lang.String, _java.lang.ClassLoader)).
- métodos en la clase de fábrica para crear un objeto Plantillas, que representa la forma compilada de una hoja de estilo. Este es un objeto seguro para subprocesos que se puede usar repetidamente, en serie o en paralelo, para aplicar la misma hoja de estilo a varios documentos fuente (o al mismo documento fuente con diferentes parámetros) (TransformerFactory.newTemplates (javax.xml.transform. Source), también TransformerFactory.newTransformer (javax.xml.transform.Source), TransformerFactory.newTransformer ()), un método en el objeto Templates para crear un Transformer, que representa la forma ejecutable de una hoja de estilo (Templates.newTransformer ()) Este no se puede compartir entre subprocesos, aunque es reutilizable en serie. El transformador proporciona métodos para establecer los parámetros de la hoja de estilo y las opciones de serialización (por ejemplo, si la salida debe tener sangría) y un método para ejecutar la transformación. (Transformer.transform (javax.xml.transform.Source, _javax.xml.transform.Result)).
Se definen dos interfaces abstractas Fuente y Resultado para representar la entrada y la salida de la transformación. Este es un uso poco convencional de las interfaces Java, ya que no se espera que un procesador acepte ninguna clase que implemente la interfaz; cada procesador puede elegir qué tipo de fuente o resultado está preparado para manejar. En la práctica, todos los procesadores JAXP apoyan los tres tipos estándar de Fuente ( DOMSource
, SAXSource
, StreamSource
) y los tres tipos estándar de Resultado ( DOMResult
, SAXResult
, StreamResult
) y, posiblemente, otras implementaciones propias.
Ejemplo
El ejemplo más primitivo pero completo del lanzamiento de la transformación XSLT puede verse así:
/ * archivo src / examples / xslt / XsltDemo.java * / package examples.xslt ;import java.io.StringReader ; import java.io.StringWriter ;import javax.xml.transform.Transformer ; import javax.xml.transform.TransformerException ; import javax.xml.transform.TransformerFactory ; import javax.xml.transform.TransformerFactoryConfigurationError ; import javax.xml.transform.stream.StreamResult ; importar javax.xml.transform.stream.StreamSource ;public class XsltDemo { public static void main ( String [] args ) arroja TransformerFactoryConfigurationError , TransformerException { String xsltResource = " xml version = '1.0' encoding = 'UTF-8'?> \ n" + " \ n " + " \ n " + " \ n" + " world \ n " + " \ n " + " " ; String xmlSourceResource = " Xml version = '1.0' encoding = 'UTF-8'?> \ N" + " " ; StringWriter xmlResultResource = nuevo StringWriter (); Transformador xmlTransformer = TransformerFactory . newInstance (). newTransformer ( nuevo StreamSource ( nuevo StringReader ( xsltResource )) ); xmlTransformer . transform ( nuevo StreamSource ( nuevo StringReader ( xmlSourceResource )), nuevo StreamResult ( xmlResultResource ) ); Sistema . fuera . println ( xmlResultResource . getBuffer (). toString ()); } }
Aplica la siguiente transformación XSLT codificada:
xml version = '1.0' encoding = 'UTF-8'?> version = '2.0' xmlns: xsl = 'http://www.w3.org/1999/XSL/Transform' > método de salida = 'xml' sangría = 'no' /> match = '/' > select = '/ root / node / @ val' /> world
Al siguiente documento XML codificado:
xml version = '1.0' encoding = 'UTF-8'?> val = 'hello' />
El resultado de la ejecución será
xml version = "1.0" encoding = "UTF-8"?> hola mundo
Referencias
- ^ https://www.jcp.org/en/jsr/detail?id=206
- ^ Compare el índice API de Java 1.2.1 con el índice 1.3 . La Solicitud de especificación de Java (JSR) 5, Especificación de análisis de XML , se finalizó el 21 de marzo de 2000 .