Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


FLOWR

Das folgende Script prüft zunächst, ob alle //Mensch/Gehalt-Werte als decimal gecastet werden können. In diesem Fall wird ein for-Loop gestartet, innerhalb dessen lokale Variable deklariert werden; das im Arbeitsspeicher generierte Ergebnis wird sortiert und gefiltert, bevor die Einzelinformationen sichtbar werden.

Bei der Definition von $ausg wird normalerweise jeder Einzelwert von //Kauf/Gesamt als double gecastet. Durch die Typzuweisung von xs:decimal müssen auch alle Einzelwerte als xs:decimal gecastet werden. Ein Casting xs:decimal (//Kauf/Gesamt) würde jedoch einen Fehler hervorrufen: "A sequence of more than one item ...". Statt der kompletten Nodeliste muß daher jeder Einzelwert als xs:decimal gecastet werden: "sum($x/Kauf/xs:decimal(Gesamt))".

An diesem Beispiel sehen wir das FLOWR-Prinzip von XQuery: For - Let - Order by - Where - Return, das als Orientierung für die Implementierung dienen kann.

if (every $yy in /Orte/Ort/Mensch
  satisfies $yy/Gehalt castable as xs:decimal) then
  <ROOT>
  {
    for $x in /Orte/Ort[3]/Mensch
    let $ausg 
        as xs:decimal := sum($x/Kauf/xs:decimal(Gesamt))
    let $ueberschuss 
        as xs:decimal := xs:decimal($x/Gehalt) - $ausg
    order by $ueberschuss descending
    where $x/Gehalt > $ausg and $x/Gehalt < 1000
    return
    <Person>
      {$x/id}
      <Vorname>{$x/vorname/text()}</Vorname>
      <Nachname>{$x/name/text()}</Nachname>
      <Wohnort>{$x/parent::*/name/text()}</Wohnort>
      <EK>{$x/Gehalt/text()}</EK>
      <ausgaben>{$ausg}</ausgaben>
      <ueberschuss>{$ueberschuss}</ueberschuss>
    </Person>
  }
  </ROOT>
else
  <NIX/>

Da die "if"-Bedingung ein "true()" ergeben hat, lesen wir das generierte "<ROOT>"; andernfalls hätte wir "<NIX/>" gefunden.

<ROOT>
  <Person>
    <id>13</id>
    <Vorname>Martin</Vorname>
    <Nachname>Muehelos</Nachname>
    <Wohnort>Kapstadt</Wohnort>
    <EK>222</EK>
    <ausgaben>142.89</ausgaben>
    <ueberschuss>79.11</ueberschuss>
  </Person>
  <Person>
    <id>10</id>
    <Vorname>Rita</Vorname>
    <Nachname>Ruhelos</Nachname>
    <Wohnort>Kapstadt</Wohnort>
    <EK>234</EK>
    <ausgaben>203.19</ausgaben>
    <ueberschuss>30.81</ueberschuss>
  </Person>
</ROOT>

qrpic/XQuery9.jpg

wg / 14. Oktober 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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