• Keine Ergebnisse gefunden

Ausblick auf XSLT 2.0

Im Dokument Serielle Transformationen von XML (Seite 64-67)

4   Die Transformationssprache XSLT   41

4.6 Ausblick auf XSLT 2.0

Seit Dezember 2001 arbeitet das W3C an den Nachfolgeversionen 2.0 für XSLT [W3C03b] und XPath [W3C03a]. Beide Spezifikationen werden in Gemeinschaft mit der XML-Anfragesprache XQuery [W3C03c] (siehe Kapitel 3.3.3) entwickelt und besaßen Anfang 2004 den Status eines finalen Arbeitsentwurfs.9 Einige der neuen Konzepte aus XSLT/XPath 2.0 werden sich auch in STX wieder finden. In diesem Kapitel werden die wesentlichen Aspekte beider Spezifikationen kurz vorge-stellt.

XPath 2.0

Sequenztyp Das Datenmodell von XPath 2.0 führt die Sequenz als neuen grundlegenden Datentyp ein. Eine Sequenz ist eine Folge von einfachen Werten bzw. Knoten, die durch Kommata voneinander getrennt notiert werden. Dabei besteht kein Unterschied zwi-schen einem einzelnen Wert und einer einelementigen Sequenz. Beide können nicht

9engl.: »Working Draft in Last Call«. Dies ist die letzte Stufe vor einem Empfehlungskandidaten (Candidate Recommendation). Die mit der Entwicklung einer Spezifikation beauftragte W3C-Arbeitsgruppe zeigt mit der Be-zeichnung als finaler Arbeitsentwurf an, dass aus ihrer Sicht alle Anforderungen erfüllt sind. Sie erwartet nun Kom-mentare der Öffentlichkeit und anderer W3C-Arbeitsgruppen. Auf dieser Stufe können letztmalig inhaltliche Ände-rungen vorgenommen werden.

Serielle Transformationen von XML. Probleme, Methoden, Lösungen.

52 4  Die Transformationssprache XSLT

voneinander unterschieden werden. Verschachtelte Sequenzen gibt es nicht; solche Konstruktionen werden immer in flache Sequenzen aufgelöst. Sequenzen verallge-meinern damit den aus XPath 1.0 bekannten Typ der Knotenmenge auf die einfachen Datentypen. Eine leere Sequenz entspricht der leeren Knotenmenge.

Sequenzen sind ein grundlegender strukturierter Datentyp für atomare Werte. In XPath 1.0 gibt es keine Möglichkeit, eine »Sammlung« einfacher Werte als einzelnen Wert zu behandeln, ihn beispielsweise einer Variablen zuzuweisen. Diese Schwäche wird in XPath 2.0 beseitigt. Der Sequenztyp wird sich in der in dieser Arbeit entwi-ckelten Transformationssprache STX wieder finden.

Für Sequenzen gibt es in XPath 2.0 einige neue Operatoren: den Bereichsoperator to, den Schleifenoperator for $i in Seq return Wert, der aus der Sequenz Seq eine neue Sequenz konstruiert, sowie die Quantifizierungsoperatoren some (entspricht dem mathematischen ∃) und every (entspricht ∀).

Typisierung Die zweite wesentliche Änderung neben der Einführung von Sequenzen betrifft die

strenge Typisierung. In XPath 1.0 gibt es neben dem Knotentyp nur drei einfache Datentypen: Boolesche Werte, Zahlen und Zeichenketten. Werte dieser Typen werden bei Bedarf automatisch in den erforderlichen Typ umgewandelt. Typfehler können somit nicht auftreten (von der nicht möglichen Umwandlung eines einfachen Wertes in einen Knoten einmal abgesehen).

Das Typsystem von XPath 2.0 basiert stattdessen auf dem Typsystem von XML Schema [W3C01b] und ergänzt dieses um fünf weitere Datentypen. Automatische Typumwandlungen werden nun nur noch zwischen kompatiblen Typen vorgenommen, d.h. wenn der bereitgestellte Typ ein Subtyp des benötigten Typs ist. Damit sind insbesondere die sehr häufig in XPath 1.0 auftretenden impliziten Umwandlungen zwischen Zahlen und Zeichenketten in XPath 2.0 nicht mehr möglich. Stattdessen muss nun eine explizite Umwandlung mit Hilfe der entsprechenden Konvertierungs-funktionen vorgenommen werden. XPath 2.0 ist damit auf der einen Seite typsicherer, verlangt jedoch auf der anderen Seite viele explizite Typumwandlungen und somit häufig kompliziertere Ausdrücke.

Bedingte Ausdrücke Ein weiteres neues XPath-Konstrukt sind bedingte Ausdrücke. Diese lassen sich in

XPath 1.0 nur über komplexe Konstruktionen mit Zeichenkettenfunktionen realisie-ren.10 In XPath 2.0 können bedingte Ausdrücke nun direkt als if (Bedingung) then Wert1 else Wert2 notiert werden.

Namensraum-Achse Schließlich gilt die Achse namespace in XPath 2.0 als veraltet (deprecated).

Stattdessen bieten zusätzliche Funktionen den Zugriff auf die Informationen über aktive Namensräume. Dies soll effizientere XPath-Implementierungen ermöglichen, da für Namensräume nun keine eigenen Knoten mehr erzeugt werden müssen.

XSLT 2.0

