понедельник, 1 ноября 2010 г.

Схематрон (Schematron)

Схематрон - это язык для проверки правильности утверждений о данных в формате XML.

Разработан 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").

===
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru

Комментариев нет:

Отправить комментарий