The "Reference" 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. Even though ISO officially does not allow reference implementations, this version is intended to act as a kind of reference implementation for developers seeking better understanding of the ISO Standard.
This software is currently in late beta release, but is fairly mature (in fact, much of the code is over eight years old) and is in wide use. 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.
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 is now a special version made for use with the SAXON processor. This should ultimately allow each version to be simplified.
Resources
- iso_schematron_skeleton_for_xslt1.xsl source code (beta status). This version: 2007-10-17.
- 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.
