XSLT y posibles alternativas [cerrado]

13

Eché un vistazo a XSLT para transformar un archivo XML en otro (HTML, etc.). Ahora, mientras veo que hay ventajas para XSLT (al ser una herramienta estandarizada y utilizada), me resisto 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 usar XSLT aquí, pero solo quiero señalar lo que no me gusta para darte una idea de lo que esperaría de una alternativa.

Teniendo algo de fondo de Lisp, me pregunto si hay mejores formas para las transformaciones de la estructura de árbol basadas en un poco de luz. He visto referencias a DSSSL, lamentablemente la mayoría de los enlaces sobre DSSSL están muertos, por lo que ya es un desafío ver algunos códigos que lo ilustran. ¿DSSSL sigue en uso? Recuerdo que había instalado openjade una vez al revisar las cosas del libro de documentos.

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

¿Hay alguna forma sensata de realizar transformaciones XML similares a XSLT en un lenguaje de programación no XML? Estaría abierto para comentarios sobre

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

Algunas cosas que encontré hasta ahora:

  • Un par de lugares en la web han señalado a Linq como una posible alternativa. En general, cualquier clase de clasificación, también de aquellos que han tenido la mejor experiencia XSLT.
  • Para el esquema enlace y enlace
pregunta wirrbel 10.09.2013 - 18:53

5 respuestas

17

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

Usted cita dos preocupaciones: el rendimiento y la usabilidad. Intentaré abordar ambos a continuación.

En primer lugar, el rendimiento. El rendimiento, por supuesto, depende no solo del lenguaje sino también de la implementación, y también de la experiencia de los usuarios. Diferentes procesadores XSLT pueden variar ampliamente en 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 deficiente , y el rendimiento puede aumentar diez veces si utiliza el modelo de árbol nativo de Saxon en su lugar). Entonces, el primer consejo es que no tome el rendimiento de oídas, mídalo; y el segundo consejo es asegurarse de que la persona que realiza la medición tenga la experiencia suficiente para no cometer errores tontos. Más fácilmente dicho que hecho.

Crudamente, puede separar los trabajos de transformación en dos categorías: simple y complejo. Para transformaciones simples, con un buen procesador XSLT, el tiempo se gasta en analizar y serializar, y el tiempo de procesamiento de XSLT apenas entra en escena. Dado que cualquier otra tecnología va a incurrir en los mismos costos de análisis y serialización, la elección de la tecnología de transformación no supondrá una gran diferencia (excepto quizás para la codificación de muy bajo nivel que utiliza la transmisión por secuencias, pero no mucha gente puede 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, en un lenguaje de tan alto nivel es muy fácil escribir algunas declaraciones simples que hacen que el procesador tenga que hacer una gran cantidad de trabajo. Pero también como con SQL, los programadores que saben lo que están haciendo 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 de resultados, y la mejor manera de escribir XML es en XML. Y ahí está el argumento de la "reflexión"; en grandes sistemas complejos, es muy común encontrar hojas de estilo que generan hojas de estilo. Luego está el argumento de las "herramientas"; Si está en una tienda XML, es probable que 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 estéticas en comparación: existe la cantidad de pulsaciones de tecla involucradas en la edición (que se soluciona fácilmente con una buena herramienta de edición), y existe la verbosidad del código (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 hojas 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.

Tu mención de DSSSL me deja con una sonrisa irónica. Nunca he usado DSSSL, pero las historias que escuché eran que no tenían é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 que no les gusta son generalmente aquellos que no han aprendido a "pensar de la manera XSLT". Podría argumentar que un lenguaje de programación no debería afectar su forma de pensar, pero sí 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 las personas fueron introducidas a SQL por primera vez. 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 medidas. Pero hay mucha gente que usa XSLT de manera muy intensa y exitosa, por lo que no hay duda de que se puede hacer.

    
respondido por el Michael Kay 10.09.2013 - 22:16
4

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

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

  

Los procesadores XSLT parecen ser bastante grandes / hambrientos de recursos

¿Tienes datos duros para apoyar eso? ¿Ha implementado la solución usando XSLT y encontró que XSLT es el cuello de botella que hace 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 suficientemente razonables? ¿Preferiría perder, digamos, diez días de trabajo de los desarrolladores para ganar unos cientos de milisegundos al reemplazar XSLT por otra alternativa? ¿Vale la pena?

  

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

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

Si es el hecho de que usas XML como un tipo de lenguaje de programación que te molesta tanto, no lo veas como programación, sino como un montón de reglas de transformación.

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

    
respondido por el Arseni Mourzenko 10.09.2013 - 20:09
1

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

He estado en un proyecto donde se usó Moustache para reemplazar XSLT y el resultado fue mucho archivos XML de base más simples que todos podrían editar y ajustar, en lugar de que el trabajo del proyecto se transfiera a una o dos almas valientes, quienes se sentarían en silencio total con gotas de sudor derramándose ...

El enfoque de la plantilla no es adecuado para su uso cuando el XML base también es un dato válido en sí mismo, y se está utilizando XSLT para proporcionar una representación alternativa, o un extracto del XML de origen.

    
respondido por el Michael Shaw 17.09.2013 - 18:00
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.

AND/OR

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 número 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.

    
respondido por el Malachi 10.09.2013 - 20:21
0

He trabajado en varios 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 muy buen rendimiento de XSLT incluso en archivos XML de 20 MB, sin embargo, XSLT tiene alguna limitación con el contexto, las variables y los patrones de cadena realmente complejos. Cada sistema en el que he trabajado hizo algunas cosas en Java / C ++ porque el contexto era importante o alguna expresión de expresión regular compleja ayudó. Mi conclusión es que XSLT más un código adicional en el idioma que elijas es una buena manera de transformar XML.

    
respondido por el Michael Shopsin 17.09.2013 - 17:24

Lea otras preguntas en las etiquetas