Schematron encourages the use of natural language descriptions targeted to human readers. This way validation can be more than just a binary distinction (document valid/invalid) but also support authors of in-progress documents with quick feedback on erroneous or unwanted document structure and content.
To this effect an assertion test is associated with zero or more natural-language
statements written in a lightweight templating language. The specification distinguishes
between a primary statement given in the element content of an assertion element, and
secondary statements or diagnostic given in the element content of
a sch:diagnostic element and referenced in a diagnostics attribute of an assertion element.
The 2016 revision added a mechanism for structured data targeted at machine rather
than human consumption. Designed in the same fashion as diagnostics, an assertion may
reference zero or more sch:property elements in a properties attribute. Each property element contains a template
for structured data.
The templates for natural-language statements and structured data are instantiated
when the respective assertion fails. The templating language contains both, elements for
text formatting (sch:emph, sch:span,
sch:dir) and elements that calculate values from the instance
document (sch:value-of, sch:name; xsl:copy-of in sch:property for the
query languages XSLT 2.0 and 3.0).