start page | rating of books | rating of authors | reviews | copyrights

Book HomeXML SchemaSearch this book

A.8. Schematron

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.

Table A-4. Schematron fact sheet

Author:

Rick Jelliffe and other contributors. Will be described by ISO/DSDL.

Status:

Unofficial.

Location:

http://www.ascc.net/xml/schematron.

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.

A.8.1. Example

<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.



Library Navigation Links

Copyright © 2002 O'Reilly & Associates. All rights reserved.