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
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:
Esto se hace mediante un "parser" DOM,SAX o JDOM
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 .
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:
Puede ser agregado un nodo (Información) en cualquier punto del árbol.
Puede ser eliminada información de un nodo en cualquier punto del árbol.
Lo anterior se ejecuta sin incurrir en las penalidades o limitaciones de manipular un archivo de alguna otra manera.
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 ("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:
SAX es un "parser" ideal para manipular archivos de gran tamaño, ya que no ocupa generar un árbol en memoria como es requerido en DOM.
Es más rápido y sencillo que utilizar DOM
La sencillez antes mencionada tiene su precio, debido a que SAX funciona por eventos no es posible manipular información una vez procesada, en DOM no existe esta limitación ya que se genera el árbol jerárquico en memoria y es posible regresar a modificar nodos.
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.
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.
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