XML Path Language: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Definition =
== Definition ==
Die '''XML Path Language (XPath)''' ist eine Abfragesprache, die XML-Fragmente als Baum interpretiert und daraus eine Selektion einer Knotenmenge ermöglicht (Lokalisierung).
Die '''XML Path Language (XPath)''' ist eine Abfragesprache, die XML-Fragmente als Baum interpretiert und daraus eine Selektion einer Knotenmenge ermöglicht (Lokalisierung).


XPath wird im Rahmen des [http://www.w3.org W3C]-Konsortiums gemeinsam durch die ''XSL Working Group'' und ''XML Linking Working Group'' als Standard spezifiziert. Die aktuelle Version ''XPath 2.0'' und Vorgänger tragen den finalen Status der ''W3C Empfehlung''. XPath gilt als essentielles Fundament für weitere XML-basierte W3C-Standards wie [[XQuery]], [[XSLT]] oder [[XForms]].
XPath wird im Rahmen des [http://www.w3.org W3C]-Konsortiums gemeinsam durch die ''XSL Working Group'' und ''XML Linking Working Group'' als Standard spezifiziert. Die aktuelle Version ''XPath 2.0'' und Vorgänger tragen den finalen Status der ''W3C Empfehlung''. XPath gilt als essentielles Fundament für weitere XML-basierte W3C-Standards wie [[XQuery]], [[XSLT]] oder [[XForms]].


=Bemerkungen=
==Bemerkungen==
XPath ermöglicht praktisch filternde Sichten auf '''unveränderte''' Eingabedokumente, die nur interessierende XML-Knoten und deren Inhalt umfasst.
Ein XPath bietet praktisch eine gefilterte Sicht auf ein '''unverändertes''' Eingabedokument, die nur interessierende XML-Knoten zeigt. Den Vorgang bezeichnet man daher auch oft als Navigation oder Addressierung in einem XML-Dokument.


=Datenmodell=
==Datenmodell==
Als Datenmodell dient eine logische Interpretation geparster XML-Dokumente als baumartig geordnete Sequenz von Einheiten. Über die Ordnung bestimmen Verschachtelung und Dokumentreihenfolge. Die Einheiten heißen ''Knoten'' und können an Blattpositionen ''Werte'' atomaren Typs tragen.
Als Datenmodell dient eine logische Interpretation geparster XML-Dokumente als baumartig geordnete Sequenz von Einheiten. Über die Ordnung bestimmen Verschachtelung und Dokumentreihenfolge. Die Einheiten heißen ''Knoten'' und können an Blattpositionen ''Werte'' atomaren Typs tragen.


Zeile 25: Zeile 25:
Alle Knoteneigenschaften können über Quasifunktionen (Accessors) ausgelesen werden, die z.B. den qualifizierten Namen, getragene Typ und Wert oder Eltern und Kinder in der Ordnung zurückgeben. Das Datenmodell wird mittlerweile als [http://www.w3.org/TR/xpath-datamodel XQuery 1.0 and XPath 2.0 Data Model] eigenständig standardisiert.
Alle Knoteneigenschaften können über Quasifunktionen (Accessors) ausgelesen werden, die z.B. den qualifizierten Namen, getragene Typ und Wert oder Eltern und Kinder in der Ordnung zurückgeben. Das Datenmodell wird mittlerweile als [http://www.w3.org/TR/xpath-datamodel XQuery 1.0 and XPath 2.0 Data Model] eigenständig standardisiert.


=Lokalisierung=
==Lokalisierung==
Ein XPath-Lokalisierungspfad ist nun ein Ausdruck, der eine Menge von 0 bis n Knoten aus diesem Baum auswählt, welche hinsichtlich sukzessiver, durch ''/'' separierter Lokalisierungskriterien übereinstimmen. Beginnt der Pfad bereits mit einem Schrägstrich, so ist er absolut d.h. beginnend von der Wurzel auszuwerten, andernfalls relativ zum Kontext. Jeder Lokalisierungsschritt präzisiert die Selektion und hat die folgende Syntax:
Ein XPath-Lokalisierungspfad ist nun ein Ausdruck, der eine Menge von 0 bis n Knoten aus diesem Baum auswählt, welche hinsichtlich sukzessiver, durch ''/'' separierter Lokalisierungskriterien übereinstimmen. Beginnt der Pfad bereits mit einem Schrägstrich, so ist er absolut d.h. beginnend von der Wurzel auszuwerten, andernfalls relativ zum Kontext. Jeder Lokalisierungsschritt präzisiert die Selektion und hat die folgende Syntax:


<code>/<Achse>::<Knotentest><Prädikat>*</code>
<code>/<Achse>::<Knotentest><Prädikat>*</code>


==Achse==
===Achse===
Achsen werden stets vom aktuellen Kontextknoten angelegt und grenzen die Auswahl für den nächsten Schritt auf eine Untermenge ein, die in einer bestimmten Beziehung zum Kontextknoten stehen. Diese erinnern oft an Familienbeziehungen und resultieren aus der Baumstruktur:
Achsen werden stets vom aktuellen Kontextknoten angelegt und grenzen die Auswahl für den nächsten Schritt auf eine Untermenge ein, die in einer bestimmten Beziehung zum Kontextknoten stehen. Diese erinnern oft an Familienbeziehungen und resultieren aus der Baumstruktur:


[[Medium:Xpath_axes.png]]
[[Datei:Xpath_axes.png]]


Die wichtigsten Achsen umfassen:
* self: der Knoten selber
* self: der Knoten selber
* child: Kinder des Knotens
* child: Kinder des Knotens
* parent: Eltern des Knotens
* parent: Eltern des Knotens
* descendant: Kinder und Kindeskinder des Knotens
* descendant: Kinder und Kindeskinder des Knotens
* ancestors: Eltern und Vorfahren des Knotens
* ancestor: Eltern und Vorfahren des Knotens
* attribute: Attribute des Knotens
* attribute: Attribute des Knotens
* preceding: Vorhergehend in Dokumentrichtung
* preceding: Vorhergehend in Dokumentrichtung
* following: Nachfolgend in Dokumentrichtung
* following: Nachfolgend in Dokumentrichtung
* Einige Kombinationen stehen auch bereit wie z.B. descendant-or-self
* Kombinationen sind teils verfügbar wie z.B. descendant-or-self


==Knotentest==
===Knotentest===
Ein Knotentest wählt nun aus der durch die Achse eingeschränkten Menge diejenigen Knoten aus, die den Knotentest bestehen. Zur Prüfung kann man folgende Alternativen wählen:
Ein Knotentest wählt nun aus der durch die Achse eingeschränkten Menge diejenigen Knoten aus, die den Knotentest bestehen. Zur Prüfung kann man folgende Alternativen wählen:


Zeile 51: Zeile 52:
* Knotentyp: Formulierung durch die Angabe einer XPath-Funktion, die den Typ zurückgibt (z.B. text() für Textknoten, attribute() für Attributknoten).
* Knotentyp: Formulierung durch die Angabe einer XPath-Funktion, die den Typ zurückgibt (z.B. text() für Textknoten, attribute() für Attributknoten).


==Prädikate==
===Prädikate===
Prädikate werden in eckige Klammern gefasst und können beliebig oft angehängt werden. Sie filtern die Knotenmenge erneut über zwei mögliche Arten:
Prädikate werden in eckige Klammern gefasst und können beliebig oft angehängt werden. Sie filtern die Knotenmenge erneut über zwei mögliche Arten:


Zeile 57: Zeile 58:
* Boolscher Ausdruck: Wählt aus der Knotenmenge nur diejenigen, die den Ausdruck auf ''true'' auswerten.
* Boolscher Ausdruck: Wählt aus der Knotenmenge nur diejenigen, die den Ausdruck auf ''true'' auswerten.


==Achsenabkürzungen==
===Achsenabkürzungen===
Um den Schreibaufwand zu reduzieren wurden angeregt von Navigationsschematas aus Dateisystemen einige Abkürzungen für häufige Achsenschritte eingeführt:
Um den Schreibaufwand zu reduzieren wurden angeregt von Navigationsschematas aus Dateisystemen einige Abkürzungen für häufige Achsenschritte eingeführt:


Zeile 66: Zeile 67:
* <code>attribute::</code> = <code>@</code>
* <code>attribute::</code> = <code>@</code>


=Beispiele=  
===Funktionen und Operatoren===
* <code>child::absatz[position = 2]</code> Dieser Ausdruck wählt das zweite ''absatz''-Kindelement des gegenwärtigen Knotens
XPath-Ausdrücken stehen logische, numerische, String-manipulierende oder kontextbezogene Funktionen und Operationen bereit, um Ausdrücke zu errechnen oder zu verbinden. Für eine vollständige Liste sei auf [http://www.w3.org/TR/xpath-functions XQuery 1.0 and XPath 2.0 Functions and Operators] verwiesen.
* <code>attribute::*</code> Alle Attribute des gegenwärtigen Knotens werden gesucht.
* <code>absatz[@typ="neu"][1]</code> Wählt das erste ''absatz''-Kindelement, das als Atttribut typ mit dem Wert ''neu'' hat


= Quellen =
==Beispiele==
*[http://www.w3.org/TR/xpath W3C - XML Path Language (XPath) Version 1.0]
Gegeben sei folgendes XML-Eingabedokument:
*[http://www.w3schools.com/xpath/default.asp W3C Schools - XPath Tutorial]
 
<code>
<!-- modified from XQuery by Priscilla Walmsley (c) O'Reilly Media 2007 -->
<!-- Product catalog input document-->
<catalog>
    <product dept="Storage">
        <number>1337</number>
        <name lang="EN">SuperDrive</name>
        ...
    </product>
    <product dept="CPU">
        <number>3337</number>
        <name lang="DE">Rechengenie</name>
        ...
    </product>
    <product dept="Storage">
        <number>2337</number>
        <name lang="EN">XtremeDrive</name>
        ...
    </product>
</catalog>
</code>
 
* <code>/child::catalog</code> und <code>/child::*</code> wählen hier beide den ''Katalog''knoten
* <code>/child::catalog/child::product</code> oder kurz <code>/catalog/product</code> selektiert die 3 ''Produkt''knoten
* <code>/descendant-or-self::product</code> oder kurz <code>//product</code> selektiert ebenfalls die 3 ''Produkt''knoten
* <code>/catalog/product[@dept="Storage"]</code> selektiert die beiden ''Produkt''knoten der Sparte ''Storage''
* <code>/catalog/product[@dept="Storage"][1]</code> schränkt diese Auswahl auf den ersten Knoten der Sparte ''Storage'' ein, also ''SuperDrive''
* <code>//text()</code> wählt alle Textknoten aus dem Dokument also ''1337'', ''SuperDrive'', ''33337'', ''HighSpeedCPU'', ''2337'', ''XtremeDrive''
* <code>/catalog/product[./name/@lang="EN"]</code> selektiert nur die ''Produkt''knoten mit einem ''englischen'' Namenselement
* <code>/catalog/product[./name/@lang="EN" and data(./name)="SuperDrive"]</code> wählt entsprechend das ''Produkt'' mit dem ''englischen'' Namen ''SuperDrive''
 
==Quellen==
* Skulschus, Marco; Kozik, Jan; Wiederstein, Marcus (2007): XSLT, XPath und XQuery. Comelio Medien, ISBN 3939701181.
* Walmsley, Priscilla (2007): XQuery. O’Reilly Media Inc., ISBN 0596006349.
* [http://www.w3.org/TR/xpath W3C - XML Path Language (XPath) Version 1.0]
* [http://www.w3.org/TR/xpath20 W3C - XML Path Language (XPath) Version 2.0]
* [http://www.w3.org/TR/xpath-datamodel W3C - XQuery 1.0 and XPath 2.0 Data Model (XDM)]
* [http://www.w3.org/TR/xpath-functions W3C - XQuery 1.0 and XPath 2.0 Functions and Operators]
* [http://www.w3schools.com/xpath/default.asp W3C Schools - XPath Tutorial]
* [http://de.wikipedia.org/wiki/XPath Wikipedia - XPath]


[[Kategorie:XML]]
[[Kategorie:XML]]
[[Kategorie:Web-Programmierung]]
[[Kategorie:Content-Management]]
[[Kategorie:Glossar]]
[[Kategorie:Glossar]]
{{{{SITENAME}}-konformer Artikel}}
{{{{SITENAME}}-konformer Artikel}}

Aktuelle Version vom 15. Mai 2019, 15:23 Uhr

Definition

Die XML Path Language (XPath) ist eine Abfragesprache, die XML-Fragmente als Baum interpretiert und daraus eine Selektion einer Knotenmenge ermöglicht (Lokalisierung).

XPath wird im Rahmen des W3C-Konsortiums gemeinsam durch die XSL Working Group und XML Linking Working Group als Standard spezifiziert. Die aktuelle Version XPath 2.0 und Vorgänger tragen den finalen Status der W3C Empfehlung. XPath gilt als essentielles Fundament für weitere XML-basierte W3C-Standards wie XQuery, XSLT oder XForms.

Bemerkungen

Ein XPath bietet praktisch eine gefilterte Sicht auf ein unverändertes Eingabedokument, die nur interessierende XML-Knoten zeigt. Den Vorgang bezeichnet man daher auch oft als Navigation oder Addressierung in einem XML-Dokument.

Datenmodell

Als Datenmodell dient eine logische Interpretation geparster XML-Dokumente als baumartig geordnete Sequenz von Einheiten. Über die Ordnung bestimmen Verschachtelung und Dokumentreihenfolge. Die Einheiten heißen Knoten und können an Blattpositionen Werte atomaren Typs tragen.

Die Knotentypen umfassen:

  • Wurzelknoten (root nodes)
  • Elementknoten (element nodes)
  • Textknoten (text nodes)
  • Attributknoten (attribut nodes)
  • Namensraumknoten (namespace nodes)
  • Verarbeitungsanweisungs-Knoten (processing instruction nodes)
  • Kommentarknoten (comment nodes)

Als Wertetypen dienen:

  • XML Schema Datentypen (z.B. integer, string, ...)
  • Weitere fünf XPath-Typen (z.B. anyAtomicType, untyped, ...)

Alle Knoteneigenschaften können über Quasifunktionen (Accessors) ausgelesen werden, die z.B. den qualifizierten Namen, getragene Typ und Wert oder Eltern und Kinder in der Ordnung zurückgeben. Das Datenmodell wird mittlerweile als XQuery 1.0 and XPath 2.0 Data Model eigenständig standardisiert.

Lokalisierung

Ein XPath-Lokalisierungspfad ist nun ein Ausdruck, der eine Menge von 0 bis n Knoten aus diesem Baum auswählt, welche hinsichtlich sukzessiver, durch / separierter Lokalisierungskriterien übereinstimmen. Beginnt der Pfad bereits mit einem Schrägstrich, so ist er absolut d.h. beginnend von der Wurzel auszuwerten, andernfalls relativ zum Kontext. Jeder Lokalisierungsschritt präzisiert die Selektion und hat die folgende Syntax:

/<Achse>::<Knotentest><Prädikat>*

Achse

Achsen werden stets vom aktuellen Kontextknoten angelegt und grenzen die Auswahl für den nächsten Schritt auf eine Untermenge ein, die in einer bestimmten Beziehung zum Kontextknoten stehen. Diese erinnern oft an Familienbeziehungen und resultieren aus der Baumstruktur:

Xpath axes.png

Die wichtigsten Achsen umfassen:

  • self: der Knoten selber
  • child: Kinder des Knotens
  • parent: Eltern des Knotens
  • descendant: Kinder und Kindeskinder des Knotens
  • ancestor: Eltern und Vorfahren des Knotens
  • attribute: Attribute des Knotens
  • preceding: Vorhergehend in Dokumentrichtung
  • following: Nachfolgend in Dokumentrichtung
  • Kombinationen sind teils verfügbar wie z.B. descendant-or-self

Knotentest

Ein Knotentest wählt nun aus der durch die Achse eingeschränkten Menge diejenigen Knoten aus, die den Knotentest bestehen. Zur Prüfung kann man folgende Alternativen wählen:

  • Knotenname: Formulierung durch die Angabe eines Knotennamens (* dient als Wildcard).
  • Knotentyp: Formulierung durch die Angabe einer XPath-Funktion, die den Typ zurückgibt (z.B. text() für Textknoten, attribute() für Attributknoten).

Prädikate

Prädikate werden in eckige Klammern gefasst und können beliebig oft angehängt werden. Sie filtern die Knotenmenge erneut über zwei mögliche Arten:

  • Listenindex: Wählt für den Listenindex n aus der Knotenmenge nur den n-ten Knoten aus ([1] entspricht dem ersten).
  • Boolscher Ausdruck: Wählt aus der Knotenmenge nur diejenigen, die den Ausdruck auf true auswerten.

Achsenabkürzungen

Um den Schreibaufwand zu reduzieren wurden angeregt von Navigationsschematas aus Dateisystemen einige Abkürzungen für häufige Achsenschritte eingeführt:

  • child:: = /
  • descendant-or-self:: = //
  • self:: = .
  • parent:: = ..
  • attribute:: = @

Funktionen und Operatoren

XPath-Ausdrücken stehen logische, numerische, String-manipulierende oder kontextbezogene Funktionen und Operationen bereit, um Ausdrücke zu errechnen oder zu verbinden. Für eine vollständige Liste sei auf XQuery 1.0 and XPath 2.0 Functions and Operators verwiesen.

Beispiele

Gegeben sei folgendes XML-Eingabedokument:

<catalog>
   <product dept="Storage">
       <number>1337</number>
       <name lang="EN">SuperDrive</name>
       ...
   </product>
   <product dept="CPU">
       <number>3337</number>
       <name lang="DE">Rechengenie</name>
       ...
   </product>
   <product dept="Storage">
       <number>2337</number>
       <name lang="EN">XtremeDrive</name>
       ...
   </product>
</catalog>

  • /child::catalog und /child::* wählen hier beide den Katalogknoten
  • /child::catalog/child::product oder kurz /catalog/product selektiert die 3 Produktknoten
  • /descendant-or-self::product oder kurz //product selektiert ebenfalls die 3 Produktknoten
  • /catalog/product[@dept="Storage"] selektiert die beiden Produktknoten der Sparte Storage
  • /catalog/product[@dept="Storage"][1] schränkt diese Auswahl auf den ersten Knoten der Sparte Storage ein, also SuperDrive
  • //text() wählt alle Textknoten aus dem Dokument also 1337, SuperDrive, 33337, HighSpeedCPU, 2337, XtremeDrive
  • /catalog/product[./name/@lang="EN"] selektiert nur die Produktknoten mit einem englischen Namenselement
  • /catalog/product[./name/@lang="EN" and data(./name)="SuperDrive"] wählt entsprechend das Produkt mit dem englischen Namen SuperDrive

Quellen


Dieser Artikel ist GlossarWiki-konform.
In diesem Artikel sollten die Quellenangaben überarbeitet werden.
Bitte die Regeln der GlossarWiki-Quellenformatierung beachten.
Dieser Artikel sollte überarbeitet werden.
Der Inhalt sollte sprachlich verbessert werden.
Die Aussagen sollten inhaltlich verbessert bzw. präzisiert werden.