Temporäre Bäume Die wichtigste Neuerung in XSLT betrifft die Entfernung des Typs

Ergebnisbaum-fragment (result tree Ergebnisbaum-fragment). Solche im Transformationsprozess erzeugten XML-Fragmente können in XSLT 1.0 ausschließlich in die Ausgabe kopiert oder in eine Zeichenkette umgewandelt werden. Eine Weiterverarbeitung in Form einer weiteren Transformation ist nicht möglich. In XSLT 2.0 wird ein solches Fragment nun durch die Wurzel (den Dokumentknoten) eines temporären Baumes repräsentiert. Auf diesen

10Diese vom Autor entwickelte Vorgehensweise wird in [Ten01] unter dem Namen Becker Method dargestellt.

Dissertation, Oliver Becker, 1. Juli 2004

4.6  Ausblick auf XSLT 2.0 53

Baum kann mit Hilfe normaler XPath-Ausdrücke zugegriffen werden. Insbesondere können diese Knoten ebenfalls durch xsl:apply-templates ausgewählt und so erneut transformiert werden.

Mehrere Ausgabe-dokumente

In XSLT 1.0 gibt es kein Konzept, mehrere unterschiedliche Ausgabedokumente zu erzeugen. Dies liegt wieder darin begründet, dass XSLT ursprünglich allein als Be-standteil einer Stilsprache entworfen wurde, in der nur ein primäres Ausgabedokument sinnvoll ist. XSLT 2.0 sieht nun eine Anweisung xsl:result-document vor, mit deren Hilfe separate Ausgabedokumente erzeugt werden können. Darüber hinaus lässt sich die Serialisierung in einen XML-Text detaillierter steuern. Da die verschie-denen Serialisierungsoptionen nicht nur in XSLT benötigt werden, hat das W3C diese in eine eigene Spezifikation ausgelagert [W3C03f].

Gruppieren Die Lösung von Gruppierungsproblemen gehört in XSLT 1.0 zu den anspruchsvollen Aufgaben. Zwar gibt es eine unter dem Namen »Muench'sche Methode« (nach deren Entwickler Steve Muench) bekannt gewordene Methode, die jedoch für mehrstufige Gruppierungsaufgaben sehr komplex wird. Da die Bildung von Gruppen jedoch sehr häufig innerhalb von XML-Transformationen auftritt, sieht XSLT 2.0 hierfür eine spezielle Anweisung vor.

Stylesheet-Funktionen

Die Definition eigener Funktionen ist in XSLT 1.0 nur über den Umweg benannter Templates möglich. Innerhalb eines solchen Template muss der Rückgabewert als XML-Fragment (d.h. als Textknoten) erzeugt werden. Um diesen Wert anschließend innerhalb von XPath-Ausdrücken verwenden zu können, muss der Aufruf xsl:call-template immer in eine zusätzliche Variablendefinition eingebettet werden, sodass diese Variable den zurückgegebenen Wert aufnimmt. In XSLT 2.0 können nun Funktionen mit der Anweisung xsl:function direkt definiert und innerhalb von XPath-Ausdrücken aufgerufen werden.

Textanalyse XSLT 2.0 bietet erweiterte Möglichkeiten zur Auswertung von Texten mit Hilfe re-gulärer Ausdrücke. Das Kapitel 5.6.6 wird auf dieses Problem im Zusammenhang mit der in STX dafür vorgesehenen Anweisung genauer eingehen.

Typen und Validierung

Das strenge Typsystem von XPath 2.0 setzt sich in XSLT 2.0 fort. So können nun Variablen bei ihrer Deklaration typisiert werden. Die Zuweisung eines unverträglichen Werts führt in diesem Fall zu einem Typfehler.

Darüber hinaus ermöglicht XSLT 2.0 das Importieren von Schema-Definitionen. Auf diese Weise können beispielsweise Templates programmiert werden, die alle Knoten eines bestimmten Typs oder seiner Subtypen bearbeiten. Auf die gleiche Weise lassen sich Templates für alle Elemente einer Schema-Ersetzungsgruppe erstellen. Des Weiteren ermöglicht XSLT 2.0 wahlweise eine lockere oder strenge Validierung des erzeugten Ergebnis-Dokuments oder auch den gänzlichen Verzicht auf die Validierung.

Serielle Transformationen von XML. Probleme, Methoden, Lösungen.

54 4  Die Transformationssprache XSLT

Kapitel 5

Streaming Transformations for XML

Das Design der Transformationssprache XSLT bedingt, dass diese nicht für die Ver-arbeitung beliebig großer Dokumente und XML-Datenströme eingesetzt werden kann.

Allerdings sind auch keine alternativen Transformationsmethoden bekannt, die sowohl dieses Kriterium erfüllen, als auch hinsichtlich Mächtigkeit und Einfachheit mit XSLT vergleichbar sind (siehe Kapitel 3).

Ziel der vorliegenden Arbeit ist es, eine Transformationssprache für XML zu entwer-fen, die auf der einen Seite auf einem Datenstrom operiert und auf der anderen Seite aus XSLT bekannte Konstrukte wieder verwendet. Diese Sprache soll Streaming Transformations for XML genannt werden, abgekürzt STX.

Dieses Kapitel beschreibt zunächst die Anforderungen an STX und davon ausgehend den Entwurf dieser Sprache.

Im Dokument Serielle Transformationen von XML (Seite 64-67)