El lenguaje de marcado extensible (XML) [18] proviene de un lenguaje que inventó IBM en los setenta, el lenguaje GML. Este lenguaje surgió por la necesidad que tenían en la empresa de almacenar grandes cantidades de información de temas diversos. Mediante GML se conseguía poder clasificar toda la información y escribir cualquier documento para que luego se pudiera procesar adecuadamente.
Este lenguaje gustó a la gente de ISO por lo que en el 86 se creo SGML que era GML normalizado. SGML es un lenguaje muy potente pero bastante complejo, por lo que nunca gozó de mucha popularidad.
XML fue creado por un grupo de empresas de software junto con el W3C (organismo que vela por el desarrollo de la WWW) partiendo de las amplias especificaciones de SGML. Su desarrollo se comenzó en 1996 y la primera versión apareció en 1998.
Por tanto, XML es un lenguaje de marcado basado en texto, al igual que HTML. XML es parecido a HTML (ya que ambos derivan de SGML), pero existen dos diferencias fundamentales:
XML es más estricto que HTML. Existe un conjunto mínimo de reglas que todo documento debe cumplir. Cuando un documento XML cumple estas reglas decimos que el documento está "bien formado". Las reglas básicas son las siguientes:
En XML se puede definir la estructura de los documentos. Existen dos formas de definir el contenido de un documento XML:
Cuando un documento está bien formado y además sigue la estructura definida en el DTD (o en el esquema XML) se dice que el documento es válido. Por tanto, un documento XML puede estar bien formado (sintácticamente correcto) pero no ser válido (semánticamente incorrecto).
Los documentos XML podrían ser analizados sintácticamente mediante un analizador desarrollado específicamente para ese lenguaje. Sin embargo, esto no es recomendable y existen dos estándares para la construcción de analizadores sintácticos XML: DOM y SAX. A continuación se describe cada uno de ellos.
SAX (interfaz sencilla de XML) es una especificación que permite a los programadores acceder a la información de un documento XML. Originalmente SAX era un API únicamente para Java, pero pronto se ha convertido en un estándar "de facto". La especificación SAX más reciente es la 2.0 y la mayoría de los analizadores XML disponibles ya la implementan.
SAX proporciona acceso a la información en el documento mediante una secuencia de eventos (según se va procesando el documento se van generando una serie de eventos, como apertura de etiqueta, cierre de la misma, DTD, comentario, etc.).
Debido a la forma en que SAX procesa los documentos, el proceso es muy rápido, pero el programador debe realizar un "trabajo extra":
SAX define una serie de interfaces. Algunas de las interfaces más importantes son:
Por último, hay que señalar que cualquier implementación de SAX debe ajustarse a estas interfaces. La forma de procesar un documento mediante SAX será mediante la implementación de estas interfaces (basta con aquellas que sean necesarias para el procesamiento del documento), es decir, proporcionando al analizador los manejadores de eventos necesarios.
DOM es una especificación definida por el W3C. El objetivo de DOM es proporcionar una interfaz de programación estándar para manipular documentos XML independientemente del lenguaje de programación y del sistema operativo.
DOM ha ido desarrollándose progresivamente en niveles de implementación. Actualmente existen 3 niveles de DOM (cada uno de ellos con su especificación correspondiente). La especificación DOM más reciente es la de nivel 3, aunque es la especificación de nivel 2 la que cumplen la gran mayoría de los analizadores DOM disponibles.
DOM representa un documento XML en forma de árbol. Por lo tanto, en un DOM que representa a un documento XML tendremos un elemento raíz (el propio documento) y este elemento tendrá nodos hijos que representarán las ramas del árbol.
DOM define una serie de objetos, cada uno con sus propiedades y sus métodos, que permiten a los programadores manipular documentos XML. Cualquier implementación de DOM de cualquier lenguaje de programación deberá proporcionar todos estos objetos (con sus propiedades y sus métodos). Algunos de los objetos más importantes son:
Con DOM un programador puede crear un documento XML, navegar en su estructura y añadir, modificar o borrar sus elementos.
Por último, destacar que hay algunas implementaciones de DOM que se construyen sobre SAX; como es el caso de la implementación de Sun (utilizada en este proyecto).
XSL es una familia de recomendaciones desarrollados por el W3C para definir las transformaciones de documentos XML y su presentación. XSL ha surgido como una solución para transformar documentos en XML a otros formatos como: HTML [17], WML (usado en los móviles WAP), texto simple, VoXML, PDF e inclusive en otro documento XML. XSL consta de:
XSLT es la parte más importante de los estándares XSL. XSLT es un lenguaje con sintaxis XML que se usa para transformar un documento XML en otro documento XML u otro tipo de documento que sea reconocido por un navegador, como HTML o XHTML.
Algunas de las operaciones que se pueden hacer mediante XSLT son: añadir nuevos elementos, borrar elementos existentes, reorganizar u ordenar elementos, comprobar y tomar decisiones de qué elementos mostrar y cuáles no, y muchas cosas más.
En el proceso de una transformación se definen una serie de plantillas (templates) en las que se definen mediante XPath el patrón que debe cumplir el documento origen para que dicha plantilla sea aplicada. Según se va procesando el documento origen, se busca si los elementos cumplen alguno de los patrones de las plantillas definidas. En caso de que se encuentre alguna plantilla que encaje con el patrón se realizarán las transformaciones oportunas al archivo origen. Las partes del documento origen que no encajen con ninguna plantilla no sufrirán modificaciones en el documento resultado.
El estilo de programación con las hojas XSLT es parecido al estilo utilizado en los lenguajes funcionales. Las dos principales características son:
Además del uso habitual de procesar documentos XML que se suele hacer de XSLT, como lenguaje de programación que es, XSLT permite realizar otras muchas cosas como ejecutar algoritmos de cualquier tipo o realizar cálculos matemáticos, aunque estos usos están mucho menos extendidos.
Por último, hay que señalar que existe un componente esencial para poder usar XSL. Este componente es el motor XSL (XSL engine), el cual es el encargado de procesar el documento XML origen a partir de un documento XSLT y obtener el documento resultado. Uno de los motores XSL más conocidos es Xalan (del grupo Apache). Además, las últimas versiones de los navegadores más utilizados (Internet Explorer, Mozilla, Opera, etc.) incluyen su propio motor XSL.