Xee - Un moteur XPath et XSLT moderne implémenté en Rust
(blog.startifact.com)- Xee est un moteur d’exécution XML développé en Rust, qui prend en charge les versions récentes de XPath 3.1 et XSLT 3.0
- XPath est un langage de requête pour XML, et XSLT un langage de transformation de documents XML vers d’autres documents
- Il se compose de l’outil en ligne de commande
xeeet de la bibliothèque Rustxee-xpath, permettant d’exécuter des requêtes XPath - Grâce aux performances de Rust et à ses possibilités d’intégration, il peut être étendu à divers langages (par exemple, il existe un binding PHP)
- À l’avenir, il devrait aussi pouvoir s’exécuter dans le navigateur via WebAssembly (WASM)
Histoire de XML et sa place actuelle
- XML est apparu à la fin des années 1990 et a été une technologie extrêmement populaire jusqu’au début des années 2000
- Depuis l’arrivée de JSON et d’autres formats, il n’est plus dominant, mais il reste largement utilisé pour le stockage et le transport de données, ainsi que dans des formats documentaires (docbook, JATS) ou dans certaines parties du web (SVG, MathML)
- XML demeure une technologie importante, et Xee vise à moderniser l’écosystème XML
- Le développeur a déjà créé la bibliothèque XML
lxmlpour Python et, en tant que profil rare maîtrisant à la fois Rust et XML, revient dans l’univers XML avec Xee
XPath et XSLT sont de véritables langages de programmation
- XPath est un langage de navigation et de requête pour XML ; en tant que langage fonctionnel, il inclut des variables, des conditions, des boucles, des définitions de fonctions, etc.
- XSLT est un langage de transformation basé sur des templates, qui utilise XPath comme langage d’expression intégré pour convertir du XML vers d’autres formats
- Les deux sont de véritables langages de programmation dotés de capacités puissantes
Les limites actuelles de la pile open source XML
- Dans l’écosystème Java, il existe Saxon comme implémentation moderne de XPath/XSLT, avec des bindings pour plusieurs langages et même un runtime JavaScript
- En revanche, la plupart des distributions Linux fournissent par défaut
libxml2etlibxslt - Ces bibliothèques C ne prennent en charge que XPath 1.0 et XSLT 1.0, et restent bloquées sur des spécifications datant de 1999
- Faute d’alternative open source supportant les spécifications récentes, Xee propose une alternative moderne écrite en Rust
La culture centrée sur les spécifications dans l’univers XML
- La communauté XML est fortement centrée sur les spécifications → si une fonctionnalité n’y figure pas, elle n’est pas considérée comme une « vraie » fonctionnalité
- Cela ralentit le développement, mais donne des fondations très solides
- RESTXQ, le framework REST pour XPath et XQuery, a été discuté en 2012, et des discussions sur des mises à jour de la spécification se poursuivent encore en 2024
L’architecture d’implémentation des langages de Xee
- L’implémentation s’inspire du livre
Crafting Interpreters - XPath suit les étapes tokenisation → AST → représentation intermédiaire (IR) → bytecode → exécution par interpréteur
- Cet interpréteur de bytecode ressemble aux machines à pile utilisées dans Python, Java et d’autres environnements
- XSLT est implémenté sur la même architecture ; seul le frontend diffère, tandis que le reste des composants est partagé avec XPath
L’immense univers des spécifications XML/XPath/XSLT
- XPath 3.1 et XSLT 3.0 sont bien plus complexes et riches en fonctionnalités que les versions 1.0
- Rien que les documents de spécification à consulter pour l’implémentation dépassent 1 800 pages, avec de nombreuses dépendances entre les standards
- Par exemple :
XPath 3.1,XQuery/XPath Data Model,Functions and Operators,XML Schema(structure/types de données)XSLT 3.0,Serialization,XML Namespaces,XML Base,xml:id, etc.- Des fonctionnalités d’expressions régulières sont également incluses, ce qui a conduit à l’implémentation d’un moteur regex distinct → regexml
État actuel de l’implémentation de Xee
- Le cœur du langage XPath 3.1 et la majeure partie de la bibliothèque standard sont déjà implémentés
- Certaines fonctions de formatage de la bibliothèque standard ne sont pas encore implémentées
- Dans les tests de compatibilité XPath 3.1, 20 130 tests réussis sur 21 859 (environ 92 %)
- L’ensemble des tests s’exécute en environ 13 secondes → performances très élevées
- XSLT n’est pas encore terminé, mais l’infrastructure de base est en place, ce qui permet de l’étendre
Appel à contributions
- Les développeurs intéressés par Rust et XML, ou par l’implémentation de langages de programmation et l’optimisation de requêtes, sont les bienvenus
- Il est possible de contribuer dans de nombreux domaines : implémentation de fonctionnalités guidées par les spécifications, optimisation, amélioration des performances de requêtes, etc.
- Xee arrive à un moment où une implémentation XML moderne hors de l’écosystème Java a besoin du soutien de la communauté open source
Je suis encore tendance. Même si je travaille avec XML.
1 commentaires
Discussion sur Hacker News
Ravi de voir quelqu’un créer une véritable implémentation open source de XSLT 3 et XPath 3
Il existe une grande quantité de sources XML
Utiliser XML reste intéressant
XML est une approche fondée sur des standards pour l’interopérabilité des données
XSLT reste largement pris en charge par les principaux navigateurs
Le fait que cela puisse être compilé en WASM est positif
J’ai récemment écrit un transpileur XSLT 2
Je me demande quels problèmes XPath et XSLT résolvent avec élégance aujourd’hui
J’aime travailler en dehors de l’écosystème Java
Je me demande si cette implémentation pourrait un jour être utilisée dans Wine pour l’implémentation de MSXML