XSD komplekse elemente
'n Komplekse element bevat ander elemente en/of eienskappe.
Wat is 'n komplekse element?
'n Komplekse element is 'n XML-element wat ander elemente en/of eienskappe bevat.
Daar is vier soorte komplekse elemente:
- leë elemente
- elemente wat slegs ander elemente bevat
- elemente wat slegs teks bevat
- elemente wat beide ander elemente en teks bevat
Let wel: Elkeen van hierdie elemente kan ook eienskappe bevat!
Voorbeelde van komplekse elemente
'n Komplekse XML-element, "produk", wat leeg is:
<product pid="1345"/>
'n Komplekse XML-element, "werknemer", wat slegs ander elemente bevat:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
'n Komplekse XML-element, "kos", wat slegs teks bevat:
<food type="dessert">Ice cream</food>
'n Komplekse XML-element, "beskrywing", wat beide elemente en teks bevat:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Hoe om 'n komplekse element te definieer
Kyk na hierdie komplekse XML-element, "werknemer", wat slegs ander elemente bevat:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Ons kan 'n komplekse element in 'n XML-skema op twee verskillende maniere definieer:
1. Die "werknemer"-element kan direk verklaar word deur die element soos volg te noem:
<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>
As jy die metode hierbo beskryf gebruik, kan slegs die "werknemer" element die gespesifiseerde komplekse tipe gebruik. Let daarop dat die kinderelemente, "voornaam" en "van", omring word deur die <volgorde>-aanwyser. Dit beteken dat die kinderelemente in dieselfde volgorde moet verskyn as wat hulle verklaar is. Jy sal meer leer oor aanwysers in die XSD-aanwysers hoofstuk.
2. Die "werknemer"-element kan 'n tipe-kenmerk hê wat verwys na die naam van die komplekse tipe om te gebruik:
<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>
As jy die metode wat hierbo beskryf word gebruik, kan verskeie elemente na dieselfde komplekse tipe verwys, soos volg:
<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>
Jy kan ook 'n komplekse tipe op 'n bestaande komplekse tipe baseer en sommige elemente byvoeg, soos hierdie:
<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>