Directrices y limitaciones del uso de colecciones de esquemas XML en el servidor

Actualizado: 14 de abril de 2006

La validación del lenguaje de definición de esquemas XML (XSD) tiene algunas limitaciones relativas a las columnas SQL que utilizan el tipo de datos SQL Server 2005 xml. En este tema se proporcionan detalles acerca de estas limitaciones y directrices para modificar el esquema XSD para que funcione con SQL Server. En la tabla siguiente se enumeran las limitaciones. En las secciones que aparecen después de la tabla se describe cada una de ellas con más detalle y se proporcionan instrucciones para utilizarlas.

Elemento Limitación

anyType

Las especificaciones XQuery recomiendan la validación lax para los elementos del tipo anyType. Puesto que SQL Server no admite la validación lax, se aplica la validación strict a los elementos anyType.

minOccurs y maxOccurs

SQL Server limita el tamaño de los valores de estos atributos.

sqltypes:datetime y sqltypes:smalldatetime

SQL Server no acepta los valores sqltypes:datetime o sql:smalldatetime.

<xsd:include>, <xsd:key>, <xsd:keyref>, <xsd:redefine> y <xsd:unique>

SQL Server no los admite.

<xsd:choice>

SQL Server rechaza los esquemas que tienen una partícula <xsd:choice> sin elementos secundarios, a menos que se defina la partícula con un valor del atributo minOccurs equivalente a cero.

Valores <xsd:simpleType>

SQL Server sólo admite una precisión de milisegundos para los tipos simples que tienen componentes de segundos y aplica limitaciones a todas las enumeraciones de tipo simple XSD reconocidas.

SQL Server no admite la utilización del valor "NaN" en declaraciones <xsd:simpleType>.

xsi:schemaLocation y xsi:noNamespaceSchemaLocation

SQL Server no tiene en cuenta estos atributos si están presentes en los datos de instancias XML insertados en una columna o variable del tipo de datos xml.

xs:QName

SQL Server no admite los tipos derivados de xs:QName que utilizan un elemento de restricción de esquema XML.

SQL Server no admite tipos de unión con xs:QName como elemento del miembro.

Agregar miembros a un grupo de sustitución existente

SQL Server no admite la adición de miembros a un grupo de sustitución existente en una colección de esquemas XML.

Formas canónicas

La representación canónica de un valor no puede infringir la restricción de patrón de su tipo.

Aspectos de enumeración

SQL Server no admite los esquemas XML con tipos que tienen aspectos de patrón o enumeraciones que infringen estos aspectos.

Longitud del aspecto

SQL Server limita la gama de valores aceptables para la longitud del aspecto.

Atributo de Id.

Los componentes del esquema XML pueden tener un atributo de Id., pero SQL Server no almacena estos valores.

Tipo de Id.

SQL Server no admite elementos de tipo xs:ID ni xs:IDREF.

Validación lax

SQL Server no admite la validación lax de esquemas cargados en SQL Server.

Tipos de lista y de unión

SQL Server no admite los tipos de lista que utilizan tipos de unión como elementos de lista.

Espacio de nombres local

SQL Server rechaza los esquemas que utilizan una cadena vacía ("") como valor para el atributo de espacio de nombres.

Contenido simple y de tipo mixto

SQL Server no admite la restricción de un tipo mixto a un contenido simple.

Tipo NOTATION

SQL Server no admite el tipo NOTATION.

Condiciones de memoria insuficiente

Cuando se trabaja con colecciones de esquemas XML de gran tamaño, puede que se produzca una condición de memoria insuficiente. Existen soluciones.

Valores repetidos

SQL Server rechaza los esquemas en los que el atributo de bloqueo o final tiene valores repetidos.

Identificadores de componentes de esquema

SQL Server limita los identificadores de los componentes de esquema a una longitud máxima de 1.000 caracteres Unicode. Tampoco se admiten los pares de caracteres complementarios en identificadores.

Información de zona horaria

La información de zona horaria se normaliza siempre en la hora universal coordinada (hora del meridiano de Greenwich).

Tipos de unión

SQL Server no admite las restricciones de tipos de unión.

Decimales de precisión variable

SQL Server no admite los decimales de precisión variable.

xsi:schemaLocation y xsi:noNamespaceSchemaLocation

SQL Server no tiene en cuenta los atributos siguientes si existen en los datos de instancias XML insertados en una columna o variable del tipo de datos xml:

  • xsi:schemaLocation
  • xsi:noNamespaceSchemaLocation

