und Transformationssprachen

Werbung
XML-Abfrage- und Transformationssprachen
(Weiter-) Entwicklung der Standards
bisher betrachtet
XQuery 1.0
XPath 1.0
XPath 2.0
XSLT 1.0
XSLT 2.0
1999
2007
142
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
Warum weiter- bzw. neuentwickeln?
- XML ist weitverbreitetes Datenaustausch und Datenspeicherformat
- State of the Art
• XPath 1.0 ist „nur“ Lokatorsprache
• XSLT 1.0 ist Transformationssprache
• „vollwertige“ Abfragesprache (a la SQL) fehlt
- XQuery soll Möglichkeit bieten einfach, flexibel und effizient auf
Informationen in XML-Daten(-banken) zuzugreifen
143
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XML-Abfragesprachen
XML-Schemasprachen
XPath
DTD
XQuery
XML-Transformationssprache
XML-Schema
XSLT
...
XML
Relationale
DBMS
144
XML in DBMS
Dedizierte
XML-DBMS
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
Weiterentwicklungen in Beziehung zueinander
- XPath 2.0 bildet die Basis für die Empfehlungen XQuery 1.0 und XSLT 2.0
- alle 3 Standards wurden gemeinsam am 23.01.2007 verabschiedet
XQuery 1.0
XPath 2.0
145
+
XSLT 2.0
XPath 2.0
XQuery 1.0
and XPath 2.0
Data Model
(XDM)
+
XQuery 1.0
and XPath 2.0
Formal
Semantics
+
XQuery 1.0
and XPath 2.0
Functions and
Operators
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Überblick über die Weiterentwicklungen
- Erweiterung der Datenmodells
• Sequenzen
• umfangreicheres Typkonzept
- zusätzliche Formen von Ausdrücken
- neue Funktionen und Operatoren
146
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Erweiterung des Datenmodells
- Sequenz
• (in gewisser Weise) Ersatz für Knotenmengen
• ist keine Menge, daher Duplikate möglich (vgl. Knotenmenge)
• Notation
- Sequenz wird üblicherweise (nicht verpflichtend) durch
umschließende Klammerung mit „(“ und „)“ definiert
- Sequenzinhalte (Items) werden durch Kommas separiert
(1, vorlesung/@titel, "Ein Text")
147
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Erweiterung des Datenmodells
- Zusammensetzung von Sequenzen
Sequenz
(1, vorlesung/@titel, "Ein Text")
148
Item
Item
Item
(atomarer Wert –
Integer)
(Knoten –
Attributknoten)
(atomarer Wert –
String)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Erweiterung des Datenmodells
- Besonderheiten von Sequenzen
• leere Sequenz ()
- ist ungleich „Nichts“
• einelementige Sequenz
- ist gleich dem enthaltenen Item
(xyz) = xyz
• Kombination von Sequenzen
- ergibt stets eine „abgeflachte Sequenz“
- daher keine Verschachtelung möglich
(1,(2,3)) = (1,2,3)
149
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Erweiterung des Datenmodells
- Pfadausdruck
• Weiterentwicklung des Lokalisierungspfads
• besteht aus mehreren durch „/“ getrennten Lokalisierungsschritten
- Lokalisierungsschritt setzt sich zusammen aus
• Achse, Knotentest und (optional) Prädikaten (vgl. XPath 1.0)
• einem beliebigen Ausdruck (bspw. Funktionsaufruf)*
- Besonderheiten (vgl. mit XPath 1.0)
• Achse namespace zwar noch verfügbar, aber deprecated
• Bezeichnung für XPath 1.0 Wurzelknoten nun Dokumentknoten
* Voraussetzung dafür ist jedoch, dass das Ergebnis des vorangehenden Lokalisierungsschrittes eine Sequenz von Knoten ist
150
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Erweiterung des Datenmodells
- analog zu XPath 1.0 Repräsentation von XML-Dokumenten als Baum mit
verschiedenartigen Knoten
- Knotentypen
• Dokumentknoten
• Elementknoten
• Attributknoten
• Namensraumknoten
• Verarbeitungsanweisungsknoten
• Kommentarknoten
• Textknoten
151
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Erweiterung des Datenmodells
- Umgang mit Duplikaten
• Sequenz ≠ Menge
• Duplikate sind daher erlaubt
(1,1,2)
(1,1,2)
• Aber: Duplikate in Zwischenergebnissen werden vor Abarbeitung eines
nachfolgenden Lokalisierungsschrittes eliminiert.
(vorlesung, vorlesung)
(MustermannMax58NormalverbraucherOtto610,
MustermannMax58NormalverbraucherOtto610)
(vorlesung, vorlesung)/@titel
152
(XML ...)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Erweiterung des Datenmodells
- sehr umfangreiches Typkonzept im Gegensatz zu XPath 1.0 (Knotenmenge,
Zahl, Zeichenkette und Wahrheitswert)
- Basis für XPath 2.0 Typsystem ist XML-Schema
• Übernahme der Built-in Datentypen (inklusive der 19 primitiven und den
davon abgeleiteten Datentypen) von XML-Schema
• Ergänzung um 5 weitere Typen
- Möglichkeit zur Verwendung eigener per Restriktion von den vorhandenen
Datentypen abgeleiteter Typen
153
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Typkonzept
Legende
Union types
Types defined by XPath 2.0
Item type
Node type
User defined types
(user defined atomic types are not shown)
Built-in atomic types
Built-in complex types
Built-in simple, non-atomic types
Built-in primitv types (XML-Schema)
154
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Typkonzept
- Sequenztypen
setzt sich zusammen aus Itemtyp und Kardinalität
(Ausnahme leere Sequenz – empty-sequence())
- Itemtypen
• Knotentyp (element(), attribute(), ...) oder
• atomarer Typ (xs:string, xs:integer, ...)
- Kardinalitäten
• "*" – beliebig häufiges Vorkommen, einschließlich keinmal
• "+" – mehrfaches Vorkommen, mindestens einmal
• "?" – optionales Vorkommen, maximal einmal
• keine Angabe – genau einmaliges Vorkommen
155
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – Typkonzept
- Sequenztypen
• Prüfung auf bestimmten Typ bspw. möglich per
instance of [Sequenztyp]
• Beispiele
(vorlesung/teilnehmer instance of element())
(false)
(4711 instance of xs:integer)
(true)
156
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- XPath Kommentare in Ausdrücken
• keine Bedeutung für die Auswertung von Ausdrücken, daher auch keine
Möglichkeit XPath Kommentare zu selektieren (vgl. Kommentarknoten)
• durch Klammerung zuzüglich Doppelpunkt gekennzeichnet
((:erstes Item der Sequenz:) vorlesung/teilnehmer)
• an (nahezu) beliebiger Stelle verwendbar
(vorlesung/(:auch hier erlaubt:)teilnehmer)
(vorlesung/teil(:hier nicht erlaubt:)nehmer)
• Schachtelung möglich
((:Ein (:Kommentar:) im Kommentar:) vorlesung)
157
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- Bedingungsausdrücke
• mächtiges Konstrukt (vgl. Prädikate)
• Bedingungen nach folgendem Muster spezifizierbar
if (condition) – Bedingung definieren
then (expression) – auszuwertender Ausdruck für den Fall,
dass Bedingung erfüllt ist
else (expression) – auszuwertender Ausdruck für den Fall,
dass Bedingung nicht erfüllt ist
• Angabe von else-Bedingung ist verpflichtend
• Klammerung der expression‘s ist nicht notwendig
158
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- Bedingungsausdrücke am Beispiel
• alle Namen (vollständig) der Teilnehmer ausgeben und mögliche zweite
Vornamen berücksichtigen
(vorlesung/teilnehmer/
concat(vorname, " ", (
if (zweiter_vorname)
then concat (zweiter_vorname, " ")
else ""
), name))
(Max Mustermann,
Otto Normalverbraucher)
159
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- for-Ausdrücke
• ermöglichen „loopen“ bzw. interieren über Sequenzen mithilfe von
Variablen
• nach folgendem Muster spezifizierbar
for $meineVariable in expression
return expression
definiert Rückgabeergebnis
definiert Iterationsvariable(n) und die
bindende Sequenz („binding sequence“)
160
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- for-Ausdrücke
• Variablen werden durch Präfix $ und einen frei wählbaren Bezeichner
gekennzeichnet
• Mehrere Variablen
- Verwendung beliebig vieler (mindestens einer) Variable in forAusdrücken durch Kommas separiert möglich
- Abarbeitung entspricht dann dem kartesischem Produkt
(for $var1 in (1, 2, 3),
$var2 in ("a", "b")
return concat($var1, $var2))
161
(1a,
1b,
2a,
2b,
3a,
3b)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- for-Ausdruck am Beispiel
• die Anzahl der eingeschriebenen Studenten pro Studienfach ermitteln
(for $var1 in
distinct-values(vorlesung/teilnehmer/studienfach)
return
concat(
"Studienfach ", $var1, ": ",
count(vorlesung/teilnehmer[studienfach = $var1]),
" Teilnehmer"))
(Studienfach 8: 1 Teilnehmer,
Studienfach 10: 1 Teilnehmer)
162
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- Quantifizierungsausdrücke (some und every)
• ermöglichen Prüfungen auf notwendiges Erfüllen von „Bedingungen“
(ebenfalls unter Nutzung von Variablen)
- some – Prüfung mindestens einmal erfüllt
- every – Prüfung für alle erfüllt
• Ergebnis ist ein Wahrheitswert
• nach folgendem Muster spezifizierbar
quantifier $meineVariable in expression
satisfies expression
definiert Prüfausdruck
definiert Variable(n) und die bindende
Sequenz („binding sequence“)
163
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – zusätzliche Formen von Ausdrücken
- Quantifizierungsausdrücke (some und every) am Beispiel
• beginnt der Name aller Vorlesungsteilnehmer mit „Muster“?
(every $var1 in vorlesung/teilnehmer
satisfies starts-with($var1/name, "Muster"))
(false)
• beginnt der Name mindestens eines Vorlesungsteilnehmers mit „Muster“?
(some $var1 in vorlesung/teilnehmer
satisfies starts-with($var1/name, "Muster"))
(true)
164
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- arithmetische Operatoren
• +, -, *, div, mod, idiv
• idiv ≙ ganzzahliger Division (vgl. div in XPath 1.0)
(5 idiv 2)
(2)
• div ≙ „normaler“ Division
(5 div 2)
(2,5)
- boolesche Operatoren
• and, or
165
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- Vergleichsoperatoren
• gezieltere und transparentere Vergleiche als in XPath 1.0
(vor allem wegen erweitertem Typsystem und Sequenzkonzept)
• Sequenzvergleiche
- Ergebnis ist true, wenn mindestens ein Item aus der einen Sequenz
den Vergleich mit einem Item aus der anderen Sequenz erfüllt
(vgl. Knotenmengenvergleiche bei XPath 1.0)
- Operatoren: =, !=, <, >, <=, >=
(1, 2, 3) = (1, 2, 3)
166
(true)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- Vergleichsoperatoren
• Einzelwertvergleiche
- Operatoren: eq, ne, lt, gt, le, ge
(logisch wie =, !=, <, >, <=, >=)
(4 lt 5 and 8 eq 8)
(true)
• Identitätsvergleich von Knoten per is
- vergleicht zwei Knoten hinsichtlich ihrer Identität
(vorlesung/teilnehmer[@matrikel = 4711]
is vorlesung/teilnehmer[@matrikel = 4711])
(true)
167
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- Mengenoperatoren
• zur Kombination von Knotensequenzen
• union (vgl. „|“ bei Xpath 1.0)
Vereinigung der Sequenzen
• intersect
Schnittmenge der Sequenzen
• except
Ausschluss einer Sequenz
168
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- Mengenoperatoren
• union
(vorlesung/teilnehmer[@matrikel = "4711"]/@matrikel
union
vorlesung/teilnehmer[@matrikel = "4736"]/@matrikel)
(4711, 4736)
• intersect
(vorlesung/teilnehmer[@matrikel = "4711"]/@matrikel
intersect
vorlesung/teilnehmer/@matrikel)
(4711)
169
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- Mengenoperatoren
• except
(vorlesung/teilnehmer/@matrikel
except
vorlesung/teilnehmer[@matrikel = "4736"]/@matrikel)
(4711)
170
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- sonstige Operatoren
• Range-Operator to
- zur Erzeugung einer Sequenz von aufsteigenden Integer-Zahlen
(1 to 5)
(1, 2, 3, 4, 5)
- Kombinationen möglich
(1 to 5, 7, 9 to 12)
(1, 2, 3, 4, 5, 7, 9, 10, 11, 12)
- absteigende Sequenzen lassen sich mit Hilfe der reverseFunktion erzeugen
reverse(1 to 5)
171
(5, 4, 3, 2, 1)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- sonstige Operatoren
• Typabgleiche instance of
- Prüfung auf bestimmten Sequenztyp
(4711 instance of xs:integer)
(true)
• Typkonvertierung cast as
- Durchführung zulässiger Typkonvertierungen
(4711 cast as xs:string instance of xs:integer)
(false)
- Zulässigkeit prüfbar per castable as
172
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- weitreichende Erweiterung der Funktionen aus XPath 1.0
- Funktionen durch Namensraumspräfix fn gekennzeichnet
(Angabe optional, da per Default fn)
- Zugriffsfunktionen (Accessors)
• node-name
gibt den (qualifizierten) Namen eines Knotens zurück
(vorlesung/teilnehmer[@matrikel = "4711"]/*/node-name(.))
(name, vorname, semester, studienfach)
• data
transformiert eine Sequenz von beliebigen Items in eine Sequenz mit
nur atomaren Werten
173
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- arithmetische Funktionen
• min, max
ermittelt das Minimum bzw. Maximum von einer Sequenz
(min((3,1,7,2)))
(1)
(max((3,1,7,2)))
(7)
• avg
berechnet den Durchschnitt der Werte von einer Sequenz
(avg(vorlesung/teilnehmer/semester))
174
(5.5)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- Datum- und Zeitfunktionen
• current-dateTime
gibt einen aktuellen Zeitstempel zurück
(max((3,1,7,2)))
(2012-11-13T09:55:46.106Z)
• year-from-dateTime
extrahiert aus einem Zeitstempel die Jahresangabe
(year-from-dateTime(
xs:dateTime("2012-11-13T09:55:46.106Z")
))
(2012)
175
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
- Sequenzfunktionen
• subsequence
extrahiert einen Teil einer Sequenz) anhand einer Startposition und
einer (optionalen) Länge der Subsequenz
(subsequence((10 to 20), 4, 3))
(13, 14, 15)
• index-of
- ermittelt die Position(en) eines Items in einer Sequenz
(index-of((1,2,5,3,5,7), 5))
(3, 5)
• distinct-values
• reverse
176
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0 – neue Funktionen und Operatoren
es gibt noch viel mehr…
(http://www.w3.org/TR/xpath-functions/)
177
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XPath 2.0
178
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XML Query Language (XQuery)
- eine auf XPath 2.0 aufbauende deskriptive Abfragesprache für XML-Daten
(vgl. SQL für relationale Daten)
- XQuery erweitert XPath 2.0 um folgende Aspekte
• FLOWR-Ausdrücke
• Konstruktoren zur Erzeugung von Knoten
• Möglichkeiten zur Modularisierung (bspw. Auslagerung selbstdefinierter
Funktionen in XQuery-Module – meist xqm-Dateien)
• zusätzliche Formen von Ausdrücken (bspw. Validierungsausdrücke)
SQL
XML-QL
XPath
OQL
Lorel
UnQL
179
XQL
Quilt
XQuery
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- Zusammensetzung der FLWOR-Ausdrücke (gesprochen „flower“)
• For – definiert eine Variable, die eine Liste von Elementen durchläuft
• Let – definiert eine Variable, deren Wert eine ganze Liste von Elementen ist
• Where – filtert das Ergebnis (ausgewählten Elemente) anhand einer Bedingung
• Order by – sortiert das Ergebnis
• Return – liefert das Ergebnis als Sequenz in der angegebenen Form zurück
- mindestens eine for- oder let-Klausel, sowie die return-Klausel muss in
einem gültigen FLWOR-Ausdruck enthalten sein
- weitere Klauseln (where und order by) sind optional
- vgl. SELECT ... FROM ... WHERE ... ORDER BY
180
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- for- und let-Klausel
• in for-Klausel wird eine Variable definiert, die an jedes Element (Item)
der Sequenz einzeln gebunden wird (per in)
• in let-Klausel wird eine Variable definiert, die an die ganze Sequenz
gebunden wird (per :=)
for $var1 in (1,2)
let $var2 := ("a","b")
return <tuple>
<for_var>{$var1}</for_var>
<let_var>{$var2}</let_var>
</tuple>
181
(<tuple>
<for_var>1</for_var>
<let_var>a b</let_var>
</tuple>,
<tuple>
<for_var>2</for_var>
<let_var>a b</let_var>
</tuple>)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- Verwendung mehrere Variablen
• werden in for-Klausel entweder durch Komma separiert oder durch
mehrfache Verwendung der Klausel definiert
• Abarbeitung erfolgt durch Bildung des Kreuzprodukts
for $var1 in (1,2)
for $var2 in (3,4)
return <tuple>
<for1_var>{$var1}</for1_var>
<for2_var>{$var2}</for2_var>
</tuple>
(<tuple><for1_var>1</for1_var><for2_var>3</for2_var></tuple>,
<tuple><for1_var>1</for1_var><for2_var>4</for2_var></tuple>,
<tuple><for1_var>2</for1_var><for2_var>3</for2_var></tuple>,
<tuple><for1_var>2</for1_var><for2_var>4</for2_var></tuple>)
182
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- Verwendung mehrere Variablen
• werden in let-Klausel entweder durch Komma separiert oder durch
mehrfache Verwendung der Klausel definiert
• Abarbeitung erfolgt unabhängig von anderen „let-Variablen“ und
daher durch Zuweisung der ganzen Sequenz an die Variable
let $var1 := (1,2)
let $var2 := (3,4)
return <tuple>
<let1_var>{$var1}</let1_var>
<let2_var>{$var2}</let2_var>
</tuple>
(<tuple><let1_var>(1,2)</let1_var><let2_var>(3,4)</let2_var></tuple>)
183
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- Gültigkeitsbereich der Variablen
• der Wert einer Variablen, die in einer for- oder let-Klausel gebunden
wurde, ist für alle nachfolgenden Klauseln (unverändert) sichtbar
let $var1 := 0
for $var2 in ("a","b")
let $var1 := $var1 + 1
return <tuple>
<let_var>{$var1}</let_var>
<for_var>{$var2}</for_var>
</tuple>
<tuple><let_var>1</let_var><for_var>a</for_var></tuple>
<tuple><let_var>1</let_var><for_var>b</for_var></tuple>
• Beispiel zeigt gleichzeitig noch Überdeckung von Variablen
- „neue“ Variable $var1 überdeckt „alte“ Variable $var1
- daher im Ergebnis stets der Wert 1 für die Variable $var1
184
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- Erkurs: Laden von Dokumenten mit doc()
• lädt ein XML-Dokument von einer übergebenen Uri
• Dokument kann an Variable (bspw. per let-Klausel) gebunden werden
let $document :=
doc("http://www.informatik.uni-jena.de/dbis/lehre/ws2012/xml/Beispiel.xml")
return $document
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
<teilnehmer matrikel="4736">
<name>Normalverbraucher</name>
<vorname>Otto</vorname>
<semester>6</semester>
<studienfach>10</studienfach>
</teilnehmer>
</vorlesung>
185
Hinweis:
weitere Beispiele verwenden z. T.
Variable $document (let-Klausel
aus Kompaktheitsgründen
vernachlässigt)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- where-Klausel
• ermöglicht die gezielte Einschränkung der durch die for- und letKlausel in den jeweiligen Variablen gehaltenen (Zwischen-)Ergebnisse
• anschließende return-Klausel wird nur für die verbleibenden
Elemente ausgewertet
for $vorl in $document/vorlesung
let $t_zahl := count($vorl/teilnehmer)
where $t_zahl > 0
return data($vorl/@titel)
XML ...
186
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- where-Klausel
• weiteres Beispiel mit Quantifizierungsausdrücken
In welchen Vorlesungen ist mindestens ein Teilnehmer im 6ten Semesters?
for $vorl in $document/vorlesung
where some $t_sem in count($vorl/teilnehmer[semester = 6])
satisfies $t_sem > 0
return data($vorl/@titel)
XML ...
187
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- where-Klausel
• weiteres Beispiel mit Quantifizierungsausdrücken
Welche Teilnehmer heißen mit zweiten Vornamen nur „Moritz“?
Welche Teilnehmer, die einen zweiten Vornamen haben, heißen
mit zweiten Vornamen nur „Moritz“?
for $teiln in $document/vorlesung/teilnehmer
where every $zw_name in $teiln/zweiter_vorname
satisfies $zw_name = "Moritz"
return data($teiln/@matrikel)
4711 4736
188
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- order by-Klausel
• sortiert das Ergebnis nach bestimmten Werten und beeinflusst daher die
Ergebnisausgabe der return-Klausel
• Sortierreihenfolge: ascending oder descending
for $teiln in $document/vorlesung/teilnehmer
order by $teiln/@matrikel descending
return $teiln/name
<name>Normalverbraucher</name>
<name>Mustermann</name>
189
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- order by-Klausel
• Umgang mit nicht vorhandenen Werten
- empty least – Interpretation als kleinste Werte
- empty greatest – Interpretation als größte Werte
for $teiln in $document/vorlesung/teilnehmer
order by $teiln/@matrikel descending empty least
return $teiln/name
<name>Normalverbraucher</name>
<name>Mustermann</name>
<name>externer Teilnehmer</name>
*
• Beibehaltung der Dokumentreihenfolge mit stable order by
* Annahme: unser Beispiel-XML-Dokument enthält noch einen (externen) Teilnehmer ohne Matrikelnummer
190
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – FLWOR-Ausdrücke
- return-Klausel
• konstruiert das Ergebnis des FLWOR-Ausdrucks
• Erzeugung von Sequenzen muss zwingend mit Klammerung erfolgen, da
einfache Kommatrennung einen weiteren Ausdruck erwarten lässt
let $var1 := (1)
let $var2 := (2)
return $var1, $var2
Fehler
let $var1 := (1)
let $var2 := (2)
return ($var1, $var2)
*
(1, 2)
* Fehler, da $var2 als neuer Ausdruck interpretiert wird und in diesem nicht vorbelegt ist
191
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten
- zwei Formen von Konstruktoren
• direkte Konstruktoren (XML-ähnliche Syntax)
• berechnete Konstruktoren
(abweichende Syntax, basierend auf umschlossenen Ausdrücken)
- Konstruktoren für folgende Knoten vorhanden
• Elementknoten
• Attributknoten
• Dokumentknoten
• Textknoten
• Kommentarknoten
• Verarbeitungsanweisungsknoten
192
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten
direkte Konstruktoren
- Elementknoten
<name>Inhalt</name>
element name {Inhalt}
- Attributknoten
name="Inhalt"
attribute name {Inhalt}
document {Inhalt}
- Dokumentknoten
193
berechnete Konstruktoren
- Textknoten
Inhalt
text {Inhalt}
- Kommentarknoten
<!--Inhalt-->
comment {Inhalt}
- Verarbeitungsanweisungsknoten
<?name Inhalt?>
processing-instruction
name {Inhalt}
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten
- Anwendung bspw. in return-Klausel der FLWOR-Ausdrücke
XQuery
(FLWOR)
XML
HTML
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
</vorlesung>
194
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten
let $vorl := $document/vorlesung
for $teiln in $vorl/teilnehmer
return
<html>
<head>
<title>Liste</title>
</head>
<body>
<h1>Vorlesung: {data($vorl/@titel)}</h1>
<h2>Student: {data($teiln/@matrikel)}</h2>
<font>{concat(
$teiln/vorname, " ",
$teiln/name,
", Semester ", $teiln/semester,
", Studienfach ", $teiln/semester
)}
</font>
</body>
</html>
195
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery 1.0
196
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XSLT 2.0 – Überblick über die Weiterentwicklungen
- Anpassung an neues XPath 2.0 Datenmodell (Sequenzen)
- Erstellung benutzerdefinierter Funktionen
- Gruppierung von Knoten (xsl:for-each-group)
- Erzeugung mehrerer Ausgabedokumente in einer Transformation
- verbesserte Analyse von Text (xsl:analyze-string)
- ...
XSLT 2.0
197
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery oder XSLT
XSLT
- Klassifizierung von XML-Dokumenten
• dokumentorientiert
- (semi-strukturiertes) XML zur Präsentation, Strukturierung oder
Konvertierung von Dokumenten in (viel) Text und (wenig) Felddaten
- kaum vorhandene bzw. wenige strenge Schemadefinitionen
- Dokumentreihenfolge relevant
- in der Regel Zugriff auf komplette Dokumente
- Beispiel: Zeitungsartikel
<schlagzeile id="0815">
<titel>XML-Vorlesung zu 50% geschafft!</titel>
<inhalt>
Jena, die Teilnehmer der Jenaer XML-Vorlesung haben
knapp die Hälfte des Lehrinhalts vermittelt bekommen.
Sie sind noch immer total fasziniert vom Vorlesungsstoff
und können es kaum erwarten, noch mehr davon zu hören.
</inhalt>
</schlagzeile>
198
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
XQuery oder XSLT
XQuery
- Klassifizierung von XML-Dokumenten
• datenorientiert
- XML zum Zweck der (stark) strukturierten und typisierten
Speicherung und dem standardisierten Austausch von Daten
(zumeist als Felddaten)
- strenge Schemadefinitionen
- Dokumentreihenfolge meist unrelevant
- zumeist gezielter Zugriff auf einzelne Dokumentteile nötig
- Beispiel: Teilnehmer-XML-Dokument zur XML-Vorlesung
- XML-Dokumente lassen sich nicht immer strikt in einen der beiden Typen
einteilen, daher sind in der Praxis häufig Mischformen anzutreffen
- Einsatz von XQuery oder XSLT nicht nur von Klassifizierung abhängig
199
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
Es geht (sogar) noch weiter...
aktuell (noch)
Working Drafts
1999
XQuery 1.0
XQuery 3.0
XPath 1.0
XPath 2.0
XPath 3.0
XSLT 1.0
XSLT 2.0
XSLT 3.0
2007
201x?
200
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Abfrage- und Transformationssprachen
Exkurs: XQuery Update Facility
- XQuery ist selbst „nur“ eine Abfragesprache
- keine Möglichkeit zur „in-place“ Manipulation von XML-Dokumenten
- Verabschiedung von XQuery Update Facility im März 2011
- ergänzt XQuery um Manipulationsoperatoren
• insert() – fügt einen Knoten in einen oder vor bzw. nach einem anderen Knoten ein
• delete() – entfernt einen oder mehrere Knoten
• replace() – ersetzt einen Knoten oder dessen Inhalt durch Sequenz bzw. Wert
• rename() – benennt einen Knoten um (nur Elemente, Attribute und Verarbeitungsanw.)
• ...
201
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML-Datenmodellierung / XML-Schemasprachen
Zusammenfassung
- XPath ist eine Lokatorsprache, die für die Verwendung in XSLT und später
auch XQuery konzipiert wurde
- während XPath 1.0 mithilfe von Lokalisierungspfaden (über Achsen,
Knotentests und Prädikate) gezielt Dokumentteile lokalisiert, besitzt XPath
2.0 durch verschiedene Ausdrücke weitreichendere Abfragemöglichkeiten
- erst XQuery stellt (vor allem) durch die speziellen FLWOR-Ausdrücke und
das durch das XPath 2.0 Datenmodell vorgegebenen Sequenz-Konzept eine
„vollwertige“ deskriptive Abfragesprache für XML-Dokumente dar
- XSLT ist eine Transformationssprache und kann mithilfe des TemplateMechanismus vorhandene Dokumente in unterschiedlichste
Strukturen/Formate transformieren
- die genannten Standards werden kontinuierlich weiterentwickelt und
befinden sich aktuell vor ihrer nächsten (Major-)Empfehlung
202
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Herunterladen