A especificação do Esquema XML suporta a capacidade de derivar tipos complexos por extensão.
No documento da instância XML, você declara o tipo de um elemento XML a partir de um conjunto de tipos que são todos derivados do mesmo tipo de base, em vez de declarar explicitamente o tipo para o elemento XML no Esquema XML. O tipo do elemento é definido usando o atributo type, conforme mostrado pelo seguinte documento da instância XML de exemplo:
<?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>
No documento da instância XML anterior, o elemento <shape> é declarado como um tipo circle. O elemento <shape> no documento da instância XML também pode ser definido como um tipo rectangle, conforme definido no seguinte documento da instância XML de exemplo:
<?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>Neste exemplo, o elemento <shape> é baseado em um dos tipos derivados do tipo de base shapeType. Os tipos derivados de shapeType são nomeados circle e rectangle, conforme mostrado no seguinte Esquema XML de exemplo:
No Esquema XML de exemplo mostrado acima, o tipo de base chamado <shapeType> é definido como abstrato. Um tipo de base abstrato não pode ser usado no documento da instância XML para definir o tipo para o elemento - um dos tipos derivados deve ser especificado no lugar. Neste exemplo, o elemento <shape> no documento da instância XML não pode ser declarado como shapeType, ele deve ser declarado como um dos tipos derivados; circle ou rectangle.
<xsd:complexType name="shapeType"> <xsd:sequence> <xsd:element name="color" type="xsd:string"/> </xsd:sequence> </xsd:complexType>Um WSDL é um Esquema XML específico que define um Serviço da Web. O uso da substituição de tipo com um WSDL também é suportado.
É possível especificar o tipo de substituição para uma ocorrência expandida de um nó de destino recorrente. Essa substituição de tipo de uma ocorrência expandida é suportada apenas para os nós de destino recorrentes. Os nós de destino estão localizados no lado direito das áreas de janela de mapeamento.
<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>