XSL "Extensible StyleSheet Language" en XML

XSL ha surgido como una solución para transformar documentos en XML a otro formato como : HTML , WML , texto simple, PDF e inclusive en otro documento XML con diferentes parámetros. El lenguaje XSL esta dividido en tres partes:

XSL Extensible Stylesheet's

Un Extensible Stylesheet es un documento que define como deben ser transformados elementos en XML, esto es:

Debido a que los XSL Extensible Stylesheet's utilizan el lenguaje XSLT como componente principal es necesario conocer tanto el lenguaje como las herramientas disponibles para la utilización de XSL Extensible Stylesheet's.

XSL Engines

Para poder utilizar XSL se requiere de un software denominado XSL Engine , este tema se suele prestar a gran confusión, por lo tanto es conveniente mencionar que:

Los diversos "XSL Engines" no son "Parsers" como DOM,SAX o JDOM , inclusive requieren de un "Parser" para funcionar. Es por esta razón que TODOS los "XSL Engines" ya incluyen un "Parser" en su distribución (Xalan incluye el "parser" Xerces, LotusXSL también utiliza Xerces...etc)

XSL simplifica las labores de DOM

A primera vista XSL parece excesivo, ya que antes de aplicar el XSL stylesheet se debe transformar el documento hacia una estructura como DOM, alguien familiarizado con DOM puede decir: ya tengo la información en el arbol jerárquico en memoria y puedo manipularla a mi gusto....lo anterior es muy cierto, sin embargo, es la amplia libertad que permite DOM para manipular elementos la cual ha generado el uso de XSL. El escribir código para manipular | transformar arboles jerárquicos en DOM no es trivial,y es aquí donde XSL ofrece mayor sencillez.

Contenido para navegadores Inalámbricos y Lambrucios

Ya contempla que sus visitantes accesen su información vía inalámbrica (Telefónica) y alambrica (Navegadores "Netscape","Explorer"), en esta situación XSL es de gran uso, ya que es posible generar a partir de un deposito centralizado en XML, documentos en diversos formatos; a continuación se describe como transformar un documento XML hacia HTML:

El contenido que desea enviar a un Navegador (HTML)
Documentos Final ( HTML) | XSL Stylesheet | Documento Base (XML)
Documento HTML
 <HTML> 
 <BODY>
 <TABLE>
  <TR>
<TD> <a href="app.htm"> Aplicaciones</a> </TD>
<TD> <a href="con.htm"> Conectividad</a> </TD>
<TD> <a href="sop.htm"> Soporte</a> </TD>
  </TR>
 </TABLE>
 </BODY>
 </HTML>

El administrar y mantener el contenido de los documentos anteriores por separado seria una ardua labor, algunas razones:

XML la primera Base

Para centralizar la información que será utilizada por los documentos finales lo más conveniente es que ésta se encuentre en XML, esta información no necesariamente requiere estar en un documento estático ("flat-file"), inclusive puede estar en una base de datos , la información base en XML pudiera ser:

<?xml version="1.0"?>
<contenido>
 
<general>
   <pagina nombre="principal">
   <bloque1>
   Bienvenido a Osmosis Latina...
   </bloque1>
   </pagina>
</general>

<inalambrico> 
  <pagina nombre="aplicaciones">
    <bloque1>
       Una aplicación es lo que fue ejecutado.
       Las aplicaciones inalámbricas son muy restrictivas,basta.
    </bloque1>
   </pagina>
</inalambrico>  

<alambrico> 
  <pagina nombre="aplicaciones">
    <bloque1>
       Una aplicación en forma la base de......... 
    </bloque1>
   </pagina>
</alambrico>  

</contenido>

Nótese que la sección entre los TAGS <general> contendrá información para ser utilizada en diversos documentos, mientras las secciones <inalambrico> <alambrico> contienen información para ser utilizada por navegadores específicos: inalámbricos y alambricos respectivamente.Ahora bien, es mediante XSL y "Extensible Stylesheets" que se logra utilizar y transformar esta información a un documento presentable en HTML , WML u otro formato.

XSL Manipulando XML

Antes de definir un XSL Extensible Stylesheet para producir los documentos finales de Navegador es conveniente definir sobre que documento XML se trabajará:

