(57)【要約】  全てデータベースストア内のユーザ定義型（ＵＤＴ）の単一のインスタンス内にある構造化、半構造化、および非構造化データをモデル化するシステムおよび方法を提供する。具体的には、ＸＭＬデータモデルがＵＤＴのフィールドに拡張される。その結果、ドキュメント順序およびドキュメント構造などＸＭＬデータモデルのプロパティを、ＵＤＴのインスタンス内に保存することができる。さらに、オブジェクト挙動を表すコード（すなわちマネージドコードのオブジェクトを呼び出すことができるメソッド）をＵＤＴに追加して、ＵＤＴのＸＭＬフィールド並びに非ＸＭＬフィールドで動作させることができる。それによって、フレームワークによってビジネス論理をＸＭＬデータに追加することができるようになる。ＸＭＬデータのコンテンツモデルを、任意選択でＵＤＴのＸＭＬフィールドに関連したＸＭＬスキーマドキュメントを使用して記述することができる。
2007519078.tif 000002
【特許請求の範囲】
【請求項１】
ユーザ定義型のインスタンスであるオブジェクトがデータベースストアに永続することができるシステムで、前記ユーザ定義型の定義がマネージドコードのクラスとして提供され、１つまたは複数のフィールドおよび挙動を有し、各フィールドがそれぞれデータ型を有する方法であって、
ユーザ定義型のフィールドに関するＸＭＬデータ型を表すマネージドコードでクラスを定義すること、
前記ＸＭＬデータ型を表すマネージドコードのインスタンスとしてユーザ定義型のマネージドコードクラス定義内でフィールドを定義すること、および
前記データベースストア内に前記ユーザ定義型のインスタンスを永続させ、前記永続するインスタンスのフィールドがＸＭＬデータを含むことができることを含むことを特徴とする方法。
【請求項２】
前記ＸＭＬデータ型を表す前記マネージドコードクラスは、少なくとも１つのコンストラクタ、および前記ユーザ定義型の前記永続インスタンスの前記フィールドの前記ＸＭＬデータを検索することができるオブジェクトを返す少なくとも１つの方法を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ＸＭＬデータ型を表す前記マネージドコードクラスのインスタンスとして定義された前記ユーザ定義型の前記フレームで挙動を実装する方法を前記ユーザ定義型の前記マネージドコードクラス定義に追加することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
ＸＭＬデータを含む前記ユーザ定義型のインスタンスの前記フィールドと前記フィールドの前記ＸＭＬデータのためのコンテンツモデルを定義するＸＭＬ  Ｓｃｈｅｍａを関連付けるステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記関連付けるステップは、前記ユーザ定義型の前記マネージドコードクラス定義に前記データベースストアをホストするサーバの前記ＸＭＬ  Ｓｃｈｅｍａを定義する属性の注釈を付けることを含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記データベースストア内に永続する前記ユーザ定義型のインスタンスをクエリするステップ、および前記データベースストア内に永続する前記ユーザ定義型のインスタンスを修正するステップの少なくとも１つをさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
マネージドコードの実行を提供するランタイムであって、
ＸＭＬデータ型を表すマネージドコードのクラス、および
データベースストア内にその型のオブジェクトを記憶するためのユーザ定義型を定義するマネージドコードのクラスであって、前記ユーザ定義型についてのクラス定義は１つまたは複数のフィールドを有し、各フィールドはそれぞれデータ型を有し、前記フィールドの少なくとも１つは前記ＸＭＬデータ型を表す前記マネージドコードクラスのインスタンスとして定義されるクラスを含むランタイムと、
前記ユーザ定義型のインスタンスを格納するデータベースストアとを含み、永続インスタンスのフィールドはＸＭＬデータを含むことができることを特徴とするシステム。
【請求項８】
前記ＸＭＬデータ型を表す前記マネージドコードクラスは、少なくとも１つのコンストラクタ、および前記ユーザ定義型の前記永続インスタンスの前記フィールドの前記ＸＭＬデータを検索することができるオブジェクトを返す少なくとも１つの方法を含むことを特徴とする請求項７に記載のシステム。
【請求項９】
前記ユーザ定義型を定義する前記マネージドクラスコードは、ＸＭＬデータを含む前記ユーザ定義型の前記インスタンスの前記フィールドで挙動を実装する方法をさらに含むことを特徴とする請求項７に記載のシステム。
【請求項１０】
前記ユーザ定義型を定義する前記マネージドコードクラスは、ＸＭＬデータを含む前記ユーザ定義型のインスタンスの前記フィールドと前記フィールドの前記ＸＭＬデータのためのコンテンツモデルを定義するＸＭＬ  Ｓｃｈｅｍａの間の関連付けをさらに含むことを特徴とする請求項７に記載のシステム。
【請求項１１】
前記関連付けは、前記ユーザ定義型を定義する前記マネージドコードクラス内の前記フィールドに与えられた属性を含み、前記属性は前記データベースストアをホストするサーバ側の前記ＸＭＬ  Ｓｃｈｅｍａを識別することを特徴とする請求項１０に記載のシステム。
【請求項１２】
ユーザ定義型のインスタンスであるオブジェクトがデータベースストアに永続することができるシステムで使用するためのコンピュータ可読メディアに格納されたプログラムコードを有するコンピュータ可読メディアであって、前記プログラムコードは、
ユーザ定義型のフィールドに関するＸＭＬデータ型を表すマネージドコードの第１のクラスと、
１つまたは複数のフィールドおよび挙動を含み、各フィールドはそれぞれデータ型を有し、前記第２のクラス内のフィールドの少なくとも１つは前記第１のクラスのインスタンスとして定義されている、ユーザ定義型を定義するマネージドコードの第２のクラスとを含み、
前記プログラムコードはコンピュータで実行された場合に、前記コンピュータが前記ユーザ定義型のインスタンスを前記データベースストア内で永続させることができるようにし、前記永続インスタンスの前記少なくとも１つのフィールドはＸＭＬデータを含むことを特徴とするコンピュータ可読メディア。
【請求項１３】
前記第１のクラスは、少なくとも１つのコンストラクタ、および前記ユーザ定義型の前記永続インスタンスの前記フィールドの前記ＸＭＬデータを検索することができるオブジェクトを返す少なくとも１つの方法を含むことを特徴とする請求項１に記載のコンピュータ可読メディア。
【請求項１４】
前記第２のクラスは、前記第１のクラスのインスタンスとして定義された前記ユーザ定義型の前記少なくとも１つのフィールドで挙動を実装する方法をさらに含むことを特徴とする請求項１２に記載のコンピュータ可読メディア。
【請求項１５】
ＸＭＬデータを含む前記ユーザ定義型のインスタンスの前記少なくとも１つのフィールドは、前記フィールドの前記ＸＭＬデータのためのコンテンツモデルを定義するＸＭＬ  Ｓｃｈｅｍａに関連付けられることを特徴とする請求項１２に記載のコンピュータ可読メディア。
【請求項１６】
前記少なくとも１つのフィールドは、前記データベースストアをホストするサーバ側の前記ＸＭＬ  Ｓｃｈｅｍａを定義する属性の前記第２のクラスの前記少なくとも１つのフィールドの前記定義に注釈を付けることによって前記ＸＭＬ  Ｓｃｈｅｍａに関連付けられることを特徴とする請求項１５に記載のコンピュータ可読メディア。
【請求項１７】
前記プログラムコードは、
前記コンピュータが、データベースストア内に永続する前記ユーザ定義型のインスタンスをクエリし、前記データベースストア内に永続する前記ユーザ定義型のインスタンスを修正することができるようにすることを含むことを特徴とする請求項１２に記載のコンピュータ可読メディア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムのデータストレージに関し、より詳細には、ＸＭＬデータをユーザ定義型のフィールドとしてデータベースストアに格納し検索するシステムおよび方法に関する。
【背景技術】
【０００２】
本出願は、参照により開示の全体を本明細書に組み込む、２００３年１０月２４日に出願の米国特許出願第１０／６９３，１５８号明細書の優先権を主張するものである。
【０００３】
本特許文献の開示の一部は、著作権保護の対象となる資材を含む。著作権所有者は、本特許文献または特許の開示が特許商標庁の特許ファイルまたは記録文書に記載された場合は、その複製に異議を申し立てるものではないが、その他の点ではいかなる著作権の権利も保有するものである。以下の表示は本文書に適用されるものである。Ｃｏｐｙｒｉｇｈｔ（Ｃ）２００３、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．
【０００４】
Ｍｉｃｒｏｓｏｆｔ  ＳＱＬ  ＳＥＲＶＥＲは、広範なデータ管理並びに開発ツール、強力な抽出、変換、およびローディング（ＥＴＬ）ツール、ビジネスインテリジェンス並びに分析サービス、および他の能力を提供する総合データベース管理プラットフォームである。最近、ＳＱＬ  ＳＥＲＶＥＲの２つの改良が行われた。第１に、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）．ＮＥＴ  Ｆｒａｍｅｗｏｒｋ  Ｃｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ（ＣＬＲ）がＳＱＬ  ＳＥＲＶＥＲデータベースに統合され、第２に、Ｕｓｅｒ  Ｄｅｆｉｎｅｄ  Ｔｙｐｅ（ＵＤＴ）と呼ばれる新しいオブジェクトをＣＬＲ環境でマネージドコードを伴って生成し、データベースストアに永続させることができるようになった。
【０００５】
ＣＬＲはＭｉｃｒｏｓｏｆｔ  ．ＮＥＴ  Ｆｒａｍｅｗｏｒｋの心臓部であり、全ての．ＮＥＴコードを実行する環境を提供する。したがって、ＣＬＲ内で実行されるコードは「マネージドコード」と呼ばれる。ＣＬＲは、ジャストインタイム（ＪＩＴ）コンパイル、メモリの割当と管理、タイプセーフティーの実行、例外処理、スレッド管理、およびセキュリティを含むプログラムの実行に必要とされる様々な機能およびサービスを提供する。ＣＬＲは、．ＮＥＴルーチンの最初の呼出しでＳＱＬ  ＳＥＲＶＥＲによってロードされる。
【０００６】
ＳＱＬ  ＳＥＲＶＥＲの以前のバージョンでは、データベースプログラマは、サーバ側にコードを書き込む場合はＴｒａｎｓａｃｔ−ＳＱＬを使用するように制約されていた。Ｔｒａｎｓａｃｔ−ＳＱＬは、国際標準化機構（ＩＳＯ）米国規格協会（ＡＮＳＩ）で定義されているように、Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅの拡張子である。データベース開発者は、Ｔｒａｎｓａｃｔ−ＳＱＬを使用して、データベースとテーブルを生成、変更、および削除することができる他に、データベースに格納されたデータを挿入、変更、および削除することができる。Ｔｒａｎｓａｃｔ−ＳＱＬは、特に直接構造データアクセスおよび操作用に設計されている。Ｔｒａｎｓａｃｔ−ＳＱＬはデータアクセスおよび管理に優れているが、Ｖｉｓｕａｌ  Ｂａｓｉｃ  ．ＮＥＴおよびＣ＃ほどにはプログラミング言語が完全ではない。たとえば、Ｔｒａｎｓａｃｔ−ＳＱＬは、各ループ、ビットシフティング、またはクラスについてアレイ、コレクションをサポートしていない。
【０００７】
ＣＬＲがＳＱＬ  ＳＥＲＶＥＲデータベースに統合されると、データベース開発者は、Ｔｒａｎｓａｃｔ−ＳＱＬだけでは行うのが不可能であり、または難しかったタスクを実行することができるようになる。Ｖｉｓｕａｌ  Ｂａｓｉｃ  ．ＮＥＴとＣ＃は両方とも、アレイ、構造化例外処理、およびコレクションの完全なサポートを提供する最新プログラミング言語である。開発者は、ＣＬＲの統合を利用して、より複雑な論理を有し、Ｖｉｓｕａｌ  Ｂａｓｉｃ  ．ＮＥＴおよびＣ＃などの言語を使用する計算タスクにより適したコードを書き込むことができる。
【０００８】
ＳＱＬ  ＳＥＲＶＥＲは、ＣＬＲ統合の他に、Ｕｓｅｒ  Ｄｅｆｉｎｅｄ  Ｔｙｐｅｓ（ＵＤＴ）、すなわち開発者がデータベースのスカラ型システムを拡張することができるようにする新しい機構のサポートも追加する。ＵＤＴは、アプリケーションアーキテクチャの観点から２つの重要な特典を提供する。すなわち、内部状態と外部動作の間の（クライアントとサーバの両方の）強力なカプセル化を提供し、他の関連したサーバ機能との深い統合を提供する。ＵＤＴは定義された後、列定義、変数、パラメータ、関数の結果、カーソル、トリガ、およびレプリケーションに含まれる、システム型をＳＱＬ  ＳＥＲＶＥＲで使用することができる全てのコンテキストで使用することができる。
【０００９】
データベースサーバについてＵＤＴを定義するプロセスは以下の通りに行われる。
【００１０】
ａ）ＵＤＴ生成に関するルールに従うマネージドコードでクラスを生成する
ｂ）ＵＤＴを含むAssemblyをCREATE ASSEMBLYステートメントを使用してサーバのデータベースにロードする
ｃ）マネージドコードＵＤＴを公開するCREATE TYPEステートメントを使用して型をデータベースに生成する。
この時点で、ＵＤＴをテーブル定義で使用することができる。
【００１１】
ＵＤＴ定義がマネージドコードで生成された場合、型は以下の要件を満たさなければならない。
【００１２】
ａ）Serializableとしてマークされなければならない。
ｂ）SqlUserDefinedTypeAttributeでデコレート（ｄｅｃｏｒａｔｅ）されなければならない。
ｃ）型はINullableインターフェースを実装することによってNULL認識しなければならない。
ｄ）型は引数がないパブリックコンストラクタを持たなければならない。
ｅ）型は、以下の方法を実装することによって、ストリングにかつそれからの変換をサポートしなければならない。
【００１３】
１．Public String ToString()、および
２．Public Shared <type> Parse (SqlString s)である。
【００１４】
参照によりその全体を本明細書に組み込む、２００３年１０月２３日に出願の同時係属中の本願と同じ譲受人に譲渡された特許文献１、名称「Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｏｂｊｅｃｔ  Ｐｅｒｓｉｓｔｅｎｃｅ  Ｉｎ  Ａ  Ｄａｔａｂａｓｅ  Ｓｔｏｒｅ」（弁理士Ｄｏｃｋｅｔ：ＭＳＦＴ−２８５２／３０６８１９．１）には、ＵＤＴの他の特徴が記載されており、ＵＤＴについてのＣＬＲクラス定義の分野および動作は、たとえばデータベースストアでのＵＤＴのインスタンスのレイアウト構造を記述するストレージ属性の注釈が付けられている。具体的には、ＵＤＴを定義するＣＬＲクラスの各フィールドに、サイズ、精度、スケールなど、型のストレージファセットを制御するストレージ属性の注釈が付けられる。一実装形態では、各フィールドに名称SqlUdtField()のカスタムストレージ属性の注釈を付けることによってこれを行うことができる。この属性は、フィールドに追加のストレージディレクティブの注釈を付ける。こうしたディレクティブは、オブジェクトがディスクに直列化された場合に実行される。さらに、ＣＬＲクラスで定義された各管理された挙動（たとえば、ＵＤＴオブジェクト上に呼び出して、たとえばフィールドの値を戻すことができるメソッドなど）にその管理された挙動への等価の構造アクセスパスを示す属性の注釈が付けられる。一実装形態では、この目的で使用されるカスタム属性は、SqlUdtProperty()と命名され、データベースサーバ（たとえばＳＱＬ  ＳＥＲＶＥＲ）は、このカスタム属性で注釈が付けられたプロパティの実装が属性の定義の一部として指定されたフィールドを代表するとみなす。それによって、サーバが、インスタンスを生成しそれに動作を呼び出さずに、プロパティへのアクセスを構造的に最適化するようにさせる。
【００１５】
図１は、ＵＤＴを定義するＣＬＲクラスの例示のコードのリスティングである。図で示したように、ＣＬＲクラスは、上記のようにSqlUdtField()およびSqlUdtProperty()カスタム属性で注釈が付けられている。具体的には、SqlUdtField()カスタム属性は、行５、８、３７、および４９に加えられて、それぞれ例示のＵＤＴクラス定義のフィールドに注釈を付けている。SqlUdtProperty()カスタム属性は、行１１、２４に加えられて、それぞれクラスの管理された挙動に注釈を付けている。
【００１６】
ＵＤＴを定義付けるＣＬＲクラスは、次いでダイナミックリンクライブラリ（ｄｌｌ）にコンパイルされる。次いで、コンパイルされたクラスを含むAssemblyを以下のＴ−ＳＱＬスクリプトコマンドを使用して生成することができる。
【００１７】
【表１】
2007519078.tif 000003
【００１８】
次いで、以下のＴ−ＳＱＬスクリプトコマンドを使用してサーバにＵＤＴを生成することができる。
【００１９】
【表２】
2007519078.tif 000004
【００２０】
ＵＤＴがサーバ上に生成された後、以下のようにＵＤＴ型としてテーブルの属性を定義するテーブル（たとえば「MyTable」）を生成することができる。
【００２１】
【表３】
2007519078.tif 000005
【００２２】
以下のように、新しいアイテムをテーブルに加えることができる。
【００２３】
【表４】
2007519078.tif 000006
【００２４】
次いで、ＵＤＴ式をSELECT Item.ID, Item.Name FROM MyTableなどクエリで使用することができる。
【００２５】
ＣＬＲがＳＱＬ  ＳＥＲＶＥＲに統合されてマネージドコードのクラス定義からＵＤＴを定義することができるため、アプリケーションは、マネージドコードクラスで定義された型のオブジェクトのインスタンスを生成し、こうしたオブジェクトをＵＤＴとしてリレーショナルデータベースストアに永続させることができる。さらに、ＵＤＴを定義するクラスは、その型のオブジェクトの特定の挙動を実装するメソッドも含むことができる。したがって、アプリケーションは、ＵＤＴとして定義された型のオブジェクトのインスタンスを生成し、それを介して管理された挙動を呼び出すことができる。
【００２６】
ＵＤＴとして定義されたクラスのオブジェクトがＣＬＲにインスタンス生成された場合、オブジェクトをオブジェクトの直列化プロセス中にデータベースストアに永続させることができ、クラスの変数の値が物理ストレージ（たとえばハードディスク）に転送される。図２は、メモリ内のオブジェクトのディスク上に永続する形態への直列化を示す。オブジェクトは、図３で示したフォーマットの従来のリレーショナルデータベーステーブルでデータベースストアに永続させることができる。図で示したように、テーブルは特定のＵＤＴの列を含む。特定のＵＤＴの永続オブジェクトの直列化された値が、ＵＤＴ列のセルを占める。
【００２７】
やはり図２を参照すると、アプリケーションが、データベースストアに永続しているＵＤＴオブジェクトの管理された挙動（たとえばＵＤＴオブジェクトのフィールドの値を返す挙動）を参照する述語または表現を含むクエリを生成する場合、永続オブジェクトは、非直列化（「ハイドレーティング（ｈｙｄｒａｔｉｎｇ）」とよばれることも多い）されなければならず、ＣＬＲはメモリを全オブジェクトに割り当てて格納されたオブジェクトの値を受け取らなければならない。次いでＣＬＲは、クエリの対象である１つまたは複数の値を返すＵＤＴクラスの実際のメソッド（すなわち挙動）を呼び出さなければならない。上記の同時係属中の特許出願（弁理士Ｄｏｃｋｅｔ、ＭＳＦＴ−２８５２／３０６８１９．１）で記載したように、ＵＤＴのＣＬＲクラス定義の注釈the SqlUdtField()およびSqlUdtProperty()はデータベースサーバに使用されることによって、オブジェクトハイドレーションを必要とせずに、幾つかのＵＤＴフィールドの値への直接構造アクセスも可能になる。
【００２８】
ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ）は、データに人間が理解できるタグでマークアップするための総称構文を提供する、ドキュメントおよびデータ表現のＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ  Ｃｏｎｓｏｒｔｉｕｍ（Ｗ３Ｃ）承認規格である。ＸＭＬは固定セットのタグを有するため、ユーザは、タグがＸＭＬ規格に準拠する限り、こうしたタグを定義付けることができる。データは、テキストマークアップに囲まれたテキストのストリングとしてＸＭＬドキュメントに格納することができる。Ｗ３Ｃは、ＸＭＬの抽象データモデルをＸＭＬ情報セット（ＸＭＬ  Ｉｎｆｏｓｅｔ）と呼ばれる仕様でコード化した。ＸＭＬ  Ｓｃｈｅｍａｓを使用して、ＸＭＬフォーマットおよびコンテンツにストラクチャを与えることもできる。ＸＭＬ  Ｓｃｈｅｍａの場合、ドキュメントのＸＭＬデータのために、図、プラン、またはフレームワークを定義付けることができる。ＸＭＬは、ドキュメントのコンテンツを簡単に記述することができる周知のフォーマットであるが、他の非ＸＭＬフォーマットデータも同じデータベースにあることが望ましいこともある。これには、固有の非互換性のために潜在的なクエリの問題が生じる。こうした非互換性の一例は、リレーショナルデータベースにＸＭＬコンテンツが存在することである。
【００２９】
既存のデータベース管理システムは、ＸＭＬデータをリレーショナルデータベースストアに格納するためのサポートを提供する。たとえば、ＭｉｃｒｏｓｏｆｔのＳＱＬ  ＳＥＲＶＥＲは、ＸＭＬデータ型の列、変数、およびパラメータにサポートを提供する。１つまたは複数のＸＭＬ列を有するテーブルを生成し、ＸＭＬ値をＸＭＬ列に格納し、ＸＭＬスキーマ名前空間を使用してＸＭＬ列に型を付け、ＸＭＬ列に索引を付け、ＸＭＬ値のクエリを行うことができる。しかし、ＸＭＬデータをこうしたインスタンスのリレーショナルデータベースに格納することは以前から可能であったが、ＸＭＬデータをマネージドコードで生成されたユーザ定義型のフィールドに埋め込むことが望ましい。本発明は、この能力を提供する。
【発明の開示】
【発明が解決しようとする課題】
【００３０】
本発明は、ＸＭＬデータをユーザ定義型（ＵＤＴ）のフィールドに格納するシステムおよび方法を対象とする。
【課題を解決するための手段】
【００３１】
ＵＤＴの１つまたは複数のフィールドは、ＸＭＬデータ型として定義することができるが、ＵＤＴは他の非ＸＭＬフィールドも有することができる。ＸＭＬデータモデルに準拠するデータは、ＸＭＬフィールドに格納することができるが、非ＸＭＬデータは非ＸＭＬフィールドに格納される。したがって、ドキュメント順序およびドキュメント構造などＸＭＬデータモデルのプロパティは、ＵＤＴのインスタンス内に保存される。さらに、オブジェクト挙動を表すコード（すなわちマネージドコードのオブジェクトに呼び出すことができるメソッド）をＵＤＴに追加して、ＵＤＴのＸＭＬフィールド並びに非ＸＭＬフィールドで動作できるようにする。それによって、フレームワークによって、ＸＭＬマークアップを有する半構造化データにビジネス論理を追加することができるようになる。さらに、ＸＭＬデータのコンテンツモデルを、任意選択でＵＤＴのＸＭＬフィールドに関連したＸＭＬスキーマドキュメントを使用して記述することができる。
【００３２】
また、本発明により、ＵＤＴにＸＭＬフィールドを導入するため、ＸＭＬフィールドを適したＣＬＲ型として公開する共通言語ルーチン（ＣＬＲ）プログラミングモデルを提供する。これは、SqlXmlと呼ばれるクラスとしてモデル化されることが好ましい。ＸＭＬデータ型フィールドについて、SqlXmlメンバは、SqLUDTField索引内の「XmlSchemaCollection」と呼ばれる新しい属性を可能にする。SqlXmlクラスは、サーバ側のＸＭＬデータ型へのＡＤＯ．ＮＥＴアクセスに有用である。
【００３３】
本発明の他の特徴および利点は、本発明の以下の詳細な説明および添付の図面から明らかになるであろう。
【００３４】
以上の発明の開示並びに以下の本発明の詳細な説明は、添付の図面と併せて読めばよりよく理解される。本発明を図で示す目的で、本発明の様々な態様の例示の実装形態が図面で示されているが、本発明は開示された特定の方法および手段に限定されるものではない。
【発明を実施するための最良の形態】
【００３５】
本発明の主題を、法定要件を満たすための特異性を伴って記載する。しかし、この記載自体は本発明の範囲を限定しないものとする。むしろ本発明者らは、特許請求する主題が他の方法でも実装され、他の現在または未来の技術と併せて、本文書に記載したものと同様の様々なステップまたは要素が包含されることを企図している。さらに本明細書では、用語「ステップ」は、採用される方法の様々な側面を指すために使用されているが、この用語は、個々のステップの順序がはっきりと記載されていない場合、また記載された場合を除いて、本明細書で開示した様々なステップ中、またはステップ間の特定の順序を示していると解釈されるべきではない。
【００３６】
上記で述べたように、本発明は、ＸＭＬデータをユーザ定義型（ＵＤＴ）のフィールドに格納するシステムおよび方法を対象とする。ＵＤＴのフィールドは、ＸＭＬデータ型として定義付けることができるが、ＵＤＴは他の非ＸＭＬフィールドも有することができる。ＸＭＬデータモデルに準拠するデータは、ＸＭＬフィールドに格納することができるが、非ＸＭＬデータは非ＸＭＬフィールドに格納される。したがって、ドキュメント順序およびドキュメント構造などＸＭＬデータモデルのプロパティは、ＵＤＴのインスタンス内に保存される。さらに、オブジェクト挙動を表すコード（すなわちマネージドコードのオブジェクトで呼び出すことができる方法）をＵＤＴに追加して、ＵＤＴのＸＭＬフィールド並びに非ＸＭＬフィールドで動作できるようにする。それによって、フレームワークがビジネス論理を半構造化データに追加することができるようになる。さらに、ＸＭＬデータのコンテンツモデルを、任意選択でＵＤＴのＸＭＬフィールドに関連するＸＭＬスキーマドキュメントを使用して記述することができる。
【００３７】
また、本発明によれば、ＸＭＬフィールドをＵＤＴに導入するため、ＸＭＬフィールドを適したＣＬＲ型として公開する共通言語ルーチン（ＣＬＲ）プログラミングモデルを提供する。これは、SqlXmlと呼ばれるクラスとしてモデル化されることが好ましい。ＸＭＬデータ型フィールドについて、SqlXmlメンバは、SqlUDTField注釈内の「XmlSchemaCollection」と呼ばれる新しい属性を可能にする。SqlXmlクラスは、サーバ側のＸＭＬデータ型へのＡＤＯ．ＮＥＴアクセスに有用である。
【００３８】
SqlXmlクラス
本発明の一態様によれば、新しいクラスはＣＬＲクラスのフィールド内のＸＭＬデータのストレージをサポートするように定義される。本実装形態では、このクラスはSqlXmlと呼ばれるが、理解されるように、この特定の名前は本発明にとって重要ではない。図４は、SqlXmlクラスのメンバを記述するテーブルである。
【００３９】
図４で示したように、SqlXmlクラスは２つのコンストラクタをサポートする。１つのコンストラクタはその入力側でXmlReaderを受け取る。XmlReaderは、ＸＭＬデータへの高速でキャッシュされていない順方向のみの読み取りアクセスを定義するＭｉｃｒｏｓｏｆｔの．ＮＥＴ  Ｆｒａｍｅｗｏｒｋ抽象クラス（またはインターフェース）である。このコンストラクタは、SqlXmlオブジェクトがストリームのXmlReader、他のSqlXmlインスタンス、またはXmlReaderが使用可能な任意のクラスからインスタンス生成される場合に有用である。ＸＭＬコンテンツがXmlReaderインターフェースを介して読み取られる場合、整形式性の検査がコンストラクタの一部として発生する。他のコンストラクタは、入力としてストリームを受け取り、整形式性の検査をコンストラクタでスキップすべきときに使用される。他のコンストラクタも可能である。
【００４０】
CreateReader()メソッドは、SqlXmlの（ＸＭＬ）コンテンツを検索するXmlReaderを返す。XmlReaderのサポートによって、ＸＭＬコンテンツに非常に柔軟な機構が提供される。たとえばXPathDocumentまたはXPathNavigatorをサーバからのＸＭＬデータ型値にインスタンス生成することができる。
【００４１】
SqlXmlクラスはメモリレスであり、同時のCreateReader()呼出しが可能である。複数のCreateReader()呼出しがXmlReaderの様々なインスタンスを返す。こうした各インスタンスが、SqlXmlオブジェクトによってカプセル化されたＸＭＬコンテンツの始めに初期化される。それによって、SqlXmlのインスタンスを、ＸＭＬリーダの新しいインスタンスを生成することができる機能およびプロシージャに渡すことができるようになる。
【００４２】
SqlXmlメンバＭの値を更新するには、XmlWriterを使用してストリームに書き込み、ストリームにXmlReaderをインスタンス生成し、XmlReaderまたはストリームから新しいSqlXmlオブジェクトＭ１をインスタンス生成する。XmlWriterは、ＸＭＬ勧告のＷ３Ｃ  Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ）１．０およびＮａｍｅｓｐａｃｅｓに準拠するＸＭＬデータを含むストリームまたはファイルを生成する（書き込む）高速のキャッシュされていない順方向のみの手段を定義する．ＮＥＴ  Ｆｒａｍｅｗｏｒｋ抽象クラス（またはインターフェース）である。XmlTextWritterは、XmlWriterインターフェースを実装する．ＮＥＴ  Ｆｒａｍｅｗｏｒｋクラスである。以下はＸＭＬストリングである。
【００４３】
【表５】
2007519078.tif 000007
【００４４】
これを以下のＣ＃コードフラグメントによって生成することができる。
【００４５】
【表６】
2007519078.tif 000008
【００４６】
次いで、SqlXmlオブジェクトＭ１がＭに割り当てられる。これは、ソースオブジェクトＭ１の現在の状態をＭに複写する。ＸＭＬコンテンツを更新するために使用することができる、XmlWriterオブジェクトを返すCreateWriter()などSqlXmlに関する他のメソッドも可能である。
【００４７】
ＣＬＲクラスにおけるSqlXmlの使用
また、本発明の本実装形態によれば、ＣＬＲクラスの１つまたは複数のメンバを新しいSqlXml型として定義することができる。ネイティブＣＬＲ型バッキングSqlXmlは、XmlReaderを獲得することができるストリームを提供するものである。すなわち、ストリームには直接アクセスすることができず、XmlReaderを介してのみアクセスすることができる。それは、２つのコンストラクタもサポートしており、その１つはXmlReaderを受け取り、他方はストリームを受け取る。
【００４８】
図５は、SqlXmlフィールドを有するＣＬＲクラス「Employee」の例示のプログラムコードのリスティングを示す。図で示したように、Employeeクラスは、サーバ側でプリミティブＳＱＬ型をマップする幾つかの「Sqltypes」メンバを有する。ResumeメンバはSqlXml型のものである。Resumeメンバはサーバ側でＸＭＬデータ型によって、ＣＬＲ内ではストリームによってもとに返される。どちらの場合も、ＸＭＬコンテンツはXmlReaderを介してアクセス可能である。
【００４９】
SqlXmlフィールドを有するユーザ定義型の生成
上記の背景技術の項で記載したように、．ＮＥＴプログラミング言語のマネージドクラスからＳＱＬのユーザ定義型を生成するには、ユーザは先ずCREATE ASSEMBLYステートメントを使用して型の定義を含むアセンブリを登録する。次いで、以下のようにCREATE TYPEステートメントを使用してuser-defined typeが生成される。
【００５０】
【表７】
2007519078.tif 000009
【００５１】
本発明によれば、SQL user-defined type udt-nameは、ＵＤＴについてＣＬＲクラスＣのSqlXmlフィールドＭ１、Ｍ２、．．．に対応する（型なし）ＸＭＬデータ型の１つまたは複数のフィールドＸ１、Ｘ２、．．．を有する。type udt-nameのクラスＣへのインスタンスの直列化および非直列化は、上記に記載し図２で示したように、通常の方法で行われる。型を生成するための通常のルールは全てこのケースに当てはまる。udt-nameのＸＭＬフィールドは大きいバイナリＳＱＬ型と呼ばれる内部表示に格納される。
【００５２】
user-defined typeが生成された後、ＸＭＬフィールドのない任意のuser-defined typeと同様に、それをテーブルまたはビューの列型として、かつＳＱＬ変数およびパラメータとして使用することができる。一例として、udtEmpと呼ばれる上記で定義したEmployeeクラスに基づくＵＤＴは以下のように生成される。
【００５３】
【表８】
2007519078.tif 000010
【００５４】
udtEmp UDTは、fNameおよびIName用の型ｎｖａｒｃｈａｒ（４０００）のフィールドを有し、Ageフィールドへの浮動などを行う。クラスEmployeeのSqlXmlメンバのResumeは、udtEmpの型なし（すなわちどのＸＭＬスキーマ結合もない）ＸＭＬデータ型フィールドResumeにマップされる。
【００５５】
正数列のID、およびudtEmp列のEmployeeを有するemployee table tabEmployeeは、以下のように生成することができる。
【００５６】
【表９】
2007519078.tif 000011
【００５７】
テーブル生成により、user-defined type udtEmpをバインドするスキーマがセットアップされる。２つの列に値を与えることによってテーブルtabEmployeeに行を挿入することができる。EmpColのResumeフィールドに挿入されたＸＭＬ値は、挿入時に整形式性について検査される。
【００５８】
インスタンスレベルで、SqlXml member Employee.ResumeがフィールドEmpCol.Resumeに格納された状態で、EmployeeオブジェクトがudtEmpのインスタンスに直列化される。逆に、EmpCol.Resumeフィールドの値をEmployee.Resumeメンバにロードして、EmpColのインスタンスがEmployeeオブジェクトに非直列化される。
【００５９】
さらなる例で、以下のT-SQLステートメントが実行されると仮定する。
【００６０】
【表１０】
2007519078.tif 000012
【００６１】
意味論的には、（型udtEmpの）列EmpColの各値がＣＬＲの型Employeeのオブジェクトに非直列化される。具体的には、ＸＭＬデータ型フィールドEmpCol.ResumeがSqlXml member Employee.Resumeにロードされ、それがＸＭＬデータ型としてT-SQL層に返される。一つの最適化は、EmpCol.Resumeの値を直接抽出し、Employee.Resumeメンバの値を抽出するための非直列化を回避することである。
【００６２】
図６は、．ＮＥＴプログラミング言語でEmployeeクラスの新しいインスタンスを生成し、それを取り込む方法を示す例示のプログラムコードのリスティングを示す。この例では、新しいEmployeeオブジェクトが生成される。その非ＸＭＬフィールドは、通常の方法で値が割り当てられる。ＸＭＬフィールドResumeでは、XmlTextReaderリーダがストリング値に生成される（「XML content here」）。次いで、新しいSqlXmlオブジェクトがリーダにインスタンス生成されResumeフィールドに割り当てられる。上記に記載したように、XmlTextReaderは、XmlReaderインターフェースを実装する．ＮＥＴ  Ｆｒａｍｅｗｏｒｋクラスである。
【００６３】
ＸＭＬコンテンツは、XmlReaderを使用してResumeフィールドの内部ストレージに複写される。リーダを介した検索によってＸＭＬコンテンツの整形式性検査が発生する。XmlReaderを獲得することができる任意のオブジェクトで十分間に合う。したがって、ファイルから読み取り、または他のSqlXmlインスタンスからXmlReaderを獲得することができる。
【００６４】
図７は、ＸＭＬコンテンツを解析するためにEmployeeクラスのインスタンスからXmlReaderを獲得する方法を示す例示のプログラムコードのリスティングを示す図である。このリスティングでは、Emp.Resume.CreateReader()は、ＸＭＬコンテンツを検索することができる（非検証）XmlReaderを返す。オブジェクトリーダ１およびリーダ２は、ＸＭＬコンテンツの始めに初期化される。リーダ１および２は、SqlXmlがメモリレスであるため、互いに独立している。
【００６５】
図８は、．ＮＥＴプログラミング言語でEmployeeクラスのインスタンスを更新する方法を示す例示のプログラムコードのリスティングを示す。EmployeeオブジェクトEmpの非ＸＭＬフィールドは、通常の方法で更新される。新しいＸＭＬコンテンツ（「new XML content here」）がストリームに書き込まれ、XmlReaderリーダがストリームに作成され、新しいSqlXmlオブジェクトがリーダに作成される。作成されたSqlXmlオブジェクトは、対応するフィールドEmp.Resumeに割り当てられる。それによって、ＸＭＬコンテンツをEmp.Resumeに複写させる。これは「ブラインド」書き込みの一例である。インクリメンタル更新では、アプリケーションは、Emp.ResumeからＸＭＬリーダを獲得し、それから読み取り、更新されたコンテンツをＸＭＬライタに書き込むことができる。更新コンテンツは、Emp.Resumeの現在のコンテンツおよびその修正（たとえば新しい電話番号の追加）に基づく。
【００６６】
型付きＸＭＬ
本発明のさらなる態様によれば、ＵＤＴのＸＭＬフィールドをサーバ側のＸＭＬスキーマコレクションに制限することができる。ＸＭＬスキーマコレクションは、リレーショナルデータベースの同じ列に格納すべき様々なＸＭＬ  Ｓｃｈｅｍａに関連するデータインスタンスを可能にするＳＱＬ  ＳＥＲＶＥＲの新しい概念である。本発明によれば、ＸＭＬスキーマコレクションの概念は、上記のように、SqlXmlを定義したＵＤＴのフィールド（すなわちＸＭＬデータを含むように定義されたフィールド）に拡張される。
【００６７】
ＸＭＬスキーマコレクションに関して、さらに背景技術によれば、ＸＭＬがテキストドキュメント用のメタマークアップ言語であることが背景技術の項から思い出される。データは、テキストのストリングとしてＸＭＬドキュメントに含まれ、データはデータを記述するテキストマークアップで囲まれる。データおよびマークアップの特定のユニットは要素と呼ばれる。ＸＭＬ仕様によって、このマークアップが従うべき正しい構文が定義される。すなわち、要素がタグによって区切られる方法、タグの外見、要素に容認可能な名前、属性が配置される場所などである。
【００６８】
ＸＭＬは、ＸＭＬを定義することができる要素では柔軟であるが、他の多くの側面では厳密なものである。要素はＸＭＬタグの配置、タグが出現する場所、正当な要素名、属性を要素に付ける方法などを規制する文法をＸＭＬドキュメントに提供する。この文法は、全てのＸＭＬドキュメントを読んで理解することができるＸＭＬパーサーの開発を可能にするのに十分特有のものである。この文法にかなうドキュメントは、整形式性があると言われる。
【００６９】
相互運用性を向上させるには、個人または組織が一定のタグだけを使用することに同意してもよい。こうしたタグセットは、ＸＭＬアプリケーションと呼ばれる。ＸＭＬアプリケーションは、ＭＩＣＲＯＳＯＦＴ  ＷＯＲＤまたはＭＩＣＲＯＳＯＦＴ  ＥＸＣＥＬなどのソフトウェアアプリケーションではない。ベクトルグラフィックス、財務データ、料理法、または出版業など特定の目的のためにＸＭＬの機能性の向上をもたらすのはタグセットである。
【００７０】
ＸＭＬスキーマは、ＸＭＬアプリケーションの１つの型であり、すなわち特定のＸＭＬ語彙に準拠するドキュメントの許可されたコンテンツを記述することができるものである。たとえば、本の出版社を考えてみる。出版社は、ＸＭＬアプリケーションをそのビジネスに使用して、ＸＭＬアプリケーションが（本、販売、顧客などの）データを他の出版社、著者、および顧客に提供する場合に、彼らが業界で標準のＸＭＬアプリケーションによってもたらされる機能性の向上から利益を得るようにすることができる。さらに、出版社は、本についてＸＭＬスキーマを採用して、出版社のコンピュータ（および自分の仲間のコンピュータ）が本に関する情報にアクセスするたびに同じ情報にアクセスするようにすることができる。情報は、情報が全ての本について一様であるようにＸＭＬスキーマによって構成され制約される。
【００７１】
背景技術でさらに述べたように、現在では、ＳＱＬ  ＳＥＲＶＥＲなどリレーショナルデータベースは、ＸＭＬデータを任意の他のデータと同様にリレーショナルテーブルに格納する能力を提供する。たとえば、１つまたは複数のＸＭＬ列を有するテーブルを生成し、ＸＭＬ値をこれらの列に格納し、ＸＭＬ列に索引を付け、これらの列のＸＭＬ値をクエリすることができる。さらに、ＸＭＬスキーマを使用してＸＭＬ列を「型付き」にし、その列のＸＭＬデータ値をスキーマに準拠させることができる。所与のＸＭＬスキーマに準拠するＸＭＬデータ値がリレーショナルデータベースで見つけられた場合、データはスキーマの輪郭（contour）に従ってアクセスされ、その結果、データを有効に解釈することができる。
【００７２】
しかし、１つだけではなく幾つかのスキーマに準拠するＸＭＬデータ値をリレーショナルデータベースの同じ列に格納しようとすると問題が起きる。１つの値が、本の題名、本の著者、出版社、著作権年などを特定する本に関するＸＭＬデータかもしれない。別の値は、ＤＶＤの題名、俳優および女優、監督、ジャンル、ランキング、公開された年などを特定するＤＶＤに関するＸＭＬデータかもしれない。本とＤＶＤの両方を、全メディア、すなわち本とＤＶＤに関する決定の実行に関連するデータ処理効率のために、同時に一定の列に格納することが望ましいと仮定すると、列のＸＭＬデータに関するルールを理解して従うにはどのスキーマを使用すべきであるかという疑問が生じる。以前は、１つのスキーマに準拠するデータだけを単一の列に格納することができた。列を識別するために使用されるスキーマは、列のトップで識別され、識別されたスキーマに準拠しないデータインスタンスはどれもエラーを発生させたであろう。
【００７３】
ＸＭＬスキーマコレクションの新しい概念では、複数の異なるスキーマに関連するＸＭＬデータをＸＭＬスキーマコレクションオブジェクトを介してリレーショナルデータベースの同じ列に格納することができるようにすることによってこの問題が解決される。ＸＭＬスキーマコレクションは、ＸＭＬスキーマ名前空間用コンテナとして働く第１クラスＳＱＬ  ＳＥＲＶＥＲオブジェクトである。ユーザは、ＸＭＬスキーマコレクションを使用してＸＭＬ列、パラメータ、オブジェクト変数に制約を与えることができる。それによって、ユーザはＸＭＬスキーマ名前空間のいずれかに準拠するＸＭＬデータのインスタンスに制約を与えるＸＭＬスキーマコレクションに格納することができるようになる。
【００７４】
したがって、ＸＭＬスキーマコレクションオブジェクトは、ＸＭＬスキーマ名前空間用コンテナである第１クラスＳＱＬオブジェクトである。非限定的な一実装形態では、それは３つの部分の名前によって識別される。ＸＭＬスキーマコレクションに対するＳＱＬ識別子の範囲は、リレーショナルスキーマであり、その中で識別子が生成される。各ＸＭＬスキーマコレクションは、複数のＸＭＬスキーマ名前空間ユニバーサルリソース識別子（ＵＲＩ）を含むことができる。ＸＭＬスキーマ名前空間はＸＭＬスキーマコレクションオブジェクト内で一意のものであり、ユーザはＸＭＬスキーマコレクションを使用してＸＭＬ列に制約を与えることができる。それによって、ユーザは、ドキュメントをＸＭＬスキーマコレクションに属するが潜在的に関連しないＸＭＬスキーマに対してドキュメントに制約を与えることができる。
【００７５】
上記で述べたように、本発明の一態様によれば、ＸＭＬスキーマの概念は、ＵＤＴのフィールドまで広げられる。すなわち、ＵＤＴのＸＭＬフィールドをサーバ側のＸＭＬスキーマコレクションにバインドすることができる。ＵＤＴのＸＭＬフィールドをサーバ側のＸＭＬスキーマコレクションにバインドすることは、ＸＭＬフィールドの各インスタンスがスキーマコレクションのＸＭＬスキーマの１つによって有効であることを指す。さらに、ストレージはＸＭＬスキーマに基づいて最適化されるが、ＸＭＬデータ型メソッドを使用するクエリは型推論のためのＸＭＬスキーマを使用して最適化される。
【００７６】
以下は．ＮＥＴ言語の型付ＸＭＬをサポートする要件である。第１に、クラスメンバを型付けるＸＭＬスキーマを実行時ではなくクラス定義時に指定することができる。すなわち、定義は宣言されなければならない。第２に、ＸＭＬリーダに関連するＸＭＬスキーマセットはダイナミックセットでなければならない。すなわち、セット内のスキーマを修正する（たとえば、Ｗｉｎｄｏｗｓ（登録商標）シェルのカスタムプロパティの生成に対応する新しい要素を追加する）ことができる。スキーマからの要素の削除を許可しなければならない。また、新しいＸＭＬスキーマをスキーマセットに追加する（たとえばＰｏｗｅｒＰｏｉｎｔなど新しくインストールしたアプリケーションがそれ自体のスキーマをスキーマセットに追加する）こともできる。さらに、スキーマをスキーマセットから除去する（たとえばＰｏｗｅｒＰｏｉｎｔをアンインストールし、そのスキーマをＸＭＬスキーマコレクションからドロップさせる）ことができる。スキーマを新しいバージョンと交換することもできる。
【００７７】
ＵＤＴのＸＭＬフィールドをサーバ側のＸＭＬスキーマコレクションにバインドするサポートを行うため、本発明の本実装形態では、「XmlSchemaCollection」と呼ばれ、その値がストリングである新しい属性を、背景技術の項で論じたSqlUDTField注釈を使用してSqlXmlメンバを指定することができる。この属性の値は、ＵＤＴの対応するＸＭＬフィールドに型を付けるサーバ側のＸＭＬスキーマコレクションの名前を示す。これは、（複数パート名とは対照的に）１パート名であり、それによってクラス定義を任意のデータベースおよび任意のリレーショナルスキーマと共に使用する柔軟性が与えられる。ネイティブＣＬＲコンテキストでは、SqlXmlメンバに関するSqlUDT注釈は無視される。あるいは、データベース、リレーショナルスキーマ、およびＸＭＬスキーマコレクション名を指定する３パート名でもよい。
【００７８】
本実装形態では、「XmlSchemaCollection」はSqlXmlメンバに許可された唯一の属性であり、他の属性が指定された場合、その属性が許可されない通常のエラーになる。他の属性をこのドキュメントで許可することができる。「XmlSchemaCollection」属性を指定するSqlXmlメンバＭの構文は以下の通りである。
【００７９】
【表１１】
2007519078.tif 000013
【００８０】
「XmlSchemaCollection」属性は、SqlXmlメンバＭと任意のＸＭＬスキーマのバインディングを生じない。アプリケーションがＭから検証XmlReaderを獲得することを望む場合、アプリケーションはＸＭＬスキーマを検証XmlReaderと関連付ける責任を有する。すなわち、SqlXmlクラスは、「XmlSchemaCollection」属性が存在しても、検証XmlReaderではなくＭに関する非検証XmlReaderを引き続き提供する。あるいは、属性によってＸＭＬスキーマのバインディングを発生させ、検証リーダを返すことができる。
【００８１】
「XmlSchemaCollection」属性の値として指定された名前XML-Schema-Collection-Nameを有するＸＭＬスキーマコレクションはサーバのメタデータに存在しなければならない。具体的には、UDTudt-nameが生成されたのと同じリレーショナルスキーマに存在しなければならない。スキーマバインディングは、udt-nameから「XML-Schema-Collection-Name」に確立される。XML-Schema-Collection-Nameが存在しない場合、CREATE TYPEステートメントはuser-defined type udt-nameを生成することができない。
【００８２】
本実装形態では、「"XmlSchemaCollection」属性について同じ値を有する２つのSqlXmlメンバがサーバ側でＸＭＬスキーマコレクションを共用する。それによって、アプリケーションがストレージを最適化することができる。この設計はより一般的であり、ＸＭＬスキーマコレクションを複数のアセンブリの複数のクラスの複数のメンバで共用することができるようになる。
【００８３】
ＣＬＲクラスのインスタンスは、「XmlSchemaCollection」属性仕様を有するSqlXmlメンバを含む全てのクラスメンバについて通常の方法で直列化される。こうしたSqlXmlメンバはＵＤＴインスタンスの型付ＸＭＬフィールドに格納される。すなわち、ＸＭＬスキーマコレクションに対する検証が挿入およびデータ修正中に発生する。
【００８４】
ＵＤＴ直列化では、各SqlXmlメンバのＸＭＬコンテンツだけが直列化され、XmlSchemaSetのＸＭＬスキーマは直列化されない。ＸＭＬスキーマは、サーバ側で個別にＸＭＬスキーマコレクションに追加され、またはそれから除去されなければならない。
【００８５】
非直列化中に、ＵＤＴのフィールドがＣＬＲクラスの対応するメンバにロードされる。型付ＸＭＬフィールドについて、インスタンスデータがSqlXmlオブジェクトとして公開される。関連するＸＭＬスキーマコレクションは使用されない。ユーザは、以下で論じるように、ＸＭＬスキーマコレクションをクライアント側のXmlSchemaSetにロードすることができる。
【００８６】
図９は、「XmlSchemaCollection」属性の使用を示すプログラムコードのリスティングの一例である。図９の定義では、user-defined type udtTypedEmpでＸＭＬフィールド「Resume」に型を付けることが望まれていると仮定する。Sq1UDTFie1d注釈は、ＵＤＴのTypedEmployee.TypedResumeに対応するＸＭＬフィールドに型を付けるサーバ側のＸＭＬスキーマコレクション名「myEmployeeSchema」を指定する。
以下の操作順序は、型付ＸＭＬフィールドを有するＵＤＴを生成するために使用される。
【００８７】
【表１２】
2007519078.tif 000014
【００８８】
XML schema collection myEmployeeSchemaは、user-defined type udtTypedEmployeeが生成された場合に、さもなければuser-defined typeが生成できなかった場合に、サーバ側に存在しなければならない。
【００８９】
ＸＭＬスキーマ検証
本実装形態では、ＸＭＬ  Ｓｃｈｅｍａ  Ｄｏｃｕｍｅｎｔ（ＸＳＤ）検証は、ＸＭＬコンテンツが検証XmlReaderを介して検索された場合、またはＸＭＬコンテンツが検証XmlWriterを使用して書き込まれた場合に、クライアント側で行われる。本実装形態では、サーバ側では、ＸＳＤ検証はＵＤＴインスタンスが列に挿入され、または更新された場合に行われる。したがって、この実装形態では、新しいSqlXmlオブジェクトが非検証XmlReaderを介して作成され、指定された「XmlSchemaCollection」属性を有するSqlXmlメンバに割り当てられた場合に、ＸＳＤ検証が発生しない。
【００９０】
さらなる例では、開発者または他のユーザがクライアント側の検証を行わずにTypedEmployeeクラスの新しいインスタンスを生成することを望むことができる。この場合、プログラムコードは、SqlUdt注釈のないSqlXmlメンバのものと正確に同じものである（図６を参照）。しかし、クライアント側でＸＭＬコンテンツの検証が望まれる場合、図１０の例示のプログラムコードのリスティングで示された方法で行うことができる。この場合は、XmlSchemaSet mySchemaSetが生成されて取り込まれ、ストリームを介して検証をするXmlWriter valWtrを生成するために使用される点で、クライアント側の検証を行わない場合とは異なる。valWtrを介して書き込まれたＸＭＬコンテンツはmySchemaSetに従って検証される。ストリームから獲得された非検証XmlReaderリーダを使用して、newEmp.TypedResumeに割り当てるためのSqlXmlの新しいインスタンスが作成される。理解されるように、コードを書き込む他の方法もある。たとえば、検証リーダを検証ライタの代りにクライアント側の検証に使用することができる。
【００９１】
本実装形態では、ＸＭＬ  Ｓｃｈｅｍａ検証の他の態様により、クラス定義から「XmlSchemaCollection」属性で指定されたＸＭＬスキーマコレクション名を獲得することができる。図１１の例示のプログラムコードのリスティングは、これを行う方法を示す。図で示したように、「XmlSchemaCollection」属性以外にＸＭＬ固有のものが存在しない。
【００９２】
図１１で示したように、ＸＭＬスキーマコレクション名がクラス定義から知られた後、ＸＭＬスキーマコレクションをサーバから検索してXmlSchemaSetオブジェクトに取り込むことができる。このオブジェクトを検証XmlReaderまたはXmlWriterの生成に使用される。図１２の例示のプログラムコードのリスティングは、この機構を示す。
【００９３】
ＸＭＬスキーマコレクションをサーバから検索するには、データベース接続が必要とされる。処理中プロバイダには、ＳｑｌＣｏｎｔｅｘｔオブジェクトから獲得される。処理中でないプロバイダには、アプリケーションが（データが検索されるものとは異なってもよい）接続を提供する。ＳＱＬステートメントは、パラメータとして指定されたＸＭＬスキーマ名を使用してカタログビューで実行される。組み込み関数XML SCHEMA COLLECTION()を使用してＸＭＬデータ型列のスキーマドキュメントを検索し、それがSqlXmlクラスに非直列化される。各スキーマドキュメントがSqlXmlオブジェクトから獲得されたXmlReaderを介してXmlSchemaSetオブジェクトに追加される。
【００９４】
SqlXml member TypedEmployee.TypedResumeから非検証リーダを獲得するため、プログラムコードは、SqlUdt注釈がないSqlXmlメンバに関するものと同じである（図７を参照）。図１３は、検証XmlReaderを獲得する方法を示す例示のプログラムコードのリスティングである。この例では、検証XmlReader valRdrが、SqlXml member TypedEmployee.TypedResumeから獲得された非検証リーダnonValRdrを介して生成される。valRdrから何かが読み取られる前に、XmlSchemaSet object mySchemaSetが追加される。検証型はＸＳＤに指定される。検証されたコンテンツを次に検証リーダを介して読み取ることができる。
【００９５】
既存のＸＭＬ値を更新する場合、本実装形態では、SqlUdt注釈なしのSqlXmlメンバについてのものと同じコードを使用してクライアント側の検証なしでSqlXmlメンバを更新することができる（図８を参照）。図１４の例示のプログラムコードのリスティングは、クライアント側の検証で更新を行う方法を示す。ＸＭＬスキーマコレクションは、サーバからXmlSchemaSet object mySchemaSet内に検索される。これを使用して、ストリーム上に検証XmlWriter valWtrが生成される。ＸＭＬコンテンツがvalWtrに書き込まれ、非検証XmlReaderがストリームから獲得され、TypedEmp.TypedResumeにリーダから作成された新しいSqlXmlオブジェクトが割り当てられる。
【００９６】
ＵＤＴのＸＭＬフィールドの操作
また本発明によれば、ＵＤＴのＸＭＬフィールドにクエリし更新することが可能である。たとえば、以下のように、employee table tabEmployee（上記の例を参照）のＸＭＬフィールドResumeにクエリすることができる。
【００９７】
【表１３】
2007519078.tif 000015
【００９８】
式EmpCoLResumeは、ＵＤＴのＸＭＬデータ型フィールドを導き、ＸＭＬデータ型の「クエリ」および「値」の関数を使用してＸＭＬインスタンスにドリルダウンすることができる。非ＸＭＬフィールドは、通常の方法でアクセスされる。このクエリは、user-defined type udtEmpの関数AnnualSalary()の呼出しも示す。
【００９９】
更新の一例として、ファーストネームが「John」である従業員のジップコードを98052に変更すると仮定する。この更新は、以下のステートメントを使用して行うことができる。
【０１００】
【表１４】
2007519078.tif 000016
【０１０１】
以上で示したように、本発明は、全てユーザ定義型（ＵＤＴ）の単一のインスタンス内の構造化、半構造化、および非構造化データをモデル化するフレームワークおよび方法論を提供する。具体的には、本発明は、ＸＭＬデータモデルをＵＤＴのフィールドに拡張する。したがって、ドキュメント順序およびドキュメント構造などＸＭＬデータモデルのプロパティを、ＵＤＴのインスタンス内に保存することができる。さらに上記に記載したように、ＸＭＬデータのコンテンツモデルを、任意選択でＵＤＴのＸＭＬフィールドに関連するＸＭＬスキーマドキュメントを使用して記述することができる。
【０１０２】
さらに、ＵＤＴがマネージドコードのクラスによって定義されているため、オブジェクト挙動を表すコード（すなわちマネージドコードのオブジェクトを呼び出すことができるメソッド）をＵＤＴに追加して、ＵＤＴのＸＭＬフィールド並びに非ＸＭＬフィールドで動作できるようにする。それによって、フレームワークがビジネス論理をＸＭＬデータに追加することができるようになる。図１５は、挙動をＵＤＴを定義するＣＬＲクラスに追加して、型SqlXmlを定義するフィールドで挙動を実装することができる方法を示す例示のコードのリスティングである。この例では、特定のｅＸｓｔｅｎｓｉｂｌｅ  Ｓｔｙｌｅｓｈｅｅｔ  Ｌａｎｇｕａｇｅ（ＸＳＬ）ファイルに従ってResume(XML)データを変換する挙動が追加される。図で示したように、挙動は、クラスEmployeeに追加されたメソッドTransformXml()によって実装される。変換された値は、ＸＭＬデータ型SqlXmlとして返される。図の下部でＳＱＬステートメントによって示されているように、このメソッドをEmployeeクラスから生成されたＵＤＴのインスタンスに呼び出すことができる。したがって、この例で示されているように、ＸＭＬデータを含むＵＤＴのフィールドで挙動を実装することができる。実装することができる挙動は実質的に無限であり、ビジネス論理をＸＭＬデータに追加するための強力なツールが提供される。
【０１０３】
上記から明らかなように、本発明の様々なシステム、方法、および態様の全てまたは一部を、ハードウェア、ソフトウェア、またはその組合せで実装することができる。ソフトウェアで実装される場合、本発明の方法および装置、または本発明の幾つかの態様またはその一部をプログラムコード（すなわち命令）の形態で実装することができる。このプログラムコードは、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、磁気テープ、フラッシュメモリ、ハードディスクドライブ、または任意の他の機械可読ストレージメディアを非限定的に含む、磁気、電気、または光ストレージメディアなど、コンピュータ可読メディアに格納することができる。プログラムコードがロードされ、コンピュータまたはサーバなどの機械によって実行された場合、機械は本発明を実装するための装置になる。プログラムコードを実装するコンピュータは、通常、プロセッサ、（揮発性および不揮発性メモリおよび／またはストレージ要素を含む）プロセッサによって読み取り可能なストレージメディア、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備える。プログラムコードは、高レベル手続きまたはオブジェクト指向プログラミング言語で実装することができる。あるいは、プログラムコードはアセンブリまたは機械言語で実装することもできる。いずれの場合も、言語はコンパイルまたは翻訳された言語でもよい。
【０１０４】
本発明は、ローカルエリアネットワーク、広域ネットワーク、インターネットまたはイントラネットを含むネットワーク上で、電気配線またはケーブル、光ファイバを介するなど、ある伝送メディアを介して、または他の形態の伝送によって伝送されるプログラムコードの形態でも実装することができ、プログラムコードが、コンピュータなど機械によってロードされ実行される場合、その機械は、本発明を実装するための装置になる。
【０１０５】
汎用プロセッサで実装される場合、プログラムコードをプロセッサと組み合わせて、特定の論理回路に類似して動作する独自の装置を提供することができる。
【０１０６】
さらに、本発明は、コンピュータネットワークの一部として、または分散コンピューティング環境で使用することができる、任意のコンピュータ、または他のクライアントもしくはサーバデバイスと共に実装することができる。この点で、本発明は、任意の数のメモリまたは記憶装置、および任意の数のアプリケーション並びに任意の数の記憶装置またはボリュームにわたって生じ、本発明による、データベースストアに永続するオブジェクトのためのプロセスと併せて使用することができるプロセスを有する任意のコンピュータシステムまたは環境に適している。本発明は、リモートまたはローカルストレージを有する、ネットワーク環境または分散コンピューティング環境に配置されたサーバコンピュータおよびクライアントコンピュータを有する環境に適用することができる。本発明は、プログラミング言語機能、リモートまたはローカルサービスと併せて、情報を生成し、送受信するための翻訳および実行能力を有する独立型コンピューティングデバイスに適用することもできる。
【０１０７】
分散コンピューティングは、コンピューティングデバイスおよびシステム間の交換によって、コンピュータリソースおよびサービスの共用を容易にするものである。こうしたリソースおよびサービスには、情報の交換、キャッシュストレージ、およびファイル用ディスクストレージが含まれるが、それだけに限定されない。分散コンピューティングは、ネットワークの接続性をうまく利用して、クライアントがその集合的パワーを活用して企業全体に利益をもたらすことができるようにする。この点で、様々なデバイスが、本発明のオブジェクト永続メソッドと共に行われる処理に関係するアプリケーション、オブジェクト、またはリソースを有することができる。
【０１０８】
図１６は、例示のネットワークまたは分散コンピューティング環境の概略図を提供する。この分散コンピューティング環境には、コンピューティングオブジェクト１０ａ、１０ｂなど、およびコンピューティングオブジェクトまたはデバイス１１０ａ、１１０ｂ、１１０ｃなどが含まれる。こうしたオブジェクトは、プログラム、メソッド、データストア、プログラマブルな論理などを含むことができる。オブジェクトは、ＰＤＡ、テレビジョン、ＭＰ３プレーヤ、パーソナルコンピュータなど同じまたは異なるデバイスの一部を含むことができる。各オブジェクトは、通信ネットワーク１４によって他のオブジェクトと通信することができる。このネットワーク自体は、図１６のシステムにサービスを提供する他のコンピューティングオブジェクトまたはコンピューティングデバイスを含むことができ、それ自体が複数の相互接続ネットワークを表すことができる。本発明の一態様によれば、各オブジェクト１０ａ、１０ｂなど、または１１０ａ、１１０ｂ、１１０ｃなどは、ＡＰＩ、または他のオブジェクト、ソフトウェア、ファームウェア、および／またはハードウェアを活用して、本発明のオブジェクト永続メソッドの実装に使用されるプロセスの使用を要求することができるアプリケーションを含むことができる。
【０１０９】
理解されるように、１１０ｃなどオブジェクトは、他のコンピューティングデバイス１０ａ、１０ｂなど、または１１０ａ、１１０ｂなどでホストされてもよい。したがって、図で示した物理環境では、接続されたデバイスがコンピュータとして示されているが、こうした図は単に例示であり、代替としてＰＤＡ、テレビジョン、ＭＰ３プレーヤなど様々なディジタルデバイス、インターフェース、ＣＯＭオブジェクトなどソフトウェアオブジェクトを備えた物理環境の図を示しまたは説明することもできる。
【０１１０】
分散コンピューティング環境をサポートする多様なシステム、コンポーネント、およびネットワーク構成がある。たとえば、コンピューティングシステムを共に配線式または無線システムによって、ローカルネットワークまたは広域分散ネットワークによって接続することができる。現在、ネットワークの多くがインターネットに結合されており、インターネットは広範に分散されたコンピューティングのインフラストラクチャを提供し、多様なネットワークを取り囲んでいる。任意のインフラストラクチャを本発明に関連付けられた例示の通信に使用することができる。
【０１１１】
通常インターネットは、コンピュータネットワーキングの技術分野で周知の、一式のプロトコルＴＣＰ／ＩＰを使用するネットワークおよびゲートウェイのコレクションを指す。ＴＣＰ／ＩＰは、「Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ」の頭字語である。インターネットは、ユーザが１つまたは複数のネットワークを介して対話し情報を共用することができるようにするネットワーキングプロトコルを実装するコンピュータによって相互接続された地理的に分散されたリモートコンピュータネットワークのシステムとして説明することができる。こうした広範囲に及ぶ情報を共有するため、インターネットなどリモートネットワークは、全般的に開放型システムに発展しており、そのため、開発者は、本質的に制限されずに専用のオペレーションまたはサービスを行うためのソフトウェアアプリケーションを設計することができる。
【０１１２】
したがって、ネットワークインフラストラクチャによって、クライアント／サーバ、ピアツーピア、またはハイブリッドアーキテクチャなどネットワークトポロジのホストが可能になる。「クライアント」は、そのクラスまたはグループが関係しない他のクラスまたはグループのサービスを使用するクラスまたはグループのメンバである。したがって、計算ではクライアントはプロセスである。すなわち概して他のプログラムによって提供されるサービスを要求する命令またはタスクのセットである。クライアントプロセスは、他のプログラムまたはサービス自体に関する作業の詳細を「知る」必要なく、要求したサービスを使用する。クライアント／サーバアーキテクチャ、具体的にはネットワークシステムでは、クライアントは通常他のコンピュータ、たとえばサーバによって提供される共用ネットワークリソースにアクセスするコンピュータである。図１６の例では、コンピュータ１１０ａ、１１０ｂ、などが、クライアントであり、コンピュータ１０ａ、１０ｂなどがサーバであると考えることができるが、環境によってどのコンピュータがクライアント、サーバ、またはその両方であると考えてもよい。任意のこうしたコンピューティングデバイスが、本発明のオブジェクト永続技法に関係する方法でデータを処理することができる。
【０１１３】
サーバは通常、インターネットなど、リモートまたはローカルネットワークを介してアクセス可能なリモートコンピュータシステムである。クライアントプロセスは、第１のコンピュータシステムでアクティブになり、サーバプロセスは第２のコンピュータシステムでアクティブになることができ、互いに通信メディアを介して通信し、それによって分散された機能を提供し、複数のクライアントがサーバの情報収集能力を利用することができるようになされている。本発明の永続機構に従って使用される任意のソフトウェアオブジェクトを複数のコンピューティングデバイスに分散することができる。
【０１１４】
１つまたは複数のクライアントおよび１つまたは複数のサーバは、プロトコル層で提供される機能を使用して互いに通信することができる。たとえば、ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＨＴＴＰ）はＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ（ＷＷＷ）、または「ｔｈｅ  Ｗｅｂ」と共に使用される一般のプロトコルである。通常、Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ（ＩＰ）アドレスなどコンピュータネットワークアドレス、またはＵｎｉｖｅｒｓａｌ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ（ＵＲＬ）など他のリファレンスを使用して、サーバまたはクライアントコンピュータを互いに識別することができる。ネットワークアドレスはＵＲＬアドレスと呼ぶこともできる。任意の使用可能な通信メディアを介して通信を提供することができる。
【０１１５】
したがって、図１６は本発明を使用することができる、サーバがネットワーク／バスを介してクライアントコンピュータと通信している、例示のネットワーク化または分散環境を示す。本発明によれば、ネットワーク／バス１４は、ポータブルコンピュータ、ハンドヘルドコンピュータ、シンクライアント、ネットワーク化アプリケーション、またはＶＣＲ、ＴＶ、オーブン、ライト、ヒータなど他のデバイスなどの幾つかのクライアントまたはリモートコンピューティングデバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどを備えた、ＬＡＮ、ＷＡＮ、イントラネット、インターネット、または任意の他のネットワークメディアでもよい。したがって本発明を、永続オブジェクトを維持することが望ましいものに関連して任意のコンピューティングデバイスに適用することができることが企図されている。
【０１１６】
たとえば、通信ネットワーク／バス１４がインターネットであるネットワーク環境では、サーバ１０ａ、１０ｂなどが、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどがＨＴＴＰなど任意の幾つかの周知のプロトコルを介して通信するサーバでもよい。サーバ１０ａ、１０ｂなどは、分散コンピューティング環境の特性であるように、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどとして働くこともできる。
【０１１７】
通信は、必要に応じて配線式または無線でもよい。クライアントデバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどは、通信ネットワーク／バス１４を介して通信してもしなくてもよく、それと関連する独立した通信機関を有することができる。たとえば、ＴＶまたはＶＣＲの場合、その制御部に対するネットワーク化された側面があってもなくてもよい。各クライアントコンピュータ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどおよびサーバコンピュータ１０ａ、１０ｂなどは、様々なアプリケーションプログラムモジュールまたはオブジェクト１３５、およびファイルまたはデータストリームを格納してファイルまたはデータストリームの一部をダウンロードし、伝送し、または移送することができる様々なタイプのストレージ要素またはオブジェクトへの接続またはアクセスを備えることができる。どのコンピュータ１Ｏａ、１０ｂ、１１０ａ、１１０ｂなどもデータベース、メモリ、または本発明により処理されたデータを格納する他のストレージ要素２０の保守および更新に対応することができる。したがって、本発明は、コンピュータネットワーク／バス１４にアクセスし対話することができるクライアントコンピュータ１１０ａ、１１０ｂなど、およびクライアントコンピュータ１１０ａ、１１０ｂなどと対話することができるサーバコンピュータ１０ａ、１０ｂなど、および他の同様のデバイス、並びにデータベース２０を有するコンピュータネットワーク環境で利用することができる。
【０１１８】
図１７および以下の論述は、本発明を実施することができる適切なコンピューティングデバイスの簡単な全般的説明を提供するものである。たとえば、図１６で示した任意のクライアントおよびサーバコンピュータまたはデバイスはこの形態をとることができる。しかし理解されるように、ハンドヘルド、ポータブル、および他の全種類の、すなわちコンピューティング環境のどこでもデータを生成、処理、受信かつ／または送信することができるコンピューティングデバイスおよびコンピューティングオブジェクトは、本発明と共に使用されることが企図されている。汎用コンピュータを以下に記載するが、これは単なる一例であり、本発明は、ネットワーク／バス相互運用性および対話を有するシンクライアントで実装することもできる。したがって、本発明は、たとえばクライアントデバイスが、電気器具に配置されたオブジェクトなど、ネットワーク／バスに対する単にインターフェースとして働くネットワーク環境に、非常に小さい、または最小のクライアントリソースが関与するネットワーク化されホストされたサービスの環境で実装することができる。本質的に、データを格納し、そこからデータを検索し、または他のコンピュータに伝送することができる場所が、本発明のオブジェクト永続メソッドの操作に望ましい、または好ましい環境である。
【０１１９】
必ずしも必要ではないが、本発明は、デバイスまたはオブジェクトのサービスの開発者が使用するための、かつ／または本発明と共に動作するアプリケーションまたはサーバソフトウェアに含まれた、オペレーティングシステムを介して実装することもできる。ソフトウェアは、クライアントワークステーション、サーバ、または他のデバイスなど、１つまたは複数のコンピュータによって実行されるプログラムモジュールなど、コンピュータで実行可能な命令の汎用コンテキストで記述することができる。一般に、プログラムモジュールには、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データストラクチャなどが含まれる。通常、プログラムモジュールの機能を様々な実装形態で望まれるように組合せ、または分散することができる。さらに、本発明は、他のコンピュータシステム構成およびプロトコルで実装することができる。本発明と共に使用するのに適した他の周知のコンピューティングシステム、環境、および／または構成には、パーソナルコンピュータ（ＰＣ）、現金自動預け払い機、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブルな消費者電子装置、ネットワークＰＣ、電気器具、ライト、環境制御要素、ミニコンピュータ、メインフレームコンピュータなどが含まれるが、それだけに限定されない。
【０１２０】
図１７は、本発明を実装することができる、適切なコンピューティングシステム環境１００の一例を示す。上記で明確に記載したが、コンピューティングシステム環境１００は適したコンピューティング環境の単なる一例であり、本発明の使用または機能性の範囲のいかなる限定も示唆するものではない。コンピューティング環境１００は、例示の操作環境１００で示したコンポーネントの任意のものまたはその組合せに関するいかなる依存性または要件も有していないと考えられるべきである。
【０１２１】
図１７を参照すると、本発明を実施するための例示のシステムには、コンピュータ１１０の形態の汎用コンピューティングデバイスが含まれる。
【０１２２】
コンピュータ１１０のコンポーネントには、処理装置１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１が含まれるが、それだけに限定されない。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および任意の多様なバスアーキテクチャを使用するローカルバスを含む、任意の幾つかのタイプのバス構造でもよい。一例であって限定するものではないが、こうしたアーキテクチャには、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、および（Ｍｅｚｚａｎｉｎｅバスとしても知られている）Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスが含まれる。
【０１２３】
コンピュータ１１０は、通常、多様なコンピュータ可読メディアを含む。コンピュータ可読メディアは、コンピュータ１１０でアクセスすることができ、揮発性と不揮発性メディア、リムーバブルとノンリムーバブルメディアの両方を含む任意の使用可能なメディアでもよい。一例であって限定するものではないが、コンピュータ可読メディアは、コンピュータストレージメディアおよび通信メディアを含むことができる。コンピュータストレージメディアには、任意の方法または技法で実装されてコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための揮発性と不揮発性、リムーバブルとノンリムーバブルメディアの両方が含まれる。コンピュータストレージメディアには、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技法、ＣＤ−ＲＯＭ、ディジタルビデオディスク（ＤＶＤ）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは所望の情報を記憶するのに使用することができ、コンピュータ１１０によってアクセス可能な任意の他のメディアが含まれるが、それだけに限定されない。通信メディアは通常、コンピュータ可読命令、データ構造、プログラムモジュール、または搬送波もしくは他の輸送機構などの変調データ信号の他のデータを実装し、任意の情報転送メディアを含む。用語「変調データ信号」は、１つまたは複数の特性のセットを有する信号、または情報を信号に復号化するように変更された信号を指す。一例であって限定するものではないが、通信メディアには、配線式ネットワークまたは直接配線接続など配線式メディア、および音響、ＲＦ、赤外線、および他の無線メディアなど無線メディアが含まれる。上記の任意の組合せもコンピュータ可読メディアの範囲に含まれる。
【０１２４】
システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２など揮発性および／または不揮発性メモリの形態のコンピュータストレージメディアを含む。始動中などにコンピュータ１１０内の要素の間で情報を転送する助けをする基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）は、通常、ＲＯＭ１３１に格納される。ＲＡＭ１３２は、通常、処理装置１２０によって即座にアクセス可能、かつ／または現在作動中のデータおよび／またはプログラムモジュールを含む。
【０１２５】
一例であって限定するものではないが、図１７は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【０１２６】
コンピュータ１１０は、他のリムーバブル／ノンリムーバブル、揮発性／不揮発性コンピュータストレージメディアを含むこともできる。図８は、単に一例として、ノンリムーバブルな不揮発性磁気メディアから読み取りそれに書き込むためのハードディスクドライブ１４１、リムーバブルな不揮発性磁気ディスク１５２から読み取りそれに書き込むための磁気ディスクドライブ１５１、およびＣＤ  ＲＯＭ、ＤＶＤ−ＲＷまたは他の光メディアなどリムーバブルな不揮発性光ディスク１５６から読み取りそれに書き込むための光ディスクドライブ１５５を示す。例示の動作環境で使用することができる他のリムーバブル／ノンリムーバブル、揮発性／不揮発性コンピュータストレージメディアには、限定的ではないが、磁気テープカセット、フラッシュメモリカード、ディジタルビデオディスク、ディジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ１４１は通常、インターフェース１４０などノンリムーバブルメモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常、インターフェース１５０などリムーバブルメモリインターフェースを介してシステムバス１２１に接続される。
【０１２７】
上記で論じ図１７で示した、ドライブ、およびその関連するコンピュータストレージメディアは、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ１１０用の他のデータの記憶域を提供する。図１７では、たとえば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして示されている。こうしたコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じでも異なるものでもよいことを留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７は、これらが最小限に異なる複写であることを示すために、この図では異なる番号が付けられている。ユーザは、キーボード１６２およびマウス、トラックボール、またはタッチパッドなどポインティングデバイス１６１などの入力デバイスを介してコンピュータ１１０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれる。上記その他の入力デバイスはしばしば、システムバス１２１に結合されたユーザ入力インターフェース１６０を介して処理装置１２０に接続されるが、並列ポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）など、他のインターフェースおよびバス構造によって接続されてもよい。グラフィックスインターフェース１８２もシステムバス１２１に接続することができる。１つまたは複数のグラフィックス処理装置（ＧＰＵ）１８４はグラフィックスインターフェース１８２と通信することができる。モニタ１９１または他のタイプのディスプレイデバイスも、ビデオインターフェース１９０などインターフェースを介してシステムバス１２１に接続することができる。ビデオインターフェース１９０はビデオメモリ１８６と通信する。モニタ１９１の他に、コンピュータはしばしば、出力周辺インターフェース１９５を介して接続することができるスピーカ１９７およびプリンタ１９６など、他の周辺出力デバイス（図示せず）を含むこともできる。
【０１２８】
コンピュータ１１０は、リモートコンピュータ１８０など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワークまたは分散環境で動作することができる。
【０１２９】
リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、同位デバイスまたは他の共通ネットワークノードでもよく、図１７ではメモリストレージデバイス１８１だけが示されているが、通常はコンピュータ１１０について上記に記載した要素の多くまたは全てを含む。図１７で示した論理接続には、ローカルエリアネットワーク（ＬＡＮ）１７１、および広域ネットワーク（ＷＡＮ）１７３が含まれるが、他のネットワーク／バスを含むこともできる。こうしたネットワーク環境は、家庭、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットでは一般的である。
【０１３０】
ＬＡＮネットワーク環境で使用される場合、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境で使用される場合、コンピュータ１１０は通常、モデム１７２または他の手段を備えて、インターネットなどＷＡＮ１７３を介して通信を確立する。モデム１７２は、内蔵型または外部のものでもよく、ユーザ入力インターフェース１６０または他の適切な機構を介してシステムバス１２１に接続される。ネットワーク化環境では、パーソナルコンピュータ１１０について示したプログラムモジュールまたはその一部をリモートメモリストレージデバイスに格納することができる。一例であって限定するものではないが、図１７は、メモリデバイス１８１に常駐するものとしてリモートアプリケーションプログラム１８５を示している。理解されるように、図で示したネットワーク接続は例示のものであり、コンピュータ間の通信リンクを確立する他の手段を使用することもできる。
【０１３１】
上記で示したように、本発明は、ＸＭＬデータをユーザ定義型のインスタンスのフィールドとしてデータベースストア内に格納し検索するシステムおよび方法を対象とする。理解されるように、本発明の広範な概念から逸脱することなく、上記に記載した実装形態に変更を加えることができる。たとえば、本発明の一実装形態をＭｉｃｒｏｓｏｆｔのＳＱＬ  ＳＥＲＶＥＲデータベース管理システムで実装されるものとして上記に記載したが、理解されるように、本発明は、ユーザ定義型の生成をサポートする任意のデータベース管理システムで実装することができる。したがって理解されるように、本発明は、開示した特定の実装形態に限定されるものではなく、頭記の特許請求の範囲で記載されたように、全ての修正を本発明の精神および範囲内に包含するものとする。
【図面の簡単な説明】
【０１３２】
【図１】ユーザ定義型のためのマネージドコードクラス定義を示す例示のコードセグメントを示す図である。
【図２】マネージドコードでインスタンス生成されたユーザ定義型のインスタンスの直列化および非直列化を示すブロック図である。
【図３】ユーザ定義型のオブジェクトが永続するデータベーステーブルを示す図である。
【図４】本発明の一実装形態による、SqlXmlクラスのメンバを示す表である。
【図５】本発明の一実装形態による、SqlXmlフィールドを有するＣＬＲクラス「Employee」の例示のプログラムコードのリスティングを示す図である。
【図６】本発明の一実装形態による、．ＮＥＴプログラミング言語でEmployeeクラスの新しいインスタンスを生成し、それを取り込む方法を示す例示のプログラムコードのリスティングを示す図である。
【図７】本発明の一実装形態による、ＸＭＬコンテンツを解析するためにEmployeeクラスのインスタンスからXmlReaderを獲得する方法を示す例示のプログラムコードのリスティングを示す図である。
【図８】本発明の一実装形態による、．ＮＥＴプログラミング言語でEmployeeクラスのインスタンスを更新する方法を示す例示のプログラムコードのリスティングを示す図である。
【図９】本発明の一実装形態による、「XmlSchemaCollection」属性の使用を示す例示のプログラムコードのリスティングを示す図である。
【図１０】本発明の一実装形態による、クライアント側でＸＭＬコンテンツの検証を行う方法を示す例示のプログラムコードのリスティングを示す図である。
【図１１】本発明の一実装形態による、クラス定義から「XmlSchemaCollection」属性で指定されたＸＭＬスキーマコレクション名を獲得する方法を示す例示のプログラムコードのリスティングを示す図である。
【図１２】本発明の一実装形態による、ＸＭＬスキーマコレクション名が知られた後に、ＸＭＬスキーマコレクションをサーバから検索する方法を示す例示のプログラムコードのリスティングを示す図である。
【図１３】本発明の一実装形態による、XmlReaderの検証を行う方法を示す例示のプログラムコードのリスティングを示す図である。
【図１４】本発明の一実装形態による、クライアント側の検証の更新を行う方法を示す例示のプログラムコードのリスティングを示す図である。
【図１５】本発明の一実装形態による、ＵＤＴを定義するＣＬＲクラスに挙動を追加してＵＤＴのＸＭＬデータフィールド上の挙動を実装することができる方法を示す例示のコードのリスティングを示す図である。
【図１６】本発明を実装することができる様々なコンピューティングデバイスを有する例示のネットワーク環境を示すブロック図である。
【図１７】本発明を実装することができる例示のコンピューティングデバイスを示すブロック図である。
【図１】
2007519078.tif 000017
【図２】
2007519078.tif 000018
【図３】
2007519078.tif 000019
【図４】
2007519078.tif 000020
【図５】
2007519078.tif 000021
【図６】
2007519078.tif 000022
【図７】
2007519078.tif 000023
【図８】
2007519078.tif 000024
【図９】
2007519078.tif 000025
【図１０】
2007519078.tif 000026
【図１１】
2007519078.tif 000027
【図１２】
2007519078.tif 000028
【図１３】
2007519078.tif 000029
【図１４】
2007519078.tif 000030
【図１５】
2007519078.tif 000031
【図１６】
2007519078.tif 000032
【図１７】
2007519078.tif 000033