XSD- complexe elementen
Een complex element bevat andere elementen en/of attributen.
Wat is een complex element?
Een complex element is een XML-element dat andere elementen en/of attributen bevat.
Er zijn vier soorten complexe elementen:
- lege elementen
- elementen die alleen andere elementen bevatten
- elementen die alleen tekst bevatten
- elementen die zowel andere elementen als tekst bevatten
Opmerking: elk van deze elementen kan ook attributen bevatten!
Voorbeelden van complexe elementen
Een complex XML-element, "product", dat leeg is:
<product pid="1345"/>
Een complex XML-element, "werknemer", dat alleen andere elementen bevat:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Een complex XML-element, "food", dat alleen tekst bevat:
<food type="dessert">Ice cream</food>
Een complex XML-element, "description", dat zowel elementen als tekst bevat:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Hoe een complex element te definiëren?
Kijk naar dit complexe XML-element, "employee", dat alleen andere elementen bevat:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
We kunnen een complex element in een XML Schema op twee verschillende manieren definiëren:
1. Het element "employee" kan direct worden gedeclareerd door het element een naam te geven, zoals deze:
<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>
Als u de hierboven beschreven methode gebruikt, kan alleen het element "employee" het opgegeven complexe type gebruiken. Merk op dat de onderliggende elementen, "voornaam" en "achternaam", worden omgeven door de indicator <reeks>. Dit betekent dat de onderliggende elementen in dezelfde volgorde moeten verschijnen als waarin ze zijn gedeclareerd. U leert meer over indicatoren in het hoofdstuk XSD-indicatoren.
2. Het element "employee" kan een typeattribuut hebben dat verwijst naar de naam van het te gebruiken complexe type:
<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>
Als u de hierboven beschreven methode gebruikt, kunnen verschillende elementen verwijzen naar hetzelfde complexe type, zoals deze:
<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>
Je kunt ook een complex type baseren op een bestaand complex type en enkele elementen toevoegen, zoals deze:
<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>