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:
XSLT : Se refiere a la transformación de documentos en XML
XPath: Define como accesar cierto punto de la estructura del documento XML
XSLF : Define el formato que deben tomar objetos dentro del documento en XML.
Un Extensible Stylesheet es un documento que define como deben ser transformados elementos en XML, esto es:
Si se encuentra un elemento <nombre> F.Fontes </nombre>
en XML y se requiere transformar a HTML como debe aparecer: <H1> F.Fontes </H1>
o <B> F.Fontes </B>
.
En ocasiones es conveniente transformar elementos por razones administrativas,<nombre> F.Fontes </nombre>
a <empleado> F.Fontes </empleado>
También es posible transformar el elemento <nombre> F.Fontes </nombre>
para una
aplicación inalámbrica
y definir <CARD id="F.Fontes" title="Nombre">
Y prácticamente cualquier otra transformación imaginable...
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.
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) |
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.
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:
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:
No pretende enviar la misma cantidad de información a los navegadores inalámbricos que a los navegadores clásicos ("Netscape","Explorer").
Eventualmente decida cambiar la información enviada a navegadores alambricos ("Netscape","Explorer") pero no a los inalámbricos.
Inclusive pueda surgir la necesidad de generar dos versiones para documentos en HTML (Vea Navegadores y sus consideraciones )
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.
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.
Las primeras dos lineas definen que el documento en cuestión es un "XSL Stylesheet", (Vea también Namespaces )
La linea <xsl:output method="html"/>
define el resultado de este "XSL Stylesheet" como HTML.
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.
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:
Desplegar | Imprimir los elementos <HTML> <BODY> <TABLE> <TR>
Aplicar template
's a los "nodos hijos" del elemento en cuestión ( Vaya a paso 5 --> <CONTENIDO>
)
Una vez aplicados los template
's desplegar | imprimir </TR> </TABLE> </BODY> </HTML>
El primer "nodo hijo" de CONTENIDO
es SECCION
por lo tanto se ejecutan las instrucciones de <xsl:template match="SECCION">
:
Desplegar | Imprimir <TD> <A HREF="{TITULO/@link}.htm">
donde {TITULO/@link}
representa el valor del atributo link
del elemento TITULO
.
Extraer el valor del elemento TITULO (<xsl:value-of select="TITULO"/>
)
Desplegar | Imprimir </A> </TD>
.
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.
Debido a que aún existen "nodos hijos" de <CONTENIDO>
se vuelve entrar al paso 5.
Finalmente ya que se terminan los "nodos hijos" de <CONTENIDO>
se ejecuta el paso 4.c.
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.
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:
Documentos para navegadores clásicos (HTML)
Documentos para navegadores inalámbricos (WML)
Documentos para ser observados en Acrobat (PDF)
Documentos depurados para ciertos clientes o proveedores comerciales en XML ( B2B )
Catálogos en algún formato de impresión especial
Hasta fragmentos auditivos ! (VoXML)
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: