サーバーで XML スキーマ コレクションを使用する際のガイドラインと制限事項
更新 : 2006 年 4 月 14 日
XSD (XML Schema Definition Language) の検証には、SQL Server 2005 xml データ型を使用する SQL 列に関して制限事項がいくつかあります。このトピックでは、このような制限事項に関する詳細と、SQL Server で機能するように XSD スキーマを変更するためのガイドラインについて説明します。次の表は、制限事項を示しています。この表に続いて、各項目の詳しい説明と、それらを処理するためのガイダンスを示します。
項目 | 制限事項 |
---|---|
anyType |
XQuery の仕様では、anyType 型の要素には lax 検証を推奨しています。SQL Server では lax 検証をサポートしていないので、anyType 型の要素にも strict 検証が適用されます。 |
minOccurs と maxOccurs |
SQL Server では、この 2 つの属性の値のサイズを制限しています。 |
sqltypes:datetime と sqltypes:smalldatetime |
SQL Server では、sqltypes:datetime 値と sql:smalldatetime 値を受け入れません。 |
<xsd:include>、<xsd:key>、<xsd:keyref>、<xsd:redefine>、<xsd:unique> |
SQL Server ではサポートしません。 |
<xsd:choice> |
SQL Server では、minOccurs 属性値に 0 を指定してパーティクルを定義していない限り、子のない <xsd:choice> パーティクルを含むスキーマは拒否します。 |
<xsd:simpleType> 値 |
SQL Server では、秒部分を含む単純型は、ミリ秒単位の精度までサポートされます。また、認識されるすべての XSD 単純型の列挙にこの制限を適用します。 SQL Server では、<xsd:simpleType> 宣言での "NaN" 値の使用はサポートしません。 |
xsi:schemaLocation と xsi:noNamespaceSchemaLocation |
xml データ型の列や変数に挿入された XML インスタンス データにこれらの属性が含まれている場合、SQL Server ではこれらの属性が無視されます。 |
xs:QName |
SQL Server では、XML スキーマ制約要素を使用している xs:QName から派生した型はサポートしません。 SQL Server では、メンバ要素に xs:QName を指定した共用体型はサポートしません。 |
既存の置換グループへのメンバの追加 |
SQL Server では、XML スキーマ コレクション内の既存の置換グループへのメンバの追加はサポートしません。 |
正規の形式 |
値の正規表現は、その値の型のパターン制限に従う必要があります。 |
列挙ファセット |
SQL Server では、ファセットに違反するパターン ファセットや列挙を含む型を使用した XML スキーマはサポートしません。 |
ファセット長 |
SQL Server では、ファセット長の許容範囲値を制限します。 |
ID 属性 |
XML スキーマ コンポーネントには ID 属性を含めることができますが、SQL Server ではそれらの値を格納しません。 |
ID 型 |
SQL Server では、xs:ID 型と xs:IDREF 型の要素はサポートしません。 |
lax 検証 |
SQL Server では、SQL Server にアップロードされたスキーマに対して、lax 検証をサポートしません。 |
リスト型と共用体型 |
SQL Server では、リスト項目として共用体型を使用するリスト型はサポートしません。 |
ローカル名前空間 |
SQL Server では、名前空間属性の値に空文字列 ("") を使用するスキーマを拒否します。 |
混合型と単純コンテンツ |
SQL Server では、混合型を単純コンテンツに制限することはできません。 |
NOTATION 型 |
SQL Server では、NOTATION 型をサポートしません。 |
メモリ不足状態 |
大きな XML スキーマ コレクションの操作では、メモリが不足することがあります。ただし、解決策が提供されています。 |
繰り返される値 |
SQL Server では、block 属性または final 属性として繰り返し値を持つスキーマは拒否します。 |
スキーマ コンポーネントの識別子 |
SQL Server では、スキーマ コンポーネントの識別子の最大長を Unicode 文字 1,000 文字に制限します。また、識別子に補助文字のペアを使用することはできません。 |
タイム ゾーン情報 |
タイム ゾーン情報は、常に協定世界時 (グリニッジ標準時) を基準として標準化されます。 |
共用体型 |
SQL Server では、共用体型からの制限はサポートしません。 |
可変精度の 10 進数 |
SQL Server では、有効桁数が可変の 10 進数はサポートしません。 |
xsi:schemaLocation と xsi:noNamespaceSchemaLocation
xml データ型の列や変数に挿入される XML インスタンスのデータ内に次の属性が存在しても、SQL Server ではそれらを無視します。
- xsi:schemaLocation
- xsi:noNamespaceSchemaLocation
<xsd:include>
W3C (World-Wide Web Consortium) XSD の include 要素では、スキーマのモジュール性がサポートされます。そのため、1 つの XML スキーマを複数の物理ファイルにパーティション分割できます。現状では、SQL Server ではこの要素をサポートしません。この要素を含む XML スキーマはサーバーによって拒否されます。
解決方法として、<xsd:include> ディレクティブを含む XML スキーマに前処理を行い、インクルードされるすべてのスキーマの内容をコピーおよびマージして 1 つのスキーマにすることで、サーバーにアップロードできます。詳細については、「XML スキーマのプリプロセッサ ツール」を参照してください。
<xsd:unique>、<xsd:key>、<xsd:keyref>
現在、SQL Server では、一意性の強制またはキーやキー参照の確立のために、XSD ベースの次の制約は使用できません。
- <xsd:unique>
- <xsd:key>
- <xsd:keyref>
これらの要素を含む XML スキーマは登録できません。
正規の形式とパターン制限
XSD パターン ファセットを使用すると、単純型の字句空間を制限できます。複数の字句表現が可能であるような型にパターン制限を適用すると、一部の値が原因で検証時に予想外の動作が発生することがあります。このような動作は、その値の字句表現がデータベースに格納されていないために発生します。したがって、このような値は、出力としてシリアル化される際に、それぞれの正規表現に変換されます。ドキュメントに含まれる値の正規の形式が型のパターン制限に準拠していない場合に、ユーザーがそのドキュメントの再挿入を試みると、そのドキュメントは拒否されます。
SQL Server 2005 ではこれを回避するために、再挿入できない値を含む XML ドキュメントはすべて、正規の形式がパターン制限に違反しているという理由で拒否します。たとえば、値 "33.000" は、"33\.0+" というパターン制限が指定されている xs:decimal からの派生型に対して有効であると判断されません。"33.000" はこのパターンに準拠していますが、正規の形式である "33" がパターンに違反しているためです。
したがって、プリミティブ型の boolean、decimal、float、double、dateTime、time、date、hexBinary、および base64Binary から派生した型にパターン ファセットを適用する場合は注意が必要です。スキーマ コレクションのコンポーネントなどを追加するときに、SQL Server から警告が発行されます。
浮動小数点値の不正確なシリアル化にも同様の問題があります。SQL Server 2005 で使用されている浮動小数点のシリアル化アルゴリズムにより、近い値が同じ正規表現になることがあり得ます。ただし、浮動小数点値がシリアル化され、再挿入される際に、その値がわずかに変化することがあります。その結果、再挿入時にその型の enumeration、minInclusive、minExclusive、maxInclusive、または maxExclusive の各ファセットに違反する値になることがまれにあります。SQL Server 2005 ではこれを回避するために、シリアル化や再挿入を行えない xs:float
または xs:double
から派生した値を拒否します。
ワイルドカード文字と内容検証
ワイルドカード文字は、コンテンツ モデルで使用できる表現の柔軟性を高めるために使用されます。ワイルドカード文字は、次のように XSD 言語でサポートされています。
- 要素ワイルドカード文字。これらは <xsd:any> 要素で表現されます。
- 属性ワイルドカード文字。これらは <xsd:anyAttribute> 要素で表現されます。
両方のワイルドカード文字要素 (<xsd:any> および <xsd:anyAttribute>) で processContents 属性を使用できます。この属性を使用して、ワイルドカード文字要素で関連付けられるドキュメントの内容の違反を、XML アプリケーションで検証する方法を示す値を指定できます。検証方法を示す値には、次のようにそれぞれ異なる効果があります。
- strict 値は、内容を完全に検証することを指定します。
- skip 値は、内容を検証しないことを指定します。
- lax 値は、スキーマ定義が有効な要素と属性だけを検証することを指定します。
lax 検証
SQL Server にアップロードされたスキーマに対しては、lax 検証をサポートしません。したがって、ワイルドカード文字要素を使用して processContents 属性を指定する場合、この属性を skip または strict に設定する必要があります。processContents="lax" が指定されていると、そのスキーマはサーバーで拒否されます。
このような動作が理由で、xsd:anyType として型指定されている要素には strict 検証が適用されます。結果として、インスタンス ドキュメントの検証を行う対象であるスキーマ コレクションに、xsd:anyType 型の要素の子要素および属性を定義しておく必要が生じます。
anyType 要素
XQuery の仕様では、anyType 型の要素については lax 検証を推奨しています。SQL Server では lax 検証をサポートしていないので、anyType 型の要素にも strict 検証が適用されます。
次の例では、strict 検証を示し、XML スキーマ コレクションを作成します。スキーマ要素の 1 つが anyType
型です。さらに、型指定された xml 変数を作成し、anyType 型の要素の strict 検証について示します。
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>
の strict 検証が成功するので、次の例は成功します。
DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>'
GO
次の例は失敗します。要素 <e>
の strict 検証はスキーマで定義されている要素 <c>
を検出できないので、インスタンスが拒否されます。
DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>'
GO
また、次の例の XML インスタンスも拒否されます。これは、名前空間 http://whatever
に要素 <c>
の宣言が存在しないためです。つまり、名前空間が存在しないと見なされたためです。
DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c xmlns="http://whatever">Wrong</c><b>data</b></e>'
SELECT @var
GO
<xsd:redefine>
W3C XSD の redefine 要素は、スキーマ コンポーネントの再定義をサポートします。ただし、このディレクティブに対するサポートはパフォーマンスの割に高コストになる可能性があるうえ、再定義したスキーマに関連付けられた xml データ型のインスタンスはすべて SQL Server で再検証する必要があります。このため、SQL Server ではこれらの要素をサポートしません。<xsd:redefine> 要素を含む XML スキーマはサーバーに拒否されます。
スキーマまたはスキーマ コンポーネントを更新するには、代わりに次の方法を使用できます。
- スキーマ コレクションを使用して xml データ型 (XML DT) 列の型指定を解除します。
- 影響を受ける名前空間の既存のスキーマ コレクションを削除します。
- 変更されたスキーマ コンポーネントを使用してその名前空間に対応する新しい XML スキーマ コレクションを作成します。
- 手順 1. で型指定を解除したすべての列について、新しいコレクションを使用して再度 XML DT として型指定を行います。
xs:QName
SQL Server では、XML スキーマ制約要素を使用する xs:QName から派生した型はサポートしません。
現在、SQL Server では、メンバ型に QName を指定した共用体型をサポートしません。次の CREATE XML SCHEMA COLLECTION
ステートメントでは、共用体のメンバ型に xs:QName
型を指定しているため、XML スキーマを読み込めません。
CREATE XML SCHEMA COLLECTION QNameLimitation1 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="myUnion">
<xs:union memberTypes="xs:int xs:QName"/>
</xs:simpleType>
</xs:schema>'
GO
CREATE XML SCHEMA COLLECTION QNameLimitation2 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="myUnion">
<xs:union memberTypes="xs:integer">
<xs:simpleType>
<xs:list itemType="xs:QName"/>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:schema>'
GO
これらのステートメントはどちらも、エラーが発生して失敗します。
リスト項目としての共用体型
現在、SQL Server では、共用体型アイテムのあるリスト型を含むスキーマをサポートしません。次の例のスキーマでは、リスト アイテムの型の中で共用体型の使用を試みます。
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
<simpleType name="unionType">
<union memberTypes="string byte"/>
</simpleType>
<simpleType name="listType">
<list itemType="ns:unionType"/>
</simpleType>
</schema>'
GO
このスキーマはサーバーで拒否され、次のエラーが表示されます。
"リスト型 'http://ns:listType' の項目の型が無効です。リスト項目の型自体をリストにすることはできません。また、union 型および ID から派生した型は、このリリースでは項目型として使用されない場合があります。"
<xsd:simpleType> の値
SQL Server では、秒部分のある単純型は、ミリ秒単位の精度までサポートされます。さらに、タイム ゾーンを含まない dateTime 値を持つ XML インスタンスはサーバーで拒否されます。次の表に、認識されるすべての XSD 単純型を列挙して、適用される制限の概要を示します。
また、SQL Server では、<xsd:simpleType> 宣言で "NaN" 値をサポートしません。"NaN" 値を含むスキーマはサーバーで拒否されます。
単純型 | 制限事項 |
---|---|
duration |
年部分は -2^31 ~ 2^31-1 の範囲で指定する必要があります。月、日、時、分、秒は、いずれも 0 ~ 9999 の範囲で指定する必要があります。秒部分の小数点以下桁数は 3 桁まで指定できます。 |
dateTime |
タイム ゾーンのサブフィールド内の時間部分は、-14 ~ 14 の範囲で指定する必要があります。年部分は -9999 ~ 9999 の範囲で指定する必要があります。月部分は 1 ~ 12 の範囲で指定する必要があります。日部分は 1 ~ 31 の範囲で指定し、さらにカレンダーの日付として有効な値である必要があります。たとえば、1974-02-31 を指定した場合、2 月には 31 日までないので、SQL Server では無効な日付として検出され、エラーを返します。 |
date |
年部分は -9999 ~ 9999 の範囲で指定する必要があります。月部分は 1 ~ 12 の範囲で指定する必要があります。日部分は 1 ~ 31 の範囲で指定し、さらにカレンダーの日付として有効な値である必要があります。たとえば、1974-02-31 を指定した場合、2 月には 31 日までないので、SQL Server では無効な日付として検出され、エラーを返します。 |
gYearMonth |
年部分は -9999 ~ 9999 の範囲で指定する必要があります。 |
gYear |
年部分は -9999 ~ 9999 の範囲で指定する必要があります。 |
gMonthDay |
月部分は 1 ~ 12 の範囲で指定する必要があります。日部分は 1 ~ 31 の範囲で指定する必要があります。 |
gDay |
日部分は 1 ~ 31 の範囲で指定する必要があります。 |
gMonth |
月部分は 1 ~ 12 の範囲で指定する必要があります。 |
decimal |
この型の値は SQL 数値型の形式に従っている必要があります。この形式では、内部的には合計 38 桁までの数値が表現されます。そのうち 10 桁は、小数部分の有効桁数として予約されています。 |
float |
この型の値は、SQL real 型の形式に準拠している必要があります。 |
double |
この型の値は、SQL float 型の形式に準拠している必要があります。 |
string |
この型の値は、SQL nvarchar(max) 型の形式に準拠している必要があります。 |
anyURI |
この型の値の長さは Unicode 文字 4,000 文字が上限です。 |
可変精度の 10 進数
xs:decimal 型は任意の有効桁数の 10 進数を表します。XML プロセッサに準拠するには、最低でも totalDigits=18
以上の 10 進数をサポートする必要があります。SQL Server では、totalDigits=38,
をサポートしますが、小数部は最大 10 桁です。SQL Server では、有効桁数が可変の 10 進数はサポートしません。インスタンス化されたすべての xs:decimal 値は、サーバーでは SQL 型数値 (38, 10) を使用して内部的に表現されます。
タイム ゾーン情報
単純型の date、time、および dateTime の場合は、タイム ゾーン情報は常にグリニッジ標準時 (GMT) とも呼ばれる協定世界時を基準として標準化されます。
たとえば、次のスキーマでは <e>
という名前の dateTime 型の要素を宣言しています。
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
<element name="e" type="dateTime"/>
</schema>'
GO
dateTime 型の要素の場合は、サーバー側でオフセット値 ("-05:00") を使用して対応する GMT 時を返すことによって、指定された時間を GMT に変換します。
DECLARE @var XML(MySampleCollection)
SET @var = '<e xmlns="http://ns">1999-05-31T13:20:00-05:00</e>'
SELECT @var
-- time zone is specified. Value is converted to Zulu before being stored
-- will come back as <e xmlns="http://ns">1999-05-31T18:20:00Z</e>
GO
ファセット長
length ファセット、minLength ファセット、および maxLength ファセットは long 型で格納されます。この型は 32 ビット型です。したがって、これらの値の許容範囲は 2^31 です。
minOccurs と maxOccurs
minOccurs 属性と maxOccurs 属性の値は、4 バイトの整数に収める必要があります。これに違反するスキーマはサーバーで拒否されます。
スキーマ コンポーネントの識別子
SQL Server では、スキーマ コンポーネントの識別子の長さは Unicode 文字 1,000 文字が上限なので、この最大長を超える識別子は拒否します。また、識別子に補助文字のペアを使用することはできません。
列挙ファセット
SQL Server では、ファセットに違反するパターン ファセットや列挙を含む型を使用する XML スキーマを拒否します。たとえば、次のスキーマで示す列挙値には大文字と小文字が混在する値が使用されているので、このスキーマは拒否されます。また、この値はパターン値 (小文字のみに制限) に違反しているという理由からも拒否されます。
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
<simpleType name="MyST">
<restriction base="string">
<pattern value="[a-z]*"/>
</restriction>
</simpleType>
<simpleType name="MyST2">
<restriction base="ns:MyST">
<enumeration value="mYstring"/>
</restriction>
</simpleType>
</schema>'
GO
<xsd:choice>
SQL Server では、minOccurs 属性値に 0 を指定してパーティクルを定義していない限り、子のない <xsd:choice> パーティクルを持つスキーマは拒否します。
final 属性と block 属性内で繰り返される値
block 属性を使用すると、型や要素がインスタンスから置換されるのを防ぐことができます。final 属性を使用すると、特定の型から他の複合型が派生するのを防ぐことができます。
SQL Server では、block 属性または final 属性で "restriction restriction" や "extension extension" のように値を繰り返すスキーマは拒否します。
ローカル名前空間
<xsd:any> 要素では、ローカル名前空間を明示的に指定する必要があります。SQL Server では、名前空間属性の値に空文字列 ("") を使用するスキーマを拒否します。代わりに、SQL Server では "##local" を明示的に使用して、修飾されない要素や属性をワイルドカード文字によるインスタンスとして示す必要があります。
ID 属性
XML スキーマ コンポーネントは、それぞれ ID 属性を 1 つ含むことができます。SQL Server では、ID 型の <xsd:attribute> 宣言に一意性を適用しますが、これらの値を格納しません。一意性のスコープは、CREATE XML SCHEMA COLLECTION ステートメントまたは ALTER XML SCHEMA COLLECTION ステートメントで適用します。
ID 型
SQL Server では、xs:ID 型、xs:IDREF 型、または xs:IDREFS 型の要素はサポートしません。スキーマではこの型の要素、またはこの型の制限または拡張によって派生した要素を宣言できません。
NOTATION 型
現在、SQL Server では NOTATION 型をサポートしません。表記法の定義を含むスキーマはサーバーで拒否されます。
混合型と単純コンテンツ
次の XML スキーマ コレクションでは、myComplexTypeA
は空にできる複合型です。つまり、その要素はどちらも、minOccurs
が 0 に設定されています。この複合型を、myComplexTypeB
の宣言で行った方法で単純コンテンツに制限することはできません。次の XML スキーマ コレクションの作成は失敗します。
CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns"
xmlns:ns1="http://ns1">
<complexType name="myComplexTypeA" mixed="true">
<sequence>
<element name="a" type="string" minOccurs="0"/>
<element name="b" type="string" minOccurs="0" maxOccurs="23"/>
</sequence>
</complexType>
<complexType name="myComplexTypeB">
<simpleContent>
<restriction base="ns:myComplexTypeA">
<simpleType>
<restriction base="int">
<minExclusive value="25"/>
</restriction>
</simpleType>
</restriction>
</simpleContent>
</complexType>
</schema>
'
GO
sqltypes:datetime と sqltypes:smalldatetime
SQL Server 2005 では、xs:date、xs:time、および xs:dateTime から派生したすべての型にはタイム ゾーンが必要です。Sqltypes:datetime と sqltypes:smalldatetime もそれらの派生型です。ただし、SQL の datetime 型と SQL smalldatetime 型にはタイム ゾーンがありません。これは、sqltypes:datetime と sqltypes:smalldatetime のパターン ファセットでタイム ゾーンが許可されないためです。その結果、SQL Server では sqltypes:datetime と sql:smalldatetime の値を受け入れません。
sqltypes:datetime と sqltypes:smalldatetime をユーザー定義のスキーマで参照することはできますが、これらの型の値を含んだ XML ドキュメントを検証することはできません。そのため、sqltypes:datetime と sqltypes:smalldatetime は使用できません。次の例では、XML スキーマ コレクションで sqltypes.datetime
の要素 <c>
を定義します。
CREATE XML SCHEMA COLLECTION SC_datetime AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="myNS"
xmlns:ns="myNS"
xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"
>
<import namespace="http://www.w3.org/XML/1998/namespace"/>
<import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/>
<element name="root">
<complexType>
<sequence>
<element name="c" type="s:datetime"/>
</sequence>
</complexType>
</element>
</schema>'
GO
次の代入は失敗します。
DECLARE @var xml(SC_datetime)
SET @var = '<x:root xmlns:x="myNS"><c>1953-01-01T00:00:00.000</c></x:root>'
GO
既存の置換グループへのメンバの追加
XML スキーマ コレクション内の既存の置換グループにメンバを追加することはできません。XML スキーマの置換グループは先頭要素のみで使用するように制限されているので、同じ CREATE XML SCHEMA COLLECTION ステートメントまたは ALTER XML SCHEMA COLLECTION ステートメントで置換グループのすべてのメンバを定義する必要があります。たとえば、次のようにはできます。
CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
<xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'
ただし、次に示すように、先頭要素 e1
をある CREATE XML SCHEMA COLLECTION
ステートメントで定義し、置換グループのメンバ e2
を別の ALTER XML SCHEMA COLLECTION
ステートメントで定義することはできません。
CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
</xs:schema>'
GO
ALTER XML SCHEMA COLLECTION col add N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'
GO
共用体型
共用体型に対する制限はサポートしません。たとえば、次の CREATE XML SCHEMA COLLECTION
ステートメントは失敗します。
CREATE XML SCHEMA COLLECTION particlesIk026valid AS N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xsdtesting" xmlns:x="http://xsdtesting" elementFormDefault="qualified">
<xsd:simpleType name="U1">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:integer" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="U2">
<xsd:restriction base="x:U1" />
</xsd:simpleType>
<xsd:complexType name="B">
<xsd:choice>
<xsd:element name="c1" type="x:U1" />
<xsd:element name="c2" />
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="R">
<xsd:complexContent>
<xsd:restriction base="x:B">
<xsd:choice>
<xsd:element name="c1" type="x:U2" />
<xsd:element name="c2" />
</xsd:choice>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="doc">
<xsd:complexType>
<xsd:choice>
<xsd:element name="elem" type="x:R" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>'
大きな XML スキーマ コレクションとメモリ不足状態
大きな XML スキーマ コレクションで組み込み XML_SCHEMA_NAMESPACE() 関数を呼び出しているとき、または大きな XML スキーマ コレクションを削除するときに、メモリが不足することがあります。次に示すのは、このような状態に対処する際に使用できる解決策です。
- システムの負荷が低い場合は、DROP_XML_SCHEMA_COLLECTION コマンドを使用します。この操作が失敗する場合は、ALTER DATABASE ステートメントを使用し、DROP XML SCHEMA COLLECTION を再試行してデータベースをシングル ユーザー モードにします。XML スキーマ コレクションが master、model、または tempdb に存在する場合は、シングル ユーザー モードにするためにサーバーを再起動する必要があります。
- XML_SCHEMA_NAMESPACE を呼び出す場合、単一の XML スキーマ名前空間の取得、システムの負荷低下時の呼び出し、またはシングル ユーザー モードでの呼び出しを試行することができます。
非決定的コンテンツ モデル
SQL Server では、非決定的コンテンツ モデルを含む XML スキーマを拒否します。
次の例では、非決定的コンテンツ モデルを含む XML スキーマの作成を試みています。このコードは、<root>
要素には 2 つの <a>
要素で構成されたシーケンスが 1 つ必要なのか、<root>
要素にはそれぞれ <a>
要素を含む 2 つのシーケンスが必要なのかが明確ではないので失敗します。
CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root">
<complexType>
<sequence minOccurs="1" maxOccurs="2">
<element name="a" type="string" minOccurs="1" maxOccurs="2"/>
</sequence>
</complexType>
</element>
</schema>
'
GO
このスキーマは、オカレンス制約を固有の位置に移動することにより修正できます。たとえば、親要素であるシーケンス パーティクルに制約を移動できます。
<sequence minOccurs="1" maxOccurs="4">
<element name="a" type="string" minOccurs="1" maxOccurs="1"/>
</sequence>
または、子要素に制約を移動することもできます。
<sequence minOccurs="1" maxOccurs="1">
<element name="a" type="string" minOccurs="1" maxOccurs="4"/>
</sequence>
SQL Server 2005 Service Pack 1 の動作
オカレンス制約が 0、1、または unbounded の場合、非決定的コンテンツ モデルを許容します。
次の例は、SQL Server 2005 では拒否されますが、SQL Server SP1 を実行しているサーバーでは許容されます。
CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root">
<complexType>
<sequence minOccurs="0" maxOccurs="unbounded">
<element name="a" type="string" minOccurs="0" maxOccurs="1"/>
<element name="b" type="string" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
'
GO
参照
関連項目
サーバーで XML スキーマ コレクションを使用する際のガイドラインと制限事項
XML スキーマ コレクションに対する権限
サーバー上の XML スキーマ コレクションの管理
概念
xml データ型
型指定された XML と型指定されていない XML
一意のパーティクル属性の制約について
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 4 月 14 日 |
|