26 de Diciembre de 2005 (Daniel P.)XSLT Características:- XSL: eXtensible Style Language
- XSL es la especificación que desarrolla el lenguaje de formateo.
- XSL consiste en tres partes:
- XSLT – lenguaje para la transformación de documentos XML.
- XPath – lenguaje para la navegación en documentos XML.
- XSL-FO – lenguaje para el formateo de documentos XML.
- XSLT es la especificación que desarrolla el lenguaje de transformación. Hace uso de la especificación XPath. Ha sido diseñada para ser utilizada de forma independiente aunque es utilizada desde la especificación XSL.
- XSLT es un lenguaje de programación de hoja de estilos para la transformación de documentos XML en otros documentos XML, HTML, XHTML, WML o incluso PDF.
- XPath es la especificación que desarrolla el lenguaje para acceder a los elementos de un documento XML. Ha sido desarrollada para ser utilizada desde la especificación XSLT y XPointer.
- XSLT, XSL, XSL-FO y XPath están definidos en XML
- XSLT, XSL, XPath y XSL-FO son recomendaciones del W3C.
XSLT permite:- Formatear los elementos fuente basados en relaciones de ancestro/descendiente, posición y unicidad.
- La creación de construcciones de formato sofisticadas incluyendo texto generado e imágenes
- La definición de macros de formateo reutilizables
- Estilos independices de la dirección en que se escriba el lenguaje
- Conjunto de objetos de formato extensible
- Una manera de describir el proceso de transformación es decir que las XSLT transforma un árbol XML de entrada e otro árbol XML de salida.
Árboles- El documento original se traduce a un árbol que representa el documento original:
- raíz del árbol -> elemento raíz
- hijos de un nodo -> elementos contenidos en él
- El estilo convierte este árbol en un árbol de objetos de flujo.
- La conversión se hace a través de reglas de construcción
- Una regla de construcción de se compone de:
- patrón, que especifica a que elementos de árbol fuente se aplica
- acción, que indica como se traduce un subárbol a otro
- el estilo se procesa recursivamente
EjemploPara empezar, vamos a tratar de presentar una hoja XML lo más simple posible (ejemplo0.xml): <?xml version="1.0" encoding='ISO-8859-1'?>
<?xml-stylesheet href="pagina0.xsl" type="text/xsl"?>
<pagina_web>
<nombre>CocinaTusRecetas</nombre>
<url>http://www.cocinatusrecetas.com</url>
</pagina_web>
|
Para convertirlo en HTML, usaremos la siguiente hoja de estilo (pagina0.xsl): 1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3 <xsl:template match='/'>
4 <html>
5 <head><title>Ejemplo</title></head>
6 <body>
7 <h1> <xsl:apply-templates /> </h1>
8 </body>
9 </html>
10 </xsl:template>
11 </xsl:stylesheet>
|
El resultado sería el siguiente documento HTML: <html>
<head><title> Ejemplo</title></head>
<body>
<h1> CocinaTusRecetas http://www.cocinatusrecetas.com </h1>
</body>
</html>
|
Explicación del códigoPara empezar, el código del documento XML contiene una etiqueta pagina_web, que incluye otras dos etiquetas nombre y url, que contienen el texto que queremos que aparezca en la página web. En el resto, la primera línea simplemente describe que el resto del documento es XML y asocia la hoja de estilo XSLT (pagina0.xsl) al documento. Esta segunda línea se usa en entornos de publicación tales como el Cocoon; algunos procesadores de XSLT la usan para tomar el nombre de la hoja de estilo que se va a usar; también lo suelen usar navegadores como el Mozilla/Netscape/Firefox o el Internet Explorer. Cada una de estas etiquetas se denominan elementos; y en principio, un documento puede tener tantas etiquetas como queramos. El XML original, como se ve, es simplemente XML bien formado no usa un DTD ni lo necesita. Basta con que haya una etiqueta raíz (pagina_web, en nuestro caso), las etiquetas estén emparejadas correctamente y los atributos entre comillas. Diferentes documentos XML podrían ser procesados con la misma hoja de estilo, y darían diferente resultado salvo por el hecho de que es una forma de mantener una apariencia común. La primera hoja de estilo con la que nos enfrentamos es relativamente simple. El "esqueleto" es un documento HTML normal, al cual tenemos que añadir "contenido dinámico", es decir, contenido generado a partir del XML original. Para empezar, se incluyen una serie de instrucciones, de la línea 1 a la 3: no son instrucciones en sí, sino que modifican el aspecto de la salida. La primera declara el documento XML y el tipo de codificación (que podría ser ISO-8859-1 en vez de UTF-8 si quisiéramos incluir acentos y demás caracteres idiosincrásicos) y la segunda es la etiqueta raíz de la hoja de estilo (cerrada en la última línea; recordemos que una hoja de estilo XSL es también un documento XML y por tanto tiene que seguir todas sus convenciones), que declara la versión de XSLT que se está usando y el espacio de nombres (namespace) que vamos a usar, es decir, el prefijo que usarán todas las instrucciones propias de XSLT; en este caso, usamos xsl, pero cambiando esta instrucción podríamos usar otro cualquiera. Ese esqueleto está organizado en "templates", que son partes de la hoja que se "disparan" cuando encuentran una etiqueta que corresponda a lo que hay en su atributo match. El primer y único template comienza en la línea 3, y, en este caso, el template que corresponde a la etiqueta raíz genera un esqueleto de página HTML. La "orden" en la línea 7 cede el control a los otros templates, es decir, trata de aplicar todos los demás templates que haya en el documento, incluyendo el resultado de aplicarlos precisamente en ese punto (es decir, entre las etiquetas h1. En este caso no hay más templates, salvo los llamados los templates por defecto, que lo único que hacen es incluir el contenido de las etiquetas en el documento de salida. Es decir, en la práctica lo que hemos hecho es decirle dónde tiene que incluir en el esqueleto los valores del documento original, sin procesarlos más. La orden <xsl:apply-templates /> podría haberse sustituido, en este caso, por <xsl:value-of select='pagina_web' /> y habría tenido exactamente el mismo efecto, es decir, incluir el contenido de la etiqueta pagina_web (y todas las que descienden de ella). |