XSL: XSLT, XPath y TraX

"XSL Engines", Manipulaciones y Transformaciones.

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:

Transformacion XSL
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:

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.

TraX.

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).

XSL Stylesheets.

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.

template

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:

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

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.

Condicionales, Ciclos y otros elementos

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 :

Transformación de Documento XML a HTML, PDF (Acrobat) y WML.

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 :

"XSL Stylesheet" para HTML

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.

"XSL Stylesheet" para WML

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.

"XSL Stylesheet" para PDF

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.

Ejecutando la transformación XML-XSL con Ant

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/ .

Menú Curso

XML y sus Orígenes

Manipulación y Proceso de XML

DOM, SAX y JDOM

Namespaces, Schemas y DTD's

XSL: XSLT, XPath y TraX

XMLRPC y SOAP (Web Services)

Diseño con XMLRPC

Diseño con SOAP .

Apéndice "A" (Procesando XML con parsers).

Apéndice "B" (Validando XML con Schemas y DTD's).

Apéndice "C" (XSL: XPath y "XSL Stylesheets").

Apéndice "D" (XMLRPC: Diseño).

Apéndice "E" (SOAP, WSDL, UDDI y WSIL : Diseño).