11 Punkte von GN⁺ 2025-03-30 | 1 Kommentare | Auf WhatsApp teilen
  • Xee ist eine in Rust entwickelte XML-Ausführungs-Engine und unterstützt die aktuellen Versionen XPath 3.1 und XSLT 3.0
    • XPath ist eine XML-Abfragesprache, XSLT ist eine Sprache zur Umwandlung von XML-Dokumenten in andere Dokumente
  • Sie besteht aus dem Kommandozeilen-Tool xee und der Rust-Bibliothek xee-xpath, mit denen sich XPath-Abfragen ausführen lassen
  • Auf Basis der Performance und Integrationsfähigkeit von Rust lässt sie sich auf verschiedene Sprachen erweitern (z. B. existiert ein PHP-Binding)
  • Künftig wird erwartet, dass sie über WebAssembly (WASM) auch im Browser ausgeführt werden kann

Geschichte und heutige Stellung von XML

  • XML kam Ende der 1990er Jahre auf und war bis in die frühen 2000er eine äußerst populäre Technologie
  • Seit dem Aufkommen von JSON und anderen Formaten ist es nicht mehr der Mainstream, wird aber weiterhin häufig für Datenspeicherung und -übertragung genutzt und kommt oft in Dokumentformaten (docbook, JATS) oder in Teilen des Webs (SVG, MathML) vor
  • XML bleibt eine wichtige Technologie, und Xee will XML-Technologien modernisieren
  • Der Entwickler verfügt über Erfahrung mit der XML-Bibliothek lxml für Python und kehrt als seltener Entwickler, der sich sowohl mit Rust als auch mit XML gut auskennt, mit Xee in die XML-Welt zurück

XPath und XSLT sind vollständige Programmiersprachen

  • XPath ist eine Sprache zum Navigieren und Abfragen von XML und umfasst als funktionale Sprache Variablen, Bedingungen, Schleifen, Funktionsdefinitionen und mehr
  • XSLT ist eine vorlagenbasierte Transformationssprache, die XPath als eingebettete Ausdruckssprache verwendet und XML in andere Formate umwandelt
  • Beide Sprachen sind formale Programmiersprachen mit leistungsfähigen Funktionen

Grenzen des heutigen Open-Source-XML-Stacks

  • Im Java-Ökosystem gibt es mit Saxon eine aktuelle XPath-/XSLT-Implementierung, die verschiedene Sprach-Bindings und auch eine JavaScript-Laufzeit bietet
  • Dagegen stellen die meisten Linux-Distributionen standardmäßig libxml2 und libxslt bereit
  • Diese C-Bibliotheken unterstützen jedoch nur XPath 1.0 und XSLT 1.0 und bleiben damit auf dem Stand der Spezifikationen von 1999
  • In einer Lage mit wenigen Open-Source-Alternativen, die aktuelle Spezifikationen unterstützen, präsentiert Xee eine moderne, in Rust geschriebene Alternative

Die spezifikationszentrierte Kultur der XML-Welt

  • In der XML-Community ist die Kultur stark auf Spezifikationen ausgerichtet → Wenn eine Funktion nicht in der Spezifikation steht, gilt sie nicht als „echte“ Funktion
  • Dadurch ist das Entwicklungstempo langsamer, aber das Fundament sehr stabil
  • RESTXQ, ein REST-Framework für XPath und XQuery, wurde 2012 diskutiert, und selbst 2024 wird noch über Aktualisierungen der Spezifikation gesprochen

Die Architektur der Sprachimplementierung von Xee

  • Die Implementierung orientiert sich am Buch Crafting Interpreters
  • XPath durchläuft die Schritte Tokenisierung → AST → Zwischendarstellung (IR) → Bytecode → Ausführung im Interpreter
  • Dieser Bytecode-Interpreter ähnelt den Stack-Maschinen, wie sie in Python, Java und anderen Sprachen verwendet werden
  • XSLT wird ebenfalls auf Basis derselben Architektur implementiert; nur das Frontend unterscheidet sich, die übrigen Komponenten werden identisch zu XPath verwendet

