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 :Dans l'exemple de schéma XML ci-dessus, le type de base appelé <shapeType> est défini comme 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.
<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.
<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>