A mature, free implementation of ISO Schematron 2006 in XSLT

Distribution at GitHub:

Please note that the distribution is targeted to developers and integrators, or users who are capable of writing or adjusting batch scripts (.BAT, shell scripts, etc).

This is basically the 2010 distribution from  The XSLT1 skeleton code supports ISO Schematron 2006. The XSLT skeleton code also supports the features in ISO Schematron 2016. An updated version is in the works: as a first step, the issues list has been updated.


  • Open Source (OSI compliant zlib/libpng license or Apache License)
  • Available for XSLT1 and XSLT2
  • Trivially runnable in Java, .NET, C++, Bat files, XProc, etc. Ant task available.
  • Stable: In continuous development from 1999 to 2010, 2013. (Watch this page for notice of developments starting again.)
  • Extend with API or SVRL use XML output
  • Tracks the ISO standard.
  • Localized to Czech, Dutch, English, French and German.

Under the Hood

The ‘Skeleton’ implementation of ISO Schematron at is a four-stage XSLT pipeline. The first two stages are macro-processors and only necessary if expert features are being used. Your software will look after running this pipeline.

Here is a UML diagram from a real project, showing how Schematron was integrated using a commercial XSLT engine. (Note that there is lots of opportunity for caching of compiled schemas.)


The basic processing now like this, as a shell script or BAT file:

xslt -stylesheet iso_dsdl_include.xsl  theSchema.sch > theSchema1.sch
 xslt -stylesheet iso_abstract_expand.xsl  theSchema1.sch > theSchema2.sch
 xslt -stylesheet iso_svrl_for_xsltn.xsl  theSchema2.sch > theSchema.xsl
 xslt -stylesheet theSchema.xsl  myDocument.xml > myResult.xml

You can hook your own custom output code using the API, however for most validation developers usually find the XML output files (in ISO Standard Schematron Validation Reporting Language SVRL) allows a more convenient fit into their XML-based tool chain.

See the following articles:


Some of these resources are out of sync with the latest version. As they are verified, they will be moved into the particular distributions.