La specifica dello schema XML supporta la capacità di derivare per estensione tipi complessi.
Nel documento di istanza XML, l'utente indica il tipo di un elemento XML da un insieme di tipi che derivano tutti dallo stesso tipo di base, invece di dichiarare esplicitamente il tipo per l'elemento XML nello schema XML. Il tipo per l'elemento viene definito tramite l'attributo type come mostrato dal seguente documento di istanza XML di esempio:
<?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>
Nel documento di istanza XML precedente, l'elemento <shape> viene dichiarato come un tipo circle. L'elemento <shape> nel documento di istanza XML può essere anche definito come un tipo rectangle, come avviene nel seguente documento di istanza XML di esempio:
<?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>In questo esempio, l'elemento <shape> si basa su uno dei tipi derivati del tipo base shapeType. I tipi derivati di shapeType sono denominati circle e rectangle, come mostrato nel seguente schema XML di esempio:
Nello schema XML di esempio mostrato sopra, il tipo di base denominato <shapeType> viene definito come astratto. Un tipo di base astratto non può essere utilizzato nel documento di istanza XML per definire il tipo per l'elemento — invece deve essere specificato uno dei tipi derivati. In questo esempio, l'elemento <shape> nel documento di istanza XML non può essere dichiarato come shapeType, deve essere dichiarato come uno dei tipi derivati; circle o rectangle.
<xsd:complexType name="shapeType"> <xsd:sequence> <xsd:element name="color" type="xsd:string"/> </xsd:sequence> </xsd:complexType>Un WSDL è uno schema XML specifico che definisce un servizio Web. È supportato anche l'utilizzo della sostituzione del tipo con un WSDL.
È possibile specificare il tipo di sostituzione per una ricorrenza espansa di un nodo di destinazione ricorrente. Questa sostituzione del tipo di una ricorrenza espansa è supportata solo per i nodi di destinazione ricorrenti. I nodi di destinazione si trovano sul lato destro dei pannelli di associazione.
<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>