• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Variablendefinitionen

Es ist möglich, in einem Modul Variablen auch außerhalb von XQuery-Ausdrücken zu definieren. Wenn es sich um ein Bibliotheksmodul handelt, muss eine solche Variable explizit dem Namensraum des Bibliotheksmoduls angehören:

VarDecl::=declare variable $QName (as SequenceType)? { Expr };

Wenn ein Typ angegeben wird, muss er zu dem Ergebnis des Ausdrucks passen. Der Ausdruck darf alle Funktionen benutzen, die irgendwo im Prolog definiert oder importiert werden, aber, um zyklische Definitionen zu vermeiden, nur solche Variablen, die an einer früheren Stelle im Prolog definiert wurden. Solchermaßen definierte Variablen sind dann im gesamten Modul bekannt. Damit kann zum Beispiel eine zentrale Stelle für Codeanpassungen geschaffen werden:

xquery version "1.0";
module namespace Steuer = "http://example.org/Steuerberechnung";
declare variable $Steuer:MWSt-Satz as xs:decimal {16};
import schema namespace Geld = "http://example.org/Geld";

declare function Steuer:inclMWSt(
$Netto as Geld:EuroBetrag)
as Geld:EuroBetrag
{
($Netto * (100 + $Steuer:MWSt-Satz)) div 100
};

declare function Steuer:exclMWSt(
$Brutto as Geld:EuroBetrag)
as Geld:EuroBetrag
{
$Netto * 100 div (1 + $Steuer:MWSt-Satz)
};

In diesem Beispiel wird angenommen, dass es ein Schema mit dem Namensraum "http://example.org/Geld" gibt, in dem der Typ EuroBetrag (als Untertyp von xs:decimal mit zwei Nachkommastellen) definiert ist. Das Modul stellt Funktionen zur Mehrwertsteuerberechnung zur Verfügung: eine Funktion, um die Mehrwertsteuer auf einen Nettobetrag zu addieren, eine, um die Mehrwertsteuer aus einem Betrag herauszurechnen. Der Mehrwertsteuersatz ist dabei als Variable definiert, die in beiden Funktionen verwendet wird. So muss nur an einer Stelle des Moduls eine Änderung vorgenommen werden, wenn sich der Steuersatz ändert. Man kann sich auch vorstellen, dass es mehrere umfangreichere XQuery-Module zur Steuerberechnung gibt. Dann kann es sinnvoll sein, alle relevanten Steuersätze usw. in einem eigenen Modul zu definieren, das dann nur Variablendefinitionen enthält.

Wenn XQuery-Anfragen in andere Programmiersprachen eingebettet werden sollen, ist es wünschenswert, Werte aus diesen anderen Umgebungen nach XQuery übertragen zu können. Solche Werte können einem XQuery-Modul mit einer Variablendeklaration bekannt gemacht werden. Statt des Ausdrucks, aus dem sich der Wert der Variablen ergibt, steht dann das Schlüsselwort external:

declare variable $Steuer:MWSt-Satz as xs:decimal external;

Fehlt bei einer Variablendefinition der Typ, so wird er aus dem Ausdruck hergeleitet. Für externe Variablen muss er dann ebenso wie der Wert zur Laufzeit übergeben werden.

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>