XQuery / XQuery: concat, union, intersect, except

XQuery: concat, union, intersect, except

XQuery: concat, union, intersect, except

➪ Ebenfalls zum Vergleich gegenüber XSL 2.0 finden Sie noch die XQuery-Syntax für Sequenzverkettungen, union, intersect und except.

Auf dieser Seite:

Beachten Sie die unterschiedliche Definition der Variablen in Form von node()+ und node()*. Analog zur DTD-Syntax definiert + hier eine Nodelist mit mindestens einem Item; * bedeutet, dass die Itemlist auch leer sein kann. node()? würde alternativ 0 oder 1 Item erlauben, node() würde exakt 1 Item erfordern.

Die globale Variable $seq1 ist eine Verkettung (Komma-Operator!) der Elemente //Ort[1]/name und //Ort[2]/name. $seq2 ist eine analoge Verkettung der Elemente //Ort[2]/name und //Ort[3]/name.


declare variable  $seq1       
 as node()+ := (//Ort[1]/name, //Ort[2]/name);
declare variable  $seq2       
 as node()+ := (//Ort[2]/name, //Ort[3]/name);
declare variable  $concat12   
 as node()+ := ($seq1, $seq2);
declare variable  $union12    
 as node()+ := $seq1 union $seq2;
declare variable  $intersect12
 as node()* := $seq1 intersect $seq2;
declare variable  $except12   
 as node()* := $seq1 except $seq2;

concat

Die globale Variable $concat12 ist nunmehr eine Verkettung der Einzelsequenzen $seq1 und $seq2.


<root>{
for $x in $concat12 return $x
}</root>

Entsprechend fällt das Ergebnis aus: "Darmstadt" erscheint doppelt, weil es sowohl in $seq1 als auch in $seq2 auftaucht.


<root>
  <name>Neustadt</name>
  <name>Darmstadt</name>
  <name>Darmstadt</name>
  <name>Kapstadt</name>
</root>

union

Die globale Variable $union12 ist eine Vereinigung der Einzelsequenzen $seq1 und $seq2.


<root>{
for $x in $union12 return $x
}</root>

Im Gegensatz zu concat erscheint "Darmstadt" hier nur einmal, weil durch die union Doppelauftritte vermieden werden.


<root>
  <name>Neustadt</name>
  <name>Darmstadt</name>
  <name>Kapstadt</name>
</root>

intersect

Die globale Variable $intersect12 ist nunmehr eine Schnittmenge der Einzelsequenzen $seq1 und $seq2.


<root>{
for $x in $intersect12 return $x
}</root>

Da nur //Ort[2]/name in beiden Sequenzen $seq1 und $seq2 gemeinsam auftaucht, wird auch nur dessen Information "Darmstadt" gelistet.


<root>
  <name>Darmstadt</name>
</root>

except

Die globale Variable $except12 ist nunmehr eine Ausschlussmenge "A ohne B" der Einzelsequenzen $seq1 und $seq2.


<root>{
  for $x in $except12 return $x
}</root>

Da //Ort[2]/name auch Bestandteil der Sequenz $seq2 ist, ergibt $seq1 ohne $seq2 das Resultat //Ort[1]/name, also "Neustadt".


<root>
  <name>Neustadt</name>
</root>

wg / 15. September 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XQuery12.html