ワイルドカード コンポーネントと内容検証
適用対象: SQL Server
Azure SQL データベース
Azure 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 検証を示しています。 スキーマ要素 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