Reglas de plantilla
Las reglas de plantilla (template) son patrones (patterns) para la transformación del árbol fuente en el árbol resultado. Éstas se componen de dos partes, la primera se conoce como patrones de búsqueda y la segunda como plantillas. A través del patrón se identifican los nodos del árbol fuente a los cuales se aplica la regla.
Estructura de la regla
Para mostrar el funcionamiento de las plantillas ampliamos la hoja de estilo de nuestro ejemplo con algunas plantillas pequeñas.
La hoja de estilo:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="iso-8859-1" />
<xsl:template match="antologia">
<html>
<body>
<xsl:apply-templates/> (1)
</body>
</html>
</xsl:template>
<xsl:template match="autor">
<br/>
<h4>
<xsl:apply-templates/>
</h4>
</xsl:template>
<xsl:template match="nombre">
<xsl:apply-templates/>
<xsl:text> </xsl:text> (2)
</xsl:template>
<xsl:template match="apellido">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="titulo">
<h2>
<xsl:apply-templates/>
</h2>
</xsl:template>
<xsl:template match="estrofa">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="verso">
<xsl:apply-templates/>
<br/>
</xsl:template>
</xsl:stylesheet>
(1) En este lugar se copiará el contenido del elemento <antologia> junto con todos sus subelementos. El procesador busca subelementos hasta la misma base de caracteres, así como plantillas que se puedan aplicar. Debido a que en nuestro ejemplo hay definida una plantilla para cada subelemento, se copiará el contenido de estas plantillas en la estructura del documento resultado. En caso de que no hubiera una plantilla para un determinado subelemento, el procesador simplemente copiaría el contenido del mismo.
(2) A través de <xsl:text> se introduce aquí un espacio en blanco en el documento resultado.
Vista del navegador:
Ejercicio 1
a) Cree una plantilla para el archivo poema.xml. Cada uno de los elementos que aparecen en el mismo debe quedar definido. Genere además un título "Antología" que aparezca al inicio del documento.
b) ¿Por qué aparece el texto de un elemento, aunque no tenga ninguna plantilla asignada que lo defina?
c) Borre los datos de los autores y escriba su propio nombre como autor.
>> ver soluciones del ejercicio 1
Plantilla con nombre
En el ejemplo dado las plantillas se aplican a los elementos (nudos en la estructura del documento de origen XML). Estas plantillas se definen a través del elemento <xsl:template> y del atributo match. No obstante, las plantillas pueden definirse también con independencia de tales nodos. En lugar del atributo match aparece el atributo name con un nombre cualquiera, por ejemplo muestra. El elemento <xsl:template> es válido para ambos tipos de plantilla. Sin embargo, la ejecución es distinta para cada variante. Las plantillas que tienen asignadas un nodo se invocan mediante el elemento <xsl:apply-templates>, mientras que las plantillas con nombre se invocan a través del elemento <xsl:call-template> y del atributo name. Por ejemplo: <xsl:call-template name="muestra">. El atributo match con el elemento <xsl:apply-templates> hace que se busque en el documento XML según un patrón búsqueda, de manera que la plantilla no se ejecuta hasta que se produzca una coincidencia. Mediante el atributo name sólo se busca en la hoja de estilo la plantilla del mismo nombre cuando se realice una llamada a ésta.
La hoja de estilo:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="iso-8859-1" version="1.0"/>
<xsl:template match="antologia">
<html>
<body>
<h1>antologia</h1>
<p>
<xsl:call-template name="titulo"/>
</p>
</body>
</html>
</xsl:template>
<xsl:template name="titulo">
<br/>titulo: <xsl:apply-templates select="poema/titulo"/>
</xsl:template>
<xsl:template match="titulo">
<h4>
<xsl:apply-templates/>
</h4>
</xsl:template>
</xsl:stylesheet>
Ejercicio 2
a) ¿Por qué se añade la especificación del atributo select en <xsl:apply-templates select="poema/titulo"/> ?
b) Escriba su hoja de estilo de manera que también aparezcan el nombre y apellidos del autor.
Observación:
La disyunción de varios elementos puede conseguirse a través del operador de unión "|".
c) ¿Qué ocurre si no se ejecuta algún elemento?
>> ver soluciones del ejercicio 2
<< anterior | siguiente >> |
© Derechos de autor 2004, dpunkt.verlag GmbH
El usuario podrá imprimir la versión online. La copia será exclusivamente para uso personal. Por lo demás el presente capítulo del libro "XSL-FO in der Praxis" está sometido a los mismos términos y condiciones que la versión impresa. La presente obra está protegida en su totalidad por la ley de propiedad intelectual. Reservados todos los derechos, incluyendo los derechos de reproducción, traducción, microfilmación, así como el almacenamiento y procesamiento en sistemas electrónicos.
dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, teléfono + 49 (0) 6221-14830, fax +49 (0) 6221-148399, hallo(at)dpunkt.de