8.2
Hoja de estilo para transformación a HTML
La hoja de estilos XSL (Extensible Stylesheet Language), que se aplica en la transformación XSLT (XSL Transform) del documento XML anterior para su visualización sobre un navegador web es:
<asignatura id="a6" curso="4">
<nombre>Tratamiento Digital de Senales</nombre>
<dia>13</dia>
</asignatura>
<asignatura id="a7" curso="5">
<nombre>Lab de Simulacion de Redes y Teletrafico</nombre>
<dia>14</dia>
</asignatura>
<asignatura id="a8" curso="5">
<nombre>Comunicaciones Opticas</nombre>
<dia>18</dia>
</asignatura>
<asignatura id="a9" curso="1">
<nombre>Teoria de Circuitos</nombre>
<dia>15</dia>
</asignatura>
<asignatura id="a10" curso="5">
<nombre>Ampliacion de Conmutacion</nombre>
<dia>17</dia>
</asignatura>
CAPITULO 8.- PLANOS DE CÓDIGO 147
<?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" encoding="ISO-8859-1" indent="yes"/>
<xsl:variable name="numero_asig" select="count(//asignatura)"/>
<xsl:variable name="comienzo" select="/calendario/mes/@dia_comienzo"/>
<xsl:variable name="dias_mes" select="/calendario/mes/@n_dias"/>
<xsl:variable name="total" select="$comienzo + $dias_mes - 1"/>
<xsl:variable name="overflow" select="$total mod 7"/>
<xsl:variable name="n_elementos">
<xsl:choose>
<xsl:when test="$overflow > 0">
<xsl:value-of select="$total + 7 - $overflow"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$total"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:template match="calendario">
<html>
<head>
<title>Exámenes <xsl:value-of select="/calendario/mes/nombre"/></title>
</head>
<body bgcolor="lightblue">
<br/>
<h1 align="center">
Agenda de Exámenes <xsl:value-of select="/calendario/mes/nombre"/>
</h1>
<br/>
<table title="Calendario" border="2" bgcolor="lightgoldenrodyellow" align="left"> <tr bgcolor="white"> <th>Lunes</th> <th>Martes</th> <th>Miercoles</th> <th>Jueves</th> <th>Viernes</th> <th>Sabado</th> <th>Domingo</th> </tr>
<xsl:call-template name="mes"/>
<div class="tablaCentral">
<table title="Fechas" align="right" border="1" bgcolor="lightgoldenrodyellow" borderwidth="4">
<tr bgcolor="white">
<th class="curso">Curso</th>
<th class="nombre">Asignatura</th>
<th class="dia">Fecha</th>
</tr>
<xsl:apply-templates select="asignatura">
<xsl:sort select="dia" data-type="number"/>
</xsl:apply-templates>
<tr>
<td class="final" colspan="3" align="center" bgcolor="white">Número de exámenes: <xsl:value-of select="$numero_asig"/>
</td> </tr> </table> </div> <br/> <br/>
<h3 align="center">Para consulta sobre las asignaturas: <a href="{url}">
<xsl:value-of select="url"/>
</a> </h3> <br/> <br/> <br/> <tr> <td width="100%">
<table border="0" width="100%" cellpadding="2">
<tr>
<td width="100%" bgcolor="#add8e6" align="center">
<input type="submit" name="Volver" value="Volver"/>
</td> </tr> </table> </td> </tr> </body> </html> </xsl:template>
CAPITULO 8.- PLANOS DE CÓDIGO 149
<!-- Solo es llamado una vez por 'root' -->
<!-- Utiliza recursividad con indice+7 para cada semana-->
<xsl:template name="mes">
<xsl:param name="indice" select="1"/>
<xsl:if test="$indice < $n_elementos">
<xsl:call-template name="semana">
<xsl:with-param name="indice" select="$indice"/>
</xsl:call-template>
<xsl:call-template name="mes">
<xsl:with-param name="indice" select="$indice + 7"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- Se llama el template 'mes' cada semana -->
<xsl:template name="semana">
<xsl:param name="indice" select="1"/>
<tr>
<xsl:call-template name="dias">
<xsl:with-param name="indice" select="$indice"/>
<xsl:with-param name="contador" select="$indice + 6"/>
</xsl:call-template>
</tr>
</xsl:template>
<!-- Es llamado por semana -->
<!-- Rutina que va imprimiendo cada dia de la semana, usando recursividad con: indice+1-->
<xsl:template name="dias">
<xsl:param name="indice" select="1"/>
<xsl:param name="contador" select="1"/>
<xsl:choose>
<xsl:when test="$indice < $comienzo">
<td align="center">-</td>
</xsl:when>
<xsl:when test="$indice - $comienzo + 1 > $dias_mes">
<td align="center">-</td>