Xee - Motor moderno de XPath e XSLT implementado em Rust
(blog.startifact.com)- 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
xeee pela biblioteca Rustxee-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
lxmlpara 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
libxml2elibxslt - 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:idetc.- 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
Comentários no Hacker News
Fico feliz em ver alguém criar uma implementação realmente open source de XSLT 3 e XPath 3
Existe uma grande quantidade de fontes XML
Ainda é legal usar XML
XML é uma abordagem baseada em padrões para interoperabilidade de dados
XSLT ainda é amplamente suportado nos principais navegadores
O fato de poder ser compilado para WASM é algo positivo
Recentemente escrevi um transpiler de XSLT 2
Tenho curiosidade sobre quais problemas XPath e XSLT resolvem com elegância hoje em dia
Gosto de trabalhar fora do ecossistema Java
Fico me perguntando se essa implementação poderia algum dia ser usada no Wine para a implementação do MSXML