XSLT y posibles alternativas [cerrado]

15

Eché un vistazo a XSLT para transformar un archivo XML en otro (HTML, etc.). Ahora, aunque veo que XSLT tiene beneficios (al ser una herramienta estandarizada y usada), soy reacio por un par de razones

  • Los procesadores XSLT parecen ser bastante grandes / hambrientos de recursos
  • XML es una mala notación para la programación y de eso se trata XSLT.

No quiero troll XSLT aquí, aunque solo quiero señalar lo que no me gusta para darle una idea de lo que esperaría de una alternativa.

Teniendo algunos antecedentes de Lisp, me pregunto si hay mejores formas para las transformaciones de la estructura de árbol basadas en algún lisp. He visto referencias a DSSSL, lamentablemente la mayoría de los enlaces sobre DSSSL están muertos, por lo que ya es difícil ver algún código que lo ilustre. ¿DSSSL todavía está en uso? Recuerdo que había instalado Openjade una vez cuando revisé cosas de docbook.

La publicación del blog de Jeff Atwood parece insinuar el uso de Ruby en lugar de XSLT.

¿Hay alguna forma sensata de hacer transformaciones XML similares a XSLT en un lenguaje de programación que no sea XML? Estaría abierto a la entrada de

  • Bibliotecas útiles para lenguajes de secuencias de comandos que facilitan las transformaciones XML
  • especialmente (pero no exclusivamente) lenguajes de transformación tipo lisp, o Ruby, etc.

Algunas cosas que encontré hasta ahora:

wirrbel
fuente
Uso HXT y Haskell con bastante frecuencia, es muy agradable
Daniel Gratzer
55
Para ser justos, no es Jeff Atwood quien defiende a Ruby, está citando a Martin Fowler que prefiere a Ruby. La publicación original de Fowler está aquí: martinfowler.com/bliki/MovingAwayFromXslt.html Y fue escrito hace 10 años en 2003 - Creo que XSLT 2.0 salió en 2007 y con muchas mejoras, y XPath 2.0 en 2010.
FrustratedWithFormsDesigner

Respuestas:

18

Es difícil evaluar las tecnologías cuando no tienes una experiencia profunda de ellas, pero por supuesto es exactamente cuando tienes que tomar tus decisiones, por lo que no hay una respuesta simple a ese dilema.

Citas dos preocupaciones: rendimiento y usabilidad. Trataré de abordar ambos a continuación.

En primer lugar, el rendimiento. El rendimiento, por supuesto, depende no solo del idioma sino también de la implementación y también de la experiencia de los usuarios. Los diferentes procesadores XSLT pueden variar ampliamente en el rendimiento, y el mismo procesador puede variar ampliamente dependiendo de cómo se use (con Saxon, por ejemplo, las personas que tienen problemas de rendimiento a menudo lo usan con DOM, que es una combinación pobre , y el rendimiento puede aumentar diez veces si utiliza el modelo de árbol nativo de Saxon en su lugar). Entonces, el primer consejo es no tomar el rendimiento en rumores, medirlo; y el segundo consejo es asegurarse de que la persona que realiza la medición tenga suficiente experiencia para no cometer errores tontos. Más fácil decirlo que hacerlo.

Crudamente, puede separar los trabajos de transformación en dos categorías: simples y complejos. Para transformaciones simples, con un buen procesador XSLT, el tiempo se dedica a analizar y serializar, y el tiempo de procesamiento XSLT apenas entra en escena. Dado que cualquier otra tecnología incurrirá en los mismos costos de análisis y serialización, la elección de la tecnología de transformación no va a hacer una gran diferencia (excepto quizás muy para la codificación de muy bajo nivel usando la transmisión, pero no muchas personas pueden pagar la programación) tiempo y habilidades necesarias para implementar eso). Para transformaciones complejas en documentos grandes, comienza a tener los mismos problemas que con la programación SQL: lograr un buen rendimiento requiere una buena interacción entre las habilidades y el conocimiento del programador y las capacidades del optimizador. Al igual que con SQL, ' Es muy fácil en un lenguaje de tan alto nivel escribir algunas declaraciones simples que dan como resultado que el procesador tenga que hacer una gran cantidad de trabajo. Pero también, al igual que con SQL, los programadores que saben lo que hacen lo harán mucho mejor que los novatos.

