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).
<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> REGISTER XMLSCHEMA 'http://product'
FROM 'file://c:/schemas/prod.xsd'
AS STORE.PRODCOMPLETE XMLSCHEMA STORE.PRODDespué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.<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.REGISTER XMLSCHEMA 'http://newproduct'
FROM 'file://c:/schemas/newprod.xsd'
AS STORE.NEWPRODCOMPLETE XMLSCHEMA STORE.NEWPROD 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.