(57)【特許請求の範囲】
【請求項１】
データコンテナの複数の階層を管理するためのリソース管理サーバであって、各階層は複数のノードを含み、各ノードはデータコンテナに対応しており、
前記リソース管理サーバは、
前記複数のノードのうちのクライアントの外部のノードに対応するデータコンテナに対して前記リソース管理サーバが行なう動作のための関数の組をリソース管理サーバに登録する手段を含み、その関数が呼出されると、前記リソース管理サーバは、前記複数のノードのうちのクライアントの外部のノードに対応するデータコンテナに対して前記動作の組のうちのいずれかの動作を行ない、
前記複数のノードのうちの前記クライアントの外部のノードに対応するデータコンテナに対して前記リソース管理サーバが行なう動作を示すユーザ要求を受取る手段と、
登録された関数の中から、ユーザ要求により示された動作に対応する関数を選択する選択手段と、
前記選択手段により選択された関数を呼出すことにより、前記クライアントの外部のノードに対応するデータコンテナに対して前記リソース管理サーバが動作を行なわせる呼出手段とを含み、
前記動作の組は、
データコンテナを作成する動作と、
データコンテナからデータを取得する動作と、
データコンテナ内のデータを更新する動作と、
データコンテナを削除する動作とを含む、リソース管理サーバ。
【請求項２】
データコンテナのネイティブ階層からのデータコンテナの複数の階層をリソース管理サーバにより管理するための方法であって、各階層は複数のノードを含み、各ノードはデータコンテナに対応しており、前記データコンテナのネイティブ階層はリレーショナルデータベース内に記憶され、
前記方法は、
前記ネイティブ階層以外の各フォーリン階層について、前記リソース管理サーバが、１組の動作に対応する１組のルーチンを登録するステップを含み、前記１組のルーチンから
ルーチンが呼出されると、前記フォーリン階層における１つ以上のデータコンテナに対して１組の動作のうちの１つ以上の動作を前記リソース管理サーバが行ない、特定のフォーリン階層について特定の組のルーチンが前記リソース管理サーバに登録可能であり、
前記登録するステップは、ルーチンの組と仮想リンクへの経路と関連づけるマッピングを前記リソース管理サーバが生成するステップを含み、前記仮想リンクは、ナイティブ階層内のデータコンテナとフォーリン階層内のデータコンテナとを関連付け、前記方法はさらに、
第１のフォーリン階層のノードに対応している特定のデータコンテナに対するある特定の動作を示すユーザ要求を前記リソース管理サーバが受取るステップと、
ユーザ要求に基づいて、前記第１のフォーリン階層の１つ以上のデータコンテナの第１の組に対して行なう第１の動作を前記リソース管理サーバが判断するステップと、
マッピングに基づいて、前記第１のフォーリン階層に対して登録された第１の組のルーチンを前記リソース管理サーバが選択するステップと、
前記第１のフォーリン階層について登録された前記第１の組のルーチンから、第１の動作に対応するある特定のルーチンを前記リソース管理サーバが選択するステップと、
１つ以上のデータコンテナの前記第１の組を前記ネイティブ階層にインポートせずに、１つ以上のデータコンテナの前記第１の組に対して動作を行なうよう、前記特定のルーチンを前記リソース管理サーバが呼出すステップとを含む、方法。
【請求項３】
前記リソース管理サーバがユーザ要求を受取る前記ステップはさらに、
複数の階層のいずれかにおける１つ以上のデータコンテナに対して動作を行なう要求を特定するための制御を用いて、単一のインターフェイスをユーザに前記リソース管理サーバが提示するステップと、
制御のうちの少なくとも１つのユーザ起動に基づいてユーザ入力を前記リソース管理サーバが受取るステップと、
ユーザ要求を、ユーザ入力に基づいて、１つ以上のデータコンテナに対する１組の１つ以上の動作として前記リソース管理サーバが形成するステップとを含む、請求項２に記載の方法。
【請求項４】
１組の動作は、
データコンテナを作成する動作と、
データコンテナからデータを取得する動作と、
データコンテナ内のデータを更新する動作と、
データコンテナを削除する動作と、
１つの親データコンテナの子データコンテナを別の親データコンテナにコピーする動作と、
データコンテナを、前記第１の親データコンテナから前記第１の親データコンテナとは異なる第２の親データコンテナに移動させる動作とを含む、請求項２に記載の方法。
【請求項５】
１組の動作は、親データコンテナによって所有される子データコンテナにわたって繰返す動作を含む、請求項２に記載の方法。
【請求項６】
子データコンテナにわたって繰返す動作は、
繰返しを開始する動作と、
次の子データコンテナを提供する動作と、
繰返しを終了する動作とを含む、請求項５に記載の方法。
【請求項７】
第１の動作は特定の動作と同じである、請求項２に記載の方法。
【請求項８】
第１の動作は特定の動作とは異なる、請求項２に記載の方法。
【請求項９】
前記リソース管理サーバが判断するステップは、ユーザ要求に基づいて、ネイティブ階層の１つ以上のデータコンテナの第２の組に対する第２の動作を前記リソース管理サーバが判断するステップをさらに含む、請求項２に記載の方法。
【請求項１０】
第２の動作は特定の動作と同じである、請求項９に記載の方法。
【請求項１１】
第２の動作は特定の動作とは異なる、請求項９に記載の方法。
【請求項１２】
特定のルーチンを前記リソース管理サーバが呼出すステップから戻された第１の結果を含む応答をユーザに前記リソース管理サーバが送るステップをさらに含む、請求項２に記載の方法。
【請求項１３】
特定のルーチンを前記リソース管理サーバが、呼出すステップから戻された第１の結果を第２の動作からの第２の結果と組合わせてユーザへの応答とするステップと、
応答をユーザに前記リソース管理サーバが送るステップとをさらに含む、請求項９に記載の方法。
【請求項１４】
前記リレーショナルデータベースは第１のホストから管理され、前記第１の階層の第１の組の１つ以上のデータコンテナは、前記第１のホストとは異なる第２のホスト上に存在するフォーリン階層サーバ内に記憶される、請求項２に記載の方法。
【請求項１５】
１つ以上のプロセッサにより実行される際、１つ以上のプロセッサに請求項１〜１４のいずれかに記載の方法を実行させるプログラムを記憶するコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願との相互参照
本出願は、２００２年１１月６日に出願された仮出願番号第６０／４２４，５４３号の利益を主張しており、その内容全体は、米国特許法第１１９（ｅ）条の下に、ここに十分に述べられているかのようにここに引用により援用される。
【０００２】
発明の分野
この発明は、階層型データを管理するための手法に関し、特に、単一の統合されたインターフェイスからのデータの多重階層を管理するための手法に関する。
【背景技術】
【０００３】
発明の背景
データの中には生来、階層として編成されているものがある。階層は周知の数学的構成体である。一般に、階層は多数のレベルのノードで構成される。各レベルのノードは各々、異なるレベルの１つ以上のノードにリンクされている。トップレベルの下のレベルにある各ノードは、上のレベルの１つ以上の親ノードの子ノードである。ツリー階層では、各子ノードは親ノードを１つだけ有するが、親ノードは多数の子ノードを有していてもよい。ツリー階層では、親ノードがリンクされていないノードはルートノードであり、子ノードがリンクされていないノードはリーフノードである。ツリー階層は通常、単一のルートノードを有する。
【０００４】
たとえば、コンピュータ読み取り可能な媒体上に内容を記憶させるためにコンピュータオペレーティングシステムによって使用されるフレキシブルなファイルシステムは、往々にして、「フォルダ」または「ディレクトリ」の階層へと編成されている。各フォルダは、コンピュータ読み取り可能な媒体上にデータを記憶させる任意の数のファイルと、任意の数の他のフォルダとを含むことができる。ファイルおよび他のフォルダを含むフォルダは、それらのファイルおよびフォルダの親ノードである。ファイルおよび他のフォルダは、そのフォルダの子ノードである。このシステムは通常、１つのルートフォルダを有する。
【０００５】
拡張可能マークアップ言語（ＸＭＬ）のデータ要素も、ツリー階層に構成される。ＸＭＬは、データを記憶させ、独立したアプリケーション間でデータを交換するために幅広く使用されている。ＸＭＬの各データ要素は、ゼロ以上の子要素で構成されてもよい。各要素はまた、要素名と、ゼロ以上の追加の要素属性とを有する。ＸＭＬ文書は単一のルート要素である。
【０００６】
ファイルシステムおよびＸＭＬ文書といった階層により編成されるデータに対する動作は、多くの目的にとって便利であるものの、表現するのが難しい場合がある。動作は、たとえば、ファイルまたはＸＭＬ要素といった階層のノードを作成すること、それからデータを検索すること、それにデータを書込むこと、それをコピー、移動、および削除することを含み得る。ノードおよび動作の表現は、階層型データシステムによって異なり得る。多重階層中に分布しているデータに対して、ノードおよび動作について単一の１組の表現を使用する単一の統合されたインターフェイスを用いて動作を行なうことは、便利である。
【０００７】
一アプローチでは、多重階層からのノードは、ユーザの装置（以下、ユーザの「ネイティブシステム」と呼ぶ）上で機能する確立した、かつ便利なインターフェイスを用いて、
１つのシステムへとアセンブルされる。たとえば、あるネイティブシステムでは、階層におけるノードはリレーショナルデータベースのノードテーブルに記憶され、親子関係が階層型インデックスに記憶される。そのようなインデックスは、たとえば、親ノードをすべて列挙していてもよく、また、各親ノードについて、階層において親ノードのすぐ下にある子ノードをすべて列挙していてもよい。そのようなシステムでは、ある基準を満たすノードを列挙するために、ＳＱＬコマンドが使用可能である。ノードに対する動作は、１つ以上の記憶されたプロシージャによって実行可能である。
【０００８】
このようにノードテーブルと階層型インデックスとを維持することにより、ファイルシステム上でＳＱＬクエリーを用いて、ルートフォルダからある特定のフォルダへの経路、または、フォルダ属性もしくはファイル属性に対するある基準を満たすファイルを見つけることができる。たとえば、「所有者」および「作成日」がノードテーブル内のファイルの属性であると仮定して、スコット（Scott）というユーザが所有する、２００１年１月１日から２００１年１月１０日までの間に作成されたすべてのファイルについて、ファイル名、およびルートフォルダからの経路を取得することができる。次に、それらのファイルを新しいフォルダにコピーするか、または他の方法でそれらのファイルに対して動作を行なうことができる。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
このアプローチは階層に編成されている多くの種類のデータにとって良好に作用するものの、いくつかの欠点を有する。たとえば、多くの場合、非ネイティブ（つまりフォーリン）階層型データシステムは、データを記憶し、検索するためのリソースを提供する。そのデータをネイティブシステムにインポートすることにより、ネイティブシステムは、それ自体のリソースを、既に別の場所に記憶されているデータを記憶するために充てるようになる。これは、ネイティブシステムを維持する経費を非常に増加させるおそれがある。
【００１０】
さらに、フォーリンシステムにおけるノードの数は多い場合があるが、にもかかわらず、ネイティブシステムのユーザがそれらのノードに対する動作を望む頻度が少ない場合がある。これらのノードすべてをネイティブシステムにインポートすることは、ネイティブシステムの階層型インデックスを肥大化させ得る。肥大化したインデックスは、ネイティブシステムによる応答時間の増加および全体的な性能劣化につながり得る。
【００１１】
加えて、新しいフォーリンシステムを取入れることは、新しいフォーリンシステムにおけるデータの量とともに増加するユーザのシステム上のリソースを消費する。新しいシステムのデータ内容は、新しいシステムからネイティブシステムにコピーされなければならず、ネイティブインデックスは更新されなければならない。同様に、フォーリンシステムを切り離すことも、フォーリンシステムにおけるデータの量とともに増加するリソースを消費する。データ内容はネイティブシステムから削除されなければならない場合があり、ネイティブインデックスは更新されなければならない。フォーリンシステムの内容が変更される場合、ネイティブシステムは、フォーリンシステムの古いバージョンを切り離し、かつ新しいバージョンを取入れなければならない。フォーリンシステムの接続および切り離しにそれほど多くのリソースを消費することは、ネイティブシステムによる全体的な性能劣化をもたらし得る。
【００１２】
さらに、フォーリンデータをネイティブシステムにインポートすることを含まないデータセキュリティの局面があり得る。たとえば、フォーリンシステムは、ネイティブシステムでは表現または実施するのが難しい、もしくは許されないかもしれない珍しい、または固有のセキュリティモデルに基づいて、フォーリン階層におけるデータへのアクセスを制御するかもしれない。
【００１３】
前述の事項に基づき、上述の欠点を被らない、多重階層における階層型データを単一のインターフェイスを用いて管理する手法に対する明らかな要望が存在する。特に、全データを単一の階層型データシステムにインポートすることなく、多重階層中に分散されたデータを単一のインターフェイスを用いて管理する手法に対する要望が存在する。
【００１４】
この項に記載された過去のアプローチは追求可能であるが、それらは必ずしも、以前に考えられまたは追求されたアプローチであるとは限らない。したがって、ここに特に示されていない限り、この項に記載されたアプローチは、この背景の項に存在するというだけの理由で、本出願の請求項に対する先行技術として考えられるべきではない。
【００１５】
この発明を、添付図面の図において、限定のためではなく例示のために説明する。図中、同じ参照番号は同様の要素を指す。
【発明を実施するための最良の形態】
【００１６】
発明の詳細な説明
多重階層に構成されたデータコンテナを管理するための手法が記載される。以下の記載では、説明のため、数多くの特定の詳細がこの発明の完全な理解を提供するために述べられる。しかしながら、この発明がこれらの特定の詳細なしで実践され得ることは明らかである。他の点では、この発明を不必要に不明瞭にしないよう、周知の構造および装置はブロック図の形で示される。
【００１７】
以下において、この発明の実施例が、リレーショナルデータベースに記憶されたネイティブ階層型ファイルシステムからの多数の階層型ファイルシステムを管理するという状況で説明される。しかしながら、ここに説明する手法およびメカニズムは、この状況に限定されない。他の実施例では、ネイティブシステムは、データコンテナの階層についての別の管理システムである。
【００１８】
ここで使用されているように、「データコンテナ」という用語は、ノードに関連するデータを示し、そのデータは、フォルダ、ファイル、ＸＭＬ要素、または階層におけるデータの何か他のグルーピング、たとえばリレーショナルデータベーステーブルの１つ以上の列におけるエントリのいずれであってもよい。実施例によっては、他の階層型データ、たとえばＸＭＬ文書が、データコンテナの階層の１つ以上を形成していてもよい。
【００１９】
一実施例によれば、単一のネイティブ階層からのデータコンテナの多重階層を管理する手法は、以下を含む。
【００２０】
・ネイティブ階層ではない各階層について１組のルーチンを登録する。各階層について、その１組のルーチンは、階層におけるデータコンテナに対して１組の動作を行なう
・ネイティブ階層のノードに対応していないある特定のデータコンテナに対するある特定の動作を示すユーザ要求を受取る
・ユーザ要求に基づいて、ネイティブ階層ではない第１の階層の１つ以上のノードの第１の組に対する第１の動作を判断する
・登録ステップ中、第１の階層について登録された第１の１組のルーチンからの第１の動作に対応するある特定のルーチンを選択する
・特定のルーチンを呼出して、１つ以上のノードの第１の組に対する動作を行なう。
【００２１】
ここに説明された手法により、ユーザは、ネイティブ階層を管理するシステムに登録されたどの階層のデータコンテナにも到達するために、ネイティブ階層との一貫したインターフェイスを採用できるようになる。フォーリンデータコンテナに到達するために、登録
された関数が呼出されるため、フォーリンデータコンテナに含まれるデータはネイティブ階層に取入れられる必要はない。このため、フォーリンデータコンテナにおいてデータを検索するため、またはフォーリンデータコンテナすべての内容を取入れるか切り離すために消費される、ネイティブ階層を管理するシステムのリソースはより少なくなる。
【００２２】
例示的な階層型ファイルシステム
図１は、一実施例に従った、多重ファイルシステムにおけるノードおよびリンクの多重階層１００を示すブロック図である。ネイティブ階層１０１は多数のノード１１０を含み、それらは各々、ネイティブファイルシステムのフォルダまたはファイルに対応している。ノード１１０ａ、１１０ｂ、１１０ｃ、１１０ｅ、１１０ｆはファイルシステムのフォルダに対応しており、１つ以上の他のノードの親ノードである。ノード１１０ｄ、１１０ｇはファイルシステムのファイルに対応しており、それらは常に、他のどのノードにとっても親ではないリーフノードである。「リソース」という用語は以下、フォルダまたはファイルのいずれかであり得る項目を指すために使用される。このため、全ノード１１０はリソースに対応している。省略記号１１１は、ファイルシステムの他のリソースに対応している階層１０１の他のノード１１０を示す。
【００２３】
ノード１１０はリンク１２０によって他のノード１１０に接続される。リンク１２０は、１つのノード１１０を異なる単一のノード１１０と関連付ける。リンク１２０ａは親ノード１１０ａを子ノード１１０ｂと関連付ける。同様に、リンク１２０ｂ、１２０ｃ、１２０ｄ、１２０ｅ、１２０ｆ、１２０ｇ、および１２０ｈは、１つの親ノード１１０を１つの子ノード１１０と関連付ける。省略記号１２１は、ファイルシステムの他のリソース間での１対１の関連に対応している階層１０１の他のリンク１２０を示す。
【００２４】
図１は２つのフォーリン階層１０２、１０３も示しており、それらは２つの独立したフォーリンファイルシステムにおいて管理されるリソースを含んでいる。フォーリン階層１０２は、以下フォーリンノード１３０として総称されるノード１３０ａ、１３０ｂ、１３０ｃ、および省略記号１３１により示される他のノードを含み、それらは各々、フォーリンファイリングシステムのうちの１つにおけるリソースに対応している。ノード１３０ａおよび１３０ｂはフォーリンファイルシステムのフォルダに対応しており、１つ以上の他のノードにとって親ノードである。ノード１３０ｃはフォーリンファイルシステムのファイルに対応しており、それはリーフノードである。フォーリン階層１０２は、以下フォーリンリンク１４０として総称されるリンク１４０ａ、１４０ｂ、および省略記号１４１により示される他のリンクを含む。
【００２５】
フォーリン階層１０３は、以下フォーリンノード１５０として総称されるノード１５０ａ、１５０ｂ、１５０ｃ、および省略記号１５１により示される他のノードを含み、それらは各々、第２のフォーリンファイリングシステムにおけるリソースに対応している。ノード１５０ａおよび１５０ｃは第２のフォーリンファイルシステムのフォルダに対応しており、１つ以上の他のノードにとって親ノードである。ノード１５０ｂはフォーリンファイルシステムのファイルに対応しており、それはリーフノードである。フォーリン階層１０３は、以下フォーリンリンク１６０として総称されるリンク１６０ａ、１６０ｂ、および省略記号１６１により示される他のリンクを含む。
【００２６】
各ノード１１０、１３０、１５０は、対応するリソースのプロパティに対応している１つ以上の属性を有する。たとえば、ノード属性は、リソース名、リソースタイプ（ファイルかフォルダかを示す、もしくはファイルタイプかフォルダタイプかを示す）、リソース作成日、リソース修正日、リソース所有者、リソースサイズ、１人以上のリソース作者のリスト、およびリソースの他のプロパティのうちの１つ以上に対応していてもよい。
【００２７】
各リンク１２０、１４０、１６０は、リンクが接続するノード間の関連を記述する１つ以上の属性を有する。たとえば、リンク属性は、リンク名、リンクタイプ（たとえばリンクが親子関係、または別の関係、たとえば兄弟関係、祖父母と孫の関係、もしくは叔母と姪の関係を表わすかどうかを示す）、リンク作成日、リンク修正日、リンク所有者、リンク所有者タイプ（たとえば、子を作成または削除する所有者が１人だけであるソフトリンク、または、多数の所有者を有し、それらのいずれかが子を作成してもよく、それらのすべてが子を削除しなければならないハードリンク）、リンク記述テキスト、およびリンクの他のプロパティのうちの１つ以上に対応していてもよい。
【００２８】
多くのファイルシステムでは、すべてのリンクが暗示されている。暗示されたリンクは同じタイプ（たとえば親子のソフトリンク）であり、ノードから独立した名前を持たず、属性を何も持たない。
【００２９】
経路は、階層における１つのノード（開始ノード）から別のノード（終了ノード）への一連のリンクを表わす。当該技術分野において公知の、経路を特定する任意の方法が使用されてもよい。しばしば、経路は、開始ノードと終了ノードとの間のリンクを列挙する経路名によって特定される。多くのファイルシステムでは、経路名は、開始ノードから終了ノードへのトラバーサルの順序で、範囲を定める１組の１つ以上の特殊文字によって隔てられたリンクのリンク名を組合せることによって構築される。開始ノードはしばしば、階層のルートノードである。たとえば、フォルダ１１０ａからファイル１１０ｄへの経路は、経路名／Ｌ１２０ａ／Ｌ１２０ｃで与えられ、ここで、ＬＸはリンク“Ｘ”の名前を指し、Ｘは図１のリンクを表わす数字によって置換えられる。文字“／”はリンク名の範囲を定めるために使用される。暗示されたリンク、または少なくとも暗示されたリンク名を採用するファイルシステムでは、リンク名の代わりに、リンクに関連した親ノードおよび子ノードの名前が使用される。経路名では、経路に沿った中間ノードの名前は、１つのリンクにおける子としての、かつ次のリンクにおける親としてのその役割については繰返されず、一度しか使用されない。そのようなファイルシステムでは、フォルダ１１０ａからファイル１１０ｄへの経路は、経路名／Ｎ１１０ａ／Ｎ１１０ｂ／Ｎ１１０ｄによって与えられ、ここで、ＮＹはノード“Ｙ”の名前を指し、Ｙは図１のノードを表わす数字によって置換えられる。
【００３０】
経路は、リレーショナルデータベースシステムからの出力として有用である。なぜなら、異なるフォルダにおけるリソースが同じ名前を有することができ、それらのリソースがそれらに至る経路によって区別されるためである。ある特定のリソースは、経路名およびリソース名によって示される。ファイルシステムは、経路によって一意的に特定されるリソースからのデータ（たとえばファイル内のデータ、またはフォルダ内のファイルのリスト）に対して動作を行なう。
【００３１】
図１に示すように、階層の中には、同じノードに至る２つ以上の経路が存在するかもしれないものがある。たとえば、３つの経路がルートノード１１０ａからファイル１１０ｇに通じている。
【００３２】
／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１２０ｇ
／Ｌ１２０ｂ／Ｌ１２０ｆ／Ｌ１２０ｈ
／Ｌ１２０ｂ／Ｌ１２０ｅ／Ｌ１２０ｇ。
【００３３】
２つの以上の経路が子ノードに至る階層は、サイクルを含むと言われる。そのような階層は、ツリーというよりもむしろグラフとして表わされる。
【００３４】
図１は、以下仮想リンク１９０として総称される２つの仮想リンク１９０ａおよび１９
０ｂも示している。仮想リンク１９０は、フォーリン階層を管理するフォーリンファイルシステムへの参照を含む。仮想リンク１９０は、ネイティブ階層のフォルダを、フォーリン階層のノードに対する親ノードとする。
【００３５】
機能的概要
この発明の実施例によれば、フォーリン階層１０２、１０３におけるリソース１３０、１５０およびリンク１４０、１６０は、ネイティブ階層１０１における仮想リソースと考えられる。フォーリン階層１０２、１０３は、以下仮想リンク１９０として総称される対応する仮想リンク１９０ａ、１９０ｂを介して、ネイティブ階層に接続される。フォーリン階層のリソースおよびリンクに対して１組の基本ファイルシステム動作を行なうための関数が、仮想リンク１９０によって接続された各フォーリン階層について登録される。
【００３６】
目標仮想リソースにかかわる動作中にネイティブフォルダから仮想リソースに仮想リンクのうちの１つをトラバースする際、登録された関数の内の１つが呼出される。呼出される登録された関数は、目標仮想リソースに対して行なうある特定の動作に対応している。呼出された関数の入力パラメータは、目標仮想リソースを示している。
【００３７】
登録された関数を呼出すことにより、ファイルシステム動作がフォーリンファイルシステムのノードおよびリンクに対して、これらのノードまたはリンクをネイティブファイルシステムにインポートすることなく実行可能である。ノードおよびリンクがネイティブシステムにインポートされないため、ネイティブシステムは、これらのフォーリンノードおよびリンクを管理するのにネイティブシステムリソースを費やさない。これにより、ユーザは、フォーリンファイルシステムのノードまたはリンクをインポートすることなく、ネイティブ階層に登録されたどのフォーリン階層のデータコンテナにも到達するために、ネイティブ階層との一貫したインターフェイスを採用することができる。
【００３８】
構造的概要
図２は、一実施例に従った、多重階層におけるリソースを管理するためのシステム２００を示すブロック図である。システム２００は、リソース管理サーバ２２０と、１つ以上のリソースクライアント２１０と、１つ以上のフォーリン階層サーバ２４０とを含む。
【００３９】
図示された実施例では、リソース管理サーバ２２０は、ファイルシステムのリソースにファイルシステムサービスを提供するアプリケーションである。周知のファイルシステムサービスは、フォルダの内容を列挙すること、フォルダにリソースを作成すること、フォルダからリソースを削除すること、ファイルからデータを取得すること、リソースのプロパティを取得すること、リソースを１つのフォルダから別のフォルダに移動させること、およびリソースを１つのフォルダから別のフォルダにコピーすることを含む。
【００４０】
リソースクライアント２１０は、１つ以上の階層におけるリソースにかかわるファイルシステムサービスを、リソース管理サーバ２２０に要求する任意のアプリケーションを含む。例示された実施例では、リソースクライアント２１０は、リソースクライアント２１０ａ、リソースクライアント２１０ｂ、および省略記号２１１によって表わされる他のリソースクライアントを含む。
【００４１】
フォーリン階層サーバ２４０は、フォーリンファイルシステムのリソースに対してファイルシステムサービスを提供する任意のアプリケーションを含む。例示された実施例では、フォーリン階層サーバ２４０は、フォーリン階層サーバ２４０ａ、フォーリン仮想サーバ２４０ｂ、および省略記号２４１によって表わされる他のフォーリン階層サーバを含む。各フォーリン階層サーバ２４０は、対応するフォーリン階層のノードおよびリンクに対応しているリソースおよびリンクを表わすデータを含む。例示された実施例では、フォー
リン階層サーバ２４０ａは、図１のフォーリン階層１０２のリソースおよびリンクを含み、フォーリン階層サーバ２４０ｂは、図１のフォーリン階層１０３のリソースおよびリンクを含む。フォーリン階層サーバ２４０のうちの１つ以上が、リソース管理サーバ２２０と同じホスト上に存在していてもよい。フォーリン階層サーバ２４０のいずれかまたはすべてが、リソース管理サーバ２２０のホストとは異なる１つ以上のホスト上に存在していてもよい。
【００４２】
他の実施例では、リソース管理サーバ２２０はデータコンテナ管理サーバによって置換えられ、それは、ファイルシステムではないかもしれない他の階層型システムにおけるデータコンテナ、たとえばＸＭＬ文書にサービスを提供するアプリケーションである。データコンテナへのサービスは、ファイルシステムサービスと同様のサービス、たとえば、親コンテナの内容を列挙すること、親コンテナに子コンテナを作成すること、親コンテナから子コンテナを削除すること、コンテナからデータを取得すること、コンテナのプロパティを取得すること、コンテナを１つの親コンテナから別の親コンテナに移動させること、およびコンテナを１つの親コンテナから別の親コンテナにコピーすることを含んでいてもよい。他の実施例では、リソースクライアント２１０はデータコンテナクライアントによって置換えられ、それは、１つ以上の階層にかかわるデータコンテナサービスを要求するアプリケーションである。他の実施例では、フォーリン階層サーバは、階層型データコンテナ、たとえばフォーリンファイルシステム、およびＸＭＬ文書の内容を編集するための異なるシステムを管理するフォーリンシステムである。
【００４３】
リソース管理サーバ
リソース管理サーバ２２０は、ネイティブ階層データ２２２と、階層型処理エンジン２３０と、クライアントインターフェイス２３２と、登録された関数セット２３４ａ、登録された関数セット２３４ｂ、および省略記号２３１により表わされる他の登録された関数セットを含む登録された関数セット２３４とを含む。
【００４４】
ネイティブ階層データ２２２は、図１の階層１０１のようなネイティブ階層のノードおよびリンクに対応しているリソースおよびリンクを含む。リソース管理サーバ２２０が実現される際、当該技術分野において公知の、ネイティブ階層を表わすための任意の方法が採用されてもよい。たとえば、リソースおよびリンクを表わすデータは、アガーワル（Agarwal）に記載されているように構成される。
【００４５】
クライアントインターフェイス２３２は、リソース管理サーバ２２０のサービスへの要求を送信するための１つ以上のクライアントへのアクセスを提供する。クライアント２１０によって送信される要求は、当該技術分野において公知の任意の態様で表現され得る。実施例によっては、要求は、１つのホスト上で実行中のクライアント２１０から別のホスト上で実行中のリソース管理サーバ２２０に、メッセージ交換プロトコルを用いてネットワークを通して送信されるメッセージである。たとえば、実施例によっては、要求は、当該技術分野において周知のファイル転送プロトコル（ＦＴＰ）要求である。実施例によっては、要求はハイパーテキスト転送プロトコル（ＨＴＴＰ）要求である。実施例によっては、要求は、一般的なファイルシステムを模倣するインターネット上での階層型動作をサポートするためにＨＴＴＰを拡張する、ウェブベースの分散型オーサリングおよびバージョニング（ＷｅｂＤＡＶ）と呼ばれるプロトコルを使用する。アガーワルのシステムでは、メッセージは、ファイルシステムのリソースおよびリンクを表わす階層型データを管理するリレーショナルデータベース管理システムの構造化照会言語（ＳＱＬ）におけるステートメントを含む。
【００４６】
実施例によっては、クライアント要求はメッセージとしては表現されず、アプリケーションプログラミングインターフェイス（ＡＰＩ）において特定されたルーチンへの呼出し
として表現される。各ＡＰＩは、高レベルのプログラミング言語、たとえばＪＡＶＡ（登録商標）（以下、“Java”（登録商標）と呼ぶ）、Ｃ、およびＰＬ／ＳＱＬと呼ばれるＳＱＬ手続型言語について特定される。ＡＰＩの使用は、当該技術分野において周知である。ＡＰＩは、クライアントによって呼出され得るルーチンに命名し、ルーチンが呼出されると引数として使用されるパラメータおよびパラメータの型を列挙する。ある実施例によれば、いくつかのプログラミング言語におけるＡＰＩは、リソース管理サーバ２２０からファイルシステムサービスを取得するために提供される。
【００４７】
階層型処理エンジン２３０は、ネイティブ階層およびフォーリン階層の１つ以上のリソースまたはリンクに対する動作を判断し、実行するプロセスであり、その動作は、クライアント２１０から受取られた要求を満たすことに関与している。図３を参照して、階層型処理エンジン２３０を以下の項により詳細に説明する。
【００４８】
登録された関数セット２３４は、フォーリン階層サーバ２４０からのサービスに対する要求を行なうプロセスである。登録された各関数セットのプロセスをプロセッサに実行させる命令を含むデータモジュールが、リソース管理サーバ２２０に登録され、これらの命令は、階層型処理エンジン２３０が関数セットから関数を呼出すと実行される。別のプロセスにより実行される命令のそのようなモジュールは、当該技術分野において「プラグイン」モジュールとして周知である。登録された各関数セットについてのモジュールを登録するための方法を、図３を参照して以下の項に説明する。
【００４９】
実施例によっては、１つ以上のフォーリン階層サーバ２４０の各々は、リソース管理サーバ２２０のようなリソース管理サーバであり、それは、それにとっては外部の１つ以上の階層サーバのための、それ自体のネイティブ階層データおよび登録された関数セットを有する。
【００５０】
リソース管理サーバ２２０を用いて、クライアントは単一のインターフェイス２３２と相互作用し、ネイティブ階層および１つ以上のフォーリン階層を含むいくつかの階層のいずれかからリソースを取得してもよい。
【００５１】
多重階層を管理するための方法
図３は、一実施例に従った、多重階層におけるリソースを管理するための方法を高レベルで示すフローチャートである。図３ではステップがある特定の順序で提示されているが、他の実施例では、ステップは異なる順序で行なわれてもよく、または時間が重複していてもよい。
【００５２】
登録された関数セット
ステップ３１０で、リソース管理サーバ２２０によって管理されるべきリソースの各フォーリン階層について、関数セット２３４が登録される。１つ以上の関数の組を別のアプリケーションに登録するための任意の方法が使用されてもよい。例示された実施例では、階層型処理エンジン２３０によってなされる関数呼出しのためのＡＰＩが確立され、そのＡＰＩと整合された命令を含むモジュールが、フォーリン階層を取込みたいインテグレーションアドミニストレータによって、リソース管理サーバ２２０に提供される。リソース管理サーバ２２０は、各フォーリン階層と対応するモジュールとの間の関連を記憶する。
【００５３】
例示された一実施例では、関数セットは、表１に列挙された基本ファイルシステム動作を行なう関数を含む。
【００５４】
【表１】
0004406609.tif 000002
【００５５】
他の実施例では、より多い、またはより少ない動作および対応する関数が、各関数セットに含まれていてもよい。たとえば、動作および対応する関数が、各関数セットに含まれていてもよい。たとえば、リンクを削除、改名、およびコピーするための動作が追加されてもよく、または、コピーおよび改名のための動作は、削除および作成動作の組合せで置換えることによって省略可能である。
【００５６】
実施例によっては、モジュール内の各関数は、基本動作名に整合する名前と、オペランドに整合するパラメータリストとを有する。各関数は次に、その動作のために、対応するフォーリン階層サーバに表１に記載された動作を実行させるコマンドを生成する１つ以上の命令を含む。
【００５７】
ステップ３１０の最中、フォーリン階層サーバ２４０によって管理される各フォーリン階層について、表１の動作を行なう関数を有する１つ以上のモジュールが、リソース管理サーバ２２０に登録される。実施例によっては、フォーリンノードがネイティブ階層にリンクされるべき経路またはフォルダの名前も特定される。実施例によっては、モジュールが登録されると、フォーリン階層の他のプロパティも特定される。たとえば、フォーリン階層のリソースが修正されてもよいか否かが特定される。修正不能なリソースは「読出専用」であるといわれ、修正可能なリソースは「修正可能」であるといわれる。フォーリン階層のリソースまたはリンクが、そのリソースまたはリンクのプロパティまたは内容について検索されることによって発見可能かどうかが特定されてもよい。そのような検索を可能にするフォーリン階層は「検索可能」であるといわれる。フォーリン階層が検索可能である場合、実施例によっては、１つ以上の検索関数が関数セットに追加され、フォーリン階層の検索能力を呼出すモジュールが登録中に提供される。フォーリン階層のリソースまたはリンクが修正可能である場合、そのような修正が加えられる際に、自動的にコミットされる（「自動コミット」と呼ばれる）か、または、いくつかのステップのトランザクションが完了されて、コミット関数を呼出すといった明示されたコミット動作が取られる場合にのみコミットされる（「トランザクショナル」）かどうかが特定されてもよい。実施例によっては、フォーリン階層のルートノードが、デフォルトにより、仮想リンクへの特定された経路名と関連付けられる。実施例によっては、フォーリン階層の非ルートノードが仮想リンクと関連付けられる。そのような実施例では、関連付けられた非ルートノードへのフォーリン階層での経路名も、ステップ３１０での登録中に含まれる。
【００５８】
実施例によっては、ネイティブ階層のフォルダをフォーリン階層のノードと関連付ける仮想リンク１９０への経路名に、そのフォーリン階層についての関数セットを関連付けるマッピングが、ステップ３１０の最中に生成される。実施例によっては、マッピングはモジュール内の個々の関数のレベルで行なわれ、そのため関数は１つ以上のモジュールにわたって分布していてもよく、関数名は表１の基本動作名と異なっていてもよい。
【００５９】
実施例によっては、ネイティブ階層のリンクプロパティは、リンクが仮想リンク１９０であるかどうか、および、そうである場合、関数セットが記憶されているモジュールの名前、または関数セットの各関数のモジュールおよび関数名のリストを示す属性を含む。経路をトラバースする間、仮想リンクに遭遇すると、関連するモジュールまたは関数を用いて、仮想リンクに沿った経路の部分上のリソースに対して動作が行なわれる。
【００６０】
例示のため、“create_virtual_folder”と呼ばれるリソース管理サーバ２２０のルーチンを呼出し、以下の情報を以下の順序でのそのルーチンのパラメータとして特定することによって、関数セットの登録が行なわれることが仮定される。
【００６１】
１．仮想フォルダがネイティブフォルダと関連付けられている経路名
２．表１の順序での基本動作についてのモジュールおよび関数名
３．検索可能か、読出専用か、トランザクショナルかどうかを示すフラグ。
【００６２】
この実施例では、仮想フォルダは常に、フォーリン階層のルートノードである。例示のため、“Basic102A”および“Basic102B”と命名されたモジュールが図１に示すフォーリン階層１０２についての関数セットを含み、かつ、フォーリン階層１０２が検索可能でも修正可能でもない、ということがさらに仮定される。次に、フォーリン階層１０２は、ネイティブ階層１０１に対し、図１に示すようにフォルダ１１０ｅの下に、以下のステートメントを用いてリソース管理サーバ２２０に登録され得る。
【００６３】
【数１】
0004406609.tif 000003
【００６４】
実施例によっては、リンク名は、親リソースおよび子リソースのリソース名によって暗示される。そのような実施例では、create_virtual_folderルーチンの第１の引数としての経路名“／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａ”は、経路名“／Ｎ１１０ａ／Ｎ１１０ｂ／Ｎ１１０ｅ／Ｎ１３０ａ”によって置き換えられる。
【００６５】
例示のため、“BasicOp103”と命名されたモジュールが図１に示すフォーリン階層１０３についての関数セットを含み、かつ、フォーリン階層１０３が修正可能ではあるが検索可能ではなく、修正は自動的にコミットされる、ということがさらに仮定される。次に、フォーリン階層１０３は、ネイティブ階層１０１に対し、図１に示すようにフォルダ１１０ｆの下に、以下のステートメントを用いてリソース管理サーバ２２０に登録され得る。
【００６６】
【数２】
0004406609.tif 000004
【００６７】
これらの登録の結果は、表２に要約されたようなマッピングである。
【００６８】
【表２】
0004406609.tif 000005
【００６９】
プロセスクライアント要求
ステップ３２０で、多重階層１００のファイルおよびフォルダに対して動作を行なうために、ファイルシステム要求がクライアント２１０からリソース管理サーバ２２０で受取られる。たとえば、フォルダ１１０ｅの下の内容をすべて列挙するために、要求がインターフェイス２３２で受取られる。この要求は、当該技術分野において公知の任意の態様、たとえばHTTP/WebDAVメッセージで受取られてもよい。たとえば、要求は「フォルダ／Ｌ１２０ａ／Ｌ１２０ｄ／Ｎ１１０ｅの下のすべてを列挙する」という表現を含む。この要求の所望された結果は、そのフォルダの下のリソースの名前のリスティングであり、たとえば、ネイティブファイル１１０ｇの名前Ｎ１１０ｇ、フォーリンフォルダ１３０ａの名前Ｎ１３０ａ、フォーリンフォルダ１３０ｂの名前Ｎ１３０ｂ、フォーリンファイル１３０ｃの名前Ｎ１３０ｃ、および適切な経路名によって先行される、省略記号１３１により示される他のリソースの名前である。
【００７０】
ステップ３３０で、階層型処理エンジン２３０は、要求に基づいて、ネイティブリソースまたはリンクに対するネイティブ動作、およびフォーリンリソースまたはリンクに対するフォーリン動作を、もしあれば判断する。たとえば、エンジン２３０は、すべてを列挙する要求がフォルダ１１０ｅの内容を取得する次のネイティブ動作に関わることを判断する。
【００７１】
ステップ３５０で、次のネイティブ動作が実行され、それはネイティブリンク１２０ｇについての識別情報をネイティブファイル１１０ｇに、仮想リンク１９０ａについての識
別情報をフォーリンフォルダ１３０ａに戻す。例示のため、仮想リンク１９０ａがネイティブ階層データ２２２に記憶され、フォーリン階層１０２のルートノードの名前を含むことが仮定される。リンクおよびリソースの名前は、クライアントに戻すための結果データ構造に挿入される。例示のため、結果データ構造が、Ｒ１で示す以下を含むよう更新されることが仮定される。
【００７２】
【数３】
0004406609.tif 000006
【００７３】
例示された実施例では、ステップ３３０はステップ３５０と時間が重複しており、そのため、上述のように、ステップ３５０でネイティブ動作が実行された後、処理エンジン２３０はステップ３３０で次のフォーリン動作を判断する。ステップ３３０で、階層型処理エンジン２３０は、ネイティブファイル１１０ｇは子を持たないが、フォルダ１３０ａは子を持つかもしれない、ということを認識する。例示された実施例では、上述のステップ３１０での登録中、リンク１９０ａで終わる経路をフォーリン階層１０２についての関数セットと関連付けるマッピングが記憶されている。このため、階層型処理エンジン２３０は、フォルダ１３０ａが、リンク１９０ａの下にあるために、階層１０２にとってフォーリンフォルダである、ということを知っている。したがって、例示された実施例では、次のフォーリン動作は、／Ｌ１９０ａ／Ｎ１３０ａに対するget-folder-contents動作である。表２のマッピングにおける経路名を使用して、フォーリン動作が、経路名／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａに関連付けられた、表２の中央の列のものであることが判断される。
【００７４】
ステップ３６０で、次のフォーリン動作に対応するある特定の関数が、特定のフォーリン階層について登録された関数セットから選択される。例示的な実施例では、関数“Basic102A.get_folder”が選択される。表２に示すように、“Basic102A.get_folder”は、フォーリン階層１０２についてリンク１９０ａの下に登録された基本動作“get-folder-contents”に対応している。
【００７５】
ステップ３７０で、選択された関数が呼出される。例示された実施例では、関数“Basic102A.get_folder”が、基本動作、経路名、およびフォルダのフォルダ名について特定されたオペランドを用いて呼出される。オペランドの経路名およびファイル名は、どのフォーリン階層かを示す仮想経路１９０ａの下にある。たとえば、関数は、フォーリン関数呼出し１（ＦＦＩ１）で示す以下の表現において呼出される。
【００７６】
【数４】
0004406609.tif 000007
【００７７】
それは／Ｌ１４０ａ／１３０ｂ、Ｌ１４０ｂ／１３０ｃを戻す。
【００７８】
ステップ３８０で、ネイティブおよびフォーリン動作からの結果が任意の実存する結果と組合され、要望通り経路名を追加する。たとえば、ステップ３８０の後、結果データ構造は、Ｒ２で示す以下を含む。
【００７９】
【数５】
0004406609.tif 000008
【００８０】
ステップ３９０で、ステップ３５０および３７０で実行された動作が、クライアントからの要求を満たすことに関わる最後の動作であるかどうかが判断される。そうではない場合、制御はステップ３３０に戻り、実行すべき次のネイティブおよびフォーリン動作を判断する。たとえば、ステップ３７０でフォルダ１３０ａの内容を取得した後、階層型処理エンジン２３０は依然としてフォルダ１３０ｂの内容を取得すべきであり、そのため制御はステップ３３０に戻る。ステップ３３０で、次の動作はフォルダ／Ｌ１９０ａ／１４０ａ／１３０ｂの内容を取得することであると判断される。このフォルダは／Ｌ１９０ａの下にあるため、それは階層１０２のフォーリンフォルダである。制御はステップ３６０へ渡り、フォルダ内容を取得する正しい関数を選択するが、それはここでも“Basic102A.get_folder”である。ステップ３７０で、フォルダ／Ｌ１９０ａ／Ｌ１４０ａ／Ｎ１３０ｂの内容を、以下の表現ＦＦＩ２に示すような、Ｌ１９０ａの下の経路名の部分を用いて取得するために、関数が呼出される。
【００８１】
【数６】
0004406609.tif 000009
【００８２】
取得されたいかなる結果も、ステップ３８０で、結果データ構造に追加される。フォーリン階層１０２にフォルダが残らなくなるまで、ステップ３３０からステップ３９０へのループは継続する。
【００８３】
ステップ３９０でクライアント要求を満たすために最後の動作が実行されたと判断された場合、制御はステップ３９５に渡る。ステップ３９５で、結果はリソース管理サーバ２２０からクライアント２１０に戻される。
【００８４】
他の実施例では、フォルダ１１０ｅの内容を取得するネイティブ動作の結果は、次のノードへのリンクを生み出すが、ノード名は生み出さない。ノードに関連する名前は、get-resource-properties動作から取得される。リンク１２０ｇ上の子ノードの名前を取得するために、ネイティブノード１１０ｇに対するネイティブ動作が行なわれる。仮想リンク１９０ａ上の子ノードの名前を取得するには、フォーリン階層に関連する関数が呼出されなければならない。この場合、ステップ３３０は、１）ノード１１０ｇについての名前を取得するためにネイティブ関数get-resource-propertiesを判断する、および２）ノード１３０ａについての名前を取得するために対応するフォーリン関数が使用されるべきであることを判断することを伴う。こうして、ネイティブ動作およびフォーリン動作は、フォルダ１１０ｅの内容を列挙するクライアント要求に基づいて判断される。
【００８５】
要求例：ファイル取得
多重階層上のリソースを管理するための方法３００の使用をさらに説明するため、階層１０２上のファイルの内容を取得するクライアント要求を説明する。クライアント２１０ａのユーザが、上述の「すべてを列挙する」要求の結果として、ファイル１３０ｃが経路／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａ／Ｌ１４０ｂ／上に存在することを知っている、と仮定する。ここで考慮される次の要求では、クライアント２１０ａは、このファイルの内容を取得する要求を、リソース管理サーバ２２０から送信する。
【００８６】
ステップ３３０で、階層型処理エンジン２３０は、／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９
０ａ／Ｌ１４０ｂ／Ｎ１３０ｃについてファイル内容を取得する要求を受取り、これを、ネイティブリソースに対するネイティブ動作とフォーリンリソースに対するフォーリン動作とに分割する。具体的には、階層型処理エンジン２３０は、ネイティブ動作get-file-contents from／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａ、およびフォーリン動作get-file-contents from／Ｌ１４０ｂ／Ｎ１３０ｃを判断する。
【００８７】
ステップ３５０で、ネイティブ動作が、もしあれば実行される。経路／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａはファイルを示していないため、ステップ３５０の最中、ファイル内容は取得されない。
【００８８】
ステップ３６０で、get-file-contentsに対応するフォーリン関数が表２のマッピングから選択される。Ｌ１９０ａの下の階層は階層１０２である。階層１０２の下で、対応するフォーリン関数はBasic102A.get_fileである。
【００８９】
ステップ３７０で、フォーリン目標／Ｌ１４０ｂ／Ｎ１３０ｃに対してフォーリン関数が呼出される。階層型処理エンジンによって形成される表現は、ＦＦＩ３によって与えられる。
【００９０】
【数７】
0004406609.tif 000010
【００９１】
ＦＦＩ３の結果は、ファイル１３０ｃからの内容のデータストリームである。
【００９２】
ステップ３８０で、そのデータストリームが結果データ構造内におかれる。ステップ３９０で、ユーザ要求を満たすために実行すべき動作が他にないことが判断される。ステップ３９５で、データストリームはクライアント２１０ａに、クライアント２１０ａへの１つ以上のメッセージで送られる。
【００９３】
こうして、ネイティブ動作およびフォーリン動作は、ファイル１３０ｃの内容を取得するクライアント要求に基づいて判断される。
【００９４】
要求例：ファイルコピー
多重階層上のリソースを管理するための方法３００の使用をさらに説明するため、階層１０２上のファイルを階層１０３のフォルダにコピーするクライアント要求を説明する。クライアント２１０ａのユーザが、上述の「すべてを列挙する」要求の結果として、ファイル１３０ｃが経路／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａ／Ｌ１４０ｂ／上に存在することを知っている、と仮定する。さらに、クライアント２１０ａのユーザが、フォルダ１１０ｆに対するすべてを列挙する要求の結果として、フォルダ１５０ｃが経路／Ｌ１２０ｂ／Ｌ１２０ｆ／Ｌ１９０ｂ／Ｌ１６０ｂ／上に存在することを知っている、と仮定する。
【００９５】
ここで考慮される要求では、クライアント２１０ａは、ファイル１３０ｃをフォルダ１５０ｃにコピーする要求を、表現Ｑ１を用いてリソース管理サーバ２２０に送信する。
【００９６】
【数８】
0004406609.tif 000011
【００９７】
ステップ３３０で、階層型処理エンジン２３０は要求Ｑ１を受取り、これを、一連のネイティブリソースに対するネイティブ動作とフォーリンリソースに対するフォーリン動作とに分割する。ソースファイルと宛先ファイルとが同じフォーリン階層内にないため、フォーリン階層ではコピー動作は実行できない。その代わり、ソースフォーリン階層のファイル内容に基づいて、宛先フォーリン階層１０３にファイルが作成されなければならない。例示された実施例では、階層型処理エンジン２３０は以下の特定の一連の動作を判断する。
【００９８】
１．／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａからのネイティブ動作get-resource-properties
２．Ｌ１９０ａの下の／Ｌ１４０ｂ／Ｎ１３０ｃからのフォーリン動作get-resource-properties 
３．／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａからのネイティブ動作get-file-contents
４．Ｌ１９０ａの下の／Ｌ１４０ｂ／Ｎ１３０ｃからのフォーリン動作get-file-contents
５．名前Ｎ１３０ｃ、現在のプロパティ、およびget-file-contents動作からのデータストリームを用いた、フォルダ／Ｌ１２０ｂ／Ｌ１２０ｆ／Ｌ１９０ｂでのネイティブ動作create-file
６．名前Ｎ１３０ｃ、現在のプロパティ、およびget-file-contents動作からのデータストリームを用いた、Ｌ１９０ｂの下のフォルダ／Ｌ１６０ｂ／１５０ｃでのフォーリン動作create-file。
【００９９】
ステップ３５０で、次のネイティブ動作（１）が、もしあれば実行される。経路／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａはリソースを示していないため、ステップ３５０の最中、リソースプロパティは取得されない。
【０１００】
ステップ３６０で、get-resource-propertiesである次のフォーリン動作（２）に対応するフォーリン関数が、表２のマッピングから選択される。Ｌ１９０ａの下の階層は階層１０２である。階層１０２の下で、対応するフォーリン関数はBasic102A.get_attributesである。
【０１０１】
ステップ３７０で、フォーリン目標／Ｌ１４０ｂ／Ｎ１３０ｃに対してフォーリン関数が呼出される。階層型処理エンジンによって形成される表現は、ＦＦＩ４によって与えられる。
【０１０２】
【数９】
0004406609.tif 000012
【０１０３】
ＦＦＩ４の結果は、所有者、作成日といったファイル１３０ｃについての属性の値の現在の属性データ構造である。
【０１０４】
ステップ３８０で、結果データ構造に記録された結果はない。コピー動作が行なわれる
際、結果はクライアントに戻されない。
【０１０５】
ステップ３９０で、ユーザ要求を満たすために実行される他の動作、すなわち上に列挙した動作３、４、５、６があると判断される。
【０１０６】
ステップ３５０の次の繰返しの際、次のネイティブ動作（３）が実行される。経路／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａはファイルを示していないため、ステップ３５０の最中、ファイル内容は取得されない。
【０１０７】
ステップ３６０の次の繰返しの際、get-file-contentsである次のフォーリン動作（４）に対応するフォーリン関数が、表２のマッピングから選択される。Ｌ１９０ａの下の階層は階層１０２である。階層１０２の下で、対応するフォーリン関数はBasic102A.get_fileである。
【０１０８】
ステップ３７０で、フォーリン目標／Ｌ１４０ｂ／Ｎ１３０ｃに対してフォーリン関数が呼出される。階層型処理エンジンによって形成される表現は、ＦＦＩ５（前の項で説明したＦＦＩ３と同様）によって与えられる。
【０１０９】
【数１０】
0004406609.tif 000013
【０１１０】
ＦＦＩ５の結果は、ファイル１３０ｃからの内容のデータストリームである。
【０１１１】
ステップ３９０で、ユーザ要求を満たすために実行される他の動作、すなわち、上に列挙した動作５、６があることが判断される。
【０１１２】
ステップ３５０の次の繰返しの際、create-file動作である次のネイティブ動作（５）が実行される。経路／Ｌ１２０ａ／Ｌ１２０ｄ／Ｌ１９０ａはフォルダを示していないため、ステップ３５０の最中、ファイルは作成されない。
【０１１３】
ステップ３６０の次の繰返しの際、create-fileである次のフォーリン動作（６）に対応するフォーリン関数が、表２のマッピングから選択される。Ｌ１９０ｂの下の階層は階層１０３である。階層１０３の下で、対応するフォーリン関数はBasicOp103.new_fileである。
【０１１４】
ステップ３７０で、フォーリン目標／Ｌ１６０ｂ／Ｎ１５０ｃに対してフォーリン関数が呼出される。階層型処理エンジンによって形成される表現は、ＦＦＩ６によって与えられる。
【０１１５】
【数１１】
0004406609.tif 000014
【０１１６】
ここで、プロパティは、現在の属性データ構造における値を示している。ＦＦＩ６の結果は、ファイル１３０ｃからの属性および内容のデータストリームに基づいた、階層１０３内の新しいファイルである。
【０１１７】
こうして、いくつかのネイティブ動作およびいくつかのフォーリン動作が、フォーリン階層１０２のファイル１３０ｃの内容をフォーリン階層１０３のフォルダ１５０ｃにコピーするクライアント要求に基づいて判断される。
【０１１８】
ハードウェア概要
図４は、この発明の一実施例が実現され得るコンピュータシステム４００を示すブロック図である。コンピュータシステム４００は、情報を通信するためのバス４０２または他の通信メカニズムと、情報を処理するためにバス４０２と結合されたプロセッサ４０４とを含む。コンピュータシステム４００はまた、プロセッサ４０４により実行されるべき命令および情報を記憶するためにバス４０２に結合された、ランダムアクセスメモリ（ＲＡＭ）または他のダイナミック記憶装置といったメインメモリ４０６も含む。メインメモリ４０６は、プロセッサ４０４により実行されるべき命令の実行中に一時的な変数または他の中間情報を記憶するためにも使用されてもよい。コンピュータシステム４００はさらに、プロセッサ４０４用の命令およびスタティック情報を記憶するためにバス４０２に結合された読出専用メモリ（ＲＯＭ）４０８または他のスタティック記憶装置を含む。磁気ディスクまたは光ディスクといった記憶装置４１０が、情報および命令を記憶するために提供され、バス４０２に結合されている。
【０１１９】
コンピュータシステム４００は、情報をコンピュータユーザに表示するためのブラウン管（ＣＲＴ）などのディスプレイ４１２に、バス４０２を介して結合されていてもよい。英数字キーおよび他のキーを含む入力装置４１４が、情報およびコマンド選択をプロセッサ４０４に通信するためにバス４０２に結合されている。ユーザ入力装置の別の種類は、方向情報およびコマンド選択をプロセッサ４０４に通信し、ディスプレイ４１２上のカーソルの動きを制御するための、マウス、トラックボール、またはカーソル方向キーといったカーソル制御４１６である。この入力装置は通常、２つの軸、つまり第１の軸（たとえばｘ）および第２の軸（たとえばｙ）において２つの自由度を有しており、それによりこの装置は平面における場所を特定することができる。
【０１２０】
この発明は、ここに説明された手法を実現するためのコンピュータシステム４００の使用に関する。この発明の一実施例によれば、それらの手法は、プロセッサ４０４がメインメモリ４０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行するのに応じて、コンピュータシステム４００によって実行される。そのような命令は、記憶装置４１０などの別のコンピュータ読み取り可能な媒体からメインメモリ４０６に読込まれてもよい。メインメモリ４０６に含まれる命令のシーケンスの実行により、プロセッサ４０４は、ここに説明されたプロセスステップを実行するようになる。代替的な実施例では、この発明を実現するために、ソフトウェア命令の代わりに、またはソフトウェア命令と組合わせて、ハードワイヤード回路が使用されてもよい。このため、この発明の実施例は、ハードウェア回路とソフトウェアとのどの特定の組合せにも限定されない。
【０１２１】
ここで用いられるような用語「コンピュータ読み取り可能な媒体」とは、プロセッサ４０４に命令を実行用に提供することに関与するあらゆる媒体を指す。そのような媒体は、不揮発性媒体、揮発性媒体、および通信媒体を含むもののそれらに限定されない多くの形態を取り得る。不揮発性媒体はたとえば、記憶装置４１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ４０６などのダイナミックメモリを含む。通信媒体は、バス４０２を構成する配線を含む、同軸ケーブル、銅線および光ファイバを含む。通信媒体はまた、無線周波数および赤外線データ通信中に発生するものといった音波または光波の形も取り得る。
【０１２２】
コンピュータ読み取り可能な媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意の他の磁
気媒体、ＣＤ−ＲＯＭ、任意の他の光媒体、パンチカード、紙テープ、孔のパターンを有する任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップまたはカートリッジ、以下に説明するような搬送波、または、コンピュータがそこから読み取り可能な任意の他の媒体を含む。
【０１２３】
コンピュータ読み取り可能な媒体のさまざまな形態は、プロセッサ４０４への１つ以上の命令の１つ以上のシーケンスを実行用に保持することに関与していてもよい。たとえば、命令はまず、遠隔コンピュータの磁気ディスク上に保持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、電話回線を通してモデムを用いて命令を送信することができる。コンピュータシステム４００にとってローカルなモデムは、電話回線上のデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換することができる。赤外線検出器は赤外線信号で搬送されたデータを受信でき、適切な回路がデータをバス４０２上に配置することができる。バス４０２はデータをメインメモリ４０６に搬送し、そこからプロセッサ４０４が命令を検索して実行する。メインメモリ４０６によって受信された命令は、プロセッサ４０４による実行の前または後のいずれかで、記憶装置４１０上に随意に記憶されてもよい。
【０１２４】
コンピュータシステム４００はまた、バス４０２に結合された通信インターフェイス４１８も含む。通信インターフェイス４１８は、ローカルネットワーク４２２に接続されたネットワークリンク４２０に双方向データ通信結合を提供する。たとえば、通信インターフェイス４１８は、データ通信接続を対応する種類の電話回線に提供するデジタル相互サービス網（ＩＳＤＮ）カード、またはモデムであってもよい。別の例として、通信インターフェイス４１８は、データ通信接続を互換性があるＬＡＮに提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクも実現され得る。任意のそのような実現化例では、通信インターフェイス４１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送信および受信する。
【０１２５】
ネットワークリンク４２０は通常、１つ以上のネットワークを介して、他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク４２０は、ローカルネットワーク４２２を介して、ホストコンピュータ４２４に、またはインターネットサービスプロバイダ（ＩＳＰ）４２６により運営されるデータ装置に、接続を提供してもよい。ＩＳＰ４２６は次に、現在一般に「インターネット」４２８と呼ばれている全世界的パケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク４２２およびインターネット４２８は双方とも、デジタルデータストリームを搬送する電気信号、電磁信号または光信号を使用する。コンピュータシステム４００へ、またはコンピュータシステム４００からデジタルデータを搬送する、さまざまなネットワークを通る信号、ネットワークリンク４２０上の信号、および通信インターフェイス４１８を通る信号は、情報を運ぶ搬送波の例示的な形態である。
【０１２６】
コンピュータシステム４００は、ネットワーク、ネットワークリンク４２０および通信インターフェイス４１８を介して、メッセージを送信し、プログラムコードを含むデータを受信する。インターネットの例では、サーバ４３０は、アプリケーションプログラム用の要求されたコードを、インターネット４２８、ＩＳＰ４２６、ローカルネットワーク４２２、および通信インターフェイス４１８を介して送信してもよい。
【０１２７】
受信されたコードは、受信された際にプロセッサ４０４によって実行されてもよく、および／または、後での実行用に記憶装置４１０または他の不揮発性ストレージに記憶されてもよい。このように、コンピュータシステム４００は、搬送波の形をしたアプリケーションコードを取得し得る。
【０１２８】
前述の明細書において、この発明を、その特定の実施例を参照して説明してきた。しかしながら、この発明のより幅広い精神および範囲を逸脱することなく、様々な修正および変更がそれになされてもよいことは、明らかである。したがって、明細書および図面は、限定的な意味というよりもむしろ例示的な意味で考慮されるべきである。
【図面の簡単な説明】
【０１２９】
【図１】一実施例に従った、多重ファイルシステムにおけるノードおよびリンクの多重階層を示すブロック図である。
【図２】一実施例に従った、多重階層におけるリソースを管理するためのシステムを示すブロック図である。
【図３】一実施例に従った、多重階層におけるリソースを管理するための方法を高レベルで示すフローチャートである。
【図４】この発明の一実施例が実施され得るコンピュータシステムを示すブロック図である。
【図１】
0004406609.tif 000015
【図２】
0004406609.tif 000016
【図３】
0004406609.tif 000017
【図４】
0004406609.tif 000018