&lt;xsd:include&gt;

El elemento include de W3C (World-Wide Web Consortium) XSD proporciona compatibilidad con la modularidad de esquemas en la que un esquema XML se puede dividir en más de un archivo físico. Actualmente, SQL Server no admite este elemento. El servidor rechaza los esquemas XML que incluyen este elemento.

Para solucionar este problema, los esquemas XML que incluyen la directiva <xsd:include> se pueden procesar previamente para copiar y combinar el contenido de todos los esquemas incluidos en un solo esquema para cargarlo en el servidor. Para obtener más información, vea Herramienta de preprocesador para esquemas XML.

&lt;xsd:unique&gt;, &lt;xsd:key&gt; y &lt;xsd:keyref&gt;

Actualmente, SQL Server no admite las siguientes restricciones basadas en XSD para exigir la unicidad o establecer claves y referencias de claves:

  • <xsd:unique>
  • <xsd:key>
  • <xsd:keyref>

Los esquemas XML que contienen estos elementos no se pueden registrar.

Formas canónicas y restricciones de patrón

El aspecto de patrón XSD permite la restricción del espacio léxico de tipos simples. Cuando se aplica una restricción de patrón en un tipo para el cual existen varias representaciones léxicas posibles, algunos valores pueden provocar un comportamiento inesperado en el momento de la validación. Este comportamiento se produce porque las representaciones léxicas de estos valores no se almacenan en la base de datos. Por tanto, los valores se convierten en sus representaciones canónicas cuando se serializan como salida. Si un documento contiene un valor cuya forma canónica no cumple la restricción de patrón de su tipo, el documento se rechaza si un usuario intenta volver a insertarlo.

Para evitar este problema, SQL Server 2005 rechazará los documentos XML que contengan valores que no se pueden volver a insertar, puesto que sus formas canónicas infringen las restricciones de patrón. Por ejemplo, el valor "33.000" no se valida con un tipo derivado de xs:decimal con una restricción de patrón de "33\.0+". Aunque "33.000" cumple este patrón, la forma canónica, "33", no lo cumple.

Por ello, es preciso tener cuidado al aplicar aspectos de patrón a los tipos derivados de los tipos primitivos siguientes: boolean, decimal, float, double, dateTime, time, date, hexBinary y base64Binary. SQL Server muestra una advertencia si agrega alguno de esos componentes a una colección de esquemas.

La serialización imprecisa de valores de coma o punto flotante tiene un problema similar. Puesto que SQL Server 2005 utiliza un algoritmo de serialización de coma flotante, los valores similares pueden compartir la misma forma canónica. Cuando se serializa un valor de coma flotante y a continuación se vuelve a insertar, puede que su valor cambie ligeramente. En casos excepcionales, puede obtenerse un valor que infrinja alguno de los siguientes aspectos para este tipo en la reinserción: enumeration, minInclusive, minExclusive, maxInclusive o maxExclusive. Para evitarlo, SQL Server 2005 rechaza los valores de tipos derivados de xs:float o xs:double que no se pueden serializar y volver a insertar.

Caracteres comodín y validación del contenido

Los caracteres comodín se utilizan para aumentar la flexibilidad en lo que se permite que aparezca en un modelo de contenido. El lenguaje XSD admite estos caracteres de las formas siguientes:

  • Caracteres comodín de elemento. Se representan mediante el elemento <xsd:any>.
  • Caracteres comodín de atributo. Se representan mediante el elemento <xsd:anyAttribute>.

Ambos elementos de caracteres comodín, <xsd:any> y <xsd:anyAttribute>, admiten la utilización de un atributo processContents. Esto permite especificar un valor que indica el modo en que las aplicaciones XML controlan la validación del contenido de los documentos asociado a estos elementos de caracteres comodín. A continuación se exponen los distintos valores y su efecto:

  • El valor strict especifica que se valida totalmente el contenido.
  • El valor skip especifica que no se valida totalmente el contenido
  • El valor lax especifica que sólo se validan los elementos y atributos para los que hay disponibles definiciones de esquema.

Validación lax

No se admite la validación lax para los esquemas cargados en SQL Server. Por tanto, si se especifica el atributo processContents mediante elementos de caracteres comodín, se debe establecer en skip o strict. Si se especifica processContents="lax", el servidor rechaza el esquema.

