(57)【要約】  本発明の様々な実施形態は、ユーザ定義タイプの構造を記述する情報ならびにユーザ定義タイプ自体と別のユーザ定義タイプ（サブタイプまたはスーパータイプ／ベースタイプ）の間の継承関係を記述する情報を含む少なくとも１つのユーザ定義タイプに関する拡張可能タイプシステムを有するデータベースを対象とする。ある実施形態では、ユーザ定義タイプは、例えば共通言語ランタイム（ＣＬＲ）ステートメント、Ｃ、Ｃ＋＋、およびＣ＃（「Ｃシャープ」）のステートメント、ならびに／あるいはビジュアルベーシックステートメントなどの、シーケンシャルクエリ言語（ＳＱＬ）ステートメント以外の何らかで定義される。いずれにしても、いくつかの実施形態はさらに、データベースがユーザ定義タイプの前記データベースへの明示的登録によって２つのユーザ定義タイプ間の継承関係を認識するシステムを対象とする。
2007522558.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのユーザ定義タイプについての拡張可能タイプシステムを有するデータベースを備えたシステムであって、前記少なくとも１つのユーザ定義タイプは、
前記少なくとも１つのユーザ定義タイプの構造を記述するための情報と、
それ自体（前記少なくとも１つのユーザ定義タイプ）と第２のユーザ定義タイプとの間の継承関係を記述するための情報と
を備えたことを特徴とするシステム。
【請求項２】
前記第２のユーザ定義タイプは、前記少なくとも１つのユーザ定義タイプのサブタイプであることを特徴とする請求項１に記載のシステム。
【請求項３】
前記第２のユーザ定義タイプは、前記少なくとも１つのユーザ定義タイプのスーパータイプであることを特徴とする請求項１に記載のシステム。
【請求項４】
前記少なくとも１つのユーザ定義タイプは、シーケンシャルクエリ言語（ＳＱＬ）ステートメント以外の何らかで定義されることを特徴とする請求項１に記載のシステム。
【請求項５】
前記少なくとも１つのユーザ定義タイプは、共通言語ランタイム（ＣＬＲ）ステートメントによって定義されることを特徴とする請求項４に記載のシステム。
【請求項６】
前記少なくとも１つのユーザ定義タイプは、Ｃ、Ｃ＋＋、およびＣ＃（「Ｃシャープ」）のプログラミング言語のグループからのプログラミング言語中のステートメントによって定義されることを特徴とする請求項４に記載のシステム。
【請求項７】
前記少なくとも１つのユーザ定義タイプは、ビジュアルベーシックステートメントによって定義されることを特徴とする請求項４に記載のシステム。
【請求項８】
前記データベースは、前記少なくとも１つのユーザ定義タイプと前記第２のユーザ定義タイプとの間の前記継承関係について知っていることを特徴とする請求項１に記載のシステム。
【請求項９】
前記データベースは、前記少なくとも１つのユーザ定義タイプを前記データベースに明示的登録することにより、前記少なくとも１つのユーザ定義タイプと前記第２のユーザ定義タイプとの間の前記継承関係について知っていることを特徴とする請求項８に記載のシステム。
【請求項１０】
タイプをアセンブリにコンパイルするためのサブシステムと、
前記アセンブリを前記データベースに登録するためのサブシステムと、
前記アセンブリの前記タイプを前記データベースに登録するためのサブシステムと、
前記タイプを使用するためのサブシステムと
を備えたことを特徴とする請求項９に記載のシステム。
【請求項１１】
データベースにおいて、少なくとも１つのユーザ定義タイプについての拡張可能タイプシステムを提供するための方法であって、
前記少なくとも１つのユーザ定義タイプ中に前記少なくとも１つのユーザ定義タイプの構造を記述するための情報を格納することと、
前記少なくとも１つのユーザ定義タイプ中に前記少なくとも１つのユーザ定義タイプと第２のユーザ定義タイプとの間の継承関係を記述するための情報を格納することと
を備えることを特徴とする方法。
【請求項１２】
前記少なくとも１つのユーザ定義タイプのサブタイプである前記第２のユーザ定義タイプを作成することをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記第２のユーザ定義タイプのサブタイプである前記少なくとも１つのユーザ定義タイプを作成することをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１４】
シーケンシャルクエリ言語（ＳＱＬ）ステートメント以外の何らかを使用して、前記少なくとも１つのユーザ定義タイプを定義することをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１５】
共通言語ランタイム（ＣＬＲ）ステートメントを使用して、前記少なくとも１つのユーザ定義タイプを定義することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１６】
Ｃ、Ｃ＋＋、およびＣ＃（「Ｃシャープ」）のプログラミング言語のグループからのプログラミング言語を使用して、前記少なくとも１つのユーザ定義タイプを定義することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１７】
ビジュアルベーシックステートメントを使用して前記少なくとも１つのユーザ定義タイプを定義することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１８】
前記少なくとも１つのユーザ定義タイプと前記第２のユーザ定義タイプとの間の前記継承関係について前記データベースに知らせることを備えることを特徴とする請求項１１に記載の方法。
【請求項１９】
前記少なくとも１つのユーザ定義タイプと前記第２のユーザ定義タイプとの間の前記継承関係について前記データベースに知らせることは、前記少なくとも１つのユーザ定義タイプの前記データベースへの明示的登録によって行なわれることを特徴とする請求項１８に記載の方法。
【請求項２０】
タイプをアセンブリにコンパイルすることと、
前記アセンブリを前記データベースに登録することと、
前記アセンブリの前記タイプを前記データベースに登録することと、
前記タイプを使用することと
を備えることを特徴とする請求項１９に記載の方法。
【請求項２１】
少なくとも１つのユーザ定義タイプについての拡張可能タイプシステムを有するデータベースについてのコンピュータ可読命令を備えたコンピュータ可読媒体であって、
前記ユーザ定義タイプ中に前記少なくとも１つのユーザ定義タイプの構造を記述する情報を格納するための命令と、
前記少なくとも１つのユーザ定義タイプ中に前記少なくとも１つのユーザ定義タイプと第２のユーザ定義タイプとの間の継承関係を記述するための情報を格納するための命令と
を備えたことを特徴とするコンピュータ可読命令。
【請求項２２】
前記第２のユーザ定義タイプが前記少なくとも１つのユーザ定義タイプのサブタイプである命令をさらに備えたことを特徴とする請求項２１に記載のコンピュータ可読命令。
【請求項２３】
前記第２のユーザ定義タイプが前記少なくとも１つのユーザ定義タイプのスーパータイプである命令をさらに備えたことを特徴とする請求項２１に記載のコンピュータ可読命令。
【請求項２４】
前記少なくとも１つのユーザ定義タイプがシーケンシャルクエリ言語（ＳＱＬ）ステートメント以外の何らかで定義される命令をさらに備えたことを特徴とする請求項２１に記載のコンピュータ可読命令。
【請求項２５】
前記少なくとも１つのユーザ定義タイプが共通言語ランタイム（ＣＬＲ）ステートメントによって定義される命令をさらに備えたことを特徴とする請求項２４に記載のコンピュータ可読命令。
【請求項２６】
前記少なくとも１つのユーザ定義タイプがＣ、Ｃ＋＋、およびＣ＃（「Ｃシャープ」）のプログラミング言語のグループからのプログラミング言語でのステートメントで定義される命令をさらに備えたことを特徴とする請求項２４に記載のコンピュータ可読命令。
【請求項２７】
前記少なくとも１つのユーザ定義タイプがビジュアルベーシックステートメントで定義される命令をさらに備えたことを特徴とする請求項２４に記載のコンピュータ可読命令。
【請求項２８】
前記データベースが前記少なくとも１つのユーザ定義タイプと前記第２のユーザ定義タイプとの間の前記継承関係について知っている命令をさらに備えたことを特徴とする請求項２１に記載のコンピュータ可読命令。
【請求項２９】
前記少なくとも１つのユーザ定義タイプの前記データベースへの明示的登録により、前記データベースに前記少なくとも１つのユーザ定義タイプと前記第２のユーザ定義タイプとの間の前記継承関係について知らせる命令をさらに備えたことを特徴とする請求項２８に記載のコンピュータ可読命令。
【請求項３０】
タイプをアセンブリにコンパイルするための命令と、
前記アセンブリを前記データベースに登録するための命令と、
前記アセンブリの前記タイプを前記データベースに登録するための命令と、
前記タイプを使用するための命令と
をさらに備えたことを特徴とする請求項２９に記載のコンピュータ可読命令。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２００４年５月３日出願の米国特許出願第１０／８３７，９２９号明細書（整理番号３８４３）の優先権を主張するものであり、この特許出願は、２００４年２月１０日出願の米国特許出願第１０／７７５，２８２号明細書（整理番号ＭＳＦＴ−３０２９）の一部継続出願の優先権を主張するものであり、これらの開示全体が参照により本明細書に組み込まれる。
【０００２】
本願は、主題により、以下の同一出願人による出願で開示される発明に関連し、その内容全体が本願に組み込まれる。「SYSTEMS AND METHODS FOR REPRESENTING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM BUT INDEPENDENT OF PHYSICAL REPRESENTATION」という名称の２００３年８月２１日出願の米国特許出願第１０／６４７，０５８号明細書（整理番号ＭＳＦＴ−１７４８）、「SYSTEMS AND METHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICAL ORGANIZATION」という名称の２００３年８月２１日出願の米国特許出願第１０／６４６，９４１号明細書（整理番号ＭＳＦＴ−１７４９）、「SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という名称の２００３年８月２１日出願の米国特許出願第１０／６４６，９４０号明細書（整理番号ＭＳＦＴ−１７５０）、「SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A CORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という名称の２００３年８月２１日出願の米国特許出願第１０／６４６，６３２号明細書（整理番号ＭＳＦＴ−１７５１）、「SYSTEMS AND METHOD FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という名称の２００３年８月２１日出願の米国特許出願第１０／６４６，６４５号明細書（整理番号ＭＳＦＴ−１７５２）、「SYSTEMS AND METHODS FOR INTERFACING APPLICATION PROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM」という名称の２００３年８月２１日出願の米国特許出願第１０／６４６，５７５号明細書（整理番号ＭＳＦＴ−２７３３）、「STORAGE PLATFORM FOR ORGANIZING, SEARCHING, AND SHARING DATA」という名称の２００３年８月２１日出願の米国特許出願第１０／６４６，６４６号明細書（整理番号ＭＳＦＴ−２７３４）、「SYSTEMS AND METHODS FOR DATA MODELING IN AN ITEM-BASED STORAGE PLATFORM」という名称の２００３年８月２１日出願の米国特許出願１０／６４６，５８０号明細書（整理番号ＭＳＦＴ−２７３５）。
【０００３】
本発明は、コンピュータシステムのデータストレージに関し、より詳細には、データベースシステムで継承をユーザ定義タイプ（ＵＤＴ）に提供するためのシステムおよび方法であって、ＵＤＴが、特定のコントラクトを実施するマネージドタイプを登録することによってデータストアのスカラタイプシステムを拡張するための、リレーショナルデータベースエンジンおよびファイルシステムに関連して用いられる拡張性メカニズムであるシステムおよび方法に関する。
【背景技術】
【０００４】
ＭＩＣＲＯＳＯＦＴ  ＳＱＬ  ＳＥＲＶＥＲは、広範な管理および開発ツール、強力な抽出、変換、およびローディング（ＥＴＬ）ツール、ビジネスインテリジェンスおよび分析サービス、ならびにその他の機能を提供する包括的なデータベース管理プラットフォームである。その他の改良のなかでもとりわけ、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）  ．ＮＥＴフレームワーク共通言語ランタイム（ＣＬＲ）が近ごろＳＱＬ  ＳＥＲＶＥＲデータベースに統合された。
【０００５】
ＣＬＲは、ＭＩＣＲＯＳＯＦＴ  ．ＮＥＴフレームワークの中核であり、すべての．ＮＥＴコードのための実行環境を提供する。したがって、ＣＬＲ内で動作するコードは「マネージドコード」と呼ばれる。ＣＬＲは、ジャストインタイム（ＪＩＴ）コンパイル、メモリの割振りおよび管理、タイプセーフティの施行、例外処理、スレッド管理およびセキュリティを含む、プログラム実行に必要な様々な機能およびサービスを提供する。ＣＬＲは、．ＮＥＴルーチンの最初の呼出し時にＳＱＬ  ＳＥＲＶＥＲによってロードされる。
【０００６】
以前のバージョンのＳＱＬ  ＳＥＲＶＥＲでは、データベースプログラマは、サーバ側でコードを書くときにＴｒａｎｓａｃｔ−ＳＱＬを使用することに制限されていた。Ｔｒａｎｓａｃｔ−ＳＱＬは、国際標準化機構（ＩＳＯ）および米国規格協会（ＡＮＳＩ）によって定義された構造化クエリ言語（「ＳＱＬ」）の拡張である。Ｔｒａｎｓａｃｔ−ＳＱＬを使用すると、データベース開発者は、データベースおよびテーブルを作成、修正、および削除することができ、データベースに格納されたデータを挿入、検索、修正、および削除することができる。Ｔｒａｎｓａｃｔ−ＳＱＬは、特に直接構造化データアクセスおよび操作のために設計されている。Ｔｒａｎｓａｃｔ−ＳＱＬは構造化データアクセスおよび管理に秀でているが、ＶＩＳＵＡＬ  ＢＡＳＩＣ  ．ＮＥＴやＣ＃のような本格的なプログラミング言語ではない。例えば、Ｔｒａｎｓａｃｔ−ＳＱＬは、配列、コレクション、ｆｏｒ  ｅａｃｈ  ｌｏｏｐｓ、ビットシフト、またはクラスをサポートしていない。
【０００７】
ＳＱＬ  ＳＥＲＶＥＲデータベースに統合されたＣＬＲでは、データベース開発者は、Ｔｒａｎｓａｃｔ−ＳＱＬ単独では達成が不可能または困難であった作業を実施することができるようになった。ＶＩＳＵＡＬ  ＢＡＳＩＣ  ．ＮＥＴとＣ＃はどちらも、配列、構造化された例外処理、およびコレクションを完全にサポートする現代のプログラミング言語である。開発者は、ＣＬＲ統合を活用して、より複雑なロジックを有し、ＶＩＳＵＡＬ  ＢＡＳＩＣ．ＮＥＴやＣ＃などの言語を使用する計算タスクにより適したコードを書くことができる。こうしたプログラミング言語は、カプセル化、継承、ポリモアフィズムなどのオブジェクト指向機能を提供する。関連するコードは、クラスおよびネームスペースとして容易に統合することができる。
【０００８】
マネージドコードは、計算量が多く複雑な実行ロジックについてＴｒａｎｓａｃｔ−ＳＱＬよりも適しており、ストリング操作および正規表現を含む多くの複雑なタスクを広くサポートすることを特徴とする。．ＮＥＴフレームワークベースクラスライブラリ（ＢＣＬ）に見出される機能を用いると、データベース開発者は、任意のストアドプロシージャ、トリガ、またはユーザ定義関数から容易にアクセスすることのできる数千の事前ビルドされたクラスおよびルーチンへのアクセスを有する。
【０００９】
マネージドコードの別の利点はタイプセーフティである。マネージドコードの実行前に、ＣＬＲは、コードが安全であることを検証する。このプロセスは「検証」と呼ばれる。検証の間、ＣＬＲはいくつかのチェックを実施して、コードが安全に実行されることを保証する。例えば、書き込まれていないメモリを読み取らないことを保証するようにコードがチェックされる。ＣＬＲはまた、バッファオーバーフローを防止する。
【００１０】
マネージドコードを書くとき、配置単位をアセンブリと呼ぶ。アセンブリはダイナミックリンクライブラリ（ＤＬＬ）としてパッケージ化される。マネージドＤＬＬアセンブリをＳＱＬ  ＳＥＲＶＥＲにロードし、ＳＱＬ  ＳＥＲＶＥＲでホストすることができる。サーバ内のアセンブリを登録するためにＣＲＥＡＴＥ  ＡＳＳＥＭＢＬＹステートメントが使用される。一例を以下に示す。  
【００１１】
【表１】
2007522558.tif 000003
【００１２】
この例では、ＦＲＯＭ節が、ロードするアセンブリのパス名を指定する。
【００１３】
ＳＱＬ  ＳＥＲＶＥＲは、整数、浮動小数点数、日付、時間、文字ストリングなどの「組込み」スカラタイプを伝統的にサポートしている。こうした組込みタイプにはまた、＋、−、＊、／などの１組の組込み演算子、ならびにこれらのタイプに対する組込み関数を伴う。こうしたタイプ、演算子、および関数は、製品によって実装およびパッケージ化され、ユーザがそれ自体のタイプを定義できないという意味で「組込み」である。
【００１４】
ＳＱＬ  ＳＥＲＶＥＲなどのデータベースシステムについて、データベースシステムでスカラタイプとして働くが、例えばＸ座標およびＹ座標からなる「ポイント」タイプを作成するためのより複雑な構造および振る舞いを含む新しいタイプをユーザが作成できるように、ユーザにデータベースシステムのタイプシステムを拡張できるようにすることが望ましい。この点で、ＳＱＬ標準および一部のデータベース管理システム（ＤＢＭＳ）製品は、いくつかの形態のタイプ拡張性を記述するのに「ユーザ定義タイプ」という用語を使用している。例えば、ＳＱＬ−９９標準は、既存のＳＱＬ組込みデータタイプの値である内部表現を有するようにユーザによって定義することのできるタイプである「特殊タイプ」を記載している。任意選択で、特殊タイプは、比較演算子および算術演算子、タイプ変換、集約（列）関数（例えば最大、最小、平均）を既存のスカラタイプと共有することができる。特殊タイプは、その値に対して制約を定義することができる。加えて、特殊タイプは、ユーザ定義関数を介して特殊タイプに特有な新しい関数を定義することにより、既存のスカラタイプの振る舞いを超えて振る舞いを公開することができる。タイプチェックに関して、特殊タイプと既存のスカラタイプは異なるタイプとみなされる。
【００１５】
特殊タイプの主な利点は、定義の容易さである。新しいタイプの内部表現が既存の組込みタイプで記述することのできる単一のデータメンバを有し、組込みタイプがその新しいタイプに対して必要な振る舞いの大部分を既に実装している場合、特殊タイプが魅力的な代替方法である。ユーザは、タイプ、コンストラクタ、比較演算子（順序付けおよび索引付けに使用される）、算術演算子、およびタイプ変換（キャスティング）オペレータのディスクストレージを管理するのに必要な振る舞いを実施することに気を使う必要はない。ユーザは、基礎となる組込みタイプのどの機能を特殊タイプに関して公開するかを選び、任意選択で、値に関する制約または新しいタイプに関する追加の関数を追加する必要があるだけである。特殊タイプの別の利点は、ヒストグラムの計算などの、組込みタイプに関して利用可能なクエリ処理のすべてを、特殊タイプの列に対して容易に使用できることである。しかし、特殊タイプの欠点は、より複雑なタイプを作成するのに容易に使用できないことである。
【００１６】
ＳＱＬ−９９標準は「構造化タイプ」も記述する。構造化タイプは、ユーザが定義することができ、それぞれが異なるＳＱＬ組込みタイプまたはユーザ定義タイプとすることができるデータメンバのコレクションである内部表現を有するタイプである。これは、ＣおよびＣ＋＋でのｓｔｒｕｃｔの概念と似ている。ＳＱＬ−９９は構造化タイプを定義するスタイルを記述し、これにより、ユーザはタイプをその内部構造によって定義する必要があるだけである。システムは、そのデータメンバ、構成子、および機能に対するアクセサ機能およびミューテータ機能を自動的に生成し、タイプのインスタンスのオンディスク表現を管理するように機能する。
【００１７】
ＳＱＬで定義される構造化タイプの主な利点は、（ａ）タイプの基本的な振る舞いの定義が簡単なことと、（ｂ）より複雑なタイプを定義する柔軟性である。しかし、構造タイプの重大な欠点は、ＣまたはＣ＋＋のような汎用プログラミング言語で書かれた外部関数を介して通常は定義されるタイプ特有のメソッドの定義の複雑さである。構造化タイプを完全に定義するためには、タイプの定義者は、ＳＱＬと何らかのその他のプログラミング言語との間の線をまたぐ必要がある。
【００１８】
ＳＱＬ９９の特殊タイプ機能および構造化タイプ機能は、ＳＱＬデータベースの既存のスカラタイプシステムをユーザが拡張することを可能にするという点でユーザにいくつかの利点をもたらすものの、スカラタイプとして働くが、より複雑な構造および振る舞いを含むユーザ定義タイプを介してデータベースシステムのスカラタイプシステムをユーザが拡張することを可能にする改善されたシステムおよび方法が求められていた。
【００１９】
ＵＤＴ特許出願で開示される発明は、スカラタイプとして働くが、より複雑な構造および振る舞いを含むユーザ定義タイプを作成することにより、データベースシステムのスカラタイプシステムをユーザが拡張することを可能にするシステムおよび方法を対象とする。その発明によれば、ユーザは、ユーザ定義タイプのインスタンスに対して起動することのできるユーザ定義タイプおよびメソッドの構造を定義するクラスを実装する高レベルプログラミング言語でプログラムコードを書く。ＵＤＴ特許出願では（そして本明細書では）、「構造」という用語は、ユーザ定義タイプに言及する際には、そのタイプを実装するフィールドまたはプロパティのセットを包含する。ＵＤＴ特許出願での各フィールドのタイプは、スカラＳＱＬタイプまたは以前に定義したユーザ定義タイプとすることができよう。次いで、ユーザ定義タイプを定義するクラスがコンパイルされ、データベースシステムに登録される。具体的には、ユーザ定義タイプを定義するＣＬＲクラスをアセンブリとしてコンパイルすることができ、次いで、アセンブリをＣＲＥＡＴＥ  ＡＳＳＥＭＢＬＹデータ定義ステートメントを介してデータベースシステムに登録する。アセンブリを登録した後、ユーザは、ＣＲＥＡＴＥ  ＴＹＰＥデータ定義ステートメントを使用して、ユーザ定義タイプを定義するアセンブリ内のクラスを登録することができる。
【００２０】
ＵＤＴ特許出願の発明では、データベースシステムは、ユーザ定義タイプがＳＱＬタイプシステムでスカラとして働くことを可能にするためにクラスが実装しなければならない特定のコントラクトを施行する。ＵＤＴ特許出願では（そして本明細書では）、「コントラクト」という用語は、オブジェクト指向プログラミング環境で実行時に使用され、実行すべきコードが適切に実行されるように保証するために一定の事前条件または要件を満たすことをチェックする技法を指す。その発明によれば、ユーザ定義タイプを定義するクラスが比較するコントラクトは、いくつかの要件を備える。第１に、クラスは、データベースストア中のユーザ定義タイプのインスタンスを永続するための複数の異なるフォーマットのうちの１つを指定しなければならない。第２に、クラスは、ユーザ定義タイプについてヌル値を返すことができなければならない。第３に、クラスは、ユーザ定義タイプをストリングタイプなどの別のタイプとの間で変換するためのメソッドを提供しなければならない。こうした要件が満たされると、データベースシステムは、ユーザ定義タイプのインスタンスを作成することを可能にする。その応用例の一実施形態では、ユーザ定義タイプをテーブル中の列値、変数、ルーチンのパラメータ、またはルーチンの戻り値としてインスタンス化することができる。データベースシステムは、ユーザ定義タイプを定義するクラスについてのメタデータを、その後でそのタイプのインスタンスを作成する際に使用するために格納する。その発明の別の実施形態では、ユーザ定義タイプコントラクトの検証が、そのタイプを定義するクラスを記述するメタデータを使用して実施される。
【００２１】
ユーザ定義タイプのインスタンスを永続するための複数の異なるフォーマットは、ユーザ定義タイプのインスタンスがデータベースシステムのネイティブフォーマットに従って自動的にシリアライズされる第１フォーマットと、ユーザ定義タイプのインスタンスがユーザ作成のクラスで定義される形でシリアライズされる第２フォーマットとを備える。さらに、ＭＩＣＲＯＳＯＦＴ  ．ＮＥＴ  ＣＬＲがその中に統合されるＭＩＣＲＯＳＯＦＴ  ＳＱＬ  ＳＥＲＶＥＲ内でＵＤＴ特許出願の発明が具体化されたとき、ユーザ定義タイプのインスタンスがＭＩＣＲＯＳＯＦＴ  ．ＮＥＴフレームワークによって与えられる方法に従ってシリアライズされる第３フォーマットが利用可能である。
【００２２】
ＵＤＴ特許出願の発明では、データベースシステムのクエリ言語中の式は、式の評価がユーザ定義タイプのインスタンスに関するメソッドの呼出しを必要とするように、ユーザ定義タイプのインスタンスに対する１つまたは複数の参照を含むことができる。データベースシステムがそのようなクエリ言語式を受け取ったとき、データベースシステムは、その表現を、実行されたときにユーザ定義タイプのインスタンスに関する必要なメソッドを起動する一連のプログラムコード命令に変換する。次いでデータベースシステムは、クエリ言語式の評価の結果としてメソッド呼出しの結果を返す。一実施形態では、ユーザ定義タイプのインスタンスが、インスタンスに関するメソッドを起動する前にデシリアライズされる。
【００２３】
その発明の別の特徴は、ミューテータメソッドの呼出しを介してユーザ定義タイプのインスタンスの値を変更できることである。具体的には、ユーザ定義タイプを定義するクラスの作成者が、クラスの一部としてミューテータメソッドを含める。ユーザ定義タイプのインスタンスに対して起動されたとき、ミューテータメソッドは、ユーザ定義タイプの値を変更することを可能にする。このプロセスは、ユーザ定義タイプのインスタンスをデシリアライズし、ミューテータメソッドを起動してインスタンスのデシリアライズされたデータの値を変更し、そしてユーザ定義タイプの修正されたインスタンスをシリアライズしてその変更を永続することを備えることができる。
【００２４】
その発明のさらに別の特徴によれば、ユーザ定義タイプを定義するクラスは、ユーザ定義タイプのインスタンスのシリアライズしたバイナリ表現がバイナリ順になることを指定する属性をさらに含むことができる。これにより、そのタイプのインスタンスに対するバイナリ比較を行うことが可能となり、そのタイプのインスタンスに対して索引付けすることも可能となる。具体的には、バイナリ順のユーザ定義タイプのインスタンスでは、そのタイプの２つのインスタンスの何らかの比較を必要とするクエリ言語式がデータベースシステムで受領されたとき（例えば、＞、＜、または＝）、どちらのインスタンスもデシリアライズすることなく、その２つのインスタンスのシリアライズされたバイナリ表現を使用して式を評価することができる。さらに、バイナリ順であるユーザ定義タイプでは、ユーザ定義タイプとして定義された列を有するテーブルをデータベースストア内に作成することができる。次いでその列に対して索引を作成することができる。ユーザ定義タイプを参照するクエリ言語表現を介して索引を作成することもできる。この場合、まずその表現を介して算出された列が生成され、次いで算出された列を介して索引が作成される。
【発明の開示】
【発明が解決しようとする課題】
【００２５】
本発明の様々な実施形態は、ＵＤＴフレームワークを拡張して継承をサポートすることを対象とする。継承は、オブジェクト指向プログラミングの主要な教義の１つであり、ほとんどの現代のタイプシステム（ＣＬＲタイプシステムやＸＳＤタイプシステムなど）にとって基本的構成単位である。この拡張を用いると、ストアのオブジェクトデータモデリング機能が大きく改善される。この拡張により、厄介で低速なオブジェクト−リレーショナルマッピング技術を必要とすることなく、共通言語ランタイム（ＣＬＲ）タイプシステムからデータベースタイプシステムへの自然なマッピングが可能となる。クエリ言語で継承に関する概念をサポートすることにより、継承のためのＳＱＬプログラミングモデルが著しく単純化される。
【課題を解決するための手段】
【００２６】
ユーザ定義タイプに関する継承が他のデータベース製品で実装されているが、本発明の様々な実施形態は、既存の技術で提示されていない以下の機能のうち１つまたは複数を有するＵＤＴ継承ソリューションを対象とする。
・ＣＬＲタイプシステムとのシームレスな統合。本発明のいくつかの実施形態は、基本ＵＤＴコントラクトがマネージドタイプに対する１組の必要なカスタム属性およびインターフェースとして指定されるＵＤＴ継承システムおよび方法を対象とし、継承がこの同じ概念を拡張し、マネージドタイプ定義を使用してＳＱＬタイプシステムに対して継承の仕様を駆動する。この解決策により、開発者は、限定はしないがＣ＃、Ｃ＋＋、およびＶＢ．ＮＥＴを含む、開発者が選ぶ任意のＣＬＳ準拠プログラミング言語で、継承されるタイプを作成することが可能となる。
・置換可能性の完全サポート。本発明のいくつかの実施形態では、サイト（変数、パラメータ、列定義など）が特定のＵＤＴであると宣言された場合、そのＵＤＴの任意のサブタイプの値をそのサイトに格納することができる。この置換可能性の概念は、キャスティング、変換、割当て、およびメソッド呼出し、ならびにクライアントアプリケーションが結果セットを処理する方式を含むすべてのタイプ使用法に拡張される。
・索引付けおよびクエリサブシステムとの深い統合。本発明の多数の実施形態では、継承が、宣言済みタイプとは異なる可能性のある、値の厳密なランタイムタイプの概念を追加する。例えば、ＳＱＬサーバは、この種の情報にわたる索引の作成をサポートし、値のタイプに基づく述部の索引も使用する。継承は、サブタイプで再定義（オーバーライド）することのできる仮想的な振る舞いの概念も追加し、この概念は、特定のＵＤＴ機能の索引付け可能性の計算に折り込むことができ、タイプ作成時に検証することができる。
・クエリ可能なメタデータおよびカタログサービス。本発明の様々な実施形態では、タイプとそのスーパータイプの間の関係がタイプ作成時にメタデータに記録され、クエリ可能カタログビューを介して利用可能である。これにより、アプリケーションがクエリを構成し、特定のタイプの置換可能範囲を決定することが可能となる。
【００２７】
この点で、本発明の一実施形態は、ユーザ定義タイプの構造を記述する情報ならびにユーザ定義タイプ自体と別のユーザ定義タイプ（サブタイプまたはスーパータイプ／ベースタイプ）の間の継承関係を記述する情報を含む少なくとも１つのユーザ定義タイプについての拡張可能タイプシステムを有するデータベースを対象とする。ある実施形態では、ユーザ定義タイプは、例えば共通言語ランタイム（ＣＬＲ）ステートメント、Ｃ、Ｃ＋＋、およびＣ＃（「Ｃシャープ」）のステートメント、ならびに／あるいはビジュアルベーシックステートメントなどの、シーケンシャルクエリ言語（ＳＱＬ）ステートメント以外の何らかで定義される。いずれにしても、いくつかの実施形態はさらに、データベースが２つのユーザ定義タイプ間の継承関係を（一方をサブタイプとして、他方をスーパータイプ／ベースタイプとして）認識するシステムを対象とする。
【００２８】
ある実施形態では、データベースは、前記データベースへのユーザ定義タイプの明示的登録によって２つのユーザ定義タイプ間の前記継承関係を認識する。この点で、いくつかの実施形態に関する、本発明の１つの包括的方法は、（ａ）タイプをアセンブリとしてコンパイルすること、（ｂ）前記アセンブリを前記データベースに登録すること、（ｃ）前記アセンブリの前記タイプを前記データベースに登録すること、および（ｄ）前記タイプを使用することを含む。
【発明を実施するための最良の形態】
【００２９】
上記の概要、ならびに好ましい実施形態の以下の詳細な説明は、添付の図面と一緒に読むときにより良く理解することができる。本発明を例示するために、図面には本発明の例示的構成を示す。しかし、本発明は開示の特定の方法および手段に限定されない。
【００３０】
本発明の対象を、法定の要件を満たすように具体的に説明する。しかし、この説明自体は本特許の範囲を限定するものではない。むしろ、特許請求の範囲に記載された対象を、現在の技術または将来の技術と共に、この文書で説明するものと同様の異なるステップまたは要素を含むように他の方式でも具体化できることを発明者は意図している。さらに、本明細書では「ステップ」という用語を、使用する方法の異なる諸態様を含むように使用することがあるが、個々のステップの順序を明示的に述べるときを除いて、この用語を、本明細書で開示する様々なステップ間の特定の順序を示唆するものと解釈すべきではない。
【００３１】
以下で説明する実施形態では、本発明の上記の特徴を、ＭＩＣＲＯＳＯＦＴ  ＳＱＬ  ＳＥＲＶＥＲデータベースシステムで実装されたものとして説明する。上述のように、ＳＱＬ  ＳＥＲＶＥＲは、ＭＩＣＲＯＳＯＦＴ  ．ＮＥＴ共通言語ランタイム（ＣＬＲ）を組み込んで、ＳＱＬ  ＳＥＲＶＥＲデータベースのデータストアに関してマネージドコードを書いて実行することを可能にする。以下で説明する実施形態はこのコンテキストで動作するが、本発明は決してＳＱＬ  ＳＥＲＶＥＲ製品での実装に限定されないことを理解されたい。むしろ、本発明は、オブジェクト指向データベースシステムや、オブジェクトリレーショナル拡張を有するリレーショナルデータベースシステムなどの、データベースストアに対して動作するようにオブジェクト指向プログラミングコードの実行をサポートする任意のデータベースシステムで実装することができる。したがって、本発明が以下で説明する特定の実施形態に限定されず、添付の特許請求の範囲で定義される本発明の精神および範囲内のすべての修正を包含することを理解されたい。
【００３２】
（コンピュータ環境）
本発明の多数の実施形態はコンピュータ上で実行することができる。図１および以下の議論は、本発明を実施することができる適切なコンピューティング環境の簡潔で一般的な説明を与えるものである。必須ではないが、クライアントワークステーションまたはサーバなどのコンピュータで実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的コンテキストで本発明を説明する。一般に、プログラムモジュールには、特定のタスクを実行し、あるいは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらに、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの、またはプログラム可能な消費者向け電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを含むその他のコンピュータシステム構成を用いて本発明を実施できることを当業者は理解されよう。本発明はまた、通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールは、ローカルメモリ記憶デバイスとリモートメモリ記憶デバイスのどちらにも位置することができる。
【００３３】
図１に示すように、例示的汎用コンピューティングシステムは、処理装置２１と、システムメモリ２２と、システムメモリを含む様々なシステム構成要素を処理装置２１に結合するシステムバス２３とを含む従来型パーソナルコンピュータ２０などを含む。システムバス２３は、様々なバスアーキテクチャのうちのいずれかを用いる、メモリバスまたはメモリコントローラと、周辺バスと、ローカルバスとを含むいくつかのタイプのバス構造のうちのいずれでもよい。システムメモリは、読取り専用メモリ（ＲＯＭ）２４およびランダムアクセスメモリ（ＲＡＭ）２５を含む。始動中などにパーソナルコンピュータ２０内の要素間で情報を転送する助けになる基本ルーチンを含む基本入出力システム（ＢＩＯＳ）２６がＲＯＭ２４内に格納される。パーソナルコンピュータ２０は、ハードディスクを読み書きするハードディスクドライブ２７と、リムーバブル磁気ディスク２９を読み書きする磁気ディスクドライブ２８と、ＣＤ−ＲＯＭまたはその他の光媒体などのリムーバブル光ディスク３１を読み書きする光ディスクドライブ３０とをさらに含むことができる。ハードディスクドライブ２７はハードディスクドライブインターフェース３２、磁気ディスクドライブ２８は磁気ディスクドライブインターフェース３３、および光ディスクドライブ３０は光ドライブインターフェース３４によって、それぞれシステムバス２３に接続される。ドライブおよびその関連するコンピュータ可読媒体は、コンピュータ２０に対してコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性記憶を実現する。本明細書で説明する例示的環境は、ハードディスク、リムーバブル磁気ディスク２９、およびリムーバブル光ディスク３１を利用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）などのコンピュータでアクセス可能なデータを格納することができるその他のタイプのコンピュータ可読媒体も例示的動作環境で使用できることを当業者は理解されたい。
【００３４】
オペレーティングシステム３５、１つまたは複数のアプリケーションプログラム３６、他のプログラムモジュール３７、およびプログラムデータ３８を含むいくつかのプログラムモジュールを、ハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５上に格納することができる。ユーザは、キーボード４０やポインティングデバイス４２などの入力デバイスを介してパーソナルコンピュータ２０コマンドおよび情報を入力することができる。その他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディスク、スキャナなどを含めることができる。上記およびその他の入力デバイスはしばしば、システムバスに結合されたシリアルポートインターフェース４６を介して処理装置２１に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などのその他のインターフェースによって接続することもできる。モニタ４７またはその他のタイプのディスプレイデバイスも、ビデオアダプタ４８などのインターフェースを介してシステムバス２３に接続される。モニタ４７に加えて、パーソナルコンピュータは通常、スピーカやプリンタなどのその他の周辺出力デバイス（図示せず）を含む。図１の例示的システムはまた、ホストアダプタ５５、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）バス５６、およびＳＣＳＩバス５６に接続された外部記憶デバイス６２も含む。
【００３５】
パーソナルコンピュータ２０は、リモートコンピュータ４９などの１つまたは複数のリモートコンピュータに対する論理接続を使用して、ネットワーク環境で動作することができる。リモートコンピュータ４９は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の共通ネットワークノードでよく、一般にはコンピュータ２０に関して上記で説明した要素のうちの多数またはすべてを含むが、図１にはメモリ記憶デバイス５０だけを示してある。図１に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）５１および広域ネットワーク（ＷＡＮ）５２を含む。このようなネットワーキング環境は、オフィス全体または企業全体のコンピュータネットワーク、イントラネット、およびインターネットで一般的なものである。
【００３６】
ＬＡＮネットワーキング環境で使用されるとき、コンピュータ２０は、ネットワークインターフェースまたはアダプタ５３を介してＬＡＮ５１に接続される。ＷＡＮネットワーキング環境で使用されるとき、コンピュータ２０は一般に、インターネットなどの広域ネットワーク５２を介して通信を確立するモデム５４またはその他の手段を含む。モデム５４は内蔵でも外付けでもよく、シリアルポートインターフェース４６を介してシステムバス２３に接続される。ネットワーク環境では、パーソナルコンピュータ２０に関して示したプログラムモジュールまたはその一部を、リモートメモリ記憶デバイス内に格納することができる。図示したネットワーク接続は例示的なものであって、コンピュータ間の通信リンクを確立する他の手段も使用できることを理解されよう。
【００３７】
本発明の多数の実施形態はコンピュータ化システムに非常に適していると考えられるが、この文書では本発明をそのような実施形態に限定するものではない。逆に、本明細書では、「コンピュータシステム」という用語は、デバイスが電子的、機械的、論理的、または仮想的なものであるかに関わらず、情報を格納および処理することができ、かつ／または格納した情報を使用してデバイス自体の振る舞いまたは実行を制御することができる任意かつすべてのデバイスを包含するものとする。
【００３８】
（ネットワーク環境）
図２は、例示的なネットワーク型コンピューティング環境または分散コンピューティング環境の概念図である。この分散コンピューティング環境は、コンピューティングオブジェクト１０ａ、１０ｂなど、およびコンピューティングオブジェクトまたはデバイス１１０ａ、１１０ｂ、１１０ｃなどを含む。こうしたオブジェクトは、プログラム、メソッド、データストア、プログラマブルロジックなどを含むことができる。オブジェクトは、ＰＤＡ、テレビジョン、ＭＰ３プレーヤ、パーソナルコンピュータなどの同一のデバイスまたは異なるデバイスの各部分を含むことができる。各オブジェクトは、通信ネットワーク１４によって他のオブジェクトと通信することができる。このネットワークは、それ自体が図２のシステムにサービスを提供する他のコンピューティングオブジェクトおよびコンピューティングデバイスを含むことができ、それ自体が複数の相互接続されたネットワークを表すことができる。本発明の一態様によれば、各オブジェクト１０ａ、１０ｂなど、または１１０ａ、１１０ｂ、１１０ｃなどは、ＡＰＩを利用する可能性のあるアプリケーション、あるいは他のオブジェクト、ソフトウェア、ファームウェア、および／またはハードウェアを含むことができ、本発明の方法を実施するのに使用されるプロセスの使用を要求する。
【００３９】
１１０ｃなどのオブジェクトを他のコンピューティングデバイス１０ａ、１０ｂ上など、または１１０ａ、１１０ｂ上などでホストできることも理解されよう。したがって、図示する物理的環境は、接続されるデバイスをコンピュータとして示すが、そのような図示は単なる例であり、別法として、ＰＤＡ、テレビジョン、ＭＰ３プレーヤなどの様々なデジタルデバイス、インターフェース、ＣＯＭオブジェクトなどのソフトウェアオブジェクトを含む物理的環境を図示し、説明することができる。
【００４０】
分散コンピューティング環境をサポートする様々なシステム、構成要素、およびネットワーク構成が存在する。例えば、コンピューティングシステムを、有線システムまたはワイヤレスシステムで、ローカルネットワークで、あるいは広域分散ネットワークで接続することができる。現在では、ネットワークの多くはインターネットに結合されている。インターネットは、広域分散コンピューティングのためのインフラストラクチャを提供し、多数の異なるネットワークを包含する。本発明に伴って行われる例示的通信のために任意のインフラストラクチャを使用することができる。
【００４１】
インターネットは一般に、コンピュータネットワーキングの技術分野で周知のＴＣＰ／ＩＰプロトコル群を使用するネットワークおよびゲートウェイの集合を指す。ＴＣＰ／ＩＰは、「Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ」の頭字語である。インターネットは、ユーザがネットワークを介して対話し、情報を共有することを可能にするネットワーキングプロトコルを実行するコンピュータによって相互接続された、地理的に分散したリモートコンピュータネットワークのシステムと述べることができる。このような広範囲の情報の共有のために、インターネットなどのリモートネットワークは、これまでのところ一般には、開発者が専用のオペレーションまたはサービスを実行するために本質的に無制限にソフトウェアアプリケーションを設計することができるオープンシステムとして発展してきた。
【００４２】
したがって、このネットワークインフラストラクチャにより、クライアント／サーバ、ピアツーピア、またはハイブリッドアーキテクチャなどのネットワークトポロジのホストが可能となる。「クライアント」とは、無関係の別のクラスまたはグループのサービスを使用するクラスまたはグループのメンバである。したがって、コンピューティングにおいて、クライアントは、別のプログラムによって提供されるサービスを要求するプロセス、すなわち大雑把に言えば１組の命令またはタスクである。クライアントプロセスは、他のプログラムまたはサービス自体についての動作詳細を「認識」する必要なしに、要求したサービスを利用する。クライアント／サーバアーキテクチャ、特にネットワークシステムでは、クライアントは通常、別のコンピュータ、例えばサーバによって提供される共有ネットワーク資源にアクセスするコンピュータである。図２の例では、コンピュータ１１０ａ、１１０ｂなどをクライアントとみなすことができ、コンピュータ１０ａ、１０ｂなどをサーバとみなすことができるが、環境に応じて、任意のコンピュータをクライアント、サーバ、またはその両方とみなすことができる。こうしたコンピューティングデバイスのいずれも、本発明のユーザ定義タイプ技法を含む方式でデータを処理している可能性がある。
【００４３】
サーバは一般に、インターネットなどのリモートまたはローカルのネットワークを介してアクセス可能なリモートコンピュータシステムである。クライアントプロセスは第１のコンピュータシステムでアクティブにすることができ、サーバプロセスは第２のコンピュータシステムでアクティブにすることができ、それらが通信を介して互いに通信し、したがって分散機能が提供され、複数のクライアントがサーバの情報収集機能を利用することが可能となる。本発明に従って利用されるどんなソフトウェアオブジェクトも複数のコンピューティングデバイス間に分散させることができる。
【００４４】
クライアントとサーバは、プロトコル層で提供される機能を利用して互いに通信することができる。例えば、ＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）は、ワールドワイドウェブ（ＷＷＷ）すなわち「ウェブ」に関連して使用される一般的なプロトコルである。通常、インターネットプロトコル（ＩＰ）アドレスなどのコンピュータネットワークアドレス、またはＵＲＬ（Ｕｎｉｖｅｒｓａｌ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）などのその他の参照を使用して、サーバまたはクライアントコンピュータを互いに識別することができる。ネットワークアドレスをＵＲＬアドレスと呼ぶことができる。利用可能な任意の通信媒体を介して通信を実現することができる。
【００４５】
したがって、図２は、本発明を利用することのできる、サーバがネットワーク／バスを介してクライアントコンピュータと通信する例示的なネットワーク環境または分散環境を示す。ネットワーク／バス１４は、ポータブルコンピュータ、ハンドヘルドコンピュータ、シンクライアント、ネットワーク式アプライアンスなどのいくつかのクライアントまたはリモートコンピューティングデバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなど、または本発明によるＶＣＲ、ＴＶ、オーブン、ライト、ヒータなどのその他のデバイスを有するＬＡＮ、ＷＡＮ、イントラネット、インターネット、またはその他のネットワーク媒体でよい。したがって、データベースストア内にユーザ定義タイプを作成することがそれに関連して望ましい任意のコンピューティングデバイスに本発明を適用できることが企図される。
【００４６】
例えば通信ネットワーク／バス１４がインターネットであるネットワーク環境では、サーバ１０ａ、１０ｂなどは、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどがＨＴＴＰなどのいくつかの周知のプロトコルのいずれかを介して通信することができるサーバでよい。分散コンピューティング環境の特徴として、サーバ１０ａ、１０ｂなどは、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどとしても働くことができる。
【００４７】
通信は適宜、有線またはワイヤレスでよい。クライアントデバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどは、通信ネットワーク／バス１４を介して通信することがあり、または通信しないことがあり、それらに関連する独立な通信を有することがある。例えば、ＴＶまたはＶＣＲの場合、その制御に対するネットワーク態様が存在することがあり、または存在しないことがある。各クライアントコンピュータ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなど、およびサーバコンピュータ１０ａ、１０ｂなどは、様々なアプリケーションプログラムモジュールまたはオブジェクト１３５を備えることがあり、様々なタイプの記憶素子またはオブジェクトに対する接続またはアクセスを備えることがあり、それらにわたってファイルまたはデータストリームを格納することができ、またはそれらに対してファイルまたはデータストリームの部分をダウンロードし、送信し、または移動することができる。任意のコンピュータ１０ａ、１０ｂ、１１０ａ、１１０ｂなどは、本発明に従って処理されるデータを格納するデータベース、メモリ、またはその他の記憶素子２０の保守および更新の任を担うことができる。したがって、本発明は、クライアントコンピュータ１１０ａ、１１０ｂなど、およびその他の類似のデバイス、ならびにデータベース２０と対話することのできるコンピュータネットワーク／バス１４およびサーバコンピュータ１０ａ、１０ｂなどにアクセスすることができ、対話することができるクライアントコンピュータ１１０ａ、１１０ｂなどを有するコンピュータネットワーク環境で使用することができる。
【００４８】
ＵＤＴおよびマネージドコード
図３は、ユーザ定義タイプのインスタンスのシリアライゼーションおよびデシリアライゼーションを示すブロック図である。図示するように、ユーザ定義タイプのインスタンスは、メモリ内のインスタンスを表すオブジェクトのシリアライゼーションによってディスク上に存続する。ＵＤＴのインスタンスのメソッドを参照する述部または表現を含むクエリをアプリケーションが生成するとき、インスタンスの存続形式がデシリアライズされ（「ハイドレーション」とも呼ばれるプロセス）、ＣＬＲは、格納された値を受け取るために、全オブジェクトに対してメモリを割り振る。次いでＣＬＲは、アプリケーションまたはユーザの望む振る舞いを実施するオブジェクトに対する適切なメソッドを起動する。
【００４９】
（ＵＤＴ継承）
本明細書では、以下の用語は以下に示す意味を有する。
・ベースタイプ：所与のタイプによって継承されるタイプであり、様々な継承モデルではスーパータイプ、スーパークラス、または固有のアンセスタ（ｐｒｏｐｅｒ  ａｎｃｅｓｔｏｒ）とも呼ばれる。
・サブタイプ：そのベースタイプとして、直接または別のサブタイプを介して、現タイプを有するタイプ。
・サイト：関連のタイプ定義を有するプログラミング言語での任意のコンテキスト。その例には変数宣言、パラメータ定義、列定義などが含まれる。
・宣言済みタイプ：テーブル中の列のタイプ、または関数パラメータなどのサイトの「コンパイル時」タイプ。
・厳密なタイプ：特定の値の「実行時」タイプ。強く型付けされたシステムでは、厳密なタイプは宣言済みタイプまたは宣言済みタイプのサブタイプでなければならない。
・置換可能性：ベースタイプの値がサブタイプの値で置き換えられるサイトのプロパティ。例えば、パラメータ置換可能性は、関数が特定のタイプのパラメータを取るように宣言された場合、サブタイプの値で関数に渡すことが可能であるべきであること意味する。
【００５０】
本発明の様々な実施形態では、ＵＤＴは、ＳＱＬサーバに登録されたアセンブリとして実装されたマネージドタイプである。ＵＤＴは、テーブル定義変数およびパラメータを含む、ネイティブタイプを使用することのできるほとんどのコンテキストで使用することができる。ＵＤＴコントラクトに準拠するＵＤＴで定義されたメソッド、プロパティ、およびフィールドをＴ−ＳＱＬから起動することができる。
【００５１】
いくつかの実施形態では、ＵＤＴは、振る舞いを有する単純なスカラであると想定される。この想定は、ＵＤＴでサポートされる単純なプログラミングモデルおよびシリアライゼーションレイアウトに反映される。例えば、ファイルシステムは、ＵＤＴアブストラクションを使用して、単純なスカラではなく、複雑な構造および振る舞いを有するタイプである可能性のある「構造化タイプ」を作成することができる。
【００５２】
以下の擬似コードは、本発明のいくつかの実施形態についてのサブタイプの作成を記述する。
【００５３】
【表２】
2007522558.tif 000004
【００５４】
継承コントラクトを確立するために、本発明のいくつかの実施形態では、ＵＤＴ作成者は、タイプ階層内のベースタイプに例えばＳｑｌＵｓｅｒＤｅｆｉｎｅｄＴｙｐｅカスタム属性で注釈を付けなければならず、この属性に関するプロパティは、タイプファミリ（タイプまたはそのサブタイプのすべて）全体に適用されるインバリアントを指定する。ＳｑｌＵｓｅｒＤｅｆｉｎｅｄＴｙｐｅに関するプロパティの非網羅的なリストを図４に示す。次いで、タイプ登録時に、ユーザは特定のタイプをその下に登録しなければならないベースＳＱＬタイプを示すために「ＵＮＤＥＲ」節を追加しなければならない。例えば、
【００５５】
【表３】
2007522558.tif 000005
【００５６】
本発明のいくつかの実施形態では、ｂａｓｅ−ｔｙｐｅ−ｎａｍｅを指定のスキーマで有効なＵＤＴとして登録しなければならない。さらに、ＣＬＲタイプは、ｂａｓｅ−ｔｙｐｅ−ｎａｍｅがその上で定義されるＣＬＲタイプの直接のサブタイプでなければならない。サブタイプは、ＳｑｌＵｓｅｒＤｅｆｉｎｅｄＴｙｐｅＡｔｔｒｉｂｕｔｅを定義すべきはなく、その親から属性を継承すべきである。さらに、ベースタイプはバイナリ順であってはならない。同様に、ベースタイプで指定されるすべてのアウトオブバンドルーチンプロパティ（ＳｑｌＭｅｔｈｏｄＡｔｔｒｉｂｕｔｅ注釈）は、サブタイプ定義に適合しなければならず（具体的には、ベースタイプで定義されるすべての索引付け可能メソッドは、サブタイプでオーバライドされるルーチンについて引き続き索引付け可能でなければならない）、この情報はベースタイプから収集することができ、ＣＲＥＡＴＥ  ＴＹＰＥチェックの一部としてサブタイプ中のすべてのルーチンを列挙することによって検証することができる。
【００５７】
本発明の様々な実施形態では、ＵＤＴ継承のためのフレームワークを、機能およびその基礎となる実装の外面エリアによって記述することができる。さらに、サブタイプの値が、列定義で、バッチ、ストアドプロシージャ、および関数でのローカル変数およびパラメータ宣言で、ならびに結果列が列の宣言済みタイプまたはそのサブタイプである値を含むことのできるクエリ結果セットで置換可能とみなされる。
【００５８】
本発明のいくつかの実施形態では、サブタイプのインスタンスを、スーパータイプとなるように宣言される列に格納することを可能にすることは、以下の含意を有する。（ａ）シリアライゼーションフォーマットはベースタイプおよびサブタイプについて同じであるべきであり、（ｂ）親のＭａｘＢｙｔｅＳｉｚｅ値は、サブタイプのインスタンスを格納することが可能となるように十分大きくなければならない。実行時に非効率なスペースが存在する場合、ベースタイプの列内にサブタイプの値を格納する試みは失敗し、したがってこのエラーを防止するために、ベースタイプを無制限で定義することができる。
【００５９】
本発明の様々な実施形態では、すべての割当ては値の厳密なタイプを保持することができ、サブタイプの値をベースタイプの変数に割り当てることは常に成功するが、ベースタイプの宣言済みタイプを有する値をサブタイプの変数に割り当てることは、値の厳密なタイプがターゲットタイプに割当て可能である場合にのみ成功する明示的変換を必要とする。例えば、Ａｄｄｒｅｓｓがタイプであり、かつＵＳＡｄｄｒｅｓｓがアドレスのサブタイプである場合、図５に示すように、Ａｄｄｒｅｓｓｅｓは、タイプＡｄｄｒｅｓｓの列ａｄｄｒｃｏｌを有するテーブルとすることができる。
【００６０】
本発明のいくつかの実施形態についての実装では、２つのタイプ間の継承関係についての情報は、データベースのスカラタイプシステムの第１クラス部分であり、この情報を使用して、値間の割当て可能性および変換が決定される。ある実施形態では、ＩＳ  ＯＦおよびＴＲＥＡＴと呼ばれる２つの新しい演算子がスカラタイプシステムに導入され、こうした演算子を使用して、スカラ式評価中にタイプ述部およびインプレース変換をモデル化するのに使用することができる。適切なセマンティック推理および共通の演算（クエリのプロジェクトリスト中のＩＳ  ＯＦ述部およびＴＲＥＡＴ）の結合を可能にするために、ＴＲＥＡＴ演算子がクエリコンパイル中に変換される。さらなる最適化として、ＩＳ  ＯＦ演算子をｈｉｅｒａｒｃｈｉｃａｌ＿ｔｙｐｅ＿ｉｄの点で再書込みして、利用可能な何らかのタイプ特有の索引を利用することができる。ＵＤＴ式に遭遇したとき、ＵＤＴ式コンパイルプロセスが修正され、ディスパッチの性質（仮想と静的）が反映され、パラメータタイプを含むメソッドの全シグニチャに基づいてメソッドが明確にされる。この情報が、外部コンパイルプロセスから渡され、メソッド位置で使用される。メソッドが見つかった後、適切なＩＬ命令が使用されて、静的ディスパッチまたは仮想メソッドが起動される。次いで実行時に、ＵＤＴデシリアライゼーションコードが値の厳密なタイプを使用して、正しいタイプのオブジェクトを作成し、それを永続化された状態で追加する。このオブジェクトが実行スタック上にプッシュされ、メソッドが起動する。
【００６１】
いくつかの実施形態では、クライアント／サーバデシリアライザも、デシリアライズされる値の厳密なタイプを使用して、それがデシリアライズすべきＣＬＲタイプを決定する。クライアントが以前にそのタイプに遭遇していない場合、クライアントは、クローン接続上でアウトオブバンド要求を作成して、オンデマンドでＣＬＲタイプについてのメタデータをダウンロードし、この情報を使用してＣＬＲタイプの位置を突き止める（図６参照）。
【００６２】
いくつかの実施形態では、Ｔ−ＳＱＬから起動されたすべてのメソッド、プロパティ、およびフィールドが、呼出しサイトの宣言済みタイプではなくインスタンスの厳密なタイプを使用して動的に解決されるということが仮定されることがある。さらに、スーパータイプで定義され、Ｔ−ＳＱＬから直接呼出し可能である、すべての継承されるメソッド、プロパティ、フィールドが許容されることになる。したがって、宣言済みのメソッドと継承されるメソッドを起動することについてシンタックス上の差はない。
【００６３】
本発明のいくつかの実施形態では、ターゲット呼出しの位置を突き止める方法を以下のような擬似コードで特徴付けることができる。Ｄが呼出しサイトの宣言済みタイプであり、Ｍがメソッド名、Ｐ１．．．Ｐｎがメソッドに対するパラメータ、Ｔ１．．Ｔｎがパラメータのタイプである場合で、クエリが「ｓｅｌｅｃｔ＜タイプＤのサイト＞．Ｍ（Ｐ１．．．Ｐｎ）」である場合、呼出しメソッドは以下を備えるであろう。
【００６４】
【表４】
2007522558.tif 000006
【００６５】
本発明のいくつかの実施形態で使用されるメソッド呼出しに関して、メソッド名マッチングがバイナリ照合を使用する。さらに、パラメータタイプチェックにより、各パラメータについてのＣＬＲタイプが暗黙的にＳＱＬパラメータタイプから変換可能である。さらに、２つの適切なメソッドが存在する場合、メソッドオーバーローディングが許可されないが、２つのメソッドが異なる数のパラメータを取る場合、または階層内の異なるタイプで定義される場合、メソッドオーバーローディングが許可される。同様に、メソッドまたはプロパティがＳＱＬに登録されていないＣＬＲサブタイプのインスタンスを返す場合、システムは実行時にエラーを生成する。さらに、使用される実際のディスパッチ命令は、解決されたメソッドに依存する。すなわち、見つかったメソッドが仮想メソッドまたはオーバライドされたメソッドとして定義される場合、仮想ディスパッチが使用され、そうでない場合、静的ディスパッチが使用される。
【００６６】
本発明の様々な実施形態では、タイプからそのスーパータイプへの変換（アップキャスト）は常に成功するが、タイプからそのサブタイプ（ダウンキャスト）への変換は、値が正しいタイプである場合に成功し、値が正しいタイプでない場合は失敗する。厳密な失敗モードは、使用する変換演算子に依存する。
【００６７】
そのような実施形態では、以下のようなＣＯＮＶＥＲＴ、ＣＡＳＴ、ＴＲＥＡＴという３つの変換演算子が存在する。
・ＣＯＮＶＥＲＴ（［ｓｃｈｅｍａ．］ｔｙｐｅ，ｔａｒｇｅｔ＿ｔｙｐｅ）→［ｓｃｈｅｍａ．］ｔｙｐｅの値、あるいは変換が失敗した場合はエラー。
・ＣＡＳＴ（ｖａｌｕｅ  ａｓ  ［ｓｃｈｅｍａ．］ｔａｒｇｅｔ＿ｔｙｐｅ）→［ｓｃｈｅｍａ．］ｔｙｐｅの値、あるいは変換が失敗した場合はエラー。
・ＴＲＥＡＴ（ｖａｌｕｅ  ａｓ  ［ｓｃｈｅｍａ．］ｔａｒｇｅｔ＿ｔｙｐｅ）→ｓｃｈｅｍａ．］ｔｙｐｅの値、あるいは変換が失敗した場合はＮＵＬＬ。
【００６８】
こうした実施形態では、ＣＡＳＴおよびＣＯＮＶＥＲＴは、継承および置換可能性を理解するように修正された既存の演算子とすることができる。一方ＴＲＥＡＴは、ＳＱＬ９９順応シンタックス（ＳＱＬ標準の§６．２５）であり、スーパータイプの式がそのサブタイプの１つの式として処理されるときにダウンキャスティングまたはナローイングシナリオで使用するためのものである（この標準は、このサブタイプ処理を呼び出す）。この演算子は２つの状況で有効である。（ａ）サブタイプで定義されるプロパティにアクセスする、（ｂ）サブタイプで定義されるプロパティを更新する。コンパイル時に、値の宣言済みタイプがｔａｒｇｅｔ＿ｔｙｐｅのスーパータイプでない場合、エラーがレポートされ、ＴＲＥＡＴは失敗する。例えば、
【００６９】
【表５】
2007522558.tif 000007
【００７０】
一方、この標準は、ＮＵＬＬインスタンスに対するミューテータメソッドの起動をサポートせず、ＳＱＬ  ＳＥＲＶＥＲも、ＴＲＥＡＴ演算子の結果に対してこの制限を施行するであろう。ＴＲＥＡＴがＮＵＬＬ値を生成した場合、システムは、ＮＵＬＬ値を更新しようと試みてエラーを生成することになる。言い換えれば、本発明のいくつかの実施形態では、図７に示すテーブルで表されるように、論理的ＴＲＥＡＴ（ｖａｌｕｅ  ａｓ  ｔｙｐｅ＿ｘ）をＩＦ（ｖａｌｕｅ  ＩＳ  ＯＦ  ｔｙｐｅ＿ｘ）ＴＨＥＮ  ｖａｌｕｅ  ｅｌｓｅ  ＮＵＬＬに変換することができる。図７は一般に、ＣＯＮＶＥＲＴ、ＣＡＳＴ、ＴＲＥＡＴコマンドに関する振る舞いおよびセマンティクスを示す。
【００７１】
いくつかの実施形態では、ＵＤＴ拡張の一部として、ＳｑｌＵｓｅｒＤｅｆｉｎｅｄＴｙｐｅＡｔｔｒｉｂｕｔｅおよびＳｑｌＭｅｔｈｏｄＡｔｔｒｉｂｕｔｅに関する新しいプロパティを使用して、受け取ったもの（これ）がヌル値である場合にタイプに対するメソッドを起動すべきかどうかを制御することができるが、ＳｑｌＭｅｔｈｏｄＡｔｔｒｉｂｕｔｅを使用して真をセットすることにより、特定のメソッドについてこれをオーバライドすることができる。こうした実施形態では、デフォルト値はＦＡＬＳＥである。さらに、メソッドの戻りタイプがヌル可能タイプである場合、そのタイプについての識別されたヌル値が返される。戻りタイプがヌル可能でない場合、そのタイプについてのデフォルトｃｌｒ値が返される。参照タイプについてのデフォルト値がヌルである場合、値タイプについてのデフォルト値は、そのタイプについてのデフォルトコンストラクタの呼出し結果である。
【００７２】
様々な実施形態では、システム内のすべてのヌル値が型付けされる。しかし、標準で指定されるタイプ述部は、値がヌルである場合にｕｎｋｎｏｗｎを返し、ＳＱＬから特定のタイプのヌル値を決定する方法はない。したがって、こうした実施形態は、すべてのヌル値を呼出しサイトの宣言済みタイプであるとして処理し、サイトに挿入された値の厳密なタイプとしては処理しない。例えば、
【００７３】
【表６】
2007522558.tif 000008
【００７４】
様々な実施形態では、タイプ述部は、（ａ）列中のタイプのすべておよびそのサブタイプのすべてのすべてのインスタンスの戻りと、（ｂ）（ＳＱＬ９９標準の§８．１４に記載の）列中の特定のタイプのすべてのインスタンスの戻りのどちらもサポートする。以下について検討する。
【００７５】
【表７】
2007522558.tif 000009
【００７６】
ｕｄｔＣｏｌｕｍｎＯｒＶａｌｕｅがヌルである場合、結果はｕｎｋｎｏｗｎであり、そうでない場合、述部はブール結果を返す。
【００７７】
例えばタイプだけのインスタンスなど、ブールを生成する式が許可されるすべてのスカラコンテキストでタイプ述部を使用することができる。
【００７８】
【表８】
2007522558.tif 000010
【００７９】
これは、タイプおよびそのサブタイプのすべてのインスタンスとは対照的である。
【００８０】
【表９】
2007522558.tif 000011
【００８１】
さらに、本発明のいくつかの実施形態では、ｓｙｓ．ａｓｓｅｍｂｌｙ＿ｔｙｐｅｓカタログビューが、以下のように１つの追加の列を有することになる。
【００８２】
【表１０】
2007522558.tif 000012
【００８３】
さらに、本発明の多数の実施形態では、仮想メソッドがサブタイプでオーバライドされるとき、オーバライドされる実装は、ベースメソッドで指定されるルーチンプロパティに対して置換可能でなければならない。このマトリックスがタイプ登録時にチェックされ、無効な組合せが検出された場合にエラーが生成される。ここでの指針原理は、サブタイプ実装はベースメソッドの索引付け可能性を破るべきではないことである。したがって、ベースメソッド定義が索引付け可能である場合、オーバライドされた実装も索引付け可能であるべきである。さらに、サブタイプ実装は、ベースメソッド定義（ヌルレシーバおよび引数、ｓｑｌファセット、データアクセス、ミューテータメソッド呼出し）のためにコンパイルされた式を無効にすべきではない。一方、サブタイプ実装は、ベースと競合しない振る舞いを追加することができるが、キャストが必要であり、またはアクティブ化されるように処理される（索引付け可能性）。「Ｎ」が「新しいサブタイプ」を表す場合、すなわち、ベースタイプが偽にセットされた値を有し、または定義されていない場合であってもサブタイプがプロパティを真にセットすることができる場合で、「Ｓ」が「ベース定義と同一」を表す場合、すなわち、サブタイプ中の定義がベースタイプと同一である場合、ＵＤＴ方法は、図８に示すルーチンプロパティを含むことができる。
【００８４】
上記に加えて、本発明のいくつかの実施形態では、あらゆるＵＤＴ値は、その特定のｔｙｐｅ＿ｉｄを有さなければならず、これは、ＵＤＴが作成された後は決して変化すべきではない。ＵＤＴ継承ではバイナリ順序付けがサポートされないので、この手法は、タイプに関するバイナリ比較に影響を及ぼさない（バイナリ比較されるすべてのインスタンスが同一のｔｙｐｅ＿ｉｄを有するため）。さらに、ＤＲＯＰタイプは、サブタイプの値を含むスーパータイプのいずれかの定義された列が存在しない（すなわち、結果としてＤＲＯＰタイプは費用がかかる可能性がある）ことをチェックすべきである。同様に、ａｄｄサブタイプは、チェーン中のあらゆるタイプについてのスーパータイプを参照する既存のｃｏｍｐ  ｐｌａｎを無効にする。
【００８５】
（まとめ）
本明細書で説明した様々なシステム、方法、および技法を、ハードウェアまたはソフトウェアで、あるいは適切ならそれらの組合せで実装することができる。したがって、本発明の方法および装置、またはその何らかの態様または部分は、フロッピィディスケット、ＣＤ−ＲＯＭ、ハードドライブ、またはその他の任意の機械可読記憶媒体などの有形媒体として具体化されたプログラムコード（すなわち命令）の形を取ることができ、プログラムコードがコンピュータなどのマシンにロードされて実行されたとき、そのマシンは本発明を実施する装置になる。プログラム可能コンピュータ上でプログラムコードを実行する場合、コンピュータは一般に、プロセッサ、プロセッサによって読取り可能な記憶媒体（揮発性および不揮発性メモリおよび／または記憶素子を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含む。１つまたは複数のプログラムは、コンピュータシステムと通信するように高レベル手続き型またはオブジェクト指向プログラミング言語で実装することが好ましい。しかし、望むならアセンブリ言語または機械語でプログラムを実装することもできる。いずれの場合も、言語はコンパイルまたはインタプリタされた言語とすることができ、ハードウェア実装と組み合わせることができる。
【００８６】
本発明の方法および装置は、電気配線またはケーブリング、光ファイバ、あるいは他の任意の形態の伝送などの、何らかの伝送媒体を介して伝送されるプログラムコードの形態で具体化することもでき、プログラムコードが、ＥＰＲＯＭ、ゲートアレイ、プログラマブルロジックデバイス（ＰＬＤ）、クライアントコンピュータ、ビデオレコーダなどのマシンで受信され、ロードされ、実行されると、そのマシンが本発明を実施する装置になる。汎用プロセッサ上に実装されるとき、このプログラムコードは、プロセッサと組み合わされ、本発明の索引付け機能を実行するように動作する固有の装置を提供する。
【００８７】
様々な図の好ましい実施形態と共に本発明の実施形態を説明したが、他の類似の実施形態も使用することができ、あるいは本発明から逸脱することなく本発明と同じ機能を実行するために記載の実施形態に修正や追加を行うことができることを理解されたい。例えば、パーソナルコンピュータの機能をエミュレートするデジタルデバイスの状況で本発明の例示的実施形態を説明したが、本発明がそのようなデジタルデバイスに限定されず、本願で説明したように、有線かそれともワイヤレスかに関わらず、ゲーミングコンソール、ハンドヘルドコンピュータ、ポータブルコンピュータなどの任意の数の既存または新しいコンピューティングデバイスまたは環境に適用でき、通信ネットワークを介して接続され、ネットワークを介して対話する任意の数のそのようなコンピューティングデバイスに適用できることを当業者は理解されよう。さらに、特にワイヤレスネットワークデバイスの数が増加し続けているので、本明細書ではハンドヘルドデバイスオペレーティングシステム、およびその他のアプリケーション特有のハードウェア／ソフトウェアインターフェースシステムを含む様々なコンピュータプラットフォームが企図されることを強調しておく。したがって、本発明はどの単一の実施形態にも限定されず、添付の特許請求の範囲による幅と範囲において解釈すべきである。
【図面の簡単な説明】
【００８８】
【図１】本発明の諸態様を組み込むことができるコンピュータシステムを表すブロック図である。
【図２】本発明を実施できる様々なコンピューティングデバイスを有する例示的ネットワーク環境を表すブロック図である。
【図３】マネージドコードでインスタンス化されているユーザ定義タイプのインスタンスのシリアライゼーションおよびデシリアライゼーションを示すブロック図である。
【図４】ＳｑｌＵｓｅｒＤｅｆｉｎｅｄＴｙｐｅについてのプロパティの非網羅的リストを示す表である。
【図５】Ａｄｄｒｅｓｓがタイプであり、かつＵＳＡｄｄｒｅｓｓがアドレスのサブタイプである場合、Ａｄｄｒｅｓｓｅｓは、タイプＡｄｄｒｅｓｓの列ａｄｄｒｃｏｌを有するテーブルとすることができることを示す擬似コードである。
【図６】デシリアライズされる値の厳密なタイプを使用して、それがデシリアライズすべきＣＬＲタイプを判定するクライアント／サーバデシリアライザを示す擬似コードである。
【図７】ＣＯＮＶＥＲＴ、ＣＡＳＴ、ＴＲＥＡＴコマンドについての振る舞いおよびセマンティクスを示す表である。
【図８】ＵＤＴメソッドが備えることのできるルーチンプロパティを示す表である。
【図１】
2007522558.tif 000013
【図２】
2007522558.tif 000014
【図３】
2007522558.tif 000015
【図４】
2007522558.tif 000016
【図５】
2007522558.tif 000017
【図６】
2007522558.tif 000018
【図７】
2007522558.tif 000019
【図８】
2007522558.tif 000020
【国際調査報告】
2007522558.tif 000021