Die gewaltige Welt der XML-/XPath-/XSLT-Spezifikationen

  • XPath 3.1 und XSLT 3.0 sind im Vergleich zu Version 1.0 deutlich komplexer geworden und funktionsreicher
  • Allein die Spezifikationsdokumente, die für die Implementierung herangezogen werden müssen, umfassen mehr als 1800 Seiten, und zahlreiche Spezifikationen hängen voneinander ab
  • Zum Beispiel:
    • XPath 3.1, XQuery/XPath-Datenmodell, Funktionen und Operatoren, XML Schema (Struktur/Datentypen)
    • XSLT 3.0, Serialisierungs-Spezifikation, XML-Namespaces, XML Base, xml:id usw.
    • Auch Funktionen für reguläre Ausdrücke sind enthalten, daher wurde zusätzlich eine eigene Regex-Engine implementiert → regexml

Aktueller Stand der Implementierung von Xee

  • Die Kernsprache von XPath 3.1 und der Großteil der Standardbibliothek sind bereits implementiert
  • Einige formatbezogene Funktionen der Standardbibliothek sind noch nicht umgesetzt
  • Im XPath-3.1-Kompatibilitätstest wurden 20130 von 21859 Tests bestanden (etwa 92 %)
  • Alle Tests laufen in rund 13 Sekunden durch → sehr hohe Performance
  • XSLT ist noch nicht fertiggestellt, aber die grundlegende Struktur steht und lässt sich erweitern

Aufruf an Mitwirkende

  • Entwicklerinnen und Entwickler mit Interesse an Rust und XML sowie an Programmiersprachen-Implementierung oder Query-Optimierung sind willkommen
  • Beiträge sind in vielen Bereichen möglich, etwa bei der spezbasierten Implementierung von Funktionen, bei Optimierungen oder bei der Verbesserung der Query-Performance
  • Xee steht als moderne XML-Implementierung außerhalb des Java-Ökosystems an einem Punkt, an dem Unterstützung aus der Open-Source-Community gebraucht wird

Ich bin immer noch hip. Auch wenn ich mit XML arbeite.

1 Kommentare

 
GN⁺ 2025-03-30
Hacker-News-Kommentare
  • Es freut mich, dass jemand eine echte Open-Source-Implementierung von XSLT 3 und XPath 3 geschaffen hat

    • In früheren Projekten habe ich nur XSLT & XPath 1.0 verwendet. Das lag daran, dass es außerhalb der Java/.NET-Welt kaum Unterstützung gab
    • Saxon war großartig, aber ich wünschte, es gäbe in der Open-Source-Welt mehr Implementierungen von XSLT 2.0 und XPath 2.0 oder höher
    • XSLT 3.0 ist eine großartige Spezifikation, aber es braucht andere Möglichkeiten, sie auf Open-Source-Art auszuführen
  • Es gibt eine große Menge an XML-Quellen

    • Zum Beispiel ist das Wikipedia-Archiv 42 GB unkomprimierter Text
    • Wenn man das in vollständig geparster Form im Speicher hält, können dafür mehr als 100 GB nötig sein
    • Streaming ist die Lösung, wird aber noch nicht unterstützt
  • XML zu verwenden ist immer noch cool

    • Es braucht eine performante, hochwertige Bibliothek, die in Rust geschrieben ist
    • Eine darauf aufbauende Python-Bibliothek könnte eine gute Grundlage sein
  • XML ist ein standardbasierter Ansatz für Dateninteroperabilität

    • Als ich es zum ersten Mal gelernt habe, mochte ich es nicht, weil es nicht entwicklerfreundlich war
    • Inzwischen habe ich jedoch den Wert langjähriger Standards verstanden
    • XML wirkt wie ein Datenstandard, den Computer bevorzugen
  • XSLT wird in den wichtigsten Browsern weiterhin breit unterstützt

  • Dass es zu WASM kompiliert werden kann, ist positiv

    • Das Chrome-Team hatte einmal versucht, die Unterstützung für libxml und XSLT zu entfernen
    • Das ist ein Beleg dafür, wie wichtig die Arbeit an grundlegenden Werkzeugen ist
  • Ich habe vor Kurzem einen XSLT-2-Transpiler geschrieben

    • Das Schreiben der XPath-Engine war der schwierigste Teil
  • Ich frage mich, welche Probleme XPath und XSLT heute elegant lösen

  • Ich arbeite gern außerhalb des Java-Ökosystems

    • Wichtig ist, dass XML-Reader Funktionen zur Fehlerkorrektur haben
  • Ich frage mich, ob diese Implementierung eines Tages in Wine für die MSXML-Implementierung verwendet werden könnte

    • Ich habe früher eine XPath-1.1-Implementierung für Wine geschrieben, konnte sie aber nicht mergen