2

XML 型の列を持つテーブルを作成するときに、複雑なXML スキーマ コレクションを参照しています。XML Schemaを指定するとき、 CONTENTまたはDOCUMENTキーワードのいずれかを指定するオプションがあります。後者は、XML データがドキュメントとして 1 つの列に格納されることを保証します。

ビデオ チュートリアルによると、CONTENTは XML データをフラグメントに格納します。

上記のステートメント以外に、 CONTENTキーワードの使用法に関する参照は他にありません。これは、スキーマとデータへの影響です。

フラグメントがどのように作成および管理されているか、およびフラグメントを個別に照会できるかどうか、およびその方法を知りたいです。さらに、フラグメントがどのように相関しているか。次に、XML スキーマ コレクションを修正すると、どのような影響がありますか。

4

1 に答える 1

2

実際、SQLServer 2005 XMLは非常によく文書化されていると思います。
CONTENT がデフォルトで、有効な XML を許可します。DOCUMENT はより具体的であり、格納できる XML-Data が単一の最上位ノードのみを持つことが許可されていることを意味します。

作成:

CREATE TABLE XmlCatalog ( 
   ID INT PRIMARY KEY, 
   Document XML(CONTENT myCollection))

入れる:

INSERT INTO XmlCatalog VALUES (2, 
'<doc id="123">
    <sections>
   <section num="1"><title>XML Schema</title></section>
   <section num="3"><title>Benefits</title></section>
   <section num="4"><title>Features</title></section>
    </sections>
</doc>')

選択する:

SELECT xCol.query('/doc[@id = 123]//section')   
FROM XmlCatalog   
WHERE  xCol.exist ('/doc[@id = 123]') = 1

...等々。クエリ言語は、xpath 1.0 のサブセットで多かれ少なかれ超えています。

XSD を修正すると、挿入と更新がチェックされ、各要素の xml 内に保存されます。ドキュメントを理解している限り、エントリが異なるスキーマを参照できるように、1 つの列に複数のスキーマを追加することもできます。

編集:
わかりました、ドキュメントの特定の部分を読んだ後、私はあなたの問題が何であるかを理解していると思います. その点についての参照はあまり明確ではありませんが、私が理解している限り、XSD スキーマにバインドできるのは 1 つの最上位ノードを持つエントリのみです。
XSD スキーマは、使用される XSD ファイルを定義する単一の最上位ノードを必要とするため、複数の最上位要素を含むフラグメントを検証することはできません。試していませんが、無理だと思います。
ただし、CONTENT 列を定義し、XSD を修正して、XSD を参照する 1 つの最上位ノードを持つ XML と、整形式のみをチェックする XML フラグメントの両方を格納することは有効であるようです。フラグメントには、上記の select ステートメントで示した XPath クエリ言語を使用してアクセスできます。
パフォーマンスへの影響については、多くを語ることはできません。リファレンスでは、XSD がインラインで格納されるため、データベース内に余分なスペースが必要になると述べています。XPath クエリも実行する必要があります。xpathは通常非常に高速であるという事実にもかかわらず、結果を得るために各行で実行する必要があるため、パフォーマンスが低下する可能性があると思います。確かに、保存されたxmlのサイズと複雑さ、およびxpath式に応じて、特定のクエリの実行計画を確認する必要があると思います。

于 2011-03-31T21:45:42.797 に答える