DOM,SAX,JDOM y JAXP en XML

Para entender que es DOM,SAX o JDOM es necesario retroceder un poco a lo que es manipulación de Datos en un sistema de Información, un tema que ya fue mencionado en bases de datos y manipulando archivos en Perl

Un Archivo de Texto

Fernanda:Fontes:Macae:Brasil:27
Luis:Arano:Mendoza:Argentina:27 
Hrvoje:Galic:Zagreb:Hrvatski:28

El manipular el archivo anterior ("flat-file") ya sea para actualizarlo o agregar una linea tiene sus limitaciones ( manipulando archivos en Perl ), esta situación solo se agrava si desea intercambiar archivos de este tipo a otros sistemas de computo o empresas, ya que no existe ninguna indicación sobre el significado de cada elemento, esto es, el tercer elemento es país o ciudad ? La división de elementos siempre será : (dos-puntos) ? La solución es generar un documento descriptivo, por ende, en XML.

<Amigos>

    <Nombre> Fernanada </Nombre>
    <Apellido> Fontes</Apellido>
    <Ciudad> Macae </Ciudad>
    <Pais> Brasil </Pais>
    <Edad> 27 </Edad>

    <Nombre> Luis  </Nombre>
    <Apellido> Arano</Apellido>
    <Ciudad> Mendoza </Ciudad>
    <Pais> Argentina </Pais>
    <Edad> 27 </Edad>

    <Nombre> Hrvoje  </Nombre>
    <Apellido> Galic </Apellido>
    <Ciudad> Zagreb </Ciudad>
    <Pais> Hrvatski </Pais>
    <Edad> 28 </Edad>
</Amigos>

Como ya fue mencionado en la sección básica de XML , XML esta compuesto por elementos descriptivos (Meta-lenguaje) con sus valores correspondientes (Nombre,Apellido,Ciudad,etc) esto facilita el uso de este archivo a otros sistemas de computo o empresas, ahora bien, la pregunta que continuaría es:

Ya se tiene la información en formato XML, como se utiliza o traslada esta información a un programa en Java , Perl , o una aplicación de servidor ?

Esto se hace mediante un "parser" DOM,SAX o JDOM

DOM

DOM ("Document Object Model") es solamente una especificación definida por el "World Wide Web Consortium" , esto es muy similar al J2EE de Sun , ya que permite a diversas compañías u organizaciones definir "parsers" alrededor de esta especificación. La especificación DOM más reciente es 2.0 y la gran mayoría de los "parsers" DOM disponibles ya cumplen con ella.

Uno de los "parsers" en mayor uso es llamado Xerces y es desarrollado por la fundación Apache , Xerces es un fully-validating parser disponible en los lenguajes Java y C++, inclusive existe un "wrapper" para Perl lo cual permite manipular documentos en XML desde un programa en Perl .

Pero cual es la diferencia entre manipular información con DOM o simplemente abriendo el archivo con un File-Handle ?

DOM genera un árbol jerárquico en memoria del documento o información en XML, basándose del documento anterior cada elemento <Amigos> , <Nombre> , <Apellido> ..etc. es considerado un nodo dentro del árbol. Este árbol jerárquico de información en memoria permite que a través del "parser" ( Xerces o algun otro) sea manipulada la información, las ventajas serian las siguientes:

Debido a que DOM es solo una especificación existen diversos "parsers" DOM.

Un detalle notorio de cualquier "Parser" es que la mayoría están escritos en Java , esta no es ninguna coincidencia ya que Java es uno de los lenguajes que permite mayor portabilidad entre Sistemas Operativos. Ahora bien, a pesar de esta portabilidad en Java, DOM es solo una especificación y por ende existen diversas implementaciones, esto lleva a otra pregunta clave..... Si desarrollo una aplicación que utilice el "Parser" Xerces este programa puede ser utilizado posteriormente con un DOM desarrollado por Oracle ? ...NO!.

El utilizar un "Parser" implica aprender a utilizar sus clases|funciones o API ("Application Programming Interface"), como el API de Xerces , sin embargo, ciertas clases|funciones difieren un poco en los diversos "Parsers" , por eso se recomienda (si utiliza Java) que los programas|aplicaciones que requieran de las funcionalidades de un "Parser" sean diseñadas alrededor de JAXP ("Java API for XML Processing") .

SAX

SAX ("Simple API for XML") procesa ("parse") el documento o información en XML de una manera muy diferente a DOM, SAX procesa la información por eventos. A diferencia de DOM que genera un árbol jerárquico en memoria , SAX procesa la información en XML conforme esta sea presentada (evento por evento), efectivamente manipulando cada elemento a un determinado tiempo , sin incurrir en uso excesivo de memoria. Por lo tanto puede notar las siguientes características:

La especificación más reciente de SAX es 2.0, y al igual que DOM 2.0 esta se incluye en casi todos los "Parsers" disponibles en el mercado.

Habrá notado que los links anteriores lo llevan a la misma página indicada por los "Parsers DOM" y esto se debe que casi todos los "Parsers" incluyen tanto una implementación para DOM como para SAX y dependiendo de su situación tiene la flexibilidad de utilizar DOM o SAX. Las palabras "es capaz de utilizar" hacen resurgir un tema ya mencionado: Es posible migrar o adaptar un programa | aplicación a diferentes parsers como "Xerces",Oracle o XP ? Si utiliza Java, para esto surgió JAXP.

JAXP

Si ya esta en esta sección se preguntará: Para que cambiar de "Parser" ?, siempre utilizare "Xerces"...eventualmente es posible que su sistema de información empiece a utilizar Oracle o quizás descubra que determinado "Parser" utiliza menos memoria y es más veloz en ejecución para su aplicación. De cualquier manera siempre es conveniente insular una aplicación de cualquier incompatibilidad y es mediante JAXP que se logra esta independencia de "parsers" XML.

Sin embargo, probablemente la principal razón detrás de JAXP es precisamente la interoperabilidad "Write once run everywhere" (Escribalo una vez ejectulo en todos lados) de Java, al existir diversos "Parsers" escritos en Java lo anterior resultaría falso y por esta razón Sun ideo JAXP; JAXP no es "Parser" sino un grupo de clases integradas a todo "Parser" , esto garantiza que un programa escrito hacia un "Parser" con soporte JAXP puede ser migrado a otro sin ningún problema.

Otra inclusión en JAXP es TraX que también es un grupo de clases que permiten interoperabilidad Java entre los diversos XSL Engines , esto permite un migración entre estas herramientas utilizadas en XSL; vale mencionar que TraX es parte JAXP.

JDOM

A pesar de existir diversos "Parsers" para ambientes Java las metodologías SAX y DOM no fueron diseñadas con Java en mente, con la intención de proporcionar una metodología para procesar XML más acorde con el mundo Java surgió JDOM. Aunque JDOM se encuentra en las etapas iniciales de diseño (Versión 0.x y Beta) ha causado un gran interés debido a la sencillez de procesar XML con Java comparado con DOM o SAX.

El sitio de JDOM: http://www.jdom.org