11 pontos por GN⁺ 2025-03-30 | 1 comentários | Compartilhar no WhatsApp
  • Xee é um motor de execução de XML desenvolvido em Rust, com suporte às versões mais recentes do XPath 3.1 e XSLT 3.0
    • XPath é uma linguagem de consulta para XML, e XSLT é uma linguagem para transformar documentos XML em outros documentos
  • É composto pela ferramenta de linha de comando xee e pela biblioteca Rust xee-xpath, permitindo executar consultas XPath
  • Com base no desempenho e na capacidade de integração do Rust, pode ser expandido para várias linguagens (por exemplo, já existe binding para PHP)
  • No futuro, espera-se que também possa rodar no navegador via WebAssembly (WASM)

A história do XML e sua posição atual

  • XML surgiu no fim dos anos 1990 e, até o início dos anos 2000, era uma tecnologia extremamente popular
  • Depois, com o surgimento de JSON e outros formatos, deixou de ser dominante, mas ainda é amplamente usado para armazenamento e transmissão de dados, além de formatos de documento (docbook, JATS) e partes da web (SVG, MathML)
  • XML continua sendo uma tecnologia importante, e o objetivo do Xee é modernizar as tecnologias XML
  • O desenvolvedor tem experiência na criação da biblioteca XML lxml para Python, o que o torna um raro especialista em Rust e XML, e o levou a retornar ao mundo XML por meio do Xee

XPath e XSLT são linguagens de programação completas

  • XPath é uma linguagem para navegar e consultar XML e, como linguagem funcional, inclui variáveis, condicionais, laços e definição de funções
  • XSLT é uma linguagem de transformação baseada em templates que usa XPath como linguagem de expressões embutida e converte XML para outros formatos
  • Ambas são linguagens de programação formais com recursos poderosos

Limites atuais da stack open source de XML

  • No ecossistema Java, existe o Saxon como implementação moderna de XPath/XSLT, além de bindings para várias linguagens e também runtime para JavaScript
  • Em contraste, a maioria das distribuições Linux fornece por padrão libxml2 e libxslt
  • Essas bibliotecas em C suportam apenas XPath 1.0 e XSLT 1.0, permanecendo presas a especificações lançadas em 1999
  • Diante da falta de alternativas open source com suporte às especificações modernas, o Xee propõe uma alternativa contemporânea escrita em Rust

A cultura orientada a especificações no mundo XML

  • A comunidade XML tem uma cultura fortemente orientada a especificações → se uma funcionalidade não está na especificação, ela não é considerada uma funcionalidade “de verdade”
  • Isso torna o ritmo de desenvolvimento mais lento, mas a base é extremamente sólida
  • RESTXQ, o framework REST para XPath e XQuery, foi discutido em 2012, e até 2024 ainda havia discussões sobre atualizações da especificação

A arquitetura de implementação da linguagem no Xee

  • A implementação se inspira no livro Crafting Interpreters
  • XPath passa pelas etapas de tokenização → AST → representação intermediária (IR) → bytecode → execução no interpretador
  • Esse interpretador de bytecode é semelhante à máquina de pilha usada em Python, Java e outras linguagens
  • XSLT também é implementado com base na mesma arquitetura; apenas o frontend muda, enquanto os demais componentes são compartilhados com o XPath

O vasto universo das especificações de XML/XPath/XSLT

  • XPath 3.1 e XSLT 3.0 se tornaram muito mais complexos e ricos em recursos do que as versões 1.0
  • Só os documentos de especificação necessários como referência para a implementação somam mais de 1.800 páginas, com várias especificações interdependentes
  • Por exemplo:
    • XPath 3.1, modelo de dados XQuery/XPath, funções e operadores, XML Schema (estrutura/tipos de dados)
    • XSLT 3.0, especificação de serialização, namespaces XML, XML Base, xml:id etc.
    • Como também inclui recursos de expressões regulares, foi implementado um motor de regex separado → regexml

Estado atual da implementação do Xee

  • A linguagem principal do XPath 3.1 e a maior parte da biblioteca padrão já foram implementadas
  • Algumas funções da biblioteca padrão relacionadas a formatação ainda não foram implementadas
  • Nos testes de compatibilidade do XPath 3.1, passou em 20.130 de 21.859 testes (cerca de 92%)
  • Todos os testes são executados em cerca de 13 segundos → desempenho muito rápido
  • XSLT ainda não está concluído, mas a estrutura de base já está pronta, permitindo expansão futura

Procura-se contribuidores

  • Desenvolvedores com interesse em Rust e XML, implementação de linguagens de programação ou otimização de consultas são bem-vindos
  • É possível contribuir em várias áreas, como implementação de recursos com base em especificações, trabalho de otimização e melhoria de desempenho de consultas
  • O Xee chegou a um momento em que precisa do apoio da comunidade open source como uma implementação moderna de XML fora do ecossistema Java

Eu ainda sou descolado. Mesmo trabalhando com XML.

1 comentários

 
GN⁺ 2025-03-30
Comentários no Hacker News
  • Fico feliz em ver alguém criar uma implementação realmente open source de XSLT 3 e XPath 3

    • Em projetos anteriores, usei apenas XSLT & XPath 1.0. Isso acontecia porque, fora do ecossistema Java/.NET, o suporte era fraco
    • O Saxon era excelente, mas eu gostaria que houvesse mais implementações de XSLT 2.0 e XPath 2.0 ou superior no mundo open source
    • XSLT 3.0 é uma especificação excelente, mas precisamos de outras formas de executá-la de maneira open source
  • Existe uma grande quantidade de fontes XML

    • Por exemplo, o arquivo da Wikipedia tem 42 GB de texto descompactado
    • Armazená-lo na memória em uma forma totalmente parseada pode exigir mais de 100 GB
    • Streaming é a solução, mas ainda não é suportado
  • Ainda é legal usar XML

    • Precisamos de uma biblioteca de alto desempenho e alta qualidade escrita em Rust
    • Uma biblioteca Python baseada nisso poderia ser uma boa base
  • XML é uma abordagem baseada em padrões para interoperabilidade de dados

    • Quando aprendi pela primeira vez, eu não gostava porque não era amigável para desenvolvedores
    • Mas agora passei a entender o valor de um padrão consolidado ao longo do tempo
    • XML parece ser um padrão de dados preferido pelos computadores
  • XSLT ainda é amplamente suportado nos principais navegadores

  • O fato de poder ser compilado para WASM é algo positivo

    • Houve uma época em que a equipe do Chrome tentou remover o suporte a libxml e XSLT
    • Isso é uma prova de como o trabalho em ferramentas fundamentais é importante
  • Recentemente escrevi um transpiler de XSLT 2

    • Escrever o engine de XPath foi a parte mais difícil
  • Tenho curiosidade sobre quais problemas XPath e XSLT resolvem com elegância hoje em dia

  • Gosto de trabalhar fora do ecossistema Java

    • É importante que um leitor de XML tenha recursos de recuperação de erros
  • Fico me perguntando se essa implementação poderia algum dia ser usada no Wine para a implementação do MSXML

    • No passado, escrevi uma implementação de XPath 1.1 para o Wine, mas não consegui fazer o merge