March 2007
Intermediate to advanced
51 pages
1h 19m
English
You've seen how to write rule and diagnostic elements. Now it's time to assemble these elements in a complete schema.
In brief, rule elements go into pattern elements and diagnostic elements go into diagnostics elements, and all of those are packed within a schema element. For example:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.ascc.net/xml/schematron">
<pattern name="main">
<rule context="book">
<assert test="@id">Missing "id" attribute.</assert>
<assert test="isbn">Missing "isbn" element.</assert>
<assert test="@id = concat('b', isbn)">The "id" attribute should be
the ISBN number with a prefix "b" </assert>
</rule>
<rule context="*[@id]">
<report test="preceding::*/@id = @id"
diagnostics="idAttribute-en idAttribute-fr "/>
</rule>
</pattern>
<diagnostics>
<diagnostic id="idAttribute-en" xml:lang="en">The id attribute
"<value-of select="@id"/>" is duplicated in element
"<value-of select="name()"/>".</diagnostic>
<diagnostic id="idAttribute-fr" xml:lang="fr">L'attribut id
"<value-of select="@id"/>" de l'élément
"<value-of select="name()"/> est dupliqué".</diagnostic>
</diagnostics>
</schema>The namespace URI for Schematron 1.5 is http://www.ascc.net/xml/schematron.
The namespace URI for ISO Schematron is http://purl.oclc.org/dsdl/schematron.
This seems intuitive enough, but there are still important questions that need an answer. For instance, in the previous example, book elements obviously ...