The Leading Implementation of ISO Schematron
This is the home page for Rick Jelliffe's implementation of ISO Schematron using XSLT. Other more sophisticated Schematron validators built using this skeleton code can be found at the Validators page; in particular this includes a validator that generates ISO SVRL.
It is based in part on his original code from 1999 and supercedes all previous versions of Schematron, which can be found at his ASCC (Academia Sinica Computing Centre, Taipei) website. ISO officially does not allow reference implementations, however, this version is maintained by the editor of the ISO Standard and developers seeking better understanding of the ISO Standard can reference and follow this implementation.
- iso-schematron-xslt1.zip is for XSLT1 processors
- iso-schematron-xslt2.zip is for XSLT2 processors, such as SAXON 9.
- Schematron for Apache ANT (new beta) with documentation Using Schematron with ANT (PDF).
These distributions also now include stylesheets for extracting ISO Schematron patterns embedded in XSD or RELAX NG schemas.Please send comments to the news group schematron-love-in. Rick Jelliffe would like to express his thanks to everyone who has helped with Schematron over the last nine years.
See the following articles:
- Running Schematron: bat/shell, Ant, XProc
- Running Schematron: the evolution of the pipeline
- For an information on capabilities: see The awesome power of Schematron + XPath 2.0 (by Roger Costello)
Most applications and sites that use ISO Schematron use these XSLT scripts. However, there are other implementations of Schematron that may be useful. GriffinBrown's Probotron is a Java and C# implementation of ISO Schematron using these skeletons which also has an independent 'High Performance' implementation completely in Java, using their Shail data model. There are several independent Schematron 1.5 implementations as well: notably James Clark's Jing and Sun's MSV. There are several independent implementations of earlier versions of Schematron as well.
The design requirements for this version include:
- Implement all functional aspects of ISO Schematron faithfully
- Expose as much information from the schema as possible in the API
- Update Oliver Becker's "skeleton" design to cope with ISO Schematron
- Have, if possible, no changes that prevent existing clients of the skeleton from working, at least in the default query language binding
- Support all the default "query language binding" for ISO Schematron: XLST 1
- Support the "xpath" query language binding, a subset of XSLT 1 which is has not been explicitly specified. The design used here, once stable, would presumably be the basis for such a binding in a future version of the ISO standard.
- Support the "exslt" query language binding, a superset of XSLT 1 which is has not been explicitly specified. The design used here, once stable, would presumably be the basis for such a binding in a future version of the ISO standard.
- Support the "xslt2" query language binding, which is has not been explicitly specified. The design used here, once stable, would presumably be the basis for such a binding in a future version of the ISO standard.
- Merge into the code the various innovations and enhancements developed by other implementations of Schematron over the years, as well as suggestions made by members of the public through the schematron-love-in mail list.
- Support the specific requirements of Topologi who provide financial support for the standards and development activity.
- Have a capability where schemas in the old Schematron namespace can be validated by invoking this skeleton (or an importer of this skeleton.) For example, importing the Schematron 1.6 skeleton.
- By implementing the ISO standard, detect any corrections that need to be made.
- Be available in a non-viral, open source license. (If you have a requirement for a particular open source or free license, please contact Rick Jelliffe.)
Due to the variations in XSLT support, in particular differences in XSLT2 and XSLT1 processors, from 2007-10-17 there are now two distributions.
Some of these resources are out of sync with the latest version. As they are verified, they will be moved into the particular distributions.
- Other Validators built using this skeleton, in particular a validator producing ISO SVRL
- API documentation for the skeleton
- Implementation Status
- Universal Tests: a simple schema for testing implementations
- Schematron 1.5: Looking under the Hood by Bob DuCharme is a good introduction to the skeleton API. Note that Schematron 1.5 is obsolescent. Please use ISO Schematron for new and maintained projects.