Variablen und Parameter

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 3.)

Dass es sich bei XSLT um eine »funktionale« Sprache handelt, die oben­drein ohne Seiteneffekte auskommt, hat für das Sprachdesign einige Folgen, die auf den Programmierer, der von prozeduralen Sprachen herkommt, etwas befremdlich wirken. Ein Paradebeispiel hierfür ist das Konzept, das bei XSLT unter der Bezeichnung »Variable« läuft. Eine Variable, deren Wert nicht verän­dert werden kann? Ist das überhaupt eine Variable? Es ist also an der Zeit, sich mit diesem Thema auseinander zu setzen.

XSLT ist eine deklarative, regelbasierte Sprache

Hier ist vielleicht eine kurze, theoretische Rekapitulation angebracht. Was bedeutet »funktional«, »deklarativ« oder »regelbasiert«? Im Gegensatz zu einer pro­zeduralen Sprache, die einen Verarbeitungsprozess (Aufgaben und deren Rei­henfolge) modelliert, beschreibt XSLT deklarativ das gewünschte Ergebnis einer Transformation: Was wird in welchem Fall ausgegeben?

Hierfür bedient man sich sogenannter Template-Regeln, die, vergleichbar mit Subroutinen, an Hand von Mustervergleichen (pattern matching) mit im Quelldokument auftretenden Strukturen aktiviert werden.

Template-Regel
Im einfachen Fall ist eine Template-Regel für ein Element eines bestimmten Namens »zuständig«. Sie wird aktiv, sobald im Laufe des Verarbeitungs­­prozesses ein Element dieses Namens angetroffen wird.

Die Reihenfolge der Regeln im Stylesheet ist aus diesem Grunde irrelevant und unabhängig von der Struktur des zu verarbeitenden Dokuments. Der Zeitpunkt ihrer Aktivierung wird lediglich durch die Reihenfolge der Elemente im Quell­dokument bestimmt, muss und soll also vom Stylesheet-Autor nicht festgelegt werden.

XSLT ist frei von Seiteneffekten

Weniger offensichtlich ist, warum XSLT als Programmiersprache konzipiert ist, die frei von sogenannten Seiteneffekten ist. Besteht der Preis hierfür doch eben darin, dass beispielsweise der Wert globaler Variablen während der Lauf­zeit eines Stylesheets nicht mehr verändert werden kann: Ein Wertzuweisungsstatement existiert nicht. In diesem Sinne handelt es sich bei XSLT ebenfalls um eine funktionale Programmiersprache.

Der Grund für diese Einschränkung ist, dass die Reihenfolge des Aufrufs von Template-Regeln nur dann gleichgültig ist, solange ihr Aufruf keine Parameter in der Laufzeitumge­bung verändert. Würde Template-Regel A den Wert einer globalen Variable X setzen bzw. ändern, die in Template-Regel B verwendet wird, so hängt die Ausgabe davon ab, ob A vor B aufgerufen wird oder umgekehrt.

Nebenwirkungen sind unerwünscht
Eine XSLT-Template-Regel soll daher ausschließlich ein Ergebnis ausgeben und nicht nebenbei Randbedingungen verändern, die für andere Regeln relevant sind. Sie sind »funktional« in dem Sinne, dass ihre Aktivierung jederzeit das gleiche Ergebnis erzeugt.

Die Freiheit von Seiteneffekten bewirkt somit, dass das Ergebnis einer Trans­formation stets eindeutig und nicht an eine bestimmte, erforderliche Aktivie­rungsreihenfolge von Template-Regeln gebunden ist. Die zusätzliche Intention ist, dass auf diesem Wege gleichzeitig seitens des XSLT-Prozessors eine Opti­mierung der Verarbeitung ermöglicht wird.

  

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn