Was ist XQuery? / FLOWR

FLOWR

FLOWR

➪ XQuery bietet komfortable Unterstützung für erweiterte Bedingungsprüfungen (every/some mit satisfies) sowie präzise Typdefinitionen auf der Basis simpler XML-Schema-Datentypen (castable, xs:decimal, xs:integer etc.).

Das folgende XQuery-Script prüft zunächst, ob gezielt adressierte Werte als xs:decimal gecastet werden können. In diesem Fall wird ein for-Loop gestartet, in dem 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 muss daher jeder Einzelwert als xs:decimal gecastet werden: sum($x/Kauf/xs:decimal(Gesamt)).

An diesem Beispiel sehen Sie 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 Sie das generierte <ROOT>; andernfalls hätten Sie <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>

wg / 14. Juli 2018



Fragen? Anmerkungen? Tips?

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