11 points par GN⁺ 2025-03-30 | 1 commentaires | Partager sur WhatsApp
  • 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 xee et de la bibliothèque Rust xee-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 lxml pour 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 libxml2 et libxslt
  • 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

 
GN⁺ 2025-03-30
Discussion sur Hacker News
  • Ravi de voir quelqu’un créer une véritable implémentation open source de XSLT 3 et XPath 3

    • Sur des projets passés, je n’ai utilisé que XSLT & XPath 1.0, car le support était insuffisant en dehors du monde Java/.Net
    • Saxon était excellent, mais j’aimerais qu’il existe davantage d’implémentations de XSLT 2.0 et XPath 2.0 ou supérieur dans le monde open source
    • XSLT 3.0 est une excellente spécification, mais il faut d’autres moyens de l’exécuter de façon open source
  • Il existe une grande quantité de sources XML

    • Par exemple, les archives de Wikipédia représentent 42 Go de texte non compressé
    • Les conserver en mémoire sous une forme entièrement analysée peut nécessiter plus de 100 Go
    • Le streaming est la solution, mais il n’est pas encore pris en charge
  • Utiliser XML reste intéressant

    • Il faut une bibliothèque performante et de haute qualité écrite en Rust
    • Une bibliothèque Python construite dessus pourrait constituer une bonne base
  • XML est une approche fondée sur des standards pour l’interopérabilité des données

    • Quand je l’ai découvert, je le détestais parce qu’il n’était pas très convivial pour les développeurs
    • Mais j’en suis maintenant venu à comprendre la valeur d’un standard ancien
    • XML semble être un standard de données que les ordinateurs apprécient
  • XSLT reste largement pris en charge par les principaux navigateurs

  • Le fait que cela puisse être compilé en WASM est positif

    • L’équipe Chrome avait déjà tenté de supprimer la prise en charge de libxml et de XSLT
    • C’est une preuve de l’importance du travail sur les outils fondamentaux
  • J’ai récemment écrit un transpileur XSLT 2

    • Écrire le moteur XPath était la partie la plus difficile
  • 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

    • Il est important que le lecteur XML dispose de capacités de correction d’erreurs
  • Je me demande si cette implémentation pourrait un jour être utilisée dans Wine pour l’implémentation de MSXML

    • J’avais autrefois écrit une implémentation de XPath 1.1 pour Wine, mais je n’ai pas réussi à la faire fusionner