xsl:variable und xsl:param

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

Was bleibt unter den vorgenannten Randbedingungen noch an Flexibilität für die Variable, wenn nicht einmal die Neuzuweisung eines Wertes möglich ist? Ganz so verheerend ist die Lage nicht. Einige Ähnlichkeiten zum Variablen­­konzept in anderen Sprachen existieren dann doch.

Unter einer Variablen versteht man auch in XSLT einen Wert, der mit einem frei wählbaren Bezeichner, beispielsweise der_name, verknüpft ist, der dazu dient, diesen Wert aufzu­rufen und einzubinden. Der Variablenwert ergibt sich aus einem XPath-Ausdruck oder einem Template-Block im Inneren der Variablen-Deklaration:

<xsl:variable name="der_name">
  <!-- hier den Wert ermitteln -->
</xsl:variable>

Für die Referenzie­rung einer Variablen wird dem Bezeichner das Dollarzeichen vorangestellt: $der_name.

Variablen und Parameter – zweieiige Zwillinge

Es gibt zwei XSLT-Elemente, die, in leicht unterschiedlichen Ausprägungen, den Charakter von Variablen besitzen: xsl:variable und xsl:param.

Beide Elemente stehen für einen, mittels eines Bezeichners referenzierbaren Wert. Der Unterschied zwischen ihnen besteht darin, auf welche Weise beide Elemente den in ihnen gespeicherten Wert erhalten. Im Fall einer Variablen xsl:variable kommt dieser Wert quasi »von innen« – die Variable bestimmt ihn zum Zeitpunkt ihrer Deklaration selbst. Hierzu dient entweder ein XPath-Ausdruck in ihrem select-Attribut oder aber ein Sequenzkonstruktor im Inne­ren des Elements. Allerdings: Nach der Festlegung des Werts kann dieser für die Gültigkeitsdauer der Variablen nicht verändert werden.

Auch die Deklaration eines Parameters kann diesen per select oder mittels eines Sequenzkonstruktors umgehend mit einem Wert belegen. Im Gegensatz zu den Gepflogenheiten bei einer Variablen, stellt dieser Wert bei xsl:param nur einen Default-Wert dar, kann also von außen überschrieben werden. Dies jedoch nur im Augenblick der Deklaration, nicht zu einem späteren Zeitpunkt.

Die Belegung eines Parameters mit einem Wert geschieht für lokale Parameter mit Hilfe der Instruktion xsl:with-param. Sofern ein Wert übergeben wird, hat dieser Vorrang; wird kein Wert übergeben, so tritt der Default-Wert in Kraft. Als Wertübergabe gilt auch die explizite Übergabe eines leeren Strings oder einer leeren Sequenz, sofern dabei der Parameter adressiert wird!

Zwei Ausprägungen – global und lokal

Ungleich aller anderen XSLT-Elemente können xsl:variable und xsl:param sowohl als Instruktionen innerhalb von Template-Blöcken als auch im Tople­vel-Bereich auf Deklarationsebene erscheinen. In letzterem Falle können die Werte überall im Stylesheet aufgerufen werden, besitzen also globalen Gültig­keitsbereich. In diesem Sinne redet man dann von globalen Parametern bzw. globalen Variablen. Ihnen entgegen stehen die sogenannten lokalen Variablen und Parameter. Diese werden innerhalb von Template-Regeln oder benannten Templates deklariert und gelten auch nur dort.

In XSLT haben Variablen einen streng eingegrenzten Gültigkeitsbereich (scope). Innerhalb dieses Gültigkeitsbereichs können sie ausgelesen werden, außerhalb davon sind sie nicht sichtbar.

Für den Gültigkeitsbereich einer Variablen gibt es eine einfache Faustregel: Eine Variable gilt ab dem Punkt ihrer Deklaration für alle folgenden Elemente gleicher Hierarchie-Ebene (following siblings) und deren Nachfolgerelemente (descendants). Derartige Deklarationen sehen vom Prinzip her wie folgt aus:

<!-- eine Variable -->
<xsl:variable name="zahl" select="17"/>
<!-- ein Parameter -->
<xsl:param name="zahl" select="4"/>

Die oben genannte Variable wäre anschließend mittels $zahl referenzierbar. Dieselbe Referenz $zahl müsste unglücklicherweise auch für den gleichnamigen Para­meter verwendet werden. Hieraus folgt:

Gleichnamige Variablen und Parameter sind beim Aufruf nicht unter­scheidbar; sie sollten unbedingt vermieden werden!

   

<< 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