Sélection d'un type de substitution

La spécification de schéma XML prend en charge la possibilité de générer des types dérivés, complexes par extension.

Dans le document d'instance XML, vous déclarez le type d'un élément XML à partir d'un ensemble de types qui sont tous dérivés du même type de base, plutôt que de déclarer explicitement le type de l'élément XML dans le schéma XML. Le type de l'élément est défini à l'aide de l'attribut type, comme indiqué par l'exemple de document d'instance XML suivant :

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns="http://shapesrus.com/example" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:type="circle">
 <color xmlns="">blue</color>
 <diameter xmlns="">10</diameter>  
</shape>

Dans le document d'instance XML précédent, l'élément <shape> est déclaré par le type circle. L'élément <shape> du document d'instance XML peut également être défini par le type rectangle, comme dans l'exemple de document d'instance XML suivant :

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns="http://shapesrus.com/example" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:type="rectangle">
 <color xmlns="">blue</color>
 <length xmlns="">5</length>
 <width xmlns="">8</width>  
</shape>
Dans cet exemple, l'élément <shape> est basé sur l'un des types dérivés du type de base shapeType. Les types dérivés de shapeType sont nommés circle et rectangle, comme indiqué dans l'exemple de schéma XML suivant :
Lorsqu'un schéma XML définit un élément XML basé sur des types dérivés, vous devez définir le type dérivé (ou le type de substitution) attendu pour l'élément XML, en phase d'exécution. Pour l'exemple de schéma XML ci-dessus, vous devez spécifier le type de l'élément <shape>, circle ou rectangle. Dans Studio, vous spécifiez le type de substitution attendu d'un élément XML à l'aide de l'option de menu Remplacer le noeud par... :
  • Pour une variable basée sur un type de substitution - Sélectionnez le type attendu de l'élément XML en cliquant avec le bouton droit de la souris sur le noeud dans le panneau Schéma de de l'onglet Variables et en sélectionnant l'option Remplacer le noeud par... dans le menu. Pour plus d'informations, voir Sélection d'un type de substitution pour des variables.
  • Pour un noeud basé sur un type de substitution dans un panneau de mappage - Sélectionnez le type attendu de l'élément XML en cliquant avec le bouton droit de la souris sur le noeud dans le panneau Schéma de de l'onglet Variables et en sélectionnant l'option Remplacer le noeud par..., dans le menu, comme décrit dans la procédure ci-après.  

Dans l'exemple de schéma XML ci-dessus, le type de base appelé <shapeType> est défini par abstract. Le type de base abstract ne peut pas être utilisé dans le document d'instance XML pour définir le type de l'élément ; l'un des types dérivés doit être spécifié. Dans cet exemple, l'élément <shape> du document d'instance XML ne peut pas être déclaré en tant que shapeType ; il doit être déclaré comme l'un des types dérivés, circle ou rectangle.

Dans l'exemple ci-dessus, le type de base est défini par abstract mais la substitution de types dérivés d'un type de base qui n'est pas abstract est également prise en charge. Pour que le type complexe appelé shapeType ne soit pas défini par abstract dans l'exemple de schéma XML ci-dessus, supprimez l'attribut abstract=true comme indiqué dans le segment de schéma XML suivant :
<xsd:complexType name="shapeType">
  <xsd:sequence>
    <xsd:element name="color" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>
WSDL est un schéma XML spécifique qui définit un service Web. L'utilisation de la substitution de type avec un WSDL est également prise en charge.

Vous pouvez spécifier le type de substitution pour une occurrence développée d'un noeud de destination récurrent. Cette substitution de type d'une occurrence développée est prise en charge uniquement pour les noeuds de destination récurrents. Les noeuds de destination sont situés à droite des panneaux de mappage.

Avertissement : La substitution de types complexes est prise en charge dans les panneaux de mappage d'activités et pour les variables. Toutefois, la dérivation d'éléments par extension à l'aide de groupes de substitution n'est pas prise en charge dans les panneaux de mappage d'activité ou pour des variables. Pour plus d'informations, voir Fonctions de schéma XML non prises en charge.

Exemple de schéma XML

L'exemple de schéma XML utilisé pour cette rubrique est donné à titre de référence :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://shapesrus.com/example"
           xmlns:sru="http://shapesrus.com/example">
  <xsd:element name="shape" type="sru:shapeType"/>
    <xsd:complexType name="shapeType" abstract="true">
      <xsd:sequence>
         <xsd:element name="color" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="circle">
       <xsd:complexContent>
         <xsd:extension base="sru:shapeType">
         <xsd:sequence>
           <xsd:element name="diameter" type="xsd:integer"/>
         </xsd:sequence>
        </xsd:extension>
  </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="rectangle">
    <xsd:complexContent>
      <xsd:extension base="sru:shapeType">
      <xsd:sequence>
        <xsd:element name="length" type="xsd:integer"/>
        <xsd:element name="width" type="xsd:integer"/>
      </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>