XInclude, XPath und XQuery Flashcards

1
Q

Wofür wird XInclude verwendet?

A

XInclude (XML Inclusions) ist eine Spezifikation des W3C, in der eine Methode definiert ist, um XML-Dokumente, Dokumentfragmente und sogar Textdateien mit Hilfe externer Referenzen zu einem Gesamtdokument zusammenzustellen.
Definiert ist das Element <xi:include> zur Adressierung des Teildokumentes. Als Kindelement von <xi:include> kann das Element <xi:fallback> notiert werden, das Inhalte für den Fehlerfall enthält.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was ist die Motivation hinter XInclude?

A

Ein XML-Dokument aus einzelnen Modulen zusammenzusetzen hat viele Vorteile: Die einzelnen Einheiten sind wiederverwendbar und ein verteiltes Arbeiten ist möglich. Bei der Entwicklung einer DTD oder eines XML-Schemas ist darauf zu achten, dass diese so konzipiert werden, dass sowohl die einzelnen Module und auch das Gesamtdokument validiert werden können. Desweiteren wird noch eine Methode benötigt, wie das Gesamtdokument aus den einzelnen Teildokumenten zusammengestellt werden kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was ist XPath?

A

XPath ist eine Art Hilfssprache, die für die Adressierung und den Zugriff auf Strukturbestandteile eines XML-Dokumentes verwendet wird.
Mit ihr können auch komplexe Anfragen an XML-Dokumente gestellt werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was ist das Datenmodell XDM?

A

XQuery und XPath haben ein gemeinsames Datenmodell »XDM«.
Zentrales Konstrukt des Datenmodells ist die Sequenz. Eine Sequenz besteht aus 0 oder mehr Items. Ein Item kann ein atomarer Wert, ein Knoten oder eine Funktion sein. Maps und Arrays sind spezielle Funktionen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was sind Knoten im XML-Dokument?

A

XML-Dokumente haben ein Wurzelelement und sind hierarchisch aufgebaut. Elemente können Kindelemente haben. Daher liegt die Repräsentation eines XML-Dokumentes als Baum bestehend aus Knoten nahe. Knoten repräsentierten die verschiedenen XMLKonstrukte.
XPath verfügt über das Konzept der Dokumentreihenfolge (document order). Die Knoten im Dokumentbaum sind in der Reihenfolge geordnet, in welcher die Dokumentteile beim Parsing gefunden werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Welche 7 Knotenarten gibt es im XML-Dokument?

A
  • Dokumentknoten: Der Dokumentknoten ist ein namenloser Knoten. Sein Inhalt umfasst das ganze Dokument.
  • Elementknoten: Jedes Element des Dokuments wird durch einen Elementknoten im Baum repräsentiert. Ein Elementknoten enthält evtl. weitere Elementknoten als Kinder.
  • Textknoten: Ein Textknoten enthält ausschließlich Zeichendaten.
  • Attributknoten: Attributknoten entsprechen den Attributen eines Elementes. Sie haben einen Bezeichner und einen Wert. Ein Attributknoten wird nicht als Kind eines Elementknotens, sondern als »zum Element zugehörig« betrachtet.
  • Namensraumknoten: Ein Namensraumknoten repräsentiert den Namensraum eines Elementes. Er ist kein Kindknoten des Elementes, sondern dem Element zugeordnet.
  • Verarbeitungsanweisungsknoten: Ein Verarbeitungsanweisungsknoten repräsentiert eine Verarbeitungsanweisung. Er ist ein Kindknoten des Dokumentknotens und somit ein Geschwisterknoten des Elementknotens des Wurzelelementes.
  • Kommentarknoten: Kommentarknoten repräsentieren die Kommentare im XML-Dokument. Ihr Wert ist die in <!-- --> enthaltene Zeichenkette.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Welche zwei Arten von Werten werden bei Knoten unterschieden?

A
  • Textueller Wert: Der textuelle Wert ist sein Zeicheninhalt und die Verkettung aller Textknoten, die Nachfolger des Elementknotens sind. Der textuelle Wert eines Attributknotens ist sein Attributwert. Auf den Textuellen Wert kann mit der XPath-Funktion string() zugegriffen werden.
  • Getypter Wert: Wird das XML-Dokument über ein XML-Schema validiert, haben die Element- und Attributknoten den im XML-Schema definierten Wert. Auf den getypten Wert eines Knotens kann mit der XPath-Funktion data() zugegriffen werden.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was sind Atomare Werte und wozu werden sie verwendet?

A

Atomare Werte sind einfache Datenwerte, ohne Markup und ohne Beziehung zu einem speziellen Element oder Attribut. Sie kommen in XML-Dokumenten eigentlich nicht vor, können aber mit den XPath-Funktionen string() und data() aus Knoten extrahiert werden.
Atomare Werte werden zum Rechnen und bei vielen Funktionen benötigt. Bei vielen Ausdrücken wie z.B. Arithmetischen Ausdrücke, Vergleichsausdrücke oder bei Funktionsrückgabewerten, erfolgt eine Atomisierung.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Welche Typen können Atomare Werte sein?

A

Der Typ eines atomaren Wertes kann ein eingebauter Typ oder ein benutzerdefinierter Typ sein.
* xs:anyAtomicType ist der Basistyp von xs:untypedAtomic und von allen primitiven Datentypen wie z.B. xs:integer und xs:string
* Ein Listentyp repräsentiert eine Liste von atomaren Werten eines bestimmten Typs. Im Typsystem sind drei Listentypen definiert: xs:IDREFS, xs:NMTOKENS und xs:ENTITIES.
* Vereinigungstypen haben als Werteraum die Vereinigungsmenge der Werteräume der vereinigten Typen. z.B. ist der Typ xs:numeric der Vereinigungstyp der drei primitiven Zahlentypen xs:double, xs:fload und xs:decimal

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was ist eine Sequenz im XPath/XQuery-Datenmodell?

A

Eine Sequenz bildet das zentrale Konstrukt.
Eine Sequenz besteht aus einer Aneinanderreihung von Items. Da ein Item ein Knoten, ein atomarer Wert oder eine Funktion sein kann, können Sequenzen heterogen sein. Jede Operation liefert als Resultat eine Sequenz.
Eine Sequenz kann auch explizit durch den sogenannten Sequenzkonstruktor konstruiert werden. Die Einträge werden durch Kommata getrennt und von runden Klammern umfasst.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche 6 Eigenschaften hat eine Sequenz im XPath/XQuery-Datenmodell?

A
  • Eine Sequenz mit genau einem Item wird Singleton-Sequenz genannt. Es gibt keinen Unterschied zwischen einer ein-elementigen Sequenz und dem Item, das sie enthält. Daher können alle Funktionen und Operatoren, die auf Sequenzen anwendbar sind, auch auf individuellen Items operieren. Und umgekehrt kann jedes Item als ein-elementige Sequenz behandelt werden.
  • Eine Sequenz, die kein Item enthält, ist eine leere Sequenz. Sie wird dargestellt durch »()«.
  • Sequenzen sind nicht verschachtelt. Der Ausdruck (1,(),(<element/>,3),1) ist äquivalent zu: (1,<element/>,3,1).
  • Sequenzen sind geordnet. Die einzelnen Einträge sind hinsichtlich ihrer Position unterscheidbar.
  • Sequenzen können Duplikate enthalten.
  • Zwei Sequenzen sind gleich, wenn sie die gleiche Anzahl Einträge aufweisen und die Einträge an jeder Position paarweise gleich sind.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Welche 6 Operationen gibt es für Sequenz im XPath/XQuery-Datenmodell?

A
  • Kommaoperator: (1,<x/>),(3) liefert (1,<x/>,3).
  • Bereichsoperator to: Sequenzen ganzer Zahlen lassen sich durch einen Bereichsoperator angeben. Der gesamte Ausdruck wird dann als Bereichsausdruck bezeichnet. Beispiel: Der Bereichsausdruck 1 to 5 liefert die Sequenz (1,2,3,4,5).
  • Mengenoperatoren: Sequenzen werden wie Mengen behandelt. Die Ergebnissequenz ist in der Dokumentreihenfolge geordnet.
  • union (auch »|«): Vereinigung zweier Sequenzen.
  • intersect: Durchschnitt zweier Sequenzen.
  • except: Die Ergebnissequenz enthält alle Items, die in der ersten Sequenz, aber nicht in der zweiten enthalten sind.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was sind Sequenztypen im XPath/XQuery-Datenmodell?

A

Ein Sequenztyp wird verwendet, um in einem XQuery-Ausdruck genaue Typangaben für eine Sequenz anzugeben. In Funktionsdeklarationen müssen beispielsweise die Typen der Übergabeparameter und des Rückgabewertes notiert werden. Ein Sequenztyp besteht aus einem Typ, der den Typ jedes Items der Sequenz angibt, und einer Kardinaltätsangabe, die angibt, wie viele Items die Sequenz enthalten muss oder darf.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Welche Sequenztypen und Kardinalitätsangaben gibt es im XPath/XQuery-Datenmodell?

A

Sequenztypen:
* item(): beliebiges Item, d. h. beliebiger Knotentyp oder ein atomarer Wert beliebigen Typs
* node(): umfasst die Knotentypen
* empty-sequence(): für eine leere Sequenz
* xs:anyAtomicType: beliebiger atomarer Wert

Kardinalitäten / Häufigkeitsindikatoren
* ? : für 0 oder ein Item
* * : für 0 bis beliebig viele Items
* + : für 1 bis beliebig viele Items
* keine Angabe: genau ein Item

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Was sind Ausdrücke in XPath und XQuery und was ist der Rückgabewert?

A

In XPath und XQuery wird jede XPath-Beschreibung bzw. jede gültige Suchanfrage als Ausdruck bezeichnet. Rückgabewert eines Ausdrucks ist immer eine Sequenz.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Welche 5 Syntaxregeln gelten für Ausdrücke in XPath und XQuery

A
  • Ausdrücke sind case-sensitiv
  • Namen, die für Elemente, Attribute, Variablen und Funktionen verwendet werden, müssen gültige XML-Namen sein.
  • Ein String wird in einfache oder doppelte Hochkommata eingeschlossen.
  • Eine XQuery-Variable beginnt mit einem »$«-Zeichen.
  • XQuery benutzt die Smileys »(:« und »:)« zur Kennzeichnung von Beginn und Ende eines Kommentars. (: XQuery Kommentar :)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Welche XPath/XQuery Ausdrücke werden unterschieden?

A
  • Elementare Ausdrücke
  • Arithmenitsche Ausdrücke
  • Logische Ausdrücke
  • Pfadausdrücke

Erweiterte Ausdrücke
* Verleichsausdrücke
* Konditionale Ausdrücke
* switch-Ausdrücke
* Quantifizierende Ausdrücke
* for-Ausdrücke
* Der einfache Map-Operator “!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was sind Elementare Ausdrücke in XPath/XQuery?

A

Zu den elementaren Ausdrücken gehören:
* Literale
* Variablen
* Funktionsaufrufe
* Klammerausdrücke

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Was sind Arithmeitsche und logische Ausdrücke in XPath/XQuery?

A

Arithmetische und logische Ausdrücke ähneln denen anderer Programmiersprachen. Innerhalb der arithmetischen Ausdrücke können die Operatoren: +, -, *, div, idiv (Ganzzahldivision), mod (Modulo) verwendet werden.
Logische Operatoren sind and und or.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Was sind Pfadausdrücke in XPath/XQuery?

A

Pfadausdrücke dienen der Adressierung und dem Zugriff auf Strukturbestandteile eines XML-Dokumentes.
Pfadausdrücke können auf drei verschiedene Arten formuliert und ausgewertet werden:
* Lokalisierungspfade und Achsen
* Knotentest
* Prädikate

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Was sind Lokalisierungspfade und Achsen, welche beide Arten von Lokalisierungspfaden werden unterschieden??

A

Ein Lokalisierungspfad (location path) ist ein XPath-Ausdruck, Lokalisierungsder verwendet wird, um Knoten in einem XML-Dokument zu pfad adressieren. Lokalisierungspfade werden stets relativ zu einem Kontextitem ausgewertet, welches als »Startpunkt« des Pfades dient. Handelt es sich beim Kontextitem um einen Knoten, spricht man vom Kontextknoten.
XPath unterscheidet absolute und relative Lokalisierungspfade.
Absolute Pfade starten am Dokumentknoten, der XPath-Ausdruck beginnt dann mit einem »/«.
Relative Pfade beginnen bei einem beliebigen anderen Knoten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Wie sind Lokalisierungspfade aufgebaut?

A

Ein Lokalisierungspfad besteht aus einzelnen Lokalisierungsschritten. Die einzelnen Lokalisierungsschritte werden – ähnlich wie bei der Adressierung von Dateien in einem Verzeichnissystem – durch einen »/«, den sogenannten Pfad-Operator, voneinander getrennt. Die Lokalisierungsschritte werden sukzessive von links nach rechts ausgewertet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Was ist ein Achsenschritt, wozu wird er verwendet?

A

Mit einem Achsenschritt es möglich, im Dokumentenbaum des XML-Dokuments, zu navigieren und auf Teilbäume zuzugreifen. Für einen Achsenschritt gilt folgende Syntax:
achse::knotentest[prädikat]
Ein Achsenschritt besteht also aus drei Teilen:
* Die Achse gibt die Richtung an, in der die zu selektierenden Knoten gesucht werden,
* der Knotentest dient der Filterung der durch die Achse selektierten Knoten und
* mit Prädikaten (optional) kann die Knotensequenz, die durch achse::knotentest ausgewählt wurde, weiter gefiltert werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Welche 24 Achsen gibt es in XPath?

A
  • self: Der gegenwärtige Knoten, Kontextknoten.
  • child: (Default-Achse) Alle Kindknoten, dazu gehören Element-, Text-, Kommentarund Verarbeitungsanweisungsknoten, nicht jedoch Attribut- und Namensraumknoten.
  • parent: Direkter Vorfahr (Elternknoten). Bei einem Attribut- oder Namensraumknoten ist der Elternknoten der Elementknoten, zu dem der Attribut- bzw. der Namensraumknoten gehört.
  • ancestor*: Alle Vorfahren des Kontextknotens (in umgekehrter Dokumentreihenfolge).
  • ancestor-or-self*: Der Kontextknoten und alle seine Vorfahren.
  • following: Alle Knoten, die in der Dokumentreihenfolge dem Kontextknoten folgen, nicht jedoch die direkten Nachfahren.
  • following-sibling: Geschwisterknoten (Knoten mit gleichem Elternelement), die in der Dokumentreihenfolge dem Kontextknoten folgen.
  • preceding*: Alle Knoten, die in der Dokumentreihenfolge vor dem Kontextknoten stehen, nicht jedoch die direkten Vorfahren.
  • preceding-sibling*: Geschwisterknoten, die vor dem Kontextknoten stehen.
  • descendant: Alle Knoten, die Nachfahren (Kinder, Kindeskinder, …) des Kontextknotens sind.
  • descendant-or-self: Der Kontextknoten und alle Knoten, die Nachfahren (Kinder, Kindeskinder, …) des Kontextknotens sind.
  • attribute: Alle Attributknoten eines Elementknotens.
  • namespace: Namensraumknoten eines Elementknotens.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Was sind Rückwärts gerichtete Achsen, welche 5 gibt es?

A

Rückwärts gerichtete Achsen enthalten die in Dokumentreihenfolge vor dem Kontextknoten stehenden Knoten.
Folgende 5 Achsen sind Rückwärts gerichtet:
* parent
* ancestor
* ancestor-or-self
* preceding
* preceding-sibling

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Welche Hauptknotentypen gibt es für Achsen?

A

Jeder der Achsen hat einen sogenannten Hauptknotentyp (principal node type). Enthält eine Achse Elemente – dies gilt für alle Achsen außer attribute und namespace – ist dies der Typ element. Für die Attribut-Achse ist der Hauptknotentyp der Typ attribute, für die Namepace-Achse der Typ namespace.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Was ist ein XPath-Knotentest?

A

Nachdem mit der Achse die Richtung ausgewählt wurde, in der Knoten selektiert werden, gibt der Knotentest nun ein Filterkriterium für die Auswahl von Knoten an. Als Filterkriterium ist ein Knotenname, eine Wildcard oder ein Knotentyp möglich.
Für häufig verwendete Achsen und Achsenschritte gibt es Abkürzungen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Welche Filterkriterien gibt es für XPath-Knotentest?

A
  • Knotenname: Die Angabe eines Namens wählt alle Knoten aus, die diesen Namen haben und deren Typ dem Hauptknotentyp der angegebe nen Achse entspricht.
    child::dozent Fallbeispiel: liefert alle Kindelemente dozent des Kontextknotens.
  • Wildcard: Mit * werden alle Knoten ausgewählt, die dem Hauptknotentyp der ausgewählten Achse entsprechen. Dieser Knotentest wird auch allgemeiner Namenstest genannt
    child::*: liefert alle Kindelemente des Kontextknotens.
  • Knotentyp: Knoten können auch anhand ihres Typs ausgewählt werden.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Welche Knotentyp-Tests sind definiert?

A
  • node(): Wählt alle Knoten, unabhängig von ihrem Typ aus.
  • text(): Wählt alle Textknoten aus.
  • comment(): Wählt alle Kommentarknoten aus.
  • document-node(): Wählt den Dokumentknoten aus.
  • processing-instruction(): Wählt alle Verarbeitungsanweisungsknoten aus.
  • element(): Wählt alle Elementknoten aus.
  • element(Ename): Wählt alle Elementknoten Ename aus.
  • attribute(): Wählt alle Attributknoten aus.
  • attribute(Aname): Wählt alle Attributknoten Aname aus.

child::dozent/child::name/child::text(): alle Textknoten, die Kindelemente dieser name-Knoten sind, werden zurückgeliefert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Wie können Lokalisierungspfade abgekürzt werden?

A

Lokalisierungspfade können sehr lang und demzufolge schlecht lesbar werden. Daher wurden für häufig verwendete Achsen und Achsenschritte Abkürzungen definiert. Diese Schreibweise wird als abgekürzte Syntax (im Gegensatz zur ausführlichen Syntax) bezeichnet.
Folgende Abkürzungen gibt es:
Langform - Kurzform - Beschreibung
child:: - (Weglassen des Achsenbezeichners) - Die child-Achse ist die Default-Achse
self::node - . - Kontextknoten
parent::node() - .. - Elternknoten
attribute:: - @ - Attributachse
/descendant-orself:: node()/ - // - Nachfahren irgendwo im Baum

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Was sind XPath-Prädikate, wie werden sie angegeben und wo verwendet?

A

Eine Sequenz kann durch die Angabe von Prädikaten gefiltert werden.

Prädikate werden in eckigen Klammern angegeben und innerhalb der eckigen Klammern werden Ausdrücke als Filterkriterium fomuliert.

Die wichtigste Verwendung ist die Anwendung in Achsenschritten. Hier sind sie ein weiterer Filter für die durch achse::knotentest adressierte Knotensequenz.
Anwendungspeispiele:
* Selektiere Elemente oder Attribute mit einem bestimmten Wert,
* Selektiere Elemente, die über ein bestimmtes Kindelement oder ein bestimmtes Attribut verfügen,
* Selektiere Elemente, die an einer bestimmten Position stehen.

Wird innerhalb des Prädikates ein Pfadausdruck angegeben, ist Existenztest dies ein Test auf Existenz der durch den Pfadausdruck adressierten Elemente oder Attribute.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Wie sieht ein Prädikat aus? -> Ein Beispiel

A

(1 to 100)[. mod 5]
(1 to 100) ist ein Bereichsausdruck, der die Sequenz der Zahlen von 1 bis 100 liefert.
».« ist die Kurzform zur Adressierung des Kontextknotens.
Durch das Prädikat [. mod 5] werden nun die Zahlen selektiert, die durch 5 teilbar sind.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Was ist der Rückgabewert eines Prädikts?

A

Ein allgemeines Prädikat liefert einen booleschen Wert. Alle Knoten, bei denen dieser Wert true ist, sind in der Ergebnissequenz.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Welche 6 Operatoren stehen bei der Formulierung des Prädikate zur verfügung?

A
  • Arithmetische Operatoren: +, -, *, div, mod (Modulo-Operator)
  • Logische Operatoren: and, or
  • Vergleichsoperatoren
  • Allgemeiner Vergleich: =, !=, <, <=, >, >=
  • Wertevergleich: eq, ne, lt, le, gt, ge, =, is, isnot
  • Knotenvergleich: is, isnot, <<, >>
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Wie kann ein Nummerisches Prädikat verwendet werden?

A

Ein nummerisches Prädikat, auch Positionsprädikat (positional Nummerisches predicate) genannt, wird verwendet, um ein Item zu selektieren, Prädikat das an einer bestimmten Position einer Sequenz steht. Hierzu wird in den eckigen Klammern eine positive ganze Zahl notiert. Das erste Item einer Sequenz hat die Position 1 und nicht 0, wie in vielen Programmiersprachen. Ist der im Prädikat notierte Wert größer als die Anzahl der Items der Sequenz, wird keine Fehlermeldung zurückgegeben, sondern ein leeres Ergebnis. Steht innerhalb der eckigen Klammern ein Ausdruck, der eine positive ganze Zahl als Ergebnis hat, wird dieser als nummerisches Prädikat behandelt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Was bewirken die Funktionen position() und last() der XPath-Prädikate?

A

Die Funktion position() as xs:integer liefert die Position des aktuellen Items innerhalb einer Sequenz.
dozent[position() < 3]
selektiert die ersten zwei dozent-Elemente.

Die Funktion last() as xs:integer gibt die Anzahl der Items der aktuellen Sequenz zurück. Diese Funktion ist nützlich zum Test, ob ein Item das letzte Item einer Sequenz ist.
dozent[last()]
liefert das letzte dozent-Element.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

Können mehrere Prädikate hintereinander verwendet werden?

A

Es können mehrere Prädikate hintereinander in eckigen Klammehrerer Prädikate mern angegeben werden. Die Auswertung erfolgt von links nach rechts. Die Reihenfolge der Prädikate ist also von Bedeutung.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

Was ist ein String-Konkatenations-Ausdruck in XPath?

A

Mit einem String-Konkatenations-Ausdruck werden die String-Repräsentationen von Werten aneinandergehängt. Hierzu ist der String-Konkatenations-Operator »||« definiert.
"a" || "b" || "c"
ergibt die Zeichenkette abc.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Was ist ein Verlgeichsausdruck in XPath?

A

In XPath werden drei Arten von Vergleichsausdrücken unterschieden:
* Wertevergleich (value comparison): Zum Vergleich einzelner atomarer Werte gleichen Typs. Operatoren: eq (gleich), ne (ungleich), lt (kleiner), le (kleiner gleich), gt (größer), ge (größer gleich)
* Allgemeiner Vergleich (general comparison): Zum Vergleich von zwei (evtl. ein-elementigen) Sequenzen. Ein allgemeiner Vergleich ist existentiell quantifizierend, d. h. er ist dann wahr, wenn mindestens ein Element in den beiden zu vergleichenden Sequenzen existiert, für das der Vergleich wahr ist.
Operatoren: =, !=, <, <=, >, >=
* Knotenvergleich (node comparison): Zum Vergleich von Knoten.
* Knotenidentität: Operatoren: is, isnot
* Relative Position bezüglich der Dokumentordnung. Operatoren: <<, >>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

Was ist ein Konditionaler Ausdruck in XPath?

A

Mit einem konditionalen Ausdruck kann eine Fallunterscheidung innerhalb eines Ausdrucks realisiert werden. Die Syntax lautet:
if (boolescher_Ausdruck) then Ausdruck1 else Ausdruck2
Ist der boolesche Ausdruck wahr, wird der Ausdruck nach then ausgewertet, sonst der Ausdruck nach else. Der else-Teil ist notwendig, kann aber leer sein. In diesem Fall wird else () notiert.

41
Q

Was ist ein switch-Ausdruck in XPath?

A

Mit einem switch-Ausdruck wird eine Mehrfachverzweigung realisiert: In Abhängigkeit von einem Wert wird einer von mehreren alternativen Ausdrücken ausgewertet. Die Syntax lautet:
~~~
switch (sw_ausdruck)
case c_ausdruck1 return ausdruck1
case c_ausdruck2 return ausdruck2

default return default_ausdruck
~~~
Der Ausdruck nach switch (switch operand expression) muss ein einzelner Wert oder eine leere Sequenz sein. Liefert der Ausdruck einen Element- oder Attributknoten, wird atomisiert. Gleiches gilt für die Ausdrücke nach case (case operand expression). Die case-Klauseln werden der Reihe nach betrachtet. Für die erste Klausel, bei der der switch-Ausdruck mit dem case-Ausdruck übereinstimmt, wird der Ausdruck nach return ausgewertet. Die weiteren case-Klauseln werden ignoriert. Die Angabe der default return-Klausel ist Pflicht, der hier notierte Ausdruck wird ausgewertet, wenn keine der case-Klauseln anwendbar ist. Soll in diesem Fall nichts zurückgegeben werden, muss hier eine leere Sequenz notiert werden, die default-Klausel hat dann also die Form default return ().

42
Q

Was ist ein Quantifizierender Ausdruck XPath? (2 Unterscheidungen)

A

Bei den quantifizierenden Ausdrücken wird zwischen der existenziellen und der universellen Quantifizierung unterschieden.

Bei einer existenziellen Quantifizierung wird überprüft, ob mindestens einer der Werte in der Sequenz eine angegebene Bedingung erfüllt. Die Syntax lautet:
some $variable in Ausdruck satisfies Bedingung

Bei einer universellen Quantifizierung wird überpüft, ob alle Werte in einer Sequenz eine angegebene Bedingung erfüllen. Die Syntax lautet:
every $variable in Ausdruck satisfies Bedingung

43
Q

Was ist ein for-Ausdruck in XPath?

A

for-Ausdrücke ermöglichen eine Iteration über eine Sequenz. Für jedes Item der Sequenz wird ein Wert zurückgegeben.
Eine temporäre Variable, genannt Bereichsvariable, wird an eine Sequenz gebunden. Für jedes Item der Sequenz wird der Ausdruck nach dem Schlüsselwort return ausgewertet und zurückgegeben.
Die Syntax lautet:
~~~
for $d in //dozent
return concat($d/name,’ ’,$d/vorname)
~~~
gibt die Sequenz (Maier Fritz,Müller Sabine) zurück.

44
Q

Was ist der einfache Map-Operator in XPath?

A

Mit dem einfachen Map-Operator »!« ist es möglich, über eine Sequenz von Items zu iterieren und für jedes Item einen Ausdruck auszuwerten.
Die Syntax lautet:
Sequenz ! Ausdruck
Der einfache Map-Operator stellt eine Verallgemeinerung des Pfad-Operators »/« dar. Beim Pfad-Operator muss auf der linken Seite immer eine Sequenz von Knoten stehen, daher ist nur im letzten Lokalisierungsschritt ein Ausdruck erlaubt, der andere Items als Knoten zurückliefert. Beim einfachen Map-Operator kann die Sequenz links vom »!« aus beliebigen Items, also Knoten, atomaren Werten oder Funktionen, bestehen.

45
Q

Was ist ein XQuery-Prozess?

A

Ein XQuery-Prozess kann Eingaben aus unterschiedlichen Quellen verarbeiten. Mit der Funktion fn:doc() kann auf XML-Dokumente zugegriffen werden. XQuery-Anfragen werden immer innerhalb eines Kontextes ausgewertet.

46
Q

Aus welchen Quellen kann XQuery Eingabedaten verarbeiten (6)?

A
  • XML-Dateien
  • Teile von XML-Dokumenten, die über das Web per URI angefordert werden
  • eine Kollektion (collection) von Dokumenten, auf die über einen URI zugegriffen wird
  • Daten, die in einer nativen XML-Datenbank gespeichert sind
  • Daten, die in einer relationalen Datenbank mit XML-Frontend gespeichert sind
  • XML-Dokumente im Arbeitsspeicher.
47
Q

Welchen zwei Funktionen sind in XQuery vorgesehen, um auf XML-Daten zuzugreifen?

A
  • fn:doc($uri as xs:string?) as document-node()?: dient zum Einlesen von XML-Daten aus einer externen Quelle, die durch einen URI eindeutig identifiziert wird. Rückgabewert der Funktion ist der Dokumentknoten des XML-Dokumentes.
  • fn:collection($arg as xs:string?) as node()*: ist implementierungsabhängig und wird nicht weiter betrachtet.
48
Q

Wie können einfache Textdateien und JSON-Dokumente mit XQuery eingelesen werden?

A

Es gibt zwei Funktionen:
* fn:unparsed-text($href as xs:string?) as xs:string?
* fn:json-doc($href as xs:string?) as item()?

49
Q

Wie wird eine XQuery Anfrage gespeichert?

A

Die XQuery-Anfrage wird i.Allg. als Textdatei gespeichert. Alternativ kann sie in Programmcode eingebettet oder dynamisch durch ein Programm generiert oder auch als Benutzereingabe über die Kommandozeile oder ein Dialogfenster eingelesen werden. Anfragen können auch aus verschiedenen Dateien, sogenannten Modulen, zusammengesetzt werden.

50
Q

Wie ist eine XQuery Anfrage aufgebaut?

A

Eine Anfrage in XQuery besteht aus drei Teilen:
* Versionsdeklaration (optional): Gibt an, welche XQuery-Version verwendet wird. Gültige Werte sind 1.0, 3.0 und 3.1. Fehlt diese Angabe, ist der Default-Wert vom Prozessor abhängig.
* Prolog (optional): kann folgendes enthalten:
* Deklaration von globalen und externen Variablen
* Deklaration von Funktionen
* Festlegung der Dokumentordnung
* Deklaration von Namensräumen
* Importe von Schemata und Bibliotheksmodulen
* Query-Body: Enthält ein oder mehrere, durch Kommata getrennte, Ausdrücke.

51
Q

Was ist der Kontext einer XQuery-Anfrage, welche beiden werden unterschieden?

A

Eine XQuery-Anfrage wird immer innerhalb eines Kontextes ausgewertet. Der Kontext eines Ausdrucks sind Informationen, die zum Analysieren und Auswerten des Ausdrucks verwendet werden.
Man unterscheidet:
* Statischer Kontext: Dazu gehören die Informationen, die während einer statischen Analyse des Ausdrucks, also vor dessen Auswertung, verfügbar sind. Dazu gehören z. B. Namensräume und Werte, die an externe Variablen von außen übergeben werden.
* Dynamischer Kontext: Dazu gehören die Informationen, die während der Auswertung des Ausdrucks verfügbar sind. Dazu gehören z. B. Datum und Uhrzeit und Informationen über den aktuellen Kontextknoten.

52
Q

Was ist ein XQuery-Prozessor, was gibt er zurück?

A

Ein XQuery-Prozessor ist ein Programm, das die XQuery-Anfrage parst, analysiert und auswertet. Mittlerweile gibt es eine Reihe von Open-Source, wie auch kommerziellen Implementierungen.
Als Resultat gibt der XQuery-Prozessor eine Sequenz von Werten zurück. Diese können auch – serialisiert – in einer Datei gespeichert werden.

53
Q

Was sind Konstruktoren bei XQuery, welche beiden werden unterschieden?

A

Mit Hilfe von Konstruktoren können in einem XQuery-Ausdruck Elemente, Attribute, Textknoten und Verarbeitungsanweisungen erzeugt werden. Hierbei werden direkte Konstruktoren (direct constructors) und berechnete Konstruktoren (computed constructors) unterschieden.

54
Q

Was sind direkte Konstruktoren?

A

Direkte Konstruktoren erzeugen Elemente und Attribute mit festen Namen. Hierzu werden Elemente und Attribute – entsprechend der XML-Syntax – explizit innerhalb des XQuery-Ausdrucks notiert.

55
Q

Was ist ein eingeschlossener Ausdruck bei direkten Konstruktoren?

A

XQuery-Ausdrücke, die innerhalb geschweifter Klammern stehen, werden ausgewertet. Solche Ausdrücke werden als eingeschlossene Ausdrücke (enclosed expressions) bezeichnet. Hiermit können dynamische Inhalte, d. h. Elementinhalte und Attributwerte, erzeugt werden.
Ein eingeschlossener Ausdruck kann als Attributwert notiert werden:
<element attribut="{XQuery-Ausdruck}">Inhalt</element>
Eingeschlossene Ausdrücke können innerhalb der geschweiften Klammern mehrere Unterausdrücke enthalten. In diesem Fall sind die Unterausdrücke durch Kommata zu trennen. Liefert ein eingeschlossener Ausdruck einen Attributknoten, muss dieser an erster Stelle stehen, ansonsten wird ein Fehler erzeugt.

56
Q

Was sind berechnete Konstruktoren?

A

Mit berechneten Konstruktoren kann – im Gegensatz zu direkten Konstruktoren – auch der Name des zu erzeugenden Knotens berechnet werden.
Berechnete Konstruktoren beginnen immer mit dem Schlüsselwort des zu erzeugenden Knotens. Die Schlüsselwörter können entsprechend der XML-Syntax verschachtelt werden. Sowohl der Name des Knotens als auch sein Wert können über einen eingeschlossenen Ausdruck berechnet werden.
Für die verschiedenen Knotentypen gilt folgende Syntax:
* Elementknoten: element Elementname {Inhalt}
* Attributknoten: attribute Attributname {Inhalt}
* Dokumentknoten: document {Inhalt}
* Textknoten: text {Inhalt}
* Verarbeitungsanweisungsknoten: processing-instruction {Inhalt}
* Kommentarknoten: comment {Inhalt}
* Namensraumknoten: namespace name {Inhalt}

57
Q

Was sind FLWOR-Ausdrücke, welche 8 Klauseln gibt es?

A

FLWOR-Ausdrücke sind das zentrale Sprachkonstrukt zur Formulierung komplexer Ausdrücke in XQuery.
FLWOR-Ausdrücke haben in XQuery eine ähnliche Bedeutung wie die SELECT-FROM-WHERE-Anfragen in SQL. Mit Hilfe eines FLWORAusdrucks kann jedoch nicht nur eine Anfrage an ein XML-Dokument gestellt, sondern auch ein neues XML-Dokument generiert werden.
Ein FLWOR-Ausdruck kann aus folgenden Klauseln bestehen:
* for: Klausel zur Variablenbindung (Bindesequenz, binding sequence)
* let: Klausel zur einfachen Variablenbindung
* window: (optional) wird nicht behandelt
* where: (optional) XPath-Ausdruck zur Filterung
* order by: (optional) Ausdruck zur Sortierung der Ergebnissequenz
* count: (optional) Bindung der Position an eine Variable
* group by: (optional) Gruppierung der Ergebnisse
* return: Erstellung einer Rückgabesequenz

58
Q

Welche 3 Regeln müssen bei FLWOR-Ausdrücken beachtet werden?

A
  • Ein FLWOR-Ausdruck muss mit einer for- oder einer let-Klausel beginnen.
  • Danach kann eine beliebige Anzahl der aufgelisteten Klauseln, außer der return-Klausel, in beliebiger Reihenfolge notiert werden.
  • Die letzte Klausel muss immer eine return-Klausel sein.
59
Q

FLWOR: return-Klausel

A

Die return-Klausel steht stets an letzter Stelle und stellt die Vorlage dar, nach der das Ergebnisdokument konstruiert werden soll. Dies ist möglich mit Hilfe direkter oder berechneter Konstruktoren oder einer Kombination von beiden. Pro Wertekombination wird der return-Ausdruck einmal ausgewertet.
Die Syntax lautet:
return Ausdruck

60
Q

FLWOR: Was sind die Eigenschaften der for-/let-Klausel?

A

Ein XQuery-Ausdruck muss mit mindestens einer for- oder mindestens einer let-Klausel beginnen. In for-und let-Klauseln werden Variablen an Ergebnisse von beliebigen XQuery-Ausdrücken gebunden. Der Typ der Variablen ergibt sich aus der Bindung. Die Variablenwerte sind nach erfolgter Bindung nicht mehr änderbar, können jedoch durch erneutes Binden überschrieben werden.

61
Q

FLWOR: for-Klausel

A

Bei der for-Klausel erfolgt für jedes Item der Ergebnissequenz eines Ausdrucks Ausdruck eine Bindung an die Variable $forvar.
Die Syntax lautet:
for $forvar in Ausdruck
Längere Sequenzen ganzer Zahlen lassen sich als Bereichsausdruck mit Hilfe des Bereichsoperators to angeben.
for $i in 1 to 3
return <out>{$i}</out>
In einem FLWOR-Ausdruck können mehrere for-Klauseln verwendet werden. Dies entspricht in etwa den verschachtelten Schleifen anderer Programmiersprachen.
Alternativ zu mehreren for-Klauseln können auch mehrere Variablenbindungen in einer for-Klausel gebunden werden. Die Variablen sind durch Kommata zu trennen.
for $i in (1,2), $j in ("a","b")
return <out>{$i} - {$j}</out>

62
Q

FLWOR: let-Klausel

A

Die Syntax einer let-Klausel lautet:
let $letvar := Ausdruck
Die let-Klausel bindet das Ergebnis des Ausdrucks geschlossen als Sequenz von Knoten bzw. Werten an die Variable $letvar. Mehrere let-Klauseln werden durch Kommata getrennt.

63
Q

FLWOR: where-Klausel

A

Durch eine where-Klausel wird die Ergebnissequenz aus den let- bzw. for-Klauseln weiter gefiltert.
Die Syntax lautet:
where boolescher_Ausdruck
In der where-Klausel können beliebige Ausdrücke angegeben werden, die einen booleschen Wert liefern. Es können Variablen referenziert werden, die durch eine for- oder let-Klausel gebunden sind. Zudem sind die Quantoren some und every möglich.
In einer where-Klausel können auch quantifizierende Ausdrücke formuliert werden. Verwendet wird dazu der Quantor some für die existenzielle Quantifizierung und every für die universelle Quantifizierung .

64
Q

FLWOR: oder by-Klausel

A

In der order by-Klausel können, durch Kommata getrennt, mehrere Sortierspezifikationen angegeben werden, die in der notierten Reihenfolge verarbeitet werden.
Die Syntax lautet:
order by Ausdruck Modifikator
Jede Sortierspezifikation besteht aus einem Ausdruck und einem optionalen Modifikator. Der Ausdruck darf nur ein Item liefern. Durch den Modifikator wird die Sortierreihenfolge festgelegt: ascending für eine aufsteigende Sortierung (Default-Wert), descending für eine absteigende Sortierung. Liegt kein XML-Schema vor, wird alphabetisch sortiert, ansonsten entsprechend des getypten Wertes.

65
Q

FLWOR: Positionsvariable

A

Die Positionsvariable in einer for-Klausel enthält die Nummer des Iterationsschrittes. Mit einer count-Klausel kann ein Zähler gesetzt werden, der auch bei Filterung und Sortierung korrekt ist.
Die Definition eines Zählers ist mit einer Positionsvariablen in einer for-Klausel möglich. Die Positionsvariable wird nach dem Schlüsselwort at initialisiert und gibt die Nummer des jeweiligen Durchgangs an.
Die Syntax einer for-Klausel mit Positionsvariable lautet:
for $forvar at $posvar in Ausdruck

66
Q

FLWOR: count-Klausel

A

In XQuery wurde mit der count-Klausel eine weitere Möglichkeit eingeführt, eine Zählervariable zu definieren, die an die Position in einer Sequenz gebunden ist. Diese Positionsnummer ist korrekt, auch wenn gefiltert und/oder sortiert wird. Eine count-Klausel darf an jeder Stelle zwischen der ersten Klausel und der return-Klausel in einem FLWOR-Ausdruck stehen.
Die Syntax lautet:
count $countvar
for $v in doc("fb.xml")//vorlesung/titel
order by $v descending
count $count
return

67
Q

FLWOR: group by-Klausel

A

Mit einer group by-Klausel werden die Items einer Eingabesequenz, die bei einem Gruppierungsschlüssel den gleichen Wert haben, in einer Gruppe zusammengefasst. Es wird dann über die Gruppen iteriert. Mit Aggregatfunktionen sind statistische Auswertungen der Gruppen möglich.
Die Syntax lautet:
group by $groupvar
Nach dem Schlüsselwort group by muss eine Variable angegeben werden, ein Ausdruck ist nicht möglich. Die Gruppierungsvariable muss an einen einzelnen atomaren Wert gebunden werden, den sogenannten Gruppierungsschlüssel.
Die Iteration des FLWOR-Ausdrucks erfolgt nun nicht mehr über die Items, die in der for-Klausel spezifiziert sind, sondern über die Gruppen, die return-Klausel wird daher für jede Gruppe ausgewertet. Durch die group by-Klausel ändert sich somit auch die Variablenbindung der Variablen, die vor ihr definiert worden sind.

68
Q

Wie können doppelte Einträge in einer Sequenz eliminiert werden?

A

Die Funktion
fn:distinct-values($arg as xs:anyAtomicType*) as
xs:anyAtomicType*
ist eine XPath-Funktion, die doppelte Einträge in einer Sequenz eliminiert. Damit dies funktioniert, werden Werte aus den Knoten extrahiert.

69
Q

Was ist ein Verbund in XQuery?

A

Ähnlich wie die join Operation in SQL, mit der zwei oder mehr Tabellen verbunden werden, können mit einem Verbund mehrer Sequenzen verbunden/verglichen werden.
Verbunde in XQuery werden durch verschachtelte for-Klauseln oder alternativ einer mehrfachen Variablenbindung und entsprechende where-Bedingungen programmiert.

70
Q

Zu welchen Namensräume gehören Funktionen in XQuery?

A

Da Funktionsnamen immer zu einem Namensraum gehören, sind sie stets qualifizierte Namen.
Eingebaute Funktionen gehören zu einem der vordefinierten Namensräume. Die meisten eingebauten Funktionen gehören zum Namensraum http://www.w3.org/2005/xpath-functions mit dem Default-Präfix fn.
Benutzerdefinierte Funktionen gehören zu dem für sie definierten Namensraum.

71
Q

Wie sieht in XQuery eine Funktionssignatur aus?

A

Durch die Funktionssignatur werden Übergabeparameter und signatur Rückgabewert einer Funktion zu beschrieben. Eine Funktionssignatur besteht aus dem Namen der Funktion, einer Parameterliste und dem Rückgabetyp. Die Typen der Parameter und der Typ des Rückgabewertes werden in Form eines Sequenztyps angegeben.
fn:function-name($paraName as ParaTyp, ...)
` as ReturnTyp`

72
Q

Was versteht man in XQuery unter dem Überladen einer Funktion?

A

Die Definition zweier Funktionen mit gleichem Namen, aber unterschiedlicher Parameterliste und daher verschiedener Signatur. Beispielsweise können so optionale Parameter definiert werden.

73
Q

Wie wird in XQuery eine Funktion aufgerufen?(Zwei Möglichkeiten)

A

Ein Funktionsaufruf besteht aus dem qualifizierten Namen der Funktion, dem in Klammern eine komma-separierte Liste der aktuellen Parameter (Argumente) folgt. Ein Funktionsaufruf kann überall eingefügt werden, wo ein Ausdruck erlaubt ist.
fn:substring(’abc’,2)
Der Arrow-Operator »=>« stellt eine alternative Syntax für einen Funktionsaufruf zur Verfügung. Ein Arrow Operator wendet eine Funktion auf den Wert eines Ausdrucks an, der Wert wird zum ersten Argument der Funktion.
upper-case(’abc’)
’abc’ => upper-case()
Akzeptiert eine Funktion mehr als ein Argument, werden die weiteren Argumente im Funktionsaufruf um eine Position verschoben.
substring(’abc’,2)
’abc’ => substring(2)

74
Q

Wie werden Benutzerdefinierte Funktionen deklariert?

A

Die Deklaration erfolgt entweder im Prolog der Anfrage, in der eine Funktion verwendet wird, oder in einem Bibliotheksmodul, welches dann mit import module importiert wird.
Die Syntax einer Funktionsdeklaration lautet:
declare function Präfix:Funktionsname(Parameterliste)
` as ReturnTyp { (: Funktionsrumpf :) };`
Eine Funktionsdeklaration beginnt mit dem Schlüsselwort declare, dann folgt der qualifizierte Funktionsname. In Klammern stehen die Parameter, getrennt durch Kommata. Nach dem Schlüsselwort as folgt der Typ des Rückgabewertes. Der Funktionsrumpf ist ein Ausdruck eingeschlossen in geschweiften Klammern. Als Ausdruck ist jeder XQuery-Ausdruck erlaubt. Die Funktionsdeklaration wird mit einem Semikolon abgeschlossen.

75
Q

Welche Namensräume können für Benutzerdefinierte Funktionen verwendet werden?

A

Alle Funktionen müssen in einem Namensraum liegen. Dem Funktionsnamen muss daher ein Namensraum-Präfix vorangestellt werden.
Im Hauptmodul können Sie jedes Präfix verwenden, das im Prolog deklariert wurde. Um in einem Hauptmodul auch die Deklaration von Funktionen ohne die Definition eines neuen Namensraums zu ermöglichen, steht der Namensraum http://www.w3.org/2005/xquery-local-functions mit dem vordefinierten Präfix local zur Verfügung.
Wird eine Funktion in einem Bibliotheksmodul deklariert, muss sie im Zielnamensraum dieses Moduls liegen.

76
Q

Wie werden Parameter für Benutzerdefinierte Funktionen deklariert?

A

Ein Parameter beginnt wie eine Variable mit einem »$«-Zeichen. Dem Parameternamen folgt nach dem Schlüsselwort as ein Sequenztyp.
declare function local:mwst($netto as xs:decimal)

77
Q

Wie viele eingebaute Funktionen gibt es in XPath, und wo können sie verwendet werden?

A

In der neusten XPath Version gibt es über 300 eingebaute Funktionen. Diese können nicht nur in XPath- und XQuery-Ausdrücken, sondern auch in XSLT-Stylesheets verwendet werden.

78
Q

Welche vier Namensräume gibt es für eingebaute Funktionen?

A
  • Default-Namensraum:
    http://www.w3.org/2005/xpath-functions
    Default-Präfix: fn
    Da dieser Namensraum der Default-Namensraum ist, können die Funktionen aus diesem Namensraum ohne Namensraum-Präfix verwendet werden.
  • Namensraum für mathematische Funktionen:
    http://www.w3.org/2005/xpath-functions/math
    Übliches Präfix: math
  • Namensraum für Map-Funktionen:
    http://www.w3.org/2005/xpath-functions/map
    Übliches Präfix: map
  • Namensraum für Array-Funktionen:
    http://www.w3.org/2005/xpath-functions/array
    Übliches Präfix: array
79
Q

Was sind XQuery-Module?

A

Ein XQuery-Modul ist ein Stück XQuery-Code. Ein Modul, das eine Anfrage und evtl. einen Prolog enthält, wird als Hauptmodul (main module) bezeichnet. Module, die nur einen Prolog enthalten, können nicht für sich selbst ausgewertet werden. In ihnen können Variablen und Funktionen deklariert werden, die so in mehreren Anfragen verwendet werden können. Diese Module werden als Bibliotheksmodule (library module) bezeichnet.

80
Q

Wie wird ein Bibliotheksmodul deklariert?

A

