XPath, XQuery, and XSLT for Rust
Pronounced "crust".
The goal of this project is to implement XPath 3.1, XQuery 3.1 and XSLT 3.0 in Rust. Also included is an XML parser, using a parser combinator inspired by Nom.
Currently, the project has achieved the functional equivalent of XPath v1.0 and XSLT 1.0. That is, all of the elements and functions in v1.0 XPath and XSLT have been implemented. However, it is not compliant with v1.0. This is because it implements the v3.0 data model.
In addition to the (rudimentary) implementation of the XQuery and XPath Data Model 3.1 data model, a few other features of XPath and XSLT v2.0/v3.0 have been implemented, such as FLWR expressions, grouping (i.e. xsl:for-each-group), and user-defined functions.
The library separates parsing from evaluation. The XPath and XSLT are parsed (or "compiled") into an internal representation, a "transformation", which is then evaluated.
This means it won't matter how an expression is written; it will be compiled into the same internal form. For example, the XPath expression:
if $a then "a is true" else ""
will result in the same internal format as:
<xsl:if test="$a">
a is true
</xsl:if>
This approach means that the XPath and XSLT modules are simply mappings from their respective syntaxes to an χrust transformation.
- Complete the XPath 1.0 implementation. (Done!)
- Implement all XSLT v1.0 functionality. (Done!)
- Improve XDM, XPath; achieve v2.0 compliance.
- Add v2.0 features to the XSLT engine.
- Further improve XDM, XPath; achieve v3.1 compliance.
- Add remaining v3.0 features to the XSLT engine.
NB. We're picking the low-hanging fruit first. So major, fundamental features of the languages are being implemented to begin with. The fine detail will be added later. Although the eventual desire is to implement all of XSLT v3.0 functionality, some more advanced features will be implemented sooner rather than later.
See the XSLT module for an example of how to evaluate an XSL stylesheet.
- Integration with Invisible XML.
- An example using XPath, but not XSLT.
Status of standards implementation for XDM, XPath, XQuery, and XSLT.