• Keine Ergebnisse gefunden

XML-Anfragesprachen (Schwerpunkt XQuery)

N/A
N/A
Protected

Academic year: 2022

Aktie "XML-Anfragesprachen (Schwerpunkt XQuery)"

Copied!
52
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

(Schwerpunkt XQuery)

(2)

Übersicht

Anforderungen an XML-Anfragesprachen

Stand der Entwicklung

XPath

Anfragesprache XQuery

Weitere Anfragesprachen (XML-QL, XQL)

XML und Änderungsoperationen

XML und SQL

Ausblick

(3)

Allgemeine Anforderungen

Ad-hoc-Formulierung

Anfragen direkt, ohne Erstellung kompletter Programme

Deskriptivität

Umschreiben des gewünschten Ergebnisses, nicht Konstruktionsweg

Kompaktheit

kompakte Notation, verwendbar in URLs

Mengenorientiertheit

Anfragen auf Mengen von Objekten und Dokumenten

Nicht nur auf einzelnen Objekten und XML- Dokumenten oder –fragmenten operieren

(4)

Allgemeine Anforderungen (2)

Adäquatheit

alle Konstruktoren des zugrundeliegenden Modells unterstützt

Orthogonalität

Sprachkonstrukte uneingeschränkt miteinander kombinieren

Abgeschlossenheit

Resultat (XML) kann wieder als Eingabe (XML) einer nächsten Anfrage dienen

Vollständigkeit

gemäß Datenmodell gespeicherte Informationen

(5)

Allgemeine Anforderungen (3)

Optimierbarkeit

kleine Menge an Grundoperationen mit Optimierungsregeln

Effizienz

jede Operation wird durch Algorithmus effizient umgesetzt

Sicherheit

syntaktisch korrekte Query liefert endliche Menge,

Anfrage terminiert

Eingeschränktheit

keine vollständige Programmiersprache

 Garantiert Optimierbarkeit, Effizienz und Sicherheit

(6)

XML-Anforderungen (1)

Einbettung

Anfragen in XML einbetten oder als XML formulieren

XML-Fragmente in Anfrage  fester Teil in Ergebnis

Server-Verarbeitung

Geeignet für Server-side Processing  erfordert Abgeschlossenheit, Kontextfreiheit

Ordnungserhaltung (Order Preserving)

Abfolge von Elementen, Schachtelungsreihenfolge

Vor allem bei mixed Content

Nicht für alle Anwendungen benötigt (mögliches Abschalten aus Effizienzgründen)

Probleme bei relationaler Speicherung

(7)

XML-Anforderungen (2)

Hyperlinks

Ausnutzen und Verfolgen von Links in ( ID/IDREF ) und zwischen ( XLink, XPointer ) Dokumenten

Flexible Typen

Verarbeiten von unbekannten oder wechselnden Typen

Mechanismen zur expliziten Typkonvertierung

Unterstützung eines erweiterbaren und robusten (fehlertoleranten) Typkonzepts

Unterstützung des Zugriffs auf Metadaten und Schemainformationen (gleiche Mittel)

Berücksichtigung von Namensräumen

Protokoll-Unabhängigkeit

(8)

Grundoperationen

Selektion (anhand von Inhalt, Struktur, Attributwert)

Extraktion und Reduktion (vergleichbar Projektion)

Kombination (Join)

Restrukturierung von Elementen

Aggregation (z.B. arithmetische Funktionen)

Gruppierung (Schachtelung bzw. Entschachtelung von Elementstrukturen)

Volltextoperationen (literal bzw. Phrasen-, Stammformsuche, etc.)

Datenmanipulation

über APIs wie DOM, SAX

(9)

Stand der Entwicklung

(10)

XPath 1.0 - Einführung

W3C Recommendation vom Nov 1999

siehe: http://www.w3.org/TR/xpath

Grundlage für XQuery, XSLT, weitere Standards

geht von abstrakter Baumstruktur des XML- Dokuments aus

