Продолжается подписка на наши издания! Вы не забыли подписаться?

Принципы проектирования XML-схем: нужны ли производные сложные типы

Автор: Фахеем Кан (Faheem Khan)

Зачем проверять XML-документы на допустимость
Рассмотрение определения производных сложных типов посредством ограничений
Проблемы, возникающие при определении производных сложных типов посредством ограничений
Рассмотрение определения производных сложных типов посредством расширения
Проблемы, возникающие при определении производных сложных типов посредством расширений
Заключение
Благодарности

Несмотря на то, что в спецификации консорциума W3C XML Schema содержится ряд конструкций, напоминающих понятия объектно-ориентированного программирования (в том числе определение производных типов и полиморфизм), реальная практика показывает, что они скорее усложняют схемы, обладая трудноуловимой взаимосвязью, которая чревата возникновением серьезных проблем, и зачастую могут быть заменены другими конструкциями XML Schema. В этой статье рассмотрено определение производных сложных типов посредством наложения ограничений и расширений, показаны достоинства и недостатки обоих подходов, предложены альтернативные решения.

Зачем проверять XML-документы на допустимость

Рекомендация консорциума W3C "XML Schema" - это всего лишь одна из множества спецификаций языков XML-схем: DTD, RELAX NG и XML Data-Reduced. Для описания структуры XML-документа в XML-схеме определяются допустимые элементы, которые могут находиться в документе, порядок их следования, а также ограничения, накладываемые на определенные характеристики этих элементов. Все более широкое распространение языка XML и языков XML-схем выявило два основных сценария использования XML-схем для проверки допустимости XML- документа.

  1. Описание и обеспечение соблюдения контракта между авторами и получателями XML-документов. Обычно XML-схема используется получателями и авторами XML-документов в качестве средства для понимания структуры передаваемого или формируемого документа. Схемы - это довольно сжатый машиночитаемый способ описания состава XML-документа, допустимого согласно отдельному XML-словарю. Таким образом, схема может рассматриваться как контракт между автором XML-документа и его получателем. Как правило, получатель сверяет передаваемый XML-документ с этим контрактом, проверив его допустимость по схеме. Это описание контракта охватывает широкий спектр сценариев использования языка XML, начиная с бизнес-субъектов, обменивающихся XML-документами, и заканчивая приложениями, в которых используются конфигурационные XML-файлы.
  2. Формирование основы для обработки и хранения типизированных данных, представленных в виде XML-документов. Популярность языка XML как способа представления жестко структурированных, строго типизированных данных(таких, как, например, содержимое реляционной базы или объектов различных языков программирования), потребовала возможности описывать типы данных элементов XML-документа. В результате появились языки схем XML Data и XML Data-Reduced, а затем и XML-схема W3C. Эти языки схем используются для преобразования входного информационного набора XML (XML infoset) в аннотированный информационный набор типов (type annotated infoset (TAI)), в котором информационные единицы элемента и атрибута снабжены (аннотированы) именами типов. В рекомендации консорциума W3C "XML Schema" описывается создание аннотированного информационного набора типов, появляющегося в результате проверки допустимости документа по схеме. При проверке документа по XML-схеме W3C входной информационный набор XML преобразуется в пост-верификационный информационный набор (post schema validation infoset (PSVI)), в котором, помимо всего прочего, содержатся аннотации типов. Однако практический опыт показывает, что для создания аннотированных информационных наборов типов не требуется проведения полной проверки допустимости документа; как правило, большинство приложений, в которых используются XML-схемы для формирования строго типизированных XML-документов, например, для преобразования XML<->объект, не выполняет полной проверки допустимости документов, поскольку ряд конструкций XML-схемы W3C не соответствует понятиям предметной области.

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

............

Заключение

С учетом сегодняшнего уровня развития технологий возможность определения производных сложных типов в соответствии с положениями XML-схемы W3C скорее добавит сложности, а не упростит ситуацию в двух наиболее общих случаях использования схемы. Для сценариев проверки допустимости документов получение производных типов посредством ограничений имеет минимальную ценность, но получение производных типов посредством расширений - это удобный способ применить модульный подход и обеспечить повторное использование кода. Однако следует внимательно изучить последствия использования подстановок различных типов (xsi:type и группы подстановок) при определении производных типов посредством расширения в сценариях, задействованных в проверке допустимости документа.

В настоящий момент обработка и хранение строго типизированных XML-данных - это удел традиционных объектно-ориентированных языков программирования и реляционных баз данных. Это означает, что определенные возможности XML-схемы W3C, такие как получение производного типа посредством ограничения (и, в меньшей степени, определение производного типа посредством расширения) являются причиной возникновения несоответствия между системой типов, используемых для описания строго типизированного XML-документа, и механизма, применяемого для его обработки и хранения . В конечном счете, когда такие технологии, как XQuery, получат широкое распространение как средство обработки и поддержки типизированных XML-документов, а XML-схема W3C будет интегрирована в основные продукты баз данных, это несоответствие перестанет быть существенным. Но до этого момента необходимо тщательно продумывать, стоит ли применять определение производных сложных типов в ситуациях, в которых XML-схема W3C используется главным образом как механизм создания аннотированных информационных наборов типов XML.

Благодарности

Автор хотел бы поблагодарить Дона Бокса (Don Box), Криса Ловетта (Chris Lovett) и Эрика Мейджера (Erik Meijer) за их идеи и помощь, предоставленные при написании этой статьи.

Перевод: Intersoft Lab
"С полным содержанием данной статьи можно ознакомиться в печатной версии журнала"

Copyright © 1994-2016 ООО "К-Пресс"