Escenario: Evolución de un esquema XML

El escenario siguiente muestra el proceso de evolución de un esquema XML registrado en el depósito de esquemas XML (XSR).

Jane, la directora de una tienda pequeña, mantiene una base de datos en la que todos los productos de la tienda se listan en una serie de documentos XML. Estas listas de productos XML se ajustan al esquema siguiente:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:complexType name="prodType">
  <xsd:sequence>
    <xsd:element name="name" type="xsd:string" />
    <xsd:element name="sku" type="xsd:string" />
    <xsd:element name="price" type="xsd:integer" />
  </xsd:sequence>
  <xsd:attribute name="color" type="xsd:string" />
  <xsd:attribute name="weight" type="xsd:integer" />
</xsd:complexType>

<xsd:element name="products">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="product" type="prodType" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

</xsd:schema> 
El esquema XML se registró inicialmente en el XSR utilizando los mandatos:
REGISTER XMLSCHEMA 'http://product'
FROM 'file://c:/schemas/prod.xsd'
AS STORE.PROD
COMPLETE XMLSCHEMA STORE.PROD
Después de registrar el esquema XML, las listas de productos con formato XML se validaron e insertaron en la base de datos de la tienda.
Jane decide que sería mejor si las listas contuvieran una descripción junto con el nombre, la unidad de mantenimiento de existencias (SKU) y el precio de cada producto. En lugar de crear un nuevo esquema XML y tener que volver a validar todos los documentos XML existentes en él, Jane preferiría actualizar el esquema XML original para acomodar las descripciones de producto añadidas. Es necesario añadir un nuevo elemento "description" en el esquema XML original:
<xsd:complexType name="prodType">
  <xsd:sequence>
    <xsd:element name="name" type="xsd:string" />
    <xsd:element name="sku" type="xsd:string" />
    <xsd:element name="price" type="xsd:integer" />
    <xsd:element name="description" type="xsd:string" minOccurs="0" />
  </xsd:sequence>
  <xsd:attribute name="color" type="xsd:string" />
  <xsd:attribute name="weight" type="xsd:integer" />
</xsd:complexType>
En el segmento del esquema XML a insertar, el atributo "minOccurs" " se establece en "0". Esto es importante, porque de lo contrario, "description" se convertiría en un elemento obligatorio como parte del modelo de contenido, y todos los documentos XML existentes que se validaron con respecto al esquema original y se insertaron en las tablas de base de datos dejarían de estar en un estado válido. Para evolucionar un esquema XML, la versión original y la nueva de dicho esquema deben ser compatibles. Para obtener detalles, consulte Requisitos de compatibilidad para la evolución de un esquema XML.
Para que la actualización pueda continuar, es necesario registrar el nuevo esquema XML en el XSR:
REGISTER XMLSCHEMA 'http://newproduct'
FROM 'file://c:/schemas/newprod.xsd'
AS STORE.NEWPROD
COMPLETE XMLSCHEMA STORE.NEWPROD
Jane ahora realiza la actualización utilizando el procedimiento almacenado XSR_UPDATE:
   CALL SYSPROC.XSR_UPDATE(
     'STORE',
     'PROD',
     'STORE',
     'NEWPROD',
     1)

El esquema XML original está evolucionado. Todas las dependencias externas gestionadas en los documentos de instancia XSR for XML que se han validado anteriormente en el esquema XML STORE.PROD se actualizan basándose en el contenido del esquema XML STORE.NEWPROD. Puesto que el parámetro dropnewschema se establece pasando un valor distinto de cero, el nuevo esquema STORE.NEWPROD se descarta después de actualizar el esquema original.

Los documentos XML existentes que ya se han validado con respecto al esquema XML original no se vuelven a validar como resultado del procedimiento de actualización. En su lugar, se realiza una comprobación durante la actualización para confirmar que los esquemas XML originales y nuevos son compatibles, por lo que se garantiza que los documentos validados anteriormente con respecto al esquema XML original también serán válidos con respecto al nuevo. En el ejemplo anterior, es necesario establecer el atributo "minOccurs" " en "0" en el nuevo elemento "description" para que los dos esquemas XML sean compatibles. Los documentos XML que se inserten después de la evolución del esquema se validarán con la versión recién actualizada de STORE.PROD, y estos documentos ahora pueden contener elementos "description" para cada producto de tienda.