Interfaces de programación de documentos XML

written by uve 5 April 2011

Como comentaba en el artículo anterior, últimamente estoy trabajando mucho con documentos XML. Con este artículo intentaré dar una visión general y muy breve acerca de qué es el XML y cómo podemos trabajar con documentos XML en un lenguaje de programación.

¿Qué es XML?

XML es un "lenguaje de marcas extensible", o lo que es lo mismo, un conjunto de reglas para la codificación de documentos. Es decir, XML no es un lenguaje particular, si no que nos permite definir un lenguaje propio basado en etiquetas.

Así por ejemplo, podríamos definir el siguiente documento XML:

<mema>
  <noticia>
    <titulo>Interfaces de programación de documentos XML</titulo>
    <autor>uve</autor>
  </noticia>
</mema>

Como éste es un documento válido (es decir, cumple las reglas que se establecen en XML), podemos hablar de "documento XML".

¿Qué son las interfaces de programación?

Básicamente son un conjunto de APIs que nos permiten parserar un documento XML desde un lenguaje de programación concreto. Cada lenguaje suele tener una o varias implementaciones de estas interfaces. No trato de explicar como hacer uso de ellas en algún lenguaje de programación, si no de dar una orientación de las más relevantes y cuándo interesa utilizar cada una de ellas.

Las dos interfaces principales son: DOM y SAX, aunque también comentaré un poquito de XPath.

DOM

DOM surgió para trabajar con los elementos de un documento HTML, aunque como ya he comentado, se trata de un API, lo cual nos permite trabajar con cualquier tipo de documento XML.

La idea es la siguiente, se carga el documento completo en memoria y se crea una estructura jerárquica en forma de árbol: document. A partir de aquí, se puede ir navegando entre los distintos elementos del documento y trabajar con ellos. Se pueden añadir/eliminar/modificar elementos y atributos de éstos.

SAX

SAX utiliza un sistema de procesamiento basado en eventos para procesar un documento, es decir, empieza a leer el documento en cuestión y en el momento en que detecta información relevante se lanza un evento. ¿A qué me refiero con información relevante? Cuando empieza o acaba el documento, cuando se detecta una etiqueta de inicio o cierre, cuando se procesa texto, ...

XPath

La idea básica, es recuepar parte del documento y hacer un procesamiento al estilo DOM. En lugar de cargar el documento completo, se contruye una expresión que nos permite el acceso a alguna parte concreta de documento.

Conclusiones

¿Cuándo utilizar un API u otra? Esto lo determinará el software que estemos desarrollando.

Ventajas de DOM

  • Es más simple para manejar
  • Permite la creación de documentos XML
  • Permite recorrer el árbol en cualquier sentido las veces que necesitamos

Inconvenientes de DOM

  • Necesita muchos más recursos para procesar el documento, en especial con documentos muy grandes

Ventajas de SAX

  • Es muy eficiente en el procesamiento y el uso de memoria, ya que se realiza "al vuelo"
  • Adecuado para trabajar con flujos de datos, en especial sockets

Incovenientes de SAX

  • Es más difícil de manipular
  • La lectura del documento es secuencial, por lo que no se puede avanzar o retroceder en el documento

Ventajas de XPath

  • Más eficiente en memoria que DOM, ya que no es necesario cargar el documento completo
  • Es más simple para manejar

Incovenientes de XPath

  • Sólo está disponible parte del documento

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.