A causa de este comportamiento, los elementos del tipo xsd:anyType se validarán sin procesamiento strict. Como resultado, sus elementos y atributos secundarios se deben definir en la colección de esquemas con la que se debe validar el documento de instancia.

Elementos anyType

Las especificaciones XQuery recomiendan la validación lax para los elementos del tipo anyType. Puesto que SQL Server no admite la validación lax, se aplica la validación strict a los elementos anyType.

El ejemplo siguiente ilustra la validación strict y crea una colección de esquemas XML. Uno de los elementos de esquema es del tipo anyType. A continuación, crea variables xml con tipo e ilustra la validación strict del elemento del tipo anyType.

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://ns">
   <element name="e" type="anyType"/>
   <element name="a" type="byte"/>
   <element name="b" type="string"/>
 </schema>'
GO

El ejemplo siguiente se realiza correctamente porque la validación strict de <e> es correcta:

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>'
GO

El ejemplo siguiente provoca un error. Se rechaza la instancia porque la validación strict del elemento <e> no encuentra el elemento <c> definido en el esquema:

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>'
GO

De nuevo, en el ejemplo siguiente se rechaza la instancia XML, puesto que no hay ninguna declaración para el elemento <c> en el espacio de nombres http://whatever. En otras palabras, el espacio de nombres no existe.

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c xmlns="http://whatever">Wrong</c><b>data</b></e>'
SELECT @var
GO

&lt;xsd:redefine&gt;

El elemento redefine de W3C XSD proporciona compatibilidad con la nueva definición de componentes de esquema. Sin embargo, la compatibilidad con esta directiva puede afectar al rendimiento y también requiere que SQL Server vuelva a validar todas las instancias del tipo de datos xml asociado al esquema que se ha vuelto a definir. Por consiguiente, SQL Server no admite este elemento. El servidor rechaza los esquemas XML que incluyen el elemento <xsd:redefine>.

Para actualizar un esquema o sus componentes, puede hacer, en su lugar, lo que se indica a continuación.

  1. Anule la asignación de tipo de todas las columnas de tipo de datos xml (XML DT) que utilicen la colección de esquemas.
  2. Quite la colección de esquemas XML existente del espacio de nombres afectado.
  3. Cree una nueva colección de esquemas XML para ese espacio de nombres con los componentes de esquema modificados.
  4. Vuelva a asignar un tipo a todas las columnas de las que se anuló la asignación de tipo en el paso 1 como XML DT mediante la nueva colección.

xs:QName

SQL Server no admite los tipos derivados de xs:QName que utilizan un elemento de restricción de esquema XML.

Actualmente, SQL Server no admite tipos de unión con QName como tipo de miembro. Las instrucciones CREATE XML SCHEMA COLLECTION siguientes no pueden cargar el esquema XML, ya que especifican el tipo xs:QName como tipo de miembro de la unión:

CREATE XML SCHEMA COLLECTION QNameLimitation1 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:int xs:QName"/>
    </xs:simpleType>
</xs:schema>'
GO

CREATE XML SCHEMA COLLECTION QNameLimitation2 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:integer">
   <xs:simpleType>
    <xs:list itemType="xs:QName"/>
   </xs:simpleType>
  </xs:union>
    </xs:simpleType>
</xs:schema>'
GO

Ambas instrucciones generan un mensaje de error.

Tipos de unión como elementos de lista

Actualmente, SQL Server no admite los esquemas que contienen tipos de lista con elementos de tipos de unión. En el esquema de ejemplo siguiente se ilustra un intento de hacer compatible el uso de un tipo de unión en un tipo de elemento de lista:

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <simpleType name="unionType">
      <union memberTypes="string byte"/>
   </simpleType>
   <simpleType name="listType">
      <list itemType="ns:unionType"/>
   </simpleType>
</schema>'
GO

El servidor rechaza el esquema con el error siguiente:

"Tipo de elemento no válido para el tipo de lista 'http://ns:listType'. El tipo de elemento de una lista no puede ser en sí una lista, y los tipos de unión y tipos derivados de ID no se pueden utilizar como tipos de elemento en esta versión."

Valores de &lt;xsd:simpleType&gt;

SQL Server sólo admite una precisión de milisegundos para los tipos simples que tienen componentes de segundos. Además, se rechazan en el servidor las instancias XML con valores dateTime que no contienen zonas horarias. En la tabla siguiente se presentan las restricciones que se aplican, en función de todas las enumeraciones de tipo simple XSD reconocidas.

