Share |

lunedì 24 maggio 2010

XSD: Gli Indicatori di Raggruppamento

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!