Kompozytowe puste elementy XSD

Puste elementy złożone nie mogą zawierać zawartości, mogą zawierać tylko atrybuty.

Złożony pusty element:

Pusty element XML:

<product prodid="1345" />

Element "product" nie zawiera żadnej zawartości. Aby zdefiniować typ bez zawartości, musimy zadeklarować typ, który może zawierać tylko elementy, ale w rzeczywistości nie deklarujemy żadnych elementów, na przykład:

<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>

W powyższym przykładzie zdefiniowaliśmy typ złożony z zawartością złożoną. Element <xs:complexContent> sygnalizuje, że planujemy ograniczyć lub rozszerzyć model zawartości jakiegoś typu złożonego, podczas gdy ograniczenie integer deklaruje atrybut, ale nie wprowadza żadnej zawartości elementowej.

Jednak, możesz również bardziej kompaktowo zadeklarować ten element "product":

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

Albo możesz nadać nazwę elementowi complexType, a następnie ustawić atrybut type dla elementu "product" i odnosić się do tej nazwy complexType (dzięki temu kilka elementów może odnosić się do tego samego typu złożonego):

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