• Keine Ergebnisse gefunden

XML-Anfragesprachen (Schwerpunkt XQuery)

N/A
N/A
Protected

Academic year: 2022

Aktie "XML-Anfragesprachen (Schwerpunkt XQuery)"

Copied!
57
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 lassen sich verlustfrei durch Query wiedergewinnen

(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

Auch Änderungsoperationen über XML-Anfragesprache

(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

zur Selektion und Extraktion von Knotenmengen

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

/child::Patient/self::*/child::Name/parent::*/attribute::PatientNr äquivalent zu: /Patient/./Name/../@PatientNr

(16)

XQuery

Überblick und Datenmodell

Einfache Ausdrücke

FLWR-Ausdrücke

Erweiterte XQuery-Ausdrücke:

Verbund

Gruppierung

Benutzerdefinierte Funktionen

Erweiterte Konzepte

Modulkonzept

XQuery Prolog

Verarbeitungskonzept

Implementierungen

(17)

Sprachüberblick

W3C Working Draft vom Okt 2004 - (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 selbstdefinierte Funktionen

bedingte Anweisungen, Test von Datentypen, Typumwandlung

Verwendung von Quantoren: EVERY und SOME

(18)

Datenmodell

Dokument als Baumstruktur (XPath 1.0)

XQuery nutzt künftigen 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)

Flach, d.h. Sequenz nur auf der obersten Ebene

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

(19)

Datenmodell (2)

Funktionen zur Analyse und Modifikation

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. Bereichs

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 comment element document text processing-in- struction

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

attribute

(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

<!- - 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)

Ausdrücke in XQuery (1)

Arithmetische Ausdrücke

Mit arithmetischen Operationen

Auswertereihefolge durch Klammerung beeinflussen

Beispiel: ($preis-10) DIV 100

Vergleichsausdrücke (4 Vergleichsoperatoren)

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

einfache Wertvergleiche zwischen elementaren Werten:

EQ, NE, LT, LE, GT, GE

Vergleich der Knotenidentität:

== (identisch), !== (nicht identisch) Beispiel:

$hotel[name = ’Neptun’] == $hotel[@id = ‘4311’]

Vergleich der Abfolge von Knoten bezüglich der Dokumentordnung mit

<< und >> und in Bezug auf die Vorgänger- und Nachfolgerbeziehung mit FOLLOWS und PRECEDES

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)

(25)

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

Bindung von Variablen

Anwendung von Prädikaten zur Filterung

Sortierung Konstruktion des Ergebnis- dokumentes Eingangs-

sequenzen

Ausgabe- sequenz FLWOR-Ausdruck

(26)

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)?

(27)

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

(28)

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

(29)

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 zurückgegeben

(30)

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>

(31)

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

(32)

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>

(33)

Geschachtelte FOR-Klauseln

<billighotels> { FOR $h IN //hotel

FOR $z IN $h/zimmertyp WHERE $z/@preis <= 100 RETURN <hotel>

<name>{ $h/@name }</name>

<preis> { $z/@preis }</preis>

</hotel> } </billighotels>

Ergebnis:

<billighotels>

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

</billighotels>

(34)

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>{ $z/@preis }</preis>

} </hotel> } </billighotels>

Ergebnis:

<billighotels>

<hotel name=“Hotel Hübner“>

<preis>…</preis>

</hotel>…

</billighotels>

(35)

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

<Persoaleintrag LfdNR={$i idiv 5}>

{$p/Name, $p/@Station}

</Personaleintrag>

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)

(36)

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:

$hotel/zimmer[preis<100] ORDER BY preis ASCENDING Zusätzlich zum Beispiel für WHERE-Klausel:

ORDER BY $p//Wohnort EMPTY LEAST,

(37)

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

}

(38)

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

(39)

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 RETURN

<hotelzimmer {

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

ORDER BY (name,typ) } </prospect>

Ergebnis:

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

