(57)【特許請求の範囲】
【請求項１】
データストレージシステムに記憶されたデータに対する操作をアプリケーションプログラムの処理に供するデータ管理システムであって、
データを操作するための、それぞれ操作内容の異なる複数のデータ操作モジュールを記憶する記憶手段と、
前記データストレージシステムに記憶されたデータごとに、どの前記データ操作モジュールをどのような順番で用いて当該データに操作を加えるべきかを特定する情報を、当該データに関連付けて前記データストレージシステムに記録する情報記録手段と、
前記アプリケーションプログラムが前記データストレージシステムに記憶されたデータに対する操作を行う際に、当該データに関連付けて前記データストレージシステムに記録されている前記情報を参照して、前記複数のデータ操作モジュールの中から、該情報により特定される一つ以上のデータ操作モジュールを選択し、選択されたデータ操作モジュールを該情報により特定される順番で用いて当該データに操作を加える操作手段とを備え、
前記情報記録手段は、前記アプリケーションプログラムが前記データストレージシステムに新しいデータを作成する際に、前記アプリケーションプログラムにより指定された当該新しいデータのカテゴリに基づいて、当該新しいデータに係る前記情報を作成し、作成された情報を当該新しいデータに関連付けて前記データストレージシステムに記録することを特徴とするデータ管理システム。
【請求項２】
前記操作手段が二つ以上の前記データ操作モジュールを選択した場合には、選択された前記データ操作モジュールのうち最初に用いられるデータ操作モジュールは、前記データストレージシステムから出力されたデータを操作して、一つ後に用いられるデータ操作モジュールに渡し、選択された前記データモジュールのうち最後に用いられるデータ操作モジュールは、一つ前に用いられるデータ操作モジュールから渡されたデータを操作して、前記アプリケーションプログラムに渡すものであることを特徴とする請求項１に記載のデータ管理システム。
【請求項３】
前記操作手段が一つの前記データ操作モジュールのみを選択した場合には、選択された前記データ操作モジュールは、前記データストレージシステムから出力されたデータを操作して、前記アプリケーションプログラムに渡すことを特徴とする請求項１または２に記載のデータ管理システム。
【請求項４】
前記情報記録手段は、前記新しいデータに係る前記情報を作成するにあたって、前記アプリケーションプログラムにより指定された前記新しいデータのカテゴリに基づき、前記操作手段が使用すべきデータ操作モジュールの少なくとも一つを特定し、特定された該データ操作モジュールは、前記操作手段が使用すべき他のデータ操作モジュールか、あるいは該他のデータ操作モジュールを特定可能なカテゴリを指定することを特徴とする請求項１ないし３のいずれか1項に記載のデータ管理システム。
【請求項５】
データを操作するための、それぞれ操作内容の異なる複数のデータ操作モジュールを記憶する記憶手段と、前記データストレージシステムに記憶されたデータごとに、どの前記データ操作モジュールをどのような順番で用いて当該データに操作を加えるべきかを特定する情報を、当該データに関連付けて前記データストレージシステムに記録する情報記録手段と、操作手段とを備え、データストレージシステムに記憶されたデータに対する操作をアプリケーションプログラムの処理に供するデータ管理システムにおける、データ管理方法であって、
前記情報記録手段が、前記アプリケーションプログラムが前記データストレージシステムに新しいデータを作成する際に、前記アプリケーションプログラムにより指定された当該新しいデータのカテゴリに基づいて、当該新しいデータに係る前記情報を作成し、作成された情報を当該新しいデータに関連付けて前記データストレージシステムに記録するステップと、
前記操作手段が、前記アプリケーションプログラムが前記データストレージシステムに記憶されたデータに対する操作を行う際に、当該データに関連付けて前記データストレージシステムに記録されている前記情報を参照して、前記複数のデータ操作モジュールの中から、該情報により特定される一つ以上のデータ操作モジュールを選択し、選択されたデータ操作モジュールを該情報により特定される順番で用いて当該データに操作を加えるステップとを有することを特徴とするデータ管理方法。
【請求項６】
前記操作手段が二つ以上の前記データ操作モジュールを選択した場合には、選択された前記データ操作モジュールのうち最初に用いられるデータ操作モジュールは、前記データストレージシステムから出力されたデータを操作して、一つ後に用いられるデータ操作モジュールに渡し、選択された前記データモジュールのうち最後に用いられるデータ操作モジュールは、一つ前に用いられるデータ操作モジュールから渡されたデータを操作して、前記アプリケーションプログラムに渡すものであることを特徴とする請求項５に記載のデータ管理方法。
【請求項７】
前記操作手段が一つの前記データ操作モジュールのみを選択した場合には、選択された前記データ操作モジュールは、前記データストレージシステムから出力されたデータを操作して、前記アプリケーションプログラムに渡すことを特徴とする請求項５または６に記載のデータ管理方法。
【請求項８】
前記情報記録手段は、前記新しいデータに係る前記情報を作成するにあたって、前記アプリケーションプログラムにより指定された前記新しいデータのカテゴリに基づき、前記操作手段が使用すべきデータ操作モジュールの少なくとも一つを特定し、特定された該データ操作モジュールは、前記操作手段が使用すべき他のデータ操作モジュールか、あるいは該他のデータ操作モジュールを特定可能なカテゴリを指定することを特徴とする請求項５ないし７のいずれか1項に記載のデータ管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子計算機においてデータの管理や操作の機能を提供するデータ管理システム及びデータ管理方法に関する。
【０００２】
【従来の技術】
電子計算機で扱うデータは、通常、ファイルシステムやデータベース管理システムを用いて管理する。
【０００３】
ファイルシステムは、バイト列という非常に基本的なデータを、名前をつけて管理する。ファイルシステムの管理するバイト列のデータをファイルと呼ぶ。アプリケーションは、ファイルに対して、その中にデータを新しく書き込んだり、既に書き込まれているデータを読み出したりする、基本的な操作が可能である。
【０００４】
一方、データベース管理システムは、特定のデータモデルを前提にすることで、そのデータモデルに特化した高機能な操作を提供している。最もよく用いられているのは、関係データモデルに基づいた関係データベース管理システムである。関係データベース管理システムでは、すべてのデータをテーブルで表現して管理し、キーを指定してテーブルの中に記憶されているデータを検索したり、ＪＯＩＮと呼ぶ操作によって複数のテーブル中の関連するデータを検索するなどの操作を提供している。アプリケーションプログラムは、必要なデータをテーブルの形で定義することができれば、関係データベース管理システムの提供する様々な操作機能を使って処理を行うことができる。関係データモデルの他にも、ネットワーク型データモデルや、オブジェクトデータモデルなどを用いたデータベース管理システムがある。
【０００５】
データベース管理システムを用いてデータを管理する場合、データの管理および操作は、アプリケーションプログラムから切り離され、データベース管理システムの側で行う。すなわち、データの独立性が実現されるため、１つのデータを複数のアプリケーション間で共有して利用しやすくなる。また、トランザクションとしての処理の一貫性の管理や、複数のアプリケーションで共有して処理する場合の排他制御、さらには障害発生時のリカバリ処理などの機能も提供している。
【０００６】
【発明が解決しようとする課題】
上記したようにファイルシステムは、バイト列という基本的で柔軟性を備えたデータモデルを提供している。しかし、バイト列は概念的には非常に低レベルのデータモデルであり、実際に計算機によるさまざまな問題解決に用いるためには、アプリケーションプログラムによって、バイト列の上にそのアプリケーション独自のデータの管理構造と操作を定義して使用する必要がある。そのためデータ独立性が低く、複数のアプリケーション間でデータを共有することが難しい。
【０００７】
一方、データベース管理システムは、概念的に高いレベルの特定のデータモデルを定めることで、さまざまな管理や操作の機能を提供している。データ独立性が高いので、アプリケーション間のデータの共有も容易である。しかし、データベース管理システムの提供するデータモデルにマッチしたアプリケーションは作りやすく性能も出しやすいが、逆にマッチしないアプリケーションは作りにくく性能も出しにくい。データの柔軟性という観点からはファイルシステムほどの自由度は無く、また、新しいデータやデータモデルの管理・操作機能の拡張性にも欠ける。
【０００８】
本発明は、上記事情を考慮してなされたもので、柔軟性と独立性と拡張性に優れたデータ管理システム及びデータ管理方法を提供することを目的とする。
【０００９】
【課題を解決するための手段】
本発明は、データストレージシステム（バイナリデータを出力する一般のファイルシステム、例えばハードディスクから読み出したデータをそのまま出力するシステム、バイナリデータを例えばＸＭＬデータに変換して出力する機能を加えた特殊なファイルシステム、等）に記憶されたデータに対する操作をアプリケーションプログラムの処理に供するデータ管理システムであって、データを操作するための、それぞれ操作内容の異なる複数のデータ操作モジュールを記憶する記憶手段と、前記データストレージシステムに記憶されたデータごとに、どの前記データ操作モジュールをどのような順番で用いて当該データに操作を加えるべきかを特定する情報を、当該データに関連付けて前記データストレージシステムに記録する情報記録手段と、前記アプリケーションプログラムが前記データストレージシステムに記憶されたデータに対する操作を行う際に、当該データに関連付けて前記データストレージシステムに記録されている前記情報を参照して、前記複数のデータ操作モジュールの中から、該情報により特定される一つ以上のデータ操作モジュールを選択し、選択されたデータ操作モジュールを該情報により特定される順番で用いて当該データに操作を加える操作手段とを備え、前記情報記録手段は、前記アプリケーションプログラムが前記データストレージシステムに新しいデータを作成する際に、前記アプリケーションプログラムにより指定された当該新しいデータのカテゴリに基づいて、当該新しいデータに係る前記情報を作成し、作成された情報を当該新しいデータに関連付けて前記データストレージシステムに記録することを特徴とする。
【００１０】
本発明によれば、あるデータストレージシステムの提供するあるデータモデル、例えば、ファイルシステムの提供するバイナリデータの上に、必要なデータ操作モジュールを組み合わせることで、アプリケーションプログラムの必要とする任意のデータモデル（例えば、データストレージシステムがファイルシステムの場合における、ＸＭＬドキュメントや、連想記憶など）を使ったデータ管理や操作を可能にすることで、柔軟なデータ管理機能を提供することができる。
【００１１】
また、本発明によれば、アプリケーションプログラムとデータ操作モジュールとが分離しているので、従来のファイルシステムを用いる場合のようにデータ操作に必要な処理の記述をアプリケーションプログラム内に記述する必要が無い、という利点がある。このため、データを複数のアプリケーションプログラムで共有する場合においても、データ操作に必要な処理はデータ操作モジュールにあるので共有をしやすい。また、アプリケーションプログラムを変更することなくデータ操作モジュールを入れ替えたり機能を拡張することができる。つまり、高度なデータ独立性を実現することができる。
【００１２】
また、本発明によれば、新しい機能を持つデータ操作モジュールを追加したり、既存のデータ操作モジュールの機能をアプリケーションとは独立に強化したり、あるいは同じカテゴリのデータを扱うデータ操作モジュールでも、さまざまな特色のあるデータ操作モジュールを提供するなどのバリエーションを追加したりするような、拡張性に優れたデータ管理機能を提供することができる。
【００２３】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
【００２４】
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための（あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための）プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【００２５】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【００２６】
本実施形態では、データ管理システムにおいて、データにプロパティを持たせて、階層的な名前空間でデータを管理する場合を例にとって説明する。
【００２７】
このようなデータ管理の方式としては、ＷｅｂＤＡＶを用いることができるが、これに限るものではない。ＷｅｂＤＡＶの仕様は「ＨＴＴＰ  Ｅｘｔｅｎｓｉｏｎｓ  ｆｏｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ａｕｔｈｏｒｉｎｇ  --  ＷＥＢＤＡＶ」（ＲＦＣ２５１８）に開示されている。
【００２８】
本実施形態のデータ管理システムでは、データに階層的な名前を付けて管理するために、その階層構造をディレクトリによって管理する。すなわち、ディレクトリは、その下位の階層に、他のディレクトリとデータを任意数持つことができる。例えば、図１に示した階層構造の具体例においては、３つのデータ「ｄａｔａ１」、「ｄａｔａ２」、「ｄａｔａ３」と３つのディレクトリ「ｄｉｒ１」、「ｄｉｒ２」、「ｄｉｒ３」が示されており、３つのデータはそれぞれ「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１」、「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ２」、「／ｄｉｒ１／ｄｉｒ３／ｄａｔａ３」といった名前で管理される。なお、上記のＷｅｂＤＡＶでは、データやディレクトリはリソースと呼ばれ、ディレクトリはコレクションとも呼ばれる。
【００２９】
本実施形態のデータ管理システムの管理するデータは、ファイルシステムのようにバイナリデータであることもあれば、ＸＭＬドキュメントのような構造を持つデータである場合もあるし、キーを与えて値をアクセスするデータベース的なデータである場合もある。その他にも、さまざまな拡張したデータモデルに基づいたデータを管理することができる。なお、ＸＭＬに関しては「Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ  （ＸＭＬ）  １．０」（ＷｏｒｌｄＷｉｄｅ  Ｗｅｂ  Ｃｏｎｓｏｒｔｉｕｍ）に開示されている。
【００３０】
図１に示すように、それぞれのディレクトリ（２０１）やデータ（２０２）は、プロパティ（２０３）と呼ぶ属性名と属性値との対の集合を持っている。プロパティは、そのディレクトリまたはファイルの作成日、アクセス権限、所有者など、様々な情報を記録するために用いる。
【００３１】
本実施形態のデータ管理システムでは、ディレクトリやプロパティもデータとして管理している。例えば、図１の具体例におけるデータの管理構造は、実装面から見ると、図２に示すように、ディレクトリの実体のデータ（例えば３０２や３０４）中には、その子供に当たるディレクトリやデータのプロパティ（例えば３０３や３０７）を指し示す情報を持ち、さらに、プロパティのデータ（例えば３０３や３０７）中には、それに対応するディレクトリまたはデータの実体（例えば３０４や３０８）を指し示す情報を持つように管理している。つまり、ディレクトリを表現するデータモデルやプロパティを表現するデータモデルを持っていると言うことができる。
【００３２】
図３に、本実施形態に係るデータ管理システムの一般的な構成例を示す。
【００３３】
なお、本実施形態では、データストレージシステムとしてファイルシステムを用いた場合について説明する。図中の３がファイルシステムであり、例えばハードディスク３１等の安定記憶装置内のファイルを管理する。なお、安定記憶装置とは、例えば、ハードディスク等の、電源を切っても記憶した内容が消えない記憶装置を指す。
【００３４】
データ管理システム１は、概略的には、アプリケーションプログラム２からの要求を受けファイルシステム３の管理するファイルの操作を行う（例えば、アプリケーションプログラム２に対して、ファイルシステム３内のデータのデータモデル変換（例えばファイルに記録されたバイナリデータからＸＭＬへの変換）の提供やあるデータモデルにおける操作機能の提供等を行う）。
【００３５】
図３に示されるように、データ管理システム１は、リソースマネージャ１１、ｎ（ｎは１以上の整数）種類のデータ操作モジュールマネージャ１２−１〜１２−ｎ、データ操作モジュールマネージャ１２−ｉ（ｉ＝１〜ｎ）に対応するｎ種類のデータ操作モジュール１１２−ｉの３種類の構成要素からなる。
【００３６】
なお、図３において、点線で囲った内部に存在する矩形は同一の機能のデータ操作モジュールを表す（後に示す図４においても同様である）。例えば、図３において、第１番目のデータ操作モジュールマネージャ１２−１に対応して点線で囲われた内部に記述されている３つの矩形は全て同一の機能のデータ操作モジュール１１２−１を表す（他のデータ操作モジュール（１１２−２や１１２−３）についても同様である）。
【００３７】
データ操作モジュール１１２−ｉは、そのユーザ（アプリケーションプログラム２やリソースマネージャ１１）に対して、何らかのデータの管理や操作の機能を提供するものである。例えば、後で説明するように、バイナリファイルをＸＭＬドキュメントとして管理・操作できる機能を提供したり、ＸＭＬドキュメントの上にキーと値のペアによる連想記憶機能を提供したりする。すなわち、下位のデータあるいはデータモデルを、別の種類のデータあるいはデータモデルとして見せ、同時にその別の種類としてのデータあるいはデータモデルに対する管理や操作の機能を提供することが、データ操作モジュールの役割である。
【００３８】
本実施形態のデータ管理システム１において、データ操作モジュール１１２−ｉは、１個以上で組になって、１つのデータに対する管理や操作の機能を、アプリケーションプログラム２やリソースマネージャ１１に提供する。すなわち、アプリケーションプログラム２やリソースマネージャ１１がデータ管理システム１を利用してファイルシステム３内のデータやディレクトリやプロパティに対して処理を行う場合には、そのデータモデルや操作内容等に応じて、図３に例示されるように、１以上のデータ操作モジュール１１２−ｉが組み合わされて使用される。
【００３９】
なお、本実施形態では、図７、９、１２、１５、１８、２５、２８に示されるように、最下位にあたるデータ操作モジュールから、アプリケーションプログラム２等の要求に応じた階層まで、階層的にデータ操作モジュールを組み合わせて使用する場合を例にとって説明する。
【００４０】
また、データ操作モジュール１１２−ｉは、操作対象のデータ毎に、その実体が存在する。従って、複数の操作主体（アプリケーションプログラム２やリソースマネージャ１１）が同時に動作した場合、図３に例示されるように、実際には同じ機能のデータ操作モジュール１１２−ｉが複数同時に存在する（もしくは使用される）ことも、１つのみ存在する（もしくは使用される）ことも、また１つも存在しない（もしくは使用されない）こともあり得る。
【００４１】
同じ機能のデータ操作モジュール１１２−ｉは、対応する１つのデータ操作モジュールマネージャ１２−ｉによって管理される。上記のように、それぞれのデータ操作モジュールマネージャ１２−ｉに対して、それが管理するデータ操作モジュール１１２−ｉは複数存在し得る（０または１のこともある）。図３の例では、データ操作モジュールマネージャ（１）は３個のデータ操作モジュール（１）を管理しており、データ操作モジュールマネージャ（２）は５個のデータ操作モジュール（２）を管理しており、データ操作モジュールマネージャ（ｎ）は７個のデータ操作モジュール（ｎ）を管理している。
【００４２】
また、本実施形態では、データ操作モジュールマネージャ１２−ｉとデータ操作モジュール１１２−ｉとは、オブジェクト指向でいうところのクラスとインスタンスとの関係に相当するものである。実際にオブジェクト指向によってデータ操作モジュールマネージャ１２−ｉとデータ操作モジュール１１２−ｉとを実現する場合には、データ操作モジュールマネージャ１２−ｉのみ作成し、データ操作モジュール１１２−ｉは動作中に必要に応じて生成・消滅してよいことになる。
【００４３】
リソースマネージャ１１は、アプリケーションプログラム２からのデータ操作要求を受けて、必要なデータ操作モジュール１１２−ｉを組み合わせて、所望の操作ができるようにセットアップする働きを持つ。リソースマネージャ１１の中には、現在使用中のデータの名前とデータ操作モジュールとの対応を管理する名前管理表２２と、データ操作モジュールを組み合わせるときに使うデータ操作モジュール管理表２１を持っている。
【００４４】
次に、本データ管理システムをより具体的に説明する。
【００４５】
図４に、本データ管理システムのより具体的な構成例を示す。
【００４６】
このデータ管理システム１には、ファイルシステムモジュールマネージャ１２、ＸＭＬモジュールマネージャ１３、Ｋｅｙ−Ｖａｌｕｅモジュールマネージャ１４、ディレクトリモジュールマネージャ１５、プロパティモジュールマネージャ１６の５種類のデータ操作モジュールマネージャが存在する。また、それに対応して、５種類のデータ操作モジュール１１２〜１１６が適宜使用される。なお、図４におけるデータ操作モジュールの存在状況（使用状況）はある時点での一例であり、データ操作主体によるデータ操作状況に応じて変化するものである。また、図４において、各モジュールに対する参照番号のうち１１２〜１１４については、その一部の記述を省いてある。
【００４７】
図５に、リソースマネージャ１１の中にあるデータ操作モジュール管理表２１の持つ構造の一例を示す。
【００４８】
データ操作モジュール管理表２１には、データ操作モジュールの名前と、そのデータ操作モジュールを管理するデータ操作モジュールマネージャへのポインタの対応が記録される。
【００４９】
図５の例では、データ操作モジュールの名前は、ＸＭＬのエレメントで指定されている。＜ｐｒｏｐｍ／＞や＜ｘｍｌｍ／＞などがデータ操作モジュールの名前である。このデータ操作モジュールの名前は、それぞれのデータをアクセスするために必要になるデータ操作モジュールの「組み合わせ方」を記述するときに用いる。
【００５０】
図６に、リソースマネージャ１１により管理される名前管理表２２の持つ構造の一例を示す。
【００５１】
名前管理表２２には、現在使用しているディレクトリやデータの名前と、そのプロパティのプロパティモジュールへのポインタと、ディレクトリの場合におけるそのディレクトリのディレクトリモジュールへのポインタとの対応が記録される。なお、後で説明するように、プロパティモジュール１１６は、プロパティを表現するデータ操作モジュールであり、ディレクトリモジュール１１５は、ディレクトリを表現するデータ操作モジュールである。
【００５２】
図６の例では、「／ｄｉｒ１」や「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１」が名前に相当する。また、図６では、プロパティモジュールへのポインタの欄やディレクトリモジュールへのポインタの欄が空になっているが、実際はここに該当するプロパティモジュールへのポインタやディレクトリモジュールへのポインタが入る。
【００５３】
以下では、図４の構成例におけるデータ操作モジュールの機能について説明する。
【００５４】
第１のデータ操作モジュールは、ファイルシステムモジュールである。
【００５５】
ファイルシステムモジュール１１２は、データ管理システム１の下にあるファイルシステム３を抽象化する働きを持つデータ操作モジュールである。ファイルシステム３中に記録されているバイナリデータに対して読み書きの操作を提供するのがその主な働きである。
【００５６】
ファイルシステムモジュール１１２がバイナリデータに対して提供する操作の例としては、次のようなものがある。
（１）ＲＥＡＤ：指定したオフセットから指定した長さのデータを読み出す  （２）ＷＲＩＴＥ：指定したオフセットから指定した長さのデータを書き込むファイルシステムモジュール１１２を使ってバイナリデータにアクセスする場合は、通常、図７に示すようにファイルシステムモジュール１１２を単独で使用する。この例では、下位のファイルシステム３中に記録されている「ｆ２４６８」という名前のファイルの内容を、バイナリデータとして上位のアプリケーションプログラム２に見せている。
【００５７】
図７のようなバイナリデータをアクセスする場合の「データ操作モジュールの組み合わせ方」は例えば図８のように記述する。ここでは、ファイルシステムモジュールを表す＜ｆｓｍ＞というエレメントの下に、下位のファイルシステム３内での管理情報を持つ＜ｆｉｌｅ＞エレメントを持ち、その下には、＜ｎａｍｅ＞ｆ２４６８＜／ｎａｍｅ＞で実際の管理名を持っている。
【００５８】
このような「データ操作モジュールの組み合わせ方の記述」は、リソースマネージャ１１が、それぞれのデータのプロパティの中あるいはディレクトリの実体の中に記述して管理している。
【００５９】
第２のデータ操作モジュールは、ＸＭＬモジュールである。
【００６０】
ＸＭＬモジュール１１３は、その下にあるファイルシステムモジュール１１２の提供するバイナリデータ上に、ＸＭＬドキュメントの木構造データを展開して記憶し、それへの操作、つまり木構造のドキュメントの読み出しや新しい部分木の追加や削除などを可能にする。
【００６１】
このとき、ＸＭＬドキュメントの木構造データを操作するインタフェースとしては、例えば「Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ  （ＤＯＭ）  Ｌｅｖｅｌ  １  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」（Ｗｏｒｌｄ  ＷｉｄｅＷｅｂ  Ｃｏｎｓｏｒｔｉｕｍ）に開示されているＤＯＭインタフェースを使うことができる。また、それ以外の独自のインタフェースでも構わない。
【００６２】
ＸＭＬモジュール１１３がＸＭＬドキュメントに対して提供する操作の例としては、次のようなものがある。
（１）ＣＨＩＬＤ：最初の子供のエレメントあるいはテキストを取り出す
（２）ＮＥＸＴ：同じ親を持つエレメントあるいはテキストで次のものを取り出す
（３）ＰＲＥＶ：同じ親を持つエレメントあるいはテキストで前のものを取り出す
（４）ＰＡＲＥＮＴ：親のエレメントを取り出す
（５）ＲＥＭＯＶＥ：指定したエレメントあるいはテキストを削除する
（６）ＡＤＤＦＩＲＳＴ：新しいエレメントあるいはテキストを最初の子供として追加する
（７）ＡＤＤＬＡＳＴ：新しいエレメントあるいはテキストを最後の子供として追加する
ＸＭＬモジュール１１３を使ってＸＭＬドキュメントのデータをアクセスする場合、通常、図９に示すようにＸＭＬモジュール１１３とファイルシステムモジュール１１２を組み合わせて用いる。
【００６３】
このときの「データ操作モジュールの組み合わせ方」は例えば図１０のように記述する。ここでは、ＸＭＬモジュールを示す＜ｘｍｌｍ＞エレメントの下に、その下に来るファイルシステムモジュールの情報を持っている。
【００６４】
第３のデータ操作モジュールは、Ｋｅｙ−Ｖａｌｕｅモジュールである。
【００６５】
Ｋｅｙ−Ｖａｌｕｅモジュール１１４は、キーと値の組を複数記憶し、その集合に対してキーを指定した連想アクセスを可能にするデータ操作モジュールである。本実施形態では、Ｋｅｙ−Ｖａｌｕｅモジュール１１４は、管理するキーと値の組の集合を、ＸＭＬドキュメントの形で保存する。そのため、ＸＭＬモジュール１１３の提供するＸＭＬドキュメントの上に、連想記憶機能を提供する。
【００６６】
Ｋｅｙ−Ｖａｌｕｅモジュール１１４が提供する操作の例としては、次のようなものがある。
（１）ＦＩＮＤ：指定したキーの値を取り出す
（２）ＡＤＤ：指定したキーと値の組を登録する
（３）ＲＥＭＯＶＥ：指定したキーとその値の組を削除する
Ｋｅｙ−Ｖａｌｕｅモジュール１１４は、例えば、図１１に示すような形式で、キーと値の組の集合をＸＭＬドキュメントとして管理する。図１１では、＜ｅｎｔｒｙ＞エレメントが１つのキーと値の組を持ち、その下の＜ｋｅｙ＞エレメントがキーを、＜ｖａｌｕｅ＞エレメントが値を持っている。この例では、キー「大阪」の値が「たこ焼き」であり、キー「博多」の値が「からし明太子」である状態を記録している。
【００６７】
図１１の例では、キーと値の組を順に並べて管理しているが、広く知られた２分木やＢ−ＴＲＥＥなどのデータ構造を用いることで、高速な検索が可能になるように実装することもできる。このようなＫｅｙ−Ｖａｌｕｅモジュール１１４の内部の実装を、Ｋｅｙ−Ｖａｌｕｅモジュール１１４を使うアプリケーションプログラム２や他のデータ操作モジュールに影響を及ぼさずに変更できるのも、本発明の特長の一つである。
【００６８】
Ｋｅｙ−Ｖａｌｕｅモジュール１１４を使ってデータをアクセスする場合、通常、図１２に示すように、Ｋｅｙ−Ｖａｌｕｅモジュール１１４とＸＭＬモジュール１１３とファイルシステムモジュール１１２を組み合わせて用いる。
【００６９】
このときの「データ操作モジュールの組み合わせ方」は例えば図１３のように記述する。ここでは、Ｋｅｙ−Ｖａｌｕｅモジュールを示す＜ｋｖｍ＞エレメントの下に、その下に来るＸＭＬモジュールの情報を持ち、さらにその下にファイルシステムモジュールの情報を持っている。
【００７０】
第４のデータ操作モジュールは、プロパティモジュールである。
【００７１】
プロパティモジュール１１６は、データ管理システム１（リソースマネージャ１１）が、内部の管理のために用いる。本実施形態では、データ管理システム１は、プロパティの属性名と属性値の組を、Ｋｅｙ−Ｖａｌｕｅモジュール１１４の提供する連想記憶機能の上に管理する。そして、プロパティモジュール１１６を使って、例えば次のようなプロパティの操作を提供する。
（１）ＦＩＮＤＰＲＯＰ：指定した属性名の値を検索する
（２）ＡＤＤＰＲＯＰ：指定した属性名と属性値の組を追加する
（３）ＲＥＭＰＲＯＰ：指定した属性名とその属性値の組を削除する
図１４に、プロパティモジュール１１６がプロパティの属性名と属性値の組をＫｅｙ−Ｖａｌｕｅモジュール１１４を使ってＸＭＬドキュメントとして管理している場合のＸＭＬドキュメントの例を示す。図１４は、図１に示す「ｄａｔａ１」というデータのプロパティの例である。
【００７２】
図１４において、＜ｋｅｙ＞エレメントはプロパティの属性名を示しており、＜ｖａｌｕｅ＞エレメントはプロパティの属性値を示している。ここでは、データの作成日時を示す「ｃｒｅａｔｉｏｎｄａｔｅ」、データの所有者を示す「ｏｗｎｅｒ」、このデータの実体をアクセスするときに必要なデータ操作モジュールの組み合わせ方を記述する「ｍｏｄｕｌｅ」の３つの属性がある。それぞれに対応する＜ｖａｌｕｅ＞エレメントが、その属性値である。
【００７３】
ここで、「ｍｏｄｕｌｅ」属性が、本実施形態のデータ管理システム１において、データのプロパティからデータの実体を結びつける役割を持っている。後で述べるように、このプロパティを持つデータの実体をアプリケーションプログラム２がオープンしてアクセスする場合には、この「ｍｏｄｕｌｅ」属性に書かれた情報をもとに、リソースマネージャ１１が必要なデータ操作モジュールを選択して組み合わせる。
【００７４】
プロパティモジュール１１６を使ってデータをアクセスする場合、通常、図１５に示すように、プロパティモジュール１１６とＫｅｙ−Ｖａｌｕｅモジュール１１４とＸＭＬモジュール１１３とファイルシステムモジュール１１２を組み合わせて用いる。
【００７５】
このときの「データ操作モジュールの組み合わせ方」は例えば図１６のように記述する。ここでは、プロパティモジュールを示す＜ｐｒｏｐｍ＞エレメントの下に、Ｋｅｙ−Ｖａｌｕｅモジュールの情報を持ち、その下にＸＭＬモジュールの情報を持ち、さらにその下にファイルシステムモジュールの情報を持っている。
【００７６】
第５のデータ操作モジュールは、ディレクトリモジュールである。
【００７７】
ディレクトリモジュール１１５は、プロパティモジュール１１６と同様、データ管理システム１（リソースマネージャ１１）が、内部の管理のために用いる。データ管理システム１は、ディレクトリを、その下に存在するディレクトリ名あるいはデータ名をキーとし、それらのプロパティをアクセスするのに必要なデータ操作モジュールの組み合わせ方の情報を値にして、その対応関係として管理している。本実施形態では、その対応関係は、Ｋｅｙ−Ｖａｌｕｅモジュール１１４の提供する連想記憶機能の上に管理する。そして、ディレクトリモジュール１１５を使って、例えば以下のようなディレクトリの操作を提供する。
（１）ＬＯＯＫＵＰ：指定した名前のデータのプロパティデータを探索する  （２）ＭＫＤＩＲ：新しいディレクトリを子供として追加する
（３）ＭＫＤＡＴＡ：新しいデータを子供として追加する
（４）ＲＭＤＩＲ：ディレクトリの削除する
（５）ＲＭＤＡＴＡ：データの削除する
図１７に、ディレクトリモジュール１１５がその下に存在するディレクトリ名あるいはデータ名と、それらのプロパティをアクセスするのに必要なデータ操作モジュールの組み合わせ方の情報の組を、Ｋｅｙ−Ｖａｌｕｅモジュール１１４を使ってＸＭＬドキュメントとして管理する場合のＸＭＬドキュメントの例を示す。図１７は、図１に示す「ｄｉｒ２」というディレクトリの実体の例である。図１７において、＜ｋｅｙ＞エレメントは子供に当たるディレクトリあるいはデータの名前を示しており、＜ｖａｌｕｅ＞エレメントはそれらのプロパティのデータをアクセスするための「データ操作モジュールの組み合わせ方」の情報を示している。ここでは、データ「ｄａｔａ１」と「ｄａｔａ２」２つのデータを子供として管理している。
【００７８】
アプリケーションプログラム２が「ｄａｔａ１」のデータのアクセスを要求してきた場合、リソースマネージャ１１は、まず、図１７に示すディレクトリ「ｄｉｒ２」の実体から、＜ｋｅｙ＞が「ｄａｔａ１」であるエントリの＜ｖａｌｕｅ＞を検索し、そこに書かれている記述をもとに、「ｄａｔａ１」のプロパティのデータをアクセスするためのデータ操作モジュールを選択して組み合わせる。そうすると、図１４に示したような情報を管理するプロパティモジュール１１６が作られるので、それを名前管理表２２に記録するとともに、プロパティのデータの中から「ｍｏｄｕｌｅ」属性の値を取り出し、この情報を使って「ｄａｔａ１」の実体に当たるＸＭＬドキュメントのデータをアクセスするために必要なデータ操作モジュールを選択して組み合わせ、その結果作成されたＸＭＬモジュール１１３のポインタをアプリケーションプログラム２に渡す。
【００７９】
ディレクトリモジュール１１５を使ってデータをアクセスする場合、通常、図１８に示すように、ディレクトリモジュール１１５とＫｅｙ−Ｖａｌｕｅモジュール１１４とＸＭＬモジュール１１３とファイルシステムモジュール１１２を組み合わせて用いる。
【００８０】
このときの「データ操作モジュールの組み合わせ方」は例えば図１９のように記述する。ここでは、ディレクトリモジュールを示す＜ｄｉｒｍ＞エレメントの下に、Ｋｅｙ−Ｖａｌｕｅモジュールの情報を持ち、その下にＸＭＬモジュールの情報を持ち、さらにその下にファイルシステムモジュールの情報を持っている。
【００８１】
以上の説明にも出てきたように、リソースマネージャ１１は、プロパティやディレクトリのデータに記録された記述をもとに、それらの指し示すデータをアクセスするのに必要なデータ操作モジュールを選択して組み合わせる。この動作を図２０の例を使って説明する。なお、ここでは、図１や図１４などを具体例として使って説明する。
【００８２】
図２０では、アプリケーションプログラム２が「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１」のデータをオープンすることを、データ管理システム１のリソースマネージャ１１に指示した場合の、データ管理システム１の内部の動作を示している。以下、図中の番号に沿って処理の流れを説明する。
【００８３】
（１）アプリケーションプログラム２がデータ管理システム１に「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１」のオープンを指示する。この指示はリソースマネージャ１１が受ける。
【００８４】
ここでは、「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１」のプロパティは既にアクセス可能な状態でリソースマネージャ１１が名前管理表２２に登録して管理しているものとする。まだ「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１」のプロパティがアクセス可能でなければ、ディレクトリ「ｄｉｒ２」内の情報を使って必要なデータ操作モジュールを組み合わせてアクセス可能な状態にし、名前管理表２２にも登録する。
【００８５】
上記指示を受けたリソースマネージャ１１は、「ｄａｔａ１」のプロパティから属性名「ｍｏｄｕｌｅ」の値を取り出す。
【００８６】
ここでは、その値は、図１４に示すように、
0004167359.tif 000002
である。
【００８７】
（２）リソースマネージャ１１は、次に、データ操作モジュール管理表２１を参照して、＜ｘｍｌｍ＞に対応するデータ操作モジュールマネージャを調べる。この場合、ＸＭＬモジュールマネージャ１３を該当するものとして選択する。
そこで、ＸＭＬモジュールマネージャ１３に、
0004167359.tif 000003
を使ってＸＭＬモジュール１１３を作成することをＯＰＥＮ命令で指示する。
【００８８】
（３）ＯＰＥＮで新しくＸＭＬモジュール１１３を作成するように指示されたＸＭＬモジュールマネージャ１３は、まず、自分の使用するバイナリデータをアクセスするのに必要なデータ操作モジュールの作成を、ＯＰＥＮ＿ＭＯＤＵＬＥでリソースマネージャ１１に依頼する。
このとき、作成してほしいデータ操作モジュールの情報である、
0004167359.tif 000004
を一緒に渡す。
【００８９】
（４）リソースマネージャ１１は、ＯＰＥＮ＿ＭＯＤＵＬＥの引数の最上位のエレメントである＜ｆｓｍ＞に対応するデータ操作モジュールマネージャを、データ操作モジュール管理表２１を使って調べる。ここでは、ファイルシステムモジュールマネージャ１２であることがわかるのでこれを選択する。
そこで、ファイルシステムモジュールマネージャ１２に、
0004167359.tif 000005
を使ってファイルシステムモジュール１１２を作成することをＯＰＥＮ命令で指示する。
【００９０】
（５）ファイルシステムモジュールマネージャ１２は、ＯＰＥＮの引数に渡されてきたファイルに関する情報から、ファイル名がｆ３６１７であることを知り、そのファイルをオープンすることをファイルシステム３に指示する。
【００９１】
（６）ファイルシステム３は、指示されたｆ３６１７をオープンして、そのハンドルを呼び出しもとのファイルシステムモジュールマネージャ１２に返す。
【００９２】
（７）ファイルシステムモジュールマネージャ１２は、ファイルシステム３中のファイルｆ３６１７のハンドルを使うファイルシステムモジュール１１２を作成する。ここでは、その作成されたファイルシステムモジュールをαと呼ぶ。
【００９３】
（８）ファイルシステムモジュールマネージャ１２は、作成したファイルシステムモジュールαのハンドルを、呼び出し元のリソースマネージャ１１に返す。
【００９４】
（９）リソースマネージャ１１は、ファイルシステムモジュールαのハンドルを、ＯＰＥＮ＿ＭＯＤＵＬＥの呼び出し元であるＸＭＬモジュールマネージャ１１３に返す。
【００９５】
（１０）ＸＭＬモジュールマネージャ１３は、ファイルシステムモジュールαで管理するバイナリデータの上に、ＸＭＬドキュメントの構造を実現するＸＭＬモジュール１１３を作成する。ここでは、その作成されたＸＭＬモジュールをβと呼ぶ。
【００９６】
（１１）ＸＭＬモジュールマネージャ１３は、ＯＰＥＮの呼び出し元のリソースマネージャ１１に、ＸＭＬモジュールβのハンドルを返す。
【００９７】
（１２）リソースマネージャ１１は、ＸＭＬモジュールβのハンドルを、ＯＰＥＮの呼び出し元のアプリケーションプログラム２に返す。
【００９８】
（１３）アプリケーションプログラム２は、以降、ＸＭＬモジュールβにＸＭＬドキュメントの操作を指示しながら処理を行う。
【００９９】
さて、これまでは、あるデータをアクセスするためのデータ操作モジュールの組み合わせ方が、プロパティやディレクトリに書かれている場合の動作の説明をしてきた。しかし、最初にデータを作る場合には、何らかの方法でデータ操作モジュールの組み合わせ方を決定しなければならない。
【０１００】
以下では、このような場合に行うべき手順の一例として、ルールを使って、作成したいデータのカテゴリから、それに必要なデータ操作モジュールの組み合わせ方を決定して行く手順について説明する。
【０１０１】
ここで、データのカテゴリとは、データの種類を示す名前で、本実施形態には次のカテゴリ名があるものとする。
＜ｐｒｏｐｅｒｔｙ／＞          …プロパティのカテゴリ名
＜ｄｉｒｅｃｔｏｒｙ／＞        …ディレクトリのカテゴリ名
＜ａｓｓｏｃｉａｔｉｏｎ／＞    …連想記憶のカテゴリ名
＜ｄｏｃｕｍｅｎｔ／＞          …ＸＭＬドキュメントのカテゴリ名
＜ｂｉｎａｒｙ／＞              …バイナリデータのカテゴリ名
＜ｆｉｌｅ／＞                  …ファイルのカテゴリ名
カテゴリと、実際のそのカテゴリのデータを操作できるデータ操作モジュールとの対応は、ルールとして管理している。図２１に、このようなルールの例を示す。図２１に例示するように、ルールは、どのカテゴリのデータは、どのデータ操作モジュールで実現できるかを記述している。＜ｒｕｌｅ＞で始まるルールの中には、＜ｃａｔｅｇｏｒｙ＞で始まるカテゴリ記述部と、＜ｅｘｐａｎｄ＞で始まるデータ操作モジュールの記述部とがある。
【０１０２】
例えば、図２１の例では、＜ｐｒｏｐｅｒｔｙ／＞というプロパティカテゴリのデータを操作するためには、＜ｐｒｏｐｍ／＞で示すプロパティモジュール（１１６）を使うというのが第１のルールである。以下、同様に、＜ｄｉｒｅｃｔｏｒｙ／＞というディレクトリカテゴリのデータなら＜ｄｉｒｍ／＞で示されるディレクトリモジュール（１１５）を、＜ｄｏｃｕｍｅｎｔ／＞というＸＭＬドキュメントカテゴリのデータなら＜ｘｍｌｍ／＞で示されるＸＭＬモジュール（１１３）を、という具合に、すべてのカテゴリに対して、少なくとも１つのルールを管理している。
【０１０３】
このようにルールを使ってカテゴリとデータ操作モジュールとの対応を決める方式を用いることによって、ルールを変えれば、同じカテゴリのデータを作るときでも、使うデータ操作モジュールを変えることができる。
【０１０４】
なお、カテゴリが＜ｆｉｌｅ／＞であるルールは、ファイルシステム３に関するパラメタを記述するために用いる。図２１の例では、＜ｆｉｌｅ／＞というカテゴリに対応するルールのデータ操作モジュール記述部には＜ｆｉｌｅ／＞と記述しており、特別な情報は持っていない。
【０１０５】
また、例えば、ファイルシステム３が複数のパーティションを持つ場合、図２２のように＜ｆｉｌｅ／＞カテゴリに対応する＜ｆｉｌｅ／＞の下に＜ｐａｒｔｉｔｉｏｎ／＞というエレメントを持たせ、その値が１ならばファイルを１番パーティションに作成する、というようにすることができる。ファイルシステムモジュール１１２が＜ｆｉｌｅ／＞カテゴリのデータすなわちファイルを作成しようとしたときには、このルールがあれば、ファイルを１番パーティションに作成する。もし、このルールが無ければ、ファイルシステム３は、デフォルトのパーティションにファイルを作成することになる。
【０１０６】
次に、図２３の例に沿って、本実施形態のデータ管理システムが新しいデータを作成する手順を説明する。なお、ここでは、図２１のようなルールが与えられていると仮定する。実際にどのようにルールを与えるかに関しては、後で説明する。
【０１０７】
図２３の例は、アプリケーションプログラム２が、「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ３」という名前でＸＭＬドキュメント型のデータの本体を作成することを、ＣＲＥＡＴＥ命令でデータ管理システム１に指示した場合の動作例である。以下、図２３の番号順に処理手順を説明する。
【０１０８】
（１）アプリケーションプログラム２が「／ｄｉｒ１／ｄｉｒ３／ｄａｔａ３」という名前で＜ｄｏｃｕｍｅｎｔ／＞カテゴリのデータを作成することを、ＣＲＥＡＴＥによってデータ管理システム１に指示する。この指示はリソースマネージャ１１が受け付ける。
【０１０９】
ここでは、「／ｄｉｒ１／ｄｉｒ３／ｄａｔａ３」のプロパティは既にアクセス可能な状態でリソースマネージャ１１が名前管理表２２に登録して管理しているものとする。まだ「／ｄｉｒ１／ｄｉｒ３／ｄａｔａ３」のプロパティがアクセス可能でなければ、ディレクトリ「ｄｉｒ３」内の情報を使って必要なデータ操作モジュールを組み合わせてアクセス可能な状態にし、名前管理表２２にも登録する。
【０１１０】
（２）上記指示を受けたリソースマネージャ１１は、＜ｄｏｃｕｍｅｎｔ／＞というカテゴリ名からルールを検索し、それを実現するのはＸＭＬモジュール１１３であることを知る。そこで、ＸＭＬモジュールマネージャ１３に対して、ＣＲＥＡＴＥ命令で新しくデータの実体を作成することを指示する。
【０１１１】
（３）ＸＭＬモジュールマネージャ１３は、自分が使うバイナリデータが必要なので、リソースマネージャ１１に＜ｂｉｎａｒｙ／＞カテゴリのデータの作成を、ＣＲＥＡＴＥ＿ＭＯＤＵＬＥ命令で依頼する。
【０１１２】
（４）リソースマネージャ１１は、＜ｂｉｎａｒｙ／＞カテゴリに対応するルールを検索し、それを実現するのはファイルシステムモジュールであることを知る。そこで、ファイルシステムモジュールマネージャ１２に対して、ＣＲＥＡＴＥ命令で新しくデータの実体を作成することを指示する。
【０１１３】
（５）ファイルシステムモジュール１１２は、自分が使うファイルシステム３にファイルの作成を依頼するための情報が必要なので、リソースマネージャ１１に＜ｆｉｌｅ／＞カテゴリのデータに関する情報の検索を、ＣＲＥＡＴＥ＿ＭＯＤＵＬＥ命令で依頼する。
【０１１４】
（６）リソースマネージャ１１は、＜ｆｉｌｅ／＞カテゴリに対応するルールを検索し、その＜ｅｘｐａｎｄ／＞部の値（ここでは＜ｆｉｌｅ／＞）を呼び出し元のファイルシステムモジュールマネージャ１２に返す。ここで、カテゴリが＜ｆｉｌｅ／＞の場合の動作は、先に述べた＜ｄｏｃｕｍｅｎｔ／＞や＜ｂｉｎａｒｙ／＞の場合の動作とは異なるものとなっている。
【０１１５】
（７）ファイルシステムモジュールマネージャ１２は、リソースマネージャ１１からもらった情報を使って、ファイルシステム３に対して新しいファイルの作成を指示する。
【０１１６】
（８）ファイルシステム３は、新しいファイルを作成し、その名前等の情報をファイルシステムモジュールマネージャ１２に返す。
【０１１７】
（９）ファイルシステムモジュールマネージャ１２は、以降このデータをオープンするために必要となる、新しく作成したファイルの情報を、リソースマネージャ１１に返す。
【０１１８】
（１０）リソースマネージャ１１は、ファイルシステムモジュールマネージャ１２から返ってきた情報に、それを扱うデータ操作モジュールであるファイルシステムモジュールを識別するための＜ｆｓｍ／＞というエレメントを追加し、それをＣＲＥＡＴＥ＿ＭＯＤＵＬＥ命令を出したＸＭＬモジュールマネージャ１３に返す。
【０１１９】
（１１）ＸＭＬモジュールマネージャ１３は、リソースマネージャ１１から、自分が使うバイナリデータをアクセスするのに必要なデータ操作モジュールの記述をもらったので、それを、ＣＲＥＡＴＥの結果として返す。
【０１２０】
（１２）リソースマネージャ１１は、ＸＭＬモジュールマネージャ１３から返ってきた情報に、それを扱うデータ操作モジュールであるＸＭＬモジュールを識別するための＜ｘｍｌｍ／＞というエレメントを追加する。それが「／ｄｉｒ１／ｄｉｒ３／ｄａｔａ１」のデータの実体をアクセスするためのデータ操作モジュールの組み合わせ方を記述しているので、プロパティのｍｏｄｕｌｅ属性の値として記録する。これで処理は完了するので、アプリケーションプログラム２に戻る。
【０１２１】
これまでの手順で、新しく作成するデータをアクセスするためのデータ操作モジュールの組み合わせ方の情報がプロパティに記録される。しかし、この段階では、まだ実際にデータをアクセスできないので、通常は次に、先に述べたデータのオープン処理を行って、実際のデータのアクセスを行う。
【０１２２】
なお、上記では、データ管理システム１の提供するＣＲＥＡＴＥ操作によってデータをアクセスするためのデータ操作モジュールの組み合わせ方を決定し、その決定結果に従って、同じくデータ管理システムの提供するＯＰＥＮ操作によって実際にデータ操作モジュールを組み合わせてアクセス可能な状態にする場合を例にとって説明してきたが、もちろん、ＣＲＥＡＴＥ操作とＯＰＥＮ操作を同時に処理してしまうように実施することも容易に可能である。
【０１２３】
ところで、データのカテゴリからデータ操作モジュールを検索するためのルールには、図２４の例のようにコンテクストを記述することができる。
【０１２４】
図２４で＜ｃｏｎｔｅｘｔ／＞で囲まれているのがコンテクストである。コンテクストには、＜ｄｏｃｕｍｅｎｔ／＞のようなカテゴリ名や＜ｘｍｌｍ／＞のようなデータ操作モジュール名を、＜ａｎｄ／＞、＜ｏｒ／＞、＜ｎｏｔ／＞という論理演算オペレータを使って組み合わせた論理式を指定できる。
【０１２５】
コンテクストを持つルールは、そのカテゴリが同じだけでなく、そのカテゴリに対応するデータ操作モジュールが使われる位置（例えばデータ操作モジュールの組み合わせの階層における位置もしくは順番）がコンテクストで指定された正しい位置である場合に、＜ｅｘｐａｎｄ／＞部にあるデータ操作モジュールを使うことを示している。例えば、図２４の例では、＜ｄｏｃｕｍｅｎｔ／＞カテゴリの場合、上位に＜ｄｔｄｍ／＞で示されるデータ操作モジュールがない場合にのみ、＜ｄｔｄｍ／＞で示されるデータ操作モジュールを使うことを示している。
【０１２６】
ここで、＜ｄｔｄｍ／＞で示されるデータ操作モジュールであるＤＴＤモジュール１１７は、ＸＭＬドキュメントに対して、ＤＴＤ（ＸＭＬドキュメントの構造の定義）で与えられた構造を満たしているかどうか監視するデータ操作モジュールである。＜ｄｔｄｍ／＞が使う下位のモジュールはＸＭＬドキュメントのカテゴリのデータを操作できるものであり、かつ、＜ｄｔｄｍ／＞自身はそのユーザからはＸＭＬドキュメントのカテゴリのデータを操作するデータ操作モジュールとして振舞う。
【０１２７】
図２４のルールと図２１のルールとをこの順番でルールを検索するように組み合わせると、図２５に示すように、ＸＭＬドキュメントのカテゴリのデータをアクセスする場合は、ファイルシステムモジュール１１２の上にＸＭＬモジュール１１３が積まれ、その上にＤＴＤモジュール１１７が積まれるように、データ操作モジュールが組み合わせられる。
【０１２８】
なお、ＤＴＤモジュール１１７が使用される場合には、ＤＴＤモジュールマネージャが用意される。
【０１２９】
これまでの説明では、データのカテゴリからデータ操作モジュールを検索するためのルールは予め与えられているとしていた。実際には、このようなルールをディレクトリやデータのプロパティに書いておき、図２６に示すような手順で、与えられたカテゴリとコンテクストにマッチするルールを検索するように実施することで、柔軟なルールの適用が可能になる。
【０１３０】
つまり、あるデータの実体を作成するときには、そのデータからルートに向けてディレクトリをたどって行き（Ｓ１１，Ｓ１３）、その途中で一番最初に見つかった、カテゴリとコンテクストの条件を満たすルールを使って（Ｓ１２，Ｓ１４）、データ操作モジュールを決定する。
【０１３１】
このようにすると、例えば、図２７（ａ）に示すように「ｄｉｒ１」の下に「ｄｉｒ２」と「ｄｉｒ３」がある場合において、図２７（ｂ）に示すように「ｄｉｒ１」にはパーティション０にファイルを作成するような＜ｆｉｌｅ／＞のルールを持たせ、図２７（ｃ）に示すように「ｄｉｒ２」にはパーティション１にファイルを作成するような＜ｆｉｌｅ／＞のルールを持たせれば、「ｄｉｒ２」より下に作成するファイルはデフォルトでパーティション１に作成され、その他はデフォルトでパーティション０に作成されるように制御することができる。他のカテゴリのデータに関しても同様で、同じＸＭＬドキュメントでも、ディレクトリによって異なるデータ操作モジュールを使用するように制御できる。
【０１３２】
例えば、図２８（ａ）に示すように、ディレクトリｄｉｒ２の下にはｄａｔａ１という名前のデータがあり、ディレクトリｄｉｒ３の下にはｄａｔａ２という名前のデータがあるとする。このとき、ｄｉｒ１には図２８（ｂ）に示すようなルールを持たせ、ｄｉｒ２には図２８（ｃ）に示すようなルールを持たせる。ここで、＜ｘｍｌｓ／＞はシーケンシャルＸＭＬモジュール、＜ｘｍｌｒ／＞はランダムＸＭＬモジュールの名前であるとする。シーケンシャルＸＭＬモジュールとランダムＸＭＬモジュールは、どちらも、ファイルシステムモジュールの提供するバイナリデータ上にＸＭＬドキュメントの木構造データを展開して記憶し、それへの操作を提供するデータ操作モジュールであるとする。これらデータ操作モジュールが、それを使う例えばアプリケーションプログラムに対して提供する操作機能はＸＭＬモジュールと同じである。しかし、シーケンシャルＸＭＬモジュールはＸＭＬドキュメントのシーケンシャルなアクセスが高速になる内部データ構造を用いているのに対して、ランダムＸＭＬモジュールはＸＭＬドキュメントのランダムアクセスが高速になるデータ構造を用いているとする。
【０１３３】
図２８（ｂ）および図２８（ｃ）のようなルールを持たせることで、ｄｉｒ２の下にＸＭＬドキュメントを作成する場合には、ランダムＸＭＬモジュールを使い、ｄｉｒ１の下（ｄｉｒ３の下も含む。ただし、ｄｉｒ２の下は除外される。）にＸＭＬドキュメントを作成する場合には、シーケンシャルＸＭＬモジュールを使うように制御することができる。
【０１３４】
図２８において、ｄａｔａ１およびｄａｔａ２はどちらもＸＭＬドキュメントとして作成されたデータであるとする。このとき、ｄｉｒ２の下にあるｄａｔａ１のモジュール階層は、例えば図２８（ｄ）のようになる。また、ｄｉｒ３の下にあるｄａｔａ２のモジュール階層は、例えば図２８（ｅ）のようになる。
【０１３５】
図２８の例のように、同じ階層において２以上の異なるデータ操作モジュール（図２８の例では、シーケンシャルＸＭＬモジュール（１１３２）とランダムＸＭＬモジュール（１１３１））を設け、それらのうちから使用するものを選択できるように実施できる。選択ルールがディレクトリによって異なるように設定したり、また別の方式としては、ルールの＜ｃｏｎｔｅｘｔ／＞部で条件によって異なるデータ操作モジュールが選択されるようにしてもよい。
【０１３６】
なお、ルートディレクトリにはすべてのカテゴリにマッチするルールをデフォルトとして持たせておくのが望ましい。それがない場合には、必要なデータ操作モジュールが見つけられなくなる場合があるからである。
【０１３７】
これまでの例では、データのアクセスに必要なデータ操作モジュールの組み合わせは、単純に上下に積み上げるだけであった。しかし、本実施形態のデータ管理システムでは、複数のデータ操作モジュールを組み合わせて使用するようなデータ操作モジュールも使用できる。
【０１３８】
図２９は、そのようなデータ操作モジュールの例である。
【０１３９】
ここでは、＜ａｓｓｏｃｉａｔｉｏｎ／＞カテゴリのデータ操作モジュールで、Ｋｅｙ−Ｖａｌｕｅモジュールを置き換えて使用できる拡張Ｋｅｙ−Ｖａｌｕｅモジュールの例を示す。拡張Ｋｅｙ−Ｖａｌｕｅモジュール１１８は、ＸＭＬドキュメントとしてキーと値の対応を持つのはＫｅｙ−Ｖａｌｕｅモジュールと同であるが、別にインデックスをバイナリデータの形で持っており、それを使った高速な検索が可能である。
【０１４０】
このような拡張Ｋｅｙ−Ｖａｌｕｅモジュール１１８は例えば図３０のような形式でデータ操作モジュールの組み合わせ方を記述する。ここで、＜ｋｖａ／＞は、拡張Ｋｅｙ−Ｖａｌｕｅモジュール１１８を示す名前である。これまでの例では、この下にはそのデータ操作モジュールが使用する下位のデータ操作モジュールの記述が来ていたが、ここでは、＜ｋｖａｉｎｆｏ／＞と呼ぶ＜ｋｖａ／＞の独自の情報を持っている。その中には＜ｄａｔａ／＞と＜ｉｎｄｅｘ／＞の２つのエレメントがあり、それぞれに、キーと値を記録するＸＭＬドキュメントと、インデックスを記録するバイナリデータをアクセスするための、データ操作モジュールの組み合わせ方を記録している。
【０１４１】
なお、拡張Ｋｅｙ−Ｖａｌｕｅモジュール１１８が使用される場合には、拡張Ｋｅｙ−Ｖａｌｕｅモジュールマネージャが用意される。
【０１４２】
また、本実施形態では、データストレージシステムとして一般のファイルシステムを用いて説明したが、ＸＭＬデータ等の他のデータモデルでデータを出力するデータストレージシステムに、本発明を適用することも可能である。データストレージシステムの扱うデータモデルをＸＭＬデータとした場合には、例えば、図４においては、ファイルモジュールとＸＭＬモジュールの階層を省き、必要に応じて、データストレージシステムの扱うＸＭＬモジュールを本データ管理システムに適用させるための新たなＸＭＬモジュールを用意すればよい。
【０１４３】
また、本実施形態では、データ管理システム１内で、どのデータ操作モジュールを選択しどのような順番で用いるかを特定したが、アプリケーションプログラム２がデータ操作モジュールの組み合わせ方を指示するようにしてもよいし、またそれらを併用してもよい。
【０１４４】
アプリケーションプログラム２がデータ操作モジュールの組み合わせ方を指示する場合、例えば、データ管理システム１からアプリケーションプログラム２に、どのデータ操作モジュールを選択しどのような順番で用いてデータに操作を加えるべきかを特定できるような情報（例えば、図１４の情報）を通知し、この情報をもとにアプリケーションプログラム２がデータ操作モジュールの組み合わせ方を特定してデータ管理システム１に通知するようにしてもよい。あるいは、アプリケーションプログラム２が独自に、どのデータ操作モジュールを選択しどのような順番で用いてデータに操作を加えるべきかを特定できるような情報（例えば、図１４の情報）を取得し、この情報をもとにアプリケーションプログラム２がデータ操作モジュールの組み合わせ方を特定してデータ管理システム１に通知するようにしてもよい。
【０１４５】
例えば、図２０の例においては、（１）でアプリケーションプログラム２がデータ管理システム１に「／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１」のオープンを、
ＯＰＥＮ（／ｄｉｒ１／ｄｉｒ２／ｄａｔａ１）
によって指示する代わりに、
0004167359.tif 000006
を指示することになる。
【０１４６】
なお、以上の各機能は、ソフトウェアとしても実現可能である。
【０１４７】
また、本実施形態は、コンピュータに所定の手段を実行させるための（あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるための）プログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。
【０１４８】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【０１４９】
【発明の効果】
本発明では、データを操作するためのそれぞれ操作内容の異なる複数のデータ操作モジュールを用意し、アプリケーションプログラムから所望のデータに対する処理の要求を受けた場合に、その複数のデータ操作モジュールの中から、該データをアプリケーションプログラムが行いたい処理に適合したデータモデルに従わせるために該データに対して操作を行うべきデータ操作モジュールを選択し、データに操作を加えて提供するようにしたので、柔軟性と独立性と拡張性に優れたデータ管理システム及びデータ管理方法を実現することができる。
【図面の簡単な説明】
【図１】データの管理の一例を示す図
【図２】プロパティとデータの実体の関係の一例を示す図
【図３】本発明の一実施形態に係るデータ管理システムの一般的な構成例を示す図
【図４】同実施形態に係るデータ管理システムのより具体的な構成例を示す図
【図５】データ操作モジュール管理表の一例を示す図
【図６】名前管理表の一例を示す図
【図７】ファイルモジュールの使い方の一例を示す図
【図８】ファイルモジュールの使い方の記述の一例を示す図
【図９】ＸＭＬモジュールの使い方の一例を示す図
【図１０】ＸＭＬモジュールの使い方の記述の一例を示す図
【図１１】Ｋｅｙ−Ｖａｌｕｅモジュールがキーと値の組の集合をＸＭＬドキュメントとして管理する管理形式の一例を示す図
【図１２】Ｋｅｙ−Ｖａｌｕｅモジュールの使い方の一例を示す図
【図１３】Ｋｅｙ−Ｖａｌｕｅモジュールの使い方の記述の一例を示す図
【図１４】Ｋｅｙ−Ｖａｌｕｅモジュールによるプロパティの管理の一例を示す図
【図１５】プロパティモジュールの使い方の一例を示す図
【図１６】プロパティモジュールの使い方の記述の一例を示す図
【図１７】Ｋｅｙ−Ｖａｌｕｅモジュールによるディレクトリの管理の一例を示す図
【図１８】ディレクトリジュールの使い方の一例を示す図
【図１９】ディレクトリジュールの使い方の記述の一例を示す図
【図２０】データのオープン処理の流れの一例を示す図
【図２１】カテゴリとデータ操作モジュールとの対応を含むルールの一例を示す図
【図２２】＜ｆｉｌｅ／＞に対するルールの一例を示す図
【図２３】データの作成処理の流れの一例を示す図
【図２４】コンテクストを持つルールの一例を示す図
【図２５】コンテクストを持つルールの使用例を示す図
【図２６】ルールの探索手順の一例を示すフローチャート
【図２７】ルールの格納例を示す図
【図２８】同じＸＭＬドキュメントでもディレクトリによって異なるデータ操作モジュールを使用するように制御可能とした例を示す図
【図２９】複雑なデータ操作モジュールの使い方の一例を示す図
【図３０】複雑なデータ操作モジュールの使い方の記述の一例を示す図
【符号の説明】
１…データ管理システム
１１…リソースマネージャ
２１…データ操作モジュール管理表
２２…名前管理表
１２…ファイルシステムモジュールマネージャ
１３…ＫＭＬモジュールマネージャ
１４…Ｋｅｙ−Ｖａｌｕｅモジュールマネージャ
１５…ディレクトリモジュールマネージャ
１６…プロパティモジュールマネージャ
１７…ＤＴＤモジュール
１８…拡張Ｋｅｙ−Ｖａｌｕｅモジュール
１１２…ファイルシステムモジュール
１１３…ＫＭＬモジュール
１１４…Ｋｅｙ−Ｖａｌｕｅモジュール
１１５…ディレクトリモジュール
１１６…プロパティモジュール
１２−１〜１２−ｎ…データ操作モジュールマネージャ
１１２−１〜１１２−ｎ…データ操作モジュール
２…アプリケーションプログラム
３…ファイルシステム
３１…ハードディスク
【図１】
0004167359.tif 000007
【図２】
0004167359.tif 000008
【図３】
0004167359.tif 000009
【図４】
0004167359.tif 000010
【図５】
0004167359.tif 000011
【図６】
0004167359.tif 000012
【図７】
0004167359.tif 000013
【図８】
0004167359.tif 000014
【図９】
0004167359.tif 000015
【図１０】
0004167359.tif 000016
【図１１】
0004167359.tif 000017
【図１２】
0004167359.tif 000018
【図１３】
0004167359.tif 000019
【図１４】
0004167359.tif 000020
【図１５】
0004167359.tif 000021
【図１６】
0004167359.tif 000022
【図１７】
0004167359.tif 000023
【図１８】
0004167359.tif 000024
【図１９】
0004167359.tif 000025
【図２０】
0004167359.tif 000026
【図２１】
0004167359.tif 000027
【図２２】
0004167359.tif 000028
【図２３】
0004167359.tif 000029
【図２４】
0004167359.tif 000030
【図２５】
0004167359.tif 000031
【図２６】
0004167359.tif 000032
【図２７】
0004167359.tif 000033
【図２８】
0004167359.tif 000034
【図２９】
0004167359.tif 000035
【図３０】
0004167359.tif 000036