All'interno di un XSD_Schema gli Indicatori di Raggruppamento definiscono dei gruppi di elementi ComplexType o di attributi che possono poi essere utilizzati con riferimento al gruppo. Essi sono:
- group che definisce un gruppo di elementi;
- attributeGroup che definisce un gruppo di attributi;
Come si nota da questo frammento di codice XML:
<pianta>
<nome>Geranio</nome>
<esterno>true</esterno>
<colore>rosso</colore>
</pianta>
<attrezzo>
<nome>Zappa</nome>
<dimensioni>30x10 cm</dimensioni>
<materiale>acciaio</materiale>
<util>Utilizzato per fioriere di medie
dimensioni e piccole profondita'</util>
<colore>silver</colore>
</attrezzo>In entrambi i tag <pianta> e <attrezzo> ci sono gli stessi elementi XML <nome> e <colore>. In questi casi, per migliorare la leggibilità del codice XSD ed in ottica OOP, è preferibile definire un gruppo XSD così fatto:
<xs:group name="common">
<xs:all>
<xs:element name="nome" type="xs:string" />
<xs:element name="colore" type="xs:string" />
</xs:all>
</xs:group>
Per poi referenziarlo nella definizione dei tipi complex_type pianta e attrezzo:
<xs:element name="pianta" maxOccurs="unbounded">
<xs:complexType>
<xs:group ref="common" />
<xs:element name="esterno" type="xs:boolean" />
</xs:complexType>
</xs:element>
<xs:element name="attrezzo" maxOccurs="unbounded">
<xs:complexType>
<xs:group ref="common" />
<xs:element name="dimensioni" type="xs:string" />
<xs:element name="materiale" type="xs:string" />
<xs:element name="util" type="xs:string" />
</xs:complexType>
</xs:element>Per gli attributi funziona allo stesso modo, se si dovesse avere a che fare con attributi che figurano molteplici volte, si può scegliere di raggrupparli come mostra l'esempio seguente:
<pianta nome="Geranio" colore="rosso" /> <attrezzo nome="Zappa" colore="silver" />
Si definisce il gruppo in questa maniera:
<xs:attributeGroup name="commonAttr"> <xs:attribute name="nome" type="xs:string" /> <xs:attribute name="colore" type="xs:string" /> </xs:attributeGroup>
e lo si referenzia come di seguito:
<xs:element name="pianta" maxOccurs="unbounded">
<xs:complexType>
<xs:attributeGroup ref="commonAttr" />
</xs:complexType>
</xs:element>
<xs:element name="attrezzo" maxOccurs="unbounded">
<xs:complexType>
<xs:attributeGroup ref="commonAttr" />
</xs:complexType>
</xs:element>
Personalmente non gli ho utilizzati spesso, ma sembrano essere utili nel ridurre le righe di codice e quindi anche per rendere più ordinato lo Schema_XSD prodotto.
Alla prossima,
MA.
0 commenti:
Posta un commento
Non ti è chiaro qualcosa?
No problem, posta il tuo dubbio ;)
..... e ricordati di firmarlo!