Un elemento complesso contiene altri elementi e / o attributi.
Che cosa è un elemento complesso?
Un elemento complesso è un elemento XML che contiene altri elementi e / o attributi.
Ci sono quattro tipi di elementi complessi:
- elementi vuoti
- gli elementi che contengono solo altri elementi
- gli elementi che contengono solo testo
- elementi che contengono entrambi gli altri elementi e testo
Note: Ciascuno di questi elementi possono contenere gli attributi, come pure!
Esempi di elementi complessi
Un elemento XML complesso, "product" , che è vuoto:
<product pid="1345"/>
Un elemento XML complesso, "employee" , che contiene solo altri elementi:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Un elemento complesso XML, "food" , che contiene solo testo:
<food type="dessert">Ice cream</food>
Un elemento XML complesso, "description" , che contiene entrambi gli elementi e il testo:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Come definire un elemento complesso
Guardate questo complesso elemento XML, "employee" , che contiene solo altri elementi:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Possiamo definire un elemento complesso in uno schema XML due modi diversi:
1. Il "employee" elemento può essere dichiarato direttamente nominando l'elemento, in questo modo:
<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>
Se si utilizza il metodo sopra descritto, solo il "employee" elemento può utilizzare il tipo complesso specificato. Si noti che gli elementi figlio, "firstname" e "lastname" , sono circondati dal <sequence> indicatore. Ciò significa che gli elementi figlio devono apparire nello stesso ordine in cui sono dichiarate. Si impara di più sugli indicatori nel capitolo XSD indicatori.
2. Il "employee" elemento può avere un attributo del tipo che si riferisce al nome del tipo complesso da utilizzare:
<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>
Se si utilizza il metodo descritto in precedenza, diversi elementi possono fare riferimento allo stesso tipo complesso, in questo modo:
<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>
È inoltre possibile basare un elemento complesso su un elemento complesso esistente e aggiungere alcuni elementi, come questo:
<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>