XSLT


XSLT ( Transformaciones de lenguaje de hoja de estilo extensible ) es un lenguaje para transformar documentos XML en otros documentos XML, [1] u otros formatos como HTML para páginas web , texto sin formato u Objetos de formato XSL , que posteriormente se pueden convertir a otros formatos, como PDF , PostScript y PNG . [2] XSLT 1.0 es ampliamente compatible con los navegadores web modernos. [3]

El documento original no se modifica; más bien, se crea un nuevo documento basado en el contenido de uno existente. [4] Normalmente, los documentos de entrada son archivos XML, pero se puede utilizar cualquier cosa a partir de la cual el procesador pueda construir un modelo de datos XQuery y XPath , como tablas de bases de datos relacionales o sistemas de información geográfica . [1]

Aunque XSLT está diseñado como un lenguaje de propósito especial para la transformación XML, el lenguaje es Turing completo , lo que teóricamente lo hace capaz de realizar cálculos arbitrarios. [5]

XSLT está influenciado por lenguajes funcionales , [6] y por lenguajes de coincidencia de patrones basados ​​en texto como SNOBOL y AWK . Su predecesor más directo es DSSSL , que hizo con SGML lo que XSLT hace con XML. [7]

  • XSLT 1.0: XSLT fue parte del esfuerzo de desarrollo del Lenguaje de hojas de estilo extensible (XSL) del World Wide Web Consortium (W3C) de 1998-1999, un proyecto que también produjo XSL-FO y XPath . Algunos miembros del comité de estándares que desarrolló XSLT, incluido James Clark , el editor, habían trabajado anteriormente en DSSSL. XSLT 1.0 se publicó como recomendación del W3C en noviembre de 1999. [8] A pesar de su antigüedad, XSLT 1.0 [9] todavía se usa ampliamente (a partir de 2018), ya que las versiones posteriores no son compatibles de forma nativa en navegadores web o entornos como LAMP .
  • XSLT 2.0: después de un intento fallido de crear una versión 1.1 en 2001, [10] el grupo de trabajo XSL unió fuerzas con el grupo de trabajo XQuery para crear XPath 2.0 , [11] con un modelo de datos más rico y un sistema de tipos basado en XML Schema . Sobre esta base se encuentra XSLT 2.0, [12] desarrollado bajo la dirección editorial de Michael Kay , que alcanzó el estado de recomendación en enero de 2007. [13] Las innovaciones más importantes en XSLT 2.0 incluyen:
    • Manipulación de cadenas mediante expresiones regulares
    • Funciones y operadores para manipular fechas, horas y duraciones
    • Varios documentos de salida
    • Agrupación (creación de una estructura jerárquica a partir de secuencias de entrada planas)
    • Un sistema de tipos más rico y una verificación de tipos más sólida
  • XSLT 3.0: se convirtió en una Recomendación del W3C el 8 de junio de 2017. Las principales características nuevas son: [14]
    • Transformaciones de transmisión : en versiones anteriores, todo el documento de entrada tenía que leerse en la memoria antes de que pudiera procesarse, [15] y la salida no se podía escribir hasta que el procesamiento había terminado. XSLT 3.0 permite la transmisión de XML, que es útil para procesar documentos demasiado grandes para caber en la memoria o cuando las transformaciones están encadenadas en XML Pipelines .
    • Paquetes, para mejorar la modularidad de grandes hojas de estilo.
    • Manejo mejorado de errores dinámicos con, por ejemplo, una instrucción xsl: try.
    • Soporte para mapas y matrices, lo que permite que XSLT maneje tanto JSON como XML.
    • Las funciones ahora pueden ser argumentos para otras funciones (de orden superior).

Diagrama de los elementos básicos y el flujo de procesos de las Transformaciones de Lenguaje de Hoja de Estilo Extensible.

El procesador XSLT toma uno o más documentos de origen XML, además de una o más hojas de estilo XSLT, y los procesa para producir un documento de salida. A diferencia de los lenguajes de programación imperativa ampliamente implementados como C , XSLT es declarativo . [16] El paradigma de procesamiento básico es la coincidencia de patrones. [17] En lugar de enumerar una secuencia imperativa de acciones para realizar en un entorno con estado, las reglas de la plantilla solo definen cómo manejar un nodo que coincide con un patrón particular similar a XPath, si el procesador encuentra uno, y el contenido de las plantillas. efectivamente comprenden expresiones funcionales que representan directamente su forma evaluada: el árbol de resultados, que es la base de la salida del procesador.

