Schematron is a XPath/XSLT-based language for defining context-dependent rules. Schematron doesn't directly support structure or datatype validation, but a schema author may write rules that implement these checks. To write a full schema with Schematron, the author needs to take care to include all the rules needed to qualify the structure of the document. Table A-4 provides the fact sheet for Schematron.
Author: |
Rick Jelliffe and other contributors. Will be described by ISO/DSDL. |
Status: |
Unofficial. |
Location: |
|
Type: |
Rule-based. |
PSVI: |
No. |
Structures: |
No (although the structure can be controlled by rules). |
Datatypes: |
No (although the datatypes can be controlled by rules). |
Integrity: |
No (although the integrity can be controlled by rules). |
Rules: |
Yes. |
Vendor support: |
Low but increasing. |
Miscellaneous: |
Pure rule expression. Can be embedded in W3C XML Schema and RELAX NG. |
<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron"> <sch:title> Schematron Schema for library </sch:title> <sch:pattern> <sch:rule context="/"> <sch:assert test="library"> The document element should be "library". </sch:assert> </sch:rule> <sch:rule context="/library"> <sch:assert test="book"> There should be at least a book! </sch:assert> <sch:assert test="not(@*)"> No attribute for library, please! </sch:assert> </sch:rule> <sch:rule context="/library/book"> <sch:assert test="not(following-sibling::book/@id=@id)"> Duplicated ID for this book. </sch:assert> <sch:assert test="@id=concat('-', isbn)"> The id should be derived from the ISBN. </sch:assert> </sch:rule> <sch:rule context="/library/*"> <sch:assert test="name()='book' or name( )='author' or name( )='character'"> This element shouldn't be here... </sch:assert> </sch:rule> </sch:pattern> </sch:schema>
Note that the previous Schematron is a partial schema meant as a supplement.
Copyright © 2002 O'Reilly & Associates. All rights reserved.