Continuando la serie di articoli riguardanti la definizione di Schemi_XSD, oggi saranno approfonditi i vari aspetti che si dovrebbero valutare prima di fare la scelta di definire ed utilizzare Complex Types XSD.
Gli Elementi Complessi sono:
- elementi che contengono altri elementi;
- elementi vuoti con attributi;
- elementi con attributi che contengono solo testo;
- elementi che contengono altri elementi e testo;
Elementi che contengono altri elementi
Come possiamo definire un elemento cosi' fatto?
<pianta> <nome>Geranio</nome> <esterno>true</esterno> <colore>rosso</colore> </pianta>
Non c'è dubbio che si tratta di un elemento complesso che potremmo definire in questa maniera:
<xs:complexType name="piantaItem">
<xs:sequence>
<xs:element name="nome" type="xs:string" />
<xs:element name="esterno" type="xs:boolean" />
<xs:element name="colore" type="xs:string" />
</xs:sequence>
</xs:complexType>
Per poi richiamarlo nella definizione dell'elemento 'Pianta':
<xs:element name="pianta" type="piantaItem" />
Da notare l'elemento <xs:sequence> che precede la definizione dei sotto-elementi e che indica che essi devono comparire nell'esatto ordine con cui sono stati definiti.
Questo elemento rientra nella sfera degli indicatori XSD.
Elementi vuoti con attributi
Vediamo come poter definire elementi che hanno attributi ma che non contengono alcun nodo figlio o Text Node come l'esempio seguente:
<webSite url="mirkoagrati.110mb.com" />
Siccome questo 'semplice' elemento contiene la definizione di un attributo, cioè un altro elemento, e' da considerarsi un complexType.
Con quale sintassi possiamo definirlo nel nostro Schema_XSD?
<xs:element name="webSite">
<xs:complexType>
<xs:attribute name="url" />
</xs:complexType>
</xs:element>
Elementi con attributi che contengono solo testo
Molti documenti XML contengono nodi, o elementi, che oltre ad avere attributi hanno anche un Text-Node figlio. Un esempio di tale caso potrebbe essere il seguente:
<webSite lang="IT"> http://mirkoagrati.110mb.com/index.php </webSite>
La definizione XSD di questo nodo potrebbe essere:
<xs:element name="webSite">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="lang" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Elementi che contengono altri elementi e testo
Potrebbe essere necessario, anche se forse è da considerarsi un caso limite (mai incontrato), definire elementi misti, ovvero che racchiudono altri elementi all'interno del proprio testo.
Un esempio potrebbe essere:
<nota> il mio cliente <cliente>Agrati Mirko</cliente> ha acquistato <qta>13</qta> dischi <item>maxtor</item> </nota>
Dunque, non ci sono dubbi sul fatto che abbiamo a che fare con un complexType, che tuttavia potremmo definire in questa maniera:
<xs:element name="nota">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="cliente" type="xs:string" />
<xs:element name="qta" type="xs:integer" />
<xs:element name="item" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
Ovvero, e' come definire un normale elemento complesso ma utilizzando l'attributo mixed valorizzato a true in <xs:complexType>.
Alla prossima,
MA.
0 commenti:
Posta un commento
Non ti è chiaro qualcosa?
No problem, posta il tuo dubbio ;)
..... e ricordati di firmarlo!