Zum Inhalt springen

Aufgabe 10 - XPath, XSLT und JSONPath abfragen (Musikkatalog)

Zu Zen-Modus wechseln

Aufgabe 10 - XPath, XSLT und JSONPath abfragen (Musikkatalog)

Abschnitt betitelt „Aufgabe 10 - XPath, XSLT und JSONPath abfragen (Musikkatalog)“

Diese Übung dreht sich um die Abfrage- und Verarbeitungskonzepte semistrukturierter Daten (siehe Kapitel 5 - Semistrukturierte Daten und Dokumentenformate). An einem Musikkatalog werden XML mit XPath und JSON mit JSONPath/jq abgefragt und mit XSLT in HTML umgeformt. Im Expertenteil wird derselbe Katalog in PostgreSQL als jsonb gespeichert und abgefragt.

  • Sie formulieren XPath-Ausdrücke mit Pfaden, Prädikaten und Funktionen.
  • Sie formulieren die entsprechenden JSONPath-/jq-Abfragen.
  • Sie schreiben ein XSLT-Stylesheet, das XML in HTML umwandelt.
  • Sie speichern und filtern dieselben Daten in PostgreSQL als jsonb.
  • Reproduktion: einfache Pfade abfragen (Teil A).
  • Reorganisation und Transfer: mit Prädikaten filtern und transformieren (Teile B und C).
  • Reflexion, Problemlösung und Urteilsbildung: die Formate im jsonb-Vergleich bewerten (Teil D).

Die Übung ist auf etwa zwei bis drei Stunden ausgelegt. Teil D ist der Expertenteil.

<?xml version="1.0" encoding="UTF-8"?>
<katalog>
<album genre="rock" jahr="1975">
<titel>A Night at the Opera</titel>
<kuenstler>Queen</kuenstler>
<preis>12.99</preis>
</album>
<album genre="pop" jahr="1982">
<titel>Thriller</titel>
<kuenstler>Michael Jackson</kuenstler>
<preis>9.99</preis>
</album>
<album genre="rock" jahr="1994">
<titel>The Division Bell</titel>
<kuenstler>Pink Floyd</kuenstler>
<preis>14.50</preis>
</album>
</katalog>

Legen Sie sich denselben Katalog auch als JSON-Datei katalog.json an (ein Array aus Alben mit denselben Feldern).

Formulieren Sie je einmal als XPath und als JSONPath:

  1. Alle Album-Titel.
  2. Den Künstler des ersten Albums.
  3. Alle Preise.

Formulieren Sie je einmal als XPath und als JSONPath:

  1. Alle Alben des Genres rock.
  2. Alle Alben teurer als 10.
  3. Alle Alben, die vor 1990 erschienen sind — nur deren Titel.

Berechnen Sie zusätzlich mit XPath count(...) die Anzahl der Rock-Alben und mit jq die durchschnittlichen Preise.

  1. Schreiben Sie ein XSLT-Stylesheet, das aus dem Katalog eine HTML-Tabelle mit den Spalten Titel, Künstler und Preis erzeugt.
  2. Sortieren Sie die Ausgabe mit <xsl:sort> aufsteigend nach Preis.
  3. Heben Sie mit <xsl:if> alle Alben teurer als 12 hervor (z. B. eigene CSS-Klasse).
  1. Legen Sie in PostgreSQL eine Tabelle alben (id serial, daten jsonb) an und fügen Sie die Alben als jsonb ein.
  2. Schreiben Sie Abfragen mit den Operatoren -> und ->>:
    • alle Titel der Rock-Alben,
    • den teuersten Titel,
    • die Anzahl Alben je Genre (GROUP BY daten ->> 'genre').
  3. Legen Sie einen Index auf das Genre-Feld an (CREATE INDEX ... ((daten ->> 'genre'))).
  4. Urteil: Vergleichen Sie XPath, JSONPath und die jsonb-Abfrage für dieselbe Frage „alle Rock-Alben”. Nennen Sie je eine Situation, in der das jeweilige Werkzeug die beste Wahl ist.
  1. Wofür stehen / und // in XPath?
  2. Ab welchem Index zählt JSONPath Array-Elemente, ab welchem XPath die Positionen?
  3. Was leistet ein XSLT-Template, das auf / matcht?
  4. Was ist der Unterschied zwischen den PostgreSQL-Operatoren -> und ->>?
  5. Warum kann ein Index auf ein jsonb-Feld eine Abfrage beschleunigen?
  • Eine Datei abfragen.md mit allen XPath- und JSONPath-Ausdrücken je Teilaufgabe.
  • Das XSLT-Stylesheet katalog.xsl und die Datei aufgabe10_jsonb.sql.

HTL Villach, Schuljahr 2026-2027,
https://www.htl-villach.at