Documentos Final ( HTML) | XSL Stylesheet | Documento Base (XML)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="t.xsl"?>
<CONTENIDO> 

    <SECCION>
      <TITULO link="app"> Aplicaciones </TITULO>
      <BLOQUE1>  
          Las aplicaciones en una ...
      </BLOQUE1>
    </SECCION>

    <SECCION>
      <TITULO link="con"> Conectividad </TITULO>
      <BLOQUE1>  
          La conectividad en una ...
      </BLOQUE1>
    </SECCION>

    <SECCION>
      <TITULO link="sop"> Soporte </TITULO>
      <BLOQUE1>  
          El soporte de sistemas ...
      </BLOQUE1>
    </SECCION>

</CONTENIDO>

El "XSL Stylesheet" seria el siguiente :

Documentos Finales( HTML) | XSL Stylesheet | | Documento Base (XML)
"Stylesheet" para HTML
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html"/>

<xsl:template match="/">
   <xsl:apply-templates/>
</xsl:template>


<xsl:template match="CONTENIDO">
 <HTML> 
 <BODY>
     <TABLE>
       <TR>   
  <xsl:apply-templates/>
	</TR>	
	</TABLE>
 </BODY>
 </HTML>
</xsl:template>

<xsl:template match="SECCION">
	     <TD>   
	     <A HREF="{TITULO/@link}.htm">
	     <xsl:value-of select="TITULO"/>
	     </A>
	     </TD>
</xsl:template>

</xsl:stylesheet>

Una parte primordial de todo XSL "Stylesheet" es el elemento template el cual define instrucciones de ejecución, básicamente todo gira alrededor de este tipo de elementos.

La secuencia de eventos y definiciones para el "Stylsheet" HTML son las siguientes:

  1. Las primeras dos lineas definen que el documento en cuestión es un "XSL Stylesheet", (Vea también Namespaces )

  2. La linea <xsl:output method="html"/> define el resultado de este "XSL Stylesheet" como HTML.

  3. El primer elemento template (<xsl:template match="/">) indica que una vez encontrado el elemento raíz ( / ) del documento base se ejecuten las instrucciones indicadas.En el caso anterior el documento XML a transformar (Documento Base) contiene como elemento raíz <?xml version="1.0"?>. El elemento <xsl:apply-templates/> indica que sean aplicados template's a los "nodos hijos" del elemento raíz.

  4. El primer "nodo hijo" de <?xml version="1.0"?> es CONTENIDO , debido a que existe una definición template para CONTENIDO ( <xsl:template match="CONTENIDO"> ) se ejecutan las instrucciones:

    1. Desplegar | Imprimir los elementos <HTML> <BODY> <TABLE> <TR>

    2. Aplicar template's a los "nodos hijos" del elemento en cuestión ( Vaya a paso 5 --> <CONTENIDO>)

    3. Una vez aplicados los template's desplegar | imprimir </TR> </TABLE> </BODY> </HTML>

  5. El primer "nodo hijo" de CONTENIDO es SECCION por lo tanto se ejecutan las instrucciones de <xsl:template match="SECCION">:

    1. Desplegar | Imprimir <TD> <A HREF="{TITULO/@link}.htm"> donde {TITULO/@link} representa el valor del atributo link del elemento TITULO .

    2. Extraer el valor del elemento TITULO (<xsl:value-of select="TITULO"/>)

    3. Desplegar | Imprimir </A> </TD> .

  6. Una vez encontrado el elemento final de SECCION : </SECCION> se regresa al elemento <template> que invoco las instrucciones, en este caso el paso 4.b.

  7. Debido a que aún existen "nodos hijos" de <CONTENIDO> se vuelve entrar al paso 5.

  8. Finalmente ya que se terminan los "nodos hijos" de <CONTENIDO> se ejecuta el paso 4.c.

Definiciones para el "Stylsheet" HTML y otros elementos

Además del "Stylesheet" antes mencionados también es posible transformar documentos XML mediante XSL a : HDML, WML, archivo de textos, otros documentos XML,VoXML (Voice over XML) e inclusive a documentos PDF.

El Futuro

Contemple bien el párrafo anterior, un solo deposito de información en XML el cual a traves de diversos "XSL Stylesheet's" puede ser manipulado a:

Lo anterior es solo una de las razones por las cuales XML | XSL ha cobrado y seguirá cobrando gran importancia en todo proyecto de tecnología.

Links: