PowerPoint-Pr - PowerPoint PPT Presentation

1 / 39
About This Presentation
Title:

PowerPoint-Pr

Description:

Vortrag zum Seminar XML und Datenbanken XML Path Language 1.0 - XPath Matthias Brosemann Friedrich-Schiller-Universit t Jena – PowerPoint PPT presentation

Number of Views:65
Avg rating:3.0/5.0
Slides: 40
Provided by: Matthi194
Category:

less

Transcript and Presenter's Notes

Title: PowerPoint-Pr


1
Vortrag zum Seminar XML und Datenbanken
XML Path Language 1.0 - XPath
Matthias Brosemann Friedrich-Schiller-Universität
Jena
2
Inhalt
  • Einleitung
  • Datenmodell
  • XPath-Ausdrücke
  • - Datentypen
  • - Kontextbezogene Auswertung
  • - Lokalisierungspfade
  • - Ausdrücke
  • Grundfunktionsbibliothek
  • Zusammenfassung Ausblick

3
Einleitung
Ziel mit XML arbeiten, d. h. zunächst XML-Daten
aus einem Dokument adressieren
1. Möglichkeit navigierende/prozedurale Ansätze
wie DOM oder SAX
2. Möglichkeit deskriptive Anfragesprachen
dazu ein Auszug der Kriterien für Anfragesprachen
aus der DBS1-Vorlesung Mengenorientiertheit D
eskriptivität Abgeschlossenheit Adäquatheit Ein
geschränktheit Sicherheit
jede Operation arbeitet auf Mengen von
Daten Benutzter formuliert WAS er haben will
und nicht das WIE Anfrageergebnisse können als
neue Eingabe verwendet werden alle Konstrukte des
Datenmodells werden unterstützt Anfragesprache
darf keine komplette Programmiersprache
sein keine syntaktisch korrekte Anfrage erzeugt
Endlosschleife oder unendliches Ergebnis
4
Einleitung
Ziel mit XML arbeiten, d. h. zunächst XML-Daten
aus einem Dokument adressieren
1. Möglichkeit navigierende/prozedurale Ansätze
wie DOM oder SAX
2. Möglichkeit deskriptive Anfragesprachen
dazu ein Auszug der Kriterien für Anfragesprachen
aus der DBS1-Vorlesung Mengenorientiertheit D
eskriptivität Abgeschlossenheit Adäquatheit Ein
geschränktheit Sicherheit
DOM nein (Operationen nur auf einem
Knoten) nein (prozeduraler/navigierender
Ansatz) ja (Ergebnisse können als Parameter
verwendet werden) ja (verschiedene Knotentypen
für verschiedene Konstrukte) nein (sind in
komplette Programmiersprachen eingebettet) nein (
Programme können Endlosschleifen enthalten)
5
Einleitung
Die primäre Aufgabe von XPath besteht in der
Adressierung von Teilen eines XML-Dokuments.
XPath benutzt eine kompakte Nicht-XML-Syntax, um
die Verwendung von XPath-Ausdrücken innerhalb von
URIs und XML-Attributen zu erleichtern.
Mengenorientiertheit Deskriptivität Abgeschl
ossenheit Adäquatheit Eingeschränktheit Sicherh
eit
XPath primäres Ziel ? ? ? sekundäres
Ziel ?
6
Einleitung
XPath ist das Ergebnis der Zusammenarbeit der
XPointer- und XSL-Arbeitsgruppen.
XPointer Adressierung von Teilen eines
XML-Dokumentes in einer URI, z.
B. http//www.example.com/rezepte.xml/rezeptezu
tat_at_id "Mehl"
XSLT XPath-Ausdrücke werden z. B. zum Matching
benutzt
Eine weitere Anwendung findet XPath in den XML
Schemas, um dort die identity constraints
definieren zu können.
7
Datenmodell
lt?xml version"1.0"?gt lt!DOCTYPE rezept SYSTEM
"rezept.dtd"gt lt?xml-stylesheet href"style.xsl"
type"text/xml"?gt ltrezeptgt ltzutat id"mehl"gt200g
Mehllt/zutatgt lt!-- weitere Zutaten
--gt ltanleitunggt Zuerst nehmen Sie das ltzutat
xmlnsxlink"http//www.w3.org/1999/xlink"
xlinktype"simple"
xlinkhref"mehl"gtMehllt/zutatgt und mischen es
mit ... lt/anleitunggt lt/rezeptgt
8
Datenmodell
XPath operiert auf der logischen Darstellung des
XML-Dokumentes, dem Baum. Dieser besitzt Knoten
verschiedener Typen Wurzelknoten repräsentiert
das Dokument ist einzigartig und Wurzel des
Baumes Elementknoten repäsentiert ein Element
ist Kindknoten eines Elementknotens oder des
Wurzelknotens hat diesen als Elternknoten Attribu
tknoten repräsentiert ein Attribut ist kein
Kindknoten, hat aber den zuge-hörigen
Elementknoten als Elternknoten Attribute mit
xmlns als Präfix sind keine Attributknoten Namensr
aumknoten repräsentiert eine Namensraumdefinition
für ein Element (auch vom Elternknoten
vererbte) ist kein Kindknoten, hat aber den
zugehörigen Elementknoten als Elternknoten Komment
arknoten repräsentiert ein Kommentar, der nicht
innerhalb der DTD steht PI-Knoten repäsentiert
eine PI, die nicht innerhalb der DTD
steht Textknoten repräsentiert einen
Textabschnitt ist Kindknoten eines
Element-knotens und hat diesen als Elternknoten
er Textabschnitt ist so groß wie möglich, es gibt
als keine zwei benachbarten Textknoten ein
Textknoten enthält min. ein Zeichen Textknoten,
die nur als Leer-raumzeichen bestehen, können
weggelassen werden
9
Datenmodell
Die Dokumentordnung ist eine Ordnung der Knoten
des Baumes bezüglich ihres Auftretens im
XML-Dokument.
Besonderheiten - Der Wurzelknoten ist der erste
Knoten in der Dokumentordnung. - Die Kinder
eines Knotens sind wie folgt sortiert
Namensraumknoten, Attributknoten, restliche
Knoten. - Die relative Ordnung der Namensraum-
und Attributknoten ist implementationsabhängig.
Die Dokumentordnung kann undefiniert sein. So
können z. B. mit XSLT die Bäume zweier
XML-Dokumente vereinigt werden. Die oben genannte
Definition lässt sich dann nicht auf den
resultierenden Baum anwenden.
10
XPath-Ausdrücke - Datentypen
XPath definiert vier Datentypen - boolean true
oder false - number Gleitkommazahl, z. B. 5
oder 4.39883 - string Zeichenkette aus
UCS-Zeichen, z. B. Ich bin Text. - node-set un
geordnete Menge von Knoten (also keine Duplikate)
Der Rückgabewert eines XPath-Ausdrucks ergibt ein
Objekt, das zu einem dieser vier Typen gehört.
Auf XPath aufbauende Sprachen können weitere
Datentypen definieren. So führt XSLT
beispielsweise den Teilbaum als neuen Datentyp
ein.
UCS Universal Multiple-Octet Coded Character
Set
11
XPath-Ausdrücke Kontextbezogene Auswertung
Die Auswertung eines XPath-Ausdruckes erfolgt
immer bezüglich eines Kontextes (K, (KP, KG), v,
f, n) mit
K - ein Knoten, der Kontextknoten KP - eine
natürliche Zahl, die Kontextposition KG - eine
natürliche Zahl, die Kontextgröße v - eine
Abbildung von Variablennamen auf Variablenwerte,
die Variablenbelegungen f - eine Abbildung von
Funktionsnamen auf Funktionen, die
Funktionsbibliothek n - eine Abbildung von
Namensraumpräfixen auf Namensraum-URIs, die Menge
der gültigen Namensräume (Namensraumdeklarationen)
Es gilt stets 0 ? KP ? KG
12
XPath-Ausdrücke Kontextbezogene Auswertung
Der Variablenwert ist ein Objekt von einem für
Ausdrücke möglichen Typen. Variablen werden mit
Variablenname angesprochen. XPath selbst besitzt
keine Konstrukte zum Definieren von Variablen.
Dazu ist eine Sprachenerweiterung wie XSLT oder
XQuery nötig.
Jede Funktion besitzt null oder mehr Argumente
und liefert einen einzelnen Wert. XPath definiert
eine Bibliothek von Grundfunktionen, die von
allen Implementationen unterstützt werden muss.
Bei einer Grundfunktion gehören die Argumente und
das Ergebnis einem der vier Grundtypen an.
Die Variablenbelegungen, die Funktionsbibliothek
und die Namensraum-deklarationen, die benutzt
werden, um einen Teilausdruck zu berechnen, sind
immer dieselben, die auch für den umgebenden
Ausdruck benutzt werden.
13
XPath-Ausdrücke Lokalisierungspfade
Lokalisierungspfade adressieren Teile eines
XML-Dokumentes. Es gibt relative und absolute
Lokalisierungspfade.
Ein relativer Lokalisierungspfad setzt sich aus
einem oder mehreren Lokalisierungs-schritten
zusammen, die mit einem Schrägstrich (/)
voneinander getrennt werden.
Ein Lokalisierungsschritt wählt eine Menge von
Knoten bzgl. des Kontextes aus. Die Eingabe eines
Lokalisierungsschrittes ist die aus dem
vorhergehenden Schritt resultierende Knotenmenge.
Alle Knoten dieser Menge werden nacheinander als
Kontextknoten betrachtet und die resultierenden
Knotenmengen werden vereinigt.
Ein absoluter Lokalisierungspfad besteht aus
einem führenden Schrägstrich, gefolgt von einem
optionalem relativen Lokalisierungspfad. Die
Eingabe des ersten Schrittes dieses relativen
Pfades ist die Menge, die nur den Wurzelknoten
enthält.
Beispiel /child/child (wählt alle
Enkelknoten des Wurzelknotens aus)
14
XPath-Ausdrücke Lokalisierungspfade
Ein Lokalisierungsschritt besteht aus der Achse,
dem Knotentest und beliebig vielen
Prädikaten axisnode_testpredicate_1predicat
e_2...predicate_n
Die Achse ist eine der 13 vordefinierten Achsen
und wählt eine Knotenmenge aus.
Der Knotentest kann diese Menge anhand der
Knotentypen oder der Namen der Knoten
einschränken.
Prädikate sind XPath-Ausdrücke, die für jeden
verbleibenden Knoten ausgewertet werden. Ist das
Ergebnis eine Zahl, so wird diese mit der
Kontextposition des Knotens verglichen. Ansonsten
wird das Ergebnis direkt in einen booleschen Wert
konvertiert. Alle Knoten, für die die Auswertung
eines Prädikats falsch ergibt, werden aus der
Menge herausgefiltert, bevor das nächste Prädikat
ausgewertet wird.
15
XPath-Ausdrücke Lokalisierungspfade
Achsen
child parent following-sibling preceding-sibli
ng descendent-or-self ancestor-or-self
attribute namespace
16
XPath-Ausdrücke Lokalisierungspfade
Achsen besitzen sogenannte Hauptknotentypen. Der
Hauptknotentyp der Attribut-Achse ist der
Attributtyp, der der Namensraumachse der
Namensraumtyp. Alle anderen Achsen besitzt den
Elementtyp als Hauptknotentyp.
- Namensraum-Präfix Die expandierten Präfixe
müssen übereinstimmen und der Typ des Knotens
muss der Hauptknotentyp sein. z. B.
childxhtml
- beliebiger Name Der Typ des Knotens muss der
Hauptknotentyp sein. z. B. child
17
XPath-Ausdrücke Lokalisierungspfade
Knotentests (auf Knotentyp)
- beliebiger Knotentyp Der Test ist für jeden
Knoten erfüllt. z. B. childnode()
- Textknoten Der Knoten muss vom Typ Text
sein. z. B. childtext()
- Kommentarknoten Der Knoten muss vom Typ
Kommentar sein. z. B. childcomment()
- PI-Knoten Der Knoten muss vom Typ
Processing-Instruction sein. Wurde ein Literal
angegeben, so muss das Ziel der PI gleich dem
Literal sein. z. B. childprocessing-instruct
ion() oder childprocessing-instruction('xml-st
ylesheet')
18
XPath-Ausdrücke Lokalisierungspfade
Beispiele
/descendantanswerposition()42 wählt das 42.
answer-Element im Dokument aus.
/childdoc/childchapterposition()5/childse
ctionposition()last() wählt das letzte
section-Element des fünften chapter-Elements des
doc-Dokumentelements aus.
childselfchapter or selfappendix wählt
die chapter- und appendix- Kindelemente des
Kontextknotens aus.
childparaattributetype'warning'position()
5 wählt das fünfte para-Kindelement des
Kontextknotens aus, das ein Attribut type mit dem
Wert warning besitzt.
childparaposition()5attributetype"warning
" wählt das fünfte para-Kindelement des
Kontextknotens aus, wenn dieses Kind ein
type-Attribut mit dem Wert warning besitzt.
19
XPath-Ausdrücke Lokalisierungspfade
Abkürzungen
- child kann weggelassen werden. Damit ist die
Standardachse die Kindachse. z. B.
/doc/chapter5/sectionlast()
- _at_ ist die Abkürzung für attribute z. B.
para_at_type'warning'5
- // ist die Abkürzung für /descendant-or-selfn
ode()/ z. B. /descendantanswerposition()42
//question
- . ist die Abkürzung für selfnode()
(vollständiger Lokalisierungsschritt)
- .. ist die Abkürzung für parentnode()
(vollständiger Lokalisierungsschritt) z. B.
../title
20
XPath-Ausdrücke
XPath-Ausdrücke können aus booleschen
Operationen, Vergleichen, arithmetischen
Operationen und einen Mengenoperator, sowie
Lokalisierungspfaden bestehen.
Beispiel precedingnode() selfnode()
Statt eines Lokalisierungspfades oder als Eingabe
für einen Lokalisierungspfad kann ein
Filter-Ausdruck verwendet werden. Dieser filtert
das Ergebnis eines XPath-Ausdrucks, eines
Funktionsaufrufes, einer Variablenreferenz oder
einen konstanten Ausdruck mit Prädikaten.
Beispiele (preceding-sibling
following-sibling)1 divs1/following-sibli
ng count(childselfchapter or
selfappendix)
21
Grundfunktionsbibliothek
Funktionen für Knotenmengen - last(),
position() - count(node-set)
Beispiele acount(.b) count(b)
(Durchschnitt von a und b) acount(.b) !
count(b) (Differenz von a und
b) count(.../_at_) count(../_at_) (ist
Kontextknoten ein Attributknoten?)
- local-name(node-set), namespace-uri(node-set),
name(node-set) geben lokalen Namen bzw.
Namensraum-URI bzw. qualifizierten Namen des
ersten Knotens aus der Knotenmenge aus.
- id(object) Ist die Eingabe eine Liste von
ID-Werten, so werden alle Elemente mit einem
ID-Wert aus dieser Liste zurückgegeben. Ist die
Eingabe eine Knotenmenge, so wird zu jedem Knoten
aus der Menge der Zeichenkettenwert berechnet,
id() mit diesem Wert aufgerufen und die
Ergebnisse vereinigt.
22
Grundfunktionsbibliothek
Funktionen für Zeichenketten - string(object)
Ist die Eingabe eine Knotenmenge, so werden die
Zeichenkettenwerte (ZKW) aller Knoten aus dieser
Menge miteinander verkettet zurückgegeben. Für
den Wurzelknoten und die Elementknoten ist der
ZKW die Verkettung der ZKW aller
Textknoten-Nachkommen in Dokumentordnung. Der ZKW
eines Textknotens ist der mit ihm assoziierte
Text. Der ZKW eines Attributknotens ist der
(normalisierte) Wert des Attributes, der des
Namensraumknotens der Namensraum-URI. Für den
PI-Knoten ist der ZKW die Anweisung ohne das
Ziel, für den Kommentarknoten der gesamte
Kommentartext.
- concat(...), substring-before(...),
substring-after(...), substring(...),
string-length(...), normalize-space(...),
translate(...) - starts-with(...), contains(...)
23
Grundfunktionsbibliothek
Boolesche Funktionen - boolean(object) Ist
die Eingabe eine Knotenmenge, so ist das Ergebnis
wahr, wenn die Menge nicht leer ist. Ist die
Eingabe ein String, so ist das Ergebnis wahr,
wenn der String min. ein Zeichen
enthält. Beispiele ltimg alt""
/gt (XML-Dokument) /img_at_alt ergibt
wahr /imgstring(_at_alt) ergibt falsch
- not(boolean), true(), false()
- lang(string) ergibt wahr, wenn mittels
xmllang im Kontextknoten oder im nächsten
Vorfahr, der dieses Attribut spezifiziert, die
angegebene Sprache oder eine Untersprache davon
gesetzt wurde. Die Beispiele ergeben für den Test
boolean(//paralang('en')) wahr ltdiv
xmllang"en"gtltpara/gtlt/divgt ltpara
xmllang"en-us"/gt
24
Grundfunktionsbibliothek
Zahlenfunktionen - number(object) Konvertierun
g in eine Gleitkommazahl. Knotenmengen werden
zunächst in einen String konvertiert, der
anschließend geparst wird.
- floor(number), ceiling(number),
round(number) - sum(node-set) wendet auf jeden
Knoten der Menge die Funktion number() an und
addiert die Ergebnisse.
25
Zusammenfassung Ausblick
XPath erfüllt im Prinzip die genannten Kriterien
für eine Anfragesprache. Die Abgeschlossenheit
gilt insofern, dass weiter abfragbare Resultate
auch als Eingabe für einen neuen XPath-Ausdruck
gültig sind (Lokalisierungsschritte). Auch die
Adäquatheit kann für gültig erklärt werden, da
die Versionsinformation nichts mit den abstrakten
Daten in einem XML-Dokument zu tun hat, genauso
wenig wie die DTD, die lediglich als DDL dient.
Mengenorientiertheit Deskriptivität Abgeschl
ossenheit Adäquatheit Eingeschränktheit Sicherh
eit
XPath ja (primäres Ziel) ja (rel. Lok.-pfade
schaffen Unabhängigkeit von Hierarchietiefe) jein
(nur Knotenmengen können als neue Eingabe
verwendet werden) jein (DTD und
Versionsinformation wird weggelassen) ja ja (Kno
tenmengen werden sukzessiv eingeschränkt)
26
Zusammenfassung Ausblick
Probleme mit XPath 1.0 / Neuerungen in XPath
2.0 - umständliche Mengenoperationen
(ausgenommen Vereinigung) ? neue
Mengenoperatoren für Durchschnitt und
Differenz - Joins wenn überhaupt nur schwer
möglich ? einfacher for-Ausdruck, Für-alle- und
Existenzoperatoren, if-Ausdruck - wenig
differenziertes Typsystem, Datentyptests nicht
möglich ? Unterstützung des XML Schema
Typensystems - wenig Knotentypentests
möglich ? Erweiterung um Tests auf
Elementknotentyp, Attributknotentyp,
Namensraumtyp und Dokumentelementtyp
weitere Neuerungen und Änderungen in XPath
2.0 - weitere Vergleichsmöglichkeiten - Anpassu
ng des Datenmodells an das von XQuery und XSLT
27
Vortrag zum Seminar XML und Datenbanken
XML Path Language 2.0 XPath XQuery An XML
Query Language
Matthias Brosemann Friedrich-Schiller-Universität
Jena
28
Inhalt
  • Erweiterungen in XPath 2.0
  • - Mengenoperatoren
  • - Vergleiche
  • - Typensystem
  • - Quantifizierung und Konditionierung
  • - Knotentests
  • Der FLWOR-Ausdruck
  • Konstruktoren

29
Erweiterungen in XPath 2.0 - Mengenoperatoren
In XPath 2.0 ersetzt die Sequenz die Knotenmenge.
Eine Sequenz ist eine (geordnete) Folge von
Knoten oder Werten anderer Datentypen.
Die Vereinigung operiert nun auf Sequenzen und
eliminiert dabei Duplikate.
Zusätzlich zum Vereinigungsoperator wird es in
XPath 2.0 den Durchschnitts- und den
Differenzoperator geben. Bei allen
Mengenoperatoren muss die Sequenz nur Knoten
besitzen. Das Ergebnis wird in Dokumentordnung
sortiert.
Beispiele (A, B) union (B, C) ergibt (A, B,
C) (A, B) intersect (B, C) ergibt (B) (A,
B) except (B, C) ergibt (A) (wobei A, B und C
Knoten sind)
30
Erweiterungen in XPath 2.0 - Vergleiche
Die generelle Vergleichsoperatoren , !, lt, lt,
gt, gt bleiben Existenz-qualifiziert.
Beispiele (A, B) (B, C) ergibt true (A, B)
! (B, C) ergibt true (wobei A, B und C Knoten
sind)
Zusätzlich werden eq, ne, lt, le, gt, ge
eingeführt, die atomare Werte vergleichen.
Beispiel book//author eq "Abiteboul" ergibt
true genau dann, wenn book genau einen Knoten
enhält und dieser ein Nachkommen namens author
besitzt, dass den Zeichenkettenwert Abiteboul
enthält.
Weiterhin sollen is, ltlt, gtgt benutzt werden, um
Knoten zu vergleichen.
Beispiele (wobei A und B Knoten sind) A is
A ergibt true A ltlt B ergibt true, wenn A in
Dokumentordnung vor B steht
31
Erweiterungen in XPath 2.0 - Typensystem
XPath 2.0 unterstützt das volle Typensystem der
XML-Schemata.
Beispiele 5 instance of xsinteger ergibt
true . instance of xsstring ergibt true, wenn
der Kontextknoten ein String ist. . cast as
exampledatum konvertiert den Wert des
Kontextknoten in den (eigenen) Datentyp
exampledatum . castable as xsdate ergibt true,
wenn sich der Kontextknoten in den Typ date
konvertieren lässt
Die linke Seite dieser Operanden muss einen
einzelnen Wert oder eine Sequenz mit höchstens
einem Wert ergeben.
instance of überprüft den Datentyp des Ausdrucks
auf der linken Seite. cast as konvertiert den
linken Ausdruck in den angegebenen
Datentyp. castable as überprüft, ob sich der
Ausdruck auf der linken Seite in den angegebenen
Datentyp konvertieren lässt.
32
Erweiterungen in XPath 2.0 Quantifizierung
In XPath 2.0 kann die Quantifizierung explizit
angegeben werden.
Beispiele some x in (1, 2, 3), y in (2, 3, 4)
satisfies x y 4 ergibt true, da z. B.
134 ist. every x in (1, 2, 3), y in (2, 3,
4) satisfies x y 4 ergibt false, da z. B.
123 ist. every employee in //angestellter
satisfies employee/_at_entlassen ergibt true,
wenn das Dokument ein Element namens angestellter
besitzt, dass ein entlassen-Attribut besitzt
(egal welcher Inhalt).
Desweiteren gibt es das if-Konstrukt. Beispiel i
f (employee/_at_entlassen) then employee/name els
e "keiner entlassen"
33
Erweiterungen in XPath 2.0 Knotentests
Mit XPath 2.0 werden weitere Knotentests
eingeführt. Beispiele /descendentangestellt
er gibt alle Elementknoten, die den (lokalen)
Namen angestellter besitzen zurück. element(anges
tellter) element(angestellter,) Beide Tests
bestehen nur angestellter-Elemente. Um den ersten
zu erfüllen, muss der Typ des Elements der
entsprechenden Typdefinition aus dem XML-Schema
passen. element(firma/abteilung/angestellter) p
asst zu allen Elementen, deren Typ und Name der
Typdefinition im XML-Schema von angestellter
innerhalb von abteilung innerhalb von firma
entsprechen attribute(...)
XQuery definiert ein switch-Konstrukt, dass
Knotentypenbasiert entscheidet, z.
B. typeswitch(customer/billing-address) case
a as element(, USAddress) return a/state
case a as element(, CanadaAddress) return
a/province
34
Der FLWOR-Ausdruck for, let, where, order by,
return
for-Klauseln binden je eine oder mehr Variablen
an eine Sequenz, z. B. for i in (1, 2, 3), j
in (6, 7) for k in (9, 8)
Die Ausführung der for-Klauseln erzeugt einen
Tupelstrom (kartesisches Produkt), z. B. (1, 6,
9), (1, 6, 8), (1, 7, 9), (1, 7, 8), (2, 6, 9),
(2, 6, 8), (2, 7, 9), (2, 7, 8), (3, 6, 9), (3,
6, 8), (3, 7, 9), (3, 7, 8)
let bindet zusätzliche Variablen an den
Tupelstrom (ohne Produktbildung), z. B. for i
in (1, 2, 3), j in (6, 7) let m ij for
k in (9, 8) (1, 6, 7, 9), (1, 6, 7, 8), (1, 7,
8, 9), (1, 7, 8, 8), (2, 6, 8, 9), (2, 6, 8,
8), (2, 7, 9, 9), (2, 7, 9, 8), (3, 6, 9, 9),
(3, 6, 9, 8), (3, 7, 10, 9), (3, 7, 10, 8)
35
Der FLWOR-Ausdruck for, let, where, order by,
return
Die where-Klausel filtert den Tupelstrom, z. B.
for i in (1, 2, 3), j in (6, 7) let m
78 for k in (9, 8) where m gt k (2, 7, 9,
8), (3, 6, 9, 8), (3, 7, 10, 9), (3, 7, 10, 8)
order by sortiert den Tupelstrom und return gibt
das Ergebnis eines Ausdruckes aus, z. B. for i
in (1, 2, 3), j in (6, 7) let m 78 for k
in (9, 8) where m gt k stable order by
k return ltoutgtjlt/outgt (2, 7, 9, 8), (3, 6,
9, 8), (3, 7, 10, 8), (3, 7, 10,
9) Ausgabe ltoutgt7lt/outgtltoutgt6lt/outgtltoutgt7lt/outgtlt
outgt7lt/outgt
36
Der FLWOR-Ausdruck for, let, where, order by,
return
Beispiel for s in (ltone/gt, lttwo/gt,
ltthree/gt) return ltoutgtslt/outgt Ausgabe ltoutgtlt
one/gtltoutgt ltoutgtlttwo/gtltoutgt ltoutgtltthree/gtltoutgt
Beispiel let s (ltone/gt, lttwo/gt,
ltthree/gt) return ltoutgtslt/outgt Ausgabe ltoutgtlt
one/gtlttwo/gtltthree/gtltoutgt
37
Der FLWOR-Ausdruck for, let, where, order by,
return
ltbibgt ltbookgt lttitlegtTCP/IP Illustratedlt/titlegt
ltauthorgtStevenslt/authorgt ltpublishergtAddison-We
sleylt/publishergt lt/bookgt ltbookgt lttitlegtAdvance
d Unix Programminglt/titlegt ltauthorgtStevenslt/auth
orgt ltpublishergtAddison-Wesleylt/publishergt lt/boo
kgt ltbookgt lttitlegtData on the
Weblt/titlegt ltauthorgtAbiteboullt/authorgt
ltauthorgtBunemanlt/authorgt ltauthorgtSuciult/authorgt lt
/bookgt lt/bibgt
for a in fndistinct-values(//author) return
(a, for b in //bookauthor a
return b/title)
ltauthorgtStevenslt/authorgt lttitlegtTCP/IP
Illustratedlt/titlegt lttitlegtAdvanced Unix
Programminglt/titlegt ltauthorgtAbiteboullt/authorgt ltti
tlegtData on the Weblt/titlegt ltauthorgtBunemanlt/autho
rgt lttitlegtData on the Weblt/titlegt ltauthorgtSuciult/a
uthorgt lttitlegtData on the Weblt/titlegt
38
Konstruktoren
Beispiel for s in (ltone/gt, lttwo/gt,
ltthree/gt) return ltout myattr"nix"gtslt/outgt
Beispiel for s in (element one , element two
, element three ) return element out
attribute myattr "nix", s
Beispiel element book attribute isbn
"isbn-0060229357" , element title "Harold
and the Purple Crayon", element author
element first "Crockett" , element
last "Johnson"
39
Komplexbeispiel
ltbibgt ltbookgt lttitlegtTCP/IP Illustratedlt/titlegt
ltauthorgtStevenslt/authorgt ltpublishergtAddison-We
sleylt/publishergt lt/bookgt ltbookgt lttitlegtAdvance
d Unix Programminglt/titlegt ltauthorgtStevenslt/auth
orgt ltpublishergtAddison-Wesleylt/publishergt lt/boo
kgt ltbookgt lttitlegtData on the
Weblt/titlegt ltauthorgtAbiteboullt/authorgt ltauthor
gtBunemanlt/authorgt ltauthorgtSuciult/authorgt lt/book
gt lt/bibgt
ltauthlistgt ltauthorgt ltnamegtAbiteboullt/namegt ltb
ooksgt lttitlegtData on the Weblt/titlegt lt/booksgt
lt/authorgt ltauthorgt ltnamegtBunemanlt/namegt ltbo
oksgt lttitlegtData on the Weblt/titlegt lt/booksgt
lt/authorgt ltauthorgt ltnamegtStevenslt/namegt ltboo
ksgt lttitlegtTCP/IP Illustratedlt/titlegt lttitle
gtAdvanced Unix ...lt/titlegt lt/booksgt lt/authorgt
ltauthorgt ltnamegtSuciult/namegt ltbooksgt lttitlegt
Data on the Weblt/titlegt lt/booksgt lt/authorgt lt/au
thlistgt
ltauthlistgt for a in fndistinct-values(//autho
r) order by a return ltauthorgt ltnamegt
a/text() lt/namegt ltbooksgt for b in
//bookauthor a order by b/title
return b/title lt/booksgt lt/authorgt lt/a
uthlistgt
Write a Comment
User Comments (0)
About PowerShow.com