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