ワイルドカード コンポーネントとコンテンツの検証

適用対象:SQL Server (サポートされているすべてのバージョン) Azure SQL Database

ワイルドカード コンポーネントは、コンテンツ モデルで使用できる表現の柔軟性を高めるために使用されます。 ワイルドカード コンポーネントは、次のように XSD 言語でサポートされています。

  • 要素ワイルドカード コンポーネント。 これらは <xsd:any> 要素で表現されます。

  • 属性ワイルドカード コンポーネント。 これらは <xsd:anyAttribute> 要素で表現されます。

ワイルドカード文字要素と<xsd:anyAttribute><xsd:any>属性の使用をprocessContentsサポートします。 この属性を使用して、ワイルドカード文字要素で関連付けられるドキュメントの内容の違反を、XML アプリケーションで検証する方法を示す値を指定できます。 検証方法を示す値には、次のようにそれぞれ異なる効果があります。

  • strict 値は、内容を完全に検証することを指定します。

  • skip 値は、内容が検証されていないことを指定します。

  • lax 値は、スキーマ定義が有効な要素と属性だけを検証することを指定します。

緩やかな検証と xs:anyType 要素

XML スキーマの仕様では、 anyType 型の要素には lax 検証が使用されています。 SQL Server 2005 (9.x) では緩やかな検証がサポートされていないため、anyType の要素に厳密な検証が適用されました。 SQL Server 2008からは lax 検証がサポートされるようになったため、 anyType 型の要素の内容は lax 検証を使用して検証されます。

次の例は、lax 検証を示しています。 スキーマ要素 eanyType 型です。 この例では、型指定された 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

こちらもご覧ください