(57)【要約】【課題】データベースに蓄積されているデータのうちの特定のデータ要素への高速アクセスを実現する。【解決手段】オフセット生成部１３が、アプリケーション２から入力された構造化データ３を解析し、構造化データ３における特定のデータ要素のオフセット位置を算出して、当該データ要素のオフセット位置を示すオフセット情報を生成し、記憶部１４は、構造化データ３にオフセット情報を含ませて、オフセット付構造化データ４として記憶し、制御部１１の入力部１１０１が、アプリケーション２から特定のレコードの取得要求を入力した場合に、制御部１１の出力部１１０２が、取得要求のあったオフセット付構造化データ４を抽出し、抽出したオフセット付構造化データ４をアプリケーション２に出力し、オフセット付構造化データ４を取得したアプリケーション２では、オフセット情報に基づいて、特定のデータ要素に高速にアクセスすることができる。【選択図】図１
2008140310.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ要素が含まれるレコードを格納するデータベース装置であって、
前記複数のデータ要素のうちの特定のデータ要素のオフセット位置を示すオフセット情報を前記レコードとともに記憶する記憶部と、
前記レコードに対する出力要求があった場合に、前記レコードとともに前記オフセット情報を前記記憶部から抽出し、前記レコードとともに前記オフセット情報を前記出力要求に対する出力先に出力する出力部とを有することを特徴とするデータベース装置。
【請求項２】
前記記憶部は、
前記レコードに前記オフセット情報を含ませて記憶し、
前記出力部は、
前記オフセット情報が含まれているレコードを抽出し、抽出したレコードを前記出力要求に対する出力先に出力することを特徴とする請求項１に記載のデータベース装置。
【請求項３】
前記データベース装置は、更に、
前記レコードを解析し、前記レコードにおける前記特定のデータ要素のオフセット位置を算出して、前記オフセット情報を生成するオフセット生成部を有し、
前記記憶部は、
前記オフセット生成部により生成された前記オフセット情報を前記レコードとともに記憶することを特徴とする請求項１に記載のデータベース装置。
【請求項４】
前記記憶部は、
複数のレコードを記憶しており、
前記オフセット生成部は、
前記オフセット情報の生成の際に、前記複数のレコードの各々を解析し、各レコードにおける前記特定のデータ要素のオフセット位置を算出して、各レコードについてオフセット情報を生成し、
前記記憶部は、
前記オフセット生成部により生成された各レコードのオフセット情報を対応するレコードとともに記憶することを特徴とする請求項３に記載のデータベース装置。
【請求項５】
前記データベース装置は、更に、
特定のデータ要素に対するオフセット情報の生成を要求するオフセット生成要求を入力する入力部を有し、
前記オフセット生成部は、
前記オフセット生成要求において要求された特定のデータ要素のオフセット位置を算出して、前記特定のデータ要素に対するオフセット情報を生成することを特徴とする請求項３に記載のデータベース装置。
【請求項６】
前記オフセット生成部は、
前記オフセット情報が生成されているデータ要素を示すオフセット対象データ要素情報を生成し、
前記出力部は、
前記オフセット生成部により生成された前記オフセット対象データ要素情報を出力することを特徴とする請求項３に記載のデータベース装置。
【請求項７】
前記オフセット生成部は、
前記オフセット対象データ要素情報からいずれかのデータ要素を削除して、当該データ要素のオフセット情報を無効とすることを特徴とする請求項５に記載のデータベース装置。
【請求項８】
前記出力部は、
前記レコードに対する出力要求があった際に前記オフセット生成部による特定のデータ要素についてのオフセット情報の生成が完了していない場合に、前記オフセット生成部による前記特定のデータ要素についてのオフセット情報の生成の完了を待ち、生成が完了した前記オフセット情報とともに前記レコードを前記出力要求に対する出力先に出力することを特徴とする請求項３に記載のデータベース装置。
【請求項９】
前記出力部は、
前記レコードに対する出力要求があった際に前記オフセット生成部による特定のデータ要素についてのオフセット情報の生成が完了していない場合に、前記オフセット生成部による前記特定のデータ要素についてのオフセット情報の生成の完了を待たずに、前記記憶部に記憶済みのオフセット情報のみを前記レコードを前記出力要求とともに前記出力要求に対する出力先に出力することを特徴とする請求項３に記載のデータベース装置。
【請求項１０】
複数のデータ要素が含まれるレコードを出力するデータ出力方法であって、
前記レコードに対する出力要求があった場合に、コンピュータが所定の記憶装置から、前記複数のデータ要素のうちの特定のデータ要素のオフセット位置を示すオフセット情報を前記レコードとともに抽出し、前記レコードとともに前記オフセット情報を前記出力要求に対する出力先に出力することを特徴とするデータ出力方法。
【請求項１１】
複数のデータ要素が含まれるレコードを出力するコンピュータに、
前記レコードに対する出力要求があった場合に、所定の記憶装置から、前記複数のデータ要素のうちの特定のデータ要素のオフセット位置を示すオフセット情報を前記レコードとともに抽出し、前記レコードとともに前記オフセット情報を前記出力要求に対する出力先に出力する処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに蓄積されているデータのうちの特定のデータ要素へ高速にアクセスするための技術に関する。
【背景技術】
【０００２】
従来、データベースといえばテーブルによるデータ管理を基本としていたが、近年、ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）データベースと呼ばれる、より柔軟な形でデータ管理が可能なデータベースの利用が増加している。
ＸＭＬデータベースではデータベース構築後でもフィールドを追加できるなどの利点がある。ＸＭＬデータベースは検索結果をＸＭＬ形式、つまりテキストデータとして外部（アプリケーション）に提供するが、アプリケーションはＸＭＬ形式のデータをＷ３Ｃ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ  Ｃｏｎｓｏｒｔｉｕｍ）で標準化されたＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）と呼ばれるインターフェースでアクセスする。
そのため、アプリケーションではＸＭＬデータを木構造のデータ（ＤＯＭ木）に変換してＸＭＬデータベースから取得したデータを利用することになる。
ＸＭＬデータからＤＯＭ木への変換の手間を省くため、ＤＯＭ木をそのままデータベースに格納することもある（ＤＯＭデータベースと呼ぶ）。
【０００３】
ＤＯＭデータベースから取得したＤＯＭ木データからアプリケーションが必要とするデータ（ＤＯＭ木の構成要素の１つ）を取得するには、ＤＯＭ木のルートから順番にデータの探索を行う必要がある。
アプリケーションが使用するデータがＤＯＭ木のルートから遠い位置にある場合、探索時間が長くなってしまうという問題がある。
【０００４】
特許文献１に開示されている技術では、同一の構造をもった複数の部分木構造で表された情報において、部分木の特定のノードから別の部分木における同じ特定のノードに対するスキップ情報を部分木に付加することで、特定のパターンについて探索処理を省略し高速なアクセスを実現するための手法が開示されている。
【特許文献１】特開２００２−２５９４５１号公報  図２、図３
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、特許文献１で開示されている手法は、部分木間のデータアクセスを高速にするものであり、特定のノードまでの探索処理については従来と同様に時間のかかる場合がある。
また、アプリケーションから特定の条件に適合した部分木の提供を要求された場合、隣り合う部分木が条件に適合するとは限らないため、スキップ情報が無意味になってしまうことがある。
【０００６】
この発明は上記のような課題を解決することを主な目的としており、ＤＯＭ木データをアプリケーションに渡したときにアプリケーションがＤＯＭ木にある特定の要素へ高速にアクセス可能とすることを主な目的とする。
【課題を解決するための手段】
【０００７】
本発明に係るデータベース装置は、
複数のデータ要素が含まれるレコードを格納するデータベース装置であって、
前記複数のデータ要素のうちの特定のデータ要素のオフセット位置を示すオフセット情報を前記レコードとともに記憶する記憶部と、
前記レコードに対する出力要求があった場合に、前記レコードとともに前記オフセット情報を前記記憶部から抽出し、前記レコードとともに前記オフセット情報を前記出力要求に対する出力先に出力する出力部とを有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、レコードともにオフセット情報を出力するため、出力先においてオフセット情報を利用してレコード内の特定のデータ要素に高速にアクセスすることができる。
【発明を実施するための最良の形態】
【０００９】
実施の形態１．
図１は、この発明の実施の形態１に係るデータベース装置１の構成例を示すとともにデータベース装置１とアプリケーションプログラム２（以下、単にアプリケーションという）との関係を示す図である。
【００１０】
図１において、データベース装置１は、制御部１１、オフセット生成部１３、及び記憶部１４から構成される。
制御部１１は、外部からの要求を受け、オフセット生成部１３、記憶部１４を制御してデータベースの機能を実現する。
オフセット生成部１３は、制御部１１から渡されたデータからオフセット情報を生成し、生成したオフセット情報を記憶部１４に記録する。
記憶部１４は、各種データを記録する。
また、制御部１１は、入力部１１０１と出力部１１０２から構成される。
入力部１１０１は、アプリケーション２から構造化データ３を入力する。
出力部１１０２は、記憶部１４からオフセット付構造化データ４を抽出し、抽出したオフセット付構造化データ４をアプリケーション２に出力する。
【００１１】
構造化データ３は、データベース装置１に入力されるデータであり、オフセット付構造化データ４はデータベース装置１から出力されるデータである。
本発明の実施の形態１において、アプリケーション２はデータベース装置１と構造化データ３およびオフセット付構造化データ４を授受する。
本実施の形態では、アプリケーションとしてブラウザを想定し、ブラウザがデータベース装置１に対して検索（もしくは単純な全件取得）を要求し、取得したレコードの特定のフィールドを表示する場合を想定している。
なお、アプリケーション２とデータベース装置１は、同一コンピュータ内に存在していてもよいし、それぞれ別のコンピュータに存在し、有線又は無線通信により構造化データ３又はオフセット付構造化データ４を送受信する形態でもよい。
また、構造化データ３は、例えば、上述したＤＯＭ木データであり、オフセット付構造化データ４は、ＤＯＭデータにオフセット情報が付加されたものである。
【００１２】
ここで、各要素及び構造化データ３、オフセット付構造化データ４の詳細について説明する前に、本実施の形態に係るデータベース装置１の動作例を概説する。
制御部１１の入力部１１０１は、レコードたる構造化データ３をアプリケーション２から入力する。当該構造化データ３には、複数のデータ要素（以下、単に要素ともいう）が含まれる。
次に、オフセット生成部１３は、入力された構造化データ３を解析し、構造化データ３における特定のデータ要素（高速アクセスの対象とするデータ要素）のオフセット位置を算出して、当該データ要素のオフセット位置を示すオフセット情報を生成する。
そして、記憶部１４は、オフセット生成部１３により生成されたオフセット情報を構造化データ３とともに記憶する。具体的には、記憶部１４は、構造化データ３にオフセット情報を含ませて、オフセット付構造化データ４として記憶する。
そして、制御部１１の入力部１１０１が、アプリケーション２から特定のレコードの取得要求（出力要求）を入力した場合に、制御部１１の出力部１１０２は、取得要求のあったオフセット付構造化データ４を抽出し、抽出したオフセット付構造化データ４をアプリケーション２に出力することで、出力部１１０２は、レコードとともにオフセット情報をアプリケーション２に出力する。
オフセット付構造化データ４を取得したアプリケーション２では、オフセット情報に基づいて、特定のデータ要素に高速にアクセスすることができる。
【００１３】
次に、構造化データ３、オフセット付構造化データ４の具体例を説明する。
【００１４】
図２は、本発明の実施の形態１でデータベース装置１およびアプリケーション２が扱う構造化データ３の論理的な構造を表した図である。
構造化データ３の論理的構造Ｄ１はＤ２〜Ｄ１０の要素と、Ｄ１１〜Ｄ１５の値で構成される。要素Ｄ２〜Ｄ１０は親子関係を持ち、例えばＤ２はＤ３、Ｄ７、Ｄ１０と親子関係がある（Ｄ２が親、Ｄ３、Ｄ７、Ｄ１０が子）。また、要素Ｄ２〜Ｄ１０は兄弟関係を持ち、例えばＤ５とＤ６は兄弟関係を持つ。
【００１５】
図３は、本発明の実施の形態１における構造化データ３の物理的な構造（メモリに配置されたときの構造）を表した図である。
構造化データ３は要素Ｅ１１〜Ｅ９７で構成され、各要素は「要素名長」、「要素名」「親」、「子」、「兄弟」、「値長」、「値」のいずれかである。
また各要素の左上にある数値は要素Ｅ１１の先頭を０とした場合の各要素先頭と要素Ｅ１１のオフセットである。
【００１６】
次に、図２における要素Ｄ５、値Ｄ１１に対応する、図３における要素名長Ｅ４１、要素名４２、親４３、子４４、兄弟４５、値長４６、値４７を例に、論理的構造Ｄ１と構造化データ３の対応関係を説明する。
まず、要素名Ｅ４２は要素Ｄ５と同じであり、要素名長Ｅ４１は要素名Ｅ５２として使用する文字数を表す（１文字につき２Ｂｙｔｅとする）。
要素名Ｅ４２の文字数は３であるため、要素名長Ｅ４１は３となる。
次に、親Ｅ４３は、要素Ｄ５の親に相当する要素Ｄ４を指す。
構造化データ３においては、要素名長Ｅ３１の左上にあるオフセット（３６）となる。
要素Ｄ５の子に相当する要素はないため、子Ｅ４４は「なし」となる。
子が存在する要素の場合は、親の場合と同様に要素名長の左上にあるオフセットを記録する。
なお、子が複数存在する場合は先頭の子（図２において、より上方にある子）を記録する。
兄弟Ｅ４５は、要素Ｄ５と同じ親を持つ要素Ｄ６を指す。
よって兄弟Ｅ４５には８０を記録する。
値長Ｅ４６は値Ｅ４７の文字数を表す。
したがって値長Ｅ４６には３を記録する。
なお、値がない要素の場合は（例：要素Ｄ２）、値長に０を記録する。
【００１７】
以上のように構造化データ３を構成することで、論理構造Ｄ１の最上段にある要素Ｄ２から任意の要素、値にアクセス可能となる。
例えば、値Ｄ１２（要素Ｄ６「ＬＯＮ」の値）を得るためには、構造化データ３にて以下のように辿ればよい。
最初に、先頭の要素名長Ｅ１１を取得し、要素名Ｅ１２と「ＬＯＮ」を比較する。比較の結果一致しないと分かるため、次は子を対象に探索する。
子Ｅ１４の構造化データ３における配置（アドレス）は、構造化データ３における要素の並び順、および要素名長Ｅ１１から一意に求まる（ここでは構造化データ３の先頭から１６Ｂｙｔｅの箇所にあると分かる）。
要素名長Ｅ２１、Ｅ３１についても要素名長Ｅ１１と同様の手順を実施し、要素名長Ｅ４１まで到達する。ここで子Ｅ４４には「なし」が記録されているため、子ではなく兄弟を対象に探索を実施する。
要素名長Ｅ４１の兄弟である要素名長Ｅ５１に到達すると、要素名Ｅ５２が「ＬＯＮ」であるため、値Ｅ５７が目的の値とわかる。
値Ｅ５７を得るには、まず要素名長Ｅ５１と物理的構造Ｅ１における要素の並び順より値長Ｅ５６の構造化データ３における配置（アドレス）を得る。
次に、値長Ｅ５６の値（７）を取得し、値長Ｅ５６の２Ｂｙｔｅ先から１４Ｂｙｔｅ（７文字×２Ｂｙｔｅ）のデータが値Ｅ５７となる。
【００１８】
図４は、構造化データ３を入力された（登録、更新に相当する）データベース装置１がオフセット生成部１３を用いて生成し、記憶部１４に格納するオフセット付構造化データ４の物理的構造を表したものである。
オフセット付構造化データ４は構造化データ３の先頭にオフセット情報Ｆ１０を追加したものである。
オフセット付構造化データ４では、先頭にオフセット情報Ｆ１０が追加されている点を野除けば、構造化データ３と同様の内容となっている。
オフセット情報Ｆ１０は、オフセット付構造化データ４における要素名長Ｅ１１のアドレスを０とした場合の、特定の値長に対するオフセットであり、本実施の形態においてＦ１０のサイズは２ｂｙｔｅとする。
図４において、オフセット情報Ｆ１０は要素名が「ＮＢ」である要素の値長Ｅ７６を指している。
なお、本実施の形態において、オフセット情報Ｆ１０が値長Ｅ７６を指していることは、データベース装置１が記憶部１４に保持しておりアプリケーション２も予め知っているものとする。
【００１９】
以上で説明した図１、図２、図３、図４を参照しながら、本実施の形態に係るデータベース装置１の動作（データ出力方法）を説明する。
説明する動作は、アプリケーション２によるデータベース装置１に対するレコード（構造化データ３を１つのレコードとする）の登録（更新も含む）、および取得（検索も含む）である。
【００２０】
アプリケーション２によるデータベース装置１に対するレコード登録について、図５も参照しながら動作を説明する（レコードとは構造化データ３を意味する）。
図５は本発明の実施の形態１におけるデータベース装置１によるレコード登録の動作を表すフローチャートである。
【００２１】
まず、登録処理はアプリケーション２からデータベース装置１に対する構造化データ３の登録依頼から始まる（Ｓ１０１）。
登録依頼を受けたデータベース装置１の制御部１１は、記憶部１４からオフセット生成対象となる要素名Ｘを取得する（Ｓ１０２）。
この要素名Ｘは、事前にデータベース装置１の記憶部１４又は他の記憶領域に登録されているものとする。そして、アプリケーション２は、かかる要素名Ｘがデータベース装置１に登録されていることを認識している。
本説明において、要素名Ｘは「ＮＢ」とする。
次に、オフセット生成部１３は制御部１１からに要素名Ｘおよび構造化データ３を受け取り、要素名Ｘが構造化データ３の中にあるかを探索する（Ｓ１０３）。
探索の結果、要素名Ｘが構造化データ３の中にある場合（Ｓ１０４でＹＥＳ）、オフセット生成部１３は要素名Ｘ、すなわち要素名Ｅ７２に対応した値長Ｅ７６のオフセットＹを取得する（Ｓ１０５）。
具体的には、要素名Ｅ７２のオフセット（１３０）に要素名長Ｅ７１の２倍の値（４）、親Ｅ７３、子Ｅ７４、兄弟Ｅ７５を格納するサイズである６（２×３＝６）を足した値がオフセットＹとなる。つまり、本説明においてオフセットＹは１４０となる。
Ｓ１０５の次に、オフセット生成部１３はオフセットＹをオフセット情報Ｆ１０に格納する（Ｓ１０６）。
もし要素名Ｘが構造化データ３の中にない場合（Ｓ１０４でＮＯ）、オフセット生成部１３はオフセット情報Ｆ１０に「なし」を格納する（Ｓ１０７）。
Ｓ１０４でＮＯになるケースは、要素名Ｘが構造化データ３として必須の要素でないときに発生し得る。オフセット生成部１３は、要素名Ｘについて、記憶部１４に記憶されている複数の構造化データ３又はアプリケーション２から入力した複数の構造化データ３の各々に対して検索を行う場合があり、検索の結果、いずれかの構造化データ３には当該要素名Ｘが含まれていない場合がある。このような場合には、当該要素名Ｘが含まれていない構造化データ３に対しては、オフセット情報Ｆ１０に「なし」が格納される。
Ｓ１０６もしくはＳ１０７によりオフセット情報Ｆ１０への格納処理が終わると、オフセット生成部１３はオフセット情報Ｆ１０と構造化データ３からオフセット付構造化データ４を作成し（Ｓ１０８）、記憶部１４にオフセット付構造化データ４を登録する（Ｓ１０９）。
【００２２】
上記では説明の簡略化のため生成するオフセット情報は１つとしているが、記憶部１４に複数のオフセット生成対象の要素名を持っている場合は、図５におけるＳ１０２〜Ｓ１０８の処理を繰り返し実行し、最後にＳ１０９の処理を実行する、とすればよい。
【００２３】
また、Ｓ１０７ではオフセット情報Ｆ１０に「なし」を記録しているが、有効な値が入っていないことを意味するものであれば何でも良い。
【００２４】
また、Ｓ１０７の処理はＳ１０２とＳ１０３の間に実施してもよい。
つまり、Ｓ１０２とＳ１０３の間の段階で、オフセット情報Ｆ１０に「なし」を記録し、Ｓ１０４において該当する要素を発見できた場合に、Ｓ１０２とＳ１０３の間の段階で記録した「なし」をＳ１０６においてオフセットＹの値に書き換えるようにしてもよい。
【００２５】
アプリケーション２によるデータベース装置１に対するレコード更新の動作は、更新対象レコードの有無を判断する処理を除き、レコード登録と同じである。
【００２６】
次に、アプリケーション２によるデータベース装置１からのレコード取得について図６も参照しながら説明する。
図６は本発明の実施の形態１におけるデータベース装置１からレコードを取得する際のデータベース装置１の動作を表すフローチャートである。
なお、以下の説明では、アプリケーション２はデータベース装置１よりオフセット付構造化データ４を取得し、要素名が「ＮＢ」である要素の値Ｅ７７「東京駅」を表示する場合を想定する（表示装置は図示せず）。
【００２７】
まず、レコード取得の準備として、アプリケーション２はデータベース装置１にオフセット生成対象の取得を要求し、データベース装置１はアプリケーション２に、例えばオフセット生成対象ファイルを提供する（図６には、この処理は図示していない）。
なお、オフセット生成対象ファイルとは、例えば、図８に示すような情報であり、オフセット情報が生成されている要素名をアプリケーション２に通知するための情報である。オフセット生成対象ファイルの詳細は、実施の形態２において説明する。
【００２８】
次に、アプリケーション２は、オフセット生成対象ファイルを参照して、データベース装置１に対してレコード取得を要求する（Ｓ２０１）。アプリケーション２は、レコード（オフセット付構造化データ４）の識別子を指定してレコード取得を要求してもよいし、要素名「ＮＢ」が含まれるレコード（オフセット付構造化データ４）という指定の仕方によりレコード取得を要求してもよい。
【００２９】
アプリケーション２からの要求を受けた制御部１１の出力部１１０２は、アプリケーション２から指定されたオフセット付構造化データ４を記憶部１４から取得する（Ｓ２０２）。
記憶部１４からオフセット付構造化データ４を取得できた場合（Ｓ２０３でＹＥＳ）、制御部１１の出力部１１０２はアプリケーション２にオフセット付構造化データ４を渡す（Ｓ２０４）。
記憶部１４からオフセット付構造化データ４を取得できなかった場合（Ｓ２０３でＮＯ）、制御部１１はアプリケーション２にエラーを返す（Ｓ２０５）。
【００３０】
上記では説明の簡略化のためアプリケーション２が取得するレコード（オフセット付構造化データ４）の数を１としたが、Ｓ２０２の処理を繰り返し実行することで複数のレコードをアプリケーション２に提供できる（アプリケーション２がデータベース装置１に対して検索処理を実施する場合に相当）。
【００３１】
データベース装置１からオフセット付構造化データ４を取得したアプリケーション２が、オフセット付構造化データ４からＥ７７を取り出す処理について説明する。
まず、オフセット付構造化データ４の中にあるオフセット情報Ｆ１０を参照して値（１４０）を得る。
次に、オフセット付構造化データ４の先頭から１４２ｂｙｔｅ目にある（１４０ｂｙｔｅ＋オフセット情報Ｆ１０のサイズである２ｂｙｔｅ）値長Ｅ７６を取得する。値長Ｅ７６の値は３である。
よって、アプリケーション２はＥ７６から２ｂｙｔｅ先（値長Ｅ７６自体の領域を読み飛ばしている）の箇所から６ｂｙｔｅ分（１文字につき２ｂｙｔｅ）を読み込み、値Ｅ７７を取り出す。
【００３２】
以上のように本実施の形態によれば、データベース装置１が構造化データ３の登録時にオフセット情報Ｆ１０を生成してオフセット付構造化データ４を記憶部１４に登録し、アプリケーション２からの取得要求に対してオフセット付構造化データ４を提供することで、アプリケーション２が特定の値にアクセスする手間を省くことができ、結果としてアプリケーションによるオフセット付構造化データ４内部の値を高速に表示できるといった利点がある。
構造化データ３から値Ｅ７７を取り出すにはためには、最も少ない手順でも要素名長Ｅ１１→子Ｅ１４のアドレスを計算→子Ｅ１４→要素名長Ｅ２１→兄弟Ｅ２５のアドレスを計算→兄弟Ｅ２５→要素名長Ｅ６１→子Ｅ６４のアドレスを計算→子Ｅ６４→要素名長Ｅ７１→値長Ｅ７６のアドレスを計算→値長Ｅ７６→値Ｅ７７、となる（アプリケーション２が構造化データ３の論理的構造（図２）を知っている場合）。
これに対して、本実施の形態においてアプリケーション２はオフセット情報Ｆ１０→値長Ｅ７６のアドレスを計算→値長Ｅ７６→値Ｅ７７、といった手順で値Ｅ７７の値を取り出せる。
本実施の形態に係るデータベース装置は、アプリケーション２が構造化データ３またはオフセット付構造化データ４の特定の要素を頻繁に表示する場合に有効である。
また、各要素についてオフセット情報Ｆ１０を設けることで、構造化データ３またはオフセット付構造化データ４から値を取り出す処理の手間が省けることは言うまでもない。
なお、頻繁にアクセスすることのない要素についても、オフセット付構造化データ４の要素名長Ｅ１１からたどることにより、アクセス可能であり、テキスト形式のＸＭＬデータを解析するより高速なアクセスを実現する。
【００３３】
また、図４にてオフセット付構造化データ４は構造化データ３とオフセット情報Ｆ１０をまとめたものとしているが、記憶部１４にて同じファイルとして保存しても、構造化データ３とオフセット情報Ｆ１０を別のファイルとして保存しても構わない。
構造化データ３とオフセット情報Ｆ１０を別のファイルに保存する場合、構造化データ３から値Ｅ７７を取得する手順はオフセット付構造化データ４から値Ｅ７７を取得する手順と同じである。
ただし、値長Ｅ７６のアドレスを計算する処理のみ異なり、２ｂｙｔｅの加算は不要である。
【００３４】
また、実施の形態１ではアプリケーション２がレコードを取得する前にオフセット生成対象の取得をデータベース装置１に要求したが、アプリケーション２がオフセット生成対象を予め知っているようにしても構わない。
【００３５】
また、実施の形態１では構造化データ３に要素名を格納しているが、要素名に一意な識別子を設け、その識別子を構造化データ３に格納する、としてもよい（これを構造化データ３Ａとする。ただし図示せず）。
このように構造化データ３を構成することにより、構造化データ３Ａでは要素名長が不要となり、かつ、要素名から値長までの領域サイズが一定の値となるため、親、子、兄弟、値長のアドレスを求めるための処理ステップ数が削減できるといった利点がある。
なお、要素名と識別子の組合せはデータベース装置１の記憶部１４に格納し、オフセット生成対象と同様にデータベース装置１からアプリケーション２に提供することで、アプリケーション２は構造化データ３Ａとオフセット情報Ｆ１０からデータベース装置１のオフセット生成部１３が生成するオフセット付構造化データ４Ａ（図示せず）を用いた要素名の特定が可能になる。
【００３６】
また、実施の形態１では構造化データ３の内部は要素名長、要素名、親、子、兄弟、値長、値の順で情報が並んでいるとしたが、この並び順は変更しても構わない。
ただし、データベース装置１とアプリケーション２がその並び順を知っている必要がある。
【００３７】
また、実施の形態１では要素名長などの領域のサイズを２ｂｙｔｅとして説明したが、２ｂｙｔｅでなくともよい。
【００３８】
実施の形態２．
本発明の実施の形態２では、アプリケーション２からデータベース装置１に対してオフセット情報の追加を要求する場合について説明する。
本実施の形態においても、データベース装置１の構成及びデータベース装置１とアプリケーション２との関係は図１と同様である。
【００３９】
図７は、この発明の実施の形態２におけるデータベース装置１からアプリケーション２に渡すオフセット付構造化データ４Ｘの物理的な構造を表した図である。
オフセット付構造化データ４Ｘはオフセット情報Ｆ１０、Ｆ２０、Ｆ３０、Ｆ４０、オフセット情報の個数を表すオフセット数Ｇ１、およびＥ１１〜Ｅ９７で構成される。
図７において、オフセット情報Ｆ１０は図４と同じく要素名が「ＮＢ」に対応する値長Ｅ７６のオフセットを格納しており、オフセット情報Ｆ１１〜Ｆ１３は未使用であることを示す「なし」を格納している。
【００４０】
図８はこの発明の実施の形態２におけるデータベース装置１が記憶部１４に格納しているオフセット生成対象ファイルＨ１（オフセット対象データ要素情報）の構成を表す図である。
オフセット生成対象ファイルＨ１はオフセット生成対象Ｈ１０〜Ｈ１３で構成される。
オフセット生成対象Ｈ１０はオフセット情報Ｆ１０に要素名「ＮＢ」の値長Ｅ７６のオフセットが格納されていることを示しており、オフセット生成対象Ｈ１１〜Ｈ１３は未使用であることを示している。
アプリケーション２は、このオフセット生成対象ファイルＨ１を参照して、オフセット情報が生成されている要素を判断することができる。
【００４１】
この発明の実施の形態２では、アプリケーション２がデータベース装置１に対して要素名「ＲＴ」に対応したオフセット情報の追加を要求するときの動作について、図１、図３、図７、図８、図９を参照しながら説明する。
図９はこの発明の実施の形態２におけるアプリケーション２によるデータベース装置１に対するオフセット情報追加の動作を表すフローチャートである。
【００４２】
まず、アプリケーション２からデータベース装置１に対するオフセット情報の追加要求（オフセット生成要求）の出力が追加処理の開始となる（Ｓ３０１）。
アプリケーション２からの追加要求は、制御部１１の入力部１１０１において受け付ける。
アプリケーション２からの要求にはオフセット情報を追加したい要素名「ＲＴ」が含まれる（図示せず）。
アプリケーション２からの追加要求を受けた制御部１１は、アプリケーションから他の要求（レコード追加、取得）などがないか検査する（Ｓ３０２）。
Ｓ３０２の目的は、追加処理中もアプリケーション２からの要求を受け付けて処理するためである。
アプリケーション２から他の要求がある場合、制御部１１はその要求を処理する（Ｓ３５０）。
アプリケーション２から他の要求がない場合、制御部１１は、追加要求においてオフセット情報の生成が要求された要素（「ＲＴ」）についてオフセット情報をまだ生成していないレコード（オフセット付構造化データ４Ｘを指す）が記憶部１４にあるか検査する（Ｓ３０３）。
オフセット情報をまだ生成していないレコードが存在する場合、制御部１１は記憶部１４からオフセット付構造化データ４Ｘを取り出し、アプリケーション２から受け取った要素名とともにオフセット生成部１３に渡しオフセット情報を生成する（Ｓ３０４）。
なお、このときオフセット生成部１３はオフセット情報をどこに格納するのかを制御部１１から知らされている。
本説明では、オフセット情報Ｆ１１に格納するものとして説明する。
また、オフセット情報の生成手順については本発明の実施の形態１にて説明したため、説明を省略する。
オフセット生成部１３がＳ３０４の処理を終えると、制御部１１はＳ３０２の処理に戻る。
【００４３】
次に、Ｓ３０３でＮＯとなった場合の動作について説明する。
全レコードに対してオフセット情報Ｆ１１への応セット情報の格納が完了すると、制御部１１はオフセット生成対象Ｈ１１に要素名「ＲＴ」を格納する（Ｓ３０５）。
これにより、アプリケーション２がデータベース装置１からオフセット生成対象ファイルＨ１を取得し参照することで、オフセット付構造化データ４Ｘのオフセット情報Ｆ１１に要素名「ＲＴ」に対応したオフセット情報が格納されていると分かる。
最後に、制御部１１はアプリケーション２に対して追加処理の完了を通知する（Ｓ３０６）。
Ｓ３０６の通知をもって、アプリケーションはオフセット情報Ｆ１１が有効になったことを知る。
【００４４】
以上のように、本実施の形態によればデータベース装置１はアプリケーション２からのオフセット情報追加要求を受け、記憶部１４に格納されたすべてのオフセット付構造化データ４Ｘに対して、順次オフセット情報を生成し、処理が完了するとオフセット生成対象ファイルＨ１を更新し、追加完了の旨をアプリケーション２に通知することにより、新たなオフセット情報を追加することが可能となる。
つまり、データベースに登録するデータの構造は変化しないが、頻繁にアクセスする要素が変化した場合、本実施の形態のように追加処理を行うことで、頻繁にアクセスする対象が変化しても、その要素に高速にアクセスすることが可能となるといった利点がある。
また、１つのオフセット付構造化データ４Ｘに対する処理を実施するたびにアプリケーション２からのほかの要求がないかを検査することにより、データベース装置１がオフセット情報の追加処理中でも他の要求に対処できるようになる。
オフセット付構造化データ４Ｘに対する出力要求があった際にオフセット生成部１３による特定のデータ要素についてのオフセット情報の生成が完了していない場合は、制御部１１の出力部１１０２は、オフセット生成部１３による当該特定のデータ要素についてのオフセット情報の生成の完了を待ち、生成が完了したオフセット情報とともにオフセット付構造化データ４Ｘをアプリケーション２に対して出力する。
【００４５】
なお、オフセット情報を削除する場合は、オフセット生成対象ファイルＨ１にある、削除したいオフセット情報に対応したＨ１０〜Ｈ１３のいずれかを「なし」に変更し、その変更完了をもってアプリケーション２に処理完了を通知すればよい（オフセット付構造化データ４Ｘにはオフセット情報がそのまま残るが、アプリケーション２は参照しなくなる）。
つまり、オフセット生成部１３は、オフセット生成対象ファイルＨ１のいずれかのデータ要素に対して「なし」を登録することにより当該データ要素を削除し、当該データ要素のオフセット情報を無効とする。
【００４６】
また、本説明ではオフセット情報を格納する領域を４つとしたが、４つである必要はない。加えて、数を固定する必要もない。
【００４７】
また、本説明では１つのオフセット付構造化データ４Ｘに対するオフセット生成処理のたびにＳ３０２を実施したが、１つである必要はない。また、個数単位ではなく、時間単位でＳ３０２を実施する、としてもよい。
【００４８】
また、本説明では記憶部１４にあるすべてのオフセット付構造化データ４Ｘに対するオフセット追加処理が完了してからアプリケーション２は追加したオフセット情報を利用可能としたが、取得対象のオフセット付構造化データ４Ｘのオフセット情報Ｆ１１がまだ有効な値でない場合は、先ずは既存のオフセット付構造化データ４Ｘをアプリケーション２に提供し、オフセット生成部１３によりオフセット情報が生成された後に、改めてアプリケーション２にオフセット付構造化データ４Ｘを提供すればよい。
つまり、オフセット付構造化データ４Ｘに対する出力要求があった際にオフセット生成部１３による特定のデータ要素についてのオフセット情報の生成が完了していない場合は、制御部１１の出力部１１０２は、オフセット生成部１３による当該特定のデータ要素についてのオフセット情報の生成の完了を待たずに、記憶部１４に記憶済みのオフセット情報のみをオフセット付構造化データ４Ｘとしてアプリケーション２に対して出力する。
このようにすることで、記憶部１４にあるすべてのオフセット付構造化データ４Ｘに対するオフセット追加処理の完了を待たずにアプリケーション２はオフセット情報Ｆ１１を利用して高速なアクセスが可能となる。
【００４９】
以上、実施の形態１及び２では、以下の特徴を有するデータベースについて説明した。
（１）構造化データの特定の要素に対するオフセット情報を外部（アプリケーション）に提供することを特徴とするデータベース。
（２）（１）にて特定の要素が複数あることを特徴とするデータベース。
（３）登録対象の構造化データに対して特定の要素に対応したオフセット情報を算出し、そのオフセット情報を登録対象の構造化データに付加してから自身に登録することを特徴とするデータベース。
（４）構造化データのどの要素に対するオフセット情報を保持しているかを外部に提供することを特徴とするデータベース。
（５）外部から指定された要素に対するオフセット情報を自身に登録済の構造化データに追加することを特徴とするデータベース。
（６）（５）の追加処理中に、未処理の構造化データを提供する際オフセット情報追加処理を実施してから構造化データを外部に提供することを特徴とするデータベース。
（７）（５）とは逆に外部から指定された要素に対するオフセット情報を破棄することを特徴とするデータベース。
（８）（７）にてオフセット情報の破棄を（４）のオフセット情報の保持の情報のみを更新することで実現することを特徴とするデータベース。
【００５０】
最後に、実施の形態１及び２に示したデータベース装置１のハードウェア構成例について説明する。
図１０は、実施の形態１及び２に示すデータベース装置１のハードウェア資源の一例を示す図である。なお、図１０の構成は、あくまでもデータベース装置１のハードウェア構成の一例を示すものであり、データベース装置１のハードウェア構成は図１０に記載の構成に限らず、他の構成であってもよい。
【００５１】
図１０において、データベース装置１は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００５２】
通信ボード９１５は、例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続されていてもよい。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００５３】
上記プログラム群９２３には、実施の形態１及び２の説明において「〜部」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、実施の形態１及び２の説明において、「〜の判断」、「〜の計算」、「〜の比較」、「〜の作成」、「〜の追加」、「〜の設定」、「〜の登録」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１及び２において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００５４】
また、実施の形態１及び２の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」、であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、実施の形態１及び２の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態１及び２の「〜部」の手順や方法をコンピュータに実行させるものである。
【００５５】
このように、実施の形態１及び２に示すデータベース装置１は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【図面の簡単な説明】
【００５６】
【図１】この発明の実施の形態１におけるデータベース装置の構成図。
【図２】この発明の実施の形態１におけるアプリケーションからデータベース装置に渡す構造化データの論理的な構造を表した図。
【図３】この発明の実施の形態１におけるアプリケーションからデータベース装置に渡す構造化データの物理的な構造を表した図。
【図４】この発明の実施の形態１におけるデータベース装置からアプリケーションに渡すオフセット付構造化データの物理的な構造を表した図。
【図５】この発明の実施の形態１におけるデータベース装置によるレコード登録の動作例を表すフローチャート。
【図６】この発明の実施の形態１におけるアプリケーションによるデータベース装置からのレコード取得の動作例を表すフローチャート。
【図７】この発明の実施の形態２におけるデータベース装置からアプリケーションに渡すオフセット付構造化データの物理的な構造を表した図。
【図８】この発明の実施の形態２におけるデータベース装置が記憶部に格納しているオフセット生成対象の構成を表す図。
【図９】この発明の実施の形態２におけるアプリケーションによるデータベース装置に対するオフセット情報追加の動作例を表すフローチャート。
【図１０】実施の形態１及び２に係るデータベース装置のハードウェア構成例を示す図。
【符号の説明】
【００５７】
１  データベース装置、２  アプリケーション、３  構造化データ、４  オフセット付構造化データ、１１  制御部、１３  オフセット生成部、１４  記憶部、１１０１  入力部、１１０２  出力部。
【図１】
2008140310.tif 000003
【図２】
2008140310.tif 000004
【図３】
2008140310.tif 000005
【図４】
2008140310.tif 000006
【図５】
2008140310.tif 000007
【図６】
2008140310.tif 000008
【図７】
2008140310.tif 000009
【図８】
2008140310.tif 000010
【図９】
2008140310.tif 000011
【図１０】
2008140310.tif 000012