Skip to content
David Maus M. A.

Release of SchXslt Schematron v1.5

David Maus, 27. Sep 2020

I am pleased to announce the release of SchXslt 1.5, a modern XSLT-based Schematron processor.

You can download this version SchXslt from its project page. Developers using SchXslt in a Java-based project can add or update the Maven artifact to version 1.5.

Enhancements

Improved tracking of the context node

SchXslt groups patterns whose rules can run in a single XSLT mode using the xsl:next-match instruction. Version 1.5 of SchXslt improves the code that is used to track the context node in a chain of xsl:next-match calls such that it removes a call to generate-id() for every node matched by a rule.

Typed variables

SchXslt implements typed variables as outline in the Schematron Enhancement Proposal 1. A Schematron variable now has an optional as attribute with the same semantics as described in section 9.3 of the XSLT 2.0 and XSLT 3.0 specification respectively.

Structured Metadata about processors

The validation stylesheet and the SVRL report now contain structured metadata about the processor configuration. SchXslt uses striped RDF/XML to give information about the version of the XSLT processor, the version of SchXslt and any SchXslt compiler options. The RDF/XML adheres to the following grammar.

namespace dc = "http://purl.org/dc/elements/1.1/"
namespace dct = "http://purl.org/dc/terms/"
namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
namespace skos = "http://www.w3.org/2004/02/skos/core#"
namespace schxslt = "https://doi.org/10.5281/zenodo.1495494#"

start =
    element rdf:Description {
        SchXsltProcessor | XsltProcessor
    }

SchXsltProcessor =
    element dct:creator {
        element dct:Agent {
            element skos:prefLabel {
                text
            } &
            element schxslt:schxslt.compile.typed-variables {
                xsd:boolean
            } &
            empty
        } &
        empty
    } &
    element dct:created {
        xsd:dateTime
    } &
    empty

XsltProcessor =
    element dct:creator {
        element dct:Agent {
            element skos:prefLabel {
                text
            } &
            empty
        } &
        empty
    } &
    element dct:created {
        xsd:dataTime
    } &
    element dct:source {
        SchXsltProcessor
    } &
    empty

Micro-pipeline

The steps include, expand, and compile are integrated in a micro-pipeline such that a single stylesheet can be used to create the validation stylesheet. The pipeline stylesheets are called pipeline.xsl and pipeline-for-svrl.xsl respectively.

Build process

This version of SchXslt also marks a complete overhaul of the build process. The Ant step and the commandline validation tool have been merged to the main repository which is now set up as a Maven multi-module project. The XQuery modules for BaseX and eXist are moved to module subdirectories, too. Packaging SchXslt now creates the following artifacts:

  • a Java archive with the XSLT stylesheets and the XProc pipelines
  • a Zip-file with just the XSLT stylesheets
  • a Xar-file for BaseX
  • a Xar-file for eXist
  • a Java archive with the Ant step
  • a Java archive with the commandline validation tool

Special thanks to Duncan Paterson who helped setting up the modular Maven project.

Fixed bugs

  • (Issue 132) SchXslt now signals an error if a rule extends an abstract rule defined in a different pattern

  • (Issue 139) Fixed a bug in the API specification that could cause SchXslt to create a validation template where the validation logic could be optimized away by an XSLT processor

  • (Issue 131) Fixed a bug where the XQuery modules reported an error for a Schematron with query binding of 'xslt3'.