Curso de Internet - XML
Redes de ordenadores y desarrollo de páginas web

Inicio > Desarrollo de páginas web > XML

XML
Sintaxis
Tecnologías
Ejemplo
Hojas de estilo CSS CSS
Transformaciones XSLT XSLT
Información adicional Enlaces

XML

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>

Sintaxis de XML

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):

<etiqueta />

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:

<?xml version="1.0"?>

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:

Entidad Sustitución
&lt; <
&gt; >
&amp; &
&apos; '
&quot; "

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...).

Entidades predefinidas
<!ENTITY lt     "&#38;#60;">  
<!ENTITY gt     "&#62;">  
<!ENTITY amp    "&#38;#38;">  
<!ENTITY apos   "&#39;">  
<!ENTITY quot   "&#34;"> 

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>
  &lt;html&gt;
    &lt;head&gt;
      &lt;title&gt;Rock &amp; Roll&lt;/title&gt;
    &lt;/head&gt;
  &lt;/html&gt;
</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:

Tecnologías relacionadas

XML en sí es bastante simple. Sin embargo, existen múltiples tecnologías relacionadas cuyo aprendizaje requiere algo más de esfuerzo:

XMLeXtensible Markup LanguageDefinición de documentos XML
DTDDocument Type DefinitionDefinición del esquema de documentos XML (en un formato distinto a XML)
XSDXML SchemaDefinición del esquema de documentos XML (en XML)
XDRXML Data ReducedPrecursor de XML Schema (Microsoft)
XSLeXtensible Stylesheet LanguageDefinición de hojas de estilo (XSLT + XSL-FO)
XSLTXSL TransformationsTransformación de documentos XML
XSL-FOXSL Formatting ObjectsDescripción del layout de un documento
XPathXML Path languageAcceso a partes de un documento XML (usado en XSLT y XPointer)
XPointerXML Pointer languageAcceso a la estructura interna de un documento XML
XLinkXML Linking languageDescripción de enlaces entre documentos XML
XQueryXML Query languageMecanismo para hacer consultas en documentos XML
XMLEncXML EncryptionCriptografía para documentos XML
XMLDSigXML-SignatureFirmas digitales en XML
XKMSXML Key ManagementGestión de claves en XML
DOMDocument Object ModelAPI para crear, acceder y modificar documentos XML
SAXSimple API for XMLAPI para trabajar con documentos XML
XHTMLXML HTMLVersión de HTML compatible con XML
XFormsXML FormsFormularios web en XML
Data IslandInclusión de datos XML en un documento HTML
Data BindingGeneración automática de HTML a partir de documentos XML

Ejemplo: Biblioteca

Un documento XML de ejemplo
<?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>

Hojas de estilo CSS

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:

Transformaciones XSLT

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.
       <xsl:apply-templates />
    
    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:

Operador Descripción
/ 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:

  1. "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" />
    
    ...
    
  2. 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...

Fichero XML completo

Fichero XSLT completo

Información adicional


Inicio > Desarrollo de páginas web > XML