La especificación del esquema XML admite la capacidad de derivar tipos complejos por ampliación.
En el documento de instancia XML, declare el tipo de un elemento XML a partir de un conjunto de tipos derivados todos ellos del mismo tipo base, en lugar de declarar de forma explícita el tipo del elemento XML en el esquema XML. El tipo del elemento se define con el atributo type, como se muestra en el siguiente ejemplo de documento de instancia XML:
<?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>
En el documento de instancia XML anterior, el elemento <forma> se declara como de tipo círculo. El elemento <forma> del documento de instancia XML también se puede definir como de tipo rectángulo en el siguiente ejemplo de documento de instancia XML:
<?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>En este ejemplo, el elemento <forma> se basa en uno de los tipos derivados del tipo base shapeType. Los tipos derivados de shapeType se denominan círculo y rectángulo, como se muestra en el siguiente ejemplo de esquema XML:
En el ejemplo de esquema XML mostrado más arriba, el tipo base denominado <shapeType> se define como abstracto. No se puede utilizar un tipo base abstracto en el documento de instancia XML para definir el tipo del elemento; es necesario especificar uno de los tipos derivados en su lugar. En este ejemplo, el elemento <forma> en el documento de instancia XML no se puede declarar como shapeType, debe declararse como uno de los tipos derivados: círculo o rectángulo.
<xsd:complexType name="shapeType"> <xsd:sequence> <xsd:element name="color" type="xsd:string"/> </xsd:sequence> </xsd:complexType>Un WSDL es un esquema XML específico que define un servicio web. El uso de una sustitución de tipos con un WSDL también se admite.
Puede especificar el tipo de sustitución de una aparición expandida de un nodo de destino recurrente. Esta sustitución de tipo de una aparición expandida solo se admite con los nodos de destino recurrentes. Los nodos de destino se encuentran situados en la parte derecha de los paneles de correlación.
<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>