Определение пустых элементов в XML схеме

Пустые составные XML элементы не могут содержать контент, только атрибуты.

Пустой XML элемент:


<product prodid="1345" />

У приведенного выше элемента "product" нет никакого контента. Чтобы определить тип без контента, необходимо определить тип, который допускает в качестве контента другие элементы, однако сами эти элементы не декларируются:


<xs:element name="product">
   <xs:complexType>
      <xs:complexContent>
         <xs:restriction base="xs:integer">
            <xs:attribute name="prodid" type="xs:positiveInteger"/>
         </xs:restriction>
      </xs:complexContent>
   </xs:complexType>
</xs:element>

В приведенном выше примере мы определяем составной тип с составным контентом. complexContent сигнализирует о том, что мы намерены ограничить или расширить модель контента составного типа, а ограничение "integer" определяет один атрибут, но не вводит никакого контента.

При этом можно декларировать элемент "product" более компактно:


<xs:element name="product">
   <xs:complexType>
      <xs:attribute name="prodid" type="xs:positiveInteger"/>
   </xs:complexType>
</xs:element>

Либо можно дать элементу complexType имя, а элементу "product" задать атрибут type, в котором указать имя complexType (если используется данный метод, то один и тот же составной тип могут использовать несколько элементов):


<xs:element name="product" type="prodtype"/>
<xs:complexType name="prodtype">
   <xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>