XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht...

52
XML-Anfragesprachen (Schwerpunkt XQuery)

Transcript of XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht...

Page 1: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

XML-Anfragesprachen(Schwerpunkt XQuery)

Page 2: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

22

© Prof. T. Kudraß, HTWK Leipzig

Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath Anfragesprache XQuery Weitere Anfragesprachen (XML-QL, XQL) XML und Änderungsoperationen XML und SQL Ausblick

Page 3: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

33

© Prof. T. Kudraß, HTWK Leipzig

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

Page 4: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

44

© Prof. T. Kudraß, HTWK Leipzig

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

lassen sich verlustfrei durch Query wiedergewinnen

Page 5: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

55

© Prof. T. Kudraß, HTWK Leipzig

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

Page 6: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

66

© Prof. T. Kudraß, HTWK Leipzig

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

Page 7: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

77

© Prof. T. Kudraß, HTWK Leipzig

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

Page 8: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

88

© Prof. T. Kudraß, HTWK Leipzig

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– Auch Änderungsoperationen über XML-Anfragesprache

Page 9: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

99

© Prof. T. Kudraß, HTWK Leipzig

Stand der Entwicklung

Page 10: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1010

© Prof. T. Kudraß, HTWK Leipzig

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

zur Selektion und Extraktion von Knotenmengen

Page 11: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1111

© Prof. T. Kudraß, HTWK Leipzig

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

Page 12: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1212

© Prof. T. Kudraß, HTWK Leipzig

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

Page 13: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1313

© Prof. T. Kudraß, HTWK Leipzig

Navigationsachsen in XPath

Klettke/Meyer “XML & Datenbanken“

Page 14: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1414

© Prof. T. Kudraß, HTWK Leipzig

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.

Page 15: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1515

© Prof. T. Kudraß, HTWK Leipzig

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“]

Page 16: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1616

© Prof. T. Kudraß, HTWK Leipzig

XQuery Überblick und Datenmodell Einfache Ausdrücke FLWOR-Ausdrücke Erweiterte XQuery-Ausdrücke:

– Verbund– Gruppierung

Benutzerdefinierte Funktionen Erweiterte Konzepte

– Modulkonzept– XQuery Prolog

Verarbeitungskonzept Implementierungen

Page 17: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1717

© Prof. T. Kudraß, HTWK Leipzig

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

Page 18: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1818

© Prof. T. Kudraß, HTWK Leipzig

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

(<X>) äquivalent zu <X>

Page 19: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

1919

© Prof. T. Kudraß, HTWK Leipzig

Datenmodell (2) Operationen zur Analyse und Modifikation von Sequenzen

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

– to-Operator2 to 5 liefert: (2,3,4,5)

– Eliminierung von Duplikatenfn: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

Page 20: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2020

© Prof. T. Kudraß, HTWK Leipzig

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

Page 21: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2121

© Prof. T. Kudraß, HTWK Leipzig

xs:E

NT

ITIE

S

benu

tze

rdef

inie

rte

Lis

ten

type

n u

nd

Ve

rein

igun

gs-

type

n

item xd

t:an

yAto

mic

Typ

e

xs:I

DR

EF

S

nod

exd

t:unt

yped

An

y

ben

utze

rde

finie

rte

ko

mpl

exe

Ty-

pen

xs:a

nyT

ype

xs:a

nyS

impl

eTyp

e

com

me

nt

elem

ent

docu

men

t

text

proc

ess

ing-

in-

stru

ctio

n

xs:N

MT

OK

EN

S

xdt:u

ntyp

edA

tom

ic

xs:d

ate

Tim

e xs:d

ate

xs:t

ime

xs:f

loat

xs:d

ura

tion

xs:y

ear

Mon

thD

urat

ion

xs:g

Ye

ar

xs:g

Ye

arM

ont

h

xs:d

ecim

al

xs:d

oub

le

xs:d

ayT

imeD

urat

ion

xs:g

Mon

thD

ay

xs:g

Day

xs:b

ase

64B

ina

ry

xs:b

ool

ean

xs:g

Mon

th

xs:h

exB

inar

y

xs:a

nyU

RI

xs:Q

Na

me

xs:N

OT

ATI

ON

xs:s

trin

g

xs:n

orm

aliz

edS

trin

g

xs:t

oke

n

xs:N

MT

OK

EN

xs:E

NT

ITY

xs:la

ngua

ge

xs:N

ame

xs:N

CN

ame

xs:I

D

xs:I

DR

EF

xs:lo

ng

xs:n

ega

tiveI

nte

ger

xs:n

onP

osi

tive

Inte

ger

xs:in

tege

r

xs:in

t

xs:s

hort

xs:u

nsi

gne

dLon

g

xs:n

onN

egat

ive

Inte

ger

xs:b

yte

xs:u

nsig

ned

Int

xs:u

nsig

ned

Sho

rt

xs:u

nsi

gne

dByt

e

xs:p

osi

tiveI

nte

ger

attr

ibut

e

XQuery Typhierachie

Page 22: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2222

© Prof. T. Kudraß, HTWK Leipzig

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

<!- - Kommentar im XML-Dokument - -!>

Page 23: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2323

© Prof. T. Kudraß, HTWK Leipzig

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

Page 24: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2424

© Prof. T. Kudraß, HTWK Leipzig

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– Basieren auf XPath 2.0 (Erweiterungen gegenüber 1.0)

Page 25: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2525