Hotels fehlen, wenn keine Informationen zu Zimmern oder das zugehörige Foto fehlt

(40)

Verbund – Beispiel 2

<prospect> {

FOR $h IN fn:doc(“hotels.xml“)//hotel 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 RETURN

<hotelzimmer>

$z/typ, $z/beschreibung, $f/foto

</hotelzimmer>

ORDER BY typ } </hotel>

ORDER BY name } </prospect>

Ergebnis:

(41)

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, Vorname) an jede Station im Krankenhaus

Beispiel:

(42)

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/text()) LET $x := fn:doc(“…“)//Alter[../Beruf/text() = $b]

RETURN

ELEMENT {$b}

(43)

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>

(44)

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

(45)

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), $zimmer := fn:id(zimmertyp)

RETURN

IF ($tage > 5)

THEN $tage*$zimmer/preis*0.9 ELSE $tage*$zimmer/preis

(46)

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/zimmer/typ SATISFIES $z = “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/zimmer/typ

SATISFIES $z = “Appartement“

RETURN $hotel/name

(47)

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

(48)

Benutzerdefinierte Funktionen (Beispiel)

declare function factorial($n as xs:integer) as xs:integer {

return(

if ($n eq 0) then 1

else $n * factorial($n - 1) ) }

<results>

<desc> Factorial of 5 </desc>

<value> { factorial( 5 ) } </value>

</results>

declare function factorial($n as xs:integer) as xs:integer {

return(

if ($n eq 0) then 1

else $n * factorial($n - 1) ) }

<results>

<desc> Factorial of 5 </desc>

<value> { factorial( 5 ) } </value>

</results>

<results>

<desc> Factorial of 5 </desc>

<value> 120 </value>

(49)

Verarbeitungs- konzept

von XQuery

(50)

Statische Analyse und Typprüfung

Statische Analyse (erste Phase der Auswertung)

Parsing und Analyse des XQuery-Hauptmoduls

Aktualisierung des statischen Kontextes

Überführung der Anfrage in einen Operatorbaum

Fehlerprüfung: Existenz von Typnamen, Namens-

raumpräffixen, Funktionsnamen und Variablennamen

Statische Typprüfung

Prepare / Execute

Übersetzung der Anfrage in einen ausführbaren Anfragegraphen

Ausführung der Anfrage

(51)

Statischer Kontext

Bekannte Namensräume

vordefiniert

Im XQuery Prolog enthalten

Vorbelegung für Element- und Funktionsnamensräume

Schemadefinitionen

Typen aus XML Schema und XQuery

Variablendefinitionen

Funktionen

Vorbelegung für Sortierordnung

Validierungsmodus

(52)

Dynamische Ausführung

Dynamischer Kontext

Aufbau während der Anfrageausführung

Verwaltung aller aktuellen Variablenbindungen (Variablenname-Wert-Paare)

Fokus („focus“)

Aktuell betrachteter Eintrag („context item“) (.-Operator)

Eintragsposition („context position“) (fn:position())

Anzahl der Einträge der aktuellen Sequemz („context size“) fn:last()

Datum und Uhrzeit

Zeitzone

(53)

Aufbau des Ergebnisdokuments

Serialisierung

XQuery-Anfrage resultiert in einer Sequenz und somit in einer Instanz des XML-Datenmodells

Serialisierung = Überführung der Instanz eines XML- Datenmodells in eine Zeichenkette (XML-Dokument)

Transformation / Normalisierung

Parameter zur Beeinflussung der Serialisierung

Encoding des Ergebnisses

Media Type des Ergebnisses

Anmerkung

Ergebnis einer XQuery muss nicht als XML serialisiert werden, d.h. weitere Methoden neben xml

(54)

XQuery-Implementierungen

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

(55)

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

(56)

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]

(57)

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.

Schöning, dpunkt Verlag, 2003.

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

Referenzen

ÄHNLICHE DOKUMENTE

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

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

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