kapitel 9: deklarativer zugriff auf semistrukturierte...
TRANSCRIPT
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