Was ist XQuery? / XQuery: Arbeiten mit Namespaces und Funktionen

XQuery: Arbeiten mit Namespaces und Funktionen

XQuery: Arbeiten mit Namespaces und Funktionen

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.

Es kommt häufiger vor, daß aus separaten XML Dateien gezielt Werte ausgelesen und in andere Logiken übernommen werden müssen.

Zu diesem Zweck habe ich hier ein XQuery-Beispiel, das neben einer speziellen Function auch die dazugehörigen Variablen und Namespaces enthält.


<?xml version="1.0" encoding="ISO-8859-1"?>
<Listen>
 <Liste Listnr="1">
  <Wert Key="2">3</Wert>
  <Wert Key="5">15</Wert>
  <Wert Key="15">450</Wert>
  <Default>0</Default>
 </Liste>
</Listen>

Die Funktion "wg:getValue" erhält zwei xs:string-Parameter: "$listnumber" und "$key". Sie liest die externe XML-Datei "$wg:externList" ein, prüft dort, ob das Attribut "Listnr" mit dem Parameter "$listnumber" und ob ein Attribut "Key" mit dem Parameter "$key" übereinstimmen. Falls ja, wird der jeweilige Wert ermittelt; falls nein, wird auf "Error" oder "Default" geprüft.


(: definiere einen Namespace :)
declare namespace wg="http://www.wilfried-grupe.de/xquery/functions";
(: definiere eine xs:string - Variable :)
declare variable $wg:document-uri 
as xs:string := "C:/wg/Listen.xml";
(: definiere eine Variable, 
die ein komplettes XML Dokument einliest :)
declare variable $wg:externList 
as document-node() := doc($wg:document-uri);
(: definiere eine Function, 
die zwei xs:string-Parameter enthaelt 
und aus $wg:externList Werte einliest :)
declare function wg:getValue(
                 $listnumber as xs:string, 
                 $key as xs:string) {
if (exists( $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]
                 /Wert[@Key = $key]) )
then (
        for $p in $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]
                 /Wert[@Key = $key]
        return $p/text()
)
else if (exists( $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]/Error) )
then (
        for $p in $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]/Error
        return $p/text()
)
else (
        for $p in $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]/Default
        return $p/text()
)
};
<wg:erg>
{wg:getValue("1", "99")}
</wg:erg>

Der Aufruf "{wg:getValue("1", "99")}" ergibt "0", weil kein "Key"-Attribut den Wert "99" besitzt:


<wg:erg 
   xmlns:wg="http://www.wilfried-grupe.de/xquery/functions"
   >0</wg: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/XQuery14.html