Asimismo, SQL Server no admite el valor "NaN" en declaraciones <xsd:simpleType>. El servidor rechaza los esquemas que incluyen valores "NaN".

Tipo simple Limitación

duration

La parte del año se debe encontrar en el intervalo de -2^31 a 2^31-1. El mes, el día, la hora, el minuto y el segundo se deben encontrar en el intervalo de 0 a 9999. La parte de segundos tiene tres dígitos de precisión adicionales a la derecha del separador decimal.

dateTime

La parte de la hora del subcampo de la zona horaria se debe encontrar en el intervalo aceptado de -14 a +14. La parte del año se debe encontrar en el intervalo de -9999 a 9999. La parte del mes se debe encontrar en el intervalo de 1 a 12. La parte del día se debe encontrar en el intervalo de 1 a 31 y debe ser una fecha de calendario válida. Por ejemplo, SQL Server detecta y devuelve un error en el caso de una fecha no válida, como 1974-02-31, porque el mes de febrero no tiene 31 días.

date

La parte del año se debe encontrar en el intervalo de -9999 a 9999. La parte del mes se debe encontrar en el intervalo de 1 a 12. La parte del día se debe encontrar en el intervalo de 1 a 31 y debe ser una fecha de calendario válida. Por ejemplo, SQL Server detecta y devuelve un error en el caso de una fecha no válida, como 1974-02-31, porque el mes de febrero no tiene 31 días.

gYearMonth

La parte del año se debe encontrar en el intervalo de -9999 a 9999.

gYear

La parte del año se debe encontrar en el intervalo de -9999 a 9999.

gMonthDay

La parte del mes se debe encontrar en el intervalo de 1 a 12. La parte del día se debe encontrar en el intervalo de 1 a 31.

gDay

La parte del día se debe encontrar en el intervalo de 1 a 31.

gMonth

La parte del mes se debe encontrar en el intervalo de 1 a 12.

decimal

Los valores de este tipo deben cumplir el formato de tipo numérico de SQL. Este formato representa internamente la compatibilidad con los números de hasta 38 dígitos, diez de los cuales están reservados para la precisión en fracciones.

float

Los valores de este tipo deben cumplir el formato del tipo real de SQL.

double

Los valores de este tipo deben cumplir el formato del tipo float de SQL.

string

Los valores de este tipo deben cumplir el formato del tipo nvarchar(max) de SQL.

anyURI

Los valores de este tipo no pueden superar los 4.000 caracteres Unicode de longitud.

Decimales de precisión variable

El tipo xs:decimal representa los números decimales de precisión arbitraria. Los procesadores XML de conformidad mínima deben admitir los números decimales con un mínimo de totalDigits=18. SQL Server admite totalDigits=38, pero limita los dígitos decimales a 10. SQL Server no admite los decimales de precisión variable. El servidor representa internamente todos los valores con instancias xs:decimal mediante el tipo numeric (38, 10) de SQL.

Información de zona horaria

Para los tipos simples date, time y dateTime, la información de zona horaria se normaliza siempre en la hora universal coordinada, también conocida como hora del meridiano de Greenwich (GMT).

Por ejemplo, el esquema siguiente declara un elemento de tipo dateTime denominado <e>:

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <element name="e" type="dateTime"/>
</schema>'
GO

En el caso de los elementos de tipo dateTime, el servidor convierte la hora especificada a la hora GMT mediante el valor de desplazamiento ("-05:00") y devuelve la hora GMT correspondiente.

DECLARE @var XML(MySampleCollection)
SET @var = '<e xmlns="http://ns">1999-05-31T13:20:00-05:00</e>'
SELECT @var
-- time zone is specified. Value is converted to Zulu before being stored
-- will come back as <e xmlns="http://ns">1999-05-31T18:20:00Z</e>
GO

Longitud del aspecto

Los aspectos length, minLength y maxLength se almacenan como tipo long. Este tipo es de 32 bits. Por tanto, el intervalo de valores aceptables para estos valores es 2^31.

minOccurs y maxOccurs

Los valores de los atributos minOccurs y maxOccurs deben caber en enteros de 4 bytes. El servidor rechazará los esquemas que no cumplan esta restricción.

Identificadores de componentes de esquema

SQL Server limita los identificadores de los componentes de esquema a una longitud máxima de 1.000 caracteres Unicode y rechaza los esquemas con identificadores que superen la longitud máxima. Tampoco se admiten los pares de caracteres complementarios en identificadores.

Aspectos de enumeración

