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.
          
        
      
    
  

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

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