Das Modulkonzept von XQuery
Ein XQuery-Modul ist ein Stück XQuery-Code. Es besteht aus Prolog-Anteilen, wie sie im Folgenden beschrieben werden. Wenn es außerdem eine Anfrage enthält, heißt es Hauptmodul, anderenfalls Bibliotheksmodul. Bibliotheksmodule können nicht für sich selbst ausgewertet werden und müssen mit einer Moduldeklaration beginnen:
ModuleDecl | ::= | module namespace NCName = StringLiteral; |
Mit dieser Moduldeklaration wird ein Namensraum definiert, dem alle aus dem Modul exportierten Funktionen und Variablen angehören. Ebenso wird ein Namensraumpräfix definiert, das bei allen Definitionen von zu exportierenden Funktionen und Variablen in dem Modul verwendet werden muss, zum Beispiel das Präfix math bei folgender Moduldeklaration:
module namespace math = "http://example.org/math-functions";
Ein Hauptmodul darf keine Moduldeklaration enthalten. Eine Anfrage kann nur genau ein Hauptmodul haben, so dass es nicht möglich ist, mit XQuery-Mitteln mehrere Anfragen zusammenzufassen. Haupt- und Bibliotheksmodule können mit einer Versionsangabe beginnen:
xquery version "1.0";
Da es momentan nur die Version 1.0 gibt, ist diese Angabe nicht weiter von Belang. Darüber hinaus ist anzumerken, dass ein Modul ein anderes Modul importieren und dabei gleichzeitig ein Namensraumpräfix für den Namensraum des Moduls definieren kann:
ModuleImport | ::= | import module (namespace NCName =)? StringLiteral (at StringLiteral)? ; |
Hinter dem Schlüsselwort at kann eine Stelle definiert sein, an welcher das Modul gefunden werden kann; zum Beispiel:
import module namespace m = "http://example.org/math-functions" at "C:\XQueryModules\math.xqm";
Diese Anweisung kann jedoch von einer XQuery-Implementierung ignoriert werden, woraus folgt, dass es pro Namensraum nur ein einziges Modul geben kann. Wie man am Beispiel sieht, kann das beim Import definierte Präfix von dem Präfix abweichen, welches im Modul selbst für den Namensraum verwendet wird.
Modulimporte sind nicht transitiv. Das bedeutet, dass nur direkt im importierten Modul definierte Funktionen verfügbar sind, nicht die von diesem importierten Funktionen. Definitionen können auch nicht überlagert werden: Es ist ein Fehler, wenn ein bereits definierter Funktions- oder Variablenname nochmals importiert wird.
Beim Import eines Moduls muss darauf geachtet werden, dass alle Typen, die zum Beispiel von importierten Funktionen verwendet werden, auch verfügbar sind. Gegebenenfalls müssen die entsprechenden Schemata ebenfalls importiert werden.
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |