Your browser doesn't support the features required by impress.mod.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

2021 | Mainz

Einführung in X-Technologien


Modellieren, Strukturieren, Repräsentieren

Sektion 2: XPATH

Slides: Link

Max Grüntgens | Dominik Kasper | @digicademy | Twitter digicademy | CC-BY 4.0

Überblick

  1. Was ist XPath?
  2. Das Konzept Knoten
  3. XPath-Achsen-Modell
  4. Navigation im Baum
    1. Zugriff auf Knoten
    2. Konditionen und Funktionen
    3. Zu mehr XPath-Funktionen
  5. Arbeiten im Oxygen XML Editor (XPath)

01

Was ist XPath?

XPath

02

Das Konzept Knoten

Das Konzept Knoten

XML-Baumstruktur: Element vs. Knoten

XML Dokument

Elementbaum

Knotenbaum

Das Konzept Knoten

Denken in Knoten (nodes)

Knotentyp Erklärung
Wurzelknoten oberster, abstrakter, Knoten des Baumes, Parent des Wurzelelements (Node-Set, String); Zeichenwert: alle Zeichendaten des Dokuments
Elementknoten Knoten, der Knoten- u/o Zeichendaten eines Elements (Node-Set, String) enthält; Zeichenwert: alle Zeichendaten seiner Textknotenkinder
Attributknoten Knoten, der Zeichendaten eines Attributs (String) enthält; separat für jedes Attribut eines Elements, Zeichenwert: Attributwert
Textknoten Knoten, der nur Zeichendaten (String) enthält
Kommentarknoten Knoten, der den Kommentarinhalt (String) enthält

Es gibt außerdem noch Verarbeitungsknoten und Namensraumknoten, die wir hier aus Zeitgründen nicht näher thematisieren.

XPath-Achsen-Modell

Denken in Achsen (axes)

Achsen

  • self (kurz .)
  • child (kurz /)
  • parent (kurz ..)
  • descendant descendant::*
  • descendant-or-self (kurz //)
  • ancestor ancestor::*
  • ancestor-or-self ancestor-or-self::*
  • following following::*
  • following-sibling following-sibling::*
  • preceding preceding::*
  • preceding-sibling preceding-sibling::*
  • attribute (kurz @) attribute::*

Das * in den obigen Notation steht für jeden Elementnamen (oder Attributnamen bei attribute::), also ancestor::p gibt einen Ancestor-Knoten mit dem Elementnamen p zurück.

Grafische Übersicht wichtiger Achsen

Zu beachten ist, dass, auch wenn die Achsen durchgehend im Singular notiert sind, je nach Kontext ein Node-Set – also eine Ergebnisliste – zurückgegeben wird, e.g. ancestor gibt alle vorangehenden Elementknoten zurück, nicht nur den ersten.

Auf den Punkt gebracht

in einem Satz

XPath ist eine Sprache zur Navigation in XML-Dokumenten und zur Adressierung, Selektion und Rückgabe von Knoten/Knoten-Sets/Bäumen und Strings/Zahlen/Wahrheitswerten (Booleans) sowie Sequenzen als Reihen dieser Dinge.

Institut für Dokumentologie und Editorik: XML - Kurzreferenz für Einsteiger

Erläuterung

XPath im Oxygen-XML-Editor

Screenshot und Beschreibung einfügen

Navigation im Baum I

Der Zugriff auf Knoten

Der Zugriff auf Knoten erfolgt über sog. Lokalisierungsschritte, die den Pfadangaben von Unix-Systemen ähneln.

Die Pfadangaben müssen immer kontextabhängig gemacht werden und bestehen zunächst einmal aus:

Beispiele

Navigation im Baum II

Konditionen und Funktionen

Es gibt weitere Möglichkeiten eine Lokalisierung (in der Pfadangabe) zu konkretisieren und damit bestimmte (Teil-)Mengen auszuschließen:

Beispiele

Navigation im Baum III

XPath-Funktionen (Beispiele)

Übung: Formalisierung

XPath ist eine formale Sprache. Man kann, wie wir oben gesehen haben, zwischen normaler (z. B. deutscher) Sprache und XPath hin und her übersetzen, wobei dies zugleich ein Prozess fortschreitender Formalisierung bzw. Operationalisierung ist:

  1. »Wie alt ist die erste mittelalterliche Inschrift des Landkreises Bad Kreuznach?« wird formalisiert zu ...
  2. »Bilde die Differenz zwischen dem aktuellen Jahr, bspw 2020, und dem bei den Kopfmetadaten zu findenden Jahr der Inschrift«. Dies wiederum bedeutet auf XPath-Pseudocode ...
  3. 2020 − (Jahr-der-ersten-Inschrift), oder als etwas präziserer Pseudo code ...
  4. 2020 − (Jahr-der-ersten-Inschrift) von //resource[1], oder als etwas präziserer Pseudo code ...
  5. 2020-(//resource[1]/head/dateEnd), ... noch das Jahr extrahieren ...
  6. 2020-(//resource[1]/head/dateEnd/substring(., 1, 4)), und in eine Zahl verwandeln ...
  7. 2020-number(//resource[1]/head/dateEnd/substring(., 1, 4))

Abschlussfrage

Warum brauchen wir in einer Abfragesprache, die dem Adressieren und Selektieren dient, Funktionen zum Konvertieren und Umwandeln?

Übungsaufgaben: XPath

Inschriften des Landkreises Bad Kreuznach

Datei: Download der Datei aus dem Repositorium.

Übungsaufgaben: XPath

Caesars Gallischer Krieg (englische Übersetzung)

Datei: Download aus der Perseus Digital Library auf GitHub.