Práctica XML / XSLT de Integració de Mitjans Digitals

Anuncio
Integración de medios digitales
XML y XSLT
Documentos estructurados y
publicación electrónica.
Manuel Agustí, Félix Buendía, Jose V. Benlloch y Vicente Atienza
Curso 2008/2009
1
1 Presentación y objetivos
Como se ha visto en clase de teoría, un documento XML es la definición de la estructura de un
documento. Sobre este es posible aplicar transformaciones, como se indica en la web1, para obtener
otros tipos de documentos a partir del original, por ejemplo a partir de XML se puede obtener una
versión en texto ASCII, en otro vocabulario de XML (SVG, RSS,...), HTML, TXT o PDF.
Fig, 1 Diagrama que representa la relación entre el tema de esta práctica y el papel las
herramientas utilizadas. Puede consultar más detalles sobre Cocoon en “[Beta Cocoon: el
entorno abierto de publicacion]”1.
En su espacio de PoliformaT,. de la tarea relativa a esta práctica sobre de XML, guarde sólo los ficheros
se le pidan como respuesta a la actividad final. La publicación se realizar sobre el servidor web-sisop
atendiendo a las explicaciones dadas en clase así como en los mensajes enviados al grupo de
teleenseñanza.
En el laboratorio se propone realizar la práctica en plataforma GNU/Linux, donde ya existe una versión
de Java instalada para nuestras necesidades en esta práctica y para este operativo. Sólo es necesario que
se descomprima el contenido del enlace adjunto “Ficheros necesarios para la práctica de XML” en su
directorio de trabajo. Esto le dará acceso a dos órdenes, xerces.sh y xalan.sh, que le ahorrarán trabajo a
la hora de teclear. También se puede realizar sobre MS/Windows, en cuyo caso se habrá de ejecutar las
órdenes xerces.bat y xalan.bat.
Notas para la utilización fuera del laboratorio:
Debe tener instalados un entorno de ejecución de Java y las librerías Xerces y Xalan para
este. Puede instalarlas sobre entorno GNU/Linux seleccionándolas desde su programa de
instalación de aplicaciones, aunque bastará que se descargue el enlace2 “Ficheros
necesarios para la práctica de XML” si ya dispone de una máquina virtual Java..
La versión de Java deberá ser igual o superior a la 1.1. Para averiguarlo, desde un
terminal, dependiendo del operativo sobre el que vaya a trabajar, ejecute
$ java -version
(en GNU/Linux)
c:\>java -version
(en MS/Windows)
ó
dependiendo de si está trabajando en una u otra plataforma. Es necesario verificar que
se dispone de un entorno Java (e instalarlo, en su defecto), sólo si se realiza la práctica
fuera del Laboratorio. Se puede utilizar, por ejemplo, el que puede descargar para su
Consultar
la
URL<http://web-sisop.disca.upv.es/~smm/publicacions/articulCocoon/pagehtml.xml>.
2
Los enlaces a que se refiere este texto están en la página web de las prácticas de la asignatura, junto a
aquel de donde se ha obtenido este documento.
1
2
plataforma de trabajo en el enlace “Si no tienes java instalado, puedes (JRE 2) bajártelo
en el sitio web de SUN”.
Para entorno GNU/Linux habrá de comprobar qué versión de Java dispone, como se ha
indicado anteriormente e instalar las librerías de Xerces y Xalan indicadas.
Para entorno Mac OSX no disponemos de un entorno específico y se sugiere utilizar el
mismo material que para GNU/Linux.
1.1 ¿ Qué es XML ?
XML (eXtensible Markup Language) es un lenguaje de marcado extensible que describe una clase de
objetos de datos llamados documentos XML y, parcialmente, el comportamiento de los programas que
los procesan. XML es un metalenguaje que permite diseñar un lenguaje propio de etiquetas para
múltiples clases de documentos.
La estructura de un documento XML se basa en la declaración de tipos de documentos (DTD) o en la
definición de XML Schemas. La DTD (Document Type Declaration) proporciona la gramática para una
clase de documentos XML. Esta gramática contiene la definición del conjunto de etiquetas que puede
contener esa clase de documentos XML.
Fig, 2 Esbozo de los principales elementos de la estructura del documento que recogerá la
propuesta de trabajo de la asignatura.
2 Edición de XML
La primera tarea consistirá en editar un ejemplo de documento XML. Dicho documento contendrá
información relativa a la realización de un posible trabajo en la asignatura como el título, componentes
del grupo y resumen. De manera gráfica, la relación entre estas informaciones que contendrá el
documento que vamos a crear sigue la estructura indicada en la fig. 2.
Los documentos XML deben empezar con una línea que describe la versión de XML y el tipo de
codificación del documento. Aquí utilizaremos el conjunto de caracteres ISO-8859-1 porque es el que
3
incluye los caracteres propios del alfabeto español; facilitando así, entre otras cosas, la utilización de
caracteres acentuados.
<?xml version="1.0" encoding="ISO-8859-1"?>
El resto de información del documento XML se estructura mediante un jerarquía de elementos
delimitados por etiquetas. En primer lugar, se halla el elemento raíz, del que los demás elementos
forman parte.
A continuación se incluye un ejemplo de documento XML para representar la anterior estructura (lo
llamaremos trabajoV1.xml y está dentro del fichero que se puede descargar en el enlace “Ficheros
necesarios para la práctica de XML”):
<?xml version="1.0" encoding="ISO-8859-1"?>
<Trabajo>
<Titulo> Práctica de XML </Titulo>
<Grupo>
<Componente> <Nombre>Manuel Agustí</Nombre> </Componente>
<Componente> <Nombre>Vicente Atienza</Nombre> </Componente>
<Componente> <Nombre>J.V. Benlloch</Nombre> </Componente>
<Componente> <Nombre>Félix Buendía</Nombre> </Componente>
</Grupo>
<Resumen>
<Parrafo>El trabajo consiste en explicar un lenguaje como XML</Parrafo>
<Parrafo>Para ello, se describirá la edición de documentos XML</Parrafo>
<Parrafo>A continuación se comprobará la validez de dichos documentos</Parrafo>
<Parrafo>También se verán las opciones para procesar documentos XML</Parrafo>
</Resumen>
</Trabajo>
Extraiga el fichero trabajoV1.xml del fichero comprimido al directorio de trabajo y utilice un editor de
texto para visualizarlo. En este caso, el elemento raíz está representado por la etiqueta <Trabajo>.
El resto de elementos representan información relativa al título, a los componentes del grupo y a los
párrafos del resumen El elemento Titulo contiene una cadena de caracteres Los elementos Grupo y
Resumen constan de otro nivel de elementos (Componente y Parrafo, respectivamente) que a su vez
contienen cadenas de caracteres.
Ejercicio 1: Con cualquier editor de texto cree un fichero ejercicioXML1.xml que contenga datos como
el título del trabajo, del nombre de los componentes del grupo y un breve resumen del tema sobre el
versa el mismo.
3 Comprobaciones sobre un documento XML
El siguiente paso consistirá en analizar el documento XML, primero para comprobar si el documento
está "bien formado" (well-formed), es decir, cumple las especificaciones de XML. Para ello se utilizará
un analizador o parser.
Si lo es, entonces se puede comprobar la validez del documento, esto es, si cumple con las reglas de
definición de una gramática. Es decir, el documento se puede considerar que está construido acorde con
un vocabulario o instanciación de un tipo de documento.
3.1 Análisis sintáctico (parsing)
Para realizar esta tarea se utilizará Xerces, un programa realizado en Java, de modo que puede ser
utilizado en cualquier plataforma y, además, coincide con la estrategia de publicación que se utiliza en
el servidor.
Comentar que, como otros programas se le pueden pasar parámetros. Así que utilizaremos un terminal
para escribir la orden correspondiente a la tarea que necesitemos realizar. Para que realice su tarea sobre
el contenido de un fichero de nombre fitxer.xml, se puede invocar como muestran los siguientes ejemplos
de uso de este script:
4
Tarea
Verificar si un fichero está bien formado
Orden a ejecutar
$ xerces.sh -V fitxer.xml
$ xerces.sh fitxer.xml
Verificar si un fichero está bien formado y codificar la salida en $ xerces.sh -e ISO-8859-1 fitxer.xml
ISO-Latin-1 (por defecto se utiliza UTF-8)
Ejercicio 2: Este ejercicio consiste en indicar el resultado del análisis sintáctico para el siguiente
ejemplo de documento XML, que llamaremos trabajoV2.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Trabajo>
<Titulo/>
<Introduccion>
<Resumen>
<Parrafo>El trabajo consiste en ...</Parrafo
</Resumen>
</Introduccion>
<Grupo>
<Componente>
<Nombre>Felix Buendía</Nombre>
</Componente>
</Grupo>
</Trabajo>
Descubra el tipo de error que se ha producido y cómo se resolverá.
También se puede aplicar al ejemplo de fichero introducido en el ejercicio anterior. Compruebe qué
sucede en aquel caso.
3.2 Validación
Ahora comprobaremos si el documento es válido según la "declaración de tipo de documento" (DTD)
que, en su caso, tenga asignado. La validación del documento XML se basa en la DTD. La siguiente
línea representa un ejemplo de declaración que se puede añadir al principio del documento, a
continuación de la versión de XML y el tipo de codificación.
<!DOCTYPE Trabajo SYSTEM "trabajo.dtd">
Dicha declaración aunque no es obligatoria, para que el documento sea conforme a las reglas de XML, sí
que define cómo encontrar la información del DTD, en este caso indicando que está en nuestro propio
ordenador (SYSTEM) y tiene el contenido siguiente:
<!ELEMENT Trabajo (Titulo, Grupo, PalabrasClave?, Introduccion, Desarrollo?, Archivos?)>
<!ELEMENT Titulo (#PCDATA)>
<!ELEMENT Grupo (Componente+)>
<!ELEMENT Componente (Nombre, Datos?, foto?)>
<!ELEMENT Nombre (#PCDATA)>
<!ELEMENT Datos EMPTY>
<!ATTLIST Datos
Asignatura CDATA #REQUIRED
Titulacion (Inf | Doc) #IMPLIED
Correo CDATA #IMPLIED
>
<!ELEMENT foto EMPTY>
<!ATTLIST foto
fichero CDATA #REQUIRED
ancho CDATA #REQUIRED
alto CDATA #REQUIRED
>
5
<!ELEMENT PalabrasClave (Item+)>
<!ELEMENT Introduccion (Objetivos?, Resumen, Requerimientos?, Bibliografia?)>
<!ELEMENT Objetivos (Frase+)>
<!ELEMENT Resumen (Parrafo+)>
<!ELEMENT Requerimientos (Parrafo+)>
<!ELEMENT Bibliografia (Item*)>
<!ELEMENT Desarrollo (Capitulo+)>
<!ELEMENT Capitulo (#PCDATA)>
<!ATTLIST Capitulo
Titulo CDATA #REQUIRED
Enlace CDATA #IMPLIED
>
<!ELEMENT Archivos (Enlace*)>
<!ELEMENT Item (#PCDATA)>
<!ELEMENT Parrafo (#PCDATA)>
<!ELEMENT Frase (#PCDATA)>
<!ELEMENT Enlace (#PCDATA)>
<!ATTLIST Enlace
Descripcion CDATA #IMPLIED
>
Para comprobar la validez del documento XML contra esta DTD, en este caso, se deberá:
•
Guardar la DTD en un fichero en el directorio de trabajo de forma que pueda ser accedido, puede
descargarlo de los enlaces relativos a la práctica.
•
Editar el fichero XML para para que contenga la referencia (DOCTYPE) al tipo de documento.
La validación se puede realizar mediante el mismo programa xerces, para ello se empleará una orden
del estilo de
$ xerces.sh -v fitxer.xml
Ejercicio 3: Validar los documentos trabajoV1.xml y trabajoV2.xml
Anote el error (o errores) encontrado y cómo se solucionarán.
Mientras el documento XML no sea validado, no podrá someterse a la siguiente fase de transformación.
Así que antes de pasar al siguiente punto deberá resolver esta situación.
4 Procesamiento de XML
El siguiente paso consiste en procesar el documento XML introducido, con el fin de obtener diferentes
representaciones de la información en formatos como HTML, TXT, ... Para ello se utilizarán "scripts"
XSL, es decir, programas que utilizan como datos de entrada documentos XML y obtienen como salida
el formato elegido.
Veamos un ejemplo de código XSL, que llamaremos en adelante trabajo.xsl, para convertir a HTML de
forma secuencial:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:output doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system=”http://www.w3.org/TR/html4/strict.dtd"
method="html" encoding="iso-8859-1"
omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="Trabajo">
<html>
<head>
<title><xsl:value-of select="Titulo"/></title>
</head>
6
<body>
<h1> <xsl:value-of select="Titulo"/> </h1>
<xsl:for-each select="Introduccion/Resumen/Parrafo">
<p> <xsl:value-of select="."/> </p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Para aplicarlo al documento, se proporciona un fichero xalan.sh que permite ejecutar la herramienta
encargada de la transformación Un ejemplo de su uso consiste en indicarle sobre qué fichero XML debe
aplicar qué XSL, para obterner un determinado resultado (HTML, TXT, XML, ...):
$ xalan.sh trabajoV2.xml trabajo.xsl trabajo.html
Que aplica la hoja de transformaciones trabajo.xsl al documento trabajoV2.xml, para generar un
resultado en trabajo.html. En caso de utilizar otros nombres de fichero recuerde que la secuencia debe
ser la indicada.
La ejecución de la herramienta se divide en dos fases: la primera donde se efectúa el análisis sintáctico
del documento ("parsing") y la segunda, que trata de aplicar una transformación a dicho documento.
Dicha herramienta consiste en un programa Java que utiliza una librería llamada Xalan. Una de sus
ventajas es que está disponible en entornos GNU/Linux y MS/Windows. Otra es que es la misma que
utilizará el método de publicación dinámico que abordamos en el punto siguiente.
Ejercicio 4: Utilizando esta hoja de transformaciones, identifique las diferentes “instrucciones” del
lenguaje XSLT.
Identifique el código (o instrucciones XSL) encargado de visualizar el elemento Resumen del trabajo y
razone por qué no aparecen los nombres de los integrantes del grupo aunque estén presentes en el
archivo XML.
5 Publicación de XML
Además del proceso de transformación descrito en el apartado “Procesamiento de XML” se puede
utilizar una herramienta para aplicar dicha transformación cuando se accede al documento XML
mediante un navegador web.
Dicha herramienta se denomina Cocoon y sirve para publicar documentos XML en un entorno web.
Cocoon funciona dentro del servidor de web Apache en forma de aplicación Java (servlet).. Su
utilización es sencilla y se basa en guardar los documentos XML, DTD y XSL en el directorio
public_html de la cuenta personal en el servidor de la asignatura e incluir las instrucciones pertinentes.
Se pueden utilizar los ficheros XML, XSL que se han descrito en los anteriores apartados e incluir, en
el fichero XML el siguiente código, inmediatamente tras la declaración del tipo de documento:
<?xml-stylesheet type="text/xsl" href="trabajo.xsl"?>
<?cocoon-process type="xslt"?>
Se puede comprobar el funcionamiento de Cocoon si se dispone de un fichero trabajo.xml desde un
navegador web como Mozilla/Firefox (por ejemplo) contra el servidor web de la asignatura, por ejemplo
utilizando una dirección (URL) del estilo de:
http://web-sisop.disca.upv.es/~<cuenta_usuario>/trabajo.xml
Cuando se haya cargado la página, se puede observar el código HTML recibido que visualiza el
navegador (con la opción de menú Ver | Código fuente) es el mismo que el obtenido en la fase de
procesamiento con Xalan.
7
Ejercicio5: Incluya las anteriores instrucciones de procesado junto a la información de palabras clave (la
etiqueta PalabrasClave) y publique el documento de nombre trabajo.xml directamente en el directorio
public_html reseñado en los párrafos anteriores.
Anote, en ejercicio5.txt íntegramente el código de el fichero XML y el código fuente del documento que
está viendo en el navegador. Describa qué ha ocurrido: ¿por qué no son lo mismo?.
Actividades propuestas
El alumno deberá realizarlas a partir de sus propios conocimientos y contando con las aclaraciones
necesarias del profesor sobre el enunciado.
El objetivo de estas actividades es adquirir experiencia en poner en práctica los conocimientos sobre
XSL e incorporar nuevos elementos del lenguaje XSLT mediante autoaprendizaje.
Se entregará en PoliformaT, en la tarea asignada a esta práctica, todos los ficheros (en un TGZ: por
ejemplo actividad1.tgz) necesarios para su resolución,
Actividad 1
A partir de lo estudiado en este boletín, genere una variación de la DTD (que se llame trabajo2.dtd)
inicial para que:
● Sea obligatorio utilizar las PalabrasClave en el documento XML
●
Sea posible incluir en los Capitulo al menos un Parrafo.
●
Que los Parrafo sean cero o más ocurrencias de Frase, foto y Enlace en cualquier número y en
cualquier orden.
Pista: buscar la posibilidad de utilizar el caracter “|“ dentro de una DTD.
Actividad 2
Utilizando los ejemplos del "Anexo: Introducción a XSLT", amplíe los contenidos del XML y/o del XSL
para que se muestre, en HTML 4.01 (Strict):
•
El efecto de la DTD realizada anteriormente (en la actividad 1).
•
La información relativa al:
•
Titulo.
•
Resumen.
•
Datos del autor, o de los autores, incluyendo un enlace al correo electrónico y una imagen
asociada al mismo, en la que el atributo alt de la conversión contenga sólo el nombre de pila
del autor..
•
Las PalabrasClave para poner, en la presentación final, comas entre los diferentes ítems de
las mismas, excepto en el final que deber estar acompañado de un punto.
•
La Bibliografia.
Los contenidos del XML habrán de ser las realizaciones de las tres prácticas realizadas en la asignatura:
esta y las dos anteriores sobre Revolution. Como resultado de esta actividad se habrá de entregar el
fichero XML (trabajo2.xml), la XSL (trabajo2.xsl) y todos los ficheros necesarios para que se pueda
reproducir el resultado.
Pistas: busque la utilidad de las funciones position, last, y substring-before de XSL
8
Actividad 3
Genere una XSL (de nombre trabajo3.xsl) para obtener un listado, de texto plano, de todos los archivos
externos referenciados en el documento XML creado. Cada uno en una línea y exceptuando las URL o
referencias a archivos no locales.
Bibliografía
Al respecto de HTML:
• Dave Raggett, “Getting started with HTML” <http://www.w3.org/MarkUp/Guide/>.
• W3C, “The global structure of an HTML document“ (HTML 4.01 Specification),
<http://www.w3.org/TR/REC-html40/struct/global.html>
• Liam Quinn (The Web Design Group), “Choosing a DOCTYPE”
<http://htmlhelp.com/tools/validator/doctype.html>
Concerniente a CSS:
• Dave Raggett, “Adding a touch of style” <http://www.w3.org/MarkUp/Guide/Style>
A continuación se indican algunos enlaces de interés:
• P. Grosso y N. Walsh, “XSL Concepts and Practical Use”, Arbortext,
<http://www.arbortext.com/xsl/tutorial/tutorial.html>
•
XML en España<http://www.it.uc3m.es/~xml/>
•
J. Merelo, Transformando documentos XML usando XSLT <http://geneura.ugr.es/~jmerelo/
XSLT/XSLT-2001-1ed.htm> y Generación de páginas Web usando XSLT y XML
<http://geneurael.ugr.es/~jmerelo/XSLT/>. Gupo GeNeura
•
Catálogo de herramientas XML
<http://www.garshol.priv.no/download/xmltools/cat_ix.html>
•
Proyecto Apache (incluye Cocoon y Xalan) <http://xml.apache.org/>
•
About XML <http://www.ibiblio.org/xml/>
•
Editor XML<http://www.xmlmind.com/xmleditor/>
•
A. Reino, Introducción a XML en castellano, <http://www.areino.com/alf/docs/introxml.pdf>
•
EDI y XML <http://xml.org/feature_articles/2000_1107_miller.shtml>
•
Miloslav Nic (traducción de Iván García), “DTD Tutorial”,
<http://www.zvon.org/xxl/DTDTutorial/General_spa/book.html>.
Más información al respecto de estas tecnologías en <http://www.disca.upv.es/magustim/xml/
xmlInformacio.html>
•
9
Anexo: introducción a XSLT
Este anexo es una somera descripción de algunos elementos que pueden aparecer en una hoja de
transformaciones de una forma práctica. Utilizaremos este mecanismo para transformar un documento
XML y dotarle de un formato de presentación en HTML.
XSL (eXtensible Stylesheet Language), es un lenguaje o vocabulario de XML para transformar
documentos XML, es decir, se utiliza para dar formato (presentación) a un documento. Para ello, a
diferencia de CSS, permite crear una salida que sea el resultado de seleccionar sobre qué parte del
documento de partida se trabaja, componerlo con parte o la totalidad de otros, ... y describir su formato
(su presentación) si es la intención del autor.
XSL está compuesto de tres partes:
•
XSLT (XSL Transformations): La definición de un vocabulario que permite la aplicación de
las modificaciones sobre el documento (o los documentos) de partida. Esto es las reglas que
van a implementar la transformación a aplicar.
•
XPath (XML Path Language): La definición de las expresiones que permiten indicar los
puntos a los que se refieren las acciones.
•
XSL-FO (XSL Formatting Objects): vocabulario especializado en la descripción de los
elementos de presentación quese utilizan en la edición sobre formato papel.
Las transformaciones que se describen con XSL son una secuencia de instrucciones, como el código
fuente de un programa, pero bajo la sintaxis de XML. Se basan en la utilización de tres elementos
constructivos.
•
Las variables y parámetros del proceso, como en otros lenguajes de programación.
•
Los selectores o expresiones que permiten obtener el contenido de un nodo, el de uno de sus
atributos o especificar un conjunto de los primeros.
•
Los patrones o reglas de selección de los elementos del árbol XML que se está procesando,
Para facilitar la diferenciación entre código XSL, propiamente dicho, del resto del documento, en las
XSLs que utilizaremos antepondremos siempre el prefijo xsl: a las etiquetas de este vocabulario. Esto se
conoce como especificación del espacio de nombres y se utiliza para evitar conflictos con etiquetas que
pudieran denominarse igual pero que sean parte del resultado de la transformación.
Para lo que sigue asumiremos que se dispone de un documento XML, que llamaremos trabajoV3.xml,
cuyo contenido es el siguiente:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Trabajo SYSTEM "trabajo.dtd">
<Trabajo>
<Titulo>Titul d'impresió</Titulo>
<Introduccion>
<Resumen>
<Parrafo>Párrafo número 1</Parrafo>
<Parrafo>Este es el segundo</Parrafo>
</Resumen>
</Introduccion>
<Grupo>
<Componente>
<Nombre>Nom </Nombre>
<Datos Correo="[email protected]"/>
<Foto Fichero="foto.jpg" Ancho="4" Alto="4"/>
</Componente>
</Grupo>
</Trabajo>
Ejercicio: Compruebe que está bien formado el documento anterior y guarde el resultado de ejecutar
esta acción en un fichero bienFormado.txt. Valide el documento anterior, guarde el resultado de ejecutar
esta acción en un fichero validar.txt.
Si ha encontrado algún error resuélvalo ahora, antes de seguir adelante
10
1 Trabajando con XSL
Estos documentos están compuestos de reglas, plantillas o templates, que indican cómo se procesa
(transforma) un nodo de un documento XML. Estas pueden describen la transformación a aplicar de
manera detalla. Una transformación XSL puede añadir nuevos elementos como resultado de su
aplicación sobre un documento XML de partida o eliminar elementos, puede también reordenar los
elementos, realizar comprobaciones y tomar decisiones acerca de qué elementos mostrar, etc.
Por ejemplo, podemos obtener una versión en texto ASCII de nuestro documento de partida con una hoja
de transformaciones como:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes" encoding="ISO-8859-1"/>
<xsl:template match="/">
¡Hola, mundo!
áéíóú àèìòù
</xsl:template>
</xsl:stylesheet>
Nota: El elemento raíz que declara que un documento es un hoja de transformaciones
XSL es <xsl:stylesheet> ó <xsl:transform>. Ambos elementos pueden ser utilizados
indistintamente.
Observe que es un fichero XML, que está organizado alrededor de un elemento raiz stylesheet. En un
segundo nivel, hay dos elementos: output y template. El primero sirve para indicar las características
propias del documento que se va a generar como resultado de aplicar estta transformación. El segundo es
el punto de entrada o de inicio de todo el código que realiza la transformación.
Este segundo elemento tiene un atributo match que indica sobre qué elemento del documento XML
original se aplica. En este caso la especificación del la raiz del documento ("/") representa a la totalidad
del documento.
Si el fichero que guarda esta transformación se llama xsl1.xsl, la podemos aplicar sobre el documento
con una órden como:
$ xalan.sh trabajoV3.xml xsl1.xsl resultado1Anexo.txt
Con lo que se obtiene una transformación estática, es decir, independiente del contenido del documento
de partida. El resultado que se obtiene es de la forma:
¡Hola, mundo!
áéíóú àèìòù
2 Un primer documento HTML
Para que sea dinámica, deberá ir obteniendo la salida a partir del contenido del documento en cuestión.
Para ello debe ir extrayendo el contenido del documento y acceder al contenido de los elementos del
documento XML, por ejemplo combinando el uso de la plantilla con el acceso a los elementos:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="ISO-8859-1"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system=”http://www.w3.org/TR/html4/strict.dtd" />
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="Trabajo/Titulo"/></title>
</head>
11
<body>
<h1><xsl:value-of select="Trabajo/Titulo"/></h1>
<p><xsl:value-of select="Trabajo/Introduccion/Resumen/Parrafo”/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
que aplicaremos sobre el documento con una órden como:r
$ xalan.sh trabajoV3.xml xsl2.xsl resultado2Anexo.html
Como el caso anterior se propome la identificación del tipo de documento a generar (output) y una
secuencia de instrucciones de transformación dentro de la única plantilla (template). A diferencia del
caso del apartado anterior, lo que se genera es texto, pero para construir un documento HTML, así que
hay que ir generando las etiquetas propias de este vocabulario de SGML e ir asignando el contenido de
estas etiquetas con las selecciones del documento XML que se realizan con value-of.
Obsérvese cómo se utilizan especificaciones de qué elementos están involucrados con las expresiones
Xpath: como si fuesen rutas del sistema de archivos de un sistema operativo, se especifican de forma
absoluta o relativa al punto del árbol XML al que se aplica una plantilla.
3 Un segundo documento HTML
Para que el proceso se extienda a otros elementos del documento hay que extender estas secuencias de
definición de plantillas (reglas o patrones) junto a las instrucciones que engloban. Veamos nuevos
elementos que se pueden añadir a la transformación anterior y que comentamos en el propio código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="ISO-8859-1"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system=”http://www.w3.org/TR/html4/strict.dtd" />
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="Titulo"/></title>
</head>
<body>
<!-- Para indicar que en este punto se han de lanzar otras plantillas -->
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<!-Una plantilla que se aplicará al aparecer un elemento de etiqueta Titulo en el
documento de partida.
-->
<xsl:template match="Titulo">
<!-- Para seleccionar el contenido del elemento actual del documento de partida: . -->
<h1><xsl:value-of select="."/></h1>
</xsl:template>
<!--
Esta plantillal se aplicará al aparecer un elemento con etiqueta Grupo o Componente
indistintamente. En cualquiera de los dos casos se limitará a continuar el examen del
documento XML
-->
<xsl:template match="Grupo | Componente">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Nombre">
<p class="nom">
12
Jo soc:<xsl:value-of select="."/>.
</p>
</xsl:template>
<xsl:template match="Datos">
<!-Especificar una acción condicionada a la evaluación de una expresión.
La expresión en este caso permite acceder al contenido del atributo Correo del actual
elemento considerado (con la @), el que ha lanzado la ejecución de esta plantilla: Datos.
-->
<xsl:if test="@Correo">
<p class="datos"> Escríbeme al
<!-- Para concaternar una cadena de texto y la evaluación de una expresión: {} -->
<a href="mailto:{@Correo}">
<xsl:value-of select="@Correo"/>
</a>.
</p>
</xsl:if >
</xsl:template>
<!-Esta plantillal se aplicará al aparecer un elemento con etiqueta Foto o Introducción
indistintamente. En cualquiera de los dos caso no se realiza nada con con sus contenidos.
Así que se utilizará para descartarlos en el resultado.
-->
<xsl:template match="Foto | Introduccion">
</xsl:template>
</xsl:stylesheet>
Para aplicar esta nueva transformación se utilizará el mismo mecanismo que en casos anteriores:
$ xalan-sh trabajoV3.xml xsl3.xsl resultado3Anexo.html
4 Otros elementos que pueden aparecer en una transformación XSLT
Aunque este no es un listado, ni mucho menos exhaustivo, sirva como ejemplo de opciones o
“instrucciones” disponibles en este lenguaje:
•
for-each. Para realizar un proceso de manera repetida sobre los elementos que cumplan la
expresión que se indica en el atributo select de este elemento. Así para que el resumen sea
capaz de mostrar todos los párrafos que se dispongan:
<xsl:template match="Introduccion/Resumen">
<xsl:for-each select="Parrafo">
<p><xsl:value-of select=”.”/></p>
</xsl:for-each>
</xsl:template>
•
Las expresiones (que aparecen en el atributo match de las plantillas, test de las condicionales
o en el select de otras instrucciones pueden especificar un elemento en base a su orden
jerárquico y además a los que cumplan que tienen un atributo con un cierto valor. Por ejemplo,
para no aplicar la plantilla anterior de Datos si el atributo Asignatura no tiene el valor
“IMD”:
<xsl:template match="Datos[@Asignatura = 'IMD']">
<!-- No hay cambios en el código interno de esta plantilla
respecto al ejemplo anterior-->
</xsl:template
Otros operadores que se pueden utilizar son, por citar algunos,
= (igual a), != (distinto de),
< (menor que) ó > (mayor que), ... Obsérvese que se ha alternado el uso de las comillas
(dobles “ y simples ') en las especificación de la selección para conseguir un código XSL
sintácticamente correcto.
•
En ocasiones es necesario procesar los elementos del documento en relación a su orden dentro
de la jerarquía de elementos del documento. Por ejemplo, se puede plantear escribir las
palabras clave como términos separados por comas, excepto el último de los mismos que deber
llevar un punto. Esto es posible con el uso de funciones como las de este ejemplo:
<xsl:template match="PalabrasClave">
13
<p>
<xsl:for-each select="Item">
<xsl:value-of select="."/>
<xsl:if test="position()=(last()-1)"> <xsl:text> i </xsl:text></xsl:if >
<xsl:if test="position() < (last()-1)"> <xsl:text>, </xsl:text> </xsl:if >
<xsl:if test="position()=last()"> <xsl:text>.</xsl:text> </xsl:if >
</xsl:for-each>
</p>
</xsl:template>
•
14
Otros, que no se detallan ahora pero que pueden resultar de interés inmediato son sort, para
ordenar por un criterio diferente al orden de aparición en el documento; y choose, para
selección múltiple.
Descargar