Las extensiones dentro del XSD sirven para extender un elemento, ya sea simple (simpleType) o complejo (complexType ).
En otras palabras: El elemento xs:extension se utiliza para indicar que un tipo complejo se deriva de otro tipo complejo o simple, añadiendo elementos o atributos adicionales al tipo base. Esto permite la extensión de tipos existentes para crear nuevos tipos con características adicionales, manteniendo al mismo tiempo la compatibilidad con el tipo base.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Tipo base de Empleado -->
<xs:complexType name="Empleado">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="idEmpleado" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<!-- Tipo extendido de EmpleadoEspecializado -->
<xs:complexType name="EmpleadoEspecializado">
<xs:complexContent>
<xs:extension base="Empleado">
<xs:sequence>
<xs:element name="departamento" type="xs:string"/>
<xs:element name="rol" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
Paso 1: Definir el Tipo Base
Primero, definimos un tipo complejo básico Empleado que incluye elementos para el nombre y el ID del empleado.
Paso 2: Extender el Tipo Base
A continuación, extendemos el tipo Empleado para crear un nuevo tipo EmpleadoEspecializado que añade información adicional sobre el departamento y el rol del empleado.
En este ejemplo, EmpleadoEspecializado hereda los elementos nombre e idEmpleado del tipo base Empleado y añade dos nuevos elementos: departamento y rol. Esto demuestra cómo xs:extension se utiliza para crear tipos derivados que expanden la estructura de tipos existentes, permitiendo una mayor flexibilidad y reutilización en la definición de esquemas XML.
La extensión de elementos simples permite ampliar tipos simples, como xs:string o xs:int, con restricciones adicionales o con la adición de atributos, manteniendo la base del tipo simple. Para lograr esto, se utiliza una combinación de xs:simpleContent y xs:extension dentro de una definición de tipo complejo.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="EmailConTipo">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="tipo" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
Supongamos que queremos definir un tipo de dato simple Email que sea básicamente un string, pero con un atributo adicional para indicar si el correo electrónico es de tipo personal o de trabajo. Aunque el tipo base es xs:string (un tipo simple), necesitamos usar xs:complexType para poder añadir atributos.