Ein Bibliotheksmodul muss mit einer Modul-Deklaration beginnen. In der Deklaration wird der Zielnamensraum festgelegt und dieser an ein Präfix gebunden.
Die Syntax lautet:
modul namespace Präfix = "URI"
module namespace fh = "http://www.meine-fh.de";
Alle Funktionen und Variablen, die in diesem Modul deklariert werden, müssen qualifiziert werden und dem Zielnamensraum angehören.

81
Q

Wie werden Module importiert?

A

Sowohl das Hauptmodul als auch Bibliotheksmodule können andere Module importieren. Die Syntax für den Modulimport lautet:
import module "Namensraum-URI" at "location-URI"
Nach import module folgt der Namensraum des zu importierenden Moduls und anschließend nach at der Speicherort der Datei, die das Modul enthält. Beim Import kann auch ein Namensraum-Präfix für den Namensraum des importierten Moduls festgelegt werden. In diesem Fall lautet die Syntax:
import module namespace Präfix = "Namensraum-URI" at "location-URI"

82
Q

Was sind Globale Variablen und wozu werden sie verwendet?

A

Variablen, die im Prolog einer XQuery-Anfrage deklariert und gebunden werden, werden als globale Variablen bezeichnet, damit sie von den im Body gebundenen unterschieden werden können.
Die Deklaration einer globalen Variablen im Prolog ist notwendig, wenn
* die Variable in einer Funktion, die im gleichen Modul deklariert wird, referenziert wird,
* die Variable in anderen Modulen referenziert wird, die dieses Modul importieren,
* der Wert der Variablen extern durch den Prozessor, außerhalb des Gültigkeitsbereiches (scope) der Query, gesetzt wird.

Die Deklaration von Variablen im Prolog ist sinnvoll zur Definition von Konstanten oder Werten, die vorab berechnet und dann innerhalb der Query verwendet werden.

83
Q

Wie werden globale Variablen deklariert?

A

Die Syntax einer Variablendeklaration lautet:
declare variable $varname as Sequenztyp := Ausdruck;
Eine Variablendeklaration beginnt mit den Schlüsselworten declare variable. Es folgt der qualifizierte Variablenname, dem stets ein »$«-Zeichen vorangestellt werden muss. Nach dem Zuweisungsoperator »:=« folgt der Initialisierungsausdruck. Die Klausel as Sequenztyp ist optional. Mit ihr wird der Typ der Variablen als Sequenztyp angegeben.
Wenn es sich um ein Bibliotheksmodul handelt, muss eine Variable explizit dem Namensraum des Bibliotheksmoduls angehören.

84
Q

Was sind Maps in XQuery, welche Werte können sie enthalten?

A

Eine Map (auch Hash oder assoziatives Array) ist eine Sammlung von Einträgen, wobei jeder Eintrag aus einem Schlüssel-Wert-Paar (key-value pair) besteht. Der Schlüssel muss ein atomarer Wert und eindeutig sein. Der Wert kann von beliebigem Typ, also ein einzelnes Item oder auch eine Sequenz von Items sein. Da ein Wert in einer Map ein beliebiges Item sein kann, kann er auch eine Map sein, so dass Maps auch verschachtelt sein können.
Zur Operation auf Maps sind Funktionen definiert, die im Namensraum http://www.w3.org/2005/xpath-functions/map liegen. Dieser wird üblicherweise an das Präfix map gebunden.

85
Q

Welche beiden Sequenztypen werden für Maps verwendet?

A

Sequenztypen werden verwendet, um genaue Typangaben für eine Sequenz zu spezifizieren. Zur Spezifikation eines Sequenztyps für Maps, auch Map-Test genannt, ist ein generischer und ein spezieller Typ vorgesehen.
Ein generischer Typ für Maps spezifiziert eine Map, bei der Schlüssel und Werte von beliebigem Typ sind. Er hat die Form:
map(*)
Ein spezieller Typ für Maps spezifiziert die Typen für die Schlüssel und die Werte der Map in der Form:
map(Typ_Schlüssel, Typ_Wert)

86
Q

Welche zwei Möglichkeiten gibt es um eine Map zu konstruieren?

A

Es gibt zwei Möglichkeiten eine Map zu konstruieren:
* mit einem Map-Konstruktor
Der Map-Konstruktor kann verwendet werden, wenn die Einträge der Map zum Zeitpunkt der Query-Erstellung bekannt sind.
Dieser Konstruktor kann an allen Stellen verwendet werden, an denen ein XPath-Ausdruck erlaubt ist. Die Syntax ist:
map {key1:value1, key2:value2, ...}
* durch eine Kombination der Funktionen map:entry() und map:merge().
Mit der Funktion map:entry() wird eine Map mit einem einzigen Eintrag konstruiert. Sie hat die Signatur:
map:entry($key as xs:anyAtomicType, $value as item()*) as map(*)
Die Funktion map:merge() erzeugt aus einer Sequenz von Maps eine neue Map. Ihre Signatur ist:
map:merge($maps as map(*)*) as map(*)
Mit einer Kombination der Funktionen map:entry() und map:merge() ist die Konstruktion einer Map auch mit einer variablen Zahl von Einträgen, basierend etwa auf einem Eingabedokument, möglich

87
Q

Welche drei Möglichkeiten gibt es auf die Einträge einer Map zugreifen zu können?

A

Für den Zugriff auf die Einträge einer Map gibt es verschiedene Möglichkeiten:
* die Funktion map:get()
Die Signatur der Funktion map:get() lautet:
map:get($map as map(*), $key as xs:anyAtomicType) as item()*
Sie hat zwei Parameter, der erste ist die Map, der zweite der Schlüssel. Zurückgegeben wird der Wert, der zu diesem Schlüssel gehört. map:get($vmap,"v1")
* den Aufruf einer Map wie eine Funktion
Jede Map kann als anonyme Funktion betrachtet werden. Diese anonyme Funktion hat einen Parameter, der den Schlüssel repräsentiert und dessen Sequenztyp xs:anyAtomicType ist, und den Rückgabetyp item()*, da die Einträge der Map von beliebigem Typ sein können. Um auf einen Eintrag einer Map zuzugreifen, kann die Map wie eine Funktion behandelt werden. Hierzu wird die Map einer Variablen zugewiesen und der Variablenname wird wie ein Funktionsname verwendet. $vmap("v1")
* den Lookup-Operator.
Eine sehr kurze Schreibweise für den Zugriff auf eine Map bietet der Lookup-Operator. Er besteht aus einem Fragezeichen »?«, dem ein Spezifikator folgt. Als Spezifikator ist möglich:
1. eine Wildcard »*«, zurückgegeben wird eine Sequenz der Werte der Map,
2. der Name eines Schlüssels,
3. ein Ausdruck in Klammern.
$vmap?*

88
Q

Wie kann über alle Einträge einer map iteriert werden?

A

Mit der Funktion map:for-each() wird über alle Einträge einer Map iteriert und für jeden Eintrag eine Funktion ausgeführt. Ihre Signatur ist:
map:for-each($map as map(*),
$action as function(xs:anyAtomicType, item()*) as item()*)
as item()*
Erstes Argument der Funktion ist eine Map, das zweite die auszuführende Funktion. Diese muss über zwei Argumente verfügen, die Schlüssel und Wert der Map repräsentieren.

89
Q

Was ist ein Array in XQuery?

A

Ein Array in XPath/XQuery ist ein nummerisches Arrays, also eine geordnete Liste von Werten. Die Werte werden Member genannt, auf diese kann über ihre Positionsnummer zugegriffen werden. Das erste Member eines Arrays hat die Positionsnummer 1 und nicht 0, wie dies in anderen Programmiersprachen üblich ist. Als Wert ist jeder Ausdruck erlaubt. Zudem gilt, dass die Member eines Arrays nicht vom gleichem Typ sein müssen.
Die eingebauten Funktionen, die auf Arrays operieren, liegen im Namensraum Namenraum http://www.w3.org/2005/xpath-functions/array. Dieser wird üblicherweise an das Präfix array gebunden.

90
Q

Welche beiden Sequenztypen werden für Arrays verwendet?

A

