21
Datenbankeinsatz: XML – deklarativer Zugriff – 1 Klemens Böhm Kapitel 9: Deklarativer Zugriff auf semistrukturierte Daten Datenbankeinsatz: XML – deklarativer Zugriff – 2 Klemens Böhm OEM-Dokument – Grundlage für Beispiel 19 12 35 17 13 14 66 18 23 25 restaurant restaurant category name address category name address address gourmet Chef Chu Mountain View restaurant 44 15 16 street city zipcode El Camino Real Palo Alto ‘92310’ 77 55 79 80 name Vietna- mese Saigon Menlo Park cheap fast food McDonald’s price category 54 92310 zipcode Guide Anford. dekl. Zugriff Pfade XQuery XSLT Datenbankeinsatz: XML – deklarativer Zugriff – 3 Klemens Böhm Unregelmäßigkeiten in der Beispiel-Datenbank und Zsh. zum deklarativen Zugriff Restaurants haben beliebig viele Adressen, Adressen sind manchmal Blätter des Baums, haben manchmal aber auch explizite Struktur, zipcode ist manchmal direkter Bestandteil von restaurant, manchmal Bestandteil von address. Man kann bzw. möchte Struktur der Daten nicht immer genau spezifizieren, manchmal haben die Daten aber Struktur, und sie ist dem Benutzer bekannt. Anford. dekl. Zugriff Pfade XQuery XSLT Datenbankeinsatz: XML – deklarativer Zugriff – 4 Klemens Böhm Anforderungen bezüglich deklarativem Zugriff Anforderungen gemäß [ABS00]: Ausdrucksmächtigkeit, Semantik, Zusammensetzbarkeit, Schema, Einfache Erzeugbarkeit von Anfragen aus Programmen. Anford. dekl. Zugriff Pfade XQuery XSLT

Kapitel 9: Deklarativer Zugriff auf semistrukturierte Datenipd/institut/dbe2004-05/dbe-kap9-4auf1.pdf · Klemens Böhm Datenbankeinsatz: XML – deklarativer Zugriff – 5 Ausdrucksmächtigkeit

Embed Size (px)

Citation preview

Datenbankeinsatz: XML – deklarativer Zugriff – 1Klemens Böhm

Kapitel 9: Deklarativer Zugriff

auf semistrukturierte Daten

Datenbankeinsatz: XML – deklarativer Zugriff – 2Klemens Böhm

OEM-Dokument –Grundlage für Beispiel

19

12

35

17 13 14 66 18 23 25

restaurantrestaurant

category name address category name addressaddress

gourmet Chef Chu MountainView

restaurant

44 15 16

streetcity zipcode

El Camino RealPalo Alto ‘92310’

77

55 79 80

name

Vietna-mese

Saigon MenloPark

cheap fast food

McDonald’s

pricecategory

54

92310

zipcode

Guide

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 3Klemens Böhm

Unregelmäßigkeitenin der Beispiel-Datenbank

und Zsh. zum deklarativen ZugriffRestaurants haben beliebig viele Adressen,Adressen sind manchmal Blätter des Baums,haben manchmal aber auch explizite Struktur,zipcode ist manchmaldirekter Bestandteil von restaurant, manchmal Bestandteil von address.

Man kann bzw. möchte Struktur der Datennicht immer genau spezifizieren,manchmal haben die Daten aber Struktur, und sie ist dem Benutzer bekannt.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 4Klemens Böhm

Anforderungenbezüglich deklarativem Zugriff

Anforderungen gemäß [ABS00]:Ausdrucksmächtigkeit,Semantik,Zusammensetzbarkeit,Schema,Einfache Erzeugbarkeit von Anfragenaus Programmen.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 5Klemens Böhm

AusdrucksmächtigkeitMindestens das, was Sprache für das relationale Modell kann.Sprache sollte ausdrucksmächtig sein, aber nicht zu ausdrucksmächtig.Denn:

Optimierungen sind teilweise nicht möglich,keine Garantien für Ausführungszeiten.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 6Klemens Böhm

SemantikGenaue Definition der Semantik ist erforderlich.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 7Klemens Böhm

Einfache Erzeugung von Anfragenaus Programmen

