XSD-komplexe Elemente

Ein komplexes Element enthält andere Elemente und/oder Attribute.

Was ist ein komplexes Element?

Ein komplexes Element ist ein XML-Element, das andere Elemente und/oder Attribute enthält.

Es gibt vier Arten von komplexen Elementen:

  • Leere Elemente
  • Elemente, die andere Elemente enthalten
  • Elemente, die nur Text enthalten
  • Elemente, die Elemente und Text enthalten

Anmerkung:Diese Elemente können alle Attribute enthalten!

Beispiel für ein komplexes Element

Ein komplexes Element, "product", ist leer:

<product pid="1345"/>

Ein komplexes Element, "employee", enthält nur andere Elemente:

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

Ein komplexes Element, "food", enthält nur Text:

<food type="dessert">Eiscreme</food>

Ein komplexes Element, "description", enthält Elemente und Text:

<description>
Es geschah am <date lang="norwegian">03.03.99</date> ....
</description>

Wie definiert man einen komplexen Element?

Betrachten Sie diesen komplexen XML-Element, "employee", der nur andere Elemente enthält:

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

In XML Schema gibt es zwei Möglichkeiten, komplexe Elemente zu definieren:

1. Durch Benennen dieses Elements können Sie direkt das "employee"-Element deklarieren, wie folgt:

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

Wenn Sie die oben beschriebene Methode verwenden, kann nur "employee" den festgelegten komplexen Typ verwenden. Beachten Sie, dass die untergeordneten Elemente, "firstname" und "lastname", innerhalb des Indikators <sequence> eingeschlossen sind. Dies bedeutet, dass die Unterlemente in der Reihenfolge ihrer Erklärung auftreten müssen. Sie werden in XSD-Indikatoren Dieses Kapitel behandelt mehr über Indikatoren.

2. Der "employee"-Element kann das Attribut "type" verwenden, das den Namen des verwendeten komplexen Typs referenziert:

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

Wenn Sie die oben beschriebene Methode verwenden, können mehrere Elemente denselben komplexen Typ verwenden, wie zum Beispiel:

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

Sie können auch auf bestehende komplexe Elemente aufbauen, indem Sie auf eine komplexe Struktur als Basis zurückgreifen und einige Elemente hinzufügen, wie folgt:

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