La definición de un parser para DOM en XML no encuadra en ningún molde exacto, sino que es un diseño llevado acabo alrededor de especificaciones definidas por una organización que rige varios estándares en Internet : W3C, las especificaciones de DOM se encuentran en : http://www.w3.org/DOM , lo anterior implica que todo parser que se dice cumplir con DOM gira alrededor de los mismos conceptos, esto permite que al aprender a utilizar un parser DOM para Java la utilización de parsers para Perl y C++ sea transparente; la versión estable más reciente de DOM es 2.0 .
El diseño de SAX fue realizado por David Megginson, en sus etapas iniciales SAX fue puramente java, sin embargo, hoy en día ya ha sido portado para diversos lenguajes de programación, sus definiciones se encuentran http://www.saxproject.org/ , el mismo proceso de utilización para DOM se aplica en SAX, el aprender SAX en "x" lenguaje es muy similar al resto; la versión más reciente de SAX es 2.0
El lenguaje en mayor uso para procesar XML es Java y al parecer lo seguirá siendo, sin embargo , en los primeros diseños de parsers para este lenguaje muchos procesos de decisión fueron dejados a libertad de los diseñadores de parsers, esto es, las especificaciones no fueron lo suficientemente estrictas.
Lo anterior trajo un gran problema a la promesa "Java" de "Write-once, run everywhere" (Crearlo una Vez ejecutarlo en todos lados), un programa escrito para trabajar con un parser Oracle no era interoperable con uno como XT o Xalan, debido a esto surgió JAXP ("Java API for XML Processing"), através de "JAXP" los diversos parsers garantizan la interoperabilidad Java, hoy en día JAXP es incluido en todo JDK (1.4) diseñado para Java, para aquellos desarrollos en XML que utilicen un JDK menor al 1.4, es necesario incluir dichas librerías JAXP para garantizar una interoperabilidad entre los diversos parsers Java, finalmente se debe hacer fuerte énfasis en que JAXP no es un parser sino una manera de lograr interoperabilidad entre los diversos parsers escritos para Java.
Al utilizarse un parser se debe tomar la decisión de utilizar DOM o SAX y por lo general la primer alternativa es utilizar SAX; una de las principales ventajas de SAX es que esta basado en eventos, esto garantiza que el procesamiento de información requiera muy pocos recursos comparado con DOM. Eventos ? Que eventos ?
El término evento se refiere al acontecimiento de sucesos en un fragmento/documento XML, este puede ser el inicio de un elemento, la terminación de éste , el inicio de espacio o algún otro. Los principales eventos utilizados en SAX son startElement
, endElement
y characters
, estos representan la lógica que deberá ser ejecutada al llevarse acabo cada evento. Cuando se llevan acabo los eventos ? Observe el siguiente fragmento de XML donde se indican los respectivos eventos:
Los pasos anteriores son llevados acabo para todo elemento dentro del documento/fragmento XML, como fue mencionado, pueden ser definidos otros eventos dentro del programa que serian ejecutados/disparados según fuera requerido. Es dentro de estas funciones y todas aquellas definidas dentro del programa que se define que debe ser hecho con la información del documento XML.
Aunque el uso de SAX presenta una manera eficiente y rápida de procesar información en XML, sus mismas características pueden ser una grave deficiencia, debido a que una vez suscitado el evento en cuestión no es posible retroceder hacia éste, si al momento de estar procesando "x" elemento es necesario hacer referencia a otro antes analizado esto no es posible, para este tipo de situaciones DOM presenta una solución idónea.
Al procesar un documento XML através de DOM se genera lo que es denominado: árbol jerárquico en memoria, este árbol contiene toda la información del fragmento/documento XML en cuestión, cada elemento del documento pasa a ser un nodo del árbol, por lo que en DOM todo es un nodo. La principal ventaja de este mecanismo es que toda la información XML se encuentra en memoria, esta residencia en memoria permite que los datos puedan ser navegables por el programa DOM , lo anterior permite regresar a manipular información que no hubiera sido posible através de SAX.
Sin embargo, la misma generación de este árbol jerárquico puede convertirse en una gran desventaja, ya que para documentos de gran tamaño puede consumir los recursos de un servidor en forma excesiva; la manipulación de este árbol jerárquico en memoria también es llevado acabo através de diversas funciones definidas para DOM las cuales serán ilustradas en el siguiente ejemplo.
A pesar de existir diversos parsers XML para Java con soporte tanto para SAX y DOM, de cierta manera presentaban varias deficiencias dentro de estos ambientes y por esto se inicio trabajo sobre lo que hoy se conoce como JDOM.
La iniciativa de JDOM es llevada acabo por Jason Hunter y Brett McLaughlin, a pesar que actualmente JDOM aún se encuentra en versión 1.0
ha tenido una gran aceptación en el mundo Java , inclusive ya ha sido aceptado como JSR-102 ( http://java.sun.com/aboutJava/communityprocess/jsr/jsr_102_jdom.html ) (un JSR es el proceso por el cual se adopta formalmente una especificación Java en Sun Microsystems); las especificaciones y binarios de JDOM se encuentran en : http://www.jdom.org/ .
template
, XPath, Condicionales y Ciclos en XSL.