“karg, aber einfach”

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 8Klemens Böhm

Schema“Structure-Consciousness”Keine Eigenschaft der Querysprache, sondern der Implementierung.Anford.

dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 9Klemens Böhm

Beschleunigungder Queryevaluierung – BeispielAnfrage: select X.title

from biblio.* Xwhere X.*.zip="12345"

Angenommen, Schema sagt uns, daß nurbook-Elemente ein zip-Attribut haben, und zipist stets direkt unter einem address-Elementunter einem book-Element. Unter diesen Annahmen äquivalente Anfrage:select X.titlefrom biblio.book Xwhere X.address.zip="12345"

Fokusierte (und damit i. d. R. schnellere) Suche.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 10Klemens Böhm

ZusammensetzbarkeitIdentisch mit ‘Abgeschlossenheit’ in früherer Aufzählung.Gegenbeispiel: Querysprache LOREL erzeugt Relationen aus OEM-Instanz, d. h. LOREL genügt der Anforderung nicht.Konsequenz auf der syntaktischen Ebene: “Referentielle Transparenz”Name, Variable für semistrukturierte Daten↔ Ausdruck

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

z

Datenbankeinsatz: XML – deklarativer Zugriff – 11Klemens Böhm

Pfade im OEM-Kontext (1)Label Path eines Elements o -Folge von Labels, separiert durch Punkteoder was auch immer, l1.l2…ln,so daß man von o aus den Pfad (o1, …, on) traversieren kann, und Element oi hat Label li.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 12Klemens Böhm

Pfade im OEM-Kontext (2)Data Path eines Elements o -Alternierende Folge von Labels und Element-IDs, separiert durch Punkte, l1.o1.l2.o2…ln.on, so daß man von o aus den Pfad (o1, …, on) traversieren kann, und Objekt oi hat Label li.Ein Data Path d ist Instanz eines Label Paths l, wenn die Folgen der Labels übereinstimmen. Alle Instanzen von ‘book.title’?

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 13Klemens Böhm

Target SetDas Target Set in einem Element s von einem label path l von sist die Menget ={o|l1.o1.l2.o2…ln.o ist Instanz von l} Target Set von book.author?

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 14Klemens Böhm

XPathMotivation: Adressierungbeliebiger logischer Dokumentbestandteile,XPath – Standardisierung im XML-Kontext,nicht XML Syntax,XPath operiert auf der logischen Dokumentstruktur.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 15Klemens Böhm

Logische Dokumentstruktur

...

The Autobio-graphy of ...

bookstore

book

title

book

author price title author price

first-name

last-name name

Benjamin Franklin

8.99

Plato

9.99The Gorgias

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 16Klemens Böhm

XPath – Beispiele (1)titel bzw. ./titelAlle Titel im aktuellen Element.author/name/firstnameAlle firstname-Elemente in einem name-Elementin einem author-Element.//titelAlle Titel im Dokument.buch/*Alle Kinder des Elements "buch".buch/@*Alle Attribute des Buchs, d. h. Attributnamen zusammen mit Werten.preis/@währungAlle Währungen von Preisen.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 17Klemens Böhm

XPath – Beispiele (2)buch[zusammenfassung]Alle Bücher, die eine Zusammenfassung enthalten.buch[zusammenfassung]/titelDie Titel aller Bücher, die eine Zusammenfassung enthaltenautor[vorname!text() = "Hans"]autor[vorname $ieq$ "Hans"]Alle Autoren mit Vornamen "Hans"autor[(titel $or$ auszeichnung)]Alle Autoren mit einem Titel oder einer Auszeichnung($ und Klammern können weggelassen werden)mein_namensraum:*Alle Elemente in "mein_namensraum"

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 18Klemens Böhm

XPath – Beispiele (3)//buch[./buchladen/@spezialität = @gattung]Alle Bücher, deren Literaturgattung gleich der Spezialität des Buchladens istbook[price<10]//titlebook[price<10]/*/namebook[title $ile$ "The B"]/titlebook/author[first-name and last-name]Was ist das Resultat?

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 19Klemens Böhm

