El lenguaje de esquema XML permite que una definición de tipo se base en otra definición de tipo. De este modo, se puede construir una jerarquía de tipos. Este tema describe los conceptos de herencia de tipo y pone de relieve algunas cuestiones importantes relacionadas con la sustitución.
Se puede encontrar una descripción completa de la herencia de tipo de esquema XML en el sitio Web World Wide Web Consortium (W3C) o en numerosos manuales que tratan sobre el esquema XML.
Un tipo es una restricción del tipo base si los elementos del tipo derivado tienen un rango más pequeño de valores permitidos (o miembros de tipo permitidos) que los elementos del tipo base.
Por ejemplo, es posible que una restricción de un tipo complejo reduzca el número de apariciones de uno de los miembros de tipo u omita por completo dicho miembro de tipo.
De forma similar, es posible que una restricción de un tipo simple reduzca el valor de la faceta Inclusiva Máx o incremente el valor de la faceta Inclusiva Mín.
Un tipo es una extensión del tipo base si los elementos del tipo derivado tienen un rango más amplio de valores permitidos (o miembros de tipo permitidos) que los elementos del tipo base.
Por ejemplo, es posible que una extensión de un tipo complejo añada miembros de tipo que no existían en el tipo base o permita que se repita un miembro de tipo.
De forma similar, una extensión de un tipo simple debe ser siempre un tipo complejo basado en el tipo simple. (No es posible extender un tipo simple ampliando el rango de valores permitidos)
Se aplican normas especiales a la derivación de tipos simples. Un tipo simple no puede extender otro tipo simple. Esto asegura que las limitaciones impuestas por un tipo simple no se puedan eliminar derivando desde dicho tipo otro tipo simple.
Sin embargo, se permite que un tipo complejo extienda un tipo simple. Esto no afecta al rango de valores permitidos del tipo simple, pero permite añadir atributos. El resultado de la extensión de un tipo simple es siempre un tipo complejo que contiene cero o más atributos.
El atributo final en un tipo complejo puede tomar tres valores, con los efectos siguientes:
El esquema XML proporciona dos mecanismos de sustitución diferentes, que utilizan ambos información de herencia de tipo para permitir o prohibir las sustituciones.
La sustitución de elemento la controlan los grupos de sustitución y la sustitución de elemento se puede bloquear o permitir para la extensión y la limitación mediante valores en el propio elemento o en el tipo del elemento.
La sustitución de tipo permite definir el tipo del elemento en el documento de instancia, utilizando el atributo xsi:type en el elemento, de forma que no se conozca el tipo real del elemento hasta que el elemento se haya analizado parcialmente. Este mecanismo también se puede bloquear o permitir basándose en el método de derivación de los tipos implicados.