Sostituzione di elementi XSD
- Pagina precedente XSD <anyAttribute>
- Pagina successiva Esempio XSD
Attraverso lo schema XML, un elemento può sostituire un altro elemento.
Sostituzione degli elementi
Facciamo un esempio: i nostri utenti provengono dal Regno Unito e dalla Norvegia. Speriamo di avere la capacità di permettere agli utenti di scegliere se utilizzare i nomi degli elementi in norvegese o in inglese nei documenti XML.
Per risolvere questo problema, possiamo definire uno substitutionGroup.Prima di tutto, dichiariamo l'elemento principale, poi dichiareremo gli elementi secondari, che possono dichiarare di essere in grado di sostituire l'elemento principale.
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/>
Nell'esempio sopra, l'elemento "name" è l'elemento principale, mentre l'elemento "navn" può sostituire l'elemento "name".
Vediamo un frammento di uno schema XML:
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo"/> <xs:element name="kunde" substitutionGroup="customer"/>
Un documento XML valido dovrebbe assomigliare a questo (in base allo schema sopra):
<customer> <name>John Smith</name> </customer>
O qualcosa del genere:
<kunde> <navn>John Smith</navn> </kunde>
Blocco di sostituzione
Per prevenire che altri elementi sostituiscano un elemento specifico, utilizzare l'attributo block:
<xs:element name="name" type="xs:string" block="substitution"/>
Vediamo un frammento di uno schema XML:
<xs:element name="name" type="xs:string" block="substitution"/> <xs:element name="navn" substitutionGroup="name"/> <xs:complexType name="custinfo"> <xs:sequence> <xs:element ref="name"/> </xs:sequence> </xs:complexType> <xs:element name="customer" type="custinfo" block="substitution"/> <xs:element name="kunde" substitutionGroup="customer"/>
Un documento XML legittimo dovrebbe assomigliare a questo (in base allo schema sopra):
<customer> <name>John Smith</name> </customer>
Ma il documento seguente non è più legittimo:
<kunde> <navn>John Smith</navn> </kunde>
Utilizzo di substitutionGroup
Il tipo dell'elemento sostituibile deve essere lo stesso del tipo dell'elemento principale o derivato dal tipo dell'elemento principale. Se il tipo dell'elemento sostituibile è lo stesso del tipo dell'elemento principale, non è necessario specificare il tipo dell'elemento sostituibile.
Attenzione, tutti gli elementi (elementi principali e elementi sostituibili) nel substitutionGroup devono essere dichiarati come elementi globali, altrimenti non funzioneranno!
Cos'è un elemento globale (Global Elements)?
L'elemento globale indica i sottoelementi diretti dell'elemento "schema"! Gli elementi locali (Local elements) sono elementi嵌套在内的元素。
- Pagina precedente XSD <anyAttribute>
- Pagina successiva Esempio XSD