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

Äquivalente Operatoren

Jeder arithmetische Ausdruck wird durch entsprechende Operatoren, die im Sinne einer Implementierung der arithmetischen Ausdrücke für entsprechende Datentypen der Operanden gesehen werden können, begleitet. Anders als Funktionen (Namensraum fn) existieren Operatoren (Namensraum op) in der XQuery-Spezifikation ausschließlich zur Vervollständigung des theoretischen Datenmodells und sind in der expliziten Form nicht direkt von der Anwendung benutzbar.

Die folgende Tabelle listet die für arithmetische Ausdrücke auf numerischen Datentypen äquivalenten Operatoren auf. So könnte das vorherige Beispiel, in dem die durchschnittliche Zahl verbrauchter Gegenstände ermittelt wird, intern wie folgt realisiert werden:

SignaturBeschreibung
op:numeric-[add| subtract|
multiply|
divide|
mod](

$arg1 as numeric,
$arg2 as numeric)
as numeric
äquivalent zu den arithmetischen Ausdrücken:
· $arg1 + $arg2
· $arg1 - $arg2
· $arg1 * $arg2
· $arg1 div $arg2
· $arg1 mod $arg2
op:numeric-integer-divide(
$arg1 as xs:integer,
$arg2 as xs:integer)
as xs:integer
äquivalent zum arithmetischen Ausdruck:
· $arg1 idiv $arg2
op:numeric-unary-[plus|minus](
$arg as numeric)
as numeric
äquivalent zu den arithmetischen Ausdrücken:
· +$arg
· –$arg
op:numeric-[equal|
less-than|
greater-than](

$arg1 as numeric,
$arg2 as numeric)
as xs:boolean
äquivalent zu den arithmetischen Ausdrücken:
· $arg1 = $arg2
· $arg1 lt $arg2 bzw. $arg2 ge $arg1
· $arg1 gt $arg2 bzw. $arg2 le $arg1

Tab. Übersicht von Operatoren auf numerische Werte

...
return
...
<Anzahl_div>{ op:numeric-divide($a,$b) }</Anzahl_div>
<Anzahl>
<Anzahl_idiv>{op:numeric-integer-divide($a,$b)}</Anzahl_idiv>
<Anzahl_mod> {op:numeric-mod($a,$b)}</Anzahl_mod>
</Anzahl>
...

Als Voraussetzung für die Äquivalenz bei der Anwendung dieser Operatoren müssen $a und $b jeweils einen numerischen Datentyp besitzen. In analoger Weise existiert ein entsprechender Ersatz für die Subtraktion der beiden Zeitangaben zur Ermittlung der Behandlungsdauer. Ohne auf die Vielzahl der Funktionen im Kontext der Zeit- und Kalenderfunktionalität eingehen zu wollen, könnte der entsprechende FLWOR-Ausdruck innerhalb der fn:sum()-Funktion wie folgt intern realisiert werden:

...
for $x in $p//Operation
return
fn:subtract-dateTimes-yielding-dayTimeDuration($x/Ende,
$x/Beginn)
...

 

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

<< zurückvor >>