11 puntos por GN⁺ 2025-03-30 | 1 comentarios | Compartir por WhatsApp
  • 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 xee y la biblioteca de Rust xee-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 libxml2 y libxslt
  • 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:id y 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

 
GN⁺ 2025-03-30
Opiniones de Hacker News
  • Me alegra ver que alguien haya creado una implementación verdaderamente open source de XSLT 3 y XPath 3

    • En proyectos anteriores solo usé XSLT & XPath 1.0. Esto se debía a la falta de soporte fuera del mundo Java/.NET
    • Saxon era excelente, pero me gustaría que hubiera más implementaciones de XSLT 2.0 y XPath 2.0 o superiores en el mundo open source
    • XSLT 3.0 es una especificación excelente, pero hace falta otra forma de ejecutarla de manera open source
  • Existe una gran cantidad de fuentes XML

    • Por ejemplo, el archivo de Wikipedia son 42 GB de texto sin comprimir
    • Si se almacena completamente parseado en memoria, podría requerir más de 100 GB
    • El streaming es la solución, pero todavía no está soportado
  • Seguir usando XML todavía es genial

    • Hace falta una biblioteca de alto rendimiento y alta calidad escrita en Rust
    • Una biblioteca de Python basada en esto podría ser una buena base
  • XML es un enfoque basado en estándares para la interoperabilidad de datos

    • Cuando lo aprendí por primera vez, no me gustó porque no era amigable para desarrolladores
    • Pero ahora he llegado a entender el valor de un estándar con tantos años
    • XML parece ser el estándar de datos que prefieren las computadoras
  • XSLT sigue siendo ampliamente soportado en los principales navegadores

  • Que pueda compilarse a WASM es algo positivo

    • Hubo un momento en que el equipo de Chrome intentó eliminar el soporte para libxml y XSLT
    • Es una prueba de que el trabajo en herramientas fundamentales es importante
  • Recientemente escribí un transpilador de XSLT 2

    • Escribir el motor de XPath fue la parte más difícil
  • Me pregunto qué problemas resuelven hoy en día XPath y XSLT de forma elegante

  • Me gusta trabajar fuera del ecosistema de Java

    • Es importante que un lector de XML tenga capacidades de recuperación ante errores
  • Me pregunto si esta implementación podría usarse algún día en Wine para la implementación de MSXML

    • En el pasado escribí una implementación de XPath 1.1 para Wine, pero no logré que se integrara