XSD- Komplex-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 nur andere Elemente enthalten
- Elemente, die nur Text enthalten
- Elemente, die sowohl andere Elemente als auch Text enthalten
Hinweis: Jedes dieser Elemente kann auch Attribute enthalten!
Beispiele für komplexe Elemente
Ein komplexes XML-Element "product", das leer ist:
<product pid="1345"/>
Ein komplexes XML-Element, "Mitarbeiter", das nur andere Elemente enthält:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Ein komplexes XML-Element, "food", das nur Text enthält:
<food type="dessert">Ice cream</food>
Ein komplexes XML-Element, "Beschreibung", das sowohl Elemente als auch Text enthält:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
So definieren Sie ein komplexes Element
Schauen Sie sich dieses komplexe XML-Element „Mitarbeiter“ an, das nur andere Elemente enthält:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Wir können ein komplexes Element in einem XML-Schema auf zwei verschiedene Arten definieren:
1. Das Element "Mitarbeiter" kann direkt deklariert werden, indem das Element wie folgt benannt wird:
<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 das Element "Employee" den angegebenen komplexen Typ verwenden. Beachten Sie, dass die untergeordneten Elemente "firstname" und "lastname" vom Indikator <sequence> umgeben sind. Das bedeutet, dass die untergeordneten Elemente in der gleichen Reihenfolge erscheinen müssen, in der sie deklariert wurden. Mehr über Indikatoren erfahren Sie im Kapitel XSD-Indikatoren.
2. Das „employee“-Element kann ein type-Attribut haben, das auf den Namen des zu verwendenden komplexen Typs verweist:
<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 auf denselben komplexen Typ verweisen, wie hier:
<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 einen komplexen Typ auch auf einem vorhandenen komplexen Typ aufbauen und einige Elemente wie folgt hinzufügen:
<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>