萬用字元元件和內容驗證

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

萬用字元元件可用以增加可出現在內容模型中的內容彈性。 在 XSD 語言中,可透過下列方式支援這些元件:

  • 元素萬用字元元件。 這些是以 <xsd:any> 元素表示。

  • 屬性萬用字元元件。 這些是以 <xsd:anyAttribute> 元素表示。

兩個萬用字元元素 (<xsd:any><xsd:anyAttribute>) 都支援使用 processContents 屬性。 這可讓您指定一個值,以指出 XML 應用程式如何處理與這些萬用字元元素關聯的文件內容驗證。 以下是不同的值所產生的效果:

  • strict 值指定完整驗證內容。

  • skip 值指定不驗證內容。

  • lax 值指定只會驗證可以使用結構描述定義的元素與屬性。

Lax 驗證和 xs:anyType 元素

XML 結構描述規格會針對 anyType 類型的元素使用 lax 驗證。 因為 SQL Server 2005 (9.x) 不支援 Lax 驗證,因此會對 anyType 的元素套用 Strict 驗證。 從 SQL Server 2008 (10.0.x) 開始,支援 Lax 驗證。 anyType 類型的元素內容將會使用 Lax 驗證加以驗證。

下列範例說明 Lax 驗證。 e 結構描述元素的類型為 anyType 。 此範例會建立具類型的 xml 變數,並說明 anyType 類型元素的 Lax 驗證。

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

下列範例會成功,因為 <e> 的驗證是成功的:

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

下列範例將會成功。 即使此結構描述中未定義任何 <c> 元素,還是可接受此結構描述:

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

下列範例中的 XML 執行個體會遭到拒絕,因為 <a> 元素的定義不允許字串值。

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

另請參閱