SQL Server rechaza los esquemas XML con tipos que tienen aspectos de patrón o enumeraciones que infringen estos aspectos. Por ejemplo, el esquema siguiente se verá rechazado porque su valor de enumeración incluye un valor con mayúsculas y minúsculas mezcladas. También se rechazará porque infringe el valor de patrón que limita los valores únicamente a letras minúsculas.

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
    <simpleType name="MyST">
       <restriction base="string">
          <pattern value="[a-z]*"/>
       </restriction>
    </simpleType>

    <simpleType name="MyST2">
       <restriction base="ns:MyST">
           <enumeration value="mYstring"/>
       </restriction>
    </simpleType>
</schema>'
GO

&lt;xsd:choice&gt;

SQL Server rechaza los esquemas que tienen una partícula <xsd:choice> sin elementos secundarios, a menos que se defina la partícula con un valor del atributo minOccurs equivalente a cero.

Valores repetidos en atributos Final o Block

El atributo block permite bloquear las sustituciones de tipos y elementos de la instancia. El atributo final impide la derivación de otros tipos complejos a partir de un tipo.

SQL Server rechaza los esquemas en los que el atributo block o final tiene valores repetidos como "restriction restriction" y "extension extension".

Espacio de nombres local

El espacio de nombres local se debe especificar de forma explícita para el elemento <xsd:any>. SQL Server rechaza los esquemas que utilizan una cadena vacía ("") como valor para el atributo de espacio de nombres. En su lugar, SQL Server requiere la utilización explícita de "##local" para indicar un elemento o atributo no calificado como instancia del carácter comodín.

Atributo de Id.

Cada componente de esquema XML puede incluir un atributo de Id. SQL Server exige la unicidad de las declaraciones <xsd:attribute> de tipo ID, pero no almacena estos valores. El ámbito de aplicación de la unicidad es la instrucción {CREATE | ALTER} XML SCHEMA COLLECTION.

Tipo de Id.

SQL Server no admite elementos de tipo xs:ID, xs:IDREF ni xs:IDREFS. Un esquema no puede declarar elementos de este tipo, ni elementos derivados de este tipo por restricción o extensión.

Tipo NOTATION

Actualmente, SQL Server no admite el tipo NOTATION. El servidor rechaza los esquemas que incluyen definiciones de notaciones.

Contenido simple y de tipo mixto

En la colección de esquemas XML siguiente, myComplexTypeA es un tipo complejo que se puede vaciar. Es decir, todos sus elementos tienen minOccurs establecido en 0. No se admite la restricción de este valor a un contenido simple como el de la declaración myComplexTypeB. La creación de la colección de esquemas XML siguiente provoca un error:

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns"
xmlns:ns1="http://ns1">

    <complexType name="myComplexTypeA" mixed="true">
        <sequence>
            <element name="a" type="string" minOccurs="0"/>
            <element name="b" type="string" minOccurs="0" maxOccurs="23"/>
        </sequence>
    </complexType>


    <complexType name="myComplexTypeB">
        <simpleContent>
            <restriction base="ns:myComplexTypeA">
                <simpleType>
                    <restriction base="int">
                        <minExclusive value="25"/>
                    </restriction>
                </simpleType>
            </restriction>
        </simpleContent>
    </complexType>
</schema>
'
GO

sqltypes:datetime y sqltypes:smalldatetime

En SQL Server 2005, todos los tipos derivados de xs:date, xs:time y xs:dateTime deben tener zonas horarias. Sqltypes:datetime y sqltypes:smalldatetime son dos de estos tipos. Sin embargo, los tipos datetime y smalldatetime de SQL no tienen zonas horarias. Esto se debe a que los aspectos de patrón de sqltypes:datetime y sqltypes:smalldatetime no permiten zonas horarias. Como resultado, SQL Server no acepta los valores sqltypes:datetime o sql:smalldatetime.

Aunque se puede hacer referencia a sqltypes:datetime y sqltypes:smalldatetime en esquemas definidos por el usuario, no se pueden validar documentos XML que contengan valores de estos tipos. Esta acción los dejará inutilizables. En el ejemplo siguiente, la colección de esquemas XML define un elemento <c> de tipo sqltypes.datetime:

CREATE XML SCHEMA COLLECTION SC_datetime AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="myNS"
xmlns:ns="myNS"
xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"
>       <import namespace="http://www.w3.org/XML/1998/namespace"/>
      <import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/>
       <element name="root">
            <complexType>
                  <sequence>
                        <element name="c" type="s:datetime"/>
                  </sequence>
            </complexType>
      </element>
