XSD элемент extension

Элемент extension расширяет существующий элемент simpleType или complexType.

  • Родительские элементы: simpleContent, complexContent

Синтаксис элемента


<extension
 id=идентификатор
 base=QName
 любые атрибуты
 >

 (annotation?, ((group | all | choice | sequence)?,
 ((attribute | attributeGroup)*, anyAttribute?)))

</extension>

(Знак ? указывает на то, что элемент может появляться ноль или один раз, знак * указывает на то, что элемент может появляться ноль, один или больше раз внутри элемента extension.)

Атрибуты элемента

АтрибутОписание
idНе обязательный. Определяет уникальный идентификатор для элемента
baseОбязательный. Определяет имя встроенного типа данных, элемента simpleType или элемента complexType
любые атрибутыНе обязательный. Любые другие атрибуты вне пространства имен схемы

Пример использования

Пример №1
В следующем примере расширяется существующий simpleType. Добавляется атрибут:


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

<xs:simpleType name="size">
   <xs:restriction base="xs:string">
     <xs:enumeration value="small" />
     <xs:enumeration value="medium" />
     <xs:enumeration value="large" />
   </xs:restriction>
</xs:simpleType>

<xs:complexType name="jeans">
   <xs:simpleContent>
     <xs:extension base="size">
       <xs:attribute name="sex">
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="male" />
             <xs:enumeration value="female" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
     </xs:extension>
   </xs:simpleContent>
</xs:complexType>

</xs:schema>

Пример №2
В следующем примере расширяется существующий complexType тремя новыми элементами:


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

<xs:element name="employee" type="fullpersoninfo"/>

<xs:complexType name="personinfo">
   <xs:sequence>
     <xs:element name="firstname" type="xs:string"/>
     <xs:element name="lastname" type="xs:string"/>
   </xs:sequence>
</xs:complexType>

<xs:complexType name="fullpersoninfo">
   <xs:complexContent>
     <xs:extension base="personinfo">
       <xs:sequence>
         <xs:element name="address" type="xs:string"/>
         <xs:element name="city" type="xs:string"/>
         <xs:element name="country" type="xs:string"/>
       </xs:sequence>
     </xs:extension>
   </xs:complexContent>
</xs:complexType>

</xs:schema>