dient zur Adressierung von Teilen eines Dokumentes

kompakte Nicht-XML-Syntax, keine vollständige

QL

(11)

XPath 1.0 - Einführung

Knotenarten

7 Knotenarten auf Basis des XML Information Set – ähnlich zu DOM

Wichtigste: Wurzel, Element, Attribut, Text

Datentypen

atomare Werte: boolean, number, string

Knotenmengen (node-set)

Grundlegendes Konstrukt sind XPath-Ausdrücke

Pfadausdrücke (location paths)

logische und mathematische Verknüpfungen

Funktionsaufrufe

Relativ zu einem Kontext ausgewertet

Keine Variablenbindung

(12)

XPath 1.0 - Pfadausdrücke

XPath-Ausdrücke relativ zu einem Kontext ausgewertet

Extraktion der interessierenden Bestandteile

Selektion von Knotenmengen aufgrund ihrer Struktur und den in ihnen enthaltenen Werten

Formulierung von Bedingungen an diese Knotenmenge

mehrere Steps, Kopplung mit “/“

Schritt (Location Step) axis::node-test[predicate]

axis: Beziehung Kontextknoten u. zu selektierende Knoten

node-test: Knotentyp und Namen des zu sel. Knoten

predicate: Einschränkung best. Elemente durch Prädikate

(13)

Navigationsachsen in XPath

Klettke/Meyer “XML & Datenbanken“

(14)

Einschränken des Knotentyps

- node(): alle Knoten - text(): alle Textknoten - *: alle Elementknoten

- comment(): Kommentarknoten - Angabe eines Knotennamens

Knotentest in XPath

descendant::* alle untergeordneten Elemente des Kontextknotens

child::href alle Elemente vom Typ href attribute::id Attribut id des Kontextknotens

Beispiele

Quelle ebd.

(15)

Prädikate in XPath

Selektionsprädikate

- logische Operatoren (and, or)

- Vergleichsoperatoren ( “<“ , “<=“ , “>“ , “>=“ , “=“ , “!=“ )

- Operationen auf numerischen Werten ( “+“ , “-“ , “*“ , div, mod ) - Vereinigung von Knotenmenge ( “|“ )

- Ändern der Auswertreihenfolge durch Klammerung von Teilausdrücke mit “(“ und “)“ )

Beispiele

 /descendant-or-self::node()/album/song[2]

 //album/song[last()-1]/title

//hotel[zimmertyp/attribute::typ = ‘Doppelzimmer’]

/hotel/adresse/ort[@Name=“Leipzig“]

(16)

XQuery

Überblick und Datenmodell

Einfache Ausdrücke

FLWOR-Ausdrücke

Erweiterte XQuery-Ausdrücke:

Verbund

Gruppierung

Benutzerdefinierte Funktionen

Erweiterte Konzepte

Modulkonzept

XQuery Prolog

Verarbeitungskonzept

(17)

Sprachüberblick

