XInclude, XPath und XQuery Flashcards
Wofür wird XInclude verwendet?
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.
Was ist die Motivation hinter XInclude?
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.
Was ist XPath?
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.
Was ist das Datenmodell XDM?
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.
Was sind Knoten im XML-Dokument?
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.
Welche 7 Knotenarten gibt es im XML-Dokument?
- 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.
Welche zwei Arten von Werten werden bei Knoten unterschieden?
- 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.
Was sind Atomare Werte und wozu werden sie verwendet?
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.
Welche Typen können Atomare Werte sein?
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
Was ist eine Sequenz im XPath/XQuery-Datenmodell?
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.
Welche 6 Eigenschaften hat eine Sequenz im XPath/XQuery-Datenmodell?
- 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.
Welche 6 Operationen gibt es für Sequenz im XPath/XQuery-Datenmodell?
- 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 Bereichsausdruck1 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.
Was sind Sequenztypen im XPath/XQuery-Datenmodell?
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.
Welche Sequenztypen und Kardinalitätsangaben gibt es im XPath/XQuery-Datenmodell?
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
Was sind Ausdrücke in XPath und XQuery und was ist der Rückgabewert?
In XPath und XQuery wird jede XPath-Beschreibung bzw. jede gültige Suchanfrage als Ausdruck bezeichnet. Rückgabewert eines Ausdrucks ist immer eine Sequenz.
Welche 5 Syntaxregeln gelten für Ausdrücke in XPath und XQuery
- 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 :)
Welche XPath/XQuery Ausdrücke werden unterschieden?
- 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 “!
”
Was sind Elementare Ausdrücke in XPath/XQuery?
Zu den elementaren Ausdrücken gehören:
* Literale
* Variablen
* Funktionsaufrufe
* Klammerausdrücke
Was sind Arithmeitsche und logische Ausdrücke in XPath/XQuery?
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
.
Was sind Pfadausdrücke in XPath/XQuery?
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
Was sind Lokalisierungspfade und Achsen, welche beide Arten von Lokalisierungspfaden werden unterschieden??
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.
Wie sind Lokalisierungspfade aufgebaut?
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.
Was ist ein Achsenschritt, wozu wird er verwendet?
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.
Welche 24 Achsen gibt es in XPath?
- 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.
Was sind Rückwärts gerichtete Achsen, welche 5 gibt es?
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
Welche Hauptknotentypen gibt es für Achsen?
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
.
Was ist ein XPath-Knotentest?
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.
Welche Filterkriterien gibt es für XPath-Knotentest?
- 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 genanntchild::*:
liefert alle Kindelemente des Kontextknotens. - Knotentyp: Knoten können auch anhand ihres Typs ausgewählt werden.
Welche Knotentyp-Tests sind definiert?
-
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 ElementknotenEname
aus. -
attribute()
: Wählt alle Attributknoten aus. -
attribute(Aname)
: Wählt alle AttributknotenAname
aus.
child::dozent/child::name/child::text()
: alle Textknoten, die Kindelemente dieser name
-Knoten sind, werden zurückgeliefert.
Wie können Lokalisierungspfade abgekürzt werden?
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 - Beschreibungchild::
- (Weglassen des Achsenbezeichners) - Die child-Achse ist die Default-Achseself::node
- .
- Kontextknotenparent::node()
- ..
- Elternknotenattribute::
- @
- Attributachse/descendant-orself:: node()/
- //
- Nachfahren irgendwo im Baum
Was sind XPath-Prädikate, wie werden sie angegeben und wo verwendet?
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.
Wie sieht ein Prädikat aus? -> Ein Beispiel
(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.
Was ist der Rückgabewert eines Prädikts?
Ein allgemeines Prädikat liefert einen booleschen Wert. Alle Knoten, bei denen dieser Wert true ist, sind in der Ergebnissequenz.
Welche 6 Operatoren stehen bei der Formulierung des Prädikate zur verfügung?
- 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
,<<
,>>
Wie kann ein Nummerisches Prädikat verwendet werden?
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.
Was bewirken die Funktionen position()
und last()
der XPath-Prädikate?
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.
Können mehrere Prädikate hintereinander verwendet werden?
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.
Was ist ein String-Konkatenations-Ausdruck in XPath?
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.
Was ist ein Verlgeichsausdruck in XPath?
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: <<,
>>