Segundo, usabilidad. La sintaxis basada en XML para XSLT es muy desagradable para muchas personas en el primer encuentro con el lenguaje. Pero hay buenas razones y beneficios reales para hacerlo de esta manera: existe el argumento de la "plantilla", que gran parte del código consiste en XML para escribir en el documento resultante, y la mejor manera de escribir XML es en XML. Y existe el argumento de la "reflexión"; En sistemas complejos grandes, es muy común encontrar hojas de estilo que generen hojas de estilo. Luego está el argumento de "herramientas"; si está en una tienda XML, probablemente tenga muchas herramientas XML, como editores dirigidos por sintaxis, y es bueno poder usar las mismas herramientas para manejar sus programas y sus datos. Las desventajas resultan ser bastante cosméticas en comparación: hay ' s la cantidad de pulsaciones de teclas involucradas en la edición (se arregla fácilmente con una buena herramienta de edición), y está la verbosidad del código (lo que reduce su legibilidad). La verbosidad se reduce enormemente en XSLT 2.0 con la introducción de características como expresiones regulares y funciones de hoja de estilo: muchas hojas de estilo se reducen a la mitad o un tercio de tamaño cuando aprovechan al máximo XSLT 2.0.

Su mención de DSSSL me deja con una sonrisa irónica. Nunca he usado DSSSL, pero las historias que escuché fueron que no tenía éxito porque su sintaxis era arcana y no estaba relacionada con la sintaxis de los datos (SGML). El uso de una sintaxis XML para XSLT estuvo fuertemente motivado por la experiencia con DSSSL.

Hay personas que aman XSLT y hay personas que lo odian. Como era de esperar, aquellos que lo usan mucho tienden a caer en la primera categoría. Aquellos a quienes no les gusta son generalmente aquellos que no han aprendido a "pensar a la manera XSLT". Podría argumentar que un lenguaje de programación no debería afectar su forma de pensar, pero lo hace: escribir en un lenguaje basado en reglas toma una mentalidad diferente de escribir en un lenguaje imperativo. La primera reacción de muchos programadores es que se sienten menos en control (describiendo el problema, en lugar de decirle a la computadora qué hacer paso a paso). Es muy similar a la reacción que solía ver cuando la gente se introdujo por primera vez a SQL. En estos días, las personas aprenden SQL antes en sus carreras, por lo que se requiere menos reajuste mental.

En última instancia, debe elegir una tecnología basada en criterios objetivos medibles, no en reacciones de amor / odio. Es difícil hacer esas mediciones. Pero hay muchas personas que usan XSLT de manera muy intensa y exitosa, por lo que no hay duda de que se puede hacer.

Michael Kay
fuente
2
El término más común para "lenguaje basado en reglas" es un lenguaje declarativo.
Daniel Gratzer
@ Michael Kay - Bien dicho. Personalmente, amo XSLT y lo uso con C #. Además, lo uso con XSL-FO para crear documentos PDF. XSLT es potente, muy potente, lo que me permite convertir grandes cantidades de datos rápidamente en HTML, XSL-FO, XML o texto.
PhillyNJ
3

Sin información adicional sobre el contexto, es difícil responder.

Aún así, no entiendo por qué no quieres usar XSLT. Es la herramienta adecuada para el trabajo, y una herramienta poderosa. Se hace específicamente para transformar un XML en otro.

Los procesadores XSLT parecen ser bastante grandes / hambrientos de recursos

¿Tiene datos duros para respaldar eso? ¿Ha implementado la solución usando XSLT y descubrió que XSLT es el cuello de botella que hace que sea imposible entregar el producto mientras cumple con todos los requisitos no funcionales relacionados con el rendimiento?

Sin datos estadísticos y perfiles, no puede afirmar razonablemente que una solución dada no funcionará. ¿Son los requisitos no funcionales lo suficientemente razonables? ¿Preferiría perder, por ejemplo, diez días de trabajo de los desarrolladores para ganar unos pocos cientos de milisegundos al reemplazar XSLT por otra alternativa? ¿Hace que valga la pena?

XML es una mala notación para la programación y de eso se trata XSLT.

¿Entonces quiere transformar un XML en otro, pero no quiere usar XSLT porque "XML es una mala notación"?

Si es el hecho de que usa XML como una especie de lenguaje de programación que le molesta tanto, no lo vea como programación, sino como un montón de reglas de transformación.

Ni siquiera necesita escribir XSLT a mano. Hay muchos editores ETL que pueden permitirle asignar gráficamente un XML a otro: no se requiere programación alguna. Algunos de ellos usan XSLT como salida.