W3C Recommendation vom Januar 2007 - (siehe:

http://www.w3.org/TR/xquery)

geht aus Quilt hervor (inoffizieller Vorschlag des W3C), basierend auf XPath, beeinflusst durch SQL, XML-QL

Ausdrücke beliebig ineinander schachtelbar

Elementkonstruktoren

Pfadausdrücke zur Selektion (wie XPath)

FLWOR-Ausdrücke (ähnlich SQL - SFW)

datenspezifische Operatoren, standard- und selbstdef.

Funktionen

bedingte Anweisungen, Test von Datentypen, Typumwandlung

Verwendung von Quantoren: every und some

(18)

Datenmodell

Dokument als Baumstruktur (XPath 1.0)

XQuery nutzt XPath 2.0-Standard

Modell basiert auf XPath 1.0 + Erweiterungen

einzelne XML-Dokumente

wohlgeformte Fragmente eines Dokuments

Sequenzen von Dokumenten und Fragmenten als Wert eines XQuery-Ausdrucks

Objekt dieses Datenmodells ist geordnete Menge von Knoten = Sequenz (Aneinanderreihung von atomaren Werten oder Knoten – ohne Schachtelung)

Sequenzen können nicht geschachtelt sein

Duplikate in Sequenz möglich

Elemente einer Sequenz sind sortiert und hinsichtlich Position unterscheidbar

Dualität von Elementen und Sequenz der Länge 1

(19)

Datenmodell (2)

Operationen zur Analyse und Modifikation von Sequenzen

Kommaoperator

(1,<X/>),(3) liefert: (1,<X/>,3)

to-Operator

2 to 5 liefert: (2,3,4,5)

Eliminierung von Duplikaten

fn:distinct-values((2,5,3,7,3,5,5)) liefert: (2,5,3,7)

Datentypen

allgemeinste Form eines Eintrags vom Typ item()

Einfache oder komplexe Datentypen

Sprachkonstrukte aus XML Schema (vgl. Typhierachie)

Atomisierung

XML-Dokument synonym mit zugehöriger Instanz des XQuery- Datenmodells

(20)

Unterschiede zu XPath 1.0

Grunddatentypen auf der Basis von XML Schema Teil 2

XPath 1.0 kennt nur Knotenmengen, boolesche, numerische und Zeichenkettenwerte

XPath 1.0 ist mengenorientiert (ohne Duplikate), XPath 2.0 basiert auf Sequenzen (Duplikate möglich)

Unterstützung von Referenzen und Dokumentkollektionen

Unterscheidung von Wertegleichheit (XPath 1.0) und Knotenidentität

Wesentlich umfangreichere Funktionsbibliothek

Weitere Ausdrucksarten, z.B. Bereichsausdruck

Voranstellen von Variablen oder Funktionsaufrufen vor Pfadausdrücken

(21)

xs:ENTITIES benutzerdefinierte Listentypen und Vereinigun typen

item xdt:anyAtomicType xs:IDREFS

nodexdt:untypedAny

benutzerdefinierte komplexe T pen

xs:anyType xs:anySimpleType nt t ent ing-in- n

xs:NMTOKENS

xdt:untypedAtomic xs:dateTime xs:date xs:time xs:float xs:duration

xs:yearMonthDuration xs:gYear

xs:gYearMonth

xs:decimal

xs:double

xs:dayTimeDuration xs:gMonthDay xs:gDay xs:base64Binary

xs:boolean

xs:gMonth xs:hexBinary xs:anyURI xs:QName xs:NOTATION

xs:string xs:normalizedString xs:token xs:NMTOKEN xs:ENTITY

xs:language xs:Name xs:NCName xs:ID xs:IDREF

xs:long

xs:negativeInteger

xs:nonPositiveInteger

xs:integer xs:int xs:short xs:unsignedLong

xs:nonNegativeInteger

xs:byte xs:unsignedInt xs:unsignedShort xs:unsignedByte xs:positiveInteger

e

(22)

Grundlagen

Konstanten oder Literale

Werte für einfache numerische und Zeichenkettenwerte (in Hochkommas)

Beispiele:

‘Hotel Neptun‘, “12.34“ {-- xs:string --}

123, -24, 0, +7 {-- xs:integer --}

-24.0, 123.45, +.23 {-- xs:decimal --}

-123.5e3, 200e6 {-- xs:double --}

Variablen:

Beispiele:

$name := “Wolfgang Lehner“

let $hotel := //hotel[typ=‘Pension‘]

return $hotel

Kommentare

An beliebiger Stelle, ohne Bedeutung

Syntax: geschachtelt durch ein Klammerpaar (: und :)

Beispiel: (: XQuery (: Kommentar :) !! :) Orthogonal zu einem Kommentar im XML-Dokument

(23)

Ausdrücke in XQuery

Arithmetische Ausdrücke

Funktionen und Operatoren

Vergleichsausdrücke

Wertevergleich

Allgemeiner Vergleich

Knotenvergleich (Knotenidentität, Vergleich der relativen Positionierung)

Logische Ausdrücke

fn:true(), fn:false(), fn:not()

Pfadausdrücke

Basieren auf XPath 2.0 (Erweiterungen gegenüber 1.0)

FLWOR-Ausdrücke

Konditionale Ausdrücke

Quantifizierende Ausdrücke

existenzielle Quantifizierung universelle Quantifizierung

(24)

Einfache Ausdrücke in XQuery

Arithmetische Ausdrücke

Mit arithmetischen Operationen

Auswertereihefolge durch Klammerung beeinflussen

Beispiel: ($preis-10) div 100

Vergleichsausdrücke (3 Vergleichsoperatoren)

allgemein mit Sequenzen: =, !=, <, <=, >, >=

einfache Wertvergleiche zwischen elementaren Werten:

eq, ne, lt, le, gt, ge

Vergleich der Knotenidentität:

is (identisch), is not (nicht identisch),

logische Ausdrücke:

and, or, not

Beispiel: not($hotel/name eq $restaurant/name)

Pfadausdrücke

(25)

Identität vs. Gleichheit (Beispiel)

Zwei Knoten sind identisch, wenn folgendes gilt:

$knoten1 is $knoten ---> true

Beispiel:

<x>

<titel>Harry Potter und der Stein der Weisen</titel>

<titel>Harry Potter und der Stein der Weisen</titel>

</x>

XQuery:

let $titel := doc("1.xml")//titel return

<a>

<x>{ $titel[1] = $titel[1] }</x>

<x>{ $titel[1] is $titel[1] }</x>

<x>{ $titel[1] = $titel[2] }</x>

<x>{ $titel[1] is $titel[2] }</x>

</a>

Ergebnis:

<a>

<x>true</x>

<x>true</x>

<x>true</x>

(26)

FLWOR-Ausdrücke

FLWOR-Ausdruck

gesprochen wie engl. “Flower“

Basis für Anfragen an XML-Datenbanken

analog zu SELECT-FROM-WHERE in SQL

steht als Abkürzung von for-let-where-order by-return

Klauseln eines FLWOR-Ausdrucks

for/let where order by return

Eingangs- sequenzen

Ausgabe- sequenz FLWOR-Ausdruck

(27)

Struktur eines FLWOR-Ausdrucks

FLWORExpr::=

(ForClause | LetClause)+ WhereClause? OrderByClause? return ExprSingle

ForClause::=

for $VarName TypeDeclaration? PositionalVar? in ExprSingle (,

$VarName TypeDeclaration? PositionalVar? in ExprSingle)*

LetClause::=

let $VarName TypeDeclaration? := ExprSingle (, $VarName TypeDeclaration? := ExprSingle)*

TypeDeclaration::= as SequenceType PositionalVar::= at $VarName

WhereClause::= where Expr OrderByClause::=

(order by | stable order by) OrderSpecList OrderSpecList::= OrderSpec (, OrderSpec)*

OrderSpec::= ExprSingle OrderModifier

OrderModifier::= (ascending | descending)? ((empty greatest) | empty least))? (collation StringLiteral)?

