XML es el acrónimo de eXtensible Markup Language.
XML es un formato estándar del World Wide Web Consortium (W3C) diseñado a
partir de SGML para representar datos estructurados de forma jerárquica (en un árbol).
Los documentos XML incluyen una serie de etiquetas que permiten crear documentos
autocontenidos, en los que los datos van siempre acompañados de sus metadatos
correspondientes.
XML no es, como su nombre puede sugerir, un lenguaje de marcado. XML es un
metalenguaje que permite definir lenguajes de marcado adecuados a usos específicos.
Aunque a primera vista un docuento XML puede parecer similar a HTML hay una
diferencia fundamental: un documento XML contiene datos que se autodefinen,
exclusivamente. Un documento HTML contiene datos mal definidos, mezclados con
elementos de formato. En XML se separa el contenido de la presentación
de forma total.
XML, al que algunos consideran el Esperanto de los sistemas de información,
se emplea principalmente para representar documentos (texto con etiquetas que
identifican porciones del documento, como es el caso de estos apuntes) y conjuntos
de datos (estructuras de datos jerárquicas, para ser más precisos).
Entre sus ventajas se encuentra su aceptación casi universal,
su legibilidad y su carácter autocontenido (a diferencia de los formatos
binarios propios de cada aplicación), si bien el tamaño de los
documentos XML es mayor que el de sus equivalentes binarios y su
procesamiento requiere más recursos, por lo que no resulta adecuado
en aplicaciones en las que la eficiencia sea un objetivo prioritario.
En resumen, XML permite representar datos de forma homogénea
en entornos heterogéneos, lo que facilita la interoperabilidad
entre distintos sistemas. Además, hoy en día goza de gran
popularidad, pues todas las grandes empresas promueven su
utilización y se han desarrollado numerosas tecnologías
basadas en este formato estándar (SOAP, ebXML, BizTalk,
WebSphere, etc.).
Un pequeño ejemplo
Representación de datos en formato ASCII (antes de que existiese XML):
"PO-1234","CUST001","X9876","5","14.98"
|
Representación de los mismos datos en XML:
<pedido>
<id>PO-1234</id>
<cliente>CUST001</cliente>
<producto>X9876</producto>
<cantidad>5</cantidad>
<precio>14.98</precio>
</pedido>
|
Antes de nada hay que resaltar que XML es sensible a las
mayúsculas.
Elementos
Los elementos XML están delimitados por etiquetas de comienzo
y fin entre las que se escribe su contenido:
<etiqueta> ... </etiqueta>
|
También pueden estar vacíos (elementos sin contenido):
La primera línea es correcta en HTML, no en XML.
La segunda si lo es:
<LI>Esto es HTML<BR> que es muy permisivo.</LI>
<LI>XML es <BR/> mucho más restrictivo.</LI>
|
El contenido de un elemento puede ser complejo: un elemento puede
contener a otros elementos.
Atributos
Los distintos elementos de un documento XML pueden incluir atributos
que describen al elemento en cuestión (tipo de datos, dominio de valores permitidos, etc.).
Dichos atributos han de aparecer en la etiqueta de comienzo del elemento y el valor del
atributo debe especificarse entre comillas dobles (") o simples ('):
<etiqueta atributo="valor"> ... </etiqueta>
|
Instrucciones de procesamiento
En su prólogo, un documento XML puede incluir una serie de instrucciones de
procesamiento, delimitadas por: <? ... ?> ,
en las que se puede indicar el sistema de codificación
empleado (Unicode por defecto), especificar la hoja de estilo XSLT que se
empleará para visualizar el documento, declarar espacios de nombres
y definir el esquema del documento, etc. Solo se requiere, obligatoriamente,
especificar que se trata de un documento XML:
Un ejemplo más detallado en el que se especifica la hoja
de estilo que se aplica al documento para su presentación es
el siguiente:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="template.xsl"?>
<root>
<element1> <subelement1 /> <subelement2 /> </element1>
<element2> </element2>
<element3 type="string"> </element3>
<element4 type="integer" value="9.3"> </element4>
</root>
|
Entidades
Las entidades en XML proporcionan un mecanismo de
substitución textual:
< |
< |
> |
> |
& |
& |
' |
' |
" |
" |
XML permite que se puedan definir nuevas entidades.
Algunas (parsed entities) pueden contener texto y
etiquetas XML, mientras que otras (unparsed entities)
sirven para almacenar cualquier tipo de datos
(imágenes, sonidos...).
<!ENTITY lt "&#60;">
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
|
Comentarios y secciones
CDATA
Finalmente, un documento XML también puede incluir comentarios,
delimitados por las construcciones <!-- y
--> (exactamente igual que en HTML) y secciones
CDATA que sirven para incluir cualquier cosa
(contenido textual) en el documento XML, delimitadas por las
construcciones <![CDATA[ y ]]>
(como <PRE> ... </PRE> en HTML).
<!-- Esto es un comentario -->
<!-- Este codigo XML no usa CDATA -->
<ejemplo>
<html>
<head>
<title>Rock & Roll</title>
</head>
</html>
</ejemplo>
|
<!-- Este codigo XML usa CDATA -->
<ejemplo>
<![CDATA[
<html>
<head>
<title>Rock & Roll</title>
</head>
</html>
]]>
</ejemplo>
|
Documentos XML bien formados
Un documento bien formado en XML tiene que reunir las siguientes cualidades:
- Debe haber un y sólo un elemento raíz.
- Los subelementos deben estar adecuadamente anidados.
Esto es, un elemento ha de terminar con la misma etiqueta con la que comenzó.
- Los atributos son opcionales (y se definen en un esquema
que también es opcional).
- Los valores de los atributos han de estar delimitados por
comillas dobles (") o comillas simples (').
- Las instrucciones de procesamiento son opcionales.
- XML es sensible a mayúsculas y minúsculas.
Es decir,
<tag> y <TAG> no hacen
referencia al mismo tipo de elemento.
Teniendo en cuenta las estrictas reglas anteriores, el siguiente
documento XML no es válido porque sus elementos no están anidados correctamente:
<?xml Version="1.0" ?>
<parent>
<child1> child 1 </child1>
<child2> <child3> child 3 or 2? </child2> </child3>
</parent>
|
El siguiente documento XML tampoco es válido porque tiene dos raíces:
<?xml Version="1.0" ?>
<parent>
<child1> Un elemento </child1>
</parent>
<parent>
<child1> Otro elemento </child1>
</parent>
|
Sin embargo, el siguiente documento XML sí que es válido:
<?xml Version="1.0" ?>
<parent>
<child1> Elemento </child1>
<child2/>
<child3> </child3>
</parent>
|
En la siguiente figura mostramos un ejemplo de un documento XML bien formado
donde se distinguen claramente las distintas partes:
XML en sí es bastante simple. Sin embargo, existen múltiples tecnologías relacionadas cuyo aprendizaje requiere algo más de esfuerzo:
XML | eXtensible Markup Language | Definición de documentos XML | DTD | Document Type Definition | Definición del esquema de documentos XML (en un formato distinto a XML) | XSD | XML Schema | Definición del esquema de documentos XML (en XML) | XDR | XML Data Reduced | Precursor de XML Schema (Microsoft) | XSL | eXtensible Stylesheet Language | Definición de hojas de estilo (XSLT + XSL-FO) | XSLT | XSL Transformations | Transformación de documentos XML | XSL-FO | XSL Formatting Objects | Descripción del layout de un documento | XPath | XML Path language | Acceso a partes de un documento XML (usado en XSLT y XPointer) | XPointer | XML Pointer language | Acceso a la estructura interna de un documento XML | XLink | XML Linking language | Descripción de enlaces entre documentos XML | XQuery | XML Query language | Mecanismo para hacer consultas en documentos XML | XMLEnc | XML Encryption | Criptografía para documentos XML | XMLDSig | XML-Signature | Firmas digitales en XML | XKMS | XML Key Management | Gestión de claves en XML | DOM | Document Object Model | API para crear, acceder y modificar documentos XML | SAX | Simple API for XML | API para trabajar con documentos XML | XHTML | XML HTML | Versión de HTML compatible con XML | XForms | XML Forms | Formularios web en XML | Data Island | | Inclusión de datos XML en un documento HTML | Data Binding | | Generación automática de HTML a partir de documentos XML |
<?xml version="1.0" encoding="ISO-8859-1" ?>
<library>
<book>
<title language="es">Sherlock Holmes: Obras Completas</title>
<author>Arthur Conan Doyle</author>
<edition>
<publisher>Gramercy</publisher>
<year>2002</year>
<isbn>0517220784</isbn>
<pages>480</pages>
</edition>
</book>
<book>
<title language="es">Obras Completas de Edgar Allan Poe</title>
<author>Edgar Allan Poe</author>
<edition>
<publisher>Doubleday</publisher>
<year>1984</year>
<isbn>0385074077</isbn>
<pages>832</pages>
</edition>
</book>
<book>
<title language="es">Un mundo feliz</title>
<author>Aldous Huxley</author>
<edition>
<publisher>DeBolsillo</publisher>
<year>2006</year>
<isbn>8497594258</isbn>
<pages>255</pages>
</edition>
</book>
<book>
<title language="es">La conjura de los necios</title>
<author>John Kennedy Toole</author>
<edition>
<publisher>Editorial Anagrama</publisher>
<year>2005</year>
<isbn>8433920421</isbn>
<pages>365</pages>
</edition>
</book>
</library>
|
CSS es el acrónimo de Cascading Style
Sheet (hoja de estilo en cascada).
CSS es un lenguaje de hojas de estilo que se utiliza normalmente para
controlar la presentación de documentos HTML, pero también se puede
utilizar con documentos XML. Su principal característica, en contraste
con el lenguaje XSLT, es su sencillez.
Ventajas:
- Fácil de aprender y utilizar. Muchos desarrolladores ya lo
conocen.
- No requiere la creación de una página HTML para visualizar
código XML.
- Consume poca memoria y tiempo de proceso, pues no construye una
representación en árbol del documento.
- Muestra el documento según se va procesando.
Desventajas:
- Utiliza una sintaxis diferente a la del XML.
- Sólo sirve para visualizar documentos en un navegador.
- No es muy flexible:
- No permite realizar manipulaciones sobre el documento, tales como
añadir y borrar elementos, realizar ordenaciones, etc.
- Sólo permite acceder al contenido de los elementos, no
a los atributos, no permite instrucciones de proceso, etc.
Para usar una hoja de estilo CSS para presentar el contenido de
un documento XML hay que añadir la siguiente línea en el prólogo:
<?xml-stylesheet type="text/css" href="fichero.css" ?> |
donde fichero.css es el nombre del fichero CSS que contiene
las reglas de formato.
EJEMPLO
Un fichero de estilo sencillo style.css
asociado al fichero libros.xml podría ser:
/* style.css */
title
{
display:block;
margin-top:12pt;
font-size:15pt
}
author
{
display:block;
color:blue;
font-style:italic
}
isbn
{
font-weight:bold
}
pages
{
font-size: 10pt;
left: 30pt;
color: maroon;
font-style: italic;
font-family: Arial;
position: static;
top: 10pt;
}
publisher
{
display: none;
}
|
Si se añade la línea oportuna en LibrosDeCasa.xml
para usar el fichero de estilo MuySencillo.css :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/css" href="style.css"?>
<library>
<book>
<title language="es">Sherlock Holmes: Obras Completas</title>
<author>Arthur Conan Doyle</author>
...
...
|
El resultado, visto en un navegador, queda de la siguiente forma:
Introducción
XSLT es el acrónimo de EXtensible Stylesheet
Languaje Transformation.
XSL es un lenguaje que nos permite definir la forma en que queremos ver
los datos almacenados en un documento XML. De hecho, un documento XML puede
tener varias hojas de estilo XSL que lo muestren en diferentes
formatos (HTML, PDF, RTF, PostScript, etc.)
En realidad, XSL es un lenguaje que define la transformación
entre un documento XML de entrada y otro documento XML
de salida.
La aplicación de una hoja de estilo XSL a un documento XML
puede ocurrir tanto en el origen (por ejemplo, un
servlet que convierta de XML a HTML para que sea
mostrado en el navegador de un ordenador conectado a un servidor
web) o en el mismo navegador (por ejemplo, Internet Explorer 6).
Para aclarar terminología, XSL es un estándar que
consiste en:
-
XSLT: Lenguaje para transformar documentos XML en
otro formato (otro XML, HTML, DHTML, texto plano, PDF, RTF,
Word, etc.)
-
XSL-FO (XSL Formatting Objects):
Especificación que define cómo deben mostrarse las páginas de un documento
XML cuando queremos "imprimirlo" (PDF, Word, imágenes...).
-
XPath: Lenguaje de consulta genérico para
identificar (y seleccionar) elementos de un documento XML.
La principal característica del lenguaje XSLT es su potencia.
XSLT no es únicamente un lenguaje para visualizar documentos XML, sino
que también nos permite transformarlos y manipularlos.
Esta manipulación se realiza mediante un procesador XSLT.
Ventajas y desventajas
Ventajas:
- La salida no tiene por qué ser HTML para visualización
en un navegador, sino que puede estar en muchos formatos.
- Permite manipular de muy diversas maneras un
documento XML: reordenar elementos, filtrar, añadir,
borrar, etc.
- Permite acceder a todo el documento XML,
no sólo al contenido de los elementos.
-
XSLT es un lenguaje XML, por lo que no hay que
aprender nada especial acerca de su sintaxis.
Desventajas:
- Su utilización es más compleja.
- Consume cierta memoria y capacidad de proceso,
pues se construye un árbol con el contenido del documento.
Formas de uso
- Visualizar directamente en un navegador el documento XML,
al que asociamos una hoja XSLT. El navegador debe tener
incorporado un procesador XSLT.
- Ejecutar el procesador XSLT como un programa independiente.
Se le pasan las entradas necesarias (fichero XML origen y hoja XSLT) y
éste genera la salida en un fichero con el que podemos
hacer lo que queramos.
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
|
Para usar un fichero XSLT desde un documento XML hay que añadir
la siguiente línea en el prólogo:
<?xml-stylesheet type="text/xsl" href="fichero.xslt" ?> |
donde fichero.xslt es el nombre del fichero XSLT.
Por ejemplo, modificaremos el fichero libros.xml
para que quede como sigue:
<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="libros.xsl" ?>
<library>
<book>
<title language="es">Sherlock Holmes: Obras Completas</title>
<author>Arthur Conan Doyle</author>
...
...
|
Solo falta que escribamos las transformaciones
en el fichero XSLT ...
Elaboración de transformaciones XSLT
- Se basa en
considerar que los elementos que forman el documento
XML mantienen una relación jerárquica
(son nodos de un árbol).
- Una hoja de estilo XSL consta de una serie de
reglas que determinan cómo se debe realizar la
transformación. Cada regla se compone de:
- patrón (pattern).
- plantilla (template) o
acción.
- Cada regla afecta a uno o varios elementos del
documento XML.
- Sintácticamente, las reglas tienen tres partes:
- La marca de apertura que contiene un atributo
match que describe a qué partes del documento
se aplica la regla (qué nodos están afectados).
La sintaxis del patrón (valor del atributo
match ) debe seguir las especificaciones del
lenguaje XPath.
- La parte central describe qué debe hacerse cuando se
produce una coincidencia.
- La marca de cierre.
<xsl:template match="PATRÓN"> <!-- Apertura -->
... <!-- Contenido -->
</xsl:template> <!-- Cierre -->
|
Así, cada elemento template se asocia con un
fragmento del documento XML (que puede ser un elemento o un
conjunto de elementos) y se transforma en otro fragmento de
XML o HTML, de acuerdo a lo que se especifique en su interior.
RESUMEN: ¿Cómo se realiza la transformación?
- El documento origen se pasa al procesador XSLT.
- (El procesador carga una hoja de estilo XSLT)
- El procesador entonces:
- Carga los patrones especificadas en la
hoja de estilo...
- Recorre el documento XML origen, nodo por nodo...
- Si un nodo se ajusta a un patrón:
- Aplica las acciones especificadas, y
- Proporciona el resultado en un nuevo documento.
Otros elementos de XSL
Además de xsl:template , los elementos del
espacio de nombres xsl (¿instrucciones XSL?)
que nos ayudan a escribir transformaciones son:
-
xsl:apply-templates hace que se
apliquen las reglas que siguen a todos los
nodos seleccionados.
Puede restringirse con el atributo select
para especificar un subconjunto de nodos.
<xsl:apply-templates select="PATRÓN" />
|
-
xsl:value-of extrae un valor concreto
(literal) del documento.
<xsl:value-of select="PATRÓN" />
|
-
xsl:for-each aplica una acción
repetidamente para cada nodo de un conjunto.
En definitiva, se usa para iterar sobre una serie
de elementos.
<xsl:for-each select="PATRÓN">
.....
</xsl:for-each>
|
-
xsl:if sirve para evaluar condiciones
sobre valores de atributos o elementos.
<xsl:if test="EXPRESIÓN LÓGICA">
.....
</xsl:if>
|
-
xsl:choose sirve para evaluar condiciones
múltiples (tipo switch ).
<xsl:choose>
<xsl:when test="EXPRESIÓN 1"> ... </xsl:when>
<xsl:when test="EXPRESIÓN 2"> ... </xsl:when>
.....
<xsl:otherwise> ... </xsl:otherwise>
</xsl:choose>
|
-
xsl:sort ordena un conjunto
de nodos de acuerdo a algún elemento.
<xsl:sort select="PATRÓN" order="ascending" />
|
XPath
Los patrones que aparecen en la cabecera de una regla XSL
pueden ser muy complejos y, como hemos indicado,
se especifican utilizando un lenguaje llamado XPath. XPath es un
lenguaje de consulta usado para identificar y seleccionar
nodos (elementos) de un documento XML.
XPath se caracteria por:
- Ser declarativo (vs. procedimental).
- Ser dependiente del contexto, ya que los resultados
dependen del nodo "actual".
- Admitir expresiones comunes: operadores de comparación,
lógicos y matemáticos (
= , < ,
and , or , * ,
+ , etc.)
Los operadores empleados habitualmente para formar
los patrones se describen en la siguiente tabla:
/
|
Selección de hijo.
Selecciona únicamente a los descendientes directos.
Al principio del patrón el contexto es la raíz del documento.
|
//
|
Selección de descendientes.
Selecciona todos los descendientes.
|
.
|
Selección del elemento actual (el contexto).
|
*
|
Todos (en el sentido habitual de este operador)
|
@
|
Prefijo que se antepone al nombre de un atributo.
|
[ ]
|
Filtro sobre el conjunto de nodos seleccionado.
|
Algunos ejemplos:
./author
selecciona todos los elementos author
dentro del contexto actual (todos los hijos del
nodo actual que tengan como etiqueta
author ).
//title
selecciona todos los elementos title
en cualquier parte del documento.
book/title
selecciona los elementos (posiblemente uno solo)
con etiqueta title que cuelgan
directamente book .
book/title[@language='es']
selecciona todos los elementos title
que aparecen dentro de book (los seleccionados antes) y de éstos
nos quedamos sólo con aquéllos que tengan el valor es
en su atributo language .
Ejemplo 1
Lista con todos los libros, mostrando únicamente el título
de cada libro:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/library">
<h2>LISTA DE LIBROS</h2>
<xsl:apply-templates />
<hr/>
</xsl:template>
<xsl:template match="book">
<p><xsl:value-of select="title" /></p>
</xsl:template>
</xsl:stylesheet>
|
Recordemos que en el fichero XML
(libros.xml ) debemos indicar el
fichero de transformación:
<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="libros.xsl" ?>
<library>
...
|
Ejemplo 2
A continuación mostraremos tanto el título del libro como su autor con el siguiente fichero XSLT:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head><title>Lista de libros</title></head>
<body bgcolor="#ffffcc">
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="library">
<h2>Mi biblioteca:</h2>
<xsl:apply-templates />
<hr/>
</xsl:template>
<xsl:template match="book">
<p>
<xsl:apply-templates select="title"/>
(<xsl:apply-templates select="author"/>)
</p>
</xsl:template>
<xsl:template match="title">
<font color="#0000cc">
<xsl:value-of select="." />
</font>
</xsl:template>
<xsl:template match="author">
<font color="#cc0000">
<xsl:value-of select="." />
</font>
</xsl:template>
</xsl:stylesheet>
|
El fichero XML quedará ahora:
Ejemplo 3
En este ejemplo practicamos con la construcción
iterativa xsl:for-each para mostrar un
informe detallado de cada libro:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head><title>Informe detallado</title></head>
<body bgcolor="#cdd9da">
<h2>Informe detallado</h2>
<hr />
<xsl:for-each select="/library/book">
<b>Título: </b>
<i><xsl:value-of select="title" /></i><br />
<b>Autor : </b>
<i><xsl:value-of select="author" /></i><br/>
<b>Editorial: </b>
<i><xsl:value-of select="edition/publisher" /></i><br/>
<b>Año: </b>
<i><xsl:value-of select="edition/year" /></i><br/>
<b>ISBN: </b>
<i><xsl:value-of select="edition/isbn" /></i><br/>
<b>Número de páginas: </b>
<i><xsl:value-of select="edition/pages" /></i><br/>
<hr />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
Ejemplo 4
En este ejemplo practicamos con la construcción
de selección condicional xsl:if para mostrar
sólo libros editados a partir del 2001:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<xsl:apply-templates select="library" />
</html>
</xsl:template>
<xsl:template match="library">
<head><title>Libros del siglo XXI</title></head>
<body bgcolor="#ccccff">
<h2>Editados en el siglo XXI</h2>
<p>Mis libros editados a partir del 2001: </p>
<ol>
<xsl:apply-templates select="book" />
</ol>
</body>
</xsl:template>
<xsl:template match="book">
<xsl:if test="edition/year >= 2001">
<li><b><xsl:value-of select="title"/></b>
(<i><xsl:value-of select="author"/></i>)
<br />
<xsl:value-of select="edition/publisher"/>,
<xsl:value-of select="edition/year"/>,
<xsl:value-of select="edition/pages"/> páginas
</li>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
|
Si quisiéramos hacer más versátil esta hoja de estilo
podríamos usar una variable o, en la terminología adecuada,
un elemento xsl:parameter para poder cambiar fácilmente
el año a partir del cual mostraremos los libros editados:
- "Declaramos" una variable (
YEAR ) y le damos un valor:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="YEAR" select="2005" />
...
|
- Cambiar las referencias explícitas al valor
por su nombre:
- Si va a mostrarse textualmente:
......
Libros editados a partir del año
<xsl:value-of select="$YEAR"/>
......
|
- Si se va a usar en una expresión:
......
<xsl:if test="edition/year >= $YEAR">
......
|
Ejemplo 5
Ahora practicamos con casi todos los elementos
XSLT que hemos visto para recopilar toda la información
de nuestro documento XML en una tabla, que además ordenaremos con xsl:sort :
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Biblioteca personal</title>
</head>
<xsl:apply-templates select="library" />
</html>
</xsl:template>
<xsl:template match="library">
<body bgcolor="#fafafa">
<h2 align="center">Mis libros</h2>
<table align="center" border="2">
<tr bgcolor="#ccffff">
<th>Titulo</th>
<th>Autor</th>
<th>Ediciones</th>
</tr>
<xsl:for-each select="book">
<xsl:sort select="title[@language='es']" order="ascending" />
<tr>
<td valign="top">
<b><xsl:value-of select="title[@language='es']"/></b>
<br/>
(<font color="0000cc"><xsl:value-of select="title"/></font>)
</td>
<td valign="top">
<font color="700000"><xsl:value-of select="author"/></font>
</td>
<td valign="top">
<font size="-1">
<xsl:for-each select="edition">
- <xsl:value-of select="publisher" />,
<xsl:value-of select="year" />
<xsl:if test="pages">
(<xsl:value-of select="pages" /> páginas)
</xsl:if>
<br />
</xsl:for-each>
</font>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</xsl:template>
</xsl:stylesheet>
|
Ejemplo 6
Con lo que hemos visto podemos jugar un poco y, por ejemplo, si conseguimos imágenes de las portadas de los libros, usamos hojas de estilo CSS para darle formato a nuestro HTML y empleamos algo de JavaScript, podemos conseguir algo como lo siguiente...
|