XSLT et alternatives possibles [fermé]


15

J'ai jeté un œil à XSLT pour transformer un fichier XML en un autre (HTML, etc.). Maintenant, même si je vois qu'il y a des avantages à XSLT (étant un outil standardisé et utilisé), je suis réticent pour plusieurs raisons

  • Les processeurs XSLT semblent être assez énormes / gourmands en ressources
  • XML est une mauvaise notation pour la programmation et c'est à cela que sert XSLT.

Il ne veut pas troller XSLT ici même si je veux juste souligner ce que je n'aime pas à ce sujet pour vous donner une idée de ce que j'attendrais d'une alternative.

Ayant quelques antécédents en Lisp, je me demande s'il existe de meilleures façons de transformer les arborescences basées sur un lisp. J'ai vu des références à DSSSL, malheureusement la plupart des liens sur DSSSL sont morts, il est donc déjà difficile de voir du code qui l'illustre. Le DSSSL est-il toujours utilisé? Je me souviens que j'avais installé openjade une fois lors de la vérification des trucs docbook.

Le billet de blog de Jeff Atwood semble faire allusion à l'utilisation de Ruby au lieu de XSLT.

Existe-t-il des moyens sensés de faire des transformations XML similaires à XSLT dans un langage de programmation non xml? Je serais ouvert pour entrée sur

  • Bibliothèques utiles pour les langages de script qui facilitent les transformations XML
  • en particulier (mais pas exclusivement) des langages de transformation de type lisp, ou Ruby, etc.

Quelques choses que j'ai trouvées jusqu'à présent:


J'utilise HXT et Haskell assez souvent, c'est très agréable
Daniel Gratzer

5
En toute honnêteté, ce n'est pas Jeff Atwood qui préconise Ruby, il cite Martin Fowler qui préfère Ruby. Le post original de Fowler est ici: martinfowler.com/bliki/MovingAwayFromXslt.html Et il a été écrit il y a 10 ans en 2003 - Je pense que XSLT 2.0 est sorti en 2007 et avec de nombreuses améliorations, et XPath 2.0 en 2010.
FrustratedWithFormsDesigner

Réponses:


18

Il est difficile d'évaluer les technologies lorsque vous n'en avez pas une expérience approfondie, mais bien sûr, c'est exactement à ce moment-là que vous devez prendre vos décisions, il n'y a donc pas de réponse simple à ce dilemme.

Vous citez deux préoccupations: les performances et la convivialité. Je vais essayer de répondre aux deux ci-dessous.

Tout d'abord, la performance. Les performances dépendent bien sûr non seulement de la langue mais aussi de l'implémentation, et aussi de l'expertise des utilisateurs. Différents processeurs XSLT peuvent varier considérablement en termes de performances, et le même processeur peut varier considérablement en fonction de la façon dont il est utilisé (avec Saxon, par exemple, les personnes qui ont des problèmes de performances se retrouvent très souvent à l'utiliser avec DOM, qui est une mauvaise combinaison et les performances peuvent être multipliées par dix si vous utilisez plutôt le modèle d'arbre natif de Saxon). Donc, le premier conseil est de ne pas prendre la performance sur du ouï-dire, la mesurer; et le deuxième conseil est de s'assurer que la personne qui effectue la mesure a suffisamment d'expérience pour ne pas commettre d'erreurs idiotes. Plus facile à dire qu'à faire.

En gros, vous pouvez séparer les travaux de transformation en deux catégories: simples et complexes. Pour les transformations simples, avec un bon processeur XSLT, tout le temps est consacré à l'analyse et à la sérialisation et le temps de traitement XSLT entre à peine en ligne de compte. Étant donné que toute autre technologie va entraîner les mêmes coûts d'analyse et de sérialisation, le choix de la technologie de transformation ne fera pas une grande différence (sauf peut-être très pour le codage de très bas niveau utilisant le streaming, mais peu de gens peuvent se permettre la programmation temps et compétences nécessaires pour la mettre en œuvre). Pour les transformations complexes sur des documents volumineux, vous commencez à rencontrer les mêmes problèmes qu'avec la programmation SQL: atteindre de bonnes performances nécessite une bonne interaction entre les compétences et les connaissances du programmeur et les capacités de l'optimiseur. Comme avec SQL, c'est ' s très facile dans un langage aussi avancé d'écrire quelques instructions simples qui obligent le processeur à effectuer une très grande quantité de travail. Mais comme pour SQL, les programmeurs qui savent ce qu'ils font feront bien mieux que les novices.

