XSL ("eXtensible Stylesheet Language") es otra especificación desarrollada por W3C para transformar y manipular documentos XML , XSL esta formado de tres partes:
Teoría a un lado, XSLT utiliza elementos de XPath y XSLF, debido a esto al emplear XSLT implícitamente se esta utilizando XSL en general. Aparentemente al utilizar el término transformación se están implicando las mismas labores que realiza DOM y en efecto se esta realizando esto,sin embargo, la transformación se hace en conjunción con un "XSL Engine", observe la siguiente gráfica:
Es sumamente importante saber que un "XSL Engine" no es un "Parser" como DOM,SAX o JDOM , inclusive requieren de un "Parser" para funcionar. Es por esta razón que TODOS los "XSL Engines" ya incluyen un "Parser" en su distribución. |
La serie de eventos que es llevada acabo por el "XSL Engine" es la siguiente:
Al iniciar cualquier transformación, el documento XML debe ser transformado mediante un "Parser" a una estructura abstracta ya sea: eventos de SAX , árbol jerárquico de DOM o elementos Java JDOM.
Una vez transformado el documento en esta abstracción se aplica un "Extensible Stylesheet" al árbol jerárquico, eventos o elementos Java según sea el caso.
Ya que ha sido aplicado el "Extensible Stylesheet" se genera otra estructura abstracta: eventos de SAX , árbol jerárquico de DOM o elementos Java JDOM.
Finalmente la estructura abstracta es transformada | enviada a una aplicación de servidor , bases de datos o "flat file" según sea el caso.
Una de las ventajas que se puede notar a diferencia de DOM es que no se manipula através de funciones la información en XML, sino que es através "XSL Stylesheets" los cuales serán descritos a continuación.
Al igual que parsers Java , cuando recién fueron definidos los estándares de XSL , hubo ciertas secciones que no fueron lo suficientemente estrictas para estos "XSL Engines", por esta razón , Sun decidió crear TraX que logra la interoperabilidad de los diversos "XSL Engines" escritos para Java; TraX forma parte del API JAXP definido por Sun, el cual como fue mencionado anteriormente ya se incluye en todo JDK (1.4).
Un "XSL Stylesheet" al igual que otras estructuras XML también utiliza un Namespace de acuerdo a un standard :
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" version="4.0" encoding="ISO-8859-1"/> |
La primer declaración define el vocablo xsl
al que es asignado el Namespace standard para XSL http://www.w3.org/1999/XSL/Transform
. La declaración <xsl:output>
, aunque opcional, representa un elemento XSL que define el tipo de contenido y características del documento que será generado al ser realizada la transformación, en este caso se esta indicando que la transformación será un documento tipo HTML.
El concepto de "XSL Stylesheets" es relativamente sencillo: definir un juego de reglas para que sea transformado cierto elemento.Si se tiene un fragmento XML como el siguiente:
<documento> <contenido>Solo un ejemplo</contenido> </documento> |
Através de un "XSL Stylesheet" es posible transformar este fragmento a cualquier formato imaginable, como se muestra a continuación:
<HTML> <BODY>Solo un ejemplo</BODY> </HTML> |
En el caso anterior se aplicó un "XSL Stylesheet" que transformó el elemento <documento> a <HTML> y <contenido> a <BODY>, esta estructura representa un documento HTML utilizado para paginas Web, sin embargo , de la misma manera pudieron ver sido aplicados diversos "XSL Stylesheets" para convertir XML a WML, PDF (Acrobat) y cualquier otro formato.
En la siguiente sección se describen a detalle los diversos elementos que pueden ser utilizados dentro de "XSL Stylesheets" para transformar elementos XML .
template
, XPath, Condicionales, Ciclos y otros elementos en XSL. El componente o ingrediente principal detrás de un "XSL Stylesheet" son los elementos template
, através de éstos se indica la transformación que debe ser llevada acabo para XML, observe:
<xsl:template match="documento"> <HTML> <xsl:apply-templates/> </HTML> </xsl:template> <xsl:template match="contenido"> <BODY> <xsl:value-of select="."/> </BODY> </xsl:template> |
Los templates
anteriores indican lo siguiente:
Al encontrarse un elemento documento
,éste debe ser substituido por el término <HTML>
, enseguida debe ser ejecutado <xsl:apply-templates/>
.
La ejecución de <xsl:apply-templates/>
implica que debe continuarse con la evaluación del documento XML, esto es, continuar aplicando templates a los elementos que prosiguen a documento
.
El elemento que prosigue a documento
es contenido
, analizando los respectivos templates, se puede observar que se debe substituir por el elemento BODY
seguido de la ejecución de <xsl:value-of select="."/>
<xsl:value-of select=".">
significa que debe ser extraído el valor de un elemento XML, el uso del .
(punto) es nomenclatura de XPath y en este caso se refiere al elemento en cuestión contenido
, el uso de XPath será ilustrado posteriormente; una vez extraído debe ser cerrado el elemento BODY
para que cumpla con las reglas generales de XML.
Una vez ejecutado el template para contenido
es necesario regresar el control al template
que inicio su proceso, en este caso es el template documento
, al regresarse control lo único que falta por ejecutarse es cerrar el elemento <HTML>
que fue abierto desde un principio.
El comportamiento de "XSL Stylesheets" es conocido como recursivo en el mundo de programación, esto es, una vez terminada la ejecución de cierta lógica se retorna al punto donde fue iniciada, lo anterior encuadra perfectamente con la estructura anidada de XML.
Los templates anteriores solo demuestran las funcionalidades basicas de "XSL Stylesheets", también existen definiciones para ciclos (for's),operaciones condicionales (if's),operaciones matemáticas y prácticamente cualquier otra funcionalidad esperada de un lenguaje de programación.
Lo anterior permite manipular depósitos de XML en una manera muy poderosa, a continuación se demuestra el uso de varios "XSL Stylesheets" utilizados para manipular XML en distintos formatos.
XPath es una parte de XSL que permite navegar los diversos nodos que componen al documento XML, aunque abstracto en definción su uso es relativamente transparente en "XSL Stylesheets", a continuación se describen diversos usos.
Dentro de cada "XSL Stylesheet" es posible utilizar varios elementos que permiten manipular el documento XML através de ciclos y condicionales, su uso se describe a continuación :
Además del uso de ciclos y condicionales, XSL también ofrece elementos que permiten el uso de variables, manipulación de números y texto, así como manipulaciones requeridas en casos especiales, estos y otros elementos son descritos a continuación :
Ya descritos los elementos y comporatamientos de las distintas estructuras que pueden ser empleadas en un "XSL Stylesheets", a continuación se describen una serie de diseños con XSL para realizar la transformación de un documento XML a otros formatos ampliamente utilizados en sistemas de información. El documento a ser transformado corresponde a una tabla de productos desarrollada en XML con tags propietarios, la cual es descrita a continuación :
HTML ("Hypertext Markup Language") es el formato utilizado por navegadores ("Explorer", "Netscape", "Mozilla" u otro) en Internet, através de este "XSL Stylesheet" se genera la presentación Web para la conocida tabla de información en XML.
WML ("Wireless Markup Language") es el lenguaje utilizado para interpretar información en aparatos inalámbricos, através de este "XSL Stylesheet" se genera la presentación de información para usuarios móviles.
PDF es el formato utilizado por Acrobat Reader, este formato es ampliamente utilizado hoy en día; la conversión de XML a PDF no es tan sencilla como las dos anteriores, la razón de esto es que se debe transformar XML a un pre-lenguaje llamado FOP ("Formatting Object") posteriormente FOP es convertido al documento PDF.
FOP no es tan expresivo como HTML y WML por lo que puede ser un obstáculo al trabajar con el, sin embargo, una vez definido un "XSL Stylesheet" es relativamente fácil re-utilizarlo para otros documentos XML.
Aunque es posible diseñar un programa desde sus raices con metodos especiales como lo fue hecho en la demostración de parsers (DOM-SAX-JDOM) para realizar las transformaciones anteriores, su diseño implicaría una gran cantidad de código, en muchas situaciones como la anterior se opta por utilizar una herramienta que agilize este proceso.
En este caso se utilizará Ant; Ant es una herramienta muy poderosa para construir programas en Java y transformaciones en XML, es un producto Open-Source, disponible en http://ant.apache.org/ ; aunque posee cientos de parámetros y configuraciones, a continuación se menciona una configuración básica para realizar transformaciones.
Aunque Ant proporciona las facilidades para transformar documentos XSL, existen algunos ambientes integrados que permiten estas transformaciones, inclusive existe una estructura ("Framework") llamada Cocoon que permite desarrollar un sitio de Internet alrededor de XML-XSL, este proyecto también es Open-Source y se encuentra en : http://cocoon.apache.org/ .
template
, XPath, Condicionales y Ciclos en XSL.