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

Schematron и XSD

Коротко про схематрон я написал в предыдущей статье. Здесь же речь пойдет об объединении схематрон-схемы и схемы XSD.

XSD-схема замечательно работает, когда необходимо провести форматный контроль XML файла. В нем есть все необходимые инструменты, чтобы проверить структуру XML-файла и соответствие данных определенным типам. Однако логический и арифметический контроль с помощью XSD-схемы осуществить нельзя. Для этого лучше всего подходит схематрон.

Однако, хранить две отдельных схемы (XSD и Schematron) в разных файлах неудобно. К тому же, существующие механизмы обработки XML-файлов (DOM- и SAX-парсеры) не умеют работать со схемами Schematron, а дважды проверять один и тот же XML по разным схемам не рационально (потребуется дважды "отпарсить" весь XML-файл).

Предлагается задавать правила проверки на языке Schematron в подэлементах <xs:appinfo> элементов <xs:annotation> XSD-схемы.

Пример:

<?xml version="1.0"?>
<xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sch="http://www.ascc.net/xml/schematron">
  <xs:element name="Root">
    <xs:annotation>
      <xs:appinfo>
        <sch:pattern name="DocumentChecker">
          <sch:rule context="Person">
            <sch:assert test="@birthYear<1990">Birth year should be less than 1990.</sch:assert>
          </sch:rule>
        </sch:pattern>
      </xs:appinfo>
    </xs:annotation>
  </xs:element>
</xs:schema>

В этом примере мы видим утверждение на языке Schematron <sch:assert test="@birthYear<1990">Birth year should be less than 1990.</sch:assert>, которое должно проверяться в контексте XML-узла Person (<sch:rule context="Person">).

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

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

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