Variables, Números y otros elementos en XSL Stylesheets

<xsl:variable>

En determinadas ocasiones de un "XSL Stylesheet" resulta conveniente definir variables para ser utilizadas dentro del documento (Stylesheet), para realizar estas declaraciones se utiliza el elemento <xsl:variable>, dicho elemento puede ser definido en la raíz del Stylsheet para que éste tome un efecto de variable global, o bien , dentro de los elementos template donde tomará un efecto local; la declaración de variables puede ser realizada de las siguientes maneras :


<xsl:variable name="sitio" select="'OsmosisLatina'"/>


<xsl:variable name="pagina">xsl.htm</xsl:variable>

La primer declaración emplea una nomenclatura de XPath, mientras la segunda define su valor mediante Tags; para utilizar el valor de la variable dentro del "XSL Stylesheet" se emplea el símbolo $ seguido del nombre de la variable en cualquier declaración XPath.

El uso de variables en "XSL Stylesheets" se encuentra restringido a otros elementos de "XSL Stylesheets", esto es, no pueden ser declaradas como contenido dentro del documento (Stylesheet) , dicho esto, a continuación se describen otros dos elementos empleados en "XSL Stylesheets" que hacen uso de variables.

<xsl:attribute>

El elemento <xsl:attribute> puede ser empleado para definir atributos sobre un elemento XML a ser transformado mediante un Stylesheet:


<xsl:template match="/">

<documento>
      <xsl:attribute name="{$sitio}">
        <xsl:value-of select="$pagina"/>
      </xsl:attribute>
</documento>

</xsl:template>

Al ser procesado el fragmento anterior vía XSL se generaría el siguiente fragmento


<documento OsmosisLatina="xsl.htm"/>

Nótese que se genera un atributo que lleva por nombre el de la variable sitio el cual es asignado el valor de la variable pagina; otra situación que puede surgir al transformar XML mediante XSL, es la necesidad de convertir un valor asignado a un atributo en un elemento del documento transformado, esto se realiza mediante <xsl:element> :

<xsl:element>
<!-- Dado un fragmento XML fuente como el siguiente 

      <figura tipo="triangulo">
    
-->


<xsl:template match="figura">

      <xsl:element name="{@tipo}">
           Equilátero
      </xsl:element>


</xsl:template>

El fragmento anterior sería transformado en lo siguiente:


<figura>
  <triangulo>Equilátero</triangulo>
</figura>


Operaciones Matemáticas.

En un "XSL Stylesheet" también es posible emplear elementos numéricos mediante XPath, aunque toda manipulación numérica dentro de XML es fuertemente desalentada dado que XML es un lenguaje de marcación, a continuación serán ilustrados unos ejemplos que pueden resultar prácticos en determinadas circunstancias, aunque inadecuados en un diseño óptimo de XML.


 <xsl:variable name="lista">55</xsl:variable>

   <xsl:template match="/">

      <xsl:value-of select="$lista+10"/>

   <xsl:template/"> 

El fragmento anterior define una variable llamada lista con un valor de 55, posteriormente, esta misma variable es modificada dentro de un elemento <xsl:value-of> incrementando su valor en diez unidades, vale mencionar que la manipulación de este tipo de variables numéricas puede ser realizada através de cualquier símbolo mencionado en la sección anterior de XPath.

<xsl:number>

Otro elemento utilizado para desplegar datos numéricos en XSL es denominado <xsl:number>, a diferencia de una variable, el elemento <xsl:number> posee un contador interno que le permite llevar cuenta del número de iteraciones que han sido realizadas para el elemento en cuestión:


 <xsl:variable name="codigodebarras">475903445221</xsl:variable>

   <xsl:template match="producto">
      <xsl:number value="$codigodebarras"/>
   
      Número : <xsl:number format="I"/>

   <xsl:template/"> 

La primer declaración de <xsl:number> en el fragmento anterior simplemente despliega el valor de la variable codigodebarras, en este sentido su comportamiento es idéntico al detallado con <xsl:value-of>, sin embargo, la segunda declaración hace uso del mecanismo interno de <xsl:number> y despliega en cada iteración del template su número de ciclo, además, mediante el atributo format="I" se indica que la enumeración debe ser realizada con números romanos (I,II,III,IV,V...), como alternativa a números romanos pueden ser empleadas las variantes: format="1"(Números), format="a" (Letras minúsculas), format="A" (Letras mayúsculas) o format="i" (Números romanos sin capitalizar).

<xsl:comment> y <xsl:text>

Otra situación que suele presentarse en el diseño de un "XSL Stylesheet" es la inclusión de comentarios o bloques de texto en el contenido generado por el "XSL Stylesheet", para estas circunstancias se emplean los elementos <xsl:comment> y <xsl:text> respectivamente.

<xsl:template match="/">

 <xsl:comment>
  No edite este documento, fue generado automáticamente 
  por un "XSL Stylesheet"
 </xsl:comment>


</xsl:template>

El bloque anterior generaría el siguiente contenido al ser procesado dentro de un "XSL Stylesheet".


<!-- 
  No edite este documento, fue generado automáticamente 
  por un "XSL Stylesheet"
-->

El siguiente template que incluye <xsl:text> simplemente procesa el contenido como texto simple:

<xsl:template match="Nombre">

 <xsl:text>
   Nombre de usuario 
 </xsl:text>

</xsl:template>

Una variación del elemento <xsl:text> es que éste incluya el atributo disable-output-escaping="yes", mediante este atributo se indica que todo elemento reservado en XML no sea procesado como un carácter de escape, esto es, los elementos como < y > son procesados por el "XSL Stylesheet" sin conversión alguna, si este atributo es omitido en <xsl:text> dichos caracteres serían convertidos a &lt y &gt respectivamente como indica la especificación XML.

<xsl:copy>

Otro elemento empleado en el diseño de "XSL Stylesheets" es <xsl:copy> que permite copiar automáticamente el valor definido dentro de un template:

<xsl:template match="body">

 <xsl:copy>
   <xsl:apply-templates/>   
 </xsl:copy>

</xsl:template>

El bloque anterior generaría el siguiente contenido al ser procesado dentro de un "XSL Stylesheet"

   <body>
       ...
       ...
   </body>

El uso de <xsl:copy> es de gran utilidad en la generación de documentos XHTML ya que generalmente los valores del documento XML fuente equivalen a los mismos valores a transformarse, esto es, tags HTML como: <table>, <tr>, <td>, <li> u otros.

Menú Curso

XML y sus Orígenes

Manipulación y Proceso de XML

DOM, SAX y JDOM

Namespaces, Schemas y DTD's

XSL: XSLT, XPath y TraX

XMLRPC y SOAP (Web Services)

Diseño con XMLRPC

Diseño con SOAP .

Apéndice "A" (Procesando XML con parsers).

Apéndice "B" (Validando XML con Schemas y DTD's).

Apéndice "C" (XSL: XPath y "XSL Stylesheets").

Apéndice "D" (XMLRPC: Diseño).

Apéndice "E" (SOAP, WSDL, UDDI y WSIL : Diseño).