Was ist 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, unions, intersects und excepts.

Beachten Sie die unterschiedliche Definition der Variablen in Form von node()+ und node()*. Analog zur DTD-Syntax definiert + hier eine Nodelist mit mind. einem Item; * bedeutet, daß 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;

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>

Die globale Variable $union12 ist nunmehr 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>

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>

Die globale Variable $except12 ist nunmehr eine Ausschlußmenge "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 / 22. März 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







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