Разработан Rick Jelliffe из Academia Sinica Computing Centre (http://xml.ascc.net/resource/schematron/schematron.html).
Валидация XML-файла по схематрон-схеме подобна трансформации этого XML-файла в соответствии с преобразованием на языке XSLT (eXtensible Stylesheet Language Transformations). На выходе получается текст, который по-сути является протоколом проверки.
На самом деле, любую схематрон-схему можно преобразовать в XSLT. Это свойство схематрона как раз и является самым главным его достоинством.
Пример схематрон-схемы приведен ниже:
<?xml version="1.0" encoding="US-ASCII"?>
<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
<sch:title>Example Schematron Schema</sch:title>
<sch:pattern name="dog_pattern">
<sch:rule context="dog">
<sch:assert test="count(ear) = 2">A 'dog' element should contain two 'ear' elements.</sch:assert>
<sch:report test="bone">This dog has a bone.</sch:report>
</sch:rule>
</sch:pattern>
</sch:schema>
Давайте разберем, что здесь что.
Тег <sch:schema> - схема, корневой тег схематрона.
Внутри тега схемы располагаются название схемы - тег <sch:title>, и шаблоны - теги <sch:pattern>. Атрибут шаблона name задает имя шаблона (в нашем примере: "dog_pattern").
Шаблон состоит из правил - тег <sch:rule>. Каждое правило применяется к узлу проверяемого по схематрон-схеме XML-файла, путь к которому (XPath) задается атрибутом context.
Правило состоит из утверждений (<sch:assert>) и сообщений (<sch:report>), которые имеют атрибут test - условие, формулируемое на языке XPath. Разница между ними в том, что если условие в сообщении истинно (в примере: test="bone"), то в выходной файл пишется текст сообщения (This dog has a bone.), а текст утверждения (A 'dog' element should contain two 'ear' elements.) пишется в выходной файл только если условие НЕ выполнено (test="count(ear) = 2").
Комментариев нет:
Отправить комментарий