Simple Schematron: assert

Basically Schematron tests an XPath, and issues a message. The intent is that the content of sch:assert be a natural language assertion.


      A limerick has 5 lines
    ]]>

Schematron tests a given XPath, and issues a message if the test fails. The content of sch:assert is going to show up as an error message, so it should be an assertion that will make sense to your encoders.

Here, we see a sch:rule which says look for all of the TEI lg elements that have the value of "limerick" on @type. This is where the context attribute comes in. Its value is a bit of XPath. Note that you need to include the namespace in the value of context. This basically specifies which specific XML language you are using, and provides context for the element.

The sch:assert element has the attribute @test, which is where you create the actual Schematron test. Here, the test is saying that you should count all of the children that are TEI l elements, and these should equal exactly 5. If there are 6 l elements or only 3 or 4, Schematron will give you the warning that occurs in the content of sch:assert

XPath and Schematron for TEI Customization, slide 21 of 24