Deuxièmement, la convivialité. La syntaxe basée sur XML pour XSLT est très rebutante pour beaucoup de gens lors de leur première rencontre avec le langage. Mais il y a de bonnes raisons et de réels avantages à le faire de cette façon: il y a l'argument "modèle", qu'une grande partie du code se compose de XML à écrire dans le document résultat, et la meilleure façon d'écrire XML est en XML. Et il y a l'argument de la "réflexion"; dans les grands systèmes complexes, il est très courant de trouver des feuilles de style qui génèrent des feuilles de style. Ensuite, il y a l'argument "tools"; si vous êtes dans une boutique XML, vous disposez probablement de nombreux outils XML tels que des éditeurs orientés syntaxe, et il est bon de pouvoir utiliser les mêmes outils pour gérer vos programmes et vos données. Les inconvénients se révèlent assez cosmétiques en comparaison: s le nombre de touches impliquées dans l'édition (facilement corrigé avec un bon outil d'édition), et il y a la verbosité du code (réduisant sa lisibilité). La verbosité est considérablement réduite dans XSLT 2.0 avec l'introduction de fonctionnalités telles que les expressions régulières et les fonctions de feuille de style: de nombreuses feuilles de style sont réduites de moitié ou d'un tiers lorsqu'elles tirent pleinement parti de XSLT 2.0.

Votre mention de DSSSL me laisse avec un sourire ironique. Je n'ai jamais utilisé DSSSL, mais les histoires que j'ai entendues étaient qu'il était inutile car sa syntaxe était obscure et sans rapport avec la syntaxe des données (SGML). L'utilisation d'une syntaxe XML pour XSLT était fortement motivée par l'expérience avec DSSSL.

Il y a des gens qui aiment le XSLT et il y a des gens qui le détestent. Sans surprise, ceux qui l'utilisent beaucoup ont tendance à tomber dans la première catégorie. Ceux qui ne l'aiment pas sont généralement ceux qui n'ont pas appris à "penser à la manière XSLT". Vous pourriez faire valoir qu'un langage de programmation ne devrait pas affecter votre façon de penser, mais c'est le cas: écrire dans un langage basé sur des règles prend un état d'esprit différent de l'écriture dans un langage impératif. La première réaction de nombreux programmeurs est qu'ils se sentent moins en contrôle (décrivant le problème plutôt que de dire à l'ordinateur quoi faire étape par étape). C'est très similaire à la réaction que vous aviez l'habitude de voir lorsque les gens ont été initiés à SQL. De nos jours, les gens apprennent SQL plus tôt dans leur carrière, donc il y a moins de réajustement mental requis.

En fin de compte, vous devez choisir une technologie basée sur des critères objectifs mesurables et non sur des réactions d'amour / haine. Il est difficile de faire ces mesures. Mais il y a beaucoup de gens qui utilisent XSLT de manière très intensive et très réussie, donc il ne fait aucun doute que cela peut être fait.


2
Le terme le plus courant pour «langage basé sur des règles» est un langage déclaratif.
Daniel Gratzer

@Michael Kay - Bien dit. Personnellement, j'adore XSLT et je l'utilise avec C #. De plus je l'utilise avec XSL-FO pour produire des documents PDF. XSLT est puissant, très puissant, ce qui me permet de convertir rapidement de grandes quantités de données en HTML, XSL-FO, XML ou texte.
PhillyNJ

3

Sans informations supplémentaires sur le contexte, il est difficile de répondre.

Pourtant, je ne comprends pas pourquoi vous ne voulez pas utiliser XSLT. C'est le bon outil pour le travail et puissant. Il est fait spécifiquement pour transformer un XML en un autre.

Les processeurs XSLT semblent être assez énormes / gourmands en ressources

Avez-vous des données solides pour soutenir cela? Avez-vous implémenté la solution à l'aide de XSLT et constaté que XSLT est le goulot d'étranglement qui rend impossible la livraison du produit tout en remplissant toutes les exigences non fonctionnelles liées aux performances?

Sans données statistiques et sans profilage, vous ne pouvez pas raisonnablement affirmer qu'une solution donnée ne fonctionnera pas. Les exigences non fonctionnelles sont-elles suffisamment raisonnables? Préféreriez-vous perdre, disons, dix jours de travail de développeurs pour gagner quelques centaines de millisecondes en remplaçant XSLT par une autre alternative? Cela en vaut-il la peine?

XML est une mauvaise notation pour la programmation et c'est à cela que sert XSLT.

Vous voulez donc transformer un XML en un autre, mais vous ne voulez pas utiliser XSLT parce que "XML est une mauvaise notation"?

Si c'est le fait que vous utilisez XML comme une sorte de langage de programmation qui vous ennuie tellement, ne le voyez pas comme une programmation, mais plutôt comme un tas de règles de transformation.

Vous n'avez même pas besoin d'écrire XSLT à la main. Il existe de nombreux éditeurs ETL qui peuvent vous permettre de mapper graphiquement un XML dans un autre: aucune programmation requise. Certains d'entre eux utilisent XSLT en sortie.


J'ai rencontré des problèmes de ressources avec les feuilles basées sur XSLT, elles ont été créées avec un outil graphique mais elles ne fonctionnent plus avec des fichiers plus gros.
wirrbel

1
puis il y a des problèmes probablement avec votre XSLT filepas XSLT Transformationseux - mêmes
Malachie

Maintenant, je ne condamne pas XML, en fait je pense qu'il est approprié pour la représentation des données (en particulier pour le balisage). En tant que «langage de programmation» - et XSLT est un langage de programmation spécifique à un domaine - il n'est pas pratique. <xsl: que ce soit> Tags, métalangages (comme xpath, notation $, etc.) dans les attributs de requête, tout ce qui n'est pas mappé en XML est mis entre guillemets d'attribut. Pour une impression d'une représentation s-expression de XML: blog.getprismatic.com/blog/2013/1/22/… dans un tel endroit , XML et et proglang peuvent fonctionner sans effort
wirrbel

1

Si vous utilisez XSLT pour générer du XML sur la base du XSLT brut et de certains paramètres que vous transmettez au moteur XSLT, l'utilisation d'une approche XML de modèle est beaucoup plus facile à comprendre et à gérer.

J'ai été sur un projet où Moustache était utilisé pour remplacer XSLT et le résultat était des fichiers XML de base beaucoup plus simples que tout le monde pouvait éditer et ajuster, plutôt que ce travail de projet soit passé à une ou deux âmes courageuses, qui s'asseyaient dans un silence total avec des gouttes de sueur qui coulent ...

L'approche par modèle ne convient pas lorsque le XML de base est également des données valides à part entière et que XSLT est utilisé pour fournir une autre représentation ou un extrait du XML source.


Pourriez-vous expliquer davantage ce qu'il fait et pourquoi le recommandez-vous comme répondant à la question posée? Les «réponses de lien uniquement» ne sont pas tout à fait les bienvenues à Stack Exchange
gnat

1
réponse examinée en ligne avec vos commentaires
Michael Shaw

0

XML n'est pas un langage de programmation

XML est un moyen de transférer / transporter des données.
une instruction XSLT utilise Xpath pour interroger les données d'une manière spécifique et les placer dans un autre objet / document de transport de données.

ET / OU

XSLT peut transformer votre XML en HTML, qui est une autre façon d'afficher / transporter les données contenues dans un document XML.

si vous cherchez à changer le XML ou à créer un document XML, vous pouvez utiliser n'importe quel nombre de langues: C #, VB, Ruby, Etc.

généralement, lorsque vous utilisez un fichier XSLT pour transformer un document XML, vous avez toujours le document XML d'origine, vous ne modifiez pas réellement le document d'origine, vous en créez vraiment un nouveau.


1
Wikipédia dit: "XSLT est un langage complet de Turing, ce qui signifie qu'il peut spécifier tout calcul pouvant être effectué par un ordinateur.". Je n'ai jamais dit que XML était un langage de programmation en soi.
wirrbel

vous avez dit que "XML est une mauvaise notation pour la programmation" dans les langages de programmation que j'ai utilisés, vous pouvez extraire les données des fichiers XML assez facilement. XSLT gagne du terrain en étant capable de faire beaucoup de calculs et de cracher ces données vers un autre objet / document de transport de données. c'est comme SQL vers SQL Server, il peut faire beaucoup de choses, mais c'est surtout du back-end, pas du front-end. SQL comme XSLT, il interroge les données d'une manière spécifique, mais vous ne voulez jamais donner les résultats de cette requête sous forme de rapport, vous voulez envoyer les informations à un générateur de rapports
Malachi

2
XSLT n'interroge pas les données, XPATH effectue l'interrogation. XSLT n'est-il pas un langage déclaratif qui définit des instructions sur le XML analysé?
PhillyNJ

XSLT définit des règles de transformation basées sur des modèles pour lesquels il peut utiliser Xpath. C'est-à-dire que vous pouvez avoir des constructions de programmation de haut niveau telles que xsl:for-each xsl:apply-templates, xsl:if xsl:call-template xsl:value-ofpour définir des règles de transformation.
wirrbel

1
@PhilVallone Je suis d'accord. J'avais tort là-bas. wirrbel, je ne vais pas discuter avec vous de ce qu'est et n'est pas XSLT / XSL, si vous voulez transformer votre document XML en un autre document XML, vous allez vouloir utiliser XSLT / XSL.
Malachi

0

J'ai travaillé sur plusieurs systèmes de traitement XML qui combinent des bibliothèques XSLT avec Java ou C ++ pour les parties où XSLT n'est pas aussi bon. Il existe des bibliothèques qui obtiennent de très bonnes performances XSLT même sur des fichiers XML de 20 Mo. Cependant, XSLT a certaines limitations avec le contexte, les variables et les modèles de chaînes vraiment complexes. Chaque système sur lequel j'ai travaillé avait quelques tâches effectuées en Java / C ++ parce que le contexte était important ou qu'une expression regex complexe était utile. Ma conclusion est que XSLT plus du code supplémentaire dans la langue de votre choix est un bon moyen de transformer XML.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.