Xee – Moderne XPath- und XSLT-Engine in Rust
(blog.startifact.com)- 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
xeeund der Rust-Bibliothekxee-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
lxmlfü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
libxml2undlibxsltbereit - 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:idusw.- 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
Hacker-News-Kommentare
Es freut mich, dass jemand eine echte Open-Source-Implementierung von XSLT 3 und XPath 3 geschaffen hat
Es gibt eine große Menge an XML-Quellen
XML zu verwenden ist immer noch cool
XML ist ein standardbasierter Ansatz für Dateninteroperabilität
XSLT wird in den wichtigsten Browsern weiterhin breit unterstützt
Dass es zu WASM kompiliert werden kann, ist positiv
Ich habe vor Kurzem einen XSLT-2-Transpiler geschrieben
Ich frage mich, welche Probleme XPath und XSLT heute elegant lösen
Ich arbeite gern außerhalb des Java-Ökosystems
Ich frage mich, ob diese Implementierung eines Tages in Wine für die MSXML-Implementierung verwendet werden könnte