Созданный Риком Джелиффом (Rick Jelliffe),
определяет правила и проверки, которые применяются к конкретному XML-документу. В Schematron реализован уникальный подход в отношении схем в том смысле, что он сосредотачивается на проверке допустимости конкретных документов, а не на объявлении схемы (в отличие от других языков описания схем).
Для описания этих правил и проверок Schematron практически целиком полагается на модели запросов XPath. Для обработки очень сложных XML-документов с помощью всего лишь подмножества XPath можно создавать мощные таблицы стилей XSLT.
Прежде чем углубиться в изучение Schematron, давайте посмотрим, как легко использовать XSLT для проверки XML-документов. Вернемся к предыдущему примеру:
<shortStory author='AUTHOR1'>
<character name='CHARACTER1'/>
<character name='CHARACTER2'>
</shortStory>
<anthology author='AUTHOR1'>
<shortStory>
<character name='CHARACTER1'/>
<character name='CHARACTER2'>
</shortStory>
</anthology>
Можно создать шаблон, который будет возвращать "Invalid XML" ("Недопустимый XML"), если элемент shortStory имеет атрибут author, когда он содержится в элементе anthology.<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform">
<xsl:template match='shortStory'>
<xsl:if test='../anthology and @author'>
Invalid XML
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Нетрудно придумать другие комбинации шаблонов, которые будут проверять более сложные структуры XML. В сущности, именно так и работает Schematron. Он берет описание схемы Schematron (на XML), которое определяет ограничения. Таблица стилей Schematron XSLT превращает это в другую таблицу стилей, преобразуя с помощью этой результирующей таблицей стилей конкретный документ, а затем выполняет проверку допустимости этого документа.
Структура документа Schematron
XML-документ Schematron состоит из элемента schema в пространстве имен Schematron: http://www.ascc.net/xml/schematron. Элемент schema содержит один или более элементов pattern. Элементы pattern позволяют пользователю логически группировать ограничения схемы. Вот несколько примеров логической группировки: Text Only Elements (Только текстовые элементы), Valid Root Element (Допустимый корневой элемент), Check for ID Attribute (Атрибут проверки ID).
Элементы pattern имеют атрибут name. Они также имеют атрибут see, который обращается к URL за пользовательской документацией по этой схеме.