(57)【要約】【課題】リレーショナルデータベースにおいてツリー構造のデータを管理する場合に必要となる主キーをツリー構造のデータに付加することができるようにする。【解決手段】情報処理装置が、ツリーデータを構成する要素を示す要素名と、リレーショナルデータベースにおいてツリーデータを管理する場合に要素を識別するための主キーとなる子要素を示すキー要素名とを対応付けて記憶するキー要素記憶部と、ツリーデータの入力を受け付けるツリーデータ入力部と、ツリーデータを構成する入力要素の要素名に対応する子要素名をキー要素記憶部から読み出すキー要素取得部と、入力要素を識別する識別情報を入力要素に割り当てる識別情報割当部と、子要素名を要素名とし、識別情報を値としたキー要素を生成するキー要素生成部と、生成したキー要素を、入力要素の子としてツリーデータに挿入するキー要素挿入部と、を備えるようにする。【選択図】  図８
2007094733.tif 000002
【特許請求の範囲】
【請求項１】
ツリー構造のデータであるツリーデータを構成する要素を示す要素名と、リレーショナルデータベースにおいて前記ツリーデータを管理する場合に前記要素を識別するための主キーとなる子の要素を示すキー要素名とを対応付けて記憶するキー要素記憶部と、
ＸＭＬ形式の前記ツリーデータであるＸＭＬデータの入力を受け付けるＸＭＬデータ入力部と、
入力された前記ＸＭＬデータを構成する前記要素であるＸＭＬ要素のそれぞれについて、前記ＸＭＬ要素の要素名に対応する前記キー要素名を前記キー要素記憶部から読み出すキー要素取得部と、
前記ＸＭＬ要素を識別する識別情報を前記ＸＭＬ要素に割り当てる識別情報割当部と、
前記キー要素名を要素名とし、前記識別情報を値とした要素であるキー要素を生成するキー要素生成部と、
生成した前記キー要素を、前記ＸＭＬ要素の子として前記ＸＭＬデータに挿入するキー要素挿入部と、
を備えることを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記キー要素生成部は、前記キー要素名に対応する要素が前記ＸＭＬデータに含まれているかどうかを判断し、含まれていない場合に前記キー要素を生成すること、
を特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記キー要素生成部は、前記キー要素名に対応する要素が前記ＸＭＬデータに含まれていた場合に、前記要素の値が設定されていないときには、前記識別情報で前記要素の値を更新すること、
を特徴とする情報処理装置。
【請求項４】
請求項１に記載の情報処理装置であって、
前記要素を示す要素名と、前記要素の親となる前記要素である親要素を特定する親要素特定情報と、リレーショナルデータベースにおいて前記ＸＭＬデータを管理する場合に前記要素が前記親要素を識別するための主キーとなるかどうかを示すキー情報とを含む要素情報の入力をユーザインタフェースから受け付ける要素情報入力部と、
受け付けた前記要素情報から、前記主キーとなることを示す前記キー情報を含む前記要素情報を抽出し、抽出した前記要素情報に含まれる前記親要素特定情報により特定される前記親要素を示す前記要素名と、前記要素情報に含まれている前記要素名とを対応付けて前記キー要素記憶部に登録するキー要素登録部と、
を備えることを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置であって、
前記要素情報には前記親要素を識別する識別情報が含まれており、
前記キー要素登録部は、前記要素情報に含まれている前記要素名に、前記親要素の前記識別情報を連結すること、
を特徴とする情報処理装置。
【請求項６】
請求項１に記載の情報処理装置であって、
前記キー要素記憶部は、前記要素名及び前記キー要素名に加えて、前記要素の値が設定されている他の要素を示すコピー元要素名を記憶しており、
前記ＸＭＬ要素に対応する前記コピー元要素名が設定されている場合、
前記識別情報割当部は、前記コピー元要素名が示す要素を前記ＸＭＬデータから読み出し、読み出した前記要素の値を前記識別情報として前記ＸＭＬ要素に割り当てること、
を特徴とする情報処理装置。
【請求項７】
ＣＰＵとメモリとを備える情報処理装置が、
ツリー構造のデータであるツリーデータを構成する要素を示す要素名と、リレーショナルデータベースにおいて前記ツリーデータを管理する場合に前記要素を識別するための主キーとなる子の要素を示すキー要素名とを対応付けて前記メモリに記憶し、
ＸＭＬ形式の前記ツリーデータであるＸＭＬデータの入力を受け付け、
入力された前記ＸＭＬデータを構成する前記要素であるＸＭＬ要素の要素名に対応する前記キー要素名を前記メモリから読み出し、
前記ＸＭＬ要素を識別する識別情報を前記ＸＭＬ要素に割り当て、
前記キー要素名を要素名とし、前記識別情報を値とした要素であるキー要素を生成し、
生成した前記キー要素を、前記ＸＭＬ要素の子として前記ＸＭＬデータに挿入すること、
を特徴とするデータ作成方法。
【請求項８】
請求項７に記載のデータ作成方法であって、
前記情報処理装置は、前記キー要素名に対応する要素が前記ＸＭＬデータに含まれているかどうかを判断し、含まれていない場合に前記キー要素を生成すること、
を特徴とするデータ作成方法。
【請求項９】
コンピュータに、
ツリー構造のデータであるツリーデータを構成する要素を示す要素名と、リレーショナルデータベースにおいて前記ツリーデータを管理する場合に前記要素を識別するための主キーとなる子の要素を示すキー要素名とを対応付けて前記メモリに記憶するステップと、
ＸＭＬ形式の前記ツリーデータであるＸＭＬデータの入力を受け付けるステップと、
入力された前記ＸＭＬデータを構成する前記要素であるＸＭＬ要素の要素名に対応する前記キー要素名を前記メモリから読み出すステップと、
前記ＸＭＬ要素を識別する識別情報を前記ＸＭＬ要素に割り当てるステップと、
前記キー要素名を要素名とし、前記識別情報を値とした要素であるキー要素を生成するステップと、
生成した前記キー要素を、前記ＸＭＬ要素の子として前記ＸＭＬデータに挿入するステップと、
を実行させるためのプログラム。
【請求項１０】
請求項９に記載のプログラムであって、
前記情報処理装置に、さらに前記キー要素名に対応する要素が前記ＸＭＬデータに含まれているかどうかを判断するステップを実行させ、
前記情報処理装置に、前記要素が前記ＸＭＬデータに含まれていない場合に前記キー要素を生成するステップを実行させるようにするためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、スキーマ作成方法、及びプログラムに関する。
【背景技術】
【０００２】
情報処理システム間でのデータ交換を行う場合に、ＸＭＬ（eXtensible Markup Language）形式のデータが用いられるようになってきている。一方で情報処理システムにおけるデータは主に表形式のデータを管理するリレーショナルデータベースを用いて管理されており、ＸＭＬ形式のツリー構造のデータをリレーショナルデータベースにおいて管理する手法が開発されている（例えば、特許文献１参照）。
【特許文献１】特開２００３−２７１４４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、一般的なデータ交換に用いられるＸＭＬ形式のデータは、全体でひとつのツリー構造であり、ツリー構造のルートからのパスで要素を特定することができるため、リレーショナルデータベースが用いるような主キーは含まれていない。したがって、ＸＭＬ形式のデータをリレーショナルデータベースに取り込むためには、利用者が要素毎に主キーを設定する必要があった。
【０００４】
本発明は、このような背景を鑑みてなされたものであり、リレーショナルデータベースにおいてツリー構造のデータを管理する場合に必要となる主キーをツリー構造のデータに付加することのできる情報処理装置、データ作成方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するための本発明の主たる発明は、情報処理装置であって、ツリー構造のデータであるツリーデータを構成する要素を示す要素名と、リレーショナルデータベースにおいて前記ツリーデータを管理する場合に前記要素を識別するための主キーとなる子の要素を示すキー要素名とを対応付けて記憶するキー要素記憶部と、ＸＭＬ形式の前記ツリーデータであるＸＭＬデータの入力を受け付けるＸＭＬデータ入力部と、入力された前記ＸＭＬデータを構成する前記要素であるＸＭＬ要素のそれぞれについて、前記ＸＭＬ要素の要素名に対応する前記キー要素名を前記キー要素記憶部から読み出すキー要素取得部と、前記ＸＭＬ要素を識別する識別情報を前記ＸＭＬ要素に割り当てる識別情報割当部と、前記キー要素名を要素名とし、前記識別情報を値とした要素であるキー要素を生成するキー要素生成部と、生成した前記キー要素を、前記ＸＭＬ要素の子として前記ＸＭＬデータに挿入するキー要素挿入部と、を備えることとする。
【発明の効果】
【０００６】
本発明によれば、リレーショナルデータベースにおいてツリー構造のデータを管理する場合に必要となる主キーをツリー構造のデータに付加することができる。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の実施形態に係る情報処理装置１０について説明する。
【０００８】
＝＝第１の実施形態＝＝
本実施形態では、情報処理装置１０として一般的なコンピュータを用いることを想定している。図１に情報処理装置１０のハードウェア構成を示す。同図に示すように、本実施形態に係る情報処理装置１０は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、入力装置１０４、出力装置１０５を備えている。
【０００９】
記憶装置１０３は、プログラムやデータを記憶する、例えば、ハードディスクドライブやＣＤ−ＲＯＭドライブなどである。ＣＰＵ１０１は、記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより各種の機能を実現する。入力装置１０４はデータを入力する、例えばキーボードやマウスなどである。出力装置１０５はデータを出力する、例えばディスプレイである。
【００１０】
本実施形態の情報処理装置１０は、ＸＭＬ形式で記述されたツリー構造のデータ（以下、ＸＭＬデータという。）の入力を受け付け、ＸＭＬデータの要素をリレーショナルデータベースのテーブルとして格納する場合に必要となるテーブルの主キーを生成し、生成した主キーをＸＭＬデータに挿入する。
【００１１】
＝＝ソフトウェア＝＝
図２に情報処理装置１０のソフトウェア構成を示す。同図に示すように、情報処理装置１０は、ＸＭＬデータ入力部１１１、キー要素挿入部１１２、ＸＭＬデータ出力部１１３、ＲＤＢインポート処理部１１４、ＲＤＢＭＳ１１５の各機能部と、テーブル管理表１５１、キー管理表１５２、及びキー割当値管理表１５３の各記憶部とを備えている。
【００１２】
ＸＭＬデータ入力部１１１は、入力装置１０４を介してＸＭＬデータの入力を受け付け、受け付けたＸＭＬデータを解析してＸＭＬデータをＤＯＭ（Document Object Model）ツリーとしてメモリ１０２に記憶する。図３に、ＸＭＬデータ入力部１１１が受け付けるＸＭＬデータの一例を示す。なお、ＸＭＬデータ入力部は、外部装置から通信路を介して送信された例えば電子メールなどに含まれるＸＭＬデータを受け付けるようにしてもよい。
【００１３】
ＲＤＢＭＳ１１５は、各種のデータベースを管理するアプリケーションプログラムである。ＲＤＢＭＳ１１５は、一般的なリレーショナルデータベース管理システムを想定する。本実施形態において、ＲＤＢＭＳ１１５では図４に示すような構造のテーブルを管理するものとする。同図に示すように、本実施形態においてＲＤＢＭＳ１１５では、薬剤セグメントテーブル２１と投与ユニットテーブル２２とを管理しており、薬剤セグメントテーブル２１と投与ユニットテーブル２２との間では１対多のリレーションが定義されているものとする。
【００１４】
テーブル管理表１５１は、ＸＭＬデータをリレーショナルデータベースに管理する場合に用いるテーブルの名称とその親子関係を管理する。図５にテーブル管理表１５１の構成を示す。同図に示すようにテーブル管理表１５１はテーブルＩＤ、テーブル名、上位テーブルＩＤを対応付けて記憶している。テーブルＩＤはリレーショナルデータベースにおけるテーブルを特定するための情報であり、上位テーブルＩＤはそのテーブルの親となるテーブルを特定するための情報である。
【００１５】
キー管理表１５２はテーブルの主キーを管理する。図６にキー管理表１５２の構成を示す。同図に示すように、キー管理表１５２は、要素ＩＤ、テーブルＩＤ、要素名、データ型を対応付けて記憶している。本実施形態においてリレーショナルデータベースにはツリー構造のＸＭＬデータが格納されるため、テーブルのカラムはＸＭＬデータを構成する要素に対応する。要素ＩＤはテーブルの主キーとなる要素（以下、キー要素という。）を特定するための識別情報である。
【００１６】
キー割当値管理表１５３は、キー要素に割り当てられた値（以下、キー値という。）を管理する。図７にキー割当値管理表１５３の構成を示す。同図に示すように、キー割当値管理表１５３は、キー要素の要素ＩＤに対応付けて、キー要素に割り当てたキー値を記憶する。
【００１７】
キー要素挿入部１１２は、キー要素を生成し、生成したキー要素をＸＭＬデータに挿入する。上述の図４の例では、キー要素挿入部１１２は、薬剤セグメントテーブル２１の主キーとなる「階層キー」及び、投与ユニットテーブル２２の主キーとなる「投与ユニットキー」に対応するキー要素を生成する。キー要素挿入部１１２は、例えば図３の例においては、「/薬剤セグメント/階層キー」及び「/薬剤セグメント/投与ユニット/投与ユニットキー」をＸＭＬデータに挿入する。なお、キー要素挿入部１１２による処理の詳細は後述する。
【００１８】
ＸＭＬデータ出力部１１３は、キー要素挿入部１１２によりキー要素が挿入されたＸＭＬデータ（以下、出力ＸＭＬデータという。）をファイルに出力する。なお、ＸＭＬデータ出力部１１３は、外部装置に対して出力ＸＭＬデータを送信したり、ディスプレイやプリンタなどの出力装置１０５に出力ＸＭＬデータを出力したりするようにしてもよい。
【００１９】
ＲＤＢインポート処理部１１４は、出力ＸＭＬデータから要素を抽出し、抽出した要素を、ＲＤＢＭＳ１１５が管理する、例えば上述の薬剤セグメントテーブル２１や投与ユニットテーブル２２のようなテーブルに、レコードとして登録する。なお、ＲＤＢインポート処理部１１４による処理の詳細については後述する。
【００２０】
なお、上記各機能部は情報処理装置１０が備えるＣＰＵ１０１が記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより実現される。また、上記各記憶部は、記憶装置１０３やメモリ１０２が提供する記憶領域に実現される。
【００２１】
＝＝キー要素の挿入処理＝＝
図８は、キー要素挿入部１１２によるＸＭＬデータに対するキー要素の挿入処理の流れを示す図である。キー要素挿入部１１２は、ＸＭＬデータのＤＯＭツリーに含まれている各要素について以下の処理を行う。
【００２２】
キー要素挿入部１１２は、処理の対象となっている要素（以下、処理要素という。）の要素名をテーブル名とするレコードをテーブル管理表１５１から検索する（Ｓ３０１）。そのレコードが登録されている場合（Ｓ３０２：ＹＥＳ）、キー要素挿入部１１２は、キー管理表１５２から、検索したレコードのテーブルＩＤに対応する要素ＩＤ及び要素名（以下、キー要素名という。）を読み出す（Ｓ３０３）。キー要素挿入部１１２は、読み出した要素ＩＤに対応するキー値をキー割当値管理表１５３から取得して割当値とする（Ｓ３０４）。なお、要素ＩＤに対応するキー値がキー割当値管理表１５３に登録されていない場合には割当値を「０」とする。キー要素挿入部１１２は、割当値をインクリメントし（Ｓ３０５）、割当値を有するキー要素名の要素を作成し（Ｓ３０６）、作成した要素を処理要素の子となるようにＤＯＭツリーに挿入する（Ｓ３０７）。キー要素挿入部１１２は、要素ＩＤに対応するキー割当値管理表１５３のキー値を上記の割当値に更新する（Ｓ３０８）。
【００２３】
このようにして、ＸＭＬデータのＤＯＭツリーにキー要素が挿入される。したがって、本実施形態の情報処理装置１０によれば、複数のテーブル間のリレーションが定義されたリレーショナルデータベースにおいてツリー構造のデータを管理する場合に、テーブルのリレーションを定義するために必要な主キーに対応するキー要素が含まれていないＸＭＬデータにキー要素を補完することができる。よって、キー要素が含まれていないＸＭＬデータであっても、利用者が手動でキー要素を追加するような作業を行うことなく、容易にリレーショナルデータベースに取り込むことができる。
【００２４】
出力ＸＭＬデータの一例を図９に示す。同図に示す出力ＸＭＬデータの例では、例えば、「薬剤セグメント」要素のキー要素である「階層キー」要素と、「薬剤セグメント」要素の子となる「投与ユニット」要素のキー要素である「投与ユニットキー」要素とが挿入されている。
【００２５】
＝＝ＲＤＢＭＳ１１５へのデータのインポート処理＝＝
図１０は、ＲＤＢインポート処理部１１４が出力ＸＭＬデータのＤＯＭツリーをＲＤＢＭＳ１１５のテーブルにデータをインポートする処理の流れを示す図である。ＲＤＢインポート処理部１１４は、ＤＯＭツリーのルートから、ＤＯＭツリーに含まれている各要素について以下の処理を行う。
【００２６】
ＲＤＢインポート処理部１１４は、処理要素の要素名をテーブル名とするレコードをテーブル管理表１５１から検索し（Ｓ３２１）、そのレコードが登録されていた場合（Ｓ３２２：ＹＥＳ）、ＲＤＢＭＳ１１５が上記処理要素の要素名で管理しているテーブルに登録するためのレコードデータを作成する（Ｓ３２３）。ＲＤＢインポート処理部１１４は、ＤＯＭツリーにおける処理要素の子の要素（以下、子要素という。）のそれぞれについて、テーブル名が子要素の要素名（以下、子要素名という。）であるレコードがテーブル管理表１５１に登録されている場合（Ｓ３２４：ＹＥＳ）、レコードデータの子要素名のカラムに子要素の値を設定する（Ｓ３２５）。上記の処理により、処理要素の子要素のそれぞれの値がレコードデータの各カラムに設定される。
【００２７】
ＲＤＢインポート処理部１１４は、処理要素の要素名を処理要素名とする（Ｓ３２６）。ＲＤＢインポート処理部１１４は、処理要素名で特定される要素の親の要素（以下、親要素という。）がＤＯＭツリーのルートになるまで、以下の処理を行う。
【００２８】
ＲＤＢインポート処理部１１４は、ＤＯＭツリーから親要素の要素名（以下、親要素名という。）を取得し（Ｓ３２７）、テーブル管理表１５１から親要素名に対応するレコードを取得する（Ｓ３２８）。ＲＤＢインポート処理部１１４は、取得したレコードのテーブルＩＤに対応する要素名をキー管理表１５２から読み出し（Ｓ３２９）、ＤＯＭツリーから親要素の子の要素のうち、上記読み出した要素名に対応する要素の値を取得する（Ｓ３３０）。ＲＤＢインポート処理部１１４は、レコードデータの処理要素名のカラムに取得した値を設定し（Ｓ３３１）、親要素名を処理要素名とする（Ｓ３３２）。
【００２９】
ＲＤＢインポート処理部１１４は、上記のようにして各カラムに値が設定されると、レコードデータをＲＤＢＭＳ１１５が管理するテーブルに登録する（Ｓ３３３）。
【００３０】
以上のようにして、出力ＸＭＬデータをＲＤＢＭＳ１１５が管理するテーブルに格納することができる。したがって、ＲＤＢＭＳ１１５は、全体でひとつのツリー構造となるＸＭＬデータを複数のテーブルに正規化して格納することができるので、リレーショナルデータベースにおいてツリー構造のＸＭＬデータを効率的に管理することができる。
【００３１】
＝＝第２の実施形態＝＝
次に、本発明の第２の実施形態について説明する。第２の実施形態における情報処理装置１０のハードウェア構成は、上述の図１に示す構成と同様である。図１１に第２の実施形態に係る情報処理装置１０のソフトウェア構成を示す。同図に示すように、第２の実施形態の情報処理装置１０は、上述の第１の実施形態の情報処理装置１０の構成に管理データ入力部１２１及びキー属性管理表１６１が加えられている。また、後述するように、キー管理表１５２及びキー割当値管理表１５３の構成、並びにキー要素挿入部１１２によるキー要素の挿入処理の流れはそれぞれ第１の実施形態のものとは異なる。
【００３２】
図１２は第２の実施形態の情報処理装置１０が備えるキー管理表１５２の構成を示す図である。同図に示すように、キー管理表１５２は、要素ＩＤ及びテーブルＩＤをキーとして、キー要素の要素名を記憶している。なお、第２の実施形態のキー管理表１５２では、要素名は、ＸＭＬデータに含まれているキー要素の名称にテーブルＩＤが連結されたものとなっている。また、親要素が格納されるテーブルに対する外部キーとなるキー要素についてもキー管理表１５２にレコードが記憶される。なお、キー要素のデータ型はキー属性管理表１６１に管理される。
【００３３】
キー属性管理表１６１の構成を図１３に示す。同図に示すように、キー属性管理表１６１は、要素名に対応付けてデータ型とコピー元要素名とを記憶している。コピー元要素名は、キー要素の値として、他の要素の値をコピーする場合にそのコピー元となる要素の名称が設定される。例えば、ＸＭＬデータに含まれる「薬剤セグメント」要素の子に「薬剤名」要素がある場合に、キー要素挿入部１１２は、「薬剤名」要素の値を、キー要素の値としてキー要素を生成することになる。なお、第２の実施形態のキー要素挿入部１１２による処理の詳細については後述する。
【００３４】
図１４は、キー割当値管理表１５３の構成を示す図である。同図に示すように、第２の実施形態のキー割当値管理表１５３は、テーブルＩＤ、要素ＩＤ、キー値、上位要素ＩＤ、上位キー値、上位キー値リストを対応付けて記憶している。キー値はキー要素に割り当てられた値である。上位要素ＩＤは、キー要素の親となる要素の要素ＩＤであり、上位キー値は、キー要素の親要素に割り当てられた値である。上位キー値リストは、キー要素の祖先となる要素の要素ＩＤのリストである。
【００３５】
管理データ入力部１２１は、テーブル管理表１５１、キー管理表１５２、及びキー属性管理表１６１に登録するためｎ情報の入力を受け付ける。
【００３６】
図１５に管理データ入力部１２１が情報の入力を受け付ける画面４０の一例を示す。画面４０はＸＭＬデータの入力欄４０１を備え、入力欄４０１に入力された名称は、ＸＭＬデータの最上位の階層となる要素の名称になる。ユーザはＸＭＬデータ全体の構造を把握しやすいように、ＸＭＬデータに含まれる全ての要素は、深さ優先順に画面縦方向に入力欄４１０に一覧表示される。入力欄４１０には、階層、階層キー、要素名、コピー元要素名、要素のデータ型、テーブルＩＤの各項目が入力される。階層はツリー構造において要素が位置する、ルートからの深さを示す。要素がその親の主キーとなる場合には、階層キーに「ｖ」が入力される。
【００３７】
管理データ入力部１２１は、画面４０から入力されたデータを受け付けて、テーブル管理表１５１、キー管理表１５２、及びキー属性管理表１６１のレコードを登録する。
【００３８】
＝＝テーブル管理表１５１の作成処理＝＝
図１６に画面４０への入力データに基づいてテーブル管理表１５１のレコードを登録する処理の流れを示す。また、図１７はこの処理に用いられる作業用の表であるテーブルワーク表の構成図である。
【００３９】
管理データ入力部１２１は、画面４０の名称の入力欄４０１に入力されたデータをテーブル名に、「１」を階層に、「０１」をテーブルＩＤにそれぞれ設定したレコードをテーブルワーク表に登録する（Ｓ５０１）。
【００４０】
管理データ入力部１２１は、階層Ｏｌｄを「１」とし、退避テーブル名を上記の入力データの名称として（Ｓ５０２）、画面４０の一覧入力欄４１０に入力された各行の入力データについて、以下の処理を行う。
【００４１】
管理データ入力部１２１は、入力データの「階層」を階層Ｎｅｗとし（Ｓ５０３）、階層Ｎｅｗが階層Ｏｌｄよりも大きいかどうかを判断する（Ｓ５０４）。階層Ｎｅｗが階層Ｏｌｄよりも大きかった場合（Ｓ５０４：ＹＥＳ）、管理データ入力部１２１は、階層Ｏｌｄに対応するテーブルＩＤをテーブルワーク表から取得し（Ｓ５０５）、入力データのテーブルＩＤを「テーブルＩＤ」に、名称を「テーブル名」に、及び階層Ｏｌｄに対応するテーブルＩＤを「上位テーブルＩＤ」にそれぞれ設定したレコードをテーブル管理表１５１に登録する（Ｓ５０６）。管理データ入力部１２１は、テーブルワーク表からテーブルＩＤの最大値を取得し（Ｓ５０７）、最大値に「１」を加算した値をテーブルＩＤに、入力データの階層を階層に、退避テーブル名をテーブル名にそれぞれ設定したレコードをテーブルワーク表に登録する（Ｓ５０８）。
【００４２】
管理データ入力部１２１は、入力データの要素名を退避テーブル名として（Ｓ５０９）、階層Ｎｅｗを階層Ｏｌｄとする（Ｓ５１０）。
【００４３】
以上の処理を各行の入力データについて行うことにより、画面４０に入力された各要素を格納するためのテーブルについての情報がテーブル管理表１５１に登録される。
【００４４】
＝＝キー管理表１５２の作成処理＝＝
図１８は、画面４０への入力データに基づいてキー管理表１５２のレコードを登録する処理の流れを示す。また、図１９はこの処理で用いられる作業用の表であるキーワーク表の構成図である。
【００４５】
管理データ入力部１２１は、階層Ｏｌｄを「０」とし、退避テーブルＩＤを「０」として（Ｓ５２１）、画面４０の一覧入力欄４１０に入力された各行の入力データについて、以下の処理を行う。
【００４６】
管理データ入力部１２１は、入力データの階層キーが「ｖ」である場合（Ｓ５２２：ＹＥＳ）、入力データの階層を階層Ｎｅｗに設定し（Ｓ５２３）、階層Ｎｅｗが階層Ｏｌｄよりも大きいかどうかを判断する（Ｓ５２４）。階層Ｎｅｗが階層Ｏｌｄよりも大きい場合（Ｓ５２４：ＹＥＳ）、管理データ入力部１２１は、キーワーク表からテーブルＩＤの最大値を取得し、取得した最大値に「１」を加算した値を新テーブルＩＤとする（Ｓ５２５）。管理データ入力部１２１は、キーワーク表から、退避テーブルＩＤに対応する階層、要素ＩＤ、及び要素名を読み出し（Ｓ５２６）、読み出した階層、要素ＩＤ、及び要素名、並びに上記新テーブルＩＤを設定したレコードをキーワーク表に追加する（Ｓ５２７）。さらに管理データ入力部１２１は、入力データの階層に対応する要素ＩＤの最大値をキーワーク表から取得し、取得した最大値に「１」を加算した値を要素ＩＤに、入力データの階層を階層に、入力データの要素名とテーブルＩＤとを連結した文字列を要素名にそれぞれ設定したレコードをキーワーク表に追加する（Ｓ５２８）。
【００４７】
管理データ入力部１２１は、入力データのテーブルＩＤを退避テーブルＩＤに設定し（Ｓ５２９）、階層Ｎｅｗを階層Ｏｌｄとする（Ｓ５３０）。
【００４８】
以上の処理を各行の入力データについて行うことにより、画面４０に入力された各要素を格納するためのテーブルのキーについての情報がキー管理表１５２に登録される。
【００４９】
＝＝キー属性管理表１６１の作成処理＝＝
図２０は、画面４０への入力データに基づいてキー属性管理表１６１のレコードを登録する処理の流れを示す。
【００５０】
管理データ入力部１２１は、キー管理表から重複がないように要素名を読み出し（Ｓ５４１）、読み出した要素名のそれぞれについて、以下の処理を行う。  
管理データ入力部１２１は、要素名の末尾の数字部分と、数字部分以外の文字列部分とを要素名から抽出し（Ｓ５４２）、画面４０に入力された入力データのうち、要素名が文字列部分と一致し、テーブルＩＤが数字部分と一致するものを検索し（Ｓ５４３）、検索した入力データの要素名、データ型、及びコピー元要素名を設定したレコードをキー属性管理表１６１に登録する。  
以上の処理を各要素名について行うことにより、各キー要素についての情報がキー属性管理表１６１に登録される。
【００５１】
＝＝キー要素の挿入処理＝＝
次に、キー要素挿入部１１２によるキー要素の挿入処理について説明する。  
図２１〜図２３はそれぞれ、キー要素の挿入処理において用いられる作業用の表である、処理済ワーク表、検索パスワーク表、及びキー値ワーク表の構成を示す図である。  
図２１に示す処理済ワーク表は、テーブルＩＤに対応付けて、ツリー構造においてそのテーブルに対応する要素の子の要素のうち、キー要素の挿入処理を行ったものに対応するテーブルＩＤを記憶する。  
図２２に示す検索パスワーク表は、テーブルＩＤに対応付けて、ＸＭＬデータのＤＯＭツリーを検索するためのパス、そのパスについての処理を行ったかどうかを示す処理完了フラグ、及びそのパスにより特定される要素の子についてキー要素の挿入処理を行ったかどうかを示す子処理完了フラグを記憶する。なお、本実施形態において上記のパスはＸＰａｔｈの規約に従うものとする。  
図２３に示すキー値ワーク表は、テーブルＩＤ及び要素ＩＤに対応付けて、キー要素に割り当てられたキー値を記憶する。
【００５２】
図２４は、第２の実施形態におけるキー要素の挿入処理の流れを示す図である。  
キー要素挿入部１１２は、カレントテーブルＩＤを「００」とし、検索対象階層を「子」として（Ｓ５６１）、図２５に示す検索パス設定処理を行う（Ｓ５６２）。
【００５３】
図２５に示すように、キー要素挿入部１１２は、検索対象階層に「次」が設定されている場合（Ｓ５８１：ＹＥＳ）、検索パスワーク表のカレントテーブルＩＤに対応するパスのインデックスをインクリメントし（Ｓ５８２）、上記のパスを検索パスとする（Ｓ５８３）。これにより、カレントテーブルＩＤに対応するパスにより特定される要素と同一階層における次の要素を検索するためのパスが検索パスに設定されることになる。
【００５４】
一方検索対象階層が「親」であった場合には（Ｓ５８４：ＹＥＳ）、キー要素挿入部１１２は、テーブル管理表１５１から、カレントテーブルＩＤに対応する上位テーブルＩＤ、すなわちカレントテーブルＩＤが示す要素の親に対応するテーブルＩＤを読み出し（Ｓ５８５）、読み出したテーブルＩＤをカレントテーブルＩＤに設定する（Ｓ５８６）。
【００５５】
キー要素挿入部１１２は、検索パスワーク表からカレントテーブルＩＤに対応するパスを読み出し、読み出したパスを親パスとする（Ｓ５８７）。キー要素挿入部１１２は、処理済ワーク表から、カレントテーブルＩＤに対応する子テーブルＩＤ（以下、処理済ＩＤという。）のリストを読み出し（Ｓ５８８）、テーブル管理表からカレントテーブルＩＤが上位テーブルＩＤと一致するレコードのテーブルＩＤ、すなわちカレントテーブルＩＤが示す要素の子に対応するテーブルＩＤ（以下、子テーブルＩＤという。）を読み出す（Ｓ５８９）。キー要素挿入部１１２は、読み出した子テーブルＩＤのうち、上記処理済ＩＤのリストに含まれていないものをひとつ選択し（Ｓ５９０）、選択した子テーブルＩＤに対応するテーブル名をテーブル管理表１５１から取得し、取得したテーブル名に「（１）」のインデックスを連結して子パスとする（Ｓ５９１）。キー要素挿入部１１２は、上記の親パスと子パスとをセパレータ「／」で連結したパスを検索パスとする（Ｓ５９２）。
【００５６】
次にキー要素挿入部１１２は、上記の検索パスをＤＯＭツリーから検索して、検索パスが示す要素を取得して、取得した要素を検索要素とし（Ｓ５６３）、図２６及び図２７に示すキー要素の生成処理を行う（Ｓ５６４）。  
図２６に示すように、キー要素挿入部１１２は、キーワーク表からカレントテーブルＩＤに対応するレコードを抽出し（Ｓ６０１）、抽出したレコードのそれぞれについて以下の処理を行う。
【００５７】
キー要素挿入部１１２は、タグ値及び処理対象キー値をクリアし（Ｓ６０２）、追加要素ＩＤにレコードの要素ＩＤを設定し、追加テーブルＩＤにレコードのテーブルＩＤを設定し、追加要素名にレコードの要素名を設定する（Ｓ６０３）。キー要素挿入部１１２は、追加要素名に対応するキー属性情報をキー属性管理表から読み出す（Ｓ６０４）。
【００５８】
キー要素挿入部１１２は、追加要素名の末尾に追加テーブルＩＤが含まれているかどうかを判断し（Ｓ６０５）、追加テーブルＩＤが追加要素名の末尾にふくまれていない場合には（Ｓ６０５：ＮＯ）、追加テーブルＩＤから１を減じたものと、上記追加要素ＩＤとに対応するキー値をキー値ワーク表から取得して追加キー値とする（Ｓ６０６）。
【００５９】
一方追加テーブルＩＤが追加要素名の末尾に含まれている場合（Ｓ６０４：ＹＥＳ）、ＤＯＭツリーにおける検索要素以下のツリーから、追加要素名の要素を追加キー要素として取得する（Ｓ６０７）。ここで追加キー要素の値が設定されていれば（Ｓ６０８：ＹＥＳ）、キー要素挿入部１１２はその値を追加キー値とする（Ｓ６０９）。追加キー要素の値が設定されておらず（Ｓ６０８：ＮＯ）、追加キー属性情報のコピー元要素名が設定されている場合（Ｓ６１０：ＹＥＳ）、ＤＯＭツリーの検索要素以下のツリーからコピー元要素名の要素を検索し、検索した要素の値を追加キー値とする（Ｓ６１１）。
【００６０】
次にキー要素挿入部１１２は、図２７に示すように、追加要素ＩＤから１を減じて上位要素ＩＤとし（Ｓ６１２）、上位キー値リストを空にする（Ｓ６１３）。キー要素挿入部１１２は、上位要素ＩＤを計算用ＩＤとし（Ｓ６１４）、計算用ＩＤが０より大きい間、以下の処理を行う。キー要素挿入部１１２は、計算用ＩＤに対応するキー値をキー値ワーク表から取得し（Ｓ６１５）、取得したキー値、「，（コンマ）」、上位キー値リストを連結して、新たな上位キー値リストとし（Ｓ６１６）、計算用ＩＤをデクリメントする（Ｓ６１７）。以上の処理を繰り返すことにより、キー要素挿入部１１２は、追加要素ＩＤの祖先となる要素ＩＤをリストアップした上位キー値リストを作成する。
【００６１】
キー要素挿入部１１２は、キー値ワーク表から追加テーブルＩＤと上位要素ＩＤとに対応するキー値を読み出して上位キー値とし（Ｓ６１８）、キー管理表１５２から追加テーブルＩＤと上位要素ＩＤとに対応する要素名を読み出して上位要素名とし（Ｓ６１９）、上位要素名に対応するキー属性情報をキー属性管理表１６１から読み出して上位キー属性情報とする（Ｓ６２０）。ここでキー要素挿入部１１２は、図２８に示すキー値の割り当て処理を行う（Ｓ６２１）。図２８に示すように、キー要素挿入部１１２は、追加キー属性情報のデータ型が「ＮＵＭ」であり（Ｓ６４１：ＹＥＳ）、上記の処理において追加キー値が設定されていない場合（Ｓ６４２：ＹＥＳ）、上位要素ＩＤが「０」であれば（Ｓ６４３：ＹＥＳ）、追加キー値を「１」に設定し（Ｓ６４４）、上位要素ＩＤが「０」でなければ（Ｓ６４３：ＮＯ）、キー割当値管理表１５３からカレントテーブルＩＤに対応する要素ＩＤの最大値を取得し、取得した最大値に１を加算した値を追加キー値とする（Ｓ６４５）。
【００６２】
キー要素挿入部１１２は、テーブルＩＤが追加テーブルＩＤであり、かつ、要素名が追加要素名と一致するレコードをキーワーク表から選択し（Ｓ６２２）、選択したレコードのそれぞれについて、レコードのテーブルＩＤに、追加要素ＩＤ、追加キー値、上位要素ＩＤ、上位キー値、及び上位キー値リストを対応付けてキー割当値管理表１５３に登録する（Ｓ６２３）。
【００６３】
以上の処理をキーワーク表から取得したレコードのそれぞれについて行った後、キー要素挿入部１１２は、キー要素のＤＯＭツリーへの挿入処理を行う（Ｓ６２５）。
【００６４】
ＤＯＭツリーへの挿入処理を図２９に示す。キー要素挿入部１１２は、カレントテーブルＩＤをキーとしてキーワーク表からレコードを読み出し（Ｓ６６１）、読み出したレコードのそれぞれについて以下の処理を行う。
【００６５】
キー要素挿入部１１２は、テーブルＩＤが要素名の末尾に含まれていれば（Ｓ６６２：ＹＥＳ）、レコードのテーブルＩＤ及び要素ＩＤに対応するキー値ワーク表のキー値を読み出してキー値とする（Ｓ６６３）。キー要素挿入部１１２は、レコードの要素名の要素をＤＯＭツリーの検索要素以下のツリーから検索し（Ｓ６６４）、その要素が取得できた場合（Ｓ６６５：ＹＥＳ）には、空の要素でなければ（Ｓ６６６：ＹＥＳ）、要素の値として上記のキー値を設定する（Ｓ６６７）。一方、要素名の要素をＤＯＭツリーから取得できなかった場合には（Ｓ６６５：ＮＯ）、要素名を名称とする、キー値の値を有する要素を生成し（Ｓ６６８）、生成した要素を検索要素の子としてＤＯＭツリーに挿入する（Ｓ６６９）。
【００６６】
以上の処理により、キー要素がＤＯＭツリーに含まれていない場合には、新たにキー要素が挿入され、空のキー要素がＤＯＭツリーに含まれている場合には、キー要素の値が設定される。
【００６７】
上記のようにしてキー要素がＤＯＭツリーに挿入されると、キー要素挿入部１１２は、図２４の（Ｓ５６５）に進み、検索パスワーク表のカレントテーブルＩＤに対応するカレント要素処理完了フラグを「真（Ｔｒｕｅ）」に設定する。キー要素挿入部１１２は、上記処理で選択した子テーブルＩＤを、カレントテーブルＩＤに対応付けて処理済ワーク表に登録する（Ｓ５６６）。キー要素挿入部１１２は、検索対象階層に「子」を設定して（Ｓ５６７）、上述した図２５に示す検索パス設定処理を行う（Ｓ５６８）。キー要素挿入部１１２は、設定した検索パスをＤＯＭツリーから検索して、ＤＯＭツリーから要素を取得できるかどうかを判断し（Ｓ５６９）、ＤＯＭツリーから検索パスが示す要素を取得できなければ（Ｓ５６９：ＮＯ）、検索パスワーク表のカレントテーブルＩＤに対応する子処理完了フラグに「真（Ｔｒｕｅ）」を設定する（Ｓ５７０）。
【００６８】
次にキー要素挿入部１１２は、図３０に示す検索対象階層の設定処理を行う（Ｓ５７１）。図３０に示すように、キー要素挿入部１１２は、検索パスワーク表のカレントテーブルＩＤに対応する子処理完了フラグが「偽（Ｆａｌｓｅ）」である場合には（Ｓ６８１：ＹＥＳ）、検索対象階層に「子」を設定し（Ｓ６８２）、子処理完了フラグが「真」である場合には（Ｓ６８１：ＮＯ）、カレントテーブルＩＤに対応するパスの末尾に付加されているインデックスをインクリメントして（Ｓ６８３）、インデックスをインクリメントしたパスをＤＯＭツリーから検索して要素を取得できるかどうかを判断する（Ｓ６８４）。キー要素挿入部１１２は、ＤＯＭツリーから上記の要素を取得できる場合には（Ｓ６８４：ＹＥＳ）、検索対象階層に「次」を設定し、取得できない場合には（Ｓ６８４：ＮＯ）、検索対象階層に「親」を設定する（Ｓ６８６）。
【００６９】
このようにして検索対象階層を設定した後に、キー要素挿入部１１２は、上述した図２５に示す検索パス設定処理を行い（Ｓ５７２）、設定した検索パスをＤＯＭツリーから検索して要素を取得し、取得した要素を検索要素とする（Ｓ５７３）。
【００７０】
以上説明したように、第２の実施形態の情報処理装置１０は、キー要素を含まないＸＭＬデータのＤＯＭツリーに対して、キー要素を追加することができる。すなわち、全体でひとつのツリー構造となるＸＭＬデータを複数のテーブルに正規化して管理することができる。したがって、リレーショナルデータベースにおいてツリー構造のＸＭＬデータを効率的に管理することができる。
【００７１】
また、第２の実施形態では、キー要素の値として他の要素の値を設定することができる。したがって、例えば商品に付されているコードなど、主キーとして用いることのできる既存の要素がＸＭＬデータに含まれている場合には、それを流用し、確実に一意なキー要素を容易に生成することができる。
【００７２】
また、キー要素挿入部１１２は、各要素について上記の処理を行う間に、処理対象の要素に子の要素が存在する場合には、全ての子の要素についての処理を行ったかどうかを判断している。したがって、ひとつの要素に、同一の名称の子の要素が複数存在する場合にも、子の要素の数をあらかじめ設定することなく、各子要素についてキー要素を挿入することができる。すなわち、１対多の構成となる要素についても対応することができる。
【００７３】
また、第２の実施形態では、キー要素がＸＭＬデータのＤＯＭツリーに含まれていた場合には、値が設定されていればそのまま設定されている値を用いることができる。したがって、一部の要素についてのみ、あらかじめ主キーを設定しておくことができる。
【００７４】
また、第２の実施形態では、画面４０で入力された要素名にテーブルＩＤを連結して実際に挿入するキー要素の要素名としている。したがって、ＸＭＬデータのＤＯＭツリーにおいて、キー要素を要素名を用いて一意に特定することができる。よって、キー要素の管理を要素名のみで行うことが可能となり、キー要素の管理が容易になる。
【００７５】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【００７６】
例えば、第１の実施形態では、主キーは数値であることを前提としていたが、文字列であってもよい。その場合、キー値をインクリメントするのではなく、例えばハッシュ関数を用いて一意な文字列を生成するようにしてもよい。同様に、第２の実施形態において、キー要素のデータ型が文字列（Ｃｈａｒ）である場合に、一意な文字列を生成するようにしてもよい。
【００７７】
また、本実施形態では、子の要素を有する要素（リレーショナルデータベースにおいてテーブルとして利用される要素）のそれぞれについて、主キーとなる要素のみを挿入するものとしたが、外部キーについても挿入するようにすることもできる。その場合、第１の実施形態では、例えば、キー要素挿入部１１２は、処理の対象となっている要素の上位テーブルＩＤをテーブル管理表１５１から取得し、取得した上位テーブルＩＤに対応する要素名及び要素ＩＤをキー管理表１５２から取得し、取得した要素ＩＤに対応するキー値をキー割当値管理表１５３から取得し、取得したキー値を有する上記要素名の要素を生成し、生成した要素を処理対象の要素の子として挿入するようにすることができる。また、第２の実施形態では、例えば、ＤＯＭツリーの挿入処理において、上位キー値を有する上位要素名の要素を生成し、生成した要素を処理対象の要素の子として挿入するようにすることができる。
【００７８】
また、第２の実施形態では、画面４０にテーブルＩＤが入力されるものとしたが、管理データ入力部１２１が各入力データにテーブルＩＤを割り当てるようにしてもよい。この場合、あらかじめ最上位の要素については「０１」を割り当てておき、ある行の入力データの階層と、その入力データの前行の入力データの階層とが異なる場合に、上記割り当てていたテーブルＩＤをインクリメントして、次の要素に割り当てるようにしてもよい。
【図面の簡単な説明】
【００７９】
【図１】情報処理装置１０のハードウェア構成を示す図である。
【図２】情報処理装置１０のソフトウェア構成を示す図である。
【図３】ＸＭＬデータの一例を示す図である。
【図４】ＲＤＢＭＳ１１５が管理するテーブルの構成例を示す図である。
【図５】テーブル管理表１５１の構成を示す図である。
【図６】キー管理表１５２の構成を示す図である。
【図７】キー割当値管理表１５３の構成を示す図である。
【図８】キー要素挿入部１１２によるＸＭＬデータに対するキー要素の挿入処理の流れを示す図である。
【図９】出力ＸＭＬデータの一例を示す図である。
【図１０】出力ＸＭＬデータのＤＯＭツリーをＲＤＢＭＳ１１５のテーブルにデータをインポートする処理の流れを示す図である。
【図１１】第２の実施形態に係る情報処理装置１０のソフトウェア構成を示す図である。
【図１２】第２の実施形態の情報処理装置１０が備えるキー管理表１５２の構成を示す図である。
【図１３】キー属性管理表１６１の構成を示す図である。
【図１４】キー割当値管理表１５３の構成を示す図である。
【図１５】管理データ入力部１２１が情報の入力を受け付ける画面４０の一例を示す図である。
【図１６】画面４０への入力データに基づいてテーブル管理表１５１のレコードを登録する処理の流れを示す図である。
【図１７】テーブル管理表１５１のレコードを登録する処理において用いられる作業用の表であるテーブルワーク表の構成図である。
【図１８】画面４０への入力データに基づいてキー管理表１５２のレコードを登録する処理の流れを示す図である。
【図１９】キー管理表１５２のレコードを処理にいおいて用いられる作業用の表であるキーワーク表の構成図である。
【図２０】画面４０への入力データに基づいてキー属性管理表１６１のレコードを登録する処理の流れを示す図である。
【図２１】処理済ワーク表の構成を示す図である。
【図２２】検索パスワーク表の構成を示す図である。
【図２３】キー値ワーク表の構成を示す図である。
【図２４】第２の実施形態におけるキー要素の挿入処理の流れを示す図である。
【図２５】検索パス設定処理の流れを示す図である。
【図２６】キー要素の生成処理の前半の流れを示す図である。
【図２７】キー要素の生成処理の後半の流れを示す図である。
【図２８】キー値の割り当て処理の流れを示す図である。
【図２９】キー要素のＤＯＭツリーへの挿入処理の流れを示す図である。
【図３０】検索対象階層の設定処理の流れを示す図である。
【符号の説明】
【００８０】
１０    情報処理装置
１０１  ＣＰＵ
１０２  メモリ
１０３  記憶装置
１０４  入力装置
１０５  出力装置
１１１  ＸＭＬデータ入力部
１１２  キー要素挿入部
１１３  ＸＭＬデータ出力部
１１４  ＲＤＢインポート処理部
１１５  ＲＤＢＭＳ
１２１  管理データ入力部
１５１  テーブル管理表
１５２  キー管理表
１５３  キー割当値管理表
１６１  キー属性管理表
２１    薬剤セグメントテーブル
２２    投与ユニットテーブル
４０    画面
【図１】
2007094733.tif 000003
【図２】
2007094733.tif 000004
【図３】
2007094733.tif 000005
【図４】
2007094733.tif 000006
【図５】
2007094733.tif 000007
【図６】
2007094733.tif 000008
【図７】
2007094733.tif 000009
【図８】
2007094733.tif 000010
【図９】
2007094733.tif 000011
【図１０】
2007094733.tif 000012
【図１１】
2007094733.tif 000013
【図１２】
2007094733.tif 000014
【図１３】
2007094733.tif 000015
【図１４】
2007094733.tif 000016
【図１５】
2007094733.tif 000017
【図１６】
2007094733.tif 000018
【図１７】
2007094733.tif 000019
【図１８】
2007094733.tif 000020
【図１９】
2007094733.tif 000021
【図２０】
2007094733.tif 000022
【図２１】
2007094733.tif 000023
【図２２】
2007094733.tif 000024
【図２３】
2007094733.tif 000025
【図２４】
2007094733.tif 000026
【図２５】
2007094733.tif 000027
【図２６】
2007094733.tif 000028
【図２７】
2007094733.tif 000029
【図２８】
2007094733.tif 000030
【図２９】
2007094733.tif 000031
【図３０】
2007094733.tif 000032