Arseni Mourzenko
fuente
He encontrado problemas de recursos con las hojas basadas en XSLT, fueron creadas con una herramienta gráfica pero dejó de funcionar con archivos más grandes.
wirrbel
1
entonces probablemente hay problemas con tu XSLT fileno XSLT Transformationsellos mismos
Malachi
Ahora no estoy condenando XML, de hecho creo que es apropiado para la representación de datos (especialmente para el marcado). Como "lenguaje de programación" - y XSLT es un lenguaje de programación específico de dominio - es inconveniente. <xsl: whatever> Etiquetas, metalenguajes (como xpath, $ notation, etc.) en los atributos de la consulta, todo lo que no está mapeado en XML se pone entre comillas de atributos. Para una impresión de una representación de XML en s-expression: blog.getprismatic.com/blog/2013/1/22/… en tal lugar, XML y proglang funcionan sin problemas
wirrbel
1

Si está utilizando XSLT para generar XML basado en el XSLT sin procesar y algunos parámetros que está pasando al motor XSLT, entonces usar un enfoque XML de plantilla es mucho más fácil de entender y mantener.

He estado en un proyecto donde se usó Moustache para reemplazar XSLT y el resultado fueron archivos XML de base mucho más simples que todos podían editar y ajustar, en lugar de que el trabajo del proyecto se pasara a una o dos almas valientes, que se quedarían en silencio total con gotas de sudor cayendo ...

El enfoque de plantilla no es adecuado para su uso cuando el XML base también es información válida por derecho propio, y ese XSLT se está utilizando para proporcionar una representación alternativa o un extracto del XML fuente.

Michael Shaw
fuente
¿Le importaría explicar más sobre lo que hace y por qué lo recomienda como respuesta a la pregunta que se hace? Las "respuestas de solo enlace" no son bienvenidas en Stack Exchange
mosquito
1
respuesta revisada en línea con sus comentarios
Michael Shaw
0

XML no es un lenguaje de programación

XML es una forma de transferir / transportar datos.
lo que hace una instrucción XSLT es usar Xpath para consultar los datos de una manera específica y colocarlos en otro objeto / documento de transporte de datos.

Y / O

XSLT puede transformar su XML en HTML, que es otra forma de mostrar / transportar los datos contenidos en un documento XML.

Si desea cambiar el XML o crear un documento XML, puede usar cualquier cantidad de idiomas: C #, VB, Ruby, etc.

por lo general, cuando usa un archivo XSLT para transformar un documento XML, todavía tiene el documento XML original, en realidad no cambia el documento original, realmente crea uno nuevo.

Malaquías
fuente
1
Wikipedia dice: "XSLT es un lenguaje completo de Turing, lo que significa que puede especificar cualquier cálculo que pueda realizar una computadora". Nunca dije que XML era un lenguaje de programación per se.
wirrbel
dijiste "XML es una mala notación para la programación" en los lenguajes de programación que he usado, puedes extraer datos de archivos XML con bastante facilidad. XSLT está ganando terreno al poder hacer muchos cálculos y escupir esos datos a otro objeto / documento de transporte de datos. es como SQL to SQL Server, puede hacer muchas cosas, pero es principalmente back-end, no front-end. SQL como XSLT, consulta los datos de una manera específica, pero nunca desea dar los resultados de esa consulta como un informe, desea enviar la información a un creador de informes
Malachi
2
XSLT no consulta datos, XPATH hace las consultas. ¿No es XSLT un lenguaje declarativo que define instrucciones sobre xml analizado?
PhillyNJ
XSLT define reglas de transformación basadas en patrones para los que puede usar Xpath. Es decir, puede tener construcciones de programación de alto nivel como xsl:for-each xsl:apply-templates, xsl:if xsl:call-template xsl:value-ofpara definir reglas de transformación.
wirrbel
1
@PhilVallone Estoy de acuerdo. Me equivoqué allí. wirrbel, no voy a discutir contigo sobre qué es y qué no es XSLT / XSL, si quieres transformar tu documento XML en otro documento XML, querrás usar XSLT / XSL.
Malaquías
0

He trabajado en múltiples sistemas de procesamiento XML que combinan bibliotecas XSLT con Java o C ++ para las partes en las que XSLT no es tan bueno. Hay bibliotecas que obtienen un rendimiento XSLT muy bueno incluso en archivos XML de 20 MB, sin embargo, XSLT tiene algunas limitaciones con el contexto, las variables y los patrones de cadena realmente complejos. En cada sistema en el que he trabajado se hicieron algunas cosas en Java / C ++ porque el contexto era importante o alguna expresión compleja de expresiones regulares ayudó. Mi conclusión es que XSLT más algún código adicional en el idioma de su elección es una buena manera de transformar XML.

Michael Shopsin
fuente