XML. Después de la fiebre.

Hace poco más de cinco años, la industria de software –y sobre todo los medios de comunicación relacionados con ella– fue sacudida por una fiebre; la fiebre del XML. A diestra y siniestra se hablaba de él, y cómo revolucionaría el mundo del software, facilitando la integración de datos, interoperabilidad de sistemas, servicios asíncronos, etcétera.

Hoy podemos decir, que la fiebre es cosa del pasado. No por ser pasajera, o porque no haya funcionado; sino porque es una realidad. XML es lo que habilita la mayoría de los sistemas de información modernos. Prácticamente, todas las innovaciones en software que hemos visto en los últimos años, son habilitadas por XML. Así que, ha llegado a un punto en el que es algo tan obvio y natural, que no se hace ruido al respecto.

La razón por la que menciono esto, es porque cuando XML empezó a sonar por todas partes, de seguro muchos de nosotros agregamos en la lista mental de cosas por hacer, una tarea de “aprender XML”. El problema es que, la mayoría de nosotros no lo hizo; y dado que ya ni suena, probablemente ya hasta eliminamos esa tarea pendiente. Creo que esto es un riesgo inaceptable. El conocimiento de XML, aunque sea a un nivel fundamental, es algo que no podemos pasar por alto. Por tal razón, este número, decidimos enfocar la sección de fundamentos a XML.

¿Qué es XML? XML (eXtensible Markup Language) se define como un lenguaje de propósito general para crear lenguajes de propósito específico. Estos no son lenguajes de programación, sino de marcado, o etiquetado, para definir información. Así que, en términos terrenales, podemos decir que XML simplemente es una forma de describir datos. El objetivo es permitir que un documento pueda crearse por una persona, empresa, o sistema, y posteriormente, interpretado por otra persona, empresa, o sistema completamente diferente; sin necesidad de conocer nada sobre quién, o cómo creó el documento.

Sintaxis Como ya explicamos, un documento XML está compuesto por elementos de información. La sintaxis general de un elemento, corresponde a la forma:

< nombre atributo="valor" >contenido

Veámos ahora un documento completo:


< receta nombre="pan" tiempo_preparacion="5" tiempo_horneo="3" >
< ingrediente cantidad="3" unidad="taza">Harina > /ingrediente <
< ingrediente unidad="”cucharada”" cantidad="1" > Levadura < /ingrediente >
< ingrediente estado="caliente" unidad="taza" cantidad="1.5" > Agua < /ingrediente >
< ingrediente unidad="cucharada" cantidad="1" > Sal < /ingrediente >
< instrucciones >
< paso > Mezclar los ingredientes y amasarlos < /paso>
< paso > Depositar en recipiente y hornear.< /paso >
< /instrucciones >
< /receta >

La primera línea, es la declaración XML. Es una línea opcional que indica la versión de XML que se está utilizando. La declaración puede contener información adicional, como la codificación de caracteres a utilizar, así como dependencias a elementos externos.

El resto del documento consiste en elementos anidados. Cada elemento se define por una etiqueta de inicio, el contenido, y una etiqueta de cierre (la cual lleva una diagonal antes del nombre de la etiqueta). Una etiqueta, puede o no tener atributos con valores, mismos que proveen información adicional sobre el elemento.

Un documento XML puede contener una cantidad indefinida de elementos. Y un elemento, puede a su vez, contener otros elementos.

Documentos correctos
Para que un documento XML sea correcto, necesita estar “bien formado”, y ser “válido”. ¿Qué significa esto?
• Bien formado: un documento bien formado, es aquél que respeta la sintaxis de XML, descrita con anterioridad. Por ejemplo, si un elemento tiene una etiqueta de inicio, pero le falta la de cierre, entonces no está bien formado, y por lo tanto no sirve, ya que no puede ser interpretado (parsed).
• Válido: un documento válido es aquél que, además de estar bien formado, cumple con las reglas que establece un esquema XML.
¿Y qué es un esquema XML? Pues es una especificación que define los tipos de elementos (y restricciones para éstos) que puede contener un documento XML. Imaginemos que nos interesa utilizar XML para representar la información de los subscriptores de SG. Resulta que un subscriptor tiene una dirección de entrega. Dicha dirección está compuesta por calle, número externo, número interno (opcional), colonia, ciudad, estado y código postal. Adicionalmente, hay que restringir el código postal a 5 dígitos. Todo este tipo de reglas, deben capturarse en algún lugar. Ese lugar, es el esquema XML que define a los documentos que contienen “Suscriptores SG”.

