xPath
XPath can be used to navigate through elements and attributes in an XML document.
geschieht durch Angeben von einem Pfad zu diesem Knoten
Pfad
Pfade bestehen aus eine Sequenz von Schritten (location steps), jeweil durch / (axis) getrennt
In einem location path mit mehreren Ebenen, gibt jeder Schritt ein immer feiner werdendes Sieb an Kontext vor, welcher berücksichtigt werden kann. Je weiter man bei diesem location path nach rechts läuft, desto mehr Teile des Dokuments werden ausgeschlossen.
Prefix
absolut/root gibt von der Wurzel aus an
relative und anywhere von beliebigen Element aus
Schritte
selektieren eine Menge von Knoten, die in der einen oder anderen Art und Weise mit dem aktuellen Kontext-Knoten in Verbindung stehen.
Jeder Schritt besteht aus drei Teilen:
axis, Knotentest und Prädikate
axis und Prädikate müssen nicht angegeben werden, der Knotentest schon
Axis (pl. axes), Definition
ist ein Pfad durch den Dokumentenbaum, der bei einem Knoten beginnt und entlang einer gewissen Beziehung zwischen den Knoten folgt.
kann als „Richtung“ verstanden werden, in der Knoten – vom aktuell selektierten Knoten aus gesehen, gesammelt werden sollen
axis werden mit einem doppelten Doppelpunkt :: von dem darauf folgenden Knoten-Test abgetrennt
axes, Überblick
Knoten-Test
getestet wird
Name eines Knotens (z.B. h1, oeuvre, ...)
generischer Name, der mit einem wildcard spezifiziert wird (*, /oeuvre/*, pc:*, *:episode), welche Art von Knoten dabei berücksichtig werden hängt auch von der gewählten axis ab (z.B. wenn die axis “attribute” gewählt ist)
Art des Knotens (text(), processing-instruction(), comment(), node(), element(XMLSchemaType), attribute(XMLSchemaType)
Node (Knoten)
there are seven kinds of nodes: element, attribute, text, namespace, processing-instruction, comment, and root nodes.
Die Knoten sind nach der Ordnung des Document Object Models geordnet
Knoten haben hierarchische Verwandtschaftsbeziehungen zu den anderen Knoten im Dokument
node-set ist eine Menge von Knoten, die durch einen XPath-location step (oder gesamten Pfad) miteinander verwandt sind
Knotenmenge ist der übliche Rückgabewert, einzelne Knoten werden nur in speziellen Fällen zurück gegeben
Node-sets sind Mengen im mathematischen Sinn, d.h., Knoten können in ihnen nicht doppelt vorkommen
Knotentypen
Prädikat
filtert in xPath Knoten-Sets nach bestimmten Kriterien
filtert durch Durchführung eines boolschen Test
Filter nach Index durch numerische Angabe oder mit Funktionen
eines oder mehrere Prädikate können hintereinander verwendet werden (chaining order matters)
können logisch (and, or, not) miteinander verbunden werden
können xPath-Ausdrücke beinhalten
Tokens
Sequenz von Unicode Characters
in Anführungszeichen handelt es sich um einen String
Funktionen (Definition)
stellen eine Relation zwischen einer Eingabe und einer Ausgabe her
beliebig viele Eingabewerte, die einem Ausgabewert zugeordnet werden
Syntax: funktionsname ($arg1, $arg2, $argn)
wichtige String-Funktionen
fn:concat($arg1, $arg2, ...): Gibt einen String, der aus den Eingabewerten zusammengesetzt ist zurück
fn:string-join($arg1, $sep): Gibt einen String, der aus den zusammengesetzten Elementen der Sequenz $arg1 besteht, jeweils durch das Trennzeichen $sep separiert, zurück
fn:substring($source, $start, [$length]): Gibt den Teil des Strings $source zurück, der bei $start beginnt (und ggf. bei $length endet)
fn:string-length($arg): Gibt die Anzahl der Characters/Zeichen des Strings $arg zurück
fn:normalize-space($arg): Gibt den String $arg mit normalisiertem Whitespace zurück, d.h. Whitespace am Anfang und am Ende wird gelöscht, mehrfacher Whitespace im String wird auf Länge 1 reduziert
fn:upper-case($arg)
fn:lower-case($arg)
String-Funktionen mit Substring-Matching
fn:contains($arg1, $arg2): Gibt True zurück, wenn der String $arg2 in $arg1 vorkommt, sonst False
fn:starts-with($arg1, $arg2): Gibt True zurück, wenn der String $arg1 mit $arg2 beginnt, sonst False
fn:ends-with($arg1, $arg2): Gibt True zurück, wenn der String $arg1 mit $arg2 endet, sonst False
fn:substring-before($arg1, $arg2): Gibt den Teil des Strings $arg1 zurück, der vor $arg2 steht
fn:substring-after($arg1, $arg2): Gibt den Teil des Strings $arg1 zurück, der nach $arg2 steht
String-Funktionen mit regulären Ausdrücken
fn:matches($input, $pattern): Gibt True zurück, wenn der String $input auf den Regulären Ausdruck $pattern matched, sonst False
fn:replace($input, $pattern, $replacement): Gibt einen String zurück, der aus dem String $input erzeugt wird, indem alle Substrings, die mit dem regulären Ausdruck $pattern übereinstimmen, durch den String $replacement ersetzt werden.
fn:tokenize($input, $pattern): Gibt eine Sequenz von Strings zurück, die durch Aufteilung des Strings $input überall dort entsteht, wo ein Trennzeichen $pattern gefunden wird
fn:analyze-string($input, $pattern): Analysiert den String $input anhand des regulären Ausdrucks $pattern und gibt eine XML-Struktur1 zurück, die angibt, welche Teile von $input mit dem regulären Ausdruck übereinstimmten bzw. nicht übereinstimmten, und im Fall von übereinstimmenden Substrings, welche Substrings mit jeder Erfassungsgruppe des regulären Ausdrucks übereinstimmten.
let expression
Beispiel: let $name := /example/example/text() return fn:string-length($name)
deklariert Variablen mit vorangestellten $-Zeichen
Es können
mehrere (beliebig viele) Variablen gleichzeitig deklariert
direkt in der nächsten Deklaration weiterverwendet werden
conditional-expressions
Syntax: if(…) then… else…
konditionale Entscheidungen, wie in anderen Sprachen
for-loops
Syntax: for $var in (pfad) return
iteration in Sequenzen
Last changed3 months ago