Componentes curinga e validação de conteúdo

Componentes curinga são usados para aumentar a flexibilidade do que é permitido aparecer em um modelo de conteúdo. Esses componentes têm suporte na linguagem XSD das seguintes maneiras:

  • Componentes curinga de elemento. Esses são representados pelo elemento <xsd:any>.

  • Componentes curinga de atributo. Esses são representados pelo elemento <xsd:anyAttribute>.

Os elementos de caractere curinga, <xsd:any> e <xsd:anyAttribute>, oferecem suporte ao uso de um atributo processContents. Isso permite especificar um valor que indica como aplicativos XML tratam a validação do conteúdo do documento associado a esses elementos de caracteres curinga. Estes são os diferentes valores e seus efeitos:

  • O valor sctrict especifica que o conteúdo é completamente validado.

  • O valor skip especifica que o conteúdo não é validado.

  • O valor lax especifica que apenas elementos e atributos para os quais definições de esquema estão disponíveis são validados.

Validação incerta e elementos xs:anyType

A especificação do Esquema XML usa validação lax para elementos do tipo anyType. Como o SQL Server 2005 não oferece suporte à validação incerta, validação estrita foi aplicada para elementos do anyType. A partir do SQL Server 2008, há suporte para a validação incerta. Conteúdo de elementos de tipo anyType serão validados usando validação incerta.

O exemplo a seguir ilustra a validação incerta. O elemento do esquema e é do tipo anyType. O exemplo cria variáveis xml com tipo e ilustra a validação incerta do elemento do 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

O exemplo a seguir tem êxito, porque a validação de <e> tem êxito:

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

O seguinte exemplo tem êxito. A instância é aceita, embora nenhum elemento <c> esteja definido no esquema:

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

A instância XML no exemplo a seguir é rejeitada, porque a definição do elemento <a> não permite um valor de cadeia de caracteres.

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