Sequenztypen werden verwendet, um genaue Typangaben für eine Sequenz zu spezifizieren. Zur Spezifikation eines Sequenztyps für Arrays, auch Array-Test genannt, ist ein generischer und ein spezieller Typ vorgesehen.
Ein generischer Typ für Arrays spezifiziert ein Array, bei dem die Member des Arrays von beliebigem Typ sind. Er hat die Form: array(*)
Ein spezieller Typ für Arrays spezifiziert die Typen der Member in der Form: array(Sequenztyp)

91
Q

Welche zwei Konstruktoren gibt es um ein Array zu konstruieren?

A

Zur Konstruktion eines Arrays in XQuery gibt es zwei Konstruktoren:
* einen Konstruktor mit eckigen Klammern (square array constructor)
Bei einem square array constructor werden die Werte, durch Kommata getrennt, in eckigen Klammern notiert.
* einen Konstruktor mit geschweiften Klammern (curly array constructor)
Ein curly array constructor beginnt mit dem Schlüsselwort array und in geschweiften Klammern werden die durch Kommata getrennten Werte notiert.

Da ein Member eines Arrays von beliebigem Typ sein kann, kann Arrays das Member auch ein Array sein, so dass Arrays auch verschachtelt sein können.

92
Q

Wie kann auf Array-Member zugegriffen werden?

A

Für den Zugriff auf die Member eines Arrays gibt es verschiedene
Möglichkeiten:
* die Funktion array:get()
Die eingebaute Funktion array:get() zum Zugriff auf Array-Member hat die Signatur:
array:get($array as array(*), $position as xs:integer) as item()*
Das erste Argument der Funktion ist ein Array, das zweite die Position des gewünschten Members.
* den Aufruf eines Arrays wie eine Funktion
Ein Array kann als anonyme Funktion betrachtet werden. Diese anonyme Funktion hat einen Parameter, der den Index repräsentiert und dessen Sequenztyp xs:integer ist, und den Rückgabetyp item()*, da die Member des Arrays von beliebigem Typ sein können. Um auf ein Member eines Arrays zuzugreifen, wird das Array einer Variablen zugewiesen und der Variablenname wird wie ein Funktionsname verwendet.
$a(1): liefert das erste Member.
* den Lookup-Operator.
Eine sehr kurze Schreibweise für den Zugriff auf ein Array bietet der Lookup-Operator. Er besteht aus einem Fragezeichen »?«, dem ein Spezifikator folgt. Als Spezifikator ist möglich:
1. eine Wildcard »*«, zurückgegeben wird eine Sequenz, die alle Member des Arrays enthält,
2. eine Integer, zurückgegeben wird das Member an dieser Position,
3. ein Ausdruck in Klammern.
$a?1: liefert das Member an der ersten Position.

93
Q

Wie kann über alle Array-Member iteriert werden?

A

Ist die Anzahl der Member eines Arrays bekannt, kann mit einem for-Ausdruck in Kombination mit einem Bereichsausdruck über alle Member des Arrays iteriert werden.
Die Funktion array:size($array as array(*)) as xs:integer liefert die Anzahl der Member eines Arrays.
for $i in 1 to array:size($a)
` return $a($i)`

94
Q

Was ist JSON, zwei Vorteile gegenüber XML?

A

JSON (JavaScript Object Notation) ist ein kompaktes Datenformat, das als Datenaustauschformat zwischen Anwendungen in den letzten Jahren immer beliebter wurde. Eingesetzt wird es insbesondere in Webanwendungen und mobilen Applikationen zur Datenübertragung zwischen Client und Server.
Ein Vorteil ist die deutlich kleinere Datenmenge im Vergleich zu XML.
Zudem ist jedes gültige JSON-Dokument auch ein gültiges JavaScript-Objekt, so dass eine Weiterverarbeitung mit JavaScript sehr einfach ist.

95
Q

Welche zwei Möglichkeiten gibt es, um JSON-Daten verlustfrei auf Konstrukte des XPath/XQuery-Datenmodells abzubilden?

A

Die erste Methode verwendet Maps zur Repräsentation von JSON-Objekten und Arrays zur Repräsentation von JSON-Arrays.
Die zweite Methode repräsentiert alle JSONKonstrukte durch Element- und Attributknoten.

96
Q

Wie funktioniert die Repräsentation von JSON durch Maps und Arrays?

A

Zum Parsen von JSON stehen zwei Funktionen zur Verfügung:
* fn:parse-json($json-text as xs:string?) as item()?
parst einen String im JSON-Format und gibt das Resultat typischerweise in Form einer Map oder eines Arrays zurück.

  • fn:json-doc($href as xs:string?) as item()?
    liest eine externe Ressource, die als JSON geparst wird.

Der Funktion parse-json() wird ein String im JSON-Format übergeben. Das Ergebnis wird der Variablen $d zugewiesen.
~~~
declare variable $d:= parse-json(’{
“v1”: “Informatik”,
“v2”: “Technik I”,
“v3”: “Technik II”
}’);
~~~
In $d ist nun folgende Map gespeichert:
~~~
map {
“v1”: “Informatik”,
“v2”: “Technik I”,
“v3”: “Technik II”
}
~~~
Ist der JSON-String in einer Datei namens b1_vorl.json gespeichert, liefert der Aufruf json-doc("b1_vorl.json") das gleiche Ergebnis.

97
Q

Was versteht man unter Serialisieren, wie funktioniert es?

A

Unter serialisieren versteht man das Abbilden der Ergebnisse eines XQuery-Ausdrucks als JSON-Dokument.
Im Prolog der XQuery-Anfrage werden die notwendigen Serialisierungsparameter spezifiziert. Da alle Serialisierungsparameter
im Namensraum http://www.w3.org/2010/xslt-xquery-serialization liegen, muss dieser deklariert und an ein Präfix gebunden werden.
Die Serialisierungsparameter werden durch die Deklaration einer Option spezifiziert. Die Syntax lautet: declare option Optionsname "Wert";
Zur Serialisierung zu JSON wird die Option method auf den Wert json gesetzt. Eine Einrückung des Ergebniscodes wird durch die
Option indent mit dem Wert yes realisiert.

xquery version "3.1";
declare namespace
    output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "json";
declare option output:indent "yes";

map { "a": 1, "e": 2, "i": 3, "o": 4, "u": 5}
Der Name der JSON-Datei wird im Transformationsszenario festgelegt. Ihr Inhalt ist:
~~~
{
“a”:1,
“e”:2,
“i”:3,
“o”:4,
“u”:5
}
~~~

98
Q

Wie funktioniert die Repräsentation von JSON durch XML-Elemente?

A

Jedes JSON-Konstrukt wird durch einen passenden Elementnamen repräsentiert. Für ein Name/Werte-Paar innerhalb eines Objektes wird das Attribut key verwendet, das als Wert den Namen besitzt. Die XML-Elemente liegen im Namensraum http://www.w3.org/2005/xpath-functions.
* fn:json-to-xml($json-text as xs:string?) as document-node()?
parst einen String im JSON-Format und gibt das Resultat als XML-Dokumentknoten zurück. Jedes JSON-Konstrukt wird durch ein Element mit passendem Namen repräsentiert.
* fn:xml-to-json($input as node()?) as xs:string?
konvertiert einen XML-Baum, der zur JSON-Repräsentation passt, in einen JSON-String.

Der Aufruf von:
~~~
json-to-xml(’{
“x”:1,
“y”:”test”,
“z”:[1,2,4]
}’)
~~~
liefert folgendes XML-Dokument
~~~
<?xml version=”1.0” encoding=”UTF-8”?>

<map>
<number>1</number>
<string>test</string>
<array>
<number>1</number>
<number>2</number>
<number>4</number>
</array>
</map>

~~~

99
Q

Wie kann der Inhalt einer JSON-Datei in XML umgewandelt werden?

A

Um den Inhalt einer JSON-Datei in XML umzuwandeln, wird zuerst die Funktion fn:unparsed-text() zum Lesen der Datei angewandt. Diese liefert einen String zurück, der der Funktion fn:json-to-xml() übergeben wird. Die Signatur von fn:unparsedtext() ist:
fn:unparsed-text($href as xs:string?) as xs:string?