Home
Über mich
Veröffentlichungen

XML XML-Schema XPath XSL-T XSL-FO XQuery XProc SVG

XQuery / XQuery: Generierung von 3erGruppen

XQuery: Generierung von 3erGruppen

XQuery: Generierung von 3erGruppen

➪ Eine etwas komplexere XQuery-Aufgabe ist die nach Einkommen absteigend sortierte, in Dreiergruppen angeordnete und nummerierte Ausgabe von Vorname und Wohnort aller Menschen im Quelldokument.

$allemenschen ist die Liste aller Menschen im Quelldokument mit Vorname und Wohnort, nach Gehalt absteigend sortiert (Casting als xs:decimal), noch ohne Position.

$numallemenschen fügt der sortierten Liste $allemenschen eine Nummerierung hinzu.

$jederdritte generiert mit dem WHERE eine neue Liste mit jedem dritten Element aus $numallemenschen. Dies ist Ausgangsbasis für eine Iteration über jeden Node in $jederdritte, jeweils wird ein Element gruppe mit einem Attribut nr erzeugt. Innerhalb dieser Gruppe wird der vorletzte, der vorhergehende und der aktuelle Node adressiert.


<root>{
let $allemenschen 
    as node()+ := (for $x in /Orte/Ort/Mensch 
    order by xs:decimal($x/Gehalt) descending 
    return <m vn="{$x/vorname/text()}"  
    ort="{$x/../name/text()}"/>)
let $numallemenschen 
    as node()+ := (for $x at $p in $allemenschen 
    return <m nr="{$p}" 
    vn="{$x/@vn}"  
    ort="{$x/@ort}"/>)
let $jederdritte 
    as node()+ := (for $m at $p in 
    $numallemenschen where $p mod 3 = 1 
    return $m)
for $x at $y in $jederdritte return 
<gruppe nr="{$y}">
<m1 nr="{$numallemenschen[$y*3-2]/@nr}" 
    vn="{$numallemenschen[$y*3-2]/@vn}" 
    ort="{$numallemenschen[$y*3-2]/@ort}"/>
<m2 nr="{$numallemenschen[$y*3-1]/@nr}" 
    vn="{$numallemenschen[$y*3-1]/@vn}" 
    ort="{$numallemenschen[$y*3-1]/@ort}"/>
<m3 nr="{$numallemenschen[$y*3]/@nr}" 
    vn="{$numallemenschen[$y*3]/@vn}" 
    ort="{$numallemenschen[$y*3]/@ort}"/>
</gruppe>
}
</root>

Das Ergebnis:


<root>
  <gruppe nr="1">
    <m1 nr="1" vn="Willi" ort="Kapstadt"/>
    <m2 nr="2" vn="Stefan" ort="Neustadt"/>
    <m3 nr="3" vn="Betty" ort="Kapstadt"/>
  </gruppe>
  <gruppe nr="2">
    <m1 nr="4" vn="Nicole" ort="Neustadt"/>
    <m2 nr="5" vn="Siggi" ort="Neustadt"/>
    <m3 nr="6" vn="Simone" ort="Darmstadt"/>
  </gruppe>
  <gruppe nr="3">
    <m1 nr="7" vn="Werner" ort="Darmstadt"/>
    <m2 nr="8" vn="Heini" ort="Neustadt"/>
    <m3 nr="9" vn="Horst" ort="Darmstadt"/>
  </gruppe>
  <gruppe nr="4">
    <m1 nr="10" vn="Karl" ort="Darmstadt"/>
    <m2 nr="11" vn="Lotte" ort="Kapstadt"/>
    <m3 nr="12" vn="Ludwig" ort="Darmstadt"/>
  </gruppe>
  <gruppe nr="5">
    <m1 nr="13" vn="Rudi" ort="Darmstadt"/>
    <m2 nr="14" vn="Stefan" ort="Neustadt"/>
    <m3 nr="15" vn="Susi" ort="Kapstadt"/>
  </gruppe>
  <gruppe nr="6">
    <m1 nr="16" vn="Hugo" ort="Neustadt"/>
    <m2 nr="17" vn="Rita" ort="Kapstadt"/>
    <m3 nr="18" vn="Martin" ort="Kapstadt"/>
  </gruppe>
  <gruppe nr="7">
    <m1 nr="19" vn="Liane" ort="Kapstadt"/>
    <m2 nr="" vn="" ort=""/>
    <m3 nr="" vn="" ort=""/>
  </gruppe>
</root>

wg / 2. Mai 2021



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/XQuery13.html