© Prof. T. Kudraß, HTWK Leipzig

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>    <x>false</x> </a>

Page 26: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2626

© Prof. T. Kudraß, HTWK Leipzig

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 returnorder by

Bindung vonVariablen

Anwendungvon Prädikatenzur Filterung

Sortierung Konstruktiondes Ergebnis-dokumentes

Eingangs-sequenzen

Ausgabe-sequenz

FLWOR-Ausdruck

Page 27: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2727

© Prof. T. Kudraß, HTWK Leipzig

Struktur eines FLWOR-AusdrucksFLWORExpr::=

(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 SequenceTypePositionalVar::= at $VarNameWhereClause::= where ExprOrderByClause::=

(order by | stable order by) OrderSpecListOrderSpecList::= OrderSpec (, OrderSpec)*OrderSpec::= ExprSingle OrderModifierOrderModifier::= (ascending | descending)? ((empty greatest) |

empty least))? (collation StringLiteral)?

Page 28: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2828

© Prof. T. Kudraß, HTWK Leipzig

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

Page 29: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

2929

© Prof. T. Kudraß, HTWK Leipzig

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 := //zimmertypreturn $z

Abarbeitung in 3 Schritten:1. Werte den XPath-Ausdruck //zimmertyp aus2. Weise die resultierende Knotenmenge an die Variable

$z zu (Variablenbindung)3. Gebe die gesamte Sequenz von Knoten zurück

Page 30: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3030

© Prof. T. Kudraß, HTWK Leipzig

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 //zimmertypreturn $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

zurückgegeben

Page 31: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3131

© Prof. T. Kudraß, HTWK Leipzig

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>

Page 32: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3232

© Prof. T. Kudraß, HTWK Leipzig

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“/>

Page 33: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3333

© Prof. T. Kudraß, HTWK Leipzig

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>

Page 34: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3434

© Prof. T. Kudraß, HTWK Leipzig

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>

Page 35: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3535

© Prof. T. Kudraß, HTWK Leipzig

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>

Page 36: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3636

© Prof. T. Kudraß, HTWK Leipzig

where-Klausel

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

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

return<Personaleintrag LfdNR={$i idiv 5}> {$p/@Station, $p/Name,}</Personaleintrag>

where-Klausel zur Angabe eines Selektionsprädikats mit weitergehendenFiltermö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)

Page 37: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3737

© Prof. T. Kudraß, HTWK Leipzig

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

Page 38: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3838

© Prof. T. Kudraß, HTWK Leipzig

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“}, element {$a} {“Minibar“}}

Page 39: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

3939

© Prof. T. Kudraß, HTWK Leipzig

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

Page 40: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4040

© Prof. T. Kudraß, HTWK Leipzig

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/@typorder by $h/name,$z/@typreturn <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 Hotels fehlen, wenn keine Informationen zu Zimmern oder das zugehörige

Foto fehlt

Page 41: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4141

© Prof. T. Kudraß, HTWK Leipzig

Verbund – Beispiel 2<prospect> {

for $h in fn:doc(“hotels.xml“)//hotelorder by $h/namereturn <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: Leere Sequenz für Hotels ohne Zimmerinformationen Hotelname und Beschreibung trotzdem im Resultat (entspricht Outer Join)

Page 42: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4242

© Prof. T. Kudraß, HTWK Leipzig

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:

Page 43: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4343

© Prof. T. Kudraß, HTWK Leipzig

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>

Page 44: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4444

© Prof. T. Kudraß, HTWK Leipzig

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> }}</MedizinischesPersonal>

Page 45: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4545

© Prof. T. Kudraß, HTWK Leipzig

Aggregationsfunktionen fn:count()

liefert die Anzahl der Elemente der übergebenen Sequenz zurück fn:avg()

liefert den durchschnittlichen Wert aller Elemente der übergebenen Sequenzsum($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

Page 46: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4646

© Prof. T. Kudraß, HTWK Leipzig

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 wirdlet $tage := ($r/abreise - $r/anreise), $zimmertyp := fn:id(zimmertyp)return

if ($tage > 5) then $tage*$zimmertyp/@preis*0.9 else $tage*$zimmertyp/@preis

Hinweis: fn:id funktioniert nicht überall

Page 47: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4747

© Prof. T. Kudraß, HTWK Leipzig

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“)//hotelwhere some $z in $hotel/zimmertyp satisfies $z/@typ = “EZ“return $hotel/name

Beispiel 2Suche Appartementhotels, d.h. Hotels, die ausschließlich Appartements anbietenfor $hotel in fn:doc(“hotels.xml“)//hotelwhere every $z in $hotel/zimmertyp satisfies $z/@typ = “Appartement“return $hotel/name

Page 48: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4848

© Prof. T. Kudraß, HTWK Leipzig

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

Benutzerdefinierte Funktionen

Page 49: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

4949

© Prof. T. Kudraß, HTWK Leipzig

XQuery-Implementierungen

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

Page 50: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

5050

© Prof. T. Kudraß, HTWK Leipzig

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 existierende SQL-Daten als XML zu extrahieren

Page 51: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

5151

© Prof. T. Kudraß, HTWK Leipzig

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]

Page 52: XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig 2 2 Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath.

5252

© Prof. T. Kudraß, HTWK Leipzig

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/Queryhttp://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.htmlhttp://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. Schöning, dpunkt Verlag, 2003.

[12] “XQuery – ein Überblick“ W.Lehner, H.Schöning, in Datenbank-Spektrum 11/2004.