i2factory usa internamente la tecnología de transformaciones XSLT, que nos permite componer nuevos mensajes XML en base a un mensaje de entrada y una plantilla de transformación, algo imprescindible cuando integramos distintas aplicaciones y sistemas
Este artículo pretende servir de punto de entrada del lenguaje de estilos de transformaciones XSLT para aquellos usuarios no avanzados o desconocedores de este estándar. Aunque no es estrictamente imprescindible, es muy recomendable que el usuario de i2factory tenga conocimientos de estos lenguajes, al menos a un nivel básico.
Tutorial oficial de W3C y web para hacer tests
Este artículo está basado en la información online publicada por W3C sobre XSLT e incluye un resumen del tutorial oficial. Te recomendamos que visites los sitios webs de la W3C si la información contenida en este artículo te resulta insuficiente. Existen varias webs online en la que puedes probar tus transformaciones XSLT para comprobar que estén correctas.
Prueba por ejemplo: http://www.freeformatter.com/xsl-transformer.html o http://www.xsltcake.com
¿Qué es XSLT y cómo funciona?
XSLT es el acrónimo de eXtensible Stylesheet Language Transformations y pertenece al conjunto de lenguajes incluidos en XSL, el Lenguaje Extensible de Hojas de Estilo recomendado para XML, que surgió por la necesidad de dotar a XML de un lenguaje de estilos.
XSL funciona como un lenguaje avanzado para crear hojas de estilos, pero XSL es mucho más que un lenguaje de estilos de XML. En su interior contiene los lenguajes de expresiones y de transformaciones que usamos en i2factory:
- XSLT - lenguaje para la transformación de documentos XML
- XPath - lenguaje para la navegación de documentos XML
XSLT es la parte más importante de XSL puesto que con XSLT puedes transformar cualquier documento XML en cualquier otro documento XML, como por ejemplo en una página HTML o XHTML.
Es capaz de transformar, ordenar y filtrar datos XML, y darles formato basado en sus valores de origen. Con XSLT también puedes añadir y eliminar elementos y atributos hacia o desde un archivo de salida. También puedes reordenar y clasificar elementos, ejecutar test y tomar de decisiones sobre qué elementos ocultar o mostrar, y muchas más cosas.
XSLT usa XPath para definir partes del documento XML origen que deberían coincidir con uno o más templates predefindos (XSLT Stylesheet) generando un documento de salida. Cuando se encuentra una coincidencia, el procesador XSLT transformará la parte correspondiente del documento de origen en el documento de resultado. La clave de XSLT por tanto es definir la Hoja de Estilo XSL adecuada, ver ejemplo de transformación más abajo.
Esta rica funcionalidad es lo que hizo que i2factory se decantara por XSLT para implementar las transformaciones de los mensajes.
XSL vs CSS
CSS sirve para añadir estilos a los elementos HTML, que todos los navegadores y programas del mundo sabe mostrar correctamente, puesto que HTML usa etiquetas predefinidas bien conocidas.
Sin embargo, XML no usa etiquetas predefinidas y por tanto el significado de las mismas no se conoce a priori, por lo que XSL surgió para describir cómo deberían mostrarse en una web los elementos XML. XSL es más sofisticado que CSS.
Ejemplo de transformación
A continuación tienes un ejemplo de una transformación XSLT compuesta por:
- documento XML que almacena la información sobre un catálogo de CDs (izquierda)
- al que se le aplica una transformación XSLT que incluye expresiones XPATH (centro)
- para obtener un nuevo XML que resulta ser una página web en formato HTML (derecha).
XPATH Versión 2.0 i2factory soporta la versión 2.0 de XPATH y XSLT desde la versión 2.0.6 release de i2factory core.XSLT y XPATH XSLT hace uso del lenguaje XPATH para encontrar y localizar información en un documento XML. Por ello, si no estás familiarizado con XPATH te aconsejamos eches un vistazo al artículo sobre XPATH y al artículo sobre XML. |
Estructura de un sistema XSLT: Una manera común de describir el proceso de transformación es decir que XSLT transforma un árbol-origen XML en un árbol-destino XML. |
Ejemplo de transformación XSLT (con expresiones XPATH)
|
Ejemplo de XML transformado (página web)
|
i2factory usa XSLT para realizar las transformaciones de los mensajes que llegan a una tarea Translator siendo el estándar marcado por XSL, una tecnología derivada de XML.
La tarea de integración Translator hace uso de las plantillas XSL para componer nuevos mensajes, transformando el mensaje que le llega por el slot de entrada a un nuevo mensaje, tomando como plantilla la transformación expresada en formato de estilos XSLT. El procesador de XSL aplica la plantilla XSLT al mensaje XML entrante, resultando un nuevo XML en el slot de salida con la transformación aplicada.
En la siguiente imagen se muestra un ejemplo de plantilla de transformación que compone un nuevo mensaje con el nodo raíz MailSmtpBean que es apto para el puerto de salida del conector SMTP .
En dicha plantilla de transformación se indican varios valores de nodos de manera "estática" como el remitente del email (support@guaranadev.i2factory.com) o el asunto del correo (TEST XML Request) mientras que otros valores los coge de manera "dinámica" provenientes del mensaje de entrada como el destinatario del email (//root/extra/mailFrom) o el cuerpo del email (//root/document/bookstore/book/title)
Prácticamente todos puertos de salida requieren de una tarea Translator para poder traducir el esquema interno del mensaje XML a un esquema apropiado para el comando seleccionado en el conector de salida, de manera que este pueda realizar la traducción adecuada a la aplicación o servicio externo.
No es necesario conocer XSL en profundidad ni escribir los XSLT a mano para usar i2factory. Puedes usar el mapeador de datos para realizar las transformaciones más simples:
Elementos XSLT
En este apartado incluiremos un resumen de los elementos más importantes que componen el lenguaje XSLT para que puedas definir tus propias transformaciones XSLT
Declaración de la hoja de estilo
Hay dos formas equivalentes de indicar que un documento es una hoja de estilos XSL:
o bien,
El documento XSLT siempre tendrá como nodo raíz que engloba a todos los demás una de esas dos declaraciones.
Para acceder a los elementos XSLT, atributos y características debemos declarar el espacio de nombres XSLT arriba del documento. Se utilizará el espacio de nombres proporcionado por la W3C para usar los elementos XSLT: xmlns:xsl="http://www.w3.org/1999/XSL/Transform".
Referencias: Existen más elementos definidos para XSLT así como también muchas funciones que se pueden utilizar para dotar de más potencia nuestra hojas de estilo XSL. La W3School ofrece una recopilación de referencia en: http://www.w3schools.com/xsl/xsl_w3celementref.asp y http://www.w3schools.com/xsl/xsl_functions.asp
Tag <?xml> Since an XSL stylesheet is an XML document, you should always start with the XML declaration: <? Xml version = "1.0" encoding = "UTF-8"?>
<xsl:template>
Una hoja de estilos XSL está compuesta de un conjunto de reglas que se denominan templates. Cada template contiene el conjunto de reglas a aplicar cuando un nodo especificado es encontrado en el documento XML.
El atributo match nos permite asociar un elemento XML con el template. Su valor es una expresión XPath .Por ejemplo, si se especifica el nodo raíz "/", el conjunto de reglas será aplicado a todo el documento XML.
<? xml version = "1.0" ?> < xsl:stylesheet version = "1.0" xmlns:xsl = " http://www.w3.org/1999/XSL/Transform" > < xsl:template match = "/" > < html > < body > < h2 >My CD Collection</ h2 > < table border = "1" > < tr bgcolor = "#9acd32" > < th >Title</ th > < th >Artist</ th > </ tr > < tr > < td >.</ td > < td >.</ td > </ tr > </ table > </ body > </ html >
</ xsl:stylesheet > |
<xsl:value-of>
Extrae el valor de un elemento XML y lo añade al stream de salida. El atributo select contiene la expresión XPath que identifica el elemento.
<? xml version = "1.0" ?> < xsl:stylesheet version = "1.0" xmlns:xsl = " http://www.w3.org/1999/XSL/Transform" > < xsl:template match = "/" > < html > < body > < h2 >My CD Collection</ h2 > < table border = "1" > < tr bgcolor = "#9acd32" > < th >Title</ th > < th >Artist</ th > </ tr > < tr > < td >< xsl:value-of select = "catalog/cd/title" /></ td > < td >< xsl:value-of select = "catalog/cd/artist" /></ td > </ tr > </ table > </ body > </ html > </ xsl:template > </ xsl:stylesheet > |
<xsl:for-each>
Nos permite iterar sobre un conjunto de elementos especificado por una ruta XPath (atributo select). Esto nos permite seleccionar todos los elementos de un conjunto de nodos especificado.
<? 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 > < body > < h2 >My CD Collection</ h2 > < table border = "1" > < tr bgcolor = "#9acd32" > < th >Title</ th > < th >Artist</ th > </ tr > < xsl:for-each select = "catalog/cd" > < tr > < td >< xsl:value-of select = "title" /></ td > < td >< xsl:value-of select = "artist" /></ td > </ tr > </ xsl:for-each > </ table > </ body > </ html > </ xsl:template > </ xsl:stylesheet > |
Es posible filtrar utilizando los siguientes operadores