Aufgabe 10 - XPath, XSLT und JSONPath abfragen (Musikkatalog)
Aufgabe 10 - XPath, XSLT und JSONPath abfragen (Musikkatalog)
Abschnitt betitelt „Aufgabe 10 - XPath, XSLT und JSONPath abfragen (Musikkatalog)“Worum geht es?
Abschnitt betitelt „Worum geht es?“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.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel 5 - Semistrukturierte Daten und Dokumentenformate, Abschnitte „Abfragen und Verarbeiten” und „Semistrukturierte Daten in der relationalen Datenbank”.
- Ein Browser (für XPath in der Konsole und XSLT),
jqund ein PostgreSQL-Server.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- 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.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- 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).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei bis drei Stunden ausgelegt. Teil D ist der Expertenteil.
Ausgangsdaten
Abschnitt betitelt „Ausgangsdaten“<?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).
Teil A - Einfache Pfade
Abschnitt betitelt „Teil A - Einfache Pfade“Formulieren Sie je einmal als XPath und als JSONPath:
- Alle Album-Titel.
- Den Künstler des ersten Albums.
- Alle Preise.
Teil B - Prädikate und Filter
Abschnitt betitelt „Teil B - Prädikate und Filter“Formulieren Sie je einmal als XPath und als JSONPath:
- Alle Alben des Genres
rock. - Alle Alben teurer als 10.
- 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.
Teil C - XSLT-Transformation
Abschnitt betitelt „Teil C - XSLT-Transformation“- Schreiben Sie ein XSLT-Stylesheet, das aus dem Katalog eine HTML-Tabelle mit den Spalten Titel, Künstler und Preis erzeugt.
- Sortieren Sie die Ausgabe mit
<xsl:sort>aufsteigend nach Preis. - Heben Sie mit
<xsl:if>alle Alben teurer als 12 hervor (z. B. eigene CSS-Klasse).
Teil D - Expertenteil: Derselbe Katalog als jsonb
Abschnitt betitelt „Teil D - Expertenteil: Derselbe Katalog als jsonb“- Legen Sie in PostgreSQL eine Tabelle
alben (id serial, daten jsonb)an und fügen Sie die Alben alsjsonbein. - Schreiben Sie Abfragen mit den Operatoren
->und->>:- alle Titel der Rock-Alben,
- den teuersten Titel,
- die Anzahl Alben je Genre (
GROUP BY daten ->> 'genre').
- Legen Sie einen Index auf das Genre-Feld an (
CREATE INDEX ... ((daten ->> 'genre'))). - 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.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Wofür stehen
/und//in XPath? - Ab welchem Index zählt JSONPath Array-Elemente, ab welchem XPath die Positionen?
- Was leistet ein XSLT-Template, das auf
/matcht? - Was ist der Unterschied zwischen den PostgreSQL-Operatoren
->und->>? - Warum kann ein Index auf ein
jsonb-Feld eine Abfrage beschleunigen?
- Eine Datei
abfragen.mdmit allen XPath- und JSONPath-Ausdrücken je Teilaufgabe. - Das XSLT-Stylesheet
katalog.xslund die Dateiaufgabe10_jsonb.sql.
HTL Villach, Schuljahr 2026-2027,
https://www.htl-villach.at