webentwicklung-frage-antwort-db.com.de

Upgrade von XSLT 1.0 auf XSLT 2.0

Was ist mit dem Upgrade von XSLT 1.0 auf 2.0 verbunden?
1 - Was sind die möglichen Gründe für ein Upgrade?
2 - Was sind die möglichen Gründe für ein NICHT-Upgrade?
3 - Und was sind schließlich die Schritte zum Upgrade?

Ich hoffe auf eine Zusammenfassung - die Kurzfassung :)

57
Witman

Was ist mit dem Upgrade von XSLT 1.0 auf 2.0 verbunden?

1 - Was sind die möglichen Gründe für ein Upgrade?

Wenn Sie ein XSLT-Programmierer sind, profitieren Sie weitgehend von der bequemeren und ausdrucksstärkeren XSLT 2.0-Sprache + XPath 2.0 und dem neuen XDM (XPath Data Model).

Vielleicht möchten Sie sich diesen XSLT 2.0 Pluralsight-Kurs ansehen, um ein sicheres und systematisches Verständnis der Leistungsfähigkeit von XSLT 2.0 zu erlangen .

Du hast:

  • Starke Typisierung und alle verfügbaren XSD-Typen.

  • Die Möglichkeit, eigene (Schema-) Typen zu definieren.

  • der XPath 2.0-Sequenztyp, der in XPath 1.0 kein Gegenstück hat (einfach fehlt).

  • Die Fähigkeit, Funktionen in reinem XSLT zu definieren und zu schreiben - die Anweisung xsl:function.

  • Bereichsvariablen in XPath-Ausdrücken (die for -Klausel).

  • Deutlich bessere und leistungsfähigere Zeichenfolgenverarbeitung - XPath 2.0 unterstützt reguläre Ausdrücke in den Funktionen tokenize(), matches() und replace().

  • Deutlich bessere und leistungsstärkere Zeichenfolgenverarbeitung - XSLT 2.0-Unterstützung für reguläre Ausdrücke - die neuen XSLT-Anweisungen xsl:analyze-string, xsl:matching-substring Und xsl:non-matching-substring.

  • Bequemere, leistungsfähigere und aussagekräftigere Gruppierung: die Anweisung xsl:for-each-group.

  • Viele neue, sehr leistungsstarke XPath 2.0-Funktionen - wie z. B. die Funktionen für Datum, Uhrzeit und Dauer, um nur einige zu nennen.

  • Die neuen XPath-Operatoren intersect, except, is, >>, <<, some, every, instance of, castable as, ... usw.

  • Die allgemeinen XPath-Operatoren >, < Usw. arbeiten jetzt mit jedem geordneten Werttyp (nicht nur mit Zahlen wie in XPath 1.0).

  • Neue, sicherere Wertevergleichsoperatoren: lt, le, eq, gt, ge, ne.

  • Der XPath 2.0-Operator to, mit dem xsl:for-each select="1 to $N"

Diese und viele andere Verbesserungen/neue Funktionen steigern die Produktivität jedes XSLT-Programmierers erheblich. Dadurch kann die XSLT 2.0-Entwicklung in einem Bruchteil der Zeit abgeschlossen werden, die für die Entwicklung derselben Module mit XSLT 1.0 erforderlich ist.

Durch die starke Typisierung können viele Fehler beim Kompilieren abgefangen und sofort korrigiert werden. Für mich ist diese starke Typensicherheit der größte Vorteil der Verwendung von XSLT 2.0.

2 - Was sind die möglichen Gründe für ein NICHT-Upgrade?

  • Es ist oft möglich, vernünftig und kostengünstig, vorhandene ältere XSLT 1.0-Anwendungen unangetastet zu lassen und sie mit XSLT 1.0 weiter zu verwenden, während gleichzeitig nur neu Anwendungen mit XSLT 2.0 entwickelt werden.

  • Ihr Management + sonstige nichttechnische Gründe.

  • Viele ältere XSLT 1.0-Anwendungen wurden in einem schlechten Stil geschrieben (z. B. unter Verwendung von DOE- oder Erweiterungsfunktionen, die jetzt neu geschrieben und der Code überarbeitet werden müssen).

  • Kein XSLT 2.0-Prozessor verfügbar.

3 - Und was sind schließlich die Schritte zum Upgrade?

  • Ändern Sie das version -Attribut des Elements xsl:stylesheet Oder xsl:transform Von "1.0" In "2.0".

  • Entfernen Sie alle xxx:node-set() -Funktionen.

  • Entfernen Sie alle DOE.

  • Seien Sie bereit für die Überraschung, dass xsl:value-of Jetzt nicht nur die ersten, sondern alle Elemente einer Sequenz ausgibt.

  • Versuchen Sie, die neue Anweisung xsl:sequence So oft wie möglich zu verwenden - ersetzen Sie damit alle Anweisungen xsl:copy-of. Verwenden Sie ihn jederzeit anstelle von xsl:value-of, wenn der Typ der Ausgabe kein String oder Textknoten ist.

  • Ausführlich testen.

  • Wenn der Test bestätigt hat, dass der Code wie erwartet funktioniert, starten Sie das Refactoring (falls erforderlich). Es ist eine gute Idee, Typen für Variablen, Parameter, Vorlagen und Funktionen zu deklarieren. Dies kann neue, versteckte Fehler aufdecken und deren Behebung die Qualität Ihres Codes erhöhen.

  • Optional können Sie festlegen, welche benannten Vorlagen als xsl:function Umgeschrieben werden sollen.

  • Entscheiden Sie, ob Sie noch einige Erweiterungsfunktionen benötigen, die in der alten Version verwendet werden, oder ob Sie diese mithilfe der neuen, leistungsstarken Funktionen von XSLT problemlos umschreiben können.

Schlussbemerkungen : Nicht alle der oben genannten Schritte sind erforderlich, und man kann die Migration stoppen und für erfolgreich erklären, wenn die Testergebnisse keine Fehler enthalten. Es ist viel sauberer, alle XSLT 2.0/XPath 2.0-Funktionen in Neu Projekten zu verwenden.

109

Dimitres Antwort ist sehr umfassend und 100% genau (wie immer), aber ich möchte noch einen Punkt hinzufügen. Beim Upgrade auf einen 2.0-Prozessor können Sie das Versionsattribut auf "1.0" belassen und im "Abwärtskompatibilitätsmodus" ausführen oder das Versionsattribut auf "2.0" ändern. Oft wird gefragt, welcher Ansatz empfohlen wird.

Mein Rat ist, wenn Sie eine gute Anzahl von Tests für Ihre Stylesheets haben, gehen Sie folgendermaßen vor: Setzen Sie version = "2.0", führen Sie die Tests aus und beheben Sie sie, falls Probleme auftreten. Normalerweise sind die Probleme Code, der nie ganz richtig war und nur zufällig funktioniert hat. Wenn Sie jedoch nicht über eine Reihe guter Tests verfügen und sich Sorgen über die Zuverlässigkeit Ihrer Arbeitslast machen, ist das Verlassen von Version = "1.0" ein Ansatz mit geringerem Risiko: Der Prozessor emuliert dann alle Macken von XSLT 1.0, z xsl: Wert, bei dem alle Elemente außer dem ersten ignoriert werden, und die seltsamen Regeln für den Vergleich von Zahlen mit Zeichenfolgen.

28
Michael Kay