XPath – Beispiele (4)book[author/first-name and author/last-name]/titlebook[author[first-name and last-name]]/titlebook[.//name $ieq$ „Plato“]/titlebook/@genre book[@genre="novel"]/titlebook[@genre=./author/@pipapo]/title(document("report1.xml")//action)[price<10][position()<=2]

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 20Klemens Böhm

XPath - Location PathsLocation Path besteht aus Location Steps,Location Step besteht aus

Achse,‘Node Test’,Prädikaten.

Beispiel:/descendant::figure[position() = 42]selektiert das 42. Bild im Dokument

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 21Klemens Böhm

absoluteLokator-Terme

XPath –absolute und relative Lokator-Terme

Kandidatenmengen, relativ zu Knoten #6:

root() 1id("foo“) 4child(…) 10, 11descendant(…) 10, 11, 13ancestor(…) 2, 1preceding(…) 5, 2, 1following(…) 10, 11, 13, 7,

3, 4, 8, 9, 12psibling(…) 5fsibling(…) 7

77

22

6655

44

88 99

33

11

1010 1111

1313

1212

ID="foo"ID="foo"

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 22Klemens Böhm

XPath – Zusammenfassung, AusblickWas wurde erreicht bis hierhin?

Sprache für Zugriffe entlang Pfaden,deklarativ.

Keine vollständige Querysprache:Joins,Aggregation,strukturierte Ergebnisse,Rekursion.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 23Klemens Böhm

Charakteristika von XML-Querysprachen

select-from-where mäßiger Aufbauder einfachen Anfragen,Pfadausdrücke.Anford.

dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 24Klemens Böhm

XQuery: FLWR-Ausdrücke (1)

Sukzessives Binden jeweils einer Variablen an das Ergebnis eines Pfadausdrucks

Einmaliges Binden jeweils einer Variablen an das Ergebnis eines Pfadausdrucks (ggf. Menge).

Bedingungen an die gebundenen Variablen (Selektion).

An die Variablen gebundene Werte, die die Bedingung erfüllen, eingebettet in die gewünschte Form eines XML-Dokuments.

Grundmuster FLWR (gesprochen „flower“)

for Bindungsliste

let Bindungsliste

where Bedingung

return Ergebnis

Datenbankeinsatz: XML – deklarativer Zugriff – 25Klemens Böhm

XQuery: FLWR-Audrücke (2)Syntax im Detail:for var1 in ausdruck1, ..., varn in ausdruckn

let varn+1 := ausdruckn+1, ..., varn+m := ausdruckn+m

where bedingungs-ausdruckorder by ausdruck ascending/descendingreturn xml-ausdruck

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 26Klemens Böhm

XQuery: FLWR-Audrücke (3)Sonderfälle:

for/let kann mehrfach auftretenVariablenbindungen können dann aufeinander aufbauenfor kann entfallenlet kann entfallenwhere kann entfallenorder by kann entfallenGeschachtelte Anfragen: überall, wo Ausdruck erwartet wird

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 27Klemens Böhm

Beispiel 1 (1)Query: “Alle Bücher (Jahr und Titel), die von Addison-Wesley nach 1991 publiziert wurden.” Beispiel-Dokument.Lösung in XQuery:<bib>

{for $b in document("http://www.bn.com")/bib/bookwhere $b/publisher = "Addison-Wesley"

and $b/@year > 1991 return

<book year={ $b/@year }> { $b/title } </book>

} </bib>

Was passiert, wenn mehrere title-Elemente?

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

e

Datenbankeinsatz: XML – deklarativer Zugriff – 28Klemens Böhm

Beispiel 1 (2)Erwähnenswert:

Pendant zur FROM-Klausel,Umgang mit Attributen,Pfadausdrücke in allen Anfrage-Bestandteilen.

Höhere Robustheit –z. B. Buch ohne publisher.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 29Klemens Böhm

Beispiel 1 (3)Angenommen, Anfrager kennt/weiß nicht:

die genaue Position der title-Objekte,welches Element den String “Addison-Wesley” enthält.

Mehr Flexibilität durch Pfadausdrücke.Beispiele:

$b//title(rekursiver Abstieg)$b/* = "Addison-Wesley" (Wildcard; Abstieg nur über eine Stufe)

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 30Klemens Böhm

Beispiel 2 (1)Query: “Für jedes Buch Titel und Autoren, in result-Element gruppiert.”Ergebnis.Lösung in XQuery:<results>

{ for $b in document("http://www.bn.com")/bib/bookreturn

<result> { $b/title } {

for $a in $b/author return $a

} </result> }

</results>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

e

Datenbankeinsatz: XML – deklarativer Zugriff – 31Klemens Böhm

Beispiel 2Erwähnenswert: Geschachtelte Gültigkeitsbereiche.

Alternative Lösung in XQuery – einfacher:<results>

{ for $b in document("http://www.bn.com")/bib/bookreturn

<result> { $b/title } { $b/author }

</result> } </results>

Was passiert, wenn mehrere title-Elementein einem book-Element?

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 32Klemens Böhm

Beispiel 3 (1)Query: “Von jedem Autor, der vorkommt, Name und Titel seiner Bücher, in result-Element gruppiert.”Lösung in XQuery:<results> { for $a in distinct-values(document("http://www.bn.com")//author) return

<result> { $a } { for $b in document("http://www.bn.com")/bib/bookwhere value-equals($b/author,$a) return $b/title }

</result> } </results>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 33Klemens Böhm

Beispiel 3 (2)Erwähnenswert:

Umstrukturierung des Dokuments, Join,built-in Funktionen als Teil der Sprache,value-equals() –Knoten müssen gleiche Strukturund Werte haben.Query-Engine vom FhG-IPSIkann mit ‚value-equals‘ nicht umgehen.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 34Klemens Böhm

Beispiel 4Query:“Wieviele top-level Sectionssind in book1 enthalten?”Lösung in XQuery:<top_section_count> { count(document("book1.xml")/book/section) } </top_section_count>

Erwähnenswert: Aggregation, Zählen von Dokumentbestandteilen.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 35Klemens Böhm

Beispiel 5 (1)Query: “Von allen Büchern mit mind. einem Autor Titel, die ersten beiden Autorenund ggf. leeres "et-al" Element.”Lösung in XQuery:<bib>

{ for $b in document("www.bn.com/bib.xml")//bookwhere count($b/author) > 0 return

<book> { $b/title } { for $a in $b/author[position()<=2] return $a } { if (count($b/author) > 2)then <et-al/> else () }

</book> } </bib>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 36Klemens Böhm

Beispiel 5 (2)Erwähnenswert:

Prädikate in Pfadausdrücken,Aggregationsfunktionen,dieses Mal in der where-Klausel,Bedingte Ausgabe.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 37Klemens Böhm

Beispiel 6 (1)Query:“Für alle Bücher, die Element enthalten, dessen Tag mit "or" endet, und die den String "Suciu" enthalten, Titel und dieses Element zurückliefern.”Lösung in XQuery:for $b in document("www.bn.com/bib.xml")//book,

$e in $b/*[contains(string(.), "Suciu")] where ends_with(local-name($e), "or") return

<book> { $b/title } { $e }

</book>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 38Klemens Böhm

Beispiel 6 (2)Erwähnenswert:

String-Funktionen,Übergang zwischen ‘Schema-Information’und Daten.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 39Klemens Böhm

Übergang Inhalt – Markup (1)Dokument:<biblio><book><title>Professor Unrath</title><year>1913</year>

</book><book><title>Die Blechtrommel</title><year>1970</year>

</book><book><title>Einführung …</title><year>2001</year>

</book><article><title>Pipapo …</title><year>2000</year>

</article>...</biblio>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Ergebnis:<publication><type>book</type><title>Einführung…</title></publication><publication><type>article</type><title>Pipapo …</title>

</publication>1.

2.

Datenbankeinsatz: XML – deklarativer Zugriff – 40Klemens Böhm

Übergang Inhalt – Markup (2)Unser Anliegen: Dokumentinhalt wird zu Struktur-Information.(Hier nicht Teil des Markups des Ergebnisses,sondern Bestandteil der Anfrage.)Query – Ausschnitt:let $step := document("beispiel.xml")/publication/type[1]/text(),

$x := document("evtl_anderes.xml")/biblio/$stepreturn

$x/nextStep

Weiterer neuer Aspekt: Binden von Variablen an Zwischenergebnis.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

e

Datenbankeinsatz: XML – deklarativer Zugriff – 41Klemens Böhm

Übergang Inhalt – Markup (3)

Anfrage:<publication>{for $v in document(biblio_document.xml)/biblio/* where $v/year > 1989return<type>{local-name($v)}</type>$v/title

}

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 42Klemens Böhm

Beispiel 7 (1)Query: “Finde den minimalen Preis jedes Buchs, in Form eines "minprice" Elements mit Buchtitel als Attribut "title".”Lösung in XQuery:<results>

{ let $doc := document("prices.xml") for $t in distinct-values($doc//book/title) let $p := $doc//book[title = $t]/price return

<minprice title={ $t/text() }> <price>{ min(decimal($p/text())) }</price>

</minprice> } </results>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

e

Datenbankeinsatz: XML – deklarativer Zugriff – 43Klemens Böhm

Beispiel 7 (2)Erwähnenswert:

Binden von Variablen an Zwischenergebnis.Variable entspricht Menge von Elementen.Anford.

dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 44Klemens Böhm

Beispiel 7 (3)<results>

{ let $doc := document("prices.xml") for $t in distinct-values($doc//book/title) let $p := $doc//book[title = $t]/price return

<pipapo>{ $p }</pipapo> } </results>Wie sieht die Ausgabe einer Menge aus?

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 45Klemens Böhm

Beispiel 7 (4)Wie sieht die Ausgabe einer Menge aus?<results>

<pipapo><price>65.95</price><price>65.95</price>

</pipapo><pipapo>

<price>65.95</price><price>65.95</price>

</pipapo><pipapo>

<price>34.95</price><price>39.95</price>

</pipapo></results>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 46Klemens Böhm

Filtering

Vor dem Filtering: $doc Nach dem Filtering: filter($doc//(A | B))

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 47Klemens Böhm

Beispiel 8Query: “Geschachteltes Inhaltsverzeichnisfür book1, das Sections und ihre Titel enthält. Original-Attribute jedes section-Elementsins Inhaltsverzeichnis übernehmen.”Lösung in XQuery:<toc> { let $b := document("book1.xml") return

filter($b//section | $b//section/title | $b//section/title/text()) } </toc>

Erwähnenswert: Filter.Wurzel wird hier neu erzeugt.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 48Klemens Böhm

Beispiel 9Query:“Teil des Dokuments zwischen dem erstenund dem zweiten incision-Element.”Lösung in XQuery:<critical_sequence> {

let $proc := //procedure[1] for $n in $proc//node() where $n follows ($proc//incision)[1]

and $n precedes ($proc//incision)[2] return $n

}</critical_sequence> Erwähnenswert: Reihenfolge in Queries.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 49Klemens Böhm

Beispiel 10Zugrundeliegende DTD.Query:“Namen aller User, die ein Gebotfür jedes Item abgegeben haben.”Lösung in XQuery:<frequent_bidder> { for $u in document("users.xml")//user_tuplewhere

every $item in document("items.xml")//item_tuplesatisfies

some $b in document("bids.xml")//bid_tuple satisfies ($item/itemno = $b/itemno and $u/userid =

$b/userid) return

$u/name } </frequent_bidder>Erwähnenswert: forall- und exists-Quantifizierung.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 50Klemens Böhm

Beispiel 11 (1)Beispieldokument:<?xml version="1.0" encoding="ISO-8859-1"?> <partlist>

<part partid="0" name="car"/> <part partid="1" partof="0" name="engine"/> <part partid="2" partof="0" name="door"/> <part partid="3" partof="1" name="piston"/> <part partid="4" partof="2" name="window"/> <part partid="5" partof="2" name="lock"/> <part partid="10" name="skateboard"/> <part partid="11" partof="10" name="board"/> <part partid="12" partof="10" name="wheel"/> <part partid="20" name="canoe"/>

</partlist>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 51Klemens Böhm

Beispiel 11 (2)Zielstruktur:<parttree>

<part partid="0" name="car"> <part partid="1" name="engine">

<part partid="3" name="piston"/> </part> <part partid="2" name="door">

<part partid="4" name="window"/> <part partid="5" name="lock"/>

</part> </part> <part partid="10" name="skateboard">

<part partid="11" name="board"/> <part partid="12" name="wheel"/>

</part> <part partid="20" name="canoe"/>

</parttree>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 52Klemens Böhm

Beispiel 11 (3)Lösung in XQuery:define function one_level (element $p) returns element

{ <part partid={ $p/@partid } name={ $p/@name } >

{ for $s in document("data/parts-data.xml")//partwhere $s/@partof = $p/@partidreturn one_level($s) }

</part> }

<parttree> { for $p in document("data/parts-data.xml")//part

[empty(@partof)] return one_level($p) }

</parttree>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 53Klemens Böhm

Beispiel 11 (4)Erwähnenswert: Umstrukturierung von Dokumenten, rekursiv.Rekursionsverankerung?Fingerübung hierzu: Blatt-Elementemit der korrekten Syntax.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 54Klemens Böhm

Beispiel 12 (1)Zugrundeliegende DTD:<!DOCTYPE census [ <!ELEMENT census (person*)> <!ELEMENT person (person*)> <!ATTLIST person name ID #REQUIRED

spouse IDREF #IMPLIED job CDATA #IMPLIED > ]>

Parent-Child Beziehungmodelliert mittels Containment.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 55Klemens Böhm

Beispiel 12 (2)Query: “Finde den Gatten von Martha.”Ausschnitt des Dokuments:<person id="a" name="Arthur"> … </person> <person id="m" name="Magda" spouse="a"> … </person>

Lösung in XQuery:<result>

{ for $m in document("census.xml")//person[@name = "Martha"]

return shallow($m/@spouse=>person) } </result>shallow – gibt den Knoten zurück, aber nicht seine Kinder.Erwähnenswert: Queries über Hyperlinks.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 56Klemens Böhm

ZusammenfassungXQuery – Querysprache für XML,Pfadausdrücke/XPath als Bestandteile von XQuery,scheint als Standard akzeptiert zu werden,Umstrukturierung von Dokumenten.Nicht:

Volltext-Retrieval, Updates,

ansonsten aber alles Wesentliche vorhanden.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

Datenbankeinsatz: XML – deklarativer Zugriff – 57Klemens Böhm

XSL – EinleitungZiel: Transformation von XML-Dokumenten,Transformation = Erzeugung von Ziel-Dokumenten mit anderer Struktur,Beispiele: Zeilen und Spalten in Tabelle vertauschen, Ausblenden bestimmter Information.Mit Variablen gleiche Ausdrucksmächtigkeit wie XQuery und andere Sprachen, ohne Variablen keine Joins.M. E. manchmal umständlicher in der Benutzung, aber sehen Sie selbst...

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 58Klemens Böhm

Template RulesStylesheet besteht aus Template Rules. Template Rules spezifizierendie Dokumenttransformation.Template Rule besteht aus zwei Teilen:

Pattern, das mit dem Source Tree gematcht wird,Template, das instanziiert wird, und diese Instanziierungist Teil des Result Trees. Template – Struktur, die den Output des Transformationsschrittes spezifiziert.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 59Klemens Böhm

Einfache Template Rule<xsl:template match="/">

<HTML><HEAD><TITLE><xsl:value-of select="bookstore/book/title"/></TITLE></HEAD><BODY>Hello world.</BODY>

</HTML></xsl:template>

Template

Pattern

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 60Klemens Böhm

Einfache Template Rule –Erläuterungen (1)

XSL-Stylesheets sind XML-Dokumente.Interpreter geht durch das Dokument.Es gibt ein ‚aktuelles‘ Element.xsl:template und xsl:value-ofsind XSL-Kommandos.XSL verwendet XML-Syntax und Namespace-Mechanismus.xsl:template gibt an, daß es sich um Template Rule handelt./ ist das Pattern.Das aktuelle Element muß die Wurzel sein. Patterns mit komplexerer Struktur sind möglich.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 61Klemens Böhm

Einfache Template Rule –Erläuterungen (2)

Template erscheint im Output-Dokument.HEAD etc. im Template ist HTML-Markup.Parameter select von xsl:value-ofidentifiziert das, was ausgegeben werden soll.select-Parameter ist Pfad-Ausdruck.Es muß natürlich nicht zwangsläufig HTML erzeugt werden.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 62Klemens Böhm

XSL – KonzepteKomplexe Suchmuster sind möglich.Beispiele:

<xsl:value-of select="bookstore/*/title"/>

<xsl:value-of select ="//title"/>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 63Klemens Böhm

Motivation für weitere KonzepteBeispiel-Stylesheet von eben zeigt nichtdie ganze Ausdrucksmächtigkeit von XSL.Beispiel:

Wir wollen mehrere Elemente konvertieren, z. B. alle Titel kursiv und alle Namen fett, egal wo im Dokument sie vorkommen.Rest eins-zu-eins im Zieldokument übernehmen.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 64Klemens Böhm

Template Rules<xsl:template match="title"><I> <xsl:apply-templates/>

</I></xsl:template>

Erläuterung:xsl:apply-templates bedeutet ‚Transformiere Inhalt des aktuellen Elements gemäß der Regel, die anwendbar ist‘.Regelanwendung löst Anwendung weiterer Regel aus.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 65Klemens Böhm

Beispiel-Spreadsheet<xsl:stylesheet version="1.0">...xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">...<HTML><HEAD><TITLE>Beispiel</TITLE></HEAD><BODY><xsl:apply-templates

select="node()"/></BODY></HTML>

</xsl:template>

<xsl:template match="title"><I>

<xsl:apply-templates/> </I>

</xsl:template>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 66Klemens Böhm

Beispiel-Spreadsheet Fortsetzung<xsl:template match="node()">

<xsl:copy><xsl:apply-templates select="node()"/>

</xsl:copy> </xsl:template>

<xsl:template match="text()"><xsl:value-of select="."/>

</xsl:template>

</xsl:stylesheet>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 67Klemens Böhm

<?xml version='1.0'?><bookstore>

<book genre="autobiography"><title>The Autobiography of

Benjamin Franklin</title><author>

<first-name>Benjamin</first-name><last-name>Franklin</last-name>

</author><price>8.99</price>

</book><book genre="novel">

…</book>

</bookstore>

Beispiel-DokumentAnford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 68Klemens Böhm

<HTML><HEAD><TITLE>Beispiel</TITLE></HEAD>

<BODY><bookstore><book genre="autobiography">

Ergebnis der Transformation (1)Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 69Klemens Böhm

<HTML><HEAD><TITLE>Beispiel</TITLE></HEAD>

<BODY><bookstore><book genre="autobiography">

<I>The autobiographyof Benjamin Franklin</I>

<author>...

Ergebnis der Transformation (2)Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 70Klemens Böhm

Conflict Resolution (1)Es kann i. a. sein, daß ein Knotenmehrere Template Rules matcht.Default Priority ist wie folgt:

Importierte Regelnhaben niedrigere Priorität,Attribut priority,Spezifischere Patterns haben höhere Prioritätals weniger spezifische.Beispiel: Test, ob irgendein Knoten existiert, ist weniger spezifisch als Test für Knoten mit konkretem Namen.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 71Klemens Böhm

Conflict Resolution (2)Wenn es mehreregleichberechtigte Regeln gibt, ist dies ein Fehler.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 72Klemens Böhm

Beispiel-Spreadsheet (1)<xsl:stylesheetxmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">

<xsl:template match="/"><HTML><HEAD><TITLE>Bookstore Inventory</TITLE>

</HEAD><BODY><H1>Bookstore Inventory</H1><UL><xsl:for-each select="bookstore/book"><LI><xsl:apply-templates /></LI></xsl:for-each></UL>

</BODY></HTML>

</xsl:template>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 73Klemens Böhm

Beispiel-Spreadsheet (2)<xsl:template match="book"><DIV><H2>

<xsl:value-of select="title"/></H2><xsl:apply-templates/>

</DIV></xsl:template>

<xsl:template match="author"><I><xsl:apply-templates /></I>

</xsl:template>

<xsl:template match="name"><B><xsl:apply-templates /></B></xsl:template>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 74Klemens Böhm

Beispiel-Spreadsheet (3)<xsl:template match="node()">

<xsl:copy><xsl:apply-templates select="node()"/></xsl:copy>

</xsl:template>

<xsl:template match="text()"><xsl:value-of select="."/>

</xsl:template>

</xsl:stylesheet>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 75Klemens Böhm

<HTML><HEAD>

<TITLE>Bookstore Inventory</TITLE></HEAD>

<BODY><H1>Bookstore Inventory</H1>...

Ergebnis der Transformation (1)Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 76Klemens Böhm

<HTML><HEAD>

<TITLE>Bookstore Inventory</TITLE></HEAD>

<BODY><H1>Bookstore Inventory</H1>

<UL><LI>

<DIV><H2>

The Autobiography…</H2>

...

Ergebnis der Transformation (2)Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 77Klemens Böhm

<HTML><HEAD><TITLE>Bookstore Inventory</TITLE>

</HEAD><BODY>

<H1>Bookstore Inventory</H1><UL><LI><DIV>

<H2>The Autobiography…

</H2><I>

<first-name>Benjamin</first-name><last-name>Franklin</last-name>

</I><price>8.99</price>

</LI>...

Ergebnis der Transformation (3)Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 78Klemens Böhm

Sortierung und bedingter OutputSortierung:<xsl:for-each select="bookstore/book">

<xsl:sort select="price"/>

<xsl:sort select="author - number(price)"/>

Bedingter Output:<xsl:if author="@nationality[.='U.S.']">*

</xsl:if>

<xsl:choose><xsl:when test=…><xsl:when test=…>…

</xsl:choose>

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 79Klemens Böhm

Methodenaufruf im Template im Stylesheet:<xsl:eval>formatNumber(invoiceTotal(this), "$#,##0.00")</xsl:eval>Methodendefinition:<xsl:script><![CDATA[function invoiceTotal(invoice) {items = invoice.selectNodes("items/item");var sum = 0;for (var item = items.nextNode(); item;item = items.nextNode()) { …return sum;

} …]]></xsl:script>

Einbettung von DOM-Methodenin XSL-Stylesheets

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 80Klemens Böhm

XSL – ZusammenfassungZiel – Mechanismus für Transformationen.Regelbasierter Mechanismus: Aufbau der Regeln.Regeln können geschachtelt sein.“Kontrollstrukturen”, die Regelanwendung flexibler machen.

Anford. dekl. Zugriff

Pfade

XQuery

XSLT

- Einleitung

- TemplateRules

- Beispiel

- Conflicts

- Kontroll-strukturen

- Methoden

- Schluß

Datenbankeinsatz: XML – deklarativer Zugriff – 81Klemens Böhm

LiteraturData on the Web: from Relations to Semistructured Data and XMLvon Serge Abiteboul, u. a. Morgan Kaufmann (21. Oktober 1999) – hastig geschrieben, stellenweise brauchbar –Information zu XML Schema:http://www.xml.com/pub/a/2001/06/06/schemasimple.html– scheint nützlich zu sein –XQuery Use Cases:http://www.w3.org/TR/xmlquery-use-cases– wurde hier 1:1 verwendet –http://www.w3.org/TR/xslt– recht gut lesbar, verglichen mit anderen W3C Spezifikationen –http://www.w3.org/TR/REC-xml-names/– dto. –

Datenbankeinsatz: XML – deklarativer Zugriff – 82Klemens Böhm

Prüfungsfragen, beispielhaft<Einfache XPath-Ausdrücke, XQuery-Statementsund XSLT-Stylesheets hinschreiben können.>Welche Unterschiede zwischen Pfadenin XML-Querysprachenund Querysprachen für OODBMSe? (FallsLetzteres bekannt.)Warum braucht man noch eine Querysprache, gegeben Pfadausdrücke+ DOM-Methode für ihre Evaluierung?Welche Anforderungen an Anfragesprachenkennen Sie? Inwieweit erfüllt XQuerydiese Anforderungen?

XML –Überblick

DTDs

Anwend.-entwicklung

Namespace

XML Schema

Anford. dekl. Zugriff

Pfade

XQuery

XSLT