De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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]

Historia [ editar ]

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).

Modelo de diseño y procesamiento [ editar ]

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. comprender eficazmente 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.

XPath [ editar ]

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.

Comparado con XQuery [ editar ]

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 ]

Tipos de medios [ editar ]

El <output>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: <xsl:output output="xml" media-type="application/xml"/>. 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]

Ejemplos [ editar ]

Estos ejemplos utilizan el siguiente documento XML entrante

<? xml version = "1.0"?> <personas>  <person  username = "JS1" >  <name> John </name>  <family-name> Smith </family-name>  </person>  <person  username = " MI1 " >  <nombre> Morka </nombre>  <nombre-familia> Ismincius </nombre-familia>  </persona> </personas>

Ejemplo 1 (transformación de XML a XML) [ editar ]

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

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

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

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

Ejemplo 2 (transformación de XML a XHTML) [ editar ]

Procesando el siguiente archivo XSLT de ejemplo

<? xml version = "1.0" encoding = "UTF-8"?> <xsl: stylesheet  version = "1.0"  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"  xmlns = " http://www.w3.org/1999/xhtml " > <xsl:  método de salida = "xml"  sangría = "sí"  encoding = "UTF-8" /> <xsl: template  match = "/ persons" >  <html>  <head>  <title> Ejemplo de prueba de XML </title>  </head>  <body>  <h1> Personas </h1>  <ul>  <xsl: apply- templates  select = "person" >  <xsl: sort  select = "family-name"  />  </ xsl: apply-templates>  </ul>  </body>  </html>  </ xsl: template> <xsl: template  match = "person" >  <li>  <xsl: value-of  select = "family-name" /> <xsl: text> , </ xsl: text> <xsl: value-of  select = "name " />  </li>  </ xsl: template></ xsl: hoja de estilo>

con el archivo de entrada XML que se muestra arriba da como resultado el siguiente XHTML (el espacio en blanco se ha ajustado aquí para mayor claridad):

<? xml version = "1.0" encoding = "UTF-8"?> <html  xmlns = "http://www.w3.org/1999/xhtml" >  <head>  <title> Ejemplo de prueba de XML </title>  </head>  <body>  <h1> Personas </h1>  <ul>  <li> Ismincius, Morka </li>  <li> Smith, John </li>  </ul>  </body> </html>

Este XHTML genera la salida a continuación cuando se procesa en un navegador web.

XHTML renderizado generado a partir de un archivo de entrada XML y una transformación XSLT.

Para que un navegador web pueda aplicar una transformación XSL a un documento XML en exhibición, se puede insertar una instrucción de procesamiento de hoja de estilo XML en XML. Entonces, por ejemplo, si la hoja de estilo del Ejemplo 2 anterior estuviera disponible como "ejemplo2.xsl", la siguiente instrucción podría agregarse al XML entrante original: [22]

<? xml-stylesheet href = "example2.xsl" type = "text / xsl"?>

En este ejemplo, text/xsles técnicamente incorrecto de acuerdo con las especificaciones del W3C [22] (que dicen que el tipo debería ser application/xslt+xml), pero es el único tipo de medio que es ampliamente compatible con los navegadores a partir de 2009, y la situación no ha cambiado en 2021.

