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: gli 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 un substitutionGroupPrima di tutto, dichiamiamo l'elemento principale, poi dichiareremo gli elementi secondari, che possono dichiarare di poter sostituire l'elemento principale.
<xs:element name="name" type="xs:string"/> <xs:element name="navn"}} substitutionGroup="name"/>
Nel esempio sopra, l'elemento "name" è l'elemento principale, mentre l'elemento "navn" può sostituire l'elemento "name".
Vediamo un frammento di XML schema:
<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 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某个 XML schema:
<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>
Usare substitutionGroup
Il tipo dell'elemento sostituibile deve essere lo stesso dell'elemento principale o derivato da esso. 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 si riferisce ai figli diretti dell'elemento "schema"! Gli elementi locali (local elements) sono elementi嵌套在内的其他元素中。
- Pagina precedente XSD <anyAttribute>
- Pagina successiva Esempio XSD