web-dev-qa-db-fra.com

Mise à niveau de XSLT 1.0 vers XSLT 2.0

En quoi consiste la mise à niveau de XSLT 1.0 vers 2.0?
1 - Quelles sont les raisons possibles de la mise à niveau?
2 - Quelles sont les raisons possibles pour NE PAS mettre à niveau?
3 - Et enfin, quelles sont les étapes de la mise à niveau?

J'espère un résumé - la version courte :)

57
Witman

En quoi consiste la mise à niveau de XSLT 1.0 vers 2.0?

1 - Quelles sont les raisons possibles de la mise à niveau?

Si vous êtes un programmeur XSLT, vous bénéficierez largement du langage XSLT 2.0 plus pratique et expressif + XPath 2.0 et du nouveau XDM (XPath Data Model).

Vous voudrez peut-être regarder ceci cours Pluralsight XSLT 2. pour obtenir une compréhension ferme et systématique de la puissance de XSLT 2.0 .

Vous avez:

  • Typage fort et tous les types XSD disponibles.

  • La possibilité de définir vos propres types (schéma).

  • le type de séquence XPath 2.0 qui n'a pas d'équivalent (simplement manquant) dans XPath 1.0.

  • La possibilité de définir et d'écrire fonctions en XSLT pur - l'instruction xsl:function.

  • Variables de plage dans les expressions XPath (la clause for).

  • Traitement des chaînes bien meilleur et plus puissant - XPath 2.0 prend en charge les expressions régulières dans ses fonctions tokenize(), matches() et replace().

  • Traitement des chaînes bien meilleur et plus puissant - Prise en charge XSLT 2.0 des expressions régulières - les nouvelles instructions XSLT xsl:analyze-string, xsl:matching-substring Et xsl:non-matching-substring.

  • Regroupement plus pratique, puissant et expressif: l'instruction xsl:for-each-group.

  • Beaucoup de nouvelles fonctions XPath 2.0 très puissantes - telles que les fonctions de date, d'heure et de durée, pour n'en nommer que quelques-unes.

  • Les nouveaux opérateurs XPath intersect, except, is, >>, <<, some, every, instance of, castable as, ..., etc.

  • Les opérateurs XPath généraux >, <, Etc. fonctionnent désormais sur tout type de valeur ordonnée (pas seulement sur les nombres comme dans XPath 1.0).

  • Nouveaux opérateurs de comparaison de valeurs plus sûrs: lt, le, eq, gt, ge, ne.

  • L'opérateur XPath 2.0 to, permettant d'avoir xsl:for-each select="1 to $N"

Celles-ci, ainsi que de nombreuses autres améliorations/nouvelles fonctionnalités, augmentent considérablement la productivité de tout programmeur XSLT, ce qui permet de terminer le développement XSLT 2.0 dans une petite fraction du temps nécessaire pour développer les mêmes modules avec XSLT 1.0.

Un typage fort permet de détecter de nombreuses erreurs lors de la compilation et de les corriger immédiatement. Pour moi, cette sécurité de type forte est le plus grand avantage de l'utilisation de XSLT 2.0.

2 - Quelles sont les raisons possibles pour NE PAS mettre à niveau?

  • Il est souvent possible, raisonnable et rentable de laisser intactes les applications XSLT 1.0 existantes et existantes et de continuer à les utiliser avec XSLT 1.0, tout en développant en même temps que les applications new utilisant XSLT 2.0.

  • Votre gestion + toute autre raison non technique.

  • Avoir beaucoup d'applications XSLT 1.0 héritées écrites dans un style médiocre (par exemple en utilisant DOE ou des fonctions d'extension qui doivent maintenant être réécrites et le code refactorisé).

  • Ne pas disposer d'un processeur XSLT 2.0.

3 - Et enfin, quelles sont les étapes de la mise à niveau?

  • Modifiez l'attribut version de l'élément xsl:stylesheet Ou xsl:transform De "1.0" En "2.0".

  • Supprimez toutes les fonctions xxx:node-set().

  • Retirez tout DOE.

  • Soyez prêt pour la surprise que xsl:value-of Affiche désormais non seulement le premier, mais tous éléments d'une séquence.

  • Essayez d'utiliser la nouvelle instruction xsl:sequence Autant que possible - utilisez-la pour remplacer toutes les instructions xsl:copy-of; utilisez-le à la place de xsl:value-of à tout moment lorsque le type de sortie n'est pas une chaîne ou un nœud de texte.

  • Testez en profondeur.

  • Lorsque le test a vérifié que le code fonctionne comme prévu, commencez la refactorisation (si cela est jugé nécessaire). C'est une bonne idée de déclarer des types pour toutes les variables, paramètres, modèles et fonctions. Cela peut révéler de nouvelles erreurs cachées et les corriger augmente la qualité de votre code.

  • Vous pouvez également choisir les modèles nommés à réécrire en xsl:function.

  • Décidez si vous avez encore besoin de certaines fonctions d'extension utilisées dans l'ancienne version, ou vous pouvez les réécrire facilement en utilisant les nouvelles capacités puissantes de XSLT.

Remarques finales : Toutes les étapes ci-dessus ne sont pas nécessaires et on peut arrêter et déclarer la migration réussie sur zéro résultat de test de bogue. Il est beaucoup plus propre de commencer à utiliser toutes les fonctionnalités XSLT 2.0/XPath 2.0 dans les projets nouveau.

109
Dimitre Novatchev

La réponse de Dimitre est très complète et précise à 100% (comme toujours) mais il y a un point que j'ajouterais. Lors de la mise à niveau vers un processeur 2.0, vous avez le choix de laisser l'attribut de version défini sur "1.0" et de fonctionner en "mode de compatibilité descendante", ou de changer l'attribut de version sur "2.0". Les gens demandent souvent quelle approche est recommandée.

Mon conseil est, si vous avez un bon ensemble de tests pour vos feuilles de style, franchissez le pas: set version = "2.0", lancez les tests, et s'il y a des problèmes, corrigez-les. Habituellement, les problèmes seront du code qui n'a jamais été tout à fait correct et qui n'a fonctionné que par accident. Mais si vous n'avez pas un bon ensemble de tests et que la fiabilité de votre charge de travail vous préoccupe, laisser version = "1.0" est une approche à moindre risque: le processeur émulera alors toutes les bizarreries de XSLT 1.0, telles que xsl: value-of ignorant tout sauf le premier élément, et les règles étranges pour comparer des nombres avec des chaînes.

28
Michael Kay