Formatos para esquemas
Por desgracia, no existe un estándar único para definir esquemas XML. El formato más antiguo, y posiblemente el más usado, es el Document Type Definition (DTD), incluido como parte de XML 1.0. El problema con DTD, es que no soporta algunos aspectos avanzados que fueron incorporados en XML 1.1, que es la versión más reciente.
XML Schema es un formato de más reciente creación, y mucho más poderoso que DTD. El problema es que también, es mucho más complejo, lo que ha desalentado su aceptación. Por tal razón, surgió el formato RELAX NG, es más sencillo que XML Schema, pero sin perder capacidades avanzadas.

Extensiones XML
Como su nombre lo indica, permiten extender las capacidades básicas de XML, para generar nueva funcionalidad. Algunas de las extensiones XML más importantes son: • XPath. Permite hacer referencia a partes específicas de un documento XML, de tal forma que se puedan acceder por otras herramientas, y tecnologías. XPath puede hacer referencia a cualquier detalle de información en un documento XML; sean datos, atributos, instrucciones de procesamiento, comentarios, etcétera.
• XQuery. Es un lenguaje para acceder datos XML. Podemos decir que XQuery es para XML, lo que SQL es para las bases de datos relacionales.
• XML namespaces. Permite evitar colisiones de nomenclatura. Cuando diferentes elementos o atributos tienen un mismo nombre, pero se refieren a conceptos diferentes.
• XML encryption. Define la sintaxis y reglas para cifrar contenido XML.

Procesamiento de XML
Para procesar datos XML, es necesario “parsearlos” (ya sé que no es una palabra real, pero ustedes me entienden). Si sacaste 10 en la materia de compiladores en la universidad, y además tenemos tiempo de sobra, podrías escribir tu propio parser de XML en el lenguaje de programación de tu preferencia. Pero si al igual que yo, no reúnes esas características, no te preocupes, simplemente significa que perteneces al 99.9999999% de la población mundial.

¿Qué hacemos entonces? No desesperemos, para eso existen las APIs, y XML no es la excepción. Existen un par de APIs (DOM y SAX) que especifican cómo procesar datos XML. La buena noticia, es que cualquier lenguaje de programación moderno provee parsers para ambos casos. ¿Y para qué existen DOM y SAX? ¿Por qué no puede haber una sola API? Pues resulta que ambas APIs utilizan estrategias muy diferentes, y por lo tanto, atienden a intereses diferentes. Veámos más a detalle en qué consisten estas diferencias:

DOM (Document Object Model) utiliza una estrategia de árbol para navegar documentos XML. Al procesar un documento XML, un parser DOM crea una representación jerárquica –y orientada a objetos– de los datos.

En cambio, SAX (Simple API for XML) da acceso a los datos XML como si éstos fueran una secuencia de eventos. Es decir, el parser recorre un documento XML y conforme va encontrando ciertas partes del documento, va haciendo llamadas a funciones que manejen los eventos correspondientes.

El uso de DOM es mucho más sencillo, ya que la estructura de árbol que se crea al procesar el documento, queda cargada en la memoria y se puede navegar, y manipular fácilmente a través de funciones orientadas a objetos. Mientras que el uso de SAX es más complejo, ya que requiere que implementemos funciones para manejar los eventos. Sin embargo, su ventaja es, que puede procesar cantidades de datos enormes, sin utilizar muchos recursos, ya que no almacena ninguna representación de los datos, sino que simplemente, va recorriendo el documento y mandando llamar funciones, dependiendo de lo que encuentre.

Conclusión
En este artículo he cubierto algunos de los aspectos fundamentales de XML. Espero que la información sirva como un primer paso, para que sigan investigando y aprendiendo al respecto.