(28)

Variablen

Nach der erfolgten Bindung sind die Werte nicht mehr änderbar

Variablenbindung nur innerhalb des aktuellen und aller eingeschlossenen Anfrageausdrücke sichtbar

Wird Ausdruck verlassen, ist Variable ungebunden

Zugriff auf ungebundenen Variablen  Ausnahme

Wird hingegen Variable mehrfach gebunden, ist immer unmittelbar zuvor erfolgte Bindung sichtbar

Typ einer Variablen ergibt sich aus Bindung

Variablenbindung erfolgt in for und let-Ausdrücken

(29)

let-Klausel

Bindet Menge von Werten, die bei Auswertung eines Ausdrucks expr entstehen geschlossen an eine

Variable $var

Im einfachsten Fall folgt nach der let-Klausel ein return- Ausdruck

Liefert den Variableninhalt als Ergebnis

Beispiel:

let $z := //zimmertyp return $z

Abarbeitung in 3 Schritten:

1. Werte den XPath-Ausdruck //zimmertyp aus

2. Weise die resultierende Knotenmenge an die Variable

$z zu (Variablenbindung)

3. Gebe die gesamte Sequenz von Knoten zurück

(30)

for-Klausel

Für jedes Element der Ergebnismenge erfolgt eine Bindung an