Implementaciones de procesador [ editar ]

  • RaptorXML de Altova es un procesador XSLT 3.0 disponible en el kit de herramientas de desarrollo XMLSpy y como implementación de servidor independiente, que se invoca mediante una interfaz REST.
  • IBM ofrece procesamiento XSLT integrado en un dispositivo de hardware de propósito especial bajo la marca Datapower .
  • libxslt es una biblioteca gratuita publicada bajo la licencia MIT que se puede reutilizar en aplicaciones comerciales. Está basado en libxml e implementado en C para mayor velocidad y portabilidad. Es compatible con las extensiones XSLT 1.0 y EXSLT . [23]
    • Se puede usar en la línea de comandos a través de xsltproc [24] que se incluye en macOS [25] y muchas distribuciones de Linux , y se puede usar en Windows a través de Cygwin . [26]
    • Los motores de diseño WebKit y Blink , que se utilizan, por ejemplo, en los navegadores web Safari y Chrome respectivamente, utilizan la biblioteca libxslt para realizar transformaciones XSL. [27]
    • Existen enlaces para Python , [28] Perl , [29] Ruby , [30] PHP , [31] Common Lisp , [32] Tcl , [33] y C ++ . [34]
  • Microsoft proporciona dos procesadores XSLT (ambos solo XSLT 1.0). El procesador anterior MSXML proporciona interfaces COM; desde MSXML 4.0 también incluye la utilidad de línea de comandos msxsl.exe. [35] El tiempo de ejecución de .NET incluye un procesador XSLT integrado en su System.Xml.Xslbiblioteca.
  • Saxon es un procesador XSLT 3.0 y XQuery 3.1 con versiones patentadas y de código abierto para operación independiente y para Java , JavaScript y .NET. Un producto independiente, Saxon-JS [36], ofrece procesamiento XSLT 3.0 en Node.js y en el navegador.
  • Xalan es un procesador XSLT 1.0 de código abierto de Apache Software Foundation disponible para Java y C ++. Se incluye una variante del procesador Xalan como procesador XSLT predeterminado en la distribución estándar de Java de Oracle.
  • Los navegadores web: Safari, Chrome, Firefox, Opera e Internet Explorer son compatibles con XSLT 1.0 (solo). Los navegadores pueden realizar transformaciones sobre la marcha de archivos XML y mostrar el resultado de la transformación en la ventana del navegador. Esto se hace incrustando el XSL en el documento XML o haciendo referencia a un archivo que contiene instrucciones XSL del documento XML. Es posible que este último no funcione con Chrome en archivos del sistema de archivos local debido a su modelo de seguridad. [37]

Rendimiento [ editar ]

La mayoría de los primeros procesadores XSLT eran intérpretes. Más recientemente, la generación de código es cada vez más común, utilizando lenguajes intermedios portátiles (como el código de bytes Java o el lenguaje intermedio común .NET ) como destino. Sin embargo, incluso los productos interpretativos generalmente ofrecen fases de análisis y ejecución separadas, lo que permite crear un árbol de expresión optimizado en la memoria y reutilizarlo para realizar múltiples transformaciones. Esto proporciona beneficios de rendimiento sustanciales en las aplicaciones de publicación en línea, donde la misma transformación se aplica muchas veces por segundo a diferentes documentos de origen. [38] Esta separación se refleja en el diseño de las API de procesamiento XSLT (como JAXP ).

Los primeros procesadores XSLT tenían muy pocas optimizaciones. Los documentos de hoja de estilo se leían en Modelos de objetos de documento y el procesador actuaba directamente sobre ellos. Los motores XPath tampoco se optimizaron. Sin embargo, cada vez más, los procesadores XSLT utilizan técnicas de optimización que se encuentran en los lenguajes de programación funcionales y los lenguajes de consulta de bases de datos, como la reescritura estática de un árbol de expresión (por ejemplo, para sacar los cálculos de los bucles) y la evaluación canalizada perezosa para reducir la huella de memoria de los resultados intermedios. (y permitir "salida anticipada" cuando el procesador puede evaluar una expresión como following-sibling::*[1]sin una evaluación completa de todas las subexpresiones). Muchos procesadores también utilizan representaciones de árboles que son significativamente más eficientes (tanto en el espacio como en el tiempo) [39] que las implementaciones DOM de propósito general.

En junio de 2014, Debbie Lockett y Michael Kay presentaron un marco de evaluación comparativa de código abierto para procesadores XSLT llamado XT-Speedo. [40]

Ver también [ editar ]

  • Elementos XSLT : una lista de algunas estructuras XSLT de uso común.
  • Agrupación muenchiana : un dialecto diferencial entre XSLT1 y XSLT2 +.
  • Lenguaje de hoja de estilo extensible : una familia de lenguajes de los que XSLT es miembro
  • Comparación de XQuery y XSLT
  • Objetos de formato XSL o XSL-FO : un lenguaje basado en XML para documentos, generalmente generado mediante la transformación de documentos de origen con XSLT, que consta de objetos que se utilizan para crear una salida formateada.
  • Transformación de identidad : un punto de partida para las cadenas de filtros que agregan o eliminan elementos de datos de árboles XML en un proceso de transformación.
  • Apache Cocoon : un marco basado en Java para procesar datos con XSLT y otros transformadores.

Referencias [ editar ]

  1. ^ a b "Transformación" . 2012-09-19.
  2. ^ "Método de salida XML" . 2012-09-19.
  3. ^ "¿Para qué se utiliza XSLT?" . 2018-02-07.
  4. ^ "Introducción" . Transformaciones XSL (XSLT) Versión 1.0 Recomendación de W3C . W3C. 16 de noviembre de 1999 . Consultado el 7 de noviembre de 2012 .
  5. ^ La versión 2.0 de XSLT es Turing-Complete: una prueba puramente basada en la transformación
  6. ^ Michael Kay. "¿Qué tipo de lenguaje es XSLT?" . Consultado el 8 de julio de 2016 .
  7. ^ "Una propuesta para XSL" . W3C . Consultado el 7 de noviembre de 2012 .
  8. ^ "Cronología de estándares XML y Web semántica W3C" (PDF) .
  9. ^ "Transformaciones XSL (XSLT)" . W3.org. 1999-11-16 . Consultado el 12 de julio de 2014 .
  10. ^ "Transformaciones XSL (XSLT) Versión 1.1" . W3.org. 2001-08-24 . Consultado el 12 de julio de 2014 .
  11. ^ "XML Path Language (XPath) 2.0 (segunda edición)" . W3.org. 2010-12-14 . Consultado el 12 de julio de 2014 .
  12. ^ "Transformaciones XSL (XSLT) versión 2.0" . W3.org. 2007-01-23 . Consultado el 12 de julio de 2014 .
  13. ^ "Cronología de estándares XML y Web semántica W3C" (PDF) . 2012-02-04.
  14. ^ "¿Qué hay de nuevo en XSLT 3.0?" . w3 . Consultado el 6 de enero de 2014 .
  15. ^ Kay, Michael. "Un procesador Streaming XSLT" . Balisage: Actas de la Conferencia de Markup 2010 . Consultado el 15 de febrero de 2012 .
  16. ^ "Descubra las maravillas de XSLT: peculiaridades de XSLT" . XSLT es un lenguaje muy especializado con un sabor declarativo distinto.
  17. ^ Kay, Michael. "¿Qué tipo de lenguaje es XSLT?" . IBM . Consultado el 13 de noviembre de 2013 .
  18. ^ "Transformaciones XSL (XSLT) versión 2.0" . W3C . Consultado el 19 de octubre de 2012 .
  19. ^ "Tipos de medios de aplicación" . IANA . Consultado el 19 de octubre de 2012 .
  20. ^ "Requisitos XSLT para ver XML en un navegador" . Microsoft . Consultado el 19 de octubre de 2012 .
  21. ^ Kay, Michael (2008). Referencia del programador XSLT 2.0 y XPath 2.0 . Wiley. pag. 100 . ISBN 978-0-470-19274-0.
  22. ^ a b "Transformaciones XSL (XSLT) Versión 1.0: Recomendación W3C - Incrustar hojas de estilo" . W3C. 16 de noviembre de 1999 . Consultado el 20 de septiembre de 2016 .
  23. ^ "La biblioteca XSLT C para GNOME: libxslt" . Consultado el 23 de noviembre de 2012 .
  24. ^ "La biblioteca XSLT C para GNOME: la herramienta xsltproc" . Consultado el 23 de noviembre de 2012 .
  25. ^ "página de manual de xsltproc" . Consultado el 23 de noviembre de 2012 .
  26. ^ "Nuevo paquete: libxslt" . Consultado el 23 de noviembre de 2012 .
  27. ^ "El proyecto de código abierto WebKit - XSLT" . Consultado el 25 de octubre de 2009 .
  28. ^ "El analizador XML C y el kit de herramientas de Gnome: Python y enlaces" . Consultado el 23 de noviembre de 2012 .
  29. ^ "XML :: LibXSLT - Interfaz para la biblioteca libxslt de GNOME" . CPAN . Consultado el 23 de noviembre de 2012 .
  30. ^ "libxslt-ruby" . Consultado el 23 de noviembre de 2012 .
  31. ^ "libxml" . Consultado el 23 de noviembre de 2012 .
  32. ^ "contenedor de alto nivel cl-libxml2 alrededor de las bibliotecas libxml2 y libxslt" .
  33. ^ "TclXML" . Consultado el 21 de mayo de 2013 .
  34. ^ "libxml ++" . sourceforge.net . Consultado el 23 de noviembre de 2012 .
  35. ^ "Utilidad de transformación de línea de comandos (msxsl.exe)" . Microsoft . Consultado el 22 de octubre de 2012 .
  36. ^ "Saxon-JS" . Saxonica . Consultado el 6 de septiembre de 2018 .
  37. ^ "Problema 58151: no se puede cargar el archivo xml en el sistema de archivos local mediante XMLHttpRequest" .
  38. ^ Saxon: Anatomía de un procesador XSLT : artículo que describe los detalles de implementación y optimización de un procesador XSLT popular.
  39. ^ Lumley, John; Kay, Michael (junio de 2015). "Mejora del rendimiento de coincidencia de patrones en XSLT" . XML London 2015 : 9–25. doi : 10.14337 / XMLLondon15.Lumley01 . ISBN 978-0-9926471-2-4.
  40. ^ Kay, Michael; Lockett, Debbie (junio de 2014). "Benchmarking XSLT Performance" . XML London 2014 : 10–23. doi : 10.14337 / XMLLondon14.Kay01 . ISBN 978-0-9926471-1-7.

Lectura adicional [ editar ]

  • XSLT por Doug Tidwell, publicado por O'Reilly ( ISBN 0-596-00053-7 ) 
  • Libro de cocina XSLT de Sal Mangano, publicado por O'Reilly ( ISBN 0-596-00974-7 ) 
  • Referencia del programador XSLT 2.0 por Michael Kay ( ISBN 0-764-56909-0 ) 
  • Referencia del programador XSLT 2.0 y XPath 2.0 por Michael Kay ( ISBN 978-0-470-19274-0 ) 
  • Desarrollo web XSLT 2.0 por Dmitry Kirsanov ( ISBN 0-13-140635-3 ) 
  • XSL Companion, segunda edición de Neil Bradley, publicado por Addison-Wesley ( ISBN 0-201-77083-0 ) 
  • XSLT y XPath on the Edge (edición ilimitada) de Jeni Tennison , publicado por Hungry Minds Inc, EE. UU. ( ISBN 0-7645-4776-3 ) 
  • XSLT y XPath, Una guía para las transformaciones XML por John Robert Gardner y Zarella Rendon, publicado por Prentice-Hall ( ISBN 0-13-040446-2 ) 
  • XSL-FO de Dave Pawson, publicado por O'Reilly ( ISBN 978-0-596-00355-5 ) 

Enlaces externos [ editar ]

Documentación
  • Recomendación XSLT 1.0 W3C
  • Recomendación XSLT 2.0 W3C
  • Recomendación XSLT 3.0 W3C
  • XSLT - MDC Docs de Mozilla Developer Network
  • Referencia XSLT (MSDN)
  • Elementos XSLT (sajón)
  • Introducción y referencia de XSLT
Bibliotecas de código XSLT
  • EXSLT es una iniciativa comunitaria generalizada para proporcionar extensiones a XSLT.
  • FXSL es una biblioteca que implementa soporte para funciones de orden superior en XSLT. FXSL está escrito en XSLT.
  • XSLT Standard Library xsltsl, proporciona al desarrollador XSLT un conjunto de plantillas XSLT para funciones de uso común. Estos se implementan exclusivamente en XSLT, es decir, no utilizan ninguna extensión. xsltsl es un proyecto de SourceForge.
  • Kernow Una GUI para Saxon que proporciona una interfaz de apuntar y hacer clic para ejecutar transformaciones.
  • xslt.js: transforma XML con la biblioteca de JavaScript XSLT que transforma XML con XSLT en el navegador.