Xee - motor moderno de XPath y XSLT implementado en Rust
(blog.startifact.com)- Xee es un motor de ejecución XML desarrollado en Rust que soporta las versiones modernas de XPath 3.1 y XSLT 3.0
- XPath es un lenguaje de consulta para XML, y XSLT es un lenguaje para transformar documentos XML en otros documentos
- Está compuesto por la herramienta de línea de comandos
xeey la biblioteca de Rustxee-xpath, y puede ejecutar consultas XPath - Basado en el rendimiento y la capacidad de integración de Rust, puede extenderse a varios lenguajes (por ejemplo, ya existe un binding para PHP)
- Se espera que en el futuro también pueda ejecutarse en navegadores mediante WebAssembly (WASM)
Historia y situación actual de XML
- XML apareció a finales de los años 90 y fue una tecnología muy popular hasta principios de los 2000
- Después, con la llegada de JSON y otros formatos, dejó de ser la opción dominante, pero sigue usándose mucho para almacenamiento y transferencia de datos, así como en formatos de documentos (
docbook, JATS) y en partes de la web (SVG, MathML) - XML sigue siendo una tecnología importante, y Xee busca modernizar el ecosistema XML
- El desarrollador tiene experiencia creando la biblioteca XML para Python
lxml, así que es un caso poco común de alguien que conoce muy bien tanto Rust como XML, y con Xee regresa al mundo de XML
XPath y XSLT son lenguajes de programación completos
- XPath es un lenguaje para navegar y consultar XML, y como lenguaje funcional incluye variables, condicionales, bucles, definición de funciones y más
- XSLT es un lenguaje de transformación basado en plantillas que usa XPath como lenguaje de expresiones integrado y convierte XML a otros formatos
- Ambos son lenguajes de programación formales con capacidades potentes
Limitaciones del stack actual de XML de código abierto
- En el ecosistema Java existe Saxon como implementación moderna de XPath/XSLT, y además ofrece bindings para varios lenguajes y un runtime de JavaScript
- En cambio, la mayoría de las distribuciones de Linux y otros entornos incluyen por defecto
libxml2ylibxslt - Estas bibliotecas en C solo soportan XPath 1.0 y XSLT 1.0, y siguen ancladas en especificaciones publicadas en 1999
- Ante la falta de alternativas de código abierto que soporten las especificaciones modernas, Xee propone una alternativa moderna escrita en Rust
La cultura centrada en especificaciones del mundo XML
- La comunidad XML tiene una fuerte cultura centrada en las especificaciones → si una función no está en la especificación, no se considera una función “real”
- Gracias a eso, el ritmo de desarrollo es lento, pero la base es muy sólida
- RESTXQ, un framework REST para XPath y XQuery, se discutió en 2012, y todavía en 2024 seguían debatiéndose actualizaciones de la especificación
Arquitectura de implementación del lenguaje en Xee
- Está implementado tomando como referencia el libro
Crafting Interpreters - XPath pasa por las etapas de tokenización → AST → representación intermedia (IR) → bytecode → ejecución en intérprete
- Este intérprete de bytecode es similar a la máquina de pila usada en Python, Java y otros lenguajes
- XSLT también está implementado sobre la misma arquitectura; solo cambia el frontend, mientras que el resto de los componentes se reutiliza igual que en XPath
El vasto mundo de las especificaciones XML/XPath/XSLT
- XPath 3.1 y XSLT 3.0 se han vuelto mucho más complejos y ricos en funciones que sus versiones 1.0
- Solo los documentos de especificación que hay que consultar para implementarlos superan las 1800 páginas, y varias especificaciones dependen unas de otras
- Por ejemplo:
XPath 3.1,Modelo de datos XQuery/XPath,Funciones y operadores,XML Schema(estructura/tipos de datos)XSLT 3.0,especificación de serialización,namespaces de XML,XML Base,xml:idy otros- También incluye funciones de expresiones regulares, por lo que se implementó un motor de regex aparte → regexml
Estado actual de implementación de Xee
- Ya está implementado el lenguaje base de XPath 3.1 junto con la mayor parte de la biblioteca estándar
- Algunas funciones relacionadas con formato dentro de la biblioteca estándar todavía no están implementadas
- En las pruebas de compatibilidad con XPath 3.1, pasó 20130 de 21859 tests (aprox. 92%)
- Todas las pruebas se ejecutan en unos 13 segundos → rendimiento muy rápido
- XSLT todavía no está terminado, pero la estructura base ya está preparada y puede ampliarse
Se buscan colaboradores
- Son bienvenidos desarrolladores interesados en Rust y XML, así como quienes tengan interés en implementación de lenguajes de programación u optimización de consultas
- Se puede contribuir en muchas áreas, como implementación de funciones basadas en especificaciones, tareas de optimización y mejora del rendimiento de consultas
- Xee está en un momento en el que necesita apoyo de la comunidad open source como una implementación moderna de XML fuera del ecosistema Java
Sigo siendo cool. Aunque trabaje con XML.
1 comentarios
Opiniones de Hacker News
Me alegra ver que alguien haya creado una implementación verdaderamente open source de XSLT 3 y XPath 3
Existe una gran cantidad de fuentes XML
Seguir usando XML todavía es genial
XML es un enfoque basado en estándares para la interoperabilidad de datos
XSLT sigue siendo ampliamente soportado en los principales navegadores
Que pueda compilarse a WASM es algo positivo
Recientemente escribí un transpilador de XSLT 2
Me pregunto qué problemas resuelven hoy en día XPath y XSLT de forma elegante
Me gusta trabajar fuera del ecosistema de Java
Me pregunto si esta implementación podría usarse algún día en Wine para la implementación de MSXML