Un procesador típico se comporta de la siguiente manera. En primer lugar, asumiendo que ya se ha leído y preparado una hoja de estilo, el procesador crea un árbol de fuentes a partir del documento XML de entrada. A continuación, procesa el nodo raíz del árbol de origen, encuentra la plantilla que mejor coincide con ese nodo en la hoja de estilo y evalúa el contenido de la plantilla. Las instrucciones de cada plantilla generalmente indican al procesador que cree nodos en el árbol de resultados o que procese más nodos en el árbol de origen de la misma manera que el nodo raíz. Finalmente, el árbol de resultados se serializa como texto XML o HTML.

XSLT utiliza XPath para identificar subconjuntos del árbol del documento de origen y realizar cálculos. XPath también proporciona una gama de funciones , que XSLT amplía aún más.

XSLT 1.0 usa XPath 1.0, mientras que XSLT 2.0 usa XPath 2.0. XSLT 3.0 funcionará con XPath 3.0 o 3.1. En el caso de 1.0 y 2.0, las especificaciones XSLT y XPath se publicaron en la misma fecha. Con 3.0, sin embargo, ya no estaban sincronizados; XPath 3.0 se convirtió en una recomendación en abril de 2014, seguida de XPath 3.1 en febrero de 2017; XSLT 3.0 siguió en junio de 2017.

Las funcionalidades XSLT se superponen con las de XQuery , que inicialmente se concibió como un lenguaje de consulta para grandes colecciones de documentos XML.

Los estándares XSLT 2.0 y XQuery 1.0 fueron desarrollados por grupos de trabajo separados dentro del W3C , trabajando juntos para asegurar un enfoque común donde sea apropiado. Comparten el mismo modelo de datos, sistema de tipos y biblioteca de funciones, y ambos incluyen XPath 2.0 como sublenguaje.

Los dos idiomas, sin embargo, tienen sus raíces en diferentes tradiciones y sirven a las necesidades de diferentes comunidades. XSLT se concibió principalmente como un lenguaje de hoja de estilo cuyo objetivo principal era representar XML para el lector humano en la pantalla, en la web (como un lenguaje de plantilla web ) o en papel. XQuery se concibió principalmente como un lenguaje de consulta de bases de datos en la tradición de SQL .

Debido a que los dos lenguajes se originan en comunidades diferentes, XSLT es más fuerte en su manejo de documentos narrativos con una estructura más flexible, mientras que XQuery es más fuerte en su manejo de datos, por ejemplo, al realizar uniones relacionales. [ cita requerida ]

El elemento puede tener opcionalmente el atributo media-type, que le permite a uno para establecer el tipo de medio (o tipo MIME) para la salida resultante, por ejemplo: . La recomendación XSLT 1.0 recomienda los tipos de atributos más generales text/xmly application/xmldado que durante mucho tiempo no hubo ningún tipo de medio registrado para XSLT. Durante este tiempo se text/xslconvirtió en el estándar de facto. En XSLT 1.0 no se especificó cómo media-typese deben usar los valores.

Con el lanzamiento de XSLT 2.0, el W3C recomendó el registro del tipo de medio MIME application/xslt+xml[18] y luego se registró con la Autoridad de Números Asignados de Internet . [19]

Se utilizaron borradores de trabajo anteriores a 1.0 de XSLT text/xslen sus ejemplos de incrustación, y este tipo fue implementado y sigue siendo promovido por Microsoft en Internet Explorer [20] y MSXML. También es ampliamente reconocido en la xml-stylesheetinstrucción de procesamiento por otros navegadores. En la práctica, por lo tanto, los usuarios que deseen controlar la transformación en el navegador utilizando esta instrucción de procesamiento están obligados a utilizar este tipo de medio no registrado. [21]

Estos ejemplos utilizan el siguiente documento XML entrante

 xml version = "1.0"?>    username = "JS1" >   John    Smith      username = " MI1 " >   Morka    Ismincius    

Ejemplo 1 (transformación de XML a XML)

Esta hoja de estilo XSLT proporciona plantillas para transformar el documento XML:

 xml version = "1.0" encoding = "UTF-8"?>  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"  version = "1.0" >   método de salida = "xml"  sangría = "sí" />  match = "/ persons" >     select = "person" />      match = "person" >   username = "{@username}" >   select = "name"  />    

Su evaluación da como resultado un nuevo documento XML, que tiene otra estructura:

 xml version = "1.0" encoding = "UTF-8"?>    username = "JS1" > John    username = "MI1" > Morka  

Ejemplo 2 (transformar XML a XHTML)

Procesando el siguiente archivo XSLT de ejemplo

 xml version = "1.0" encoding = "UTF-8"?>  version = "1.0"  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"  xmlns = " http://www.w3.org/1999/xhtml " >  método de salida = "xml"  sangría = "sí"  encoding = "UTF-8" />  match = "/ persons" >       Ejemplo de prueba de XML        Personas   
select = "person" > select = "family-name" />