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.