</schema>'
GO

La asignación siguiente produce un error:

DECLARE @var xml(SC_datetime)
SET @var = '<x:root xmlns:x="myNS"><c>1953-01-01T00:00:00.000</c></x:root>'
GO

Agregar miembros a un grupo de sustitución existente

No puede agregar miembros a un grupo de sustitución existente en una colección de esquemas XML. Un grupo de sustitución de un esquema XML está restringido en el sentido de que el elemento de encabezado y todos sus elementos miembros se deben definir en la misma instrucción {CREATE | ALTER} XML SCHEMA COLLECTION. Por ejemplo, puede hacer lo siguiente:

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="e1"/>
    <xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'

No obstante, no se puede hacer lo siguiente cuando se define el elemento de encabezado e1 en una instrucción CREATE XML SCHEMA COLLECTION y se define el miembro de sustitución e2 en otra instrucción ALTER XML SCHEMA COLLECTION:

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
</xs:schema>'
GO

ALTER XML SCHEMA COLLECTION col add N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="e2" substitutionGroup="e1"/>

</xs:schema>'
GO

Tipos de unión

No se admiten restricciones en tipos de unión. Por ejemplo, la siguiente instrucción CREATE XML SCHEMA COLLECTION produce un error:

CREATE XML SCHEMA COLLECTION particlesIk026valid AS N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xsdtesting" xmlns:x="http://xsdtesting" elementFormDefault="qualified">
    <xsd:simpleType name="U1">
        <xsd:union>
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer" />
            </xsd:simpleType>
            <xsd:simpleType>
                <xsd:restriction base="xsd:string" />
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>
    <xsd:simpleType name="U2">
        <xsd:restriction base="x:U1" />
    </xsd:simpleType>
    <xsd:complexType name="B">
        <xsd:choice>
            <xsd:element name="c1" type="x:U1" />
            <xsd:element name="c2" />
        </xsd:choice>
    </xsd:complexType>
    <xsd:complexType name="R">
        <xsd:complexContent>
            <xsd:restriction base="x:B">
                <xsd:choice>
                    <xsd:element name="c1" type="x:U2" />
                    <xsd:element name="c2" />
                </xsd:choice>
            </xsd:restriction>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:element name="doc">
        <xsd:complexType>
            <xsd:choice>
                <xsd:element name="elem" type="x:R" />
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>'

Colecciones de esquemas XML de gran tamaño y condiciones de memoria insuficiente

Se puede producir una condición de memoria insuficiente durante una llamada a la función XML_SCHEMA_NAMESPACE() integrada de una colección de esquemas XML de gran tamaño o cuando intenta quitar colecciones de esquemas XML de gran tamaño. A continuación se exponen las soluciones que se pueden aplicar en estos casos:

  • Cuando la carga del sistema no es muy importante, utilice el comando DROP_XML_SCHEMA_COLLECTION. Si no funciona correctamente, ponga la base de datos en modo de usuario único mediante la instrucción ALTER DATABASE y vuelva a probar DROP XML SCHEMA COLLECTION. Si la colección de esquemas XML existe en master, model o tempdb, se deberá reiniciar el servidor para el modo de un usuario único.
  • Cuando llame a XML_SCHEMA_NAMESPACE, puede intentar recuperar un solo espacio de nombres XML, intentar realizar la llamada cuando la carga del sistema es menos importante o realizarla en modo de usuario único.

Modelos de contenido no deterministas

SQL Server rechaza los esquemas XML que tienen un modelo de contenido no determinista.

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>

Comportamiento del Service Pack 1 de SQL Server 2005

Se aceptan modelos de contenido no deterministas si las restricciones de repetición son 0,1 o sin delimitar.

El ejemplo siguiente se rechaza en SQL Server 2005, pero se acepta en un servidor en el que se ejecuta el SP1 de SQL Server.

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

Vea también

Referencia

Directrices y limitaciones del uso de colecciones de esquemas XML en el servidor
Permisos en una colección de esquemas XML
Administrar colecciones de esquemas XML en el servidor

Conceptos

Tipo de datos xml
XML con tipo y sin tipo
Descripción de la restricción de atribución de partículas exclusivas

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido nuevo:
  • Se agregó una sección en la que se describe cómo se tratan los modelos de contenido no deterministas en el SP1.