Con schemi XML, un elemento in grado di sostituire un altro elemento.
elemento Sostituzione
Diciamo che abbiamo gli utenti provenienti da due paesi diversi: l'Inghilterra e la Norvegia. Vorremmo che la capacità di permettere all'utente di scegliere se lui o lei vorrebbe utilizzare i nomi degli elementi norvegese o inglese i nomi degli elementi nel documento XML.
Per risolvere questo problema, potremmo definire un substitutionGroup nello schema XML. In primo luogo, si dichiara un elemento di testa e poi dichiariamo gli altri elementi che affermano che essi sono sostituibili per l'elemento testa.
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
Nell'esempio precedente, il "name" elemento è l'elemento testa e la "navn" elemento è sostituibile per "name" .
Guardate questo 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 (according to the schema above) potrebbe essere la seguente:
<customer>
<name>John Smith</name>
</customer>
o come questo:
<kunde>
<navn>John Smith</navn>
</kunde>
Blocco Elemento Sostituzione
Per evitare che gli altri elementi da sostituire con un elemento specificato, utilizzare il block attributi:
<xs:element name="name" type="xs:string" block="substitution"/>
Guardate questo 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 valido (according to the schema above) si presenta così:
<customer>
<name>John Smith</name>
</customer>
Ma questo non è più valido:
<kunde>
<navn>John Smith</navn>
</kunde>
utilizzando substitutionGroup
Il tipo di elementi sostituibili deve essere uguale o derivato da, il tipo dell'elemento testa. Se il tipo di elemento sostituibile è lo stesso del tipo di elemento testa non sarà necessario specificare il tipo di elemento sostituibili.
Si noti che tutti gli elementi del substitutionGroup (l'elemento di testa e gli elementi sostituibili) devono essere dichiarate come elementi globali, altrimenti non funzionerà!
Quali sono gli elementi globali?
Elementi globali sono gli elementi che sono figli immediati del "schema" elemento! elementi locali sono elementi annidati all'interno di altri elementi.