Языки информационного обмена

         

Определение сложных типов


Тип элемента называется сложным, если в элемент вложены другие элементы и/или в открывающем теге элемента есть атрибуты.

Сложный тип определяется компонентом complexType, имеющим вид:

<xsd:complexType name="имя типа" >

Определение типа

</xsd:complexType>

Необязательный атрибут name задает имя типа, а в содержимом компонента complexType описываются элементы, входящие в сложный тип, и/или атрибуты открывающего тега.

Определение сложного типа можно разделить на три группы:

  1. определение типа пустого элемента (элемента, не содержащего тела, а содержащего только атрибуты в открывающем теге).

    Каждый атрибут объявляется одним компонентом attribute, например:

    <xsd:complexType name="imageType"> <xsd:attribute name="href" type="xsd:anyURI" /> </xsd:complexType>

  2. определение типа элемента с простым телом (элемента, содержащего тело простого типа и атрибуты в открывающем теге).

    Этот тип отличается от простого типа только наличием атрибутов и определяется компонентом simpleContent. В теле этого компонента должен быть либо компонент restriction, либо компонент extension. Атрибутом base задают тип (простой) тела описываемого элемента.

    В компоненте extension указываются атрибуты открывающего тега описываемого элемента.

    В компоненте restriction, кроме атрибутов, описывается простой тип содержимого элемента и/или фасетки, ограничивающие тип, заданный атрибутом base.

  3. определение типа элемента, содержащего вложенные элементы.

    Если значениями определяемого сложного типа будут элементы, содержащие вложенные элементы, то перед тем, как перечислять их описания, надо выбрать модель группы (model group) вложенных элементов. Дело в том, что вложенные элементы, составляющие определяемый тип, могут появляться или в определенном порядке, или в произвольном порядке, кроме того, можно выбирать только один из перечисленных элементов. Эта возможность и называется моделью группы элементов. Она определяется одним из трех компонентов: sequence, all или choice.


    Компонент sequence применяется в том случае, когда перечисляемые элементы должны записываться в документе в определенном порядке.

    Если же вместо компонента xsd:sequence записать компонент xsd:all, то элементы можно перечислять в любом порядке.

    Компонент choice применяется в том случае, когда надо выбрать один из нескольких элементов.

  4. Определение типа элемента со сложным телом

    При определении сложного типа можно воспользоваться уже определенным, базовым, сложным типом, расширив его дополнительными элементами, или, наоборот, удалив из него некоторые элементы. Для этого необходимо применить компонент complexContent. В этом компоненте, так же как и в компоненте simpleContent, записывается либо компонент extension, если надо расширить базовый тип, либо компонент restriction, если нужно его сузить. Базовый тип указывается атрибутом base, так же как и при записи компонента simpleContent, но теперь это должен быть сложный, а не простои тип. При сужении базового типа компонентом restriction надо перечислить те элементы, которые останутся после сужения.




Содержание раздела