Elementi complessi XSD
Un elemento complesso contiene altri elementi e/o attributi.
Cos'è un elemento complesso?
Un elemento complesso è un elemento XML che contiene altri elementi e/o attributi.
Esistono quattro tipi di elementi complessi:
- elementi vuoti
- elementi che contengono solo altri elementi
- elementi che contengono solo testo
- elementi che contengono sia altri elementi che testo
Nota: ciascuno di questi elementi può contenere anche attributi!
Esempi di elementi complessi
Un elemento XML complesso, "prodotto", 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 XML complesso, "food", che contiene solo testo:
<food type="dessert">Ice cream</food>
Un elemento XML complesso, "descrizione", che contiene sia elementi che testo:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Come definire un elemento complesso
Guarda questo elemento XML complesso, "employee", che contiene solo altri elementi:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Possiamo definire un elemento complesso in uno schema XML in due modi diversi:
1. L'elemento "dipendente" 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 l'elemento "employee" può utilizzare il tipo complesso specificato. Si noti che gli elementi figlio, "firstname" e "lastname", sono circondati dall'indicatore <sequence>. Ciò significa che gli elementi figlio devono apparire nello stesso ordine in cui sono dichiarati. Imparerai di più sugli indicatori nel capitolo Indicatori XSD.
2. L'elemento "dipendente" può avere un attributo di tipo che fa riferimento 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 sopra descritto, più 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>
Puoi anche basare un tipo complesso su un tipo 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>