Tercera Semana

Extensibilidad de Esquemas XML

Tipos derivados y esquemas para múltiples documentos

Tipos derivados en XML Schema

Los tipos derivados permiten crear nuevos tipos de datos basados en otros existentes, lo que mejora la reutilización y flexibilidad de los esquemas XML. Esto se puede hacer de dos formas principales:

  • Restricción: Se crean reglas más estrictas sobre un tipo base. Por ejemplo, si tenemos un tipo "string", podemos restringirlo para que solo acepte valores con un patrón específico.
  • Extensión: Se añaden nuevos elementos o atributos a un tipo base. Esto es útil cuando queremos ampliar la información de un elemento sin modificar su estructura original.

Ejemplo práctico: Imagina una tienda en línea donde hay un tipo base "Producto" con elementos como "nombre" y "precio". Si queremos definir un tipo "Electrodoméstico" que, además de esos atributos, incluya "potencia" y "voltaje", podemos extender el tipo "Producto".

Uso de esquemas en múltiples documentos

Muchas veces, un mismo esquema XML puede ser usado por varios documentos XML distintos. Esto se logra mediante referencias a esquemas externos y modularización.

  • Inclusión (<include>): Permite dividir un esquema grande en varios archivos más pequeños y reutilizables.
  • Importación (<import>): Se usa cuando los esquemas provienen de diferentes espacios de nombres.
  • Redefinición (<redefine>): Facilita la modificación de esquemas sin alterar los archivos originales.

Ejemplo real: En una empresa de logística, se puede definir un esquema XML general para "Envío" y luego personalizarlo para distintas compañías sin necesidad de crear un esquema desde cero para cada una.

Restricción

Ejemplo de restricción

La restricción permite limitar el contenido de un tipo de dato derivado a un subconjunto de los valores permitidos por el tipo base.

<xs:simpleType name="TextoCorto">
  <xs:restriction base="xs:string">
    <xs:maxLength value="10"/>
  </xs:restriction>
</xs:simpleType>

Extensión

Ejemplo de extensión

La extensión permite ampliar un tipo base agregando nuevos elementos o atributos.

<xs:complexType name="Empleado">
  <xs:complexContent>
    <xs:extension base="Persona">
      <xs:sequence>
        <xs:element name="salario" type="xs:decimal"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

Inclusión

Ejemplo de inclusión

La inclusión permite dividir un esquema XML en varios archivos y reutilizar definiciones dentro del mismo espacio de nombres.

<xs:include schemaLocation="base.xsd"/>

Importación

Ejemplo de importación

La importación permite reutilizar esquemas XML que pertenecen a diferentes espacios de nombres.

<xs:import namespace="http://ejemplo.com/direccion" schemaLocation="direccion.xsd"/>

Redefinición

Ejemplo de redefinición

La redefinición permite modificar tipos definidos en otro esquema sin necesidad de cambiar el esquema original.

<xs:redefine schemaLocation="base.xsd">
  <xs:complexType name="Persona">
    <xs:complexContent>
      <xs:extension base="Persona">
        <xs:sequence>
          <xs:element name="telefono" type="xs:string"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:redefine>