ワイルドカード コンポーネントと内容検証

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

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

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

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

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

  • skip 値は、検証しない内容を指定します。

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

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

XML スキーマの仕様では、 anyType 型の要素には lax 検証が使用されています。 SQL Server 2005 (9.x) では緩やかな検証がサポートされていなかったため、anyType型の要素にも厳密な検証が適用されていました。 SQL Server 2008 (10.0.x) 以降では、緩やかな検証がサポートされています。 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

関連項目