Skip to content

ballsteve/xrust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

χrust

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.

Design

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.

The Plan

  1. Complete the XPath 1.0 implementation. (Done!)
  2. Implement all XSLT v1.0 functionality. (Done!)
  3. Improve XDM, XPath; achieve v2.0 compliance.
  4. Add v2.0 features to the XSLT engine.
  5. Further improve XDM, XPath; achieve v3.1 compliance.
  6. 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.

Documentation

See the XSLT module for an example of how to evaluate an XSL stylesheet.

Examples

Compliance

Status of standards implementation for XDM, XPath, XQuery, and XSLT.