ELEMENT function (description?, implementation+) ATTRIBUTE name string title string
Attribut | Typ | Pflicht | Default | Beschreibung |
---|---|---|---|---|
name | string | yes | n/a | Name der Funktion. Sollte kleingeschrieben und ein valider XML-, SQL-Bezeichner sein. |
title | string | - | n/a | Title ist ein Beschriftungstext, der in der Dokumentation des Objektes angezeigt werden sollte. |
Eine nutzerdefinierte Funktion mit dem angegebenen Namen. Die Funktion darf maximal eine Implementierung für jedes unterstützte DMBS geben.
ELEMENT implementation (param*, return?, code) ATTRIBUTE dbms string language string
Attribut | Typ | Pflicht | Default | Beschreibung |
---|---|---|---|---|
dbms | string | - | generic | Der Name des Ziel-DBMS. Der Wert "generic" bedeutet, dass die Definition für jedes DBMS zutreffend ist. Gewöhnlich wird das als Rückfalloption für DBMS verwendet, an welche Sie entweder beim Erstellen der Datenbankstruktur noch nicht gedacht haben, oder welche das fragliche Feature nicht unterstützen. |
language | string | - | n/a | Die vorgesehene Programmiersprache. Dies betrifft nur DBMS, welche mehr als eine Sprache unterstützen. |
Die Implementierung definiert die Funktionssignatur und den Quellcode. Die Anzahl der Parameter muss in jedes DBMS (und jedes Implementation-Element) identisch sein.
Falls das Attribut dbms auf "generic" gesetzt ist, kann die XDDL-Implementierung entscheiden, ob die generische Definition der Funktion kompatibel mit einem bestimmten DBMS ist. Falls diese entscheidet, dass die Definition nicht kompatibel ist, kann sie versuchen die Funktion zu simulieren. Für diesen Fall kann die Implementierung die erforderliche Syntax für die Unterelemente "code", "param" und "return" selbst festlegen. Falls die Definition der erforderlichen Syntax nicht entspricht, kann die XDDL-Implementierung einen Fehler melden.
Beachten Sie, dass das Attribut "language" DBMS-abhängig ist. Die meisten DBMS sollten zumindest die Sprache "SQL" unterstützen, während andere auch "Java", "C" oder auch mehr unterstützen können.
Wenn keine Sprache gegeben wird, wird die default Sprache verwendet. Beachten Sie, dass die Implementierung nicht prüfen muss, ob die angegebene Sprache vom angegebenen DBMS unterstützt wird.
Für simulierte Funktionen muss das Attribut language leer sein.
ELEMENT param EMPTY ATTRIBUTE name string type string mode string
Attribut | Typ | Pflicht | Default | Beschreibung |
---|---|---|---|---|
name | string | yes | n/a | eindeutige Parameterbezeichnung |
type | string | yes | n/a | DBMS-abhängiger Datentyp |
mode | string | - | in | Das Attribute "mode" identifiziert das Element als
|
Eine Parameterdefinition als ein Teil der Funktionssignatur. Das Attribut "mode" definiert das Verhalten des Parameters. Der Typ des Parameters ist vom DBMS abhängig.
Beispiel:
<function name="foo"> <implementation> <param name="p1" type="string" mode="in"/> <param name="p2" type="float" mode="inout"/> <param name="p3" type="int" mode="out"/> <return>int</return> <code>...</code> </implementation> </function> Kann interpretiert werden als: int foo ( string $p1, float &$p2, int &$p3 = null ) { ... }
Beachten Sie, dass manche DBMS nur Eingabeparameter (Wertparameter) unterstützen. In diesem Fall muss das Attribut mode den Wert "in" haben. Die Implementierung kann einen Fehler melden, wenn eine nicht unterstützte Definition gefunden wird.
ELEMENT return (#PCDATA)
Der durch die Funktion zurückgegebene Datentyp. Diese Einstellung ist DBMS-abhängig.
Wenn kein Rückgabewert definiert, oder die Angabe leer ist, so wird der Defaultwert "void" verwendet, was bedeutet, dass die Funktion keinen Wert zurückgibt. Falls die Funktion mehr als einen Wert zurückgeben muss, sollten stattdessen Ausgabeparameter (mode=out) verwendet werden.
Beachten Sie, dass in MySQL Funktionen, die keinen Rückgabewert haben, "Methoden" genannt werden.
ELEMENT code (#PCDATA)
Der Funktionsrumpf. Die Syntax des Inhaltes hängt von den Parametern für DBMS und Programmiersprache ab. Wenn das DBMS auf "generic" gesetzt ist, dann wird dieser Code durch die Server-Anwendung ausgeführt. Für diesen Fall kann die Implementierung die erforderliche Syntax selbst festlegen. Es wird empfohlen, dass das Element code darauf beschränkt wird, den Namen einer Funktion anzugeben, welche die Implementierung aufrufen kann. Alle Eingabeparameter werden an diese Funktion weitergeleitet. Beachten Sie, dass generische Funktionen innerhalb von SQL-Anweisungen nicht verwendet werden können, weil diese nicht vom DBMS ausgeführt werden.
Thomas Meyer, www.yanaframework.net