(57)【特許請求の範囲】
【請求項１】
１又はそれより多くのプロセッサ及びメモリを含むコンピュータシステム内に実装された、仮想化データがオブジェクトにアクセスするデータプロバイダを作成することにより、前記オブジェクトの複数のプロパティのサブセットに前記オブジェクト全体を構築することなしにアクセスできるようにする方法であって、前記メモリは、前記１またはそれより多くのプロセッサにより実行された場合に、前記方法を実装する命令を格納し、前記方法は、
複数のプロパティを有するオブジェクトのシンタックスツリーの少なくとも部分を記述するデータ構造ステートメントを受信する前記１またはそれより多くのプロセッサを含むコンピュータシステムの動作であって、前記複数のプロパティの少なくとも１つの値はクエリ式の実行により決定でき、前記データ構造ステートメントは、
前記データ構造ステートメントによって前記構造が表されるオブジェクトのタイプの指標と、
各々が前記オブジェクトのプロパティを特定する１つまたは複数のプロパティ識別子と、
１またはそれより多くのマッピングであって、マッピングの各々は、プロパティ識別子を、対応するクエリ式にマッピングし、対応する前記クエリ式は、対応する前記プロパティ識別子によって特定される前記オブジェクトの前記プロパティについての値の計算の仕方を示す、マッピングと、
を含む、動作と、
前記データ構造ステートメントを受信することに応答して、データプロバイダを作成する前記コンピュータシステムの動作であって、前記データプロバイダがデータアクセスを前記オブジェクトに仮想化し、前記データ構造ステートメントに基づいてオブジェクトの構造の一部を作成することにより、オブジェクトにおけるクエリの遅延評価を容易にし、前記オブジェクトの前記構造の一部は、前記データ構造ステートメント全体を評価する必要なしにまたは前記オブジェクト全体を完全に構築する必要なしに前記オブジェクトの前記１またはそれより多くのプロパティに対応する１またはそれより多くのクエリ式を実行することにより前記オブジェクトの前記１またはそれより多くのプロパティの値へのアクセスを提供し、前記データプロバイダは、
前記データ構造ステートメントに対する参照であって、前記参照は、前記データ構造ステートメントのタイプ、プロパティ識別子、及び対応するマッピング手段への参照手段を中間的に含む、動作と
を含むことを特徴とする方法。
【請求項２】
前記データ構造ステートメントを受信する動作は、前記データ構造ステートメントによって記述された前記仮想化されたオブジェクトのプロパティに対するあらゆるクエリの提示の前に、評価のための前記データ構造ステートメントを提示するユーザ入力を受信する動作を含むことを特徴とする請求項１記載の方法。
【請求項３】
前記データ構造ステートメントを受信する動作は、既存のデータプロバイダから前記データ構造ステートメントを受信する動作を含み、前記データ構造ステートメントは、前記既存のデータプロバイダの前記プロパティのマッピング手段からのクエリ式内に含まれていることを特徴とする請求項１記載の方法。
【請求項４】
前記データプロバイダ内の前記プロパティの値を求めるデータコンシューマからの要求を受信する動作と、
前記特定されたプロパティに対応するクエリ式を見つけるために前記対応する１つまたは複数のマッピング手段を参照する動作と、
前記プロパティについてのプロパティ値を得るために前記クエリ式を評価する動作と、
前記プロパティ値を前記データコンシューマに返す動作と、
を含むことを特徴とする請求項１記載の方法。
【請求項５】
前記プロパティについてのプロパティ値を得るために前記クエリ式を評価する動作は、前記クエリ式を評価して前記プロパティについての実際のプロパティ値を得る動作を含むことを特徴とする請求項４記載の方法。
【請求項６】
前記クエリ式を評価して前記プロパティについての実際のプロパティ値を得る動作は、データレポジトリを参照する動作を含むことを特徴とする請求項５記載の方法。
【請求項７】
前記データレポジトリを参照する動作は、前記データレポジトリを参照して、前記データ構造ステートメントによって記述されているあらゆる他のプロパティの値を計算するためのデータにアクセスすることなしに、前記実際のプロパティ値を計算するためのデータにアクセスする動作を含むことを特徴とする請求項６記載の方法。
【請求項８】
前記クエリ式を評価して前記プロパティについてのプロパティ値を得る動作は、前記クエリ式を評価して更なるデータプロバイダを取得する動作を含み、前記更なるデータプロバイダは、前記データプロバイダからの前記プロパティ値を仮想化することを特徴とする請求項４記載の方法。
【請求項９】
前記クエリ式を評価して更なるデータプロバイダを取得する動作は、前記データプロバイダに含まれる更なるデータ構造ステートメントを評価して更なるデータプロバイダを作成する動作を含むことを特徴とする請求項８記載の方法。
【請求項１０】
プロセッサ及びメモリを含むコンピュータシステム内に実装された、データプロバイダを利用してオブジェクトへのデータアクセスを仮想化するクエリエバリュエータを使用してクエリに応答することにより、前記オブジェクトの全体を構成することなしに前記オブジェクトの複数のプロパティのサブセットがクエリエバリュエータにアクセスできるようにする方法であって、前記メモリは、前記１またはそれより多くのプロセッサにより実行された場合に、前記方法を実装する命令を格納し、前記方法は、
プロパティ値アクセスクエリを受信する１またはそれより多くのプロセッサを含むコンピュータシステムの動作であって、前記プロパティ値アクセスクエリは、前に受信した複数のプロパティを有するオブジェクトのシンタックスツリーの少なくとも一部を記述するデータ構造ステートメントにおいて特定されたプロパティのプロパティ値をクエリし、前記複数のプロパティの少なくとも１つの値はクエリ式の実行により決定できる、動作と、
前記プロパティ値アクセスクエリに含まれるデータに基づいて前記前に受信したデータ構造ステートメントから作成したデータプロバイダを特定する前記コンピュータシステムの動作であって、前記データプロバイダが前記オブジェクトへのデータアクセスを仮想化して、前記データ構造ステートメントに基づいて前記オブジェクトの構造の一部を作成することにより前記オブジェクトにおけるクエリの遅延評価を容易にし、前記オブジェクトの前記構造の一部は、前記データ構造ステートメント全体を評価する必要なしにまたは前記オブジェクト全体を完全に作成する必要なしに前記オブジェクトの前記１またはそれより多くのプロパティに対応する１またはそれより多くのクエリ式を実行することにより前記オブジェクトの前記１またはそれより多くのプロパティの値へのアクセスを提供する、動作と
前記クエリエバリュエータに付随する既知の場所に前記特定されたデータプロバイダを配する前記コンピュータシステムの動作と、
前記プロパティ値アクセスクエリについてのデータコンシューマを作成する前記コンピュータシステムの動作と、
前記既知の場所から、前記特定されたデータプロバイダにアクセスする前記データコンシューマの動作と、
前記データプロバイダに、前記特定されたプロパティの前記プロパティ値を要求する前記データコンシューマの動作と、
前記データプロバイダから前記特定されたプロパティの前記プロパティ値を受信する前記データコンシューマの動作と、
更なる処理のために前記受信したプロパティ値を前記既知の場所に配する前記データコンシューマの動作と、
を含むことを特徴とする方法。
【請求項１１】
前記データプロバイダから前記特定されたプロパティの前記プロパティ値を受信する前記データコンシューマの前記動作は、前記データプロバイダから前記プロパティの前記実際のプロパティ値を受信する前記データコンシューマの動作を含むことを特徴とする請求項１０記載の方法。
【請求項１２】
前記データプロバイダから前記プロパティの前記実際のプロパティ値を受信する動作は、前記前に受信したデータ構造ステートメントによって記述された他のプロパティについてのクエリ式を評価する必要なしに前記プロパティの前記実際のプロパティ値を受信する動作を含むことを特徴とする請求項１０記載の方法。
【請求項１３】
前記データプロバイダから前記特定されたプロパティの前記プロパティ値を受信する前記データコンシューマの前記動作は、前記データプロバイダから更なるデータプロバイダを受信する前記データコンシューマの動作を含み、前記更なるデータプロバイダは、前記データプロバイダからの前記プロパティ値を仮想化することを特徴とする請求項１０記載の方法。
【請求項１４】
前記更なる処理のために前記受信したプロパティ値を前記既知の場所に配する前記データコンシューマの前記動作は、前記既知の場所に前記プロパティの前記実際のプロパティ値を配する前記データコンシューマの動作を含むことを特徴とする請求項１０記載の方法。
【請求項１５】
前記更なる処理のために前記受信したプロパティ値を前記既知の場所に配する前記データコンシューマの前記動作は、前記既知の場所に更なるデータプロバイダを配する動作を含み、前記更なるデータプロバイダは、前記データプロバイダからの前記プロパティ値を仮想化することを特徴とする請求項１０記載の方法。
【請求項１６】
前記プロパティ値アクセスクエリについての更なるデータコンシューマを作成する動作と、
前記既知の場所から前記更なるデータプロバイダにアクセスする前記更なるデータコンシューマの動作と、
前記更なるデータプロバイダに前記特定されたプロパティの前記プロパティ値を要求する前記更なるデータコンシューマの動作と、
前記更なるデータプロバイダから前記特定されたプロパティの前記プロパティ値を受信する前記データコンシューマの動作と、
更なる処理のために前記受信したプロパティ値を前記既知の場所に配する前記データコンシューマの動作と、
を更に含むことを特徴とする請求項１５記載の方法。
【請求項１７】
前記プロパティの前記プロパティ値を受信する前記動作は、前記前に受信したデータ構造ステートメントによって記述されたプロパティについてのクエリ式を評価するためにデータレポジトリを参照する必要なしにかつ前記更なるデータ構造ステートステートメントによって記述された他のプロパティについてのクエリ式を評価する必要なしに、前記プロパティの前記実際のプロパティ値を受信する動作を含むことを特徴とする請求項１６記載の方法。
【請求項１８】
プロパティ値アクセスクエリを受信する動作であって、前記プロパティ値アクセスクエリは、前記データ構築ステートメントからのプロパティ識別子を含む、動作と、
前記プロパティ識別子に基づいて前記プロパティ値アクセスクエリに応答する前記最初のデータプロバイダを特定する動作と、
前記クエリエバリュエータに付随する既知の場所に前記最初のデータプロバイダを配する動作と、
前記プロパティ値アクセスクエリについてのデータコンシューマを作成する動作と、
前記既知の場所から、前記最初のデータプロバイダにアクセスする前記データコンシューマの動作と、
前記最初のデータプロバイダに、前記特定されたプロパティの前記プロパティ値を要求する前記データコンシューマの動作と、
前記前に受信したデータ構造ステートメントから、前記特定されたプロパティに対応するクエリ式を調べる前記最初のデータプロバイダの動作と、
前記クエリ式を評価して前記プロパティについてのプロパティ値を取得する動作と、
前記取得したプロパティ値を前記データコンシューマに返す前記最初のデータプロバイダの動作と、
前記取得したプロパティ値を受信する前記データコンシューマの動作と、
更なる処理のために前記受信したプロパティ値を前記既知の場所に配する前記データコンシューマの動作と、
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１９】
前記クエリ式を評価して前記プロパティについてのプロパティ値を取得する動作は、データベースのデータにアクセスする動作を含むことを特徴とする請求項１８記載の方法。
【請求項２０】
前記クエリ式を評価して前記プロパティについてのプロパティ値を取得する動作は、更なるデータプロバイダを構築する動作を含むことを特徴とする請求項１８記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータシステム及び関連する技術は、多くの社会の態様に影響を及ぼす。実際、コンピュータシステムの情報処理能力は、我々の生活の仕方及び労働の仕方を変えてきた。現在コンピュータシステムは、通常、コンピュータシステムの出現の前に手作業で行なわれた多くの作業（例えば、ワードプロセッシング、スケジューリング、会計等）を行なう。ごく最近では、コンピュータシステムは、互いにかつ他の電子デバイスに接続されて、コンピュータシステム及び他の電子デバイスが電子データを転送することができる有線コンピュータネットワーク及び無線コンピュータネットワークを形成してきた。従って、多くのコンピュータの作業能力は、多くの異なったコンピュータシステム及び／または多くの異なったコンピューティング環境を介して分散されている。
【０００２】
全部ではないがほとんどのコンピュータの作業は、通常、例えば、データの作成、データの修正、データの削除等を行う際にオペレーションを実行して所望の結果を得るソフトウェア（例えば、アプリケーションまたはオペレーティングシステム）を含む。このように、ソフトウェアが所望の結果を得るには、ソフトウェアは適当なデータにアクセスをしなければならない。例えば、ワードプロセッシング文書に編集を行うために、ユーザは、ワードプロセッシング文書を（例えば、ファイルシステム内で）見つけて、ワードプロセッサにコマンドを入力してワードプロセッシング文書を開くようワードプロセッサに指示しなければならない。
【０００３】
ユーザが文書の場所を知らない場合、ユーザは様々な検索ツールを用いて文書の場所を見つけることができる。ユーザは、様々な検索語を検索モジュール（例えば、ファイルファインダ）に入力することができる。検索モジュールは、検索語で特定される特徴を含むファイルがないかファイルシステムを検索することができ、ユーザに対しあらゆる特定されたファイルの場所を返すことができる。よって、ある程度まで、ユーザはクエリ（検索語）を検索モジュールに提示し、検索モジュールは（あらゆる一致を特定して）該クエリを処理し、検索モジュールに結果（あらゆる特定された一致）を返す。
【０００４】
多くの環境において、より複雑なデータオペレーションが、データの大部分からなるデータのサブセットを作成してこれにアクセスするために用いられる。例えばデータベースシステム内で、データ作成ステートメントは、データベースのデータに関するビューを作成するために用いることができる。クエリは、データの所望のサブセットを検索するためにデータベース（またはデータベースの全体）に関するビュー（または他のオブジェクト）に対して発行されてもよい。データベースのデータの配置及び容量に基づいて、データ作成ステートメント及びクエリは、相対的に複雑になるかもしれない。更に、一連のデータ作成ステートメント及びクエリは、より細かくデータにアクセスするために互いに組み合わせて用いられるかもしれない。その結果、更に複雑なものになる。
【０００５】
更に、グループ化されたデータのセット（またはサブセット）の全てではないデータが所望の計算されたコンピューティングオペレーションを行なうよう求められることが多い。例えば、データベースは、多くの顧客についての勤務先のアドレスを含むアドレスオブジェクトを含むかもしれない。各アドレスオブジェクトは、通りフィールド、都市フィールド、州フィールド及び郵便番号フィールドを含むことができる。しかしながら、郵便番号フィールド内の値だけが所望のオペレーション（例えば、郵便番号ごとの顧客の数を割り出すこと）を行なうことに関係がある。よって、クエリは、各アドレスオブジェクトの郵便番号フィールドから値を取得するために発行されるかもしれない。
【０００６】
残念なことに、全てではないがほとんどのデータベースシステムにおいて、クエリがオブジェクトの一部（例えば、オブジェクト内のフィールド）を参照する場合、オブジェクト全体がインスタンスを作成されて、オブジェクト全体の積極的な評価を要求する。即ち、オブジェクト全体が、オブジェクトの一部だけを参照するクエリを処理する前に評価される。例えば、郵便番号クエリは、郵便番号クエリを処理する前にアドレスオブジェクト全体のインスタンスを作成する必要がある。クエリに関係しないデータのインスタンスを作成して評価することは、コンピュータシステムのリソースを必要以上に消費して、クエリ処理の非効率性につながる。
【０００７】
更に、オブジェクトサイズが大きくなるにつれて、コンピュータシステムのリソースを必要以上に消費してクエリ処理の非効率性も増す。例えば、オーダを表すオブジェクトの作成を記述する以下のオブジェクトのクエリを検討する。
【０００８】
【数１】
0005426667.tif 000002
【０００９】
そうすると、オブジェクトに関するクエリ、
Ａｄｄｒｅｓｓ  ａｄｄｒｅｓｓ＝ｏｒｄｅｒ．Ａｄｄｒｅｓｓ
【００１０】
このクエリの典型的な評価は、オーダオブジェクトに最初にインスタンスを作成するよう要求する。結果として、その時ＩｔｅｍＣｏｕｎｔプロパティの式、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓプロパティの式、及びＴｏｔａｌＣｏｓｔプロパティの式の積極的な評価になる。次に、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティの値が、オーダオブジェクトのインスタンスから検索される。オーダオブジェクトの作成並びにＩｔｅｍＣｏｕｎｔプロパティ及びＴｏｔａｌＣｏｓｔプロパティについての式の評価は、２番目のクエリによって用いられないが、いずれにせよコンピュータシステムのリソース及び時間がこれらの作成及び評価で使われた。
【発明の概要】
【００１１】
本発明は、クエリ内のオブジェクトを仮想化する方法、システム、及びコンピュータプログラム製品に対して適用される。いくつかの実施形態では、オブジェクト全体を構築せずにオブジェクトの一部にアクセスできるといった方法でオブジェクトが作成される。クエリエバリュエータは、データ構造ステートメント（例えば、オブジェクトのクエリのフラグメント）を受信する。データ構造ステートメントは、データ構造ステートメントによってプロパティ識別子の構造及び１つまたは複数のプロパティ識別子が表されるオブジェクトのタイプの指標を含む。各プロパティ識別子は、オブジェクトのプロパティを特定する。データ構造ステートメントはまた、１つまたは複数の対応するマッピング手段を含む。対応するマッピング手段の各々は、クエリ式にプロパティ識別子をマッピングする。クエリ式は、プロパティ識別子で特定されるオブジェクトのプロパティについての値を計算する方法を示す。
【００１２】
クエリエバリュエータは、データ構造ステートメントを受信するとデータプロバイダを作成する。データプロバイダがデータアクセスを仮想化することによって、データ構造ステートメントによって記述されているオブジェクトのプロパティは、データ構造ステートメント全体を評価する必要なしにまたはオブジェクト全体を完全に構築する必要なしにアクセスすることができる。いくつかの実施形態において、データプロバイダは、データ構造ステートメントに対する参照手段を含む。参照手段には、データ構造ステートメントのタイプ、プロパティ識別子、及び対応するマッピング手段に戻る参照手段が中間的（transitively）に含まれる。
【００１３】
他の実施形態において、クエリエバリュエータはクエリに応答する。クエリエバリュエータは、プロパティ値アクセスクエリを受信する。プロパティ値アクセスクエリは、前に受信したデータ構造ステートメントにおいて特定されたプロパティのプロパティ値をクエリする。クエリエバリュエータは、プロパティ値アクセスクエリに含まれるデータに基づいて、前に受信したデータ構造ステートメントから作成されるデータプロバイダを特定する。データプロバイダがデータアクセスを仮想化することによって、構造ステートメントによって記述されたオブジェクトのプロパティは、データ構造ステートメント全体を評価する必要なしにまたはオブジェクト全体を完全に構築する必要なしにアクセスすることができる。
【００１４】
クエリエバリュエータは、クエリエバリュエータに付随する既知の場所（例えば、クエリエバリュエータによって用いられるスタック）に特定されたデータプロバイダを配する。クエリエバリュエータは、プロパティ値アクセスクエリについてのデータコンシューマを作成する。データコンシューマは、既知の場所から、特定されたデータプロバイダにアクセスする。
【００１５】
データコンシューマは、データプロバイダに特定されたプロパティのプロパティ値を要求する。データコンシューマは、データプロバイダから特定されたプロパティのプロパティ値を受信する。データコンシューマは、更なる処理のために既知の場所に受信したプロパティ値を配する。
【００１６】
この概要は、以下の詳細な説明において更に説明される簡略化された形式の概念の選択を導くために提供されている。この概要は、請求された本発明の重要な特徴または基本的特徴を識別することを意図していないし、請求された本発明の範囲を決定する際の助けとして用いられることも意図していない。
【００１７】
本発明の更なる特徴及び利点は、後に続く詳細な説明に記載されていて、一部は詳細な説明から明らかになり、または本発明の実施によって理解することができる。本発明の特徴及び利点は、添付の特許請求の範囲で特に指摘した手段及び組み合わせによって実現することができかつ得ることができる。本発明のこれらの特徴及び他の特徴は、以下の詳細な説明及び添付の特許請求の範囲からさらに完全に明らかになるかまたは以下に記載されるような本発明の実施によって理解することができる。
【００１８】
本発明の上記した利点及び特徴並びに他の利点及び特徴を得ることができる方法を説明するために、上記に短く説明した本発明についてのより詳細な説明は、添付の図面に示したその具体的な実施形態を参照することで提供される。これらの図面は本発明の代表的な実施形態だけを示していて、従ってその範囲を限定しているとみなしてはならないという了解の下で、本発明は、添付の図面を用いて更なる細かい点及び詳細によって説明される。
【図面の簡単な説明】
【００１９】
【図１Ａ】データアクセスを仮想化するオブジェクトの作成を容易にする例示的なコンピュータアーキテクチャを示す図である。
【図１Ｂ】クエリへの応答を容易にする更なるコンポーネントを含む図１Ａの例示的なコンピュータアーキテクチャを示す図である。
【図１Ｃ】クエリへの応答を容易にする更なるコンポーネントを含む図１Ｂの例示的なコンピュータアーキテクチャを示す図である。
【図２】データアクセスを仮想化するオブジェクトを作成する例示的な方法のフローチャートである。
【図３】クエリに応答する例示的な方法の流れを示す図である。
【発明を実施するための形態】
【００２０】
本発明は、クエリ内のオブジェクトを仮想化する方法、システム、及びコンピュータプログラム製品に対して適用される。いくつかの実施形態において、オブジェクト全体を構築せずにオブジェクトの一部にアクセスできるといった方法で、オブジェクトが作成される。クエリエバリュエータは、データ構造ステートメント（例えば、オブジェクトのクエリのフラグメント）を受信する。データ構造ステートメントは、データ構造ステートメントによってプロパティ識別子の構造及び１つまたは複数のプロパティ識別子が表されるオブジェクトのタイプの指標を含む。各プロパティ識別子はオブジェクトのプロパティを特定する。データ構造ステートメントはまた、１つまたは複数の対応するマッピング手段を含む。対応するマッピング手段の各々は、プロパティ識別子をクエリ式にマッピングする。クエリ式は、プロパティ識別子で特定されるオブジェクトのプロパティについての値を計算する方法を示す。
【００２１】
クエリエバリュエータは、データ構造ステートメントを受信するとデータプロバイダを作成する。データプロバイダがデータアクセスを仮想化することによって、データ構造ステートメントによって記述されたオブジェクトのプロパティは、データ構造ステートメント全体を評価する必要なしにまたはオブジェクト全体を完全に構築する必要なしにアクセスすることができる。いくつかの実施形態において、データプロバイダは、データ構造ステートメントの参照手段を含む。参照手段には、データ構造ステートメントのタイプ、プロパティ識別子、及び対応するマッピング手段に戻る参照手段が含まれる。
【００２２】
他の実施形態において、クエリエバリュエータはクエリに応答する。クエリエバリュエータはプロパティ値アクセスクエリを受信する。プロパティ値アクセスクエリは、前に受信してデータ構造ステートメントにおいて特定されたプロパティのプロパティ値をクエリする。クエリエバリュエータは、プロパティ値アクセスクエリに含まれるデータに基づいて、前に受信したデータ構造ステートメントから作成したデータプロバイダを特定する。データプロバイダがデータアクセスを仮想化することによって、データ構造ステートメントによって記述されるオブジェクトのプロパティは、データ構造ステートメント全体を評価する必要なしにまたはオブジェクト全体を完全に構築する必要なしにアクセスすることができる。
【００２３】
クエリエバリュエータは、クエリエバリュエータに付随する既知の場所（例えば、クエリエバリュエータによって用いられるスタック）に特定されたデータプロバイダを配する。クエリエバリュエータは、プロパティ値アクセスクエリのためにデータコンシューマを作成する。データコンシューマは、既知の場所から、特定されたデータプロバイダにアクセスする。
【００２４】
データコンシューマは、データプロバイダに特定されたプロパティのプロパティ値を要求する。データコンシューマは、データプロバイダから特定されたプロパティのプロパティ値を受信する。データコンシューマは更なる処理のために既知の場所に受信したプロパティ値を配する。
【００２５】
本発明の実施形態は、以下でより詳細に検討されるように、コンピュータハードウェアを含む専用コンピュータまたは汎用コンピュータを含んでもよいしまたはこれらを利用してもよい。本発明の範囲内の実施形態はまた、コンピュータ実行可能命令及び／またはコンピュータ実行可能データ構造を搬送するかまたは格納するための物理的な他のコンピュータ可読媒体を含む。かかるコンピュータ可読媒体は、汎用コンピュータシステムまたは専用コンピュータシステムがアクセスすることができるあらゆる利用可能な媒体であってもよい。コンピュータ実行可能命令を格納するコンピュータ可読媒体は、物理的な記憶媒体である。コンピュータ実行可能命令を搬送するコンピュータ可読媒体は、伝送媒体である。よって、例であって限定ではないが、本発明の実施形態は、少なくとも２つの明らかに異なる種類のコンピュータ可読媒体を含むことができる。即ち、物理的な記憶媒体及び伝送媒体である。
【００２６】
物理的な記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、またはコンピュータ実行可能命令もしくはコンピュータ実行可能データ構造の形で所望のプログラムコード手段を格納するために用いることができかつ汎用コンピュータまたは専用コンピュータがアクセスすることができるあらゆる他の媒体を含む。
【００２７】
「ネットワーク」は、コンピュータシステム及び／もしくはコンピュータモジュール並びに／または他の電子デバイスの間で電子データの搬送を可能にする１つまたは複数のデータリンクと定義される。情報がネットワークまたは他の通信接続（有線、無線、または、有線もしくは無線の組合せのいずれか）を介してコンピュータに転送されるかまたは提供されると、コンピュータは、該接続を伝送媒体と適切にみなす。伝送媒体は、ネットワーク及び／またはデータリンクを含むことができ、これらは、コンピュータ実行可能命令またはコンピュータ実行可能データ構造の形で所望のプログラムコード手段を搬送するために用いることができかつ、汎用コンピュータまたは専用コンピュータがアクセスすることができる。上記の組合せも、コンピュータ可読媒体の範囲に含まれなければならない。
【００２８】
また、コンピュータ実行可能命令またはコンピュータ実行可能データ構造の形のプログラムコード手段は、様々なコンピュータシステムコンポーネントに到ると、伝送媒体から物理的な記憶媒体（またはその逆）に自動的に転送される。例えば、ネットワークまたはデータリンクを介して受信されるコンピュータ実行可能命令またはコンピュータ実行可能データ構造は、ネットワークインタフェースモジュール（例えば「ＮＩＣ」）内のＲＡＭにおいてバッファリングすることができて、次に最終的にはコンピュータシステムＲＡＭ及び／またはコンピュータシステムのより揮発性でない物理的な記憶媒体に転送することができる。よって、物理的な記憶媒体は、伝送媒体を同様に（または主として）利用するコンピュータシステムのコンポーネントに含むことができると理解しなければならない。
【００２９】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに特定の機能または特定の機能グループを実行させる命令及びデータを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間フォーマットの命令、またはソースコードであってもよい。本発明は、構造的特徴及び／または方法論的動作に固有の言語で説明されてきたが、添付の特許請求の範囲において画定される本発明は必ずしも説明された特徴または上記の動作に限定されるわけではないと理解されることになっている。むしろ、説明される特徴及び動作は、特許請求の範囲を実施する例示的な形式として開示されている。
【００３０】
当業者は、本発明を多くのタイプのコンピュータシステムコンフィギュレーションを有するネットワークコンピューティング環境において実施することができると認めることができる。コンピュータシステムコンフィギュレーションは、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、携帯端末、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電化製品またはプログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ポケットベル、ルータ、スイッチなどを含む。本発明はまた、分散処理システム環境において実施することができる。分散処理システム環境において、ネットワークを介して（有線データリンク、無線データリンク、または有線データリンクと無線データリンクとの組み合わせのいずれかによって）リンクされている、ローカルのコンピュータシステム及びリモートのコンピュータシステムは両方ともタスクを実行する。分散システム環境において、プログラムモジュールは、ローカルのメモリ記憶装置及びリモートのメモリ記憶装置に設けられてもよい。
【００３１】
図１Ａは、データアクセスを仮想化するオブジェクトの作成を容易にする例示的なコンピュータアーキテクチャ１００を示す。図１Ｂは、クエリに応答するのを容易にする更なるコンポーネントを含むコンピュータアーキテクチャ１００を示す。図１Ｃは、クエリに応答するのを容易にする更なるコンポーネントを含むコンピュータアーキテクチャ１００を示す。よって、コンピュータアーキテクチャ１００は、クエリエバリュエータ１０１、データレポジトリ１０２、及びキャッシュ１０３を含む。オブジェクト作成及び／またはクエリ評価の間の異なる時間に、コンピュータアーキテクチャ１００はまた、例えば、データコンシューマ１０６（図１Ｂ）、データコンシューマ１０７（図１Ｃ）、及びデータコンシューマ１０８（図１Ｃ）などの１つまたは複数のデータコンシューマ、並びに例えば、データプロバイダ１７１（図１Ａ及び１Ｂ）及びデータプロバイダ１７３Ｂ（図１Ｃ）などの１つまたは複数のデータプロバイダを含むことができる。
【００３２】
示したコンポーネントの各々は、例えば、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）、及びインターネットなどのネットワーク（またはこれらの一部）を介して互いに接続することができる。従って、示したコンポーネントの各々及びあらゆる他の接続されたコンポーネントは、メッセージ関連データを生成し、メッセージ関連データ（例えば、インターネットプロトコル（「ＩＰ」）データグラム及び、伝送制御プロトコル（「ＴＣＰ」）、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）、ＳＭＴＰ（Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）等のＩＰデータグラムを利用する他のより上位層のプロトコル）をネットワークを介して交換することができる。
【００３３】
本発明の実施形態はまた、通常、要求／応答メッセージ対を含むプロトコルを実施する。要求は、データコンシューマからデータプロバイダに送信され、次に応答は、データプロバイダからデータコンシューマに返信される。要求は、アクセスされることになっているプロパティについての識別子及び、コンシューマとプロバイダとの間の二次的なプロトコルのメンテナンスのための利用可能な他の情報を含む。応答は、アクセスされたプロパティの値（データオブジェクト／プロトコルプロバイダの別の仮想化された表現であってもよい）及びプロバイダとコンシューマとの間の二次的なプロトコルのメンテナンスのための他の情報を含む。
【００３４】
図１を参照すると、クエリエバリュエータ１０１は、通常、式からコンパイルされる命令セットを実行するよう構成されている。クエリエバリュエータは、内部状態のセットを維持することができ、該内部状態のセットは、各命令によって実行されるときに読み出されて更新される。通常、命令は、クエリエバリュエータ１０１のそのときの状態から前の命令の結果を読み出して、該結果を更なる命令が利用できるようにクエリエバリュエータ１０１のそのときの状態に戻る結果を書き込む。
【００３５】
クエリエバリュエータ１０１がオブジェクト作成命令（例えば、ｎｅｗ  Ｏｒｄｅｒ（）｛．．．｝）に出会うといつも、クエリエバリュエータ１０１は、データプロバイダを作成して、データプロバイダが仮想化しているオブジェクトのタイプに関する情報（例えば、プロパティ識別子のリスト）をデータプロバイダに追加する。次に、データプロバイダは、エバリュエータのそのときの状態に配されて、該データプロバイダを更なる命令が利用できるようにする。クエリエバリュエータ１０１がプロパティアクセス命令（例えば、ｏｒｄｅｒ．ＩｔｅｍＣｏｕｎｔ）に出会うときはいつも、クエリエバリュエータ１０１は、データコンシューマを作成し、該データコンシューマに、クエリエバリュエータ１０１のそのときの状態から検索されるプロバイダとともにプロパティの識別子を渡す。データコンシューマの評価の結果は、クエリエバリュエータ１０１のそのときの状態に配されて、そこで該結果を更なる命令が用いることができる。
【００３６】
従って、クエリエバリュエータ１０１は、通常、データ構造ステートメントを受信して、該データ構造ステートメントからデータプロバイダを作成するよう構成されている。
【００３７】
いくつかの実施形態において、データ構造ステートメントは、構文木に基づいて定義されたオブジェクトを表す。例えば、データ構造ステートメント１５１は、構文木１５７に基づいて定義されたオーダオブジェクト１６１を表す。通常、構文木（抽象構文木（「ＡＳＴ」）と称されることもある）は、有向木であり、そこで各内部ノードは構成概念（コンストラクト）を表し、そのノードの子が構成概念の意味のあるコンポーネントを表す。例えば、構文木１５７を参照すると、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂの子は、アドレス構成概念である。Ｓｔｒｅｅｔプロパティ１６３Ｂ１、Ｃｉｔｙプロパティ１６３Ｂ２、Ｓｔａｔｅプロパティ１６３Ｂ３、及びＺｉｐＣｏｄｅプロパティ１６３Ｂ４は、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂのアドレス構成概念の子という意味のあるコンポーネントを表す。
【００３８】
構文木１５７は、以下に類似するクエリのフラグメントを表すことができる。該以下は、
【００３９】
【数２】
0005426667.tif 000003
【００４０】
従って、クエリエバリュエータ１０１は、データ構造ステートメント１５１を受信して、データ構造ステートメント１５１からデータプロバイダ１７１を作成することができる。データプロバイダ１７１は、オブジェクト１６１へのデータアクセスを仮想化する。データアクセスを視覚化することによって、データ構造ステートメント１５１を完全に評価（即ち、構文木１５７の各プロパティについての実際のデータ値を取得する）する必要なしに、オブジェクト１６１のプロパティへのアクセスを提供することが容易になる。データアクセスを活性化することはまた、オブジェクト１６１を完全に構築することなしに、オブジェクト１６１のプロパティへのアクセスを提供することを含む。
【００４１】
データレポジトリ１０２は、データベースまたはデータを格納する他のデータ記憶場所を表す。データ構造ステートメントは、データレポジトリ１０１にデータを追加するか、データレポジトリのデータに関するビューを提供するか、またはデータレポジトリ１０１に格納されたデータを修正するよう構成されていてもよい。
【００４２】
通常、データプロバイダは、例えば、Ｏｒｄｅｒ  ｏｒｄｅｒ＝ｎｅｗ  Ｏｒｄｅｒ（）｛ＩｔｅｍＣｏｕｎｔ＝ｉｔｅｍｓ．Ｃｏｕｎｔ（），．．．｝などの、データの構成概念を記述するクエリ式が評価されるたびに、（例えば、クエリエバリュエータ１０１によって）作成される。各データプロバイダは、該データプロバイダが表すオブジェクトのタイプに関する情報を含む。この情報の一部は、オブジェクト（例えば、ＩｔｅｍＣｏｕｎｔ）に含まれるプロパティの全ての識別子のリストである。各データプロバイダはまた、リストの各プロパティ識別子とクエリ式との間の関連マップを含む。クエリ式は、その仮想化されたインスタンス（例えば、Ｉｔｅｍｓ．Ｃｏｕｎｔ（））についてのプロパティの値を算出するために用いられる。データプロバイダはまた、プロパティ識別子（各プロパティの結果のキャッシュなど）についての更なる関連マップを維持することができる。
【００４３】
要求メッセージがデータプロバイダで受信されると、データプロバイダは、メッセージからプロパティ識別子を抽出し、その関連マップにおいて対応するクエリ式を探す。データプロバイダはまた、プロパティについてのその他の関連マップからあらゆる情報（例えば、プロパティについて前にキャッシュされた値）を検索することができる。データプロバイダはまた、要求メッセージ（例えば、キャッシュされた値についてのＴＴＬ（ｔｉｍｅ−ｔｏ−ｌｉｖｅ）仕様に含まれるあらゆる追加情報を利用することができる。
【００４４】
次にデータプロバイダは、プロパティについてのクエリ式を処理するためにクエリエバリュエータ１０１を呼び出して、場合によりその内部マップ及び／または要求メッセージからのあらゆる二次的な情報を伝える。クエリ評価の（あらゆる二次的な情報を含む）結果は、（例えば、クエリの結果をキャッシュしている）データプロバイダ内で、関連マップを更新するために用いられる。クエリの結果（及びあらゆる二次的な情報）は、応答メッセージにパッケージングされる。次に、応答メッセージが、データプロバイダに対して要求を開始したクライアントに送信される。
【００４５】
ここで図２を参照すると、図２は、データアクセスを仮想化するオブジェクトを作成する例示的な方法２００のフローチャートを示す。方法２００は、図１Ａに示したコンピュータアーキテクチャ１００のコンポーネント及びデータに関して説明される。
【００４６】
方法２００は、データ構造ステートメントを受信する動作を含む（動作２０１）。例えば、クエリエバリュエータ１０１は、データ構造ステートメント１５１を受信することができる。データ構造ステートメント１５１は、コンピュータアーキテクチャ１００（図示せず）内のいくつかの他のネットワーク化されたコンピュータシステムから受信することができる。あるいは、データ構造ステートメント１５１は、クエリ式を評価するクエリエバリュエータ１０１の結果として受信することができる。
【００４７】
データ構造ステートメントは、データ構造ステートメントによってその構造が表されるオブジェクトのタイプの指標を含む。例えば、データ構造ステートメント１５１は、データ構造ステートメント１５１によってオーダオブジェクト１６１の構造が表されることを示すオブジェクトタイプ１５２を含む。データ構造ステートメント１５１は、データレポジトリ１０２においてデータに関するビューを定義することができる。
【００４８】
データ構造ステートメントはまた、１つまたは複数のプロパティ識別子を含む。例えば、データ構造ステートメント１５１は、プロパティ識別子１５３を含む。各プロパティ識別子はオブジェクトのプロパティを特定する。例えば、プロパティＩＤ １５３Ａは、ＩｔｅｍＣｏｕｎｔプロパティ１６３Ａを特定し、プロパティＩＤ １５３Ｂは、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓ  ｐｒｏｐｅｒｔｙ１６３Ｂを特定し、プロパティＩＤ  １５３Ｃは、ＴｏｔａｌＣｏｓｔプロパティ１６３Ｃを特定する。
【００４９】
データ構造ステートメントはまた、１つまたは複数の対応するマッピング手段を含む。例えば、データ構造ステートメント１５１は、マッピング手段１５４を含む。対応するマッピング手段の各々は、プロパティ識別子をクエリ式にマッピングする。例えば、マッピング手段１５４Ａは、プロパティＩＤ  １５３Ａをクエリ式１５６Ａにマッピングし、マッピング手段１５４Ｂは、プロパティＩＤ  １５３Ｂをクエリ式１５６Ｂにマッピングし、マッピング手段１５４Ｃは、プロパティＩＤ １５３Ｃをクエリ式１５６Ｃにマッピングする。各クエリ式は、プロパティ識別子によって特定されるオブジェクトのプロパティについての値を計算する方法を示す。例えば、クエリ式１５６Ａは、ＩｔｅｍＣｏｕｎｔプロパティ１６３Ａについての値を計算する方法を示し、クエリ式１５６Ｂは、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂについての値を計算する方法を示し、クエリ式１５６Ｃは、ＴｏｔａｌＣｏｓｔプロパティ１６３Ｃについての値を計算する方法を示す。
【００５０】
方法２００は、データ構造ステートメントを受信するとデータプロバイダを作成する動作を含む（動作２０２）。例えば、クエリエバリュエータ１０１は、データ構造ステートメント１５１を受信するとデータプロバイダ１７１を作成することができる。データプロバイダ１７１がデータアクセスを仮想化することによって、（データ構造ステートメント１５１によって記述された）オーダオブジェクト１６１のプロパティは、データ構造ステートメント１５１を完全に評価する必要なしにまたはオーダオブジェクト１６１を完全に構築する必要なしにアクセスすることができる。
【００５１】
例えば、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂの全てのプロパティを評価しているクエリエバリュエータ１０１の代わりに、データプロバイダ１７１は、これらのプロパティ（例えば１６３Ｂ１、１６３Ｂ２、１６３Ｂ３、及び１６３Ｂ４）についての値を、該値がその後要求されるイベントにおいて評価することができる方法を代わりに示す。（例えば、次のプロパティ値アクセスクエリに応じて更なるデータ構造ステートメント「ｎｅｗ  Ａｄｄｒｅｓｓ（）」を評価すること）。更に、データプロバイダ１７１は、オーダオブジェクト１６１の部分的な構造を表す。従って、リソースは、データレポジトリ１０２への潜在的に不必要なアクセスを最小にすることによってかつオブジェクト１６１の一部を格納するメモリの潜在的に不必要な割り当てを最小にすることによって節約される。データアクセス及びメモリ割り当てを最小にすることによって、より効率的なクエリ処理が促進される。
【００５２】
いくつかの実施形態において、データプロバイダ（例えば、一番上の階層のオブジェクトについて最初に作成したデータプロバイダ）は、データ構造ステートメントに対する参照手段を含む。例えば、データプロバイダ１７１は、データ構造ステートメント１５１に対する参照手段１５１Ｒを含む。参照手段は、データ構造ステートメントのタイプ、プロパティ識別子、及び対応するマッピング手段に対する参照手段を中間的に含む。例えば、参照手段１５１Ｒは、オブジェクトタイプ１５２、プロパティ識別子１５３、及びマッピング手段１５４に対する参照手段を中間的に含む。
【００５３】
ここで図１Ｂを参照すると、図１Ｂは、クエリへの応答を容易にする更なるコンポーネントを含むコンピュータアーキテクチャ１００を示す。よって、通常、クエリエバリュエータ１０１はまた、例えばプロパティ値アクセスクエリなどのクエリに応答するよう構成されている。プロパティ値アクセスクエリに応じて、クエリエバリュエータ１０１は、適切なデータプロバイダを特定してプロパティ値アクセスクエリに応答することができる。クエリエバリュエータ１０１は、特定されたデータプロバイダをスタック１０４に配することができる。
【００５４】
クエリエバリュエータ１０１は、データコンシューマを作成して、特定されたデータプロバイダとインタラクションすることができる。データコンシューマは、スタック１０４から、特定されたデータプロバイダにアクセスして、該特定されたデータプロバイダにプロパティ識別子を送信することができる。データプロバイダは、プロパティ識別子に対応するクエリ式を評価して、データコンシューマに結果を返すことができる。データコンシューマは、該結果をスタック１０４に配することができる。クエリ式の評価は、データベース１０２を参照して実際のデータ値にアクセスすることを含むことができる。
【００５５】
いくつかの実施形態において、前に作成されたデータプロバイダは、キャッシュ１０３からアクセスされる。
【００５６】
図３は、クエリに応答する例示的な方法３００のフローチャートを示す。方法３００は、図１Ｂに示したコンピュータアーキテクチャ１００のコンポーネント及びデータに関して説明される。
【００５７】
方法３００は、プロパティ値アクセスクエリを受信する動作を含み、プロパティ値アクセスクエリは、前に受信したデータ構造ステートメントにおいて特定されたプロパティのプロパティ値をクエリしている（動作３０１）。例えば、クエリエバリュエータ１０１は、プロパティ値アクセスクエリ１２１を受信することができる。プロパティ値アクセスクエリ１２１は、データ構造ステートメント１５１からのＩｔｅｍＣｏｕｎｔプロパティ１６３Ａのプロパティ値についてのクエリである。クエリエバリュエータ１０１は、プロパティ値アクセスクエリ１２１を解析して、プロパティ値アクセスクエリ１２１の「ｏｒｄｅｒ」部分がオーダオブジェクト１６１を特定しかつプロパティ値アクセスクエリ１２１の「ＩｔｅｍＣｏｕｎｔ」部分がＩｔｅｍＣｏｕｎｔプロパティ１６３Ａを特定することができると判断することができる。よって、この情報から、クエリエバリュエータ１０１はまた、プロパティＩＤ １５３Ａがクエリされているプロパティに対応すると判断することができる。
【００５８】
方法３００は、プロパティ値アクセスクエリに含まれるデータに基づいて、前に受信したデータ構造ステートメントから作成したデータプロバイダを特定する動作を含む（動作３０２）。例えば、クエリエバリュエータ１０１は、プロパティ値アクセスクエリ１２１に含まれる用語「ｏｒｄｅｒ」に基づいて（データ構造ステートメント１５１から作成した）データプロバイダ１７１を特定することができる。
【００５９】
アクセスされたデータプロバイダがデータアクセスを仮想化することによって、データ構造ステートメントによって記述されたオブジェクトのプロパティは、データ構造ステートメント全体を評価する必要なしにまたはオブジェクト全体を完全に作成する必要なしにアクセスすることができる。例えば、前に説明したように、データプロバイダ１７１は、オーダオブジェクト１６１のプロパティへのデータアクセスを仮想化する。
【００６０】
方法３００は、クエリエバリュエータに付随する既知の場所に特定されたデータプロバイダを配する動作を含む（動作３０３）。例えば、クエリエバリュエータ１０１は、データプロバイダ１７１をスタック１０４に配することができる。
【００６１】
通常、例えばｏｒｄｅｒ．ＩｔｅｍＣｏｕｎｔなどのプロパティ値のアクセスを記述するクエリ式が評価されるたびに、プロトコルコンシューマは（例えば、クエリエバリュエータ１０１によって）評価される。プロトコルコンシューマは、データプロバイダからアクセスすることになっているプロパティの識別子及び通信することになっているデータプロバイダのインスタンスを（例えば、クエリエバリュエータ１０１によって）与えられる。
【００６２】
データコンシューマは、プロパティ識別子及びおそらくクエリエバリュエータから入手可能なあらゆる追加の帯域外の情報（例えば、キャッシュした値のＴＴＬ）を含む要求メッセージを構築する。次に、コンシューマは、プロバイダに要求を送って応答を待つ。応答をデータプロバイダから受信すると、コンシューマはプロパティの結果値を取り出して、クエリエバリュエータ１０１に該結果値を返し、次にクエリエバリュエータ１０１は、更なるクエリによる消費のために該結果値をスタック１０４に配する。データコンシューマはまた、応答メッセージ内に含まれる追加の情報に基づいて、クエリエバリュエータ１０１のあらゆる追加の状態／帯域外の情報を更新する。
【００６３】
従って、方法３００は、プロパティ値アクセスクエリについてのデータコンシューマを作成する動作を含む（動作３０４）。例えば、クエリエバリュエータ１０１は、データコンシューマ１０６を作成することができる。作成されたデータコンシューマは、プロパティ値をクエリされているプロパティに対応しているプロパティ識別子を渡される。例えば、クエリエバリュエータ１０１は、データコンシューマ１０６に、プロパティＩＤ １５３Ａを渡すことができる（またはプロパティＩＤ  １５３Ａを含むようにデータコンシューマ１０６を構築することができる）。
【００６４】
方法３００は、既知の場所から、特定されたデータプロバイダにアクセスするデータコンシューマの動作を含む（動作３０５）。例えば、データコンシューマ１０６は、スタック１０４からデータプロバイダ１７１にアクセスすることができる。方法３００は、データプロバイダに特定されたプロパティのプロパティ値を要求するデータコンシューマの動作を含む（動作３０６）。例えば、データコンシューマ１０６は、データプロバイダ１７１にプロパティＩＤ １５３Ａを提示してＩｔｅｍＣｏｕｎｔプロパティ１６３Ａについてのプロパティ値を要求することができる。
【００６５】
データプロバイダ１７１は、プロパティＩＤ １５３Ａとクエリ式１５６Ａを照合することができる。次に、クエリエバリュエータ１０１は、クエリ式１５６Ａを評価して、ＩｔｅｍＣｏｕｎｔプロパティ１６３Ａについての値を作成することができる。例えば、クエリエバリュエータ１０１は、データレポジトリ１０２を参照し、データ１９７にアクセスして値１０８（例えば、オーダにおける項目の総数）を算出することができる。データプロバイダ１７１は、データコンシューマ１０６に値１０８を返すことができる。
【００６６】
方法３００は、データプロバイダから、特定されたプロパティのプロパティ値を受信するデータコンシューマの動作を含む（動作３０７）。例えば、データコンシューマ１０６は、データプロバイダ１７１から値１０８を受信することができる。方法３００は、更なる処理のために既知の場所に受信したプロパティ値を配するデータコンシューマの動作を含む（動作３０８）。例えば、データコンシューマ１０６は、値１０８をスタック１０４に（例えば、データプロバイダ１７１を置換して）配することができる。従って、ＩｔｅｍＣｏｕｎｔプロパティ１６３Ａについてのプロパティ値は、オブジェクト１６１を完全に作成することなしにかつプロパティ１６３Ｃ、１６２Ｂ１、１６２Ｂ２、１６２Ｂ３、及び１６２Ｂ４についての実際の値を評価する必要なしに取得することができる。
【００６７】
図１Ｃは、コンピュータアーキテクチャ３００を示し、クエリへの応答を容易にする更なるコンポーネントを含む。通常、クエリエバリュエータ１０１はまた、受信したプロパティ値アクセスクエリの処理の間に評価される更なるデータ構造ステートメントから更なるデータプロバイダを作成するよう構成されている。ここで図１Ｃを参照すると、いくつかの実施形態において、プロパティＩＤは、更なるデータ構造ステートメントであるクエリ式にマッピングすることができる。例えば、データプロバイダ１７１において、プロパティＩＤ １５３Ｂは、クエリ式１５６Ｂにマッピングされる。クエリ式１５６Ｂは、アドレスオブジェクトを作成するためのデータ構造ステートメント「ｎｅｗ  Ａｄｄｒｅｓｓ（）」である。更なるデータ構造ステートメントの評価は、更なるデータプロバイダを作成する可能性がある。例えば、クエリ式１５６Ｂの評価は、データプロバイダ１７３Ｂを作成する可能性がある。
【００６８】
よって、それ自体オブジェクトであるオブジェクトのプロパティも、リソースを節約しかつ効率的なクエリ処理を容易にするために仮想化することができる。例えば、更に図１Ｃを参照すると、クエリエバリュエータは、プロパティ値アクセスクエリ１２１を受信することができる。プロパティ値アクセスクエリ１２１は、データ構造ステートメント１５１からのＳｔｒｅｅｔプロパティ１６３Ｂ１のプロパティ値のクエリである。クエリエバリュエータ１０１は、プロパティ値アクセスクエリ１２１を解析して、プロパティ値アクセスクエリ１２１の「ｏｒｄｅｒ」部分がオーダオブジェクト１６１を特定し、プロパティ値アクセスクエリの「ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓ」部分がＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂを特定し、プロパティ値アクセスクエリ１２１の「Ｓｔｒｅｅｔ」部分がＳｔｒｅｅｔプロパティ１６３Ｂ１を特定すると判断することができる。よって、この情報から、クエリエバリュエータ１０１はまた、プロパティＩＤ  １５３Ｂ１はクエリされているプロパティに対応すると判断することができる。
【００６９】
クエリエバリュエータ１０１は、プロパティ値アクセスクエリ１２１に含まれている用語「ｏｒｄｅｒ．ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓ．Ｓｔｒｅｅｔ」に基づいて（データ構造ステートメント１５１から作成された）データプロバイダ１７１を特定することができる。クエリエバリュエータ１０１は、データプロバイダ１７１をスタック１０４に配することができる。
【００７０】
クエリエバリュエータ１０１は、データコンシューマ１０７を作成して、これにプロパティＩＤ １５３Ｂを与えることができる。プロパティ１５３Ｂに、データコンシューマ１０７は、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂについての値を要求することが可能である。これを行うために、データコンシューマ１０７は、スタック１０４からデータプロバイダ１７１にアクセスすることができる。次に、データコンシューマ１０７は、プロパティＩＤ １５３Ｂをデータプロバイダ１７１に提示してＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂについてのプロパティ値を要求することができる。
【００７１】
データプロバイダ１７１は、プロパティＩＤ １５３Ｂとクエリ式１５６Ｂを照合することができる。次に、クエリエバリュエータ１０１は、クエリ式１５６Ｂを評価することができる。クエリ式１５６Ｂの評価（更なるデータ構造ステートメント）は、データプロバイダ１７３Ｂの作成をもたらす。データプロバイダ１７３Ｂは、アドレスオブジェクト１６２を表すオブジェクトへのデータアクセスを仮想化する。アドレスオブジェクト１６２は、ＳｈｉｐｐｉｎｇＡｄｄｒｅｓｓプロパティ１６３Ｂの値であって、データプロバイダ１５１がオーダオブジェクト１６１へのデータアクセスを仮想化する方法と同様である。データプロバイダ１７１は、データコンシューマ１０７にデータプロバイダ１７３Ｂを返すことができる。データコンシューマ１０７は、データプロバイダ１７３Ｂを受信して、データプロバイダ１７３Ｂをスタック１０４に（例えば、データプロバイダ１７１を置換して）配することができる。
【００７２】
クエリエバリュエータ１０１は、データコンシューマ１０８を作成することができ、プロパティＩＤ  １５３Ｂ１を渡された。プロパティ１５３Ｂ１に、データコンシューマ１０８は、Ｓｔｒｅｅｔプロパティ１６３Ｂ１についての値を要求することが可能である。次に、データコンシューマ１０８は、スタック１０４からデータプロバイダ１７３Ｂにアクセスすることができる。データコンシューマ１０８は、プロパティＩＤ  １５３Ｂ１をデータプロバイダ１７３Ｂに提示して、Ｓｔｒｅｅｔプロパティ１６３Ｂ１についてのプロパティ値を要求することができる。
【００７３】
データプロバイダ１７３Ｂは、プロパティＩＤ １５３Ｂ１とクエリ式１５６Ｂ１を照合することができる。次にクエリエバリュエータ１０１は、クエリ式１５６Ｂ１を評価することができる。クエリ式１５６Ｂ１は、文字データ値「１２３ＡＢＣレーン」を評価する。データプロバイダ１７３Ｂは、データコンシューマ１０８に文字データ値「１２３ＡＢＣレーン」を返す。データコンシューマ１０８は、文字データ値「１２３ＡＢＣレーン」を受信して、文字データ値「１２３ＡＢＣレーン」をスタック１０４に（例えば、データプロバイダ１７３Ｂを置換して）配することができる。
【００７４】
いくつかの実施形態において、帯域外のデータは、構成されたクエリを介して送信される。帯域外のデータは、クエリの中で内部プロトコルを決めて維持するために用いることができる。例えば、ＴＴＬ（ｔｉｍｅ−ｔｏ−ｌｉｖｅ）値は、どれくらいの間データプロバイダがキャッシュされることになっているかを判断するために用いることができる。例えば、データコンシューマは、どれくらいの間データプロバイダがキャッシュされたままかをデータプロバイダに示せという要求において、例えば２５０ｍｓなどのＴＴＬ値を含むことができる。
【００７５】
従って、本発明の実施形態は、クエリとともに使用するためにデータアクセスを仮想化する。仮想化は、構文木のいずれかの部分の中で実施することができる。例えば、データは、それ自体別のオブジェクトであるオブジェクトのプロパティについて仮想化することができる。データの仮想化は、クエリ式の遅延評価を容易にする。即ち、クエリが具体的に実際のプロパティ値を要求するまで、データ構造ステートメント内のプロパティについての実際のプロパティ値は仮想化されている。更に、上記の通り、データ仮想化も、リソースを節約して、より効率的なクエリ評価をもたらす。
【００７６】
本発明は、その精神または本質的な特徴から逸脱することなく、他の特定の形態で具体化することができる。説明された実施形態は、例示的であって限定的でないとあらゆる点で考慮されることになっている。従って、本発明の範囲は、前述の詳細な説明よりもむしろ添付の特許請求の範囲で示される。特許請求の範囲の均等の意味及び範囲内で生じる全ての変更は、特許請求の範囲内に包含されることになっている。
【図１Ａ】
0005426667.tif 000004
【図１Ｂ】
0005426667.tif 000005
【図１Ｃ】
0005426667.tif 000006
【図２】
0005426667.tif 000007
【図３】
0005426667.tif 000008