Remplacement d'éléments de schéma XML
XSD Substitution d'éléments
Grâce au schéma XML, un élément peut remplacer un autre élément.
Remplacement d'éléments
Donnons un exemple : nos utilisateurs viennent du Royaume-Uni et de la Norvège. Nous aimerions que les utilisateurs puissent choisir d'utiliser des noms d'éléments norvégiens ou anglais dans un document XML.
Pour résoudre ce problème, nous pouvons définir un substitutionGroup dans le schéma XML. Tout d’abord, nous déclarons l’élément principal, puis nous déclarons les éléments secondaires, qui déclarent qu’ils peuvent remplacer l’élément principal.
<xs:element name="navn" substitutionGroup="name"/>
Dans l'exemple ci-dessus, l'élément "name" est l'élément principal, et l'élément "navn" peut remplacer l'élément "name".
Veuillez regarder un fragment du schéma XML :
<xs : element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:séquence>
<xs:element ref="nom"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name ="kunde" substitutionGroup="customer"/>
Un document XML valide ressemble à ceci (selon le schéma ci-dessus) :
<name>John Smith</name>
</customer>
ou quelque chose comme ceci :
<navn>John Smith</navn>
</kunde>
Empêcher le remplacement d'un élément
Pour empêcher d'autres éléments de remplacer un élément Pour l'élément spécifié, veuillez utiliser l'attribut block :
Veuillez consulter un fragment d'un schéma XML :
< ;xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:séquence>
<xs:element ref="nom"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
< ;xs:element name="kunde" substitutionGroup="customer"/>
Le document XML légal doit être similaire à ceci (selon le schéma ci-dessus) :
<name>John Smith</name>
</customer>
Mais le document suivant n'est plus valide :
<navn>John Smith</navn>
</kunde>
Utiliser substitutionGroup
Le type de l'élément remplaçable doit être le identique à l'élément principal Identique ou dérivé de l'élément principal. Si le type de l'élément remplaçable est le même que le type de l'élément principal, vous n'avez pas besoin de spécifier le type de l'élément remplaçable.
Veuillez noter que tous les éléments du substitutionGroup (éléments principaux et éléments remplaçables) doivent être déclarés comme éléments globaux, sinon cela ne fonctionnera pas !
Que sont les éléments globaux ?
Les éléments globaux font référence aux éléments enfants directs de l'élément « schéma » ! Les éléments locaux font référence à des éléments imbriqués dans d'autres éléments.