$var

Wie bei let können mehrere Variablen gebunden werden

Variablen für alle untergeordneten Ausdrücke sichtbar

Beispiel:

for $z in //zimmertyp return $z

Abarbeitung anders als bei let

$z wird jeweils an Elemente der Sequenz (Auswertung von //zimmertyp) gebunden

Bindung erfolgt mehrfach, für jeden Zimmertyp genau einmal

Nachfolgende Klauseln werden für jede Iteration und Bindung einmal ausgewertet

return wird für jeden Schritt ausgewertet, Resultat zu einem Zwischenergebnis hinzugefügt

Aufsummiertes Gesamtergebnis von return wird am Schleifenende

(31)

Beispiel

<hotel name=“Hotel Neptun“>

<zimmertyp typ=“EZ“ preis=“180“ währung=“EUR“/>

<foto href=“neptun01.jpeg“/>

</hotel>

<hotel name=“Hotel Hübner“>

<zimmertyp typ=“EZ“ preis=“75“ währung =“EUR“/>

<zimmertyp typ =“DZ“ preis =“90“ währung =“EUR“/>

</hotel>

<hotel name=“Pension Dräger“>

<foto href=“bild-pd01.jpeg“/>

<foto href=“bild-pd02.jpeg“/>

</hotel>

(32)

Beispiel (Forts.)

XQuery-Anfrage

for $hotel in //hotel return $hotel/foto

Ergebnis:

<foto href=“neptun01.jpeg“/>

<foto href=“bild-pd01.jpeg“/>

<foto href=“bild-pd02.jpeg“/>

(33)

Vergleich LET- und FOR-Klauseln

for $x in (<Arzt/>,<Pfleger/>)

let $y := (<Operationssaal/>,<Station/>) return

(<Berufsgruppe>{ $x }</Berufsgruppe>, <Arbeitsort>{ $y }</Arbeitsort>)

liefert als Ergebnis

<Berufsgruppe><Arzt/></Berufsgruppe>

<Arbeitsort><Operationssaal/><Station/>

</Arbeitsort>

<Berufsgruppe><Pfleger/></Berufsgruppe>

<Arbeitsort><Operationssaal/><Station/>

</Arbeitsort>

(34)

Geschachtelte FOR-Klauseln

<billighotels> { for $h in //hotel

for $z in $h/zimmertyp where $z/@preis <= 100 return <hotel>

<name>{ data($h/@name) }</name>

<preis>{ data($z/@preis) }</preis>

</hotel> } </billighotels>

Ergebnis:

<billighotels>

<hotel><name>…</name><preis>…</preis></hotel>

</billighotels>

(35)

Geschachtelte FOR-Klauseln (2)

<billighotels> { for $h in //hotel

return <hotel name={ $h/@name }> { for $z in $h/zimmertyp

where $z/@preis <= 100

return <preis>{ data($z/@preis) }</preis>

} </hotel> } </billighotels>

Ergebnis:

<billighotels>

<hotel name=“Hotel Hübner“>

<preis>…</preis>

</hotel>…

</billighotels>

(36)

where-Klausel

for $p at $i in fn:doc(“Klinik.xml“)//Pfleger where

fn:not($p/Geburtsdatum > xs:date(“1974-01-01“)) and $i mod 5 = 0

and fn:count($p//Zertifikat) > 2 return

<Personaleintrag LfdNR={$i idiv 5}>

where-Klausel zur Angabe eines Selektionsprädikats mit weitergehenden Filtermöglichkeiten in Bezug auf Gruppen (ähnlich zu HAVING)

Beispiel:

Suche Pflegepersonal das nicht nach 1974 geboren ist

Betrachte nur jeden 5. Pfleger

Suche Pfleger, die 3 oder mehr Zertifikate (zum Nachweis bestimmter Fähigkeiten besitzen)

(37)

order by-Klausel

Explizite Angabe einer Sortierung für die Elemente einer Sequenz

Spezifische Sortierordnungen

Global im Prolog einer XQuery

Lokal zusätzlich in der order by-Klausel

2 wichtige Eigenschaften der order by-Klausel

Wenn keine eindeutige Reihenfolge, so ist Anordnung der Duplikate implementierungsabhängig, Angabe von stable erzwingt die Einhaltung der Dokumentreihenfolge

Wenn Eigenschaften, nach denen sortiert wird, nicht existieren:

Einordnung dieser Einträge explizit steuern mit Sortierungsmodifikator empty greatest bzw. empty least

Beispiele:

Zusätzlich zum Beispiel für where-Klausel:

order by $p//Wohnort empty least,

fn:get-year-from-date($p/Geburtsdatum) descending Weitere Beispiele bei Verbundoperationen

(38)

Elementkonstruktoren (return)

Literales XML wird in das Ergebnis übernommen, ohne modifiziert zu werden

<zimmer typ=“DZ“>

<ausstattung>TV</ausstattung>

</zimmer>

XML mit geschachtelten Ausdrücken erlaubt es, Element- und Attributinhalte durch XQuery-Ausdrücke berechnen zu lassen

<zimmer typ=“{$z/@typ}“>

$zaus union $haus

</zimmer>

XML mit berechneten Element- und Attributnamen bietet die Möglichkeit, die Bezeichner von XML-Elementen und Attributen durch XQuery-Ausdrücke zu berechnen

element {$z} {

attribute {$t} {“EZ“},

(39)

Verbundoperationen

Verknüpfung von Datenbeständen aus

unterschiedlichen Dokumenten/Dokumentteilen

durch Wertegleichheit (relationale Seele)

durch Verfolgung von Referenzen (objektorientierte Seele)

Verbundprädikat

in where-Klausel eines FLWOR-Ausdrucks

in Pfadausdruck eines Verbundpartners

Verfolgung von Referenzen (ID/IDREF)

Funktion fn:id() liefert Elemente, deren ID-Attributwert

mindestens einem der übergebenen IDREF-Werte entsprechen (Dereferenzierung)

Funktion fn:idref() liefert Elemente, die auf die übergebenen Werte verweisen

Referenzen in Form von XPointer/XLink nicht über Dokumentgrenzen hinweg auflösbar

Symmetrische und einseitige äußere Verbunde intuitiv formulierbar, vollständiger äußerer Verbund schwierig

(40)

Verbund – Beispiel 1

<prospect> {

for $h in fn:doc(“hotels.xml“)//hotel, $z in $h/zimmertyp,

$f in fn:doc(“fotos.xml“)

//hotel[name = $h/name]//zimmerfoto, where

$f/zimmertyp = $z/@typ order by $h/name,$z/@typ return

<hotelzimmer> {

$z/@typ, $h/name, $z/beschreibung, $f/foto } </hotelzimmer>

} </prospect>

Ergebnis:

Liste von Hotelzimmern mit Angaben zu Zimmertyp, Hotel, Zimmerbeschreibung und zugehöriges Foto

(41)

Verbund – Beispiel 2

<prospect> {

for $h in fn:doc(“hotels.xml“)//hotel order by $h/name

return

<hotel> {

$h/name, $h/beschreibung, for $z in $h/zimmertyp, $f in fn:doc(“fotos.xml“)

//hotel[name = $h/name]/zimmerfoto where

$f/zimmertyp = $z/@typ order by $z/@typ return

<hotelzimmer> {

$z/@typ, $z/beschreibung, $f/foto } </hotelzimmer>

} </hotel>

} </prospect>

Ergebnis:

(42)

Verbund – Verfolgung von Referenzen

for $s in fn:doc(“Klinik.xml“)//Station let $p := fn:id($s/@Leitung)

return

<Station>

{$s/Name}

<Leitung>{ $p/Name }</Leitung>

</Station>

Ergebnis:

Zuordnung der leitenden Person (Name) an jede Station im Krankenhaus Beispiel:

(43)

Gruppierung

Beispiel:

Berechnung des Durchschnittsalters pro Berufsgruppe (Arzt oder Pfleger)

Variante 1: Gruppierung entlang der XML-Hierarchie

<MedizinischesPersonal>

{ for $p in fn:doc(“…“)//MedizinischesPersonal/*

let $x := $p//Alter return

element { fn:node-name($p) }

{ <Alter>{ fn:avg($x) }</Alter> }

</MedizinischesPersonal>

Variante 2: Gruppierung nach Wertegleichheit

<MedizinischesPersonal>

{ for $b in fn:distinct-values(fn:doc(“…“)//Beruf) let $x := fn:doc(“…“)//Alter[../Beruf = $b]

return

element {$b}

{<Alter>{ fn:avg($x) }</Alter> }

</MedizinischesPersonal>

(44)

Gruppierung (Forts.)

Variante 3: Gruppierung über Elementbezeichner

<MedizinischesPersonal>

{ for $b in fn:distinct-values(for $i in fn:doc(“…“)//Person/(Arzt|Pfleger)

return fn:node-name($i))

let $x := fn:doc(“…“)//Alter[../fn:node-name(.)

= $b]

return

element {$b}

{ <Alter>{ fn:avg($x) }</Alter> } }

(45)

Aggregationsfunktionen

fn:count()

liefert die Anzahl der Elemente der übergebenen Sequenz zurück

fn:avg()

liefert den durchschnittlichen Wert aller Elemente der übergebenen Sequenz

sum($arg) div count($arg)

fn:max()

liefert den wertemäßig größten Wert optional bezüglich einer Sortierordnung zurück

fn:min()

liefert den wertemäßig kleinsten Wert optional bezüglich einer Sortierordnung zurück

fn:sum()

liefert den summarischen Wert aller in der Sequenz enthaltenen Elementwerte zurück; wird der zweite Parameter nicht angegeben, so wird der Wert 0.0E0 bei einer leeren Sequenz zurückgeliefert;

andernfalls der Wert des zweiten Parameters

(46)

Konditionale Ausdrücke

Syntax

if (expr) then expr_1 else expr_2

Beispiel Hotel-Datenbank:

Gewähre Nachlass von 10%, wenn ein Hotelzimmer länger als 5 Tage belegt wird

let $tage := ($r/abreise - $r/anreise), $zimmertyp := fn:id(zimmertyp)

return

if ($tage > 5)

then $tage*$zimmertyp/@preis*0.9 else $tage*$zimmertyp/@preis

(47)

Quantifizierende Ausdrücke

Syntax

[some | every ] var in expr_1 satisfies expr_2

Beispiel 1

Namen der Hotels, die unter anderem auch Einzelzimmer anbieten for $hotel in fn:doc(“hotels.xml“)//hotel

where some $z in $hotel/zimmertyp satisfies $z/@typ = “EZ“

return $hotel/name

Beispiel 2

Suche Appartementhotels, d.h. Hotels, die ausschließlich Appartements anbieten

for $hotel in fn:doc(“hotels.xml“)//hotel where every $z in $hotel/zimmertyp

satisfies $z/@typ = “Appartement“

return $hotel/name

(48)

Funktionen in XQuery

Funktionen auf numerischen und Booleschen Werten

Funktionen auf Zeichenketten

Vergleich

Manipulation

Auswertung regulärer Ausdrücke

Funktionen auf Zeitangaben

Vergleichs- und Substraktions-/Additionsoperatoren

Funktionen zur Extraktion von Komponenten

Zeitangaben in unterschiedlichen Zeitzonen

(49)

XQuery-Implementierungen

Aktuelle Liste: http://www.w3.org/XML/Query#implementations

(50)

SQL/XML

2003 verabschiedet (ISO/IEC 9075-14:2003 ) - ( siehe:

[6] )

ANSI und ISO Standard, Support um XML in Umgebung einer SQL-Datenbank zu nutzen

Titel: Information technology - Database languages - SQL - Part 14: XML- Related Specifications

(SQL/XML) – ca. $200 (ca. 360 Seiten)

entwickelt und implementiert von Oracle, MS, IBM, Sybase, ...

wird ab Oracle9i Release2 unterstützt

macht es möglich XML-Files in SQL-DB zu speichern, Anfragen mit XQuery und XPath zu stellen, und

(51)

XML-Update

XML-Update Sprache vom Sep 2000 - ( siehe:

[7.1] )

basiert auf XPath

beschreibt welche Änderungen in XML-File gemacht werden

diese Änderungen werden als XML formuliert

ist kein W3C- oder ISO-Standard, sondern XML:DB Initiative

praktisch, nicht so gut spezifiziert, ex. DTD der Syntax

Popularität in einigen Implementierungen

gefunden - [7.2]

(52)

Literatur

[1] “XML&Datenbanken” M.Klettke, H.Meyer, dpunkt.verlag, 2002 [2] XML-QL: http://www.w3.org/TR/NOTE-xml-ql

[3] XQL: http://www.w3.org/TandS/QL/QL98/pp/xql.html [4] XPath: http://www.w3.org/TR/xpath

[5] XQuery: http://www.w3.org/XML/Query

http://www.w3.org/TR/xpath-datamodel/

[6] XML/SQL: http://www.sqlx.org/

http://www.oracle.com/technology/oramag/oracle/03- may/o33xml.html

[7] XUpdate: http://xmldb-org.sourceforge.net/xupdate/index.html http://uche.ogbuji.net/tech/akara/nodes/2004-09- 30/xupdate

[8] “XML – Von Anfang an”, rororo, 2003

[9] “Essential XML”, D.Box, A.Skonnard, Addison-Wesley, 2001 [10] “XSL und XPath”, M.Bach, Addison-Wesley, 2000

[11] “XQuery – Einführung und fortgeschrittene Methoden“ W.Lehner, H.

Referenzen

ÄHNLICHE DOKUMENTE

Um den Baum höchster Parsimonität zu finden, müssen wir berechnen können, wie viele Zustandsänderungen für einen gegebenen Baum nötig sind. Dieser Baum stelle die Phylogenie

Um den Baum höchster Parsimonität zu finden müssen wir berechnen können, wie viele Zustandsänderungen für einen gegebenen Baum nötig sind. Dieser Baum stelle die Phylogenie des

das Paket macht Verlust, irgendwann f¨ angt der Wert aber wieder an zu steigen.. Nach 8 Monaten hat das Aktienpaket einen Wert von

Ei- ne Operation V erschieben kann zum Beispiel daran erkannt werden, dass eine Teilsequenz von Editieroperationen, zun¨ achst das L¨ oschen einer Struktur anweist und eine

Schütze &#34;An Introduction to Information Retrieval&#34; Preliminary draft 2008 Cambridge UP.. WEB-Crawling and indexes (Chapter 20)

Textpraxis: Lieber Michael Serrer, vielleicht können Sie in wenigen Worten zusammen- fassen, was die Aufgabe und Ziele des Literaturbüros sind.. Michael Serrer: Unsere Satzung

liefert den summarischen Wert aller in der Sequenz enthaltenen Elementwerte zurück; wird der zweite Parameter nicht angegeben, so wird der Wert 0.0E0 bei einer leeren

liefert den summarischen Wert aller in der Sequenz enthaltenen Elementwerte zurück; wird der zweite Parameter nicht angegeben, so wird der Wert 0.0E0 bei einer leeren