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.
This software is currently in candidate release, after a lengthy beta process of almost nine years. A final stable release is expected in the next few months, to allow any issues introduced in the current version to be shaken out. However, it is believed to be stable and mature, and is in wide use.
- iso-schematron-xslt1.zip is for XSLT1 processors
- iso-schematron-xslt2.zip is for XSLT2 processors, such as SAXON 9.
Running Schematron
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)
Design Requirements
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.
Resources
Some of these resources are out of sync with the latest version. As they are verified, they will be moved into the particular distributions.
- iso_schematron_skeleton_for_xslt1.xsl source code (beta status). This version: 2007-10-17 is not the latest.
- iso_schematron_skeleton_for_saxon.xsl source code (beta status). This version: 2007-10-17.
- 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.
