En esta entrada propongo un clásico de las transformaciones XSLT. Un clásico porque tabular datos en una tabla supone la manera más natural de presentarlos. La presentación de datos mediante una tabla es una manera muy intuitiva de comprenderlos.
El fichero XML corresponde a una exportación a formato XML de la base de datos de aprendizaje "The Bank Schema", del libro Learning SQL, by Alan Beaulieu.
La tabla es la siguiente:
<prueba> <!-- Tabla officer --> <officer> <officer_id>1</officer_id> <cust_id>10</cust_id> <fname>John</fname> <lname>Chilton</lname> <title>President</title> <start_date>1995-05-01</start_date> </officer> <officer> <officer_id>2</officer_id> <cust_id>11</cust_id> <fname>Paul</fname> <lname>Hardy</lname> <title>President</title> <start_date>2001-01-01</start_date> </officer> <officer> <officer_id>3</officer_id> <cust_id>12</cust_id> <fname>Carl</fname> <lname>Lutz</lname> <title>President</title> <start_date>2002-06-30</start_date> </officer> <officer> <officer_id>4</officer_id> <cust_id>13</cust_id> <fname>Stanley</fname> <lname>Cheswick</lname> <title>President</title> <start_date>1999-05-01</start_date> </officer> </prueba>
La hoja de transformación XSLT será:
<?xml version="1.0" encoding="UTF-8"?> <!-- New document created with EditiX at Sun Mar 25 23:18:28 BST 2012 --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Elijo formato html como salida --> <xsl:output method="html"/> <!-- Apunta el comienzo del árbol --> <xsl:template match="/"> <html> <body> <table border="1"> <!-- pongo los cabeceros a las columnas--> <tr> <td><b>officer_id</b></td> <td><b>cust_id</b></td> <td><b>fname</b></td> <td><b>lname</b></td> <td><b>title</b></td> <td><b>start_dat</b></td> </tr>
<!-- El corazón de la transformación. Recorre el nodo officer extrayendo el contenido y, a la vez, rellenando la tabla --><xsl:for-each select="*/officer"> <tr> <td><xsl:value-of select="officer_id"/></td> <td><xsl:value-of select="cust_id"/></td> <td><xsl:value-of select="fname"/> </td> <td><xsl:value-of select="lname"/></td> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="start_date"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Esta será la salida de la transformación. Si no estás nada puesto en el tema de las transformaciones esto te sonará raro. Es cuestión de paciencia porque de la misma manera que a los mortales no nos es dado conocer todos los vericuetos de las metamorfosis que los dioses realizaban en la antigua Grecia, así se nos muestran esquivos los artilugios y los mecanismos necesarios para llevar a cabo nuestra empresa de lograr que los códigos transformen nuestras querencias.
Es difícil conseguir un programa que realice de forma correcta las transformaciones XSLT. Generalmente suelen ser editores de texto XML que llevan incorporado el transformador. Lo veremos con calma en otra entrada. Los buenos son de pago y los que están programados en código abierto son muy difíciles de tratar porque al estar enfocados a un lenguaje de programación tienes que tener dominio de Perl, C++, Java, etc, para entender qué es lo que se traen entre manos.
Para esta entrada es suficiente con saber que utilizo EditiX, que tiene una versión restringida para uso académico que, a pesar de sus restricciones funciona muy bien para aprender. Las limitaciones afectan más bien a la productividad de la aplicación, o sea, el rendimiento y los atajos si se trata de utilizarla para labores profesionales. La misma aplicación te avisa si tratas de usar tareas que están limitadas.
Si te fijas verás que la hoja de transformación contiene al principio del texto el programa que la realiza. Es un mera publicidad, imagino que se trata de un recurso de sus diseñadores para seguir la pista de quienes los utilizamos. Lo dejo porque de alguna manera hay que agradecer que permitan utilizar gratuitamente un recurso tan potente y versátil.
<html> <body> <table border="1"> <tr> <td><b>officer_id</b></td> <td><b>cust_id</b></td> <td><b>fname</b></td> <td><b>lname</b></td> <td><b>title</b></td> <td><b>start_dat</b></td> </tr> <tr> <td>1</td> <td>10</td> <td>John</td> <td>Chilton</td> <td>President</td> <td>1995-05-01</td> </tr> <tr> <td>2</td> <td>11</td> <td>Paul</td> <td>Hardy</td> <td>President</td> <td>2001-01-01</td> </tr> <tr> <td>3</td> <td>12</td> <td>Carl</td> <td>Lutz</td> <td>President</td> <td>2002-06-30</td> </tr> <tr> <td>4</td> <td>13</td> <td>Stanley</td> <td>Cheswick</td> <td>President</td> <td>1999-05-01</td> </tr> </table> </body> </html>
Para acabar muestro la tabla tal como saldría en el navegador, o sea la interpretación del código anterior
officer_id | cust_id | fname | lname | title | start_dat |
1 | 10 | John | Chilton | President | 1995-05-01 |
2 | 11 | Paul | Hardy | President | 2001-01-01 |
3 | 12 | Carl | Lutz | President | 2002-06-30 |
4 | 13 | Stanley | Cheswick | President | 1999-05-01 |
Si quisieramos embellecerla: CSS al canto. Pinceladitas de color en las estructuras, digo
No hay comentarios:
Publicar un comentario