| |
name(E3) = QNameValue(null, "autor", Ref(Def_QName))
children(E3) = [ StringValue(Abiteboul, Ref(Def_string)) ]
type(E3) = Ref(Def_string)
parent(E3) = E1
Dabei ist D1 ein DocumentNode, E1, E2, E3 sind ElementNodes und A1 und A2 sind AttributNodes.
2.2.3 Die XML Query Algebra
Die XML Query Algebra bildet zusammen mit dem Datenmodell die formale Basis einer XML
Anfragesprache. Es ist auf dem Gebiet der Datenbanken durchaus üblich Anfragesprachen durch eine
Algebra zu beschreiben (so z.B. bei SQL oder OQL). Damit bezweckt man zwei Dinge:
1. die Semantik der Anfragesprache ist klar definiert,
2. die Algebra kann zur Optimierung von Anfragen herangezogen werden.
Daher wurde auch die Erstellung der XML Query Algebra stark von den bestehenden Systemen SQL
und OQL inspiriert. Aber auch andere Konzepte wie unter anderem Quilt, X ML-QL, XPath, XQL und
XSLT wurden berücksichtigt. Auf einige dieser wird daher später noch genauer eingegangen.
Es ist des weiteren üblich, daß die Anfragesprache bzw. die Algebra, die die Grundlage bildet,
typisiert ist. Typen können benutzt werden, um während der Laufzeit schon Fehler zu entdecken. Sind
die Typen des Inputs und die zu erwartenden Typen des Outputs bekannt, so überprüft das
Typensystem der Algebra, ob der Typ des Output mit dem zu erwartenden übereinstimmt
Im folgenden sollen die Merkmale der XML Query Algebra dargestellt werden. Die Spezifikation der
XML Query Arbeitsgruppe ist bisher aber nur eine Arbeitsgrundlage, und unterliegt ständig möglichen
Änderungen [FFM+01].
Semantik der Algebra:
Die Semantik der Algebra ist aufgeteilt in eine statische Semantik, welche Regeln beschreibt die
Rückschlüsse auf die Typen liefert und eine dynamische Semantik, welche Regeln beschreibt, die
Rückschlüsse auf die Werte liefert.
Statische Semantik:
Die Ausdrücke der Algebra werden Typen zugeordnet und spezifiziert unter welchen Bedingungen die
Ausdrücke richtig typisiert sind.
Notation anhand eines Beispiels:
|- Data1: t1 |- Data2: t2
|- (Data1, Data2): (t1, t2)
Wobei gilt: wenn alle Aussagen oberhalb der Linie gelten, so gelten die Gesetze unterhalb der Linie
ebenso.
|- Data: t wird wie folgt gelesen: In der leeren Umgebung hat der Wert Data den Typ t
¡ |- Exp : t heisst, dass in der Umgebung ¡ der Ausdruck Exp den Typ t hat.
Beispiel: if then else (Selektion)
In der Algebra sieht dies wie folgt aus:
¡ |- Exp1: Boolean ¡ |- Exp2: t2 ¡ |- Exp3: t3
¡ |- if Exp1 then Exp2 else Exp3: (t2 | t3)
Hiermit soll verdeutlicht werden, dass Exp1 vom Typ boolean sein muss, Exp2 und Exp3 vom Typ t2,
bzw. t3 und das das Ergebnis vom Typ t2 oder t3 ist.
10
|  |
|
| |
|
|