stringtranslate.com

XSLT

XSLT ( Extensible Stylesheet Language Transformations ) es un lenguaje diseñado originalmente para transformar documentos XML en otros documentos XML, [1] u otros formatos como HTML para páginas web , texto plano u objetos de formato XSL , que posteriormente pueden convertirse a otros formatos. como PDF , PostScript y PNG . [2] En actualizaciones posteriores de la especificación XSLT 1.0 se agregó compatibilidad con JSON y transformación de texto sin formato.

En agosto de 2022 , la versión estable más reciente del lenguaje es XSLT 3.0, que alcanzó el estado de Recomendación en junio de 2017.

Las implementaciones XSLT 3.0 son compatibles con Java, .NET, C/C++, Python, PHP y NodeJS. También se puede alojar una biblioteca JavaScript XSLT 3.0 en el navegador web. Los navegadores web modernos también incluyen soporte nativo para XSLT 1.0. [3]

Para una transformación de documento XSLT, 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]

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

Historia

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 para SGML lo que XSLT hace para XML. [7]

Modelo de diseño y procesamiento.

Diagrama de los elementos básicos y flujo de proceso de Transformaciones del Lenguaje de Hojas de Estilo eXtensible.

El procesador XSLT toma uno o más documentos fuente XML, además de una o más hojas de estilo XSLT, y los procesa para producir uno o varios documentos de salida. [16] [17] A diferencia de los lenguajes de programación imperativos ampliamente implementados como C , XSLT es declarativo . [18] El paradigma de procesamiento básico es la coincidencia de patrones. [19] En lugar de enumerar una secuencia imperativa de acciones a realizar en un entorno con estado, las reglas de plantilla solo definen cómo manejar un nodo que coincida con un patrón similar a XPath particular, si el procesador encuentra uno, y el contenido de las plantillas. comprenden efectivamente 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. Primero, suponiendo que ya se haya leído y preparado una hoja de estilo, el procesador crea un árbol de fuentes a partir del documento XML de entrada. Luego procesa el nodo raíz del árbol de origen, encuentra la plantilla que mejor coincide para 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

XSLT utiliza XPath para identificar subconjuntos del árbol del documento fuente y realizar cálculos. XPath también proporciona una variedad de funciones , que el propio 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. Sin embargo, con la versión 3.0 ya no estaban sincronizados; XPath 3.0 se convirtió en Recomendación en abril de 2014, seguido de XPath 3.1 en febrero de 2017; XSLT 3.0 siguió en junio de 2017.

XQuery comparado

Las funcionalidades de XSLT se superponen con las de XQuery , que inicialmente fue concebido 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 garantizar un enfoque común cuando corresponda. 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 tradiciones diferentes y satisfacen las necesidades de comunidades diferentes. XSLT se concibió principalmente como un lenguaje de hojas de estilo cuyo objetivo principal era representar XML para el lector humano en pantalla, en la web (como lenguaje de plantilla web ) o en papel. XQuery fue concebido 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 el manejo de documentos narrativos con una estructura más flexible, mientras que XQuery es más fuerte en el manejo de datos, por ejemplo al realizar uniones relacionales. [20]

Tipos de medios

Opcionalmente, el <output>elemento puede tomar el atributo media-type, que permite 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/xmlya que durante mucho tiempo no hubo ningún tipo de medio registrado para XSLT. Durante este tiempo text/xslse convirtió en el estándar de facto. En XSLT 1.0 no se especificaba cómo media-typese debían utilizar los valores.

Con el lanzamiento de XSLT 2.0, el W3C recomendó en 2007 el registro del tipo de medio MIME application/xslt+xml[21] y posteriormente fue registrado ante la Internet Assigned Numbers Authority . [22]

Se utilizaron borradores de trabajo anteriores a 1.0 de XSLT text/xslen sus ejemplos de incrustación, y Microsoft implementó y continuó promoviendo este tipo en Internet Explorer [23] y MSXML alrededor de 2012. También es ampliamente reconocido en las xml-stylesheetinstrucciones de procesamiento de otros navegadores. Por lo tanto, en la práctica, los usuarios que querían controlar la transformación en el navegador mediante esta instrucción de procesamiento estaban obligados a utilizar este tipo de medio no registrado. [24]

Ejemplos

Estos ejemplos utilizan el siguiente documento XML entrante

<?xml versión="1.0" ?> <personas> <persona nombre de usuario= "JS1" > <nombre> John </nombre> <nombre de familia> Smith </nombre de familia> </persona> <persona nombre de usuario= " MI1" > <nombre> Morka </nombre> <nombre-familia> Ismincio </nombre-familia> </persona> </personas>          

Ejemplo 1 (transformación de XML a XML)

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

<?xml versión="1.0" codificación="UTF-8"?> <xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" versión= "1.0" > <xsl : método de salida= sangría "xml" = "sí" />      <xsl:template match= "/personas" > <root> <xsl:apply-templates select= "persona" /> </root> </xsl:template>       <xsl:template match= "persona" > <nombre nombre de usuario= "{@nombredeusuario}" > <xsl:valor-of select= "nombre" /> </nombre> </xsl:template>        </xsl:hoja de estilo>

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

<?xml versión="1.0" codificación="UTF-8"?> <root> <nombre nombre de usuario= "JS1" > John </nombre> <nombre nombre de usuario= "MI1" > Morka </nombre> </root>    

Ejemplo 2 (transformación de XML a XHTML)

Procesando el siguiente archivo XSLT de ejemplo

<?xml versión="1.0" codificación="UTF-8"?> <xsl:stylesheet versión= "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í" codificación= "UTF-8" />    <xsl:template match= "/persons" > <html> <head> <title> Ejemplo de prueba XML </title> </head> <body> <h1> Personas </h1> <ul> <xsl:apply- plantillas select= "persona" > <xsl:sort select= "nombre-familia" /> </xsl:apply-templates> </ul> </body> </html> </xsl:template>                     <xsl:template match= "persona" > <li> <xsl:value-of select= "nombre de familia" /><xsl:text> , </xsl:text><xsl:value-of select= "nombre " /> </li> </xsl:plantilla>        </xsl:hoja de estilo>

con el archivo de entrada XML que se muestra arriba se obtiene el siguiente XHTML ( los espacios en blanco se han 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 el siguiente resultado cuando se representa 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 pantalla, 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", se podría agregar la siguiente instrucción al XML entrante original: [25]

<?xml-stylesheet href="ejemplo2.xsl" tipo="texto/xsl" ?>

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

Implementaciones de procesador

Actuación

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 y utiliza lenguajes intermedios portátiles (como el código de bytes de 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 importantes beneficios de rendimiento en aplicaciones de publicación en línea, donde la misma transformación se aplica muchas veces por segundo a diferentes documentos fuente. [41] 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 hojas de estilo se leían en modelos de objetos de documentos y el procesador actuaba sobre ellos directamente. Los motores XPath tampoco fueron optimizados. Sin embargo, los procesadores XSLT utilizan cada vez más técnicas de optimización que se encuentran en lenguajes de programación funcionales y 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 diferida en canalización para reducir la huella de memoria de los resultados intermedios. (y permitir la "salida anticipada" cuando el procesador puede evaluar una expresión, por ejemplo, following-sibling::*[1]sin una evaluación completa de todas las subexpresiones). Muchos procesadores también utilizan representaciones de árbol que son significativamente más eficientes (tanto en espacio como en tiempo) [42] que las implementaciones DOM de propósito general.

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

Ver también

Referencias

  1. ^ ab "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 W3C . W3C. 16 de noviembre de 1999 . Consultado el 7 de noviembre de 2012 .
  5. ^ XSLT versión 2.0 es Turing-Complete: una prueba puramente basada en transformación
  6. ^ Michael Kay. "¿Qué tipo de lenguaje es XSLT?". IBM . Consultado el 8 de julio de 2016 .
  7. ^ "Una propuesta para XSL". W3C . Consultado el 7 de noviembre de 2012 .
  8. ^ "Cronología de los estándares XML y Web Semántica W3C" (PDF) . Archivado desde el original (PDF) el 24 de abril de 2013 . Consultado el 4 de febrero de 2012 .
  9. ^ "Transformaciones XSL (XSLT)". W3.org. 16 de noviembre de 1999 . 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. ^ "Lenguaje de ruta XML (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 los estándares XML y Web Semántica W3C" (PDF) . 2012-02-04. Archivado desde el original (PDF) el 24 de abril de 2013 . Consultado el 4 de febrero de 2012 .
  14. ^ "¿Qué hay de nuevo en XSLT 3.0?". w3 . Consultado el 6 de enero de 2014 .
  15. ^ Kay, Michael. "Un procesador XSLT de transmisión". Balisage: Actas de la Conferencia de marcado 2010 . Consultado el 15 de febrero de 2012 .
  16. ^ Flatt, Amelie; Langner, Arne; Leps, Olof (2022), "Fase III: Generación de artefactos a partir del modelo", Desarrollo basado en modelos de perfiles de aplicaciones Akoma Ntoso , Cham: Springer International Publishing, págs. 31–37, doi :10.1007/978-3-031- 14132-4_5, ISBN 978-3-031-14131-7, recuperado el 7 de enero de 2023
  17. ^ "Transformaciones XSL (XSLT) versión 2.0 (segunda edición)". www.w3.org . Consultado el 7 de febrero de 2023 . Ejemplo: múltiples documentos de resultados
  18. ^ "Descubra las maravillas de XSLT: peculiaridades de XSLT". Archivado desde el original el 9 de julio de 2011 . Consultado el 11 de febrero de 2011 . XSLT es un lenguaje muy especializado con un sabor declarativo distintivo.
  19. ^ Kay, Michael. "¿Qué tipo de lenguaje es XSLT?". IBM . Consultado el 13 de noviembre de 2013 .
  20. ^ "Saxonica: XSLT y XQuery". www.saxonica.com . Consultado el 29 de junio de 2022 .
  21. ^ "Transformaciones XSL (XSLT) versión 2.0". W3C . Consultado el 19 de octubre de 2012 .
  22. ^ "Tipos de medios de aplicaciones". IANA . Consultado el 19 de octubre de 2012 .
  23. ^ "Requisitos XSLT para ver XML en un navegador". Microsoft . Consultado el 19 de octubre de 2012 .
  24. ^ Kay, Michael (2008). Referencia del programador XSLT 2.0 y XPath 2.0 . Wiley. pag. 100.ISBN 978-0-470-19274-0.
  25. ^ ab "Transformaciones XSL (XSLT) versión 1.0: recomendación del W3C: incorporación de hojas de estilo". W3C. 16 de noviembre de 1999 . Consultado el 20 de septiembre de 2016 .
  26. ^ "La biblioteca XSLT C para GNOME: libxslt" . Consultado el 23 de noviembre de 2012 .
  27. ^ "La biblioteca XSLT C para GNOME: la herramienta xsltproc" . Consultado el 23 de noviembre de 2012 .
  28. ^ "Página de manual de xsltproc" . Consultado el 23 de noviembre de 2012 .
  29. ^ "Nuevo paquete: libxslt" . Consultado el 23 de noviembre de 2012 .
  30. ^ "El proyecto de código abierto WebKit - XSLT" . Consultado el 25 de octubre de 2009 .
  31. ^ "El analizador XML C y el conjunto de herramientas de Gnome: Python y enlaces" . Consultado el 23 de noviembre de 2012 .
  32. ^ "XML::LibXSLT - Interfaz para la biblioteca libxslt de GNOME". CPAN . Consultado el 23 de noviembre de 2012 .
  33. ^ "libxslt-rubí" . Consultado el 23 de noviembre de 2012 .
  34. ^ "libxml" . Consultado el 23 de noviembre de 2012 .
  35. ^ "cl-libxml2 Contenedor de alto nivel para las bibliotecas libxml2 y libxslt".
  36. ^ "TclXML" . Consultado el 21 de mayo de 2013 .
  37. ^ "libxml++". fuenteforge.net . Consultado el 23 de noviembre de 2012 .
  38. ^ "Utilidad de transformación de línea de comandos (msxsl.exe)". Microsoft . Consultado el 22 de octubre de 2012 .
  39. ^ "Sajón-JS". Saxónica . Consultado el 6 de septiembre de 2018 .
  40. ^ "Problema 58151: no se puede cargar el archivo xml en el sistema de archivos local mediante XMLHttpRequest".
  41. ^ Saxon: Anatomía de un procesador XSLT: artículo que describe los detalles de implementación y optimización de un procesador XSLT popular.
  42. ^ Lumley, Juan; Kay, Michael (junio de 2015). "Mejora del rendimiento de la coincidencia de patrones en XSLT". XML Londres 2015 : 9–25. doi : 10.14337/XMLLondon15.Lumley01 (inactivo 2024-02-27). ISBN 978-0-9926471-2-4.{{cite journal}}: Mantenimiento CS1: DOI inactivo a partir de febrero de 2024 ( enlace )
  43. ^ Kay, Michael; Lockett, Debbie (junio de 2014). "Evaluación comparativa del rendimiento XSLT". XML Londres 2014 : 10–23. doi : 10.14337/XMLLondon14.Kay01 (inactivo 2024-02-27). ISBN 978-0-9926471-1-7.{{cite journal}}: Mantenimiento CS1: DOI inactivo a partir de febrero de 2024 ( enlace )

Otras lecturas

enlaces externos

Documentación
Bibliotecas de códigos XSLT