(57)【要約】【課題】クエリを構成または構築するためのモジュラー形式または再利用可能なシステムを提供する。【解決手段】システムは、クエリオブジェクトについて、コンストラクタおよびアクセッサにアクセスするアプリケーションプログラミングインターフェースを含む。アプリケーションプログラミングインターフェースは、クエリオブジェクトを構築する助けとなる。【選択図】図１
2006244478.tif 000002
【特許請求の範囲】
【請求項１】
情報検索クエリを構築するシステムであって、
所定の構文を有するクエリ言語と、
前記クエリ言語で構築されたクエリをカプセル化する第１検索オブジェクトを生成するコンストラクタと
を含むことを特徴とするシステム。
【請求項２】
前記カプセル化されたクエリが、ツリー構造として表されることを特徴とする請求項１に記載のシステム。
【請求項３】
前記カプセル化されたクエリの前記ツリー構造は、前記カプセル化されたクエリの前記ツリー構造と異なる第２ツリー構造を参照することを特徴とする請求項２に記載のシステム。
【請求項４】
前記第１検索オブジェクトをカプセル化する第２検索オブジェクトをさらに含むことを特徴とする請求項３に記載のシステム。
【請求項５】
前記第２検索オブジェクトによって検索可能なファイルシステムへのインターフェースをさらに含むことを特徴とする請求項４に記載のシステム。
【請求項６】
前記ファイルシステムは、ディスクドライブ上に常駐することを特徴とする請求項５に記載のシステム。
【請求項７】
前記ファイルシステムは、独立ディスク冗長アレイ上に常駐することを特徴とする請求項５に記載のシステム。
【請求項８】
機械により解釈可能なデータ構造を含み、該データ構造は請求項４に記載のコンポーネントを含むことを特徴とするコンピュータ可読媒体。
【請求項９】
検索クエリを生成する方法であって、
所定の構文を有するクエリ言語を使用して、クエリの少なくとも一部を、最大でクエリ全体を含む部分を定義するステップと、
前記クエリの前記定義した部分をカプセル化する第１検索オブジェクトを構築するステップと
を含むことを特徴とする方法。
【請求項１０】
第１ツリー構造として前記定義したクエリを表現するステップをさらに含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記第１ツリー構造を使用して、前記第１ツリー構造と異なる第２ツリー構造を参照するステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記第１検索オブジェクトをカプセル化する第２検索オブジェクトを生成するステップをさらに含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記第２検索オブジェクトを使用して、ファイルシステム内の情報の位置を見つけるステップをさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記第２検索オブジェクトを使用することは、ファイルシステムインターフェースにアクセスするステップを含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
検索クエリを生成するシステムであって、
所定の構文を有するクエリ言語を使用して、クエリの少なくとも一部を、最大でクエリ全体を含む部分を定義する手段と、
前記クエリの前記定義した部分をカプセル化する第１検索オブジェクトを構築する手段と
を含むことを特徴とするシステム。
【請求項１６】
第１ツリー構造として前記定義したクエリを表現する手段をさらに備えることを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記第１ツリー構造を使用して、前記第１ツリー構造と異なる第２ツリー構造を参照する手段をさらに備えることを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記第１検索オブジェクトをカプセル化する第２検索オブジェクトを生成する手段をさらに備えることを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記第２検索オブジェクトを使用して、ファイルシステム内の情報の位置を見つける手段をさらに備えることを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記第２検索オブジェクトを使用する前記手段は、ファイルシステムインターフェースにアクセスする手段を備えることを特徴とする請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クエリを構成または構築するためのモジュラー形式または再利用可能なシステムおよび方法に関する。
【背景技術】
【０００２】
今やコンピュータは、その主要タスクの一部として、データを記憶し、検索し、取り出すために普通に使用される。処理ユニットの計算スピードおよび記憶装置のデータ密度の劇的な向上など、様々なコンピューティング関連分野での進歩は、コンピューティングシステムによって、かつてないほど多くのデータを記憶し、検索し、取り出すことができることを意味する。現在、記憶、検索、取出しが可能なデータの量が膨大であることから、これら記憶されたデータを検索し整理するシステムに関する挑戦課題が生じる。
【０００３】
データの検索は、設計が複雑であり、実行速度も遅くなることがある。複雑さは通常、少なくとも部分的には、検索するデータの量およびこれらのデータを整理して記憶する方法に起因する。複雑さは、利用可能な大量のデータ内で所望の情報の検索を実施するのに用いる特定の手段に大きく依存することもある。クエリ言語の選択または検索クエリの生成など、この特定の手段は、検索を実行するスピードに大きな影響を及ぼす。
【０００４】
クエリを実施するには一般に、開発者が、所定のクエリ言語で構成されたクエリ全体を含む単一の大きな文字列その他のデータ構造を構築することを必要とする。次いで、開発者は通常、クエリ全体を、このクエリを実行する機能を提供するアプリケーションプログラミングインターフェース（「ＡＰＩ」）に渡さなければならない。構成されたクエリの個々の部分は通常、異なるクエリを生成するために容易に再利用することも、組み合わせることもできない。さらに、開発者は通常、クエリを構築する際にＡＰＩの支援が得られず、クエリ言語のすべての能力を全体的に知った上でクエリを生成しなければならない。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
一般に、様々な情報を位置決定するために個々のクエリの構築および再構築を行うのに多大な労力が費やされる。この手法は、コンピュータコードをモジュール化し、再利用可能にすべきであると教えるオブジェクト指向ソフトウエア工学の一般原理に相反するものである。オブジェクト指向の設計およびプログラミングの一般的なの利益が、情報検索システムでは概ね利用可能となっていない。現在のシステムは、クエリを構成または構築するためのモジュラー形式または再利用可能なソフトウエア設計の利益を提供することができない。
【課題を解決するための手段】
【０００６】
以下、ここで開示し説明するコンポーネントおよびこれらのコンポーネントに関連する方法のいくつかの態様を基本的に理解するための簡単な概要を提示する。この概要は、広範囲に及ぶ概説ではない。この概要は、主要な、または不可欠な要素を特定することも、範囲を画定することも意図していない。この概要の唯一の目的は、後で提示するより詳細な説明の前置きとして、簡略化した形でいくつかの概念を提示することである。さらに、本明細書で用いる項目の見出しは、単に便宜上設けられるものであり、いかなる形でも限定的にみなすべきではない。
【０００７】
データを照会するモジュール形式クエリを生成するシステムが提供される。このシステムは、開発者が、クエリオブジェクトについて、コンストラクタおよびアクセッサ（ａｃｃｅｓｓｏｒ）にアクセスするアプリケーションプログラミングインターフェースを含む。このアプリケーションプログラミングインターフェースは、これらのクエリオブジェクトを構築する助けにもなる。クエリオブジェクトは、クエリの少なくとも一部をカプセル化することができ、それら自体が他のクエリオブジェクト内にカプセル化されて、先にカプセル化したクエリ部分から形成されるより複雑なクエリが生成される。これらのクエリオブジェクトを直接使用するか、またはアプリケーションが使用して、記憶された情報を検索することができる。
【０００８】
検索クエリを表現するシステムが提供される。所定のクエリ言語で構成されたクエリの別々の部分は、ツリー構造で表現される。このツリー構造は、別のツリー構造を参照することによって、またはそれ自体を参照することによって、より複雑なクエリ構造の一部として使用する。ツリー構造は、クエリオブジェクト内にカプセル化されて、クエリを実施するときに使用される。
【０００９】
クエリオブジェクトは、クエリオブジェクトを合わせてリンクすることによって、または、クエリオブジェクトを互いにカプセル化することによって、より複雑なクエリの構成可能な構成単位として使用する。クエリオブジェクトは、記憶空間クエリ言語にマッピングするアプリケーション空間クエリ言語を使用して構築することができる。このようなマッピングは、スキーマ空間を使用して実行する。アプリケーション空間クエリ言語を使用して構築されたクエリオブジェクトは、アプリケーション空間クエリ言語と記憶空間クエリ言語の間にスキーマ空間を定義することによって、様々な記憶空間クエリ言語を使用してクエリする記憶された情報を位置決定することができる。
【００１０】
クエリビルダは、記憶された情報の検索中に使用するクエリオブジェクトを構築する助けとなる。このクエリビルダは、ユーザインターフェースを介してアクセスすることができる。このユーザインターフェースにより、ユーザは、クエリの一部を複数選択して完全なクエリに統合することができる。この完全なクエリを使用して、記憶された情報を検索することができる。このクエリビルダは、完全なクエリ自体を構築することもできるし、クエリ記述子を使用して、先立って構築され使用可能な一致するクエリオブジェクトを見つけることもできる。
【００１１】
ここで開示し説明するコンポーネントおよび方法は、以下で詳細に説明し、特許請求の範囲で具体的に指摘する特徴を含む。以下の説明および添付の図面では、特徴のある種の例を詳細に述べる。これらの特徴は、ここで開示し説明するコンポーネントおよび方法を利用可能な様々なやり方の一部を示す。ここで開示し説明するコンポーネントおよび方法の特定の実施形態は、このような特徴およびそれらの均等物の一部、またはこれらの多くの部分、あるいはこれら全部を含むことができる。本明細書で提示する特定の実施形態および実施例の変形形態は、以下の詳細な説明を図面と併せ読めば、当業者には明らかであろう。
【発明を実施するための最良の形態】
【００１２】
本明細書では、「コンポーネント」、「システム」、「モジュール」などの用語は、ハードウエア、（例えば、実行中の）ソフトウエア、および／またはファームウエアなど、コンピュータ関連の実体を指すことを意図している。例えば、コンポーネントは、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能ファイル、プログラム、および／またはコンピュータとすることができる。また、サーバ上で実行中のアプリケーションおよびこのサーバはともにコンポーネントとすることができる。１つまたは複数のコンポーネントは、プロセス内に常駐することができ、コンポーネントは、１つのコンピュータ上にローカルに配置するか、または、２つ以上のコンピュータに分散させるか、あるいはその両方とすることができる。
【００１３】
図面を参照して、ここで開示するコンポーネントおよび方法を説明する。これらの図面を通じて、同様の参照数字を用いて同様の要素を指す。以下の説明では、説明の便宜上、ここで開示する主題が完全に理解されるように、数多くの特定の細部を述べる。ただし、これら特定の細部のある部分は、特定の実施形態では、割愛するか、あるいは、他の部分と組み合わせることができることが明らかなことがある。他の例では、説明を実施するために、ある種の構造および装置をブロック図の形態で示す。さらに、ここで述べる特定の実施例では、クライアント／サーバアーキテキチャに適合する用語を使用し、また、これら特定の実施例は、クライアント／サーバの実施形態の例でさえあることがあるが、クライアントおよびサーバの役割を逆にすることが可能であることと、ここで開示し説明するコンポーネントおよび方法は、クライアント／サーバアーキテキチャに限定されず、ここで開示し説明するコンポーネントおよび方法の趣旨または範囲から逸脱することなく、他のアーキテキチャで、具体的には例えばピアツーピア（Ｐ２Ｐ）アーキテキチャで使用するのに容易に適合することが可能ことが当業者には理解されよう。さらに、本明細書で提示する特定の実施例では、特定のコンポーネントを含み、また参照することがあるが、本明細書で開示し説明するコンポーネントおよび方法の実施形態は、必ずしもこれら特定のコンポーネントに限定されず、他の状況でも使用可能であることに留意されたい。
【００１４】
人工知能に基づくシステム（例えば、明示的および／または暗示的に訓練される分類子）は、以下で説明するように、推論および／または確率による決定、または統計に基づく決定、あるいはその両方を実施することと関連して使用することができる。本明細書では、「推論」という用語は概ね、システム、環境、および／またはユーザの状態について、イベントによって取得された１組の観察結果および／またはデータから、論理的に考え、また推論するプロセスを指す。推論を利用して、例えば、特定のコンテキストまたはアクションを識別することもできるし、状態についての確率分布を生成することもできる。この推論は確率的である。例えば、推論は、データおよびイベントの考察に基づいて、対象とする状態について確率分布を計算することを含む。推論は、１組のイベントおよび／またはデータから、より高いレベルのイベントを構成するのに利用する技法を指すこともある。このような推論により、１組の観察されたイベントおよび／または記憶されたイベントデータから、これらのイベントが時間的に密接に相関するか否かにかかわらず、また、これらのイベントおよびデータが、１つのイベント／データ供給源または複数のイベント／データ供給源のいずれから得られるかにかかわらず、新しいイベントまたはアクションが構築される。様々な分類スキームおよび／または分類システム（例えば、サポートベクトルマシン、ニューラルネットワーク、エキスパートシステム、ベイジアンネットワーク（Ｂａｙｅｓｉａｎ  ｂｅｌｉｅｆ  ｎｅｔｗｏｒｋ）、ファジィ論理、データ融合エンジン（ｄａｔａ  ｆｕｓｉｏｎ  ｅｎｇｉｎｅ）その他の類似のシステム）を、自動的なアクションおよび／または推論されるアクションを実施することに関連して利用可能である。
【００１５】
さらに、ここで開示し説明するコンポーネントは、標準のプログラミング技法および／または工学技法を利用して、ソフトウエア、ファームウエア、ハードウエア、またはこれらの任意の組合せを生成し、それによってコンピュータを制御する方法、機器、または製品として実施可能である。本願明細書では、「製品」という用語は、任意のコンピュータ可読の装置、キャリア、または媒体からアクセス可能なコンピュータプログラムを含むことを意図している。例えば、コンピュータ可読媒体は、磁気記憶装置（ハードディスク、フロッピー（登録商標）ディス、磁気ストリップその他のタイプの媒体など）、光ディスク（コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）その他の類似の媒体のタイプなど）、スマートカード、およびフラッシュメモリ装置（例えば、カード、スティック、キードライブなど）を含むが、これらに限定されるものではない。さらに、キャリアを利用して、電子メールを送受信する際に用いるデータや、インターネットまたはローカルエリアネットワーク（ＬＡＮ）などのネットワークにアクセスする際に用いるデータなど、コンピュータ可読電子データを搬送可能であることを理解されたい。当然のことながら、ここで開示し説明するコンポーネントおよび方法の範囲または趣旨から逸脱することなく、この構成に多くの改変を加えることができることが当業者には理解されよう。
【００１６】
アプリケーションの開発者は、様々なやり方でクエリを構成する一連の簡単な個々のＡＰＩコールを使用して、様々なデータの組の間でいくつかの異なるタイプの結合を行うことをしばしば必要とする複雑なクエリを構築することができる。このＡＰＩ（本件特許出願人のＯＳのウィンドウズ（登録商標）内に内蔵され、種々の機能を提供するプログラムのこと）は、プログラマにクエリの能力を、見つけ出し、使用するのが簡単なやり方で公開することによって、クエリを構築する際の助けとなる。さらに、本明細書で開示し説明するＡＰＩなどのＡＰＩが提供する仕組みによって、プログラマは、他のクエリで、または異なるコンテキストで使用する類似のクエリで適用可能なモジュール形式の、または再利用可能な部分またはクエリを生成または形成することができる。
【００１７】
クエリを段階的に構築し構成することができるように、クエリを表現するのに用いる特定のクエリ言語を具体的に構築する。このような言語を用いると、開発者は、クエリを構築する場合に検索機能をよりよく利用することができる。このようなクエリ言語により、全部を、または部分的に再利用するモジュール形式のクエリの生成を実施することもできる。クエリの再利用、およびモジュールの置換による簡単な修正により、新しいクエリを生成するのに必要とされる時間を短縮することもできる。
【００１８】
図１は、クエリ構築システム１００のシステムブロック図である。クエリ構築システム１００を使用して、クエリをカプセルかするオブジェクトを生成することができる。構築されたオブジェクトを用いて、コンピュータシステム上に記憶された情報を検索することもできる。本明細書では、オブジェクトという用語は、オブジェクト指向コンピューティング環境におけるコンピューティングオブジェクトを指すだけでなく、ＣまたはＣ＋＋のプログラミング言語で見られるデータ構造体など、他のコンピューティングパラダイムからの他の適切なデータの構造体または構成体、あるいは実行可能コードとともにこのような構造体を組み合わせた物を指すこともある。
【００１９】
クエリ構築システム１００は、ストレージサーチャ（ｓｔｏｒａｇｅ  ｓｅａｒｃｈｅｒ）オブジェクト１２０を生成するのに使用するアプリケーションプログラミングインターフェース（「ＡＰＩ」）１１０を含む。このＡＰＩにより、とりわけ、コンストラクタおよびアクセッサなどのストレージサーチャオブジェクトのメソッドにアクセスすることができる。ＡＰＩ  １１０などのＡＰＩを使用することの利益の１つは、オブジェクトによって提供される共通に使用する機能または必要な機能を、明確に定められたシステムを介してプログラマにアクセス可能にすることである。別の利益は、ＡＰＩ  １１０を介して提供される機能のより低レベルの特定の実施形態の細部を、その機能に依存するコンポーネントをばらばらにせずに変更して、例えば、欠陥を補正することである。さらに、ＡＰＩ  １１０は、ＡＰＩ  １１０がアクセスを提供する機能およびコンポーネントが、使用されるプログラミング言語の一部ではないクエリ言語で構成され、検索を実施するために他のコンポーネントに渡されるクエリ文字列用のキャリアと異なり、クエリ言語の自然な感覚の部分になるように実装することができる。
【００２０】
ストレージサーチャオブジェクト１２０は、クエリ１３０をカプセル化する。クエリ１３０へのアクセスは、ＡＰＩ  １１０を使用して生成されたストレージサーチャオブジェクト１２０によって行う。このようなアクセスは、特定の実施形態で示すように、メソッドコールまたは他の何らかの適切なアクセスメソッドを利用して実現することができる。このような構成により、任意のまたは悪意のユーザまたはプロセスがクエリを、偶然であろうとなかろうと容易には変更し得ないという意味で、クエリの完全性を高めることができる。クエリ１３０は、固有の構文を有する所定のクエリ言語で構成する。この所定のクエリ言語の構文は、クエリ部分がモジュール形式または再利用可能になるように構築する。さらに、この構文は、ツリー構造内で、クエリまたはクエリの一部の表現を実施する。このようなツリー構造は、クエリの他の部分を蓄積し、より複雑なクエリを形成するために、他のツリー構造と結合することもできるし、他のツリー構造を参照することもできる。
【００２１】
図２は、クエリまたはクエリの一部を表すツリー構造２００のシステムブロック図である。ツリー構造２００は、複数のノード２１０を含む。各ノード２１０は、クエリ語句を含む。語句は、検索語句および演算子、特定の実施形態によっては、とりわけ、ｓｅｌｅｃｔ、ｐｒｏｊｅｃｔ、またはｊｏｉｎなどを含む。ノードは、例えばノード２１０の１つは、クエリ語句間の論理的なつながりを表現するために合わせてリンクする。ツリー構造２００は、クエリ全体を表現することもできるし、クエリの一部だけを表現することもできる。いずれの場合も、ツリー構造２００は、それを別のツリー構造と結合することによって、より複雑なクエリの一部として使用する。ツリー構造２００は、検索機能中に利用するために、検索オブジェクト内にカプセル化することができる。
【００２２】
ツリー構造２００は、（図示しない）式オブジェクトなどのオブジェクト内にカプセル化することもできる。この式オブジェクトは、図１に関連して開示し説明したストレージサーチャオブジェクト１２０などのサーチャオブジェクトによってカプセル化する。式オブジェクトは、クエリが構築される場合に形成することができる。同様に、式オブジェクトは、クエリが実行される場合に処理する。クエリ文字列に加えて、またはその代わりに、クエリを表す式オブジェクトを、サーチャコンストラクタに渡して、この式オブジェクトによって表されるクエリをカプセル化する新しいサーチャオブジェクトを生成することができる。
【００２３】
図３は、結合検索オブジェクトのシステムブロック図である。結合検索オブジェクトを用いて、それが結合するコンテキスト内で検索を実施することができる。この実施例では、また、必要に応じて、または適宜、他のところで、コンテキストは、検索ドメイン、または物理的な記憶区域、あるいはその両方を含む。この特定の実施例で示すように、サーチャオブジェクト３１０は、図１のＡＰＩ  １１０などのＡＰＩを用いて生成されたオブジェクトである。サーチャオブジェクト３１０は、クエリ３２０を含む。クエリ３２０は、単一の一体構造クエリとして、または部分クエリのモジュール断片から組み立てられた部分クエリの集合体として生成された完全なクエリとする。
【００２４】
サーチャオブジェクト３１０は、コンテキスト３３０に結合する。コンテキスト３３０は、所定のやり方で表現する１組の情報とすることができ、それによって、図に示すサーチャオブジェクト３１０などのサーチャオブジェクトによってこの組全体を通して検索を実施する。図示および説明の便宜上、１つのサーチャオブジェクト３１０および１つのコンテキスト３３０しか示さないが、２つ以上のサーチャオブジェクトを１つのコンテキストに結合可能であることに留意されたい。同様に、１つのサーチャオブジェクトを、２つ以上のコンテキストとともに使用可能である。このような使用法は、複数の結合によって、またはあるコンテキストとの既存の結合を除去し、新しいコンテキストとの新しい結合を追加することによって行うことができる。
【００２５】
サーチャ３１０などのサーチャオブジェクトは、オブジェクト指向プログラミング言語におけるクラスとして実装する。利用可能な適切なオブジェクト指向プログラミング言語の例は、Ｊａｖａ（登録商標）およびＳｍａｌｌＴａｌｋである。このクラスは、エニュメレーションメソッドを、クラスとして、あるいは１つまたは複数のクラスのインスタンスとして他のサーチャオブジェクトを構築するのに使用する他の様々なメソッドとともに実施する集合体として見えることがある。コンストラクタメソッドは、１つまたは複数の入力パラメータとして１つまたは複数のサーチャオブジェクトを受け取り、入力パラメータとして渡されるサーチャオブジェクトをカプセル化する新しいサーチャオブジェクトを出力することができる。このようにして、より複雑なクエリを構築することができる。構築されたサーチャオブジェクトは、他のタイプの中でも、フィルタリング、ソート、またはグループ化された集合体を表現することができる。サーチャオブジェクトによって表現されるクエリは、アプリケーションがサーチャオブジェクトのコンテキストに対してエニュメレーションを開始する場合に実行する。
【００２６】
代わりに、サーチャ３１０は、とりわけＣまたはＣ＋＋のような高級プログラミング言語で生成するデータ構造などのデータ構造として実装可能である。このタイプの実装形態では、そうでない場合にはオブジェクト指向フィーチャ、例えば他のカプセル化されたオブジェクトによって表されるサーチャオブジェクトの属性は、このようなデータ構造のフィールドとして実装することもできるし、そうでない場合には特定のオブジェクト指向フィーチャを表すのに適切な物として実装することもできる。このデータ構造のメンバフィールドにアクセスするか、またはメンバフィールドを使用するか、あるいはその他の方法で操作するように、適切な関数を定義する。他のコンピューティングパラダイム、とりわけ、関数プログラミングからの実施例が列挙されていないが、これらのパラダイムにおいて対応する実施形態が可能でないことを示唆するものではない。
【００２７】
コンテキスト３３０は、オブジェクト指向プログラミング言語におけるクラスとして実装することもできる。コンテキストクラスは、アイテムなど、開始点サーチャとして使用するいくつかの様々なプロパティを提供する。開始点サーチャ用のパターンは、１つまたは複数のプロパティ、または新しいサーチャを生成するための１つまたは複数のメソッド、あるいはその両方を含むデータクラスコード生成パターンとすることもできる。例えば、コンテキストクラスは、そのコンテキスト内のすべてのアイテムを表すアイテムプロパティを含む。エニュメレーションメソッドを利用して、サーチャオブジェクト内の各アイテムについての情報を表示することができる。ソートメソッドおよびグループメソッドなど、様々な操作メソッドを利用して、含まれているアイテムを所望のとおりに構成する。他の多くのプロパティまたはメソッドを実装可能である。例えば、コンテキスト３３０は、他のコンポーネントに関連して上述した別の適切なデータ構造として実装することができる。エニュメレーション機能または反復機能などの様々な機能は、このようなデータ構造とともに使用する。
【００２８】
先に述べたように、サーチャオブジェクト３１０などのサーチャオブジェクトは、クエリ３２０などのクエリをカプセル化することができる。クエリ３２０を構築するために、サーチャクラスは、クエリを構築するいくつかのメソッドを提供する。これらのメソッドは一般に、入力としてサーチャオブジェクトを受け取り、ある種のデータ操作関数を実施し、サブクエリとして、この入力サーチャオブジェクトをカプセル化する新しいサーチャオブジェクトを出力することができる。このようにして、ますます複雑なクエリを構成することができる。
【００２９】
クエリ言語における様々なコマンドによって実施される機能と類似の、または同様の機能を実施するために、多くの可能なメソッドを生成することができる。オブジェクトのプロパティ値に基づいて、これらのオブジェクトをフィルタリングするフィルタメソッドが提供される。タイプフィルタは、オブジェクトのタイプに基づいて、このオブジェクトをフィルタリングすることができる。タイプメソッドとしての処理は、サーチャオブジェクトとして、サブタイプに対して検索するサーチャオブジェクトから、スーパータイプに対して検索するサーチャに変換する。ソートメソッドは、１つまたは複数のプロパティ値に基づいてオブジェクトをソートする。プロジェクトメソッドは、１つまたは複数のオブジェクトの１つまたは複数の個々のプロパティを出力する。グループメソッドは、１つまたは複数の値に従ってオブジェクトをグループ化することができる。ユニオンメソッドは、２組のオブジェクトの和を生成する。さらに、クエリメソッドは、複雑なクエリを単一ステップ内で適用することができる。クエリメソッドを呼び出すショートカットとしてメソッドの起動を利用可能なように、メソッドが実装される。
【００３０】
カプセル化されたクエリおよびサブクエリを一続きのクエリとして使用して、クエリの各実行段階を他の各段階から分離することができる。その際、クエリの連続した実行段階はそれぞれ、先立つ段階によって生成されたデータにしか影響を及ぼし得ない。ただし、このスキームでは、潜在的に、後続の段階で実行されるコマンドにより、順序付けまたはグループ化の動作など、先立つ段階からの計算値または結果の少なくとも一部が元に戻されるか、破壊されることがある。この問題を軽減するために、あるメソッドによって実施される動作によって順序付けが保たれることが保証されるようにそのメソッドを実装することができる。それに加えて、またはその代わりに、順序付けまたはグループ化を保存することになる順序で起動されるようにメソッドが規定される。さらに、順序付けまたはグループ化のメソッドなど、ある種のタイプのメソッドが、ある種の段階で実行されないようにするか、これらのメソッドによって実施された作業が、後続のメソッドの起動によって元に戻されるか、または破壊される可能性が少ない段階でしか実行されないように制限することができる。
【００３１】
クエリを実行し、検索結果を得るために、検索オブジェクトまたは検索クラスは、いくつかのメソッドをサポートすることができる。例えば、ｇｅｔ  ｅｎｕｍｅｒａｔｏｒメソッドは、すべてのクエリ結果を通じてエニュメレーションを行うことができる。１組のクエリ結果における第１の結果は、ｇｅｔ  ｆｉｒｓｔメソッドを用いることによって取得することができる。ｇｅｔ  ｌｉｓｔメソッドは、クエリ結果をコピーして、クエリ結果の並びにすることができる。ｇｅｔ  ｃｏｕｎｔメソッドは、クエリ結果に含まれるオブジェクトの数を数えることができる。ｃｈｅｃｋ  ｆｏｒ  ｒｅｓｕｌｔｓ  メソッドを用いて、クエリの実行により何らかの結果が生成されたかどうかを示すことができる。
【００３２】
サーチャオブジェクトが構築されると、構築されたサーチャオブジェクトが実行する、または実行することになるデータのタイプで、このサーチャオブジェクトをパラメータ化することができる。このタイプのインスタンスは、サーチャオブジェクトが実行される場合、このサーチャオブジェクトによって返すことができる。それに加えて、またはその代わりに、レコードタイプを返すことができる。レコードクラスは、構造タイプを表現することができ、この構造タイプについては、対応するタイプが存在しない。このようなタイプに関するクエリは、プロジェクトメソッドまたはグループメソッドによって生成することができる。レコードタイプを返す２つのサーチャオブジェクトは、各サーチャオブジェクトによって返されるレコードオブジェクトが、厳密に同じ数の、同じ名前およびタイプの列を有する場合、およびその場合に限り、同じタイプとすることができる。
【００３３】
本明細書で提示する実施例では、サーチャオブジェクトに渡すクエリ式文字列は、２種類の形態のパラメータを許容する。第１の形態は、位置パラメータである。位置パラメータを用いる場合、クエリ文字列は、クエリ文字列とともにメソッドに渡す値のアレイ内での位置によって、パラメータ値を参照する。位置パラメータは、クエリが１回しか実行されない状況で、あるいは、このパラメータに結びつけられる値が１つの実行と別の実行で変化しない場合に、有用になる。
【００３４】
第２の形態は、名前付きパラメータである。名前付きパラメータを用いる場合、クエリ文字列は、このパラメータの名前を使用することによって、パラメータ値を参照する。名前と値をマッピングする辞書をサーチャオブジェクトに結びつけることができ、それによって、クエリが実行される前に新しいサーチャオブジェクトが生成される。名前付きパラメータは、同じクエリが異なるパラメータ値で複数回実行される状況で有用になる。名前付きパラメータの使用は、追加の結合動作のために、位置パラメータの使用よりもわずかに複雑である。
【００３５】
位置パラメータおよび名前付きパラメータはともに、同じクエリ文字列ないで使用することができ、リテラル値またはサブクエリを提供するためにのみ使用する。パラメータを使用することによってプロパティまたはメソッドの名前を提供するために、これらのパラメータを使用することはできない。サブクエリは、式オブジェクトまたはサーチャオブジェクトを使用することによって、パラメータとして渡すことができる。他の実施形態では、異なる手法または追加の形態のパラメータを用いることができる。
【００３６】
サーチャオブジェクト３１０などのサーチャオブジェクトは、汎用クラスとして実装する。この特定の実装形態では、ユーザ入力に基づいて動的にクエリを形成するアプリケーションによるサーチャクラスの使用が難しくなることがある。この難点を軽減するために、ファクトリクラスおよびサーチャインターフェースを実装することができる。このようなファクトリクラスおよびサーチャインターフェースにより、汎用のタイプまたはメソッドを使用せずに、サーチャオブジェクトを構築し、操作することができる。
【００３７】
ユーザ入力に基づいてクエリを形成し、実行時に結合されるアプリケーションでは、汎用型を用いずにこれらのタイプを使用することが有用になる。ファクトリタイプのコンストラクタメソッドを利用して、サーチャオブジェクトを構築することができる。パラメータ内で規定可能なタイプは、クラス定義における汎用タイプに対応する。このクラス定義は、生成されたタイプの汎用バージョンに対応するいくつかのメソッドを記述する。これらのメソッドの実装は、汎用タイプのメソッドと同じ意味および制約を有することがある。
【００３８】
先立って開示し説明したように、クラスとして、またはクラスのインスタンスとして、様々なコンポーネントを実装することができる。１つの可能な実装形態では、クラスのインスタンスは不変とすることができる。サーチャオブジェクトを操作するメソッドは、少なくとも部分的に元のクエリに基づく新しいクエリをカプセル化する新しいサーチャオブジェクトを返すことができる。このように実装することにより、開始点クエリを改変し得ないという意味で、開始点クエリを保護することができる。さらに、このような設計上の選択は、先立って処理されたクエリ式のハッシュを維持し、これらのクエリを再利用することによってクエリを最適化するのに役立つ。
【００３９】
図４は、アプリケーション空間４１０と記憶空間４２０の間のマッピングのブロック図である。アプリケーション空間４１０は、ファイルシステムＡＰＩのコンシューマが使用する１組のタイプとする。コンシューマは、スキーマ内で符号化される記述から自動的に生成されるクラスとする。他のタイプのオブジェクトをサポートすることもできる。さらに、オブジェクトまたはクラスの代わりに、またはそれに加えて他のデータ構造を使用することができる。
【００４０】
記憶空間４２０は、記憶サービスのバックエンドプロバイダが使用する１組のタイプを含む。これらのバックエンドサービスは、とりわけ、記憶装置が使用するために生成される構造化クエリ言語（ＳＱＬ）タイプまたはユーザ定義タイプ（ＵＤＴ）とする。（図示しない）スキーマ空間を使用することもできる。このようなスキーマ空間は、タイプデザイナによって定義される抽象タイプの使用をサポートする。さらに、スキーマ空間を用いて、アプリケーション空間４１０と記憶空間４２０のマッピングの助けとすることもできるし、それを定義することもできる。
【００４１】
マッピングを利用して、オブジェクト指向の概念および構成体をＳＱＬの概念に関係づけることができる。例えば、エニュメレーションする集合体をマッピングして、タイプ付きの表または関係にすることができる。オブジェクトは、マッピングしてタイプ付きの行またはタプルにすることができる。プロパティまたはメソッドは、マッピングして、簡単な、またはユーザが定義したタイプの列または属性に、あるいは集合体については、ネストしたタイプ付き表にする。他のマッピングも可能である。マッピングの特定の細部は概ね、特定のクエリおよび実装形態によって決まることを理解されたい。
【００４２】
アプリケーション空間４１０は、アプリケーション空間クエリ言語４３０を含む。アプリケーションは、アプリケーション空間クエリ言語４３０を使用して、記憶された情報の検索を構築し、また実施する。アプリケーション空間クエリ言語４３０は、基本的なフィルタリングコマンドをサポートする単純な言語とすることもできるし、ネスト化その他の複雑な概念をサポートするすべての機能を備えたクエリ言語とすることもできる。記憶される情報は、ファイルシステム内に記憶されるオブジェクト４４０の形態とすることができ、このファイルシステムは、ファイルシステムＡＰＩ  ４５０を介してアクセスする。最終的に、アプリケーション空間クエリ言語４３０がこのファイルシステムの検索を実施する。
【００４３】
アプリケーション空間クエリ言語４３０、具体的にはサーチャオブジェクトによるその相互作用および使用法を設計することにより、複数のクエリ文字列構文の同時使用を実施する。サーチャオブジェクトを使用するアプリケーションは、クエリ文字列自体を調べることによって、どの構文が用いられているかを識別することができる。それに加えて、またはその代わりに、アプリケーションは、アセンブリレベルの属性にアクセスして、どの構文が用いられているかを判定する。他の構文一致手法も利用可能である。
【００４４】
本明細書で提示する実施例では、サーチャオブジェクトを使用するアプリケーションによって表現されるクエリは常に、このアプリケーションのスキーマ空間について記述される。サーチャオブジェクトのクエリ文字列内で挙げられるタイプ、プロパティ、およびメソッドは、このアプリケーションによって用いられるタイプ、プロパティ、およびメソッドである。この規約は、本明細書で開示し、また説明するコンポーネントおよびメソッドの改変に伴い変更されることがある。ただし、この規約を用いることにより、アプリケーション空間４１０で作業するアプリケーションプログラマの見通しが保たれる。このように見通しを保つことにより、このようなアプリケーションプログラマに、このアプリケーションプログラマがすでに精通している環境を提示することによって、アプリケーションプログラマによるクエリの構築または使用がより簡単になる。
【００４５】
サーチャオブジェクトを、オブジェクト指向その他のプログラミング言語と統合して、言語統合クエリをサポートする。言語統合クエリをサポートするために、サーチャオブジェクトは、単一のクエリメソッドを有するクエリ可能なインターフェースを実装する。このクエリメソッドは、構文解析されたクエリ式を取得し、適切なインターフェースオブジェクトを返すことができる。このクエリ式は、コンパイル時にコンパイラによって構文解析し、有効にすることができる。
【００４６】
言語統合クエリをサポートしない、またはサポートすることができないプログラミング言語では、あるいは、言語統合クエリをサポートするプログラミング言語でさえ、文字列内クエリを使用する。文字列内クエリ手法は、アプリケーションの実行中にクエリを動的に生成する場合に良好に機能する。言語統合クエリは、コンパイル時のフィーチャとして一般に使用されるので、実行中にクエリを動的に形成するのは難しいことがある。実行中に、文字列をつなぎ合わせて動的なクエリを形成することができる。
【００４７】
記憶空間４２０は、構造化クエリ言語４６０を含む。この構造化クエリ言語は、データベースまたはデータサーバに対してクエリを実施するのに使用するＳＱＬのようなクエリ言語とする。データサーバ４７０は、結果セット４８０を生成するための情報について照会するデータを含む。結果セット４８０は、データサーバ４７０に対した発行されたＳＱＬクエリ内の１組の操作コマンドから得られるデータを含む。
【００４８】
図５は、記憶媒体検索システム５００のシステムブロック図である。記憶媒体検索システム５００を使用して、ファイルシステム内の情報を検索することができる。このファイルシステムは、ローカルコンピュータのディスクドライブ上に配置することもできるし、フラッシュメモリなどの何らかの他の媒体その他の適切な記憶媒体上に配置することもできる。それに加えて、またはその代わりに、このファイルシステムは、ネットワークサーバなどのリモートコンピュータ上に配置する。ＲＡＩＤアレイまたはＳＡＮなどの他の記憶構成を、このファイルシステムとともに使用することもできる。
【００４９】
記憶媒体検索システム５００は、サーチャオブジェクト５１０を含む。サーチャオブジェクト５１０は、他の図に関連して上述したサーチャオブジェクトのいずれかとして実装する。サーチャオブジェクト５１０は、コンテキスト５２０に結びつけることができる。コンテキスト５２０は、サーチャオブジェクト５１０によって検索される１組の情報を表すことができ、他の図に関連して先立って開示し、また説明したコンテキストの１つとして実装する。
【００５０】
サーチャオブジェクト５１０は、ファイルシステム５３０に対して動作する。ファイルシステム５３０は、オブジェクトと、オブジェクトによる、またはオブジェクトに関する操作とをサポートする電子ファイルの任意の論理構成とする。ファイルシステム５３０は、ディスク記憶システム５４０上に常駐する。ディスク記憶システム５４０は、単一のディスクとすることもできるし、独立ディスク冗長アレイ（ＲＡＩＤ）、ストレージエリアネットワーク（ＳＡＮ）、または光媒体を含めて別の適切な記憶媒体などのディスクアレイとすることもできる。
【００５１】
動作時に、この記憶媒体検索システムは、以下のように動作する。サーチャオブジェクト５１０は、検索に関するコンテキスト上の制限を決定するために、コンテキスト５２０にもアクセスする。サーチャオブジェクト５１０は、ファイルシステム５３０にアクセスして、コンテキスト５２０によって規定されたコンテキスト内でファイルまたはオブジェクトの位置を見つける。サーチャオブジェクト５１０によって一連のメソッドを起動して、サーチャオブジェクト５１０内にカプセル化されたクエリを実施する。これらのメソッドを実行するために、サーチャ５１０は、ディスク記憶システム５４０から情報を読み取る。サーチャオブジェクト５１０は、ファイルシステム５３０からのどの情報が実行されたクエリに応答するかを決定し、その検索結果を出力する。
【００５２】
図６は、クエリ構築システム６００のシステムブロック図である。クエリ構築システム６００は、アプリケーションプログラマその他のユーザに、コンピューティングシステム上の他のコンポーネントと統合するクエリを構成する能力を提供する。具体的には、クエリ構築システム６００により、検索用の語句または演算子を定義することによって、既存の断片またはユーザが生成した断片からクエリを構成することが可能になる。
【００５３】
クエリ構築システム６００は、クエリビルダ６１０を含む。クエリビルダ６１０は、ユーザにクエリビルダ６１０へのアクセスを提供する（図示しない）ユーザインターフェースを含む。このユーザインターフェースは、グラフィカルユーザインターフェース、テキストベースのインターフェース、ウェブベースのインターフェースその他の適切なユーザインターフェースとすることができる。具体的には、クエリビルダ６１０のユーザインターフェースにより、ユーザは、とりわけ、一連のメニュー、ナビゲーション支援、テキスト入力ボックスを介して構成されるクエリに含めるためのアイテムを選択することができる。クエリビルダ６１０のユーザインターフェースを介してクエリを構築するのに利用可能なツールのタイプの細部は概ね、用いられるユーザインターフェースのタイプによって決まることを理解されたい。
【００５４】
クエリビルダ６１０は、クエリが最終的に、論理的に理解するように構築されることを保証する論理コンポーネントも含むことがある。この論理の一部としてメソッドを使用して、意味上の、または構文上の要件に適合するクエリに書き直すことができる。それに加えて、またはその代わりに、これらの論理コンポーネントは、ユーザが入力した最初のクエリよりも、実行するのに効率のよいクエリに書き直すことができる。いずれの場合も、この論理により、書き直されたクエリが正しいことを保証することもできる。
【００５５】
クエリビルダ６１０は、クエリ断片データ記憶装置６２０に記憶されたクエリ断片にアクセスすることができる。クエリ断片データ記憶装置６２０は、特定の実施形態の細部によっては、データベース、オブジェクトの集合体その他の適切なタイプのデータ記憶装置として実施することができる。クエリ断片データ記憶装置６２０に含まれる各断片は、より複雑なクエリの一部として使用することができる。さらに、これらのクエリ断片の少なくとも一部は、それら自体で完全に構築され、さらなる改変なしで使用可能なクエリとする。クエリを構築する場合、ユーザは、クエリビルダ６１０のユーザインターフェースを介してこれらのクエリ断片にアクセスすることができる。
【００５６】
クエリビルダ６１０は、ＡＰＩ  ６３０にアクセスすることもできる。ＡＰＩ  ６３０は、アプリケーション空間クエリ言語６４０のコンポーネントまたは関数へのアクセスを提供する。ＡＰＩ  ６３０を介して関数を呼び出すか、あるいは、メンバにアクセスすることによって、プログラマは、形成されるクエリが、アプリケーション空間クエリ言語６４０など、基礎となるクエリ言語の構文上の、または意味上の要件に適合することを保証することができる。クエリビルダ６１０を使用することによって、プログラマは、ＡＰＩ  ６３０の細部に関わる必要がなくなる。その代わりに、クエリビルダ６１０は、すべてのクエリがＡＰＩのフィーチャに従って形成されることを保証する。
【００５７】
クエリオブジェクト６５０は、クエリビルダ６１０によって生成することができる。このクエリオブジェクト６５０は、他の図に関連して上述したようにクエリをカプセル化する。それに加えて、またはその代わりに、クエリを構築する際にクエリビルダ６１０が後で使用するのに利用可能なクエリ断片として、クエリオブジェクト６５０をクエリ断片データ記憶装置６２０に追加する。独立型クエリとして、クエリオブジェクト６５０は、アプリケーションに統合することもできるし、単に、クエリを実施して記憶空間６６０内に記憶された情報の位置を見つけるために使用することもできる。特定の実施形態によっては、クエリオブジェクト６５０は、（図示しない）スキーマまたはファイルシステムＡＰＩを使用して、記憶空間６６０内に記憶された情報にアクセスする。
【００５８】
動作時に、クエリ構築システム６００は、以下のように機能する。ユーザは、クエリビルダ６１０のユーザインターフェースにアクセスして、クエリを構築することができる。適切なインターフェースツールを選択した後で、このクエリビルダは、構築中のクエリ内に含めるために、クエリ断片データ記憶装置６２０からクエリ断片を取得することになる。クエリビルダ６１０は、クエリ断片データ記憶装置６２０から選択されたクエリ断片とともに、ユーザが入力したすべてのクエリ断片を集め、ＡＰＩ  ６３０を使用して、アプリケーション空間クエリ言語６４０に従ってクエリオブジェクト６５０を組み立てる。次いで、クエリオブジェクト６５０を使用して、記憶空間６６０内に記憶された情報に対してクエリを実施する。
【００５９】
図７は、クエリ構成システム７００のシステムブロック図である。クエリ構築システム７００により、アプリケーションプログラマその他のユーザは、コンピューティングシステム上の他のコンポーネントと統合する、あるいは、独立したクエリコンポーネントとして使用するクエリを構成することができる。具体的には、クエリ構築システム７００により、ユーザ定義クエリに一致し、リモートコンピュータから取得する既存のコンポーネントからクエリを構成することができる。
【００６０】
クエリ構成システム７００は、クエリビルダ７１０を含む。クエリビルダ７１０は、図６のクエリビルダ６１０に関連して説明したように実装する。代わりに、クエリビルダ７１０として異なるクエリ形成システムを使用する。具体的には、クエリビルダ７１０に含めるフィーチャは、図６のクエリビルダ６１０に関連して説明したすべてのフィーチャよりも少なくすることもできるし、クエリビルダ７１０に、さらなるフィーチャを追加することもできる。
【００６１】
クエリビルダ７１０は、クエリを構築する場合に、アプリケーション空間クエリ言語７２０にアクセスする。アプリケーション空間クエリ言語７２０は、他の図に関連して上述したように実施することもできるし、別の適切なクエリ言語とすることもできる。クエリビルダ７１０は、他の手法の中でも、アプリケーション空間クエリ言語７２０にアクセスする場合に（図示しない）スキーマを使用することもできるし、動作時にこのような言語のルールを組み込むこともできる。
【００６２】
クエリビルダ７１０は、構築されるクエリの記述子を生成して、このクエリを精確に定義する適切な検索オブジェクト、または、構築されるクエリが定義されるように改変する近似物である適切な検索オブジェクトを取得するのに使用することができる。この記述子は、オブジェクト記述子、ハッシュ、または他の何らかの適切な記述子など、任意の適切な記述子とすることができる。適切な記述子のタイプは概ね、特定の実施形態によって決まる。
【００６３】
クエリビルダ７１０は、（図示しない）記述子を、ネットワーク７３０を介してオブジェクトサーバ７４０に送信する。オブジェクトサーバ７４０は、この記述子をオブジェクトマッチャ（ｍａｔｃｈｅｒ）７５０に送信する。オブジェクトマッチャ７５０は、検索オブジェクトのデータ記憶装置７６０にアクセスして、この記述子によって表現されるクエリに厳密に、またはほぼ一致する検索オブジェクトを取得することができる。
【００６４】
オブジェクトマッチャ７５０は、記述子と、検索オブジェクトデータ記憶装置７６０の検索オブジェクトとを照合するのに様々な方法を使用することができる。いくつかの従来方式の照合手順に加えて、このオブジェクトマッチャは、一致する検索オブジェクトの位置を見つける人工知能を含むコンポーネントを使用する。例えば、記述子と適切な検索オブジェクトの照合は、ニューラルネットワーク、エキスパートシステム、ルールベースの処理コンポーネント、またはサポートベクトルマシン（ＳＶＭ）によって実施する。
【００６５】
分類子は、入力属性ベクトルＸ＝（ｘ1，ｘ2，ｘ3，ｘ4，．．．ｘn）を、この入力がクラスに属するコンフィデンス（ｃｏｎｆｉｄｅｎｃｅ）にマッピングする関数である。すなわち、ｆ（Ｘ）＝ｃｏｎｆｉｄｅｎｃｅ（ｃｌａｓｓ）である。このような分類では、（例えば、解析的なユーティリティおよびコストを計算に入れる）確率および／または統計に基づく解析を利用して、自動的に実施されることをユーザが望む動作を予測または推論する。オブジェクトマッチャ７５０の場合、パターンとして記述子を処理する。これらのパターンを分類して、このようなパターンが、検索オブジェクトの対応するパターンと一致するかどうかを判定することができる。この開示を読んだ後なら、他のパターンマッチングタスクも利用することができる当業者には明らかであろう。
【００６６】
ＳＶＭは、利用する分類子の例である。ＳＶＭは、可能な入力空間内で超曲面を見つけることによって動作する。この超曲面は、トリガ基準を、非トリガイベントから分けようと試みる。直感的にわかるように、こうすると、訓練データと同じではないがそれに近い検査データについて、分類が正しく行われる。他の有向または非有向のモデル分類手法には、異なる独立パターンを使用すると仮定すると、例えば、ナイーブベイズ（ｎａｉｖｅ  Ｂａｙｅｓ）、ベイジアンネットワーク、デシジョンツリー、および確率分類のモデルが含まれる。本明細書で用いる分類には、優先順位モデルを作り上げるのに利用する統計回帰も含まれる。
【００６７】
本明細書から容易に理解されるように、本明細書で開示し、また説明するコンポーネントは、明示的に（例えば、汎用訓練データによって）訓練されるだけでなく、暗示的にも（例えば、ユーザの振舞いを観察し、外部の情報を受け取ることによって）訓練される分類子を使用することができる。例えば、ＳＶＭは、分類子コンストラクタおよびフィーチャ選択モジュール内での学習または訓練の段階によって構成する。そのため、１つ（または複数）の分類子を用いて、いくつかの関数を自動的に実施することができる。この関数の例には、記述子が検索オブジェクトと一致するかどうかを判定することが含まれるが、これに限定されるものではない。
【００６８】
動作時に、このクエリ構成システムは、以下のように機能する。クエリビルダ７１０は、アプリケーション空間クエリ言語に従ってクエリを生成する。このようなクエリが構築された後で、クエリビルダ７１０は、このクエリの記述子を生成し、この記述子を、ネットワーク７３０を介してオブジェクトサーバ７４０に送信することができる。
【００６９】
この記述子を受信した後で、オブジェクトサーバ７４０は、オブジェクトマッチャ７５０にこの記述子を渡す。オブジェクトマッチャ７５０は、この記述子を用いて、検索オブジェクトデータ記憶装置７６０から、構築されたクエリを実施するのに直接使用することができるか、あるいは改変可能な検索オブジェクトを識別する。オブジェクトサーバ７４０は、この一致したオブジェクトを、ネットワーク７３０を介してクエリビルダ７１０に送信する。次いで、クエリビルダ７１０は、このオブジェクトに、正しいクエリを実施するのに必要な任意の改変を加え、このオブジェクトを使用可能にする。
【００７０】
図８は、本明細書で開示し、また説明したコンポーネントとともに使用するプロセス８００の流れ図である。プロセス８００を用いて、他のプロセスまたはクエリで再利用するモジュール形式クエリを形成することができる。その代わりに、この形成されるクエリを用いてファイルシステムにアクセスし、それによって、このクエリに応答する情報の位置を見つけることができる。
【００７１】
プロセス８００の実行は、開始ブロック８１０で開始され、処理ブロック８２０に続く。処理ブロック８２０で、クエリ（またはその一部）が定義される。処理ブロック８３０で、他の図に関連して説明したアプリケーション空間クエリ言語など、所定のクエリ言語で正式なクエリ（またはその一部）が構築される。処理が継続され、処理ブロック８４０で、この構築されたクエリは、記憶サーチャオブジェクトに渡される。処理ブロック８５０で、この構築されたクエリからクエリツリーが形成される。処理ブロック８６０で、クエリが実行される。処理ブロック８７０で、実行されたクエリの結果が得られる。終了ブロック８８０で、処理が完結する。
【００７２】
図９は、本明細書で開示し、また説明したコンポーネントとともに使用する方法９００を示す流れ図である。方法９００を用いて、オブジェクト指向設計パラダイムで構築されたクエリを実行することができる。このようなクエリは、他のコンポーネントによって再利用する。
【００７３】
方法９００の処理は、開始ブロック９１０で開始される。処理は、検索オブジェクトが検索で使用するアイテムをエニュメレーションする処理ブロック９２０に続く。処理ブロック９３０で、検索中のアイテムを制限するフィルタを適用し、それによって、これらのアイテムは、このフィルタの１つまたは複数の基準を満足するように設定される。処理ブロック９４０で、残りのデータを操作するプロジェクションが実施される。処理は、データを所望のとおりにグループ化するソートまたはグループ化の操作が実施される処理ブロック９５０に続く。処理ブロック９６０で、クエリの結果セットが生成される。終了ブロック９７０で、処理が完結する。
【００７４】
図１０は、本明細書で開示し、また説明したコンポーネントとともに使用する全体的な処理方法１０００の流れ図である。方法１０００の実行は、開始ブロック１０１０で開始され、処理ブロック１０２０に続く。処理ブロック１０２０で、ユーザは、クエリビルダインターフェースにアクセスしてクエリを構築する。処理ブロック１０３０で、構築中のクエリ用に検索する記憶区域が選択される。処理は、検索を行うコンテキストが選択される処理ブロック１０４０に続く。
【００７５】
処理ブロック１０５０で、所定のクエリ言語、とりわけ、アプリケーション空間クエリ言語などに従って、構築中のクエリのコンポーネントが組み立てられる。処理は、この組み立てられたクエリコンポーネントから、検索オブジェクトが構築される処理ブロック１０６０に続く。終了ブロック１０７０で、処理が完結する。
【００７６】
図１１は、本明細書で開示し、また説明したコンポーネントとともに使用する全体的な処理方法１１００の流れ図である。方法１１００の実行は、開始ブロック１１１０で開始され、ユーザがクエリビルダインターフェースにアクセスする処理ブロック１１２０に続く。処理ブロック１１３０で、ユーザまたはクエリビルダあるいはその両方によって検索パラメータが選択される。
【００７７】
処理は、これらの検索パラメータの適切な記述子が生成される処理ブロック１１４０に続く。処理ブロック１１５０で、この記述子は、検索オブジェクトサーバに送信される。処理ブロック１１６０で、この記述子は、１つまたは複数の利用可能な検索オブジェクトに照合される。処理ブロック１１７０で、１つまたは複数の一致した検索オブジェクトが、クエリビルダに送信される。終了ブロック１１８０で、処理が完結する。
【００７８】
本発明の様々な態様を実施する追加の状況を提供するために、図１２〜図１３および以下の説明は、本発明の様々な態様を実施する適切なコンピューティング環境の簡単で全体的な説明を提供することを意図している。以上、ローカルコンピュータおよび／またはリモートコンピュータ上で実行されるコンピュータプログラムのコンピュータ実行可能命令という一般の状況において本発明を説明してきたが、他のプログラムモジュールと組み合わせて本発明を実施することもできることが当業者には理解されよう。一般に、プログラムモジュールは、特定のタスクの実施および／また特定の抽象データ型の実装を行うルーチン、プログラム、コンポーネント、データ構造などを含む。
【００７９】
さらに、シングルプロセッサまたはマルチプロセッサのコンピュータシステム、ミニコンピュータ、大型コンピュータ、ならびにパーソナルコンピュータ、ハンドヘルドコンピューティング装置、マイクロプロセッサベースおよび／またはプログラム可能な民生用電子機器などを含めて、他のコンピュータシステム構成で本発明の方法を実施することが可能なことが当業者には理解されよう。これらはそれぞれ、１つまたは複数の関連する装置と動作可能に通信する。例示した本発明の態様は、通信ネットワークを介して接続された遠隔処理装置によってある種のタスクが実施される分散コンピューティング環境で実施することもできる。ただし、全部でないにしても、本発明の態様の一部は、独立型コンピュータ上で実施することができる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよび／またはリモートのメモリ記憶装置に配置することができる。
【００８０】
図１２は、本発明とやり取りするコンピューティング環境の例１２００の概略ブロック図である。システム１２００は、１つまたは複数のクライアント１２１０を含む。１つ（または複数）のクライアント１２１０は、ハードウエアおよび／またはソフトウエア（例えば、スレッド、プロセス、コンピューティング装置）とすることができる。システム１２００は、１つまたは複数のサーバ１２２０も含む。１つ（または複数）のサーバ１２２０は、ハードウエアおよび／またはソフトウエア（例えば、スレッド、プロセス、コンピューティング装置）とすることができる。サーバ１２２０は、例えば、本発明を利用することによって変換を実施するスレッドまたはプロセスを含むことができる。
【００８１】
クライアント１２１０とサーバ１２２０の間の１つの可能な通信手段は、２つ以上のコンピュータプロセス間で送信されるように適合されたデータパケットの形態とする。システム１２００は、１つ（または複数）のクライアント１２１０と１つ（または複数）のサーバ１２２０の間で通信を実施するように使用する通信フレームワーク１２４０を含む。１つ（または複数）のクライアント１２１０は、１つ（または複数）のクライアント１２１０に情報をローカルに記憶するのに使用する１つまたは複数のクライアントデータ記憶装置１２５０に動作可能に接続される。同様に、１つ（または複数）のサーバ１２２０は、サーバ１２２０に情報をローカルに記憶するのに使用する１つまたは複数のサーバデータ記憶装置１２３０に動作可能に接続される。
【００８２】
図１３を参照すると、本発明の様々な態様を実施する環境の例１３００は、コンピュータ１３１２を含む。コンピュータ１３１２は、処理ユニット１３１４、システムメモリ１３１６、およびシステムバス１３１８を含む。システムバス１３１８は、システムコンポーネントを処理ユニット１３１４に接続する。システムコンポーネントにはシステムメモリ１３１６が含まれるが、これに限定されるものではない。処理ユニット１３１４は、利用可能な様々なプロセッサのいずれかとすることができる。処理ユニット１３１４として、デュアルマイクロプロセッサその他のマルチプロセッサアーキテキチャを使用することもできる。
【００８３】
システムバス１３１８は、メモリバスもしくはメモリコントローラ、ペリフェラルバスもしくは外部バス、および／またはローカルバスを含めて、様々な利用可能なバスアーキテクチャを利用するいくつかのタイプの１つ（または複数）のバス構造のいずれかとする。これらのアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）、マイクロチャネルアーキテクチャ（ＭＣＡ）、拡張ＩＳＡ（ＥＩＳＡ）、インテリジェントドライブエレクトロニクス（ＩＤＥ）、ＶＥＳＡローカルバス（ＶＬＢ）、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）、カードバス、ユニバーサルシリアルバス（ＵＳＢ）、アドバンストグラフィックポート（ＡＧＰ）、パーソナルコンピュータメモリカード国際協会バス（ＰＣＭＣＩＡ）、ファイアワイヤ（ＩＥＥＥ  １３９４）、および小型コンピュータシステムインターフェース（ＳＣＳＩ）が含まれるが、これらに限定されるものではない。
【００８４】
システムメモリ１３１６は、揮発性メモリ１３２０および不揮発性メモリ１３２２を含む。例えば起動時に、コンピュータ１３１２内の要素間で情報を転送する基本ルーチンを含む基本入出力システム（ＢＩＯＳ）は、不揮発性メモリ１３２２内に格納される。例として、不揮発性メモリ１３２２は、読出し専用メモリ（ＲＯＭ）、プログラム可能なＲＯＭ（ＰＲＯＭ）、電気的にプログラム可能なＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なＲＯＭ（ＥＥＰＲＯＭ）、またはフラッシュメモリを含むが、これらに限定されるものではない。揮発性メモリ１３２０は、外部キャッシュメモリとして働くランダムアクセスメモリ（ＲＡＭ）を含む。例として、ＲＡＭは、シンクロナスＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、拡張ＳＤＲＡＭ（ＥＳＤＲＡＭ）、シンクリンク（Ｓｙｎｃｌｉｎｋ）ＤＲＡＭ（ＳＬＤＲＡＭ）、およびダイレクトランバス（ｄｉｒｅｃｔ  Ｒａｍｂｕｓ）ＲＡＭ（ＤＲＲＡＭ）など、多くの形態で利用可能であるが、これらに限定されるものではない。
【００８５】
コンピュータ１３１２は、リムーバブル／非リムーバブルな、揮発性／不揮発性のコンピュータ記憶媒体も含む。例えば、図１３に、ディスク記憶装置１３２４を示す。ディスク記憶装置１３２４には、磁気ディスクドライブ、フロッピー（登録商標）ディスクドライブ、テープドライブ、Ｊａｚドライブ、Ｚｉｐドライブ、ＬＳ−１００ドライブ、フラッシュメモリカード、またはメモリスティックが含まれるが、これらに限定されるものではない。さらに、ディスク記憶装置１３２４は、別に、または他の記憶媒体と組み合わせて記憶媒体を含む。これらの記憶媒体の例には、コンパクトディスクＲＯＭ装置（ＣＤ−ＲＯＭ）、追記型ＣＤドライブ（ＣＤ−Ｒ  Ｄｒｉｖｅ）、書換え型ＣＤドライブ（ＣＤ−ＲＷ  Ｄｒｉｖｅ）、またはデジタル多用途ディスクＲＯＭドライブ（ＤＶＤ−ＲＯＭ）などの光ディスクドライブが含まれるが、これらに限定されるものではない。典型的には、ディスク記憶装置１３２４のシステムバス１３１８への接続を実施するのに、インターフェース１３２６などのリムーバブルまたは非リムーバブルなインターフェースを使用する。
【００８６】
図１３は、ユーザと、適切な動作環境１３００内で説明される基本コンピュータリソースとの間で仲介者として働くソフトウエアを説明する図であることを理解されたい。このようなソフトウエアには、オペレーティングシステム１３２８が含まれる。ディスク記憶装置１３２４上に格納するオペレーティングシステム１３２８は、コンピュータシステム１３１２のリソースを制御し、割り当てる働きをする。システムアプリケーション１３３０は、システムメモリ１３１６またはディスク記憶装置１３２４上に記憶されたプログラムモジュール１３３２およびプログラムデータ１３３４を介して、オペレーティングシステム１３２８によるリソースの管理を利用する。様々なオペレーティングシステムまたはオペレーティングシステムの組合せによって本発明を実施可能であることを理解されたい。
【００８７】
ユーザは、１つ（または複数）の入力装置１３３６を介してコンピュータ１３１２にコマンドまたは情報を入力する。入力装置１３３６の例には、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ、ＴＶチューナカード、デジタルカメラ、デジタルビデオカメラ、ウェブカメラなどのポインティングデバイスが含まれるが、これらに限定されるものではない。上記その他の入力装置は、１つ（または複数）のインターフェースポート１３３８を介してシステムバス１３１８によって処理ユニット１３１４に接続される。１つ（または複数）のインターフェースポート１３３８の例には、シリアルポート、パラレルポート、ゲームポート、およびユニバーサルシリアルバス（ＵＳＢ）が含まれる。１つ（または複数）の出力装置１３４０は、１つ（または複数）の入力装置１３３６と同じタイプのポートの一部を使用する。そのため、例えば、ＵＳＢポートを使用して、コンピュータ１３１２に入力を提供し、コンピュータ１３１２から出力装置１３４０に情報を出力することができる。他の出力装置１３４０の中でも、特別なアダプタを必要とするモニタ、スピーカ、およびプリンタなど、いくつかの出力装置１３４０があることを示すために、出力アダプタ１３４２が設けられている。出力アダプタ１３４２の例には、出力装置１３４０とシステムバス１３１８の接続手段を提供するビデオおよびサウンド用のカードが含まれるが、これらに限定されるものではない。１つ（または複数）のリモートコンピュータ１３４４など、他の装置および／または装置のシステムにより、入力および出力の両方の機能が提供されることに留意されたい。
【００８８】
コンピュータ１３１２は、１つ（または複数）のリモートコンピュータ１３４４など、１つまたは複数のリモートコンピュータへの論理接続部を使用するネットワーク環境で動作する。１つ（または複数）のリモートコンピュータ１３４４は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ワークステーション、マイクロプロセッサベースの家電機器、ピアデバイス（ｐｅｅｒ  ｄｅｖｉｃｅ）その他一般のネットワークノードなどとすることができ、一般に、コンピュータ１３１２に関連して説明した要素の多くまたはすべてを含む。簡単にするために、１つ（または複数）のリモートコンピュータ１３４４とともに、メモリ記憶装置１３４６のみを示す。１つ（または複数）のリモートコンピュータ１３４４は、ネットワークインターフェース１３４８を介してコンピュータ１３１２に論理的に接続され、次いで、通信接続部１３５０を介して物理的に接続される。ネットワークインターフェース１３４８は、ローカルエリアネットワーク（ＬＡＮ）およびワイドエリアネットワーク（ＷＡＮ）などの有線および／または無線式の通信ネットワークを含む。ＬＡＮ技術には、ファイバ分散データインターフェース（ＦＤＤＩ）、より対線ＦＤＤＩ（ＣＤＤＩ）、イーサネット（登録商標）、トークンリングなどが含まれる。ＷＡＮ技術には、ポイントツーポイントリンク、総合デジタル通信網（ＩＳＤＮ）のような回路交換網およびこれらの変形、パケット交換網、およびデジタル加入者線（ＤＳＬ）が含まれるが、これらに限定されるものではない。
【００８９】
１つ（または複数）の通信接続部１３５０は、ネットワークインターフェース１３４８をバス１３１８に接続するのに使用するハードウエア／ソフトウエアを指す。見やすいように、通信接続部１３５０は、コンピュータ１３１２の内部に示すが、コンピュータ１３１２の外部とすることもできる。ネットワークインターフェース１３４８への接続に必要なハードウエア／ソフトウエアには、単なる例として、例えば、標準電話等級のモデム、ケーブルモデムおよびＤＳＬモデムなどのモデム、ＩＳＤＮアダプタ、およびイーサネット（登録商標）カードなど、内部用および外部用の技術が含まれる。
【００９０】
以上説明してきたことには、ある種のコンポーネントおよび方法の例が含まれる。当然のことながら、コンポーネントまたは方法の考え得るあらゆる組合せを説明することは不可能であり、多くの別の組合せおよび並替えが可能であることが当業者には理解されよう。したがって、すべてのこのような改変形態、修正形態、および変形形態が、添付の特許請求の範囲の趣旨および範囲に含まれることを意図している。
【００９１】
具体的には、上述のコンポーネント、装置、回路、システムなどによって実施される様々な機能に関して、（「手段」と言うことを含めて）このようなコンポーネントを説明するのに用いる用語は、指示がない限り、たとえ、本明細書で例示した実施例において上述のコンポーネント（例えば、機能的な均等物）の規定した機能を実施する開示した構造と構造的に等価でなくても、その機能を実施する任意のコンポーネントに対応することを意図している。この点で、ここで開示し説明したコンポーネントおよび方法は、システムならびにコンピュータ可読媒体を含むことがあり、このコンピュータ可読媒体は、開示し説明した様々な方法の動作および／またはイベントを実施するためのコンピュータ実行可能命令を有することも理解されたい。
【００９２】
さらに、いくつかの実施形態の１つのみに関して、特定の特徴を開示したが、このような特徴は、所与のまたは特定の応用例について、他の実施形態の１つまたは複数の他の特徴と、所望のとおりに有利に組み合わせることができる。さらに、「含む」および「含んでいる」という用語ならびにこれらの変形を詳細な説明または特許請求の範囲において使用する限りにおいては、このような用語は、「備える」という用語と同様に包括的であることを意図している。
【図面の簡単な説明】
【００９３】
【図１】開示した発明の一態様によるクエリ構築システムのシステムブロック図である。
【図２】クエリを表現するツリー構造のシステムブロック図である。
【図３】結合検索オブジェクトのシステムブロック図である。
【図４】アプリケーション空間と記憶空間の間のマッピングのブロック図である。
【図５】記憶媒体検索システムのシステムブロック図である。
【図６】クエリ構築システムのシステムブロック図である。
【図７】あらかじめ構築されたクエリオブジェクトに遠隔的にアクセスすることを含むクエリ構築システムのシステムブロック図である。
【図８】本明細書で開示し、また説明するコンポーネントとともに使用する全体的な処理の流れの流れ図である。
【図９】本明細書で開示し、また説明するコンポーネントとともに使用する全体的な処理の流れの流れ図である。
【図１０】本明細書で開示し、また説明するコンポーネントとともに使用する全体的な処理の流れの流れ図である。
【図１１】本明細書で開示し、また説明するコンポーネントとともに使用する全体的な処理の流れの流れ図である。
【図１２】ネットワーク環境の例を示す図である。
【図１３】動作環境の例を示す図である。
【符号の説明】
【００９４】
１３１４  処理ユニット
１３１６  システムメモリ
１３１８  バス
１３２０  揮発性
１３２２  不揮発性
１３２４  ディスク記憶装置
１３２６  インターフェース
１３２８  オペレーティングシステム
１３３０  アプリケーション
１３３２  モジュール
１３３４  データ
１３３６  １つ（または複数）の入力装置
１３３８  １つ（または複数）のインターフェースポート
１３４０  １つ（または複数）の出力装置
１３４２  １つ（または複数）の出力アダプタ
１３４４  １つ（または複数）のリモートコンピュータ
１３４６  メモリ記憶装置
１３４８  ネットワークインターフェース
１３５０  １つ（または複数）の通信接続部
【図１】
2006244478.tif 000003
【図２】
2006244478.tif 000004
【図３】
2006244478.tif 000005
【図４】
2006244478.tif 000006
【図５】
2006244478.tif 000007
【図６】
2006244478.tif 000008
【図７】
2006244478.tif 000009
【図８】
2006244478.tif 000010
【図９】
2006244478.tif 000011
【図１０】
2006244478.tif 000012
【図１１】
2006244478.tif 000013
【図１２】
2006244478.tif 000014
【図１３】
2006244478.tif 000015