XML - статьи



              

Рассмотрение определения производных сложных типов посредством ограничений


При наложении ограничений на сложные типы получается производный сложный тип, моделью содержания которого является подмножество модели содержания его базового типа. Это означает, что экземпляр производного типа также должен быть допустимым экземпляром этого базового сложного типа. Ниже приведены некоторые ограничения, которые можно накладывать на модель содержания:

  • замена факультативного атрибута обязательным;
  • изменение количества вхождений элемента, то есть когда новое число вхождений становится подмножеством первоначального (например, с minOccurs="1" и maxOccurs="unbounded" на minOccurs="2" и maxOccurs="4");
  • изменение значения атрибута, указывающего, что модель содержания элемента является пустой, с true на false;
  • замена типа элемента или атрибута подтипом (например, с xs:integer в описании базового типа на xs:positiveInteger в описании производного);
  • задание в объявлении элемента или атрибута его фиксированного значения.

Определение производного типа посредством ограничений в основном удобно в сочетании с абстрактными элементами или типами. Так, можно создать абстрактный тип, который содержит все характеристики ряда связанных моделей содержания, а затем ограничить его для создания каждой из требуемых моделей содержания. Этот прием был рассмотрен в сообщении Роджера Костелло (Roger Costello), направленного в адрес XML-DEV, в котором он свел PublicationType к MagazineType.

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- базовый тип -->

<xs:complexType name="XML-Deviant"> <xs:sequence> <xs:element name="numPosts" type="xs:integer" minOccurs="0" maxOccurs="1" /> <xs:element name="signature" type="xs:string" nillable="true" /> <xs:element name="email" type="xs:string" minOccurs="0" maxOccurs="1" /> </xs:sequence> <xs:attribute name="firstSubscribed" type="xs:date" use="optional" /> <xs:attribute name="mailReader" type="xs:string"/> </xs:complexType>




Содержание  Назад  Вперед