Compartir vía


Modelos de contenido no determinista

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Los modelos de contenido no deterministas se aceptan en SQL Server si las restricciones de ocurrencia son 0, 1 o ilimitadas.

Antes de SQL Server 2005 (9.x) Service Pack 1 (SP1), SQL Server rechazaba los esquemas XML que tenían modelos de contenido no deterministas.

Ejemplo: modelo de contenido no determinista rechazado

En el siguiente ejemplo se intenta crear un esquema XML con un modelo de contenido no determinista. El código genera un error porque no está claro si el elemento <root> debería tener una secuencia de dos elementos <a> o si el elemento <root> debería tener dos secuencias, cada una de ellas con un elemento <a> .

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="1" maxOccurs="2">
                <element name="a" type="string" minOccurs="1" maxOccurs="2"/>
            </sequence>
        </complexType>
    </element>
</schema>
';
GO

El esquema se puede corregir moviendo la restricción de repetición a una ubicación única. Por ejemplo, la restricción se puede mover a la partícula de secuencia contenedora:

<sequence minOccurs="1" maxOccurs="4">
    <element name="a" type="string" minOccurs="1" maxOccurs="1"/>
</sequence>

O bien, la restricción se puede mover al elemento contenido:

<sequence minOccurs="1" maxOccurs="1">
     <element name="a" type="string" minOccurs="1" maxOccurs="4"/>
</sequence>

Ejemplo: modelo de contenido no determinista aceptado

El siguiente esquema se rechazaría en versiones de SQL Server anteriores a SQL Server 2005 (9.x) SP1.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="0" maxOccurs="unbounded">
                <element name="a" type="string" minOccurs="0" maxOccurs="1"/>
                <element name="b" type="string" minOccurs="1" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>
';
GO

Consulte también