Was ist XQuery? / XQuery: Element-Konstruktor

XQuery: Element-Konstruktor

XQuery: Element-Konstruktor

Zur effizienten Speicherung sehr zahlreicher XML-Dokumente bieten sich sowohl native XML-Datenbanken als auch herkömmliche SQL-Datenbanken an, die das Abspeichern als XML-Dokument ermöglichen. Zur Auswertung der dort gelisteten XML-Dokumente innerhalb dieser Technologien kommt häufig XQuery zum Einsatz.

In der Programmierpraxis mit XQuery kann es vorkommen, daß Elementnamen zur Laufzeit generiert werden müssen.

Das folgende Beispiel berechnet in der temporären Variable "$schnitt" einen Durchschnitt sämtlicher "//Kauf/Gesamt"-Nodes. In der folgenden Logik wird jeder einzelne relevante "Kauf/Gesamt"-Node mit diesem "$schnitt" abgeglichen. Ist der Betrag größer als "$schnitt", so wird ein Element "mehr" generiert; andernfalls "weniger". Hierbei kommt der Element-Konstruktor zum Einsatz.


let $input   := doc("C:/wg/Ort_Elemente.xml")
let $schnitt := avg($input//Kauf/Gesamt)
return
<erg schnitt="{$schnitt}">
  {
    for $b in $input/Orte/Ort[1]/Mensch[position() < 3]
    return
      <kunde NN="{$b/name/text()}" 
             VN="{$b/vorname/text()}" 
             WO="{$b/../name/text()}">
          {
            for $ges in $b/Kauf/Gesamt
            return
              if (xs:decimal($ges) > $schnitt)
              then
                element mehr {$ges/text()}
              else
                element weniger {$ges/text()}
          }
      </kunde>
  }
</erg>

Im Ergebnis finden wir noch Einzelwerte wir "<weniger>181.92999999999998</weniger>", die uns stutzen lassen. Bevor wir das Thema Typecasting bemühen, müssen wir feststellen, daß der Wert im XML Input Dokument genau so definiert ist.


<erg schnitt="312.81">
  <kunde NN="Holzflos" 
         VN="Hugo" 
         WO="Neustadt">
    <weniger>38.97</weniger>
    <weniger>116.91</weniger>
    <weniger>103.92</weniger>
    <weniger>233.91</weniger>
    <weniger>233.91</weniger>
    <weniger>207.92</weniger>
    <weniger>207.92</weniger>
    <mehr>1209.84</mehr>
    <mehr>1209.84</mehr>
  </kunde>
  <kunde NN="Nixlos" 
         VN="Nicole" 
         WO="Neustadt">
    <weniger>207.92</weniger>
    <weniger>181.92999999999998</weniger>
    <weniger>155.94</weniger>
    <weniger>129.95</weniger>
    <weniger>103.96</weniger>
    <weniger>103.96</weniger>
    <weniger>77.97</weniger>
  </kunde>
</erg>

wg / 4. Januar 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

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

www.wilfried-grupe.de/XQuery10.html