Programación en castellano
-Tutoriales

El API JAXP


Los APIs JAXP

Esta página nos ofrece un mapa para que podamos encontrar un camino entre JAXP y los APIs XML asociados.

. Los APIs JAXP

Los APIs JAXP, contenidos en el fichero jaxp.jar, están comprendidos en el paquete javax.xml.parsers. Este paquete contiene dos factorías de clases neutrales: SAXParserFactory y DocumentBuilderFactory que nos ofrecen un analizador SAX y un DocumentBuilder, respectivamente. En cambio DocumentBuilder, crea un objeto Document compatible DOM.

Los APIs factoria nos ofrecen la habilidad de conectar una implementación XML ofrecida por otro vendedor sin cambiar nuestro código fuente. La implementación obtenida depende de la configuración de las propiedades del sistema javax.xml.parsers.SAXParserFactory y javax.xml.parsers.DocumentBuilderFactory. Los valores por defecto (a menos que los sobreescribamos en tiempo de ejecución) apuntan a la implementación de referencia de Sun, en com.sun.xml.

El resto de esta sección muestra cómo estos APIs se relacionan unos con otros en una aplicación. Busca este logo: que dentifica las partes de la explicación que trata exclusivamente de la implementación de referencia de Sun.

. Introducción a SAX y DOM

Como se explicó en la página anterior, los APIs SAX y DOM están definidos por el grupo XML-DEV y por el W3C, respectivamente. Las librerías que definen dichos APIs están incluidas en el fichero parser.jar, que también contiene la implementación de referencia de Sun, Project X.

El "API Simple" para XML (SAX) es el manejador de eventos, mecanismo de acceso serie que hace el proceso elemento-por-elemento. El API para este nivel lee y escribe XML al repositorio de datos o la Web. Para aplicaciones del lado servidor y de alto rendimiento, queremos entender completamente este nivel. Pero para muchas aplicaciones, un minimo entendimiento es suficiente.

El API DOM es generalmente fácil de usar. Proporciona una relativamente familiar estructura de árbol de objetos. Podemos usar este API para manipular el árbol de objetos que encapsula la aplicación. El API DOM es ideal para aplicaciones interactivas porque el modelo de objeto completo se presenta en memoria, donde puede ser accedido y manipulado por el usuario.

Por otro lado, construir el DOM requiere la lectura de toda al estructura XML y mantener el árbol de objetos en memoria, lo que significa un mayor consumo de CPU y de memoria. Por esta razón, el API SAX tiende a ser el preferido en aplicaciones del lado del servidor y filtros de datos que no requieren representación de datos en memoria.

. Los APIs SAX

Arriba podemos ver lo más básico del analizador SAX. Primero, el SAXParserFactory mostrado en la parte superior genera un ejemplar del analizador.

Luego se muestra el texto XML viniendo al analizador por la izquierda. Mientras los datos son analizados, el analizador invoca a varios métodos de retrollamada definidos por los interfaces DocumentHandler, ErrorHandler, DTDHandler, y EntityResolver.

Aquí tenemos un sumario de los APIs de SAX.

SAXParserFactory
Un objeto SAXParserFactory crea un ejemplar del analizador determinado por las propiedades del sistema, javax.xml.parsers.SAXParserFactory.

Parser
El interface org.xml.sax.Parser define métodos como setDocumentHandler para configurar manejadores de eventos y parse(URL) para hacer realmente el analisis. Este interface es implementado por las clases Parser y ValidatingParser del paquete com.sun.xml.parser.

DocumentHandler
Métodos como startDocument, endDocument, startElement, y endElement son invocados cuando se reconoce una etiqueta XML. Este interface también define métodos characters y processingInstruction, que son invocados cuando el analizador encuentra texto en un elemento XML o en una instrucción de procesamiento en línea, respectivamente.

ErrorHandler
Métodos como error, fatalError, y warning son invocados en respuesta a varios errores del analizador. El manejador de error por defecto lanza una excepción para los errores fatales e ignora los otros errores (incluyendo errores de validación). Esta es una de las razones por la que necesitamos conocer algo sobre analizador SAX, incluso si estamos usando DOM. Algunas veces, la aplicación podría recuperar un error de validación. Otra veces, podría necesitar generar una excepción. Para asegurarnos de su correcto manejo, necesitamos suministrar nuestro propio manejador de errores para el analizador.

DTDHandler
Los métodos definidos en este interface son invocados cuando se procesan definiciones en un DTD. Estos métodos se explican en Usar el DTDHandler y EntityResolver. Este interface extiende el interface com.sun.java.xmlDtdEventListener, que añade métodos como startDtd y endDtd.

EntityResolver
El método resolveEntity es invocado cuando el analizador debe identificar datos mediante un URI. En la mayoría de los casos, una URI simplemente es una URL, que especifica la localización de un documento, pero en algunos casos el documento podría estar identificado por un URN -- un identificador público, o nombre, que es único en el espacio Web. El indentificador público podría ser especificado en adicción a la URL. El EntityResolver puede decidir si usa el identificador público en lugar de la URL para localizar el documento, por ejemplo para acceder a una copia local del documento, si existe.

Una aplicación típica proporciona como mínimo un DocumentHandler. Como todas las implementaciones por defecto de los interfaces ignoran todas las entradas excepto los errores fatales, una aplicación robusta podría querer proporcionar un ErrorHandler para reportar más errores o reportarlos de forma diferente.

Nota:

La clase org.xml.sax.HandlerBase implementa todos estos interfaces con métodos nulos, para que podamos sobreescribir los métodos de los eventos que necesitemos procesar e ignorar los otros eventos.

. Paquetes

El analizador SAX está definido en los siguientes paquetes.

Paquete Descripción
org.xml.sax Define los interfaces SAX. El nombre "org.xml" es el prefijo de paquete que fue seleccionado por el grupo que definió el API SAX. Este paquete también define HandlerBase -- una implementación por defecto de la clase base para varios de los "handlers" definidos por los interfaces, así como una clase InputSource, que encapsula información que nos dice de dónde vienen los datos XML.
org.xml.sax.helpers Este paquete forma parte de SAX. Define la clase ParserFactory, que nos permite adquirir un ejemplar de un analizador especificando un nombre en un string o usando el valor definido por la propiedad del sistema org.xml.sax.parser. Este paquete también proporciona implementaciones para otros dos interfaces definidos en org.xml.sax, pero estas clases no son necesarias cuando se usan los anlizadores XML SAX Java de Sun.
javax.xml.parsers Define la clase SAXParserFactory que devuelve el SAXParser. También define la clase ParserConfigurationException para reportar errores.
com.sun.xml.parser Contiene el analizador Java XML com.sun.xml.parser.Parser), el analizador de validación (com.sun.xml.parser.ValidatingParser), y una entidad de resolución. El nombre totalmente cualificado de cualquiera de los analizadores puede ser enviado a la factoría de analizadores para obtener un ejemplar. El analizador sin validación genera errores si un documento no está bien formateado, y hace algún proceso del DTD (si existe) pero no chequea para asegurarse de que el documento obedece todas las restricciones definidas por el DTD. El analizador de validación, por otro lado, chequea para asegurarse que se obedecen dichas restricciones.

Nota Técnica:

Todos los analizadores sin validación no son iguales! Aunque sea necesario un analizador de validación para procesar todas las entidades externas referenciadas desde dentro de un documento, algo de ese proceso es opcional para una analizador sin validación. Con dicho analizador, una sección almacenada externamente del DTD que sea "incluida" en el documento actual usando una referencia de entidad podría no ser procesada. Además, no se requiere que un analizador sin validación identifique los caracteres en blanco ignorables (aunque un analizador de validación si debe hacerlo). En este caso, los caracteres en blanco que pueden ser legitimamente ignorados serían devueltos como parte normal del stream de caracteres. El analizador sin validación de la librería Java XML de Sun implementa estos dos comportamientos opcionales -- procesa todas las entidades externas e identifica todos los espacios en blanco ignorables.

. Otros Interfaces SAX

Además de la APIS descritos aquí, los APIs SAX definen otros cuantos interfaces que podremos querer usar cuando escribamos una aplicación SAX, así como un paquete de utilidades con un buen número de clases que son útiles para construir aplicaciones del mundo real.

. Los APIs "Document Object Model" (DOM)

El siguiente diagrama nos muestra los APIs JAXP en acción.

Usamos la clase javax.xml.parsers.DocumentBuilderFactory para obtener un ejemplar DocumentBuilder (superior izquierda), y usamos esto para producir un Document (un DOM) que cumple la especificación DOM (inferior derecha). De hecho, el constructor que obtenemos está determinado por la propiedad del sistema, javax.xml.parsers.DocumentBuilderFactory, que selecciona la implementación de la factoría que se usa para producir el constructor. (El valor por defecto de la plataforma puede sobreescribirse desde la línea de comandos).

Podemos usar el método newDocument() para crear un Documento vacío que implemente el interface org.w3c.dom.Document. De forma alternativa, podemos usar uno de los métodos analizadores del constructor para crear un Documento desde datos XML existentes. El resultado es un árbol DOM como el que vemos en la esquina inferior derecha del diagrama.

. Paquetes

La implementación de DOM está definida en los siguientes paquetes.

Paquete Descripción
org.w3c.dom Define los interfaces de programación DOM para documentos XML (y, opcionalmente HTML), según lo especificado por W3C.
javax.xml.parsers Define la clase DocumentBuilderFactory y la clase DocumentBuilder, que devuelve un objeto que implementa el interface Document W3C. La factoría que se usa para crear el constructor está determinada por la propiedad del sistema javax.xml.parsers, que puede ser seleccionada desde la línea de comandos o sobreescrita cuando llamamos al método newInstance. Este paquete también define la clase ParserConfigurationException para reportar errores.
com.sun.xml.tree La implementación Java XML de Sun de las librerías DOM, incluyendo las clases XmlDocument, XmlDocumentBuilder, y TreeWalker.

. Implementación de Referencia de Project X

Esta sección muestra cómo la implementación de referencia combina los APIs SAX y DOM.

Nota:

El material que queda en esta sección es específico de Project X, la implementación de referencia de Sun para el JAXP estándard. El material de esta sección no forma parte del estándard. Como no forma parte del estándard JAXP, las funcionalidades descritas aquí podrían muy bien ser implementadas de forma diferente en otros analizadores. Además, como los estándards evolucionan, las futuras versiones de la implementación de referencia JAXP podrían emplear diferentes mecanismos para conseguir los mismos objetivos.

. Introducción

En la implementación de referencia de Sun, el API DOM se construye sobre el API SAX como se ve en el siguiente diagrama.

La implementación que hace Sun del API DOM usa las librerías SAX para leer en los datos XML y construye el árbol de objetos de datos que constituye el DOM. Esta implementación también proporciona un marco de trabajo para ayudarnos a sacar el árbol de objetos como datos XML.

. Implementación

El siguiente diagrama muestra cómo opera el DocumentBuilder de Sun detrás de la escena.

La sección del diagrama que hay dentro de las líneas onduladas naranjas muestra qué hace la implementación de referencia de Sun cuando analizamos datos XML existentes.

El DocumentBuilder por defecto, crea un objeto que implementa el interface DocumentHandler de SAX. Entonces envía ese objeto a uno de los analizadores SAX (Parser o ValidatingParser, dependiendo de como estuviera configurada la factoría del constructor). Cuando se analiza la fuente de entrada, el DocumentHandler crea un objeto Document.

Nota:

Para controlar otros aspectos del comportamiento del analizador, usamos los métodos setErrorHandler y setEntityResolver de DocumentBuilder. Esta clase no implementa un método setDTDHandler. Sólo la mostramos aquí porque forma parte del analizador SAX.

. ¿Dónde podemos ir ahora?

En este punto, tenemos suficiente información para empezar a ojear las librerías XML a nuestro aire. Los siguientes pasos dependen de lo que queramos conseguir. Podríamos querer ir a.

Diseñar una estructura de Datos XML
Si estamos creando estructuras de datos XML para una aplicación y queremos algún consejo sobre cómo proceder. (Este es el siguiente paso en la introducción a XML).

Acceso Serie con el API Simple para XML (SAX)
Si ya se han determinado las estructuras de datos, y estamos escribiendo una aplicación del servidor o un filtro XML que necesita hacer el proceso lo más rápido posible.

Manipular Contenidos de Documentos con Document Object Model (DOM)
Si necesitamos construir un árbol de objetos desde datos XML para poder manipularlos en una aplicación, o convertirlos en un árbol de objetos en memoria para XML.
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados