Avec les schémas XML, un élément peut remplacer un autre élément.
Element Remplacement
Disons que nous avons des utilisateurs de deux pays différents: l'Angleterre et la Norvège. Nous aimerions la possibilité de laisser l'utilisateur choisir s'il ou elle souhaite utiliser les noms des éléments norvégiens ou les noms d'éléments anglais dans le document XML.
Pour résoudre ce problème, nous pourrions définir un substitutionGroup dans le schéma XML. Tout d'abord, nous déclarons un élément de tête, puis nous déclarons les autres éléments qui précisent qu'ils sont substituables pour l'élément de tête.
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
Dans l'exemple ci - dessus, le "name" élément est l'élément de tête et le "navn" élément est substituable "name" .
Regardez ce fragment d'un schéma 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 document XML valide (according to the schema above) - (according to the schema above) pourrait ressembler à ceci:
<customer>
<name>John Smith</name>
</customer>
ou comme ceci:
<kunde>
<navn>John Smith</navn>
</kunde>
Élément de blocage Remplacement
Pour éviter que d' autres éléments de la substitution d'un élément spécifié, utilisez le block attribut:
<xs:element name="name" type="xs:string" block="substitution"/>
Regardez ce fragment d'un schéma 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 document XML valide (according to the schema above) - (according to the schema above) ressemble à ceci:
<customer>
<name>John Smith</name>
</customer>
MAIS CE N 'EST PLUS VALIDE:
<kunde>
<navn>John Smith</navn>
</kunde>
Utilisation de substitutionGroup
Le type des éléments substituable doit être la même que, ou dérivée de, le type de l'élément de tête. Si le type de l'élément substituable est le même que le type de l'élément de tête, vous ne devez spécifier le type de l'élément substituable.
Notez que tous les éléments du substitutionGroup (l'élément de tête et les éléments substituables) doivent être déclarés comme éléments globaux, sinon cela ne fonctionnera pas!
Quels sont les éléments globaux?
Éléments globaux sont des éléments qui sont des enfants immédiats du "schema" élément! Les éléments locaux sont des éléments imbriqués dans d'autres éléments.