!!!Artículo adaptado a la recomendación XSLT del 16 Noviembre de 1999!!!
Este es el primer capítulo de una serie de artículos en los que iremos estudiando qué posibilidades y herramientas existen hoy en día para convertir un documento XML en HTML y cómo visualizarlo en un navegador.
¿Qué es XSLT?
Uno de los problemas del HTML es que no identifica lo que está representando, se preocupa principalmente de que eso tiene que ir en un color o con un tipo de letra determinada, pero no dice que lo que está mostrando es el título de un libro o el precio de un artículo. El XML hace precisamente esto: describe el contenido de lo que etiqueta, sin tener en cuenta en un principio la forma de presentarlo.
El W3C está trabajando actualmente en el desarrollo de un lenguaje de hojas de estilo denominado XSL (Extensible Style Language) que nos permita dar al XML un formato de salida comprensible para los humanos.
Mediante el XSL podremos:
- Transformar un documento XML en otro XML.
- O convertirlo en otro formato de salida como puede ser RTF, PDF
El W3C ha divido recientemente esta especificación en dos partes: XSL y XSLT, siendo la XSLT la parte de la especificación que describe el lenguaje que nos permite convertir un documento XML en otro XML.
Motores XSLT
Hay que tener en cuenta que la especificación XSLT sigue siendo todavía un borrador (se espera que sea una propuesta definitiva para el verano del 99) y que, por lo tanto:
- Al no ser definitiva puede todavía sufrir algunos cambios.
- Y que los motores que existen, no la implementen en su totalidad o proporcionen algunos añadidos que la especificación no contemple.
Existen muchos motores e incluso, como veremos en otros artículos, el propio Explorer 5 implementa un motor XSL que nos permite visualizar directamente XML.
En este artículo vamos a manejar el procesador XSLT denominado XT, esencialmente por dos razones:
- Ha sido desarrollado por James Clark, que es el artífice de la parte de la especificación que trata el tema de las transformaciones.
- Y porque su utilización resulta muy sencilla. Existe una versión ejecutable para Windows, aunque para poderla utilizar necesitamos la Maquina Virtual Java que viene con el Explorer 5.
En el caso de que estemos en condiciones de trabajar con la versión ejecutable, para utilizarla no tenemos más que escribir desde la línea de comandos:
xt fichero_xml fichero_xsl fichero_htm
Si no no es posible, al tratarse de una aplicación en Java no tenemos más que tener instalado el JDK (actualmente trabajo con la versión 1.1.5 y funciona correctamente) y seguir los siguientes pasos:
- Bajarnos la distribución del XT. Donde, entre otros, se encuentran los ficheros xt.jar y sax.jar.
- Bajarnos el XP, parser de XML en Java, desarrollado por James Clark. Donde, entre otros, se encuentra el fichero xp.jar.
Crearnos un fichero xslt.bat, que debe tener el siguiente aspecto:
set oldClassPath=%CLASSPATH% set CLASSPATH=%CLASSPATH%d:xtxt.jar;d:xtsax.jar;d:xtxp.jar; java com.jclark.xsl.sax.Driver %1 %2 %3 set CLASSPATH=%oldClassPath%
Indicándole en la definición del set CLASSPATH donde se encuentran en nuestra máquina los tres ficheros .jar antes mencionados.
Y, finalmente, para ejecutarlo no tendremos más que escribir:
xslt fichero_xml fichero_xsl fichero_htm
Para cualquier duda sobre la instalación y utilización os recomiendo que visitéis la sección sobre XT de la Web de James Clark.
El ejemplo
En nuestro ejemplo tendremos un único fichero XML en el que he reunido mis direcciones de gastronomía preferidas y del que obtendremos dos páginas HTML diferentes con dos XSLT distintas.
Este fichero, gastrono.xml tiene la siguiente estructura:
<?xml version="1.0" encoding="ISO-8859-1"?> <direcciones> <tema>Mis direcciones de gastronomía</tema> <intro>Recopìlación de mis direcciones de gastronomía favoritas.</intro> <direccion> <titulo>El Universal</titulo> <url>http://www.el-universal.com/scannone/</url> <descripcion>La cocina y la mesa de Armando Scannone con una amplia y buena selección de artículos recetas y consejos</descripcion> </direccion> ........ ........ </direcciones>
Y dos XSLT:
- gastrono1.xsl, con la que obtenemos la página gastrono1.htm.
- gastrono2.xsl, con la que obtenemos la página gastrono2.htm.
Y la forma de generar el HTML es escribiendo desde la línea de comandos las siguientes líneas:
xt gastrono.xml gastrono1.xsl gastrono1.htm xt gastrono.xml gastrono2.xsl gastrono2.htm
o
xslt gastrono.xml gastrono1.xsl gastrono1.htm xslt gastrono.xml gastrono2.xsl gastrono2.htm
una para cada XSLT.
Aunque el objetivo de este artículo no es profundizar en la sintaxis de las XSLT, veamos el código de gastrono1.xsl para destacar algunos conceptos:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="direcciones"> <html> <head> <title><xsl:value-of select="tema"/></title> <link rel="stylesheet" type="text/css" href="gastrono.css"/> </head> <body> <center> <img src="gastronomia.gif"/> </center> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="tema"> <p class="titulo"> <xsl:apply-templates/> </p> </xsl:template> <xsl:template match="direccion"> <div class="direccion"> <p> <xsl:apply-templates select="titulo"/><br/> <xsl:apply-templates select="url"/><br/> </p> <xsl:apply-templates select="descripcion"/> </div> </xsl:template> <xsl:template match="titulo"> <span class="dirtitulo"> <xsl:apply-templates/> </span> </xsl:template> <xsl:template match="url"> <xsl:element name="A"> <xsl:attribute name="HREF"><xsl:value-of select="."/></xsl:attribute> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="descripcion"> <p class="descripcion"> <xsl:apply-templates/> </p> </xsl:template> </xsl:stylesheet>
Como podemos observar:
- La sintaxis es XML. Por tanto, una vez que aprendamos cómo funciona el XML, no debe resultar muy complicado realizar nuestras primeras XSLT.
Como ya hemos dicho, mediante una XSLT convertimos XML en XML; en nuestro ejemplo esto no es del todo cierto, ya que estamos convirtiendo XML en HTML que es una aplicación SGML pero no XML. En definitiva, hemos tenido que indicar al procesador que la salida va a ser HTML 4.0. Esto se realiza mediante la sentencia:
<xsl:output method="html"/>
Aunque como podeis observar no la hemos utilizado, ya que el procesador XT genera de forma automatica HTML al ver que la raiz de la salida es el elemento html.
<xsl:template match="direcciones"> <html> .... </html>
Actualmente el W3C está trabajando en una reformulación del HTML como una aplicación XML. Esta nueva versión del HTML se llama XHTML.
Para más información sobre XML y XSL os recomiendo que visitéis el tutorial sobre XML, que estoy escribiendo en este mismo web.
Y si os animais a escribir diferentes XSLT para representar gastrono.xml estaría encantado de recibirlas y publicarlas.
Direcciones de interés
Y a continuación una serie de direcciones que os pueden resultar
útiles para complementar el artículo:
El XT de James Clark.
http://www.jclark.com/xml/xt.html
El procesador de XSLT desarrollado por James Clark, la misma persona que desarrolla la especificación |
http://www.w3.org/TR/WD-xslt
La especificación de XSLT, en la cual se describe el lenguaje que nos permite transformar un documento XML en otro XML. Todavia es un borrador de trabajo. |
http://www.oasis-open.org/cover/xsl.html
La sección dedicada al XSL en la Web sobre XML y SGML de Robin Cover. |
http://zvon.vscht.cz/HTMLonly/XSLTutorial/Books/Book1/index.html
Estupendo tutorial de Miloslav Nic con multiples ejemplos a lo largo de los cuales se estudian diferentes aspectos sobre la utilización de una XSLT. |
http://www.mulberrytech.com/xsl/xsl-list/
Lista de correo sobre XSL que podemos encontrar en las páginas de Mulberry Tecnologies. Indispensable para estar al día. |