XPath (XML Path Language) ist eine vom W3C standardisierte Abfragesprache, mit der man Teile eines XML-Dokuments über Pfadausdrücke adressiert. Sie ist die gemeinsame Basis von XSLT, XQuery und XML-Schema und wird seit 1999 (XPath 1.0) über XPath 2.0 (2007) bis XPath 3.1 (2017) weiterentwickelt.
Location Paths
Ein Location Path besteht aus Schritten, die mit / getrennt werden. Ein führender / bedeutet absoluter Pfad ab dem Dokumentknoten, ohne / ist der Pfad relativ zum Kontextknoten.
/katalog/buch // alle buch-Knoten unter katalog
//autor // alle autor-Knoten im Dokument
/katalog/buch[1] // erstes buch
/katalog/buch[@id='b1'] // buch mit Attribut id="b1"
Wichtige Achsen und Abkürzungen
child::— Kindknoten (Standardachse, oft weggelassen)attribute::→ abgekürzt@, z.B.@iddescendant::→ abgekürzt//parent::→ abgekürzt..self::→ abgekürzt.following-sibling::,preceding-sibling::— Geschwisterancestor::,descendant-or-self::— Vorfahren/Nachfahren
Operatoren und Funktionen
//buch[preis > 20] // Vergleichsoperatoren
//buch[position() <= 3] // Positionsfunktion
count(//buch) // Anzahl der Treffer
string(//buch[1]/titel) // Stringwert extrahieren
//buch[contains(titel, 'XML')] // Textsuche
XPath 2.0/3.1 erweitern das Datenmodell um Sequenzen, if-Ausdrücke, for-Schleifen, reguläre Ausdrücke (Funktionen matches, replace, tokenize) und ab 3.1 Maps und Arrays — damit lassen sich auch JSON-Daten adressieren.
Werkzeuge
Häufig genutzte Implementierungen sind xmllint --xpath (libxml2), Saxon (Java/.NET) und BaseX. In Browsern steht XPath über document.evaluate() bereit.
Verwandte Grundlagen: XSLT/XSL-Befehle (XPath ist die Abfragesprache der Stylesheets), XQuery-Befehle (baut direkt auf XPath 2.0 auf), XSD-Befehle (Typisierung der XML-Daten), XML.
XQuery (XML Query Language) ist eine vom W3C standardisierte funktionale Abfragesprache für XML- und seit 3.1 auch JSON-Daten. Sie entstand aus der Sprache Quilt und kombiniert Ideen von XPath, SQL und OQL; XQuery 1.0 wurde 2007 veröffentlicht, XQuery 3.1 folgte 2017.
FLWOR-Ausdrücke
Das Herzstück von XQuery sind FLWOR-Ausdrücke (gesprochen „Flower"): for, let, where, order by, return.
for $b in doc('katalog.xml')//buch
let $preis := $b/preis
where $preis > 20
order by $preis descending
return $b/titel
for— iteriert über eine Sequenzlet— bindet eine Variable an einen Wertwhere— filtert (wieWHEREin SQL)order by— sortiert die Ergebnissequenzreturn— baut das Ergebnis (Tupel-Konstruktion)
Datenmodell und Konstruktion
XQuery arbeitet auf dem XDM (XQuery and XPath Data Model): Dokumentknoten, Elemente, Attribute, atomare Werte und Sequenzen. Ergebnisse werden direkt als XML konstruiert:
<ergebnis>{
for $b in //buch return <titel>{ $b/titel/text() }</titel>
}</ergebnis>
Typen, JSON und Werkzeuge
XQuery ist stark typisiert (in Verbindung mit XML-Schema) und unterstützt seit 3.1 Maps, Arrays und JSON-Serialisierung. Bekannte Prozessoren sind Saxon, BaseX, eXist-db und die Implementierung in Oracle XML DB.
Verwandte Grundlagen: XPath-Befehle (XQuery 2.0 enthält XPath 2.0 vollständig), XSD-Befehle (Typen für die Validierung), XSLT/XSL-Befehle (Transformation vs. Abfrage), SQL-Befehle (das relationale Vorbild von FLWOR).
Nushell (Kurzform nu) ist eine moderne, in Rust geschriebene Shell, die mit strukturierten Daten statt rohen Text-Streams arbeitet. Statt Zeichenketten durch die Pipeline zu schieben, transportiert sie typisierte Werte – Listen, Records und Tabellen. Ausgabe und Weiterverarbeitung bleiben damit konsistent, ohne aufwendiges Parsen wie bei klassischen Shells.
Erste Schritte
Installation und Start sind unkompliziert, danach liefert bereits ls eine echte Tabelle:
nu
> ls | where size > 1kb | sort-by name
Strukturierte Formate liest open direkt: open config.json | get server.port. Konvertiert wird mit from json/from csv/from yaml und to json.
Die wichtigsten Nushell-Kommandos
ls,open,get,select– Daten lesen und Spalten wählenwhere,sort-by,group-by– filtern, sortieren, gruppiereneach,par-each– Zeilen parallel verarbeiteninto– Typkonvertierungen (into int,into datetime)str,math,path– String-, Zahlen- und Pfadoperationendescribe– Typ eines Werts anzeigenlet/mut,$env,$nu– Variablen und Umgebung
Konfiguration
Die Startdateien liegen unter ~/.config/nushell/config.nu und env.nu; Aliase, Keybindings und Prompt werden dort deklariert. Auch klassische Unix-Befehle lassen sich weiterhin aufrufen – Nushell versteht deren Textausgabe, wandelt sie aber bei bekannten Kommandos in Tabellen um.
Praxis-Tipps
- Für Systemadministration und Datenauswertung spart Nushell das Zusammensetzen von grep/awk-Ketten
- Skripte enden auf
.nu, Ausführung mitnu skript.nuodernu -c '<befehle>' - Die Inspiration kommt von der PowerShell – wer PowerShell gewohnt ist, findet sich schnell zurecht
Verwandte Grundlagen: PowerShell, Bash, Python, grep, SSH/SCP/rsync, YAML, TOML und JSON. Für regelbasierte XML-Transformationen ist XSLT zuständig, interaktive Programme automatisiert Expect.
Expect ist eine Erweiterung der Skriptsprache Tcl, mit der sich interaktive Terminal-Programme automatisieren lassen. Entwickelt von Don Libes am NIST (1990), wartet Expect auf bestimmte Ausgaben und sendet automatisch Antworten – so laufen Programme wie SSH, FTP oder passwd ohne manuelle Eingaben.
Erste Schritte
Ein einfaches SSH-Login-Skript sieht so aus:
#!/usr/bin/expect -f
set timeout 20
spawn ssh benutzer@host
expect "password:"
send "geheim123
"
interact
Ausgeführt wird es mit expect login.exp oder direkt nach chmod +x.
Die wichtigsten Expect-Kommandos
spawn– startet das interaktive Programmexpect– wartet auf ein Muster in der Ausgabesend– sendet eine Antwort (mitfür Enter)set timeout– maximale Wartezeit in Sekundenexp_continue– nach einem Treffer weiter auf weitere Muster warteninteract– übergibt die Steuerung an den Benutzerexpect eof/expect timeout– auf Programmende bzw. Zeitüberschreitung reagierenautoexpect– zeichnet eine Session auf und erzeugt ein lauffähiges Skript
Treffer landen in $expect_out(buffer), der gesendete Text in $send_out.
Praxis-Tipps
- Typische Einsatzfälle: SSH/FTP-Anmeldungen, interaktive Installer, Test-Automation von Konsolenanwendungen
- Passwörter stehen im Klartext im Skript – für Produktionssysteme stattdessen SSH-Keys verwenden
- Das Python-Pendant heißt
pexpect, nützlich für Python-Test-Suiten - Bei instabilen Prompts hilft
expect -remit regulären Ausdrücken (siehe Regex)
Verwandte Grundlagen: Tcl, Bash, SSH/SCP/rsync, Perl, Python, Batch/CMD. Wer strukturierte Shell-Pipelines bauen will, nutzt Nushell; regelbasierte XML-Transformationen übernimmt XSLT.
XSLT (Extensible Stylesheet Language Transformations) ist eine deklarative Sprache des W3C, mit der sich XML-Dokumente in andere Formate überführen lassen – etwa XML in HTML, Text oder ein anderes XML-Schema. Ein XSLT-Stylesheet ist selbst eine XML-Datei und besteht aus Templates (Schablonen), die auf Knoten des Quellbaums passen.
XML selbst ist als vereinfachte Teilmenge aus der SGML hervorgegangen — deren Deklarationen und Entitaeten-Konzepte erklaert der Artikel SGML-Befehle.
Erste Schritte
Ein Stylesheet beginnt mit der Root-Deklaration und dem Template für das Wurzelelement:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<xsl:apply-templates/>
</body></html>
</xsl:template>
</xsl:stylesheet>
Verarbeitet wird die Datei zum Beispiel mit xsltproc style.xsl quelle.xml > ausgabe.html (GNOME/libxslt) oder mit Saxon (Java/.NET).
Die wichtigsten XSL-Elemente
xsl:template match– definiert eine Regel für passende Knoten (XPath-Muster)xsl:apply-templates– verarbeitet Kindknoten weiter (Push-Stil)xsl:value-of select– gibt den Wert eines Ausdrucks ausxsl:for-each– Schleife über eine Knotenmenge (Pull-Stil)xsl:if/xsl:choose/xsl:when/xsl:otherwise– Bedingungenxsl:call-template/xsl:param/xsl:variable– benannte Templates und Variablenxsl:output– legt das Zielformat fest (method="html|xml|text")xsl:include/xsl:import– Stylesheets wiederverwenden
Die Pfadausdrücke stammen aus XPath (/katalog/buch, //autor, @id).
XSLT 2.0 und 3.0
XSLT 1.0 wurde 1999 Standard, 2.0 folgte 2007 und 3.0 2017. Neuere Versionen bringen XPath 2.0/3.0, Gruppierung mit xsl:for-each-group, eigene Funktionen (xsl:function), Higher-Order-Funktionen, JSON-Output und Streaming für sehr große Dokumente mit.
Praxis-Tipps
- Push-Stil (apply-templates) ist wartbarer als tief verschachtelte for-each-Schleifen
- Für Datenmigration zwischen XML-Schemata, Dokumentation (DocBook zu HTML) und ePub-Builds ist XSLT ein Klassiker
- Zum Debuggen hilft es, Zwischenergebnisse mit
xsl:messageauszugeben
Verwandte Grundlagen: XML, HTML & CSS, Markdown, YAML, TOML und JSON, Regex. Wer strukturierte Daten in der Shell verarbeiten will, nutzt Nushell; automatisierte Transformations-Workflows lassen sich mit Expect steuern.