I'm proud to announce the project I've been working on for the last two years - Xee: a modern implementation of XPath and XSLT in Rust.

I know XML isn't hip anymore but this is a programming language implementation in Rust, according to extensive specifications!

https://blog.startifact.com/posts/xee/

#RustLang #xml @thisweekinrust

Xee: A Modern XPath and XSLT Engine in Rust

I announce Xee, the implementation of XPath and XSLT in Rust that I've been working on for the last two years.

Secret Weblog

@faassen Very nice! Thank you!

As an aside, I started to write a crate to implement XSD datatypes XPath/XQuery functions and operators for my SPARQL implementation, it might be handy: https://docs.rs/oxsdatatypes

oxsdatatypes - Rust

oxsdatatypes

@Tpt
Oh I have these implemented too, the atomic data types including the operators on them, creation, casting. I wonder now whether some of this should be extracted.
@faassen Great! I also got most of these, I guess the main difference is that I focus on what is needed for SPARQL so I have not implemented things like JSON, xsd:anyUri... I had a quick look at your code, I think one of the main difference is that I have a from scratch implementation for datetimes instead of relying on chrono.

@Tpt
Oh that might be interesting, especially the datetime parsing logic is too heavy in Xee right now. Though there are a lot of XPath conformance tests to pass for operations on this stuff.

I see you also have your own decimal implementation. Oh and my integer is arbitrarily large via ibig.

I have endless casting rules too but that could be layered over this stuff.

@faassen Yes, having both my interger and decimal as fixed size makes the storage layer much easier (no arbitrary size).

On testing, the SPARQL testsuite is not covering much built-in types and functions, the XPath testsuite is much more careful on this so I am not sure how correct my implementation is.

@Tpt
rust_decimal is also not arbitrary size. It sounds like the context for your library leads to different choices than mine.

It still strikes me as interesting to attempt to share stuff, perhaps offer different backends for the various data types, though that would mean quite a bit of engineering and right now your lib has almost no deps, an attractive property.

As a first step maybe I will just steal your date-time related parsers first so I can get rid of my overwrought implementation.

@faassen Yes for context leading to different choices!

Indeed, sharing would be great.

For the parsers, feel free to steal. If you find any bug with them, please ping me, I am not sure they are fully correct.