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

Knotenzugriffsfunktionen

Ein Teil der Sequenztypsyntax kann auch in Pfadausdrücken verwendet werden, um aus der Sequenz der Knoten, die durch einen Pfadausdruck adressiert werden, einige Knoten auszufiltern. Hierzu steht der Typ node() zur Verfügung sowie alle spezifischeren Typen gemäß der Abbildung "Hierarchie von Sequenztypen". Die Regeln der Auswahl entsprechen den oben vorgestellten. Es besteht also ein Unterschied zwischen dem Ausdruck //Angestellte und dem Ausdruck //element(Angestellte). Der erste Ausdruck sucht ein Element namens Angestellte, der zweite ein Element aus der Ersetzungsgruppe des in einem bekannten Schema definierten Elementes Angestellte.

Operationen auf Sequenzen aus Knoten

Sequenzen von Knoten kann man miteinander kombinieren, indem man den Durchschnitt, die Vereinigung oder die Differenz bildet. Sequenzen sind keine Mengen, aber für diese Operationen werden sie temporär als Menge betrachtet. Duplikate (also identische Knoten) unter den Einträgen werden eliminiert, dann werden die entsprechenden Mengenoperationen durchgeführt. Das Ergebnis wird in der Dokumentreihenfolge geliefert. Die Syntax für diese Operatoren lautet wie folgt:

UnionExpr::=IntersectExceptExprunionIntersectExceptExpr
IntersectExceptExpr::=ValueExpr(intersect | except)ValueExpr

Anstelle des union-Operators darf auch ein senkrechter Strich »|« stehen. Im folgenden Beispiel wird die Variable $a an alle Elementknoten des Namens A im Beispieldokument gebunden, die Variable $b an alle Elementknoten des Namens B, aber in umgekehrter Reihenfolge. Der Ausdruck

let $doc := document {<Wurzel>
<A>1</A>
<B>2</B>
<A>3</A>
<B>4</B>
</Wurzel>}
let $a := $doc//A
let $b := fn:reverse($doc//B)
return
(<A-Sequenz>{$a}</A-Sequenz>,
<B-Sequenz>{$b}</B-Sequenz>,
<Vereinigung>{$a | $b}</Vereinigung>,
<Differenz>{$b except $a}</Differenz>,
<Durchschnitt>{$b intersect $b}</Durchschnitt>)

hat als Ergebnis

<A-Sequenz> <A>1</A> <A>3</A></A-Sequenz>
<B-Sequenz> <B>4</B> <B>2</B></B-Sequenz>
<Vereinigung> <A>1</A><B>2</B><A>3</A><B>4</B></Vereinigung>
<Differenz><B>2</B> <B>4</B></Differenz>
<Durchschnitt><B>2</B><B>4</B></Durchschnitt>

Man erkennt, dass die Ergebnisse der Sequenzoperationen union, intersect und except immer nach der Dokumentordnung sortiert sind.

Als Anmerkung sei an dieser Stelle darauf hingewiesen, dass diese Operatoren nicht für beliebige Sequenzen, sondern nur für solche Sequenzen definiert sind, die nur aus Knoten bestehen.

 

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

<< zurückvor >>