JP2005056085A - データ構造変換プログラム - Google Patents

データ構造変換プログラム Download PDF

Info

Publication number
JP2005056085A
JP2005056085A JP2003285304A JP2003285304A JP2005056085A JP 2005056085 A JP2005056085 A JP 2005056085A JP 2003285304 A JP2003285304 A JP 2003285304A JP 2003285304 A JP2003285304 A JP 2003285304A JP 2005056085 A JP2005056085 A JP 2005056085A
Authority
JP
Japan
Prior art keywords
definition
data
update
node
xrm
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2003285304A
Other languages
English (en)
Inventor
Junji Inomata
順二 猪股
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2003285304A priority Critical patent/JP2005056085A/ja
Publication of JP2005056085A publication Critical patent/JP2005056085A/ja
Withdrawn legal-status Critical Current

Links

Images

Abstract

【課題】 構造化文書とRDB上のテーブルとの間で効率よくデータ構造を変換し、これらを柔軟に連携させる。
【解決手段】 構造化文書1a中の処理対象とするノードより下位のノードについて、操作対象とするRDB2内のテーブルとの対応付けを定義したデータ更新定義3aを用いて、構造化文書1a中のルートノードを処理対象に設定し(ステップS2−1)、処理対象に設定されたノードを起点にして、データ更新定義3aにより指示されるノードから繰り返し要素を抽出し(ステップS2−2)、繰り返し要素として抽出されたノードごとに、テーブルに対応付けられた要素内容または属性値を構造化文書1aから抽出して、テーブルの更新を要求する処理を行い(ステップS2−3〜S2−6)、下位ノードからの繰り返し要素の抽出が指定されていた場合には、抽出されていたノードを新たに処理対象としてステップS2−2〜S2−6を実行する。
【選択図】 図1

Description

本発明は、構造化文書とリレーショナルデータベースとの間でデータ構造を変換する処理をコンピュータに実行させることにより、構造化文書により記述されたデータを用いてリレーショナルデータベースを更新する、あるいはリレーショナルデータベースを参照して構造化文書を復元することが可能なデータ構造プログラムに関する。
近年、インターネットのようなネットワーク環境を利用した企業間の電子商取引、いわゆるB2B(Business to Business)が盛んであるが、この電子商取引のようにネットワークを用いたシステムを運用する上で、使用される文書やデータに対する互換性に優れた構造化文書が要求されている。このような構造化文書の中でも特に、XML(eXtensible Markup Language)は、SGML(Standard Generalized Markup Language)の文法定義を簡略化して処理パフォーマンスを向上し、ネットワーク適応性が向上したデータ記述言語として最も注目されている。
また、上記のようなシステムでは、構造化文書により記述されたデータをデータベースに格納する処理、およびデータベースに格納されたデータから構造化文書を復元する処理の効率化が求められている。特に、リレーショナルデータベース(以下、RDBと呼称する)に対してXMLで記述されたデータの格納・復元を行う処理の効率化が求められている。
なお、このような技術に関連して、WebサイトとRDBとを効果的に連携させることが可能な従来の情報処理システムとして、入力される文字列に基づいてWebページの内容を表すXML文書を生成するXML生成部と、Webページの表示形式を表すスタイルシートの候補の中から、XML文書の対応するものを選択し、XML文書の関連付けるスタイル選択部と、生成されたXML文書中の各要素をRDBに登録するとともに、XML文書が編集されたときに、編集内容をRDBに反映させるRDB連携部と、1または2以上のXML文書を格納するXMLデータベースのためのデータベースシステムとして機能するXMLDB制御部とがホスト上に設けられたものがあった(例えば、特許文献1参照)。
特開2002−222181号公報(段落番号〔0094〕〜〔0112〕,第1図)
上述したように、電子商取引のシステム等を実現する場合に、リレーショナルデータベース(以下、RDBと呼称する)に対するXMLデータの格納・復元処理の効率化が求められている。しかし、RDBにおいて正規化により階層構造をなす複数のテーブルに、XMLデータを完全に対応付け、格納・復元の処理を行うプログラムの開発は、一般的に難易度が高い。例えば、やり取りされるXML文書の階層構造と、RDB上の階層構造とに応じて、その都度プログラムを作成する必要があり、しかも階層構造を解析するプログラムは複雑になることから、拡張性が低いことが問題であった。
本発明はこのような課題に鑑みてなされたものであり、構造化文書とRDB上のテーブルとの間で効率よくデータ構造を変換し、これらを柔軟に連携させることが可能なデータ処理プログラムを提供することを目的とする。
本発明では上記問題を解決するために、図1に示すような処理をコンピュータに実行させるデータ構造変換プログラムが提供される。このデータ構造変換プログラムは、構造化文書1aとリレーショナルデータベース(RDB)2との間でデータ構造を変換する処理を実行させるものであり、入力された構造化文書1a中の処理対象とするノードより下位のノードについて、操作対象とするリレーショナルデータベース2内のテーブルとの対応付けを定義したデータ更新定義3aを取得する更新定義取得ステップS1と、入力された前記構造化文書1a中のルートノードを前記処理対象に設定する第1のステップ、前記処理対象に設定されたノードを起点にして、前記データ更新定義3aにより指示されるノードから繰り返し要素を抽出する第2のステップ、前記繰り返し要素として抽出されたノードごとに、前記テーブルに対応付けられた要素内容または属性値を入力された前記構造化文書1aから抽出して、前記テーブルの更新を要求する第3のステップからなる処理を実行し、前記第3のステップの実行中に前記データ更新定義3aにより下位ノードからの繰り返し要素の抽出が指定されていた場合には、前記第3のステップにおいて抽出されていたノードを新たに前記処理対象として前記第2および第3のステップを実行するデータ更新ステップS2とを含む処理を前記コンピュータに実行させることを特徴とする。
このようなデータ構造変換プログラムでは、入力された構造化文書1a中の処理対象とするノードより下位のノードについて、操作対象とするリレーショナルデータベース2内のテーブルとの対応付けを定義したデータ更新定義3aがあらかじめ定義され、このデータ更新定義3aを取得して、データ更新ステップS2が実行されることにより、入力された構造化文書1aにより記述されたデータを用いて、リレーショナルデータベース2が更新される。データ更新ステップS2では、入力された構造化文書1a中のルートノードを処理対象に設定する第1のステップと、処理対象に設定されたノードを起点にして、データ更新定義3aにより指示されるノードから繰り返し要素を抽出する第2のステップと、繰り返し要素として抽出されたノードごとに、テーブルに対応付けられた要素内容または属性値を入力された構造化文書1aから抽出して、テーブルの更新を要求する第3のステップとからなる処理が実行される。これにより、構造化文書1a中の処理対象ノードの下位ノードからデータが抽出され、その抽出データを用いてリレーショナルデータベース2内の対応するテーブルに対するデータ操作が行われる。
また、第3のステップの実行中にデータ更新定義3aにより下位ノードからの繰り返し要素の抽出が指定されていた場合には、第3のステップにおいて抽出されていたノードを新たに処理対象として第2および第3のステップが実行される。このように、データ更新定義3aを用いて第2および第3のステップが再帰的に実行されることにより、構造化文書1a中のより下位の階層からのデータが順次抽出されて、抽出したデータを用いたリレーショナルデータベース2へのデータ操作が行われる。
また、リレーショナルデータベース2の構造や、入力される構造化文書1aが変更された場合には、対応するデータ更新定義3aのみを変更すればよい。
また、本発明のデータ構造変換プログラムでは、図1に示すように、前記リレーショナルデータベース2に対する検索条件の入力を受ける条件入力ステップS3と、出力される構造化文書1bの全体あるいは一部の構造に対応するテンプレートと、前記テンプレートのインスタンス化の際の抽出対象とする前記リレーショナルデータベース2上のパラメータとを含む参照対象テーブル定義が1つ以上記述されたデータ参照定義3bを取得する参照定義取得ステップS4と、前記検索条件および前記参照対象テーブル定義に基づいて前記リレーショナルデータベース2に問い合わせを発行する第4のステップ、前記問い合わせの結果を用いて前記テンプレートをインスタンス化する第5のステップからなる処理を実行し、前記第5のステップの実行中に別の前記参照対象テーブル定義の呼び出しが指定されていた場合には、該当する前記参照対象テーブル定義を用いて前記第4および第5のステップを実行するテンプレート置換ステップS5とを含む処理をさらに前記コンピュータに実行させてもよい。
このような場合、出力される構造化文書1bの全体あるいは一部の構造に対応するテンプレートと、このテンプレートのインスタンス化の際の抽出対象とするリレーショナルデータベース2上のパラメータとを含む参照対象テーブル定義が1つ以上記述されたデータ参照定義3bがあらかじめ定義され、リレーショナルデータベース2に対する検索条件の入力を受けると、このデータ参照定義3bを取得してテンプレート置換ステップS5が実行される。ここで、テンプレート置換ステップS5では、入力された検索条件および参照対象テーブル定義に基づいてリレーショナルデータベース2に問い合わせを発行する第4のステップと、この問い合わせの結果を用いてテンプレートをインスタンス化する第5のステップとからなる処理が実行される。このような処理では、各参照対象テーブル定義を適用することにより、リレーショナルデータベース2上の1つのテーブルから抽出可能なデータを用いてテンプレートのインスタンス化が行われて、このテンプレートに記述された構造化文書1bの全体または一部の要素配列が復元される。
さらに、第5のステップの実行中に別の参照対象テーブル定義の呼び出しが指定されていた場合には、該当する参照対象テーブル定義を用いて第4および第5のステップが実行される。このように、参照対象テーブル定義を用いた処理が再帰的に実行されることにより、リレーショナルデータベース2上の指定されたテーブルから抽出したデータを用いて、各テンプレートが順次インスタンス化されて、構造化文書1bの要素配列が順次復元されていく。
また、リレーショナルデータベース2の構造や、復元する構造化文書1bの構造が変更された場合には、対応するデータ参照定義3bのみを変更すればよい。
本発明のデータ構造変換プログラムによれば、あらかじめ定義されたデータ更新定義を用いて、第2および第3のステップが再帰的に実行されることにより、入力された構造化文書の各階層からデータを抽出し、リレーショナルデータベースに対してデータ操作する処理を、効率的に行うことが可能となる。また、リレーショナルデータベースの構造や、入力される構造化文書の構造が変更された場合には、対応するデータ更新定義のみを変更して、データ更新ステップの処理手順を変更する必要がないため、入力される構造化文書とリレーショナルデータベースの各構造に対する拡張性を高め、これらを柔軟に連携させることが可能となる。
また、条件入力ステップ、参照定義取得ステップ、テンプレート置換ステップおよび文書出力ステップを含む処理をさらに実行させた場合には、参照対象テーブル定義を用いた処理が再帰的に実行されることにより、リレーショナルデータベース内の1つのテーブルから抽出したデータを用いて、構造化文書の全体または一部が順次復元されていくので、このような復元処理が効率化される。また、リレーショナルデータベースの構造や、復元する構造化文書が変更された場合には、対応するデータ参照定義のみを変更して、上記のテンプレート置換ステップおよび文書出力ステップの処理手順を変更する必要がないため、入力される構造化文書とリレーショナルデータベースの各構造に対する拡張性を高め、これらを柔軟に連携させることが可能となる。
以下、本発明の実施の形態を図面を参照して説明する。
図1は、本発明の原理を説明するための原理図である。この図1を用いて、本発明の概要を説明する。
本発明が適用されるデータ構造変換装置は、構造化文書1aの入力を受けて、RDB2に対するデータの格納、削除、修正の操作を行うものである。また、このRDB2からデータを抽出して、構造化文書1bとして復元して出力するものである。構造化文書1aおよび1bは、例えばXMLにより記述されたテキストデータであり、また、RDB2としては、例えば正規化により階層構造をなしている複数のテーブルによって構成されたものを適用することができる。
本発明では、入出力される構造化文書1aおよび1bと、RDB2との間の構造の対応関係を記述したデータ対応定義3をあらかじめ作成しておき、このデータ対応定義3に従って上記の処理を実行する。データ対応定義3は、入力された構造化文書1aに基づいてRDB2を更新する(すなわちデータの格納、削除、修正を行う)際に用いるデータ更新定義3aと、RDB2を参照して構造化文書1bを復元する際に用いるデータ参照定義3bの少なくとも一方を含んでいる。
データ更新定義3aでは、入力された構造化文書1a中の処理対象とするノードより下位のノードについて、操作対象とするRDB2内のテーブルとの対応付けを定義している。例えば、データ更新定義3aは、入力された構造化文書1a中の処理対象とするノードより下位のノードを相対的に指示するルート情報と、そのルート情報により指示されたノードごとに、操作対象とするRDB2内のテーブルに含まれるテーブル名、カラム名、カラムのデータ型等のメタデータを対応付けたテーブル対応付け情報とを含んでいる。このようなデータ更新定義3aを用いることで、構造化文書1a中においてルート情報により指示された各ノードに対して、テーブル関連付け情報に基づいてテーブルの各メタデータとが関連付けられ、各ノードから抽出した要素内容や属性値のRDB2における格納対象を特定することが可能となる。
また、上記のルート情報とテーブル対応付け情報とからなる定義を更新対象要素定義とすると、データ更新定義3aには、複数の更新対象要素定義を記述することができ、かつ各更新対象要素定義には、すべての更新対象要素定義を再帰的に呼び出すための再帰呼び出し情報を記述することが可能となっている。更新対象要素定義を再帰的に呼び出して処理することにより、構造化文書1aの深い階層に記述された要素からデータを抽出し、RDB2内のテーブルに対してデータ操作を行う処理を効率的に行うことが可能となる。
一方、データ参照定義3aには、出力される構造化文書1bの全体あるいは一部の構造に対応するテンプレートと、このテンプレートのインスタンス化の際に抽出対象とするRDB2上のパラメータとを含む参照対象テーブル定義が、1つ以上記述される。各テンプレートには、復元される構造化文書1bの構造が直接記述され、例えば、RDB2から得られるレコードのうちの抽出対象とするカラムの値と、構造化文書1b中の置換すべき要素内容または属性値とが対応付けられている。また、各テンプレートをインスタンス化する際のRDB2上の抽出対象についての情報が、パラメータにより記述される。
さらに、各参照対象テーブル定義には、他の参照対象テーブル定義の呼び出しを指定することも可能となっている。このような参照テーブル定義に従って処理を実行すると、指定された他の参照対象テーブル定義を呼び出して再帰的に処理することができ、RDB2内の指定されたテーブルから抽出したデータを用いて、出力する構造化文書1bを復元する処理を効率的に行うことが可能となる。
次に、上記のデータ構造変換装置における基本的な処理について説明する。
〔データ更新処理〕
まず、RDB2に対してデータを格納する処理について、図中のステップ番号に従って説明する。
構造化文書1aが入力されると、まず、これに対応するデータ更新定義3aを取得する更新定義取得ステップS1を実行する。そして、取得したデータ更新定義3aに従って、データ更新ステップS2を実行する。
データ更新ステップS2では、ステップS2−1において、入力された構造化文書1a中のルートノードを処理対象に設定する。そして、ステップS2−2において、ステップS2−1で処理対象に設定されたノードを起点にして、取得したデータ更新定義3aによって指示されるノードから繰り返し要素を抽出する。ここでは、構造化文書1aのルートノードより1つ下位のノードから、データ更新定義3aの各更新対象要素定義のルート情報にマッチする繰り返し要素がすべて抽出される。そして、ステップS2−3〜S2−6のループ処理が実行される。
ステップS2−3では、ステップS2−2で繰り返し要素として抽出されたノードごとに、RDB2上のテーブルに対応付けられた要素内容または属性値を、入力された構造化文書1aから抽出する。そして、抽出された要素内容または属性値が、テーブル対応付け情報により対応付けられたテーブルに格納されるように、RDB2に対する操作要求を発行する。これにより、構造化文書1aの該当するノードから抽出された数値や文字列が、RDB2上の対応するテーブルに格納される。
ここで、ステップS2−4において、ステップS2−3で処理中に下位ノードからの繰り返し要素の抽出が指定されているか否かを判断する。この判断は、ステップS2−2および2−3で用いられていた更新対象要素定義において再帰呼び出し情報が記述されているか否かによって行われ、再帰呼び出し情報が指定されていた場合のみ、ステップS2−5に進む。ステップS2−5では、ステップS2−3で抽出されていたノードを新たに処理対象として設定し、データ更新定義3aを再び適用してステップS2−2〜S2−6の処理を実行する。これにより、構造化文書1aのより下位のノードから、各更新対象要素定義のルート情報にマッチする繰り返し要素がすべて抽出され、その要素内容や属性値がテーブル対応付け情報に基づくテーブルに格納される。構造化文書1aの階層が深い場合は、このような再帰的な処理が繰り返されることで、各階層から要素内容や属性値が順次抽出され、対応するテーブルのカラムに格納される。
また、ステップS2−3〜S2−6までのループ処理は、ステップS2−2において抽出された繰り返し要素のすべてに対する処理が終了するまで続けられる。これにより、構造化文書1aに含まれるすべてのデータが抽出されて、RDB2に格納される。
なお、構造化文書1aの入力を受けて、RDB2内のデータを削除する場合には、ステップS2−2の処理の後に、まず繰り返し要素抽出の指定に対する判断(ステップS2−4に該当)を行って、より下位の階層に対する処理を実行した後に、上位のデータ抽出およびテーブル更新(ここでは削除)要求を行う処理(ステップS2−3に該当)を実行する。これにより、テーブルの下位レコードから順にデータの削除が行われる。データ削除処理では、構造化文書1aからの抽出値により、プライマリキーとされたカラムの値を指定して、対応するレコードを削除する。
また、RDB2内のデータを更新する場合には、まず該当するレコードの削除を行った後に、あらためてデータの格納処理を行えばよい。
〔データ参照処理〕
次に、RDB2のデータを参照して構造化文書1bを復元する処理について説明する。
まず、検索条件入力ステップS3を実行し、ユーザから検索条件が入力される。検索条件としては、データ参照定義3b中の参照対象テーブル定義において記述されたパラメータを指定する情報とその値、および、最初に適用する参照対象テーブル定義を指定する情報が入力される。
次に、参照定義取得ステップS4により、データ参照定義3bを取得し、テンプレート置換ステップS5を実行する。テンプレート置換ステップS5では、ステップS5−1〜S5−5のループ処理が実行される。
ステップS5−1において、入力された検索条件と、取得したデータ参照定義3b中の参照対象テーブル定義とに基づいて、RDB2に対して問い合わせを発行する。ここではまず、検索条件により指定された参照対象テーブル定義を適用して、これに記述されたパラメータと入力された検索条件とから、抽出対象とするRDB2上のテーブルとパラメータを指定し、問い合わせを発行する。
この問い合わせに対する結果がRDB2から出力されると、ステップS5−2において、問い合わせの結果を用いて参照対象テーブル定義中のテンプレートをインスタンス化する。テンプレートでは、RDB2から得られるレコードのうち抽出対象とするテーブルのカラムと、復元する構造化文書1b中の要素内容や属性値とが対応付けられているので、得られたレコードによりテンプレートの対応する要素内容や属性値が置換され、構造化文書1bが順次復元される。
ここで、ステップS5−3において、ステップS5−2で用いられた参照対象テーブル定義中に、他の参照対象テーブル定義の呼び出しが指定されているか否かを判断し、指定されていた場合のみステップS5−4に進む。ステップS5−4では、呼び出された参照対象テーブル定義に従って、ステップS5−1〜S5−5の処理を実行する。これにより、RDB2から抽出したデータを用いて各テンプレートで指定された要素内容や属性が順次インスタンス化される。テンプレートには、出力する構造化文書1bの全体または一部がそのまま記述されるので、このような処理により構造化文書1bの要素配列を効率的に復元していくことができる。
以上の処理により、入力された構造化文書1aの各階層からデータを抽出し、RDB2内のテーブルに対してデータ操作する処理、および、これらのテーブルからレコードを抽出し、テンプレートをインスタンス化して構造化文書1bを復元する処理を効率化することができる。データ参照定義3aおよびデータ更新定義3bにおいて、指定したテーブルおよびそのカラムと入出力対象の構造化文書1aおよび1bの属性および要素とが対応付けられるので、例えば、RDB2が正規化により階層構造をなすテーブルから構成されている場合等、RDB2のテーブル構造が複雑な場合や、入出力対象の構造化文書1aおよび1bの階層構造が深い場合にも、テーブルと構造化文書との間でデータを容易にマッピングすることができる。
また、上記のデータ構造変換装置では、データ対応定義3を用いてRDB2の更新処理、およびRDB2の参照処理が行われるが、これらの処理を行う処理エンジン(例えば、コンピュータ上で実行される処理プログラム)は、データ対応定義3を参照して、これに従って処理を実行するものである。従って、RDB2のテーブル構造や、入力される構造化文書1a、復元する構造化文書1bの各構造が変更された場合は、この変更に応じて使用するデータ対応定義3を変更すればよく、処理エンジン自体を変更する必要はない。また、異なる構造を有する構造化文書1aが入力される、あるいは異なる構造の構造化文書1bを復元する場合には、それらに応じたデータ対応定義3をそれぞれ作成して、共通の処理エンジンに対して適用すればよい。従って、RDB2の構造変更や、入出力対象の構造化文書1aおよび1bのバリエーションに応じて、各構造の対応関係と処理手順とを個別のプログラムとして作成していた従来の手法と比較して、仕様変更に対する対応が容易になり、低コストで拡張性の高いRDBシステムを構築することが可能となる。
なお、データ構造変換装置は、RDB2に対するデータの更新機能と、RDB2を参照して構造化文書1bを復元する機能のうち、いずれか一方を備えるようにしてもよい。RDB2の更新機能のみ備える場合には、入力される構造化文書1aとRDB2の各構造に応じた1種類以上のデータ更新定義3aを用意しておく必要がある。また、同様に、RDB2の参照機能のみ備える場合には、RDB2と復元する構造化文書1bの各構造に応じた1種類以上のデータ参照定義3bを用意しておく必要がある。
次に、本発明の具体的な実施の形態例について説明する。
図2は、本発明を適用可能なデータベースサービスシステムのシステム構成を示す図である。
図2に示すデータベースサービスシステムは、データベースサーバ100と、複数のクライアント201〜203とが、ネットワーク300を通じて接続された構成を有している。データベースサーバ100は、正規化により階層構造をなす複数のテーブルを具備するRDBを備えており、各クライアント201〜203は、ネットワーク300を通じて、RDBに対するデータの格納、削除、修正を行う機能と、RDBのデータを参照する機能の一方または双方を有している。また、データベースサーバ100と、各クライアント201〜203との間では、XML文書によりネットワーク300を通じたデータのやり取りが行われるものとする。
例えば、ネットワーク300を通じて電子文書を用いた電子商取引が行われる場合を想定すると、商品の注文を受ける側の企業サーバの一部として設けられたデータベースサーバ100に対して、クライアント201〜203からXML文書により商品の注文が行われ、データベースサーバ100には、商品や注文、発送等についての情報が格納される。この場合、データベースサーバ100側では、受信したXML文書の構造を解析してデータを抽出し、対応するテーブルに対する操作ができるようなデータ構造に変換する処理が行われる。また、各クライアント201〜203は、注文対象となる商品やすでに注文した商品等についての情報をデータベースサーバ100から抽出して、XML文書として受け取ることができる。この場合、データベースサーバ100側では、RDBから抽出したデータを出力するXML文書に格納できるようなデータ構造に変換する処理が行われる。
ここで、各クライアント201〜203とデータベースサーバ100との間で送受信されるXML文書の構造が統一されていない場合が考えられる。例えば、各クライアント201〜203の側において、注文した商品や過去の取引等のデータを格納した独自のデータベースが使用されている場合に、構造の異なるこれらのデータベースの形式に合致した階層構造を有するXML文書がそれぞれ使用されることが考えられる。また、各クライアント201〜203の側で、データベースサーバ100内の同一RDBに対して操作や参照の必要なテーブルやカラムが異なる場合には、入出力されるXML文書の構造もそれぞれ異なることになる。さらに、これらのXML文書の構造や、データベースサーバ100のテーブル構造が変更される場合も考えられる。このような場合に対して、本発明を適用することにより、データベースサーバ100側における上記のようなデータ構造変換機能を柔軟に対応させ、その拡張性を高めることができる。
図3は、本発明の実施の形態に係るデータベースサーバ1のハードウェア構成例を示す図である。
図3に示すように、データベースサーバ100は、CPU(Central Processing Unit)101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィック処理部104、入力I/F(インタフェース)105および通信I/F106によって構成され、これらはバス107を介して相互に接続されている。
CPU101は、データベースサーバ100全体に対する制御をつかさどる。RAM102は、CPU101に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。HDD103には、OS(Operating System)やアプリケーションプログラム、各種データが格納される。
グラフィック処理部104には、モニタ104aが接続されている。このグラフィック処理部104は、CPU101からの命令に従って、モニタ104aの画面上に画像を表示させる。入力I/F105には、キーボード105aやマウス105bが接続されている。この入力I/F105は、キーボード105aやマウス105bからの信号を、バス107を介してCPU101に送信する。通信I/F106は、ネットワーク300に接続され、このネットワーク300を介して、クライアント201〜203等の他のコンピュータとの間でデータの送受信を行う。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
次に、上記のデータベースサーバ100の処理機能について説明する。
図4は、本発明の実施の形態に係るデータベースサーバ100の機能を示すブロック図である。
図4に示すように、データベースサーバ100は、データ構造変換部110と、データベース部120とから構成されている。データ構造変換部110は、RDB更新処理部111、XML復元処理部112、および対応定義記憶部113によって構成されている。また、データベース部120は、RDBMS(RDB Management System)121、およびRDB122によって構成されている。
RDB更新処理部111は、対応定義記憶部113に記憶されたXML−RDB対応定義130を参照して、ネットワーク300を通じて入力されたXML文書141からデータを抽出し、データベース部120にテーブルの内容を更新させるためのSQL(Structured Query Language)文を発行する。XML復元処理部112は、ネットワーク300を通じてユーザからの要求を受けると、対応定義記憶部113に記憶されたXML−RDB対応定義130を参照して、データベース部120に問い合わせを行い、その結果を用いてXML文書142を復元し、ユーザに対して出力する。対応定義記憶部113は、入出力対象のXML文書141および142の構造と、データベース部120内のRDB122上の対応するテーブルとの対応関係が記述されたXML−RDB対応定義130を1つ以上記憶している。
RDBMS121は、RDB122を管理する機能を有し、データ構造変換部110からのSQL文を解析して、RDB122のテーブルを操作する処理や、RDB122からデータを抽出してデータ構造変換部110に出力する処理を行う。
なお、データ構造変換部110とデータベース部120とを、別のコンピュータ装置に設け、これらの間で通信ケーブルを通じて情報の送受信が行われるようにしてもよい。
ここで、XML−RDB対応定義130は、入出力対象のXML文書141および142とRDB122の各構造の対応関係が定義されたものであり、実際の処理手順が記述されるものではない。また、RDB更新処理部111およびXML復元処理部112は、XML−RDB対応定義130の記述を解釈し、この記述に応じた処理を行う処理エンジンとして機能する。RDB更新処理部111およびXML復元処理部112の処理機能は、実際には、このような処理手順を記述した処理プログラムが、CPU101によって実行されることにより実現される。
また、例えば、異なる文書構造のXML文書141および142が入出力対象とされた場合には、それらに応じた数だけのXML−RDB対応定義130が対応定義記憶部113に用意される。また、RDB122内のテーブル構造が変更された場合には、すべてのXML−RDB対応定義130が変更される。そして、RDB更新処理部111では、入力されたXML文書141に対応するXML−RDB対応定義130を用いて処理が行われ、同様に、XML復元処理部112でも、出力されるXML文書142に対応するXML―RDB対応定義130を用いて処理が行われる。
以下、XML−RDB対応定義130を、XMLを用いたテキストデータとして記述した場合を例に挙げて説明する。
図5は、XML−RDB対応定義のデータ構造を概略的に示す図である。なお、図5に示すXML−RDB対応定義では、入出力対象のXML文書141および142と区別するために、すべてのタグが“xrm”にバインドされた名称の空間に属するようにしている。
図5に示す1つのXML−RDB対応定義「xrm:definitions」は、XML文書141を用いてRDB122を更新する際に使用するデータ更新定義「xrm:update−def」と、RDB122を参照してXML文書142を復元する際に使用するデータ参照定義「xrm:query−def」のうち、少なくとも一方を具備している。更新時に入力されるXML文書141と、復元されるXML文書142の構造が同じ場合には、基本的にデータ更新定義「xrm:update−def」とデータ参照定義「xrm:query−def」が1組ずつ記述される。
データ更新定義「xrm:update−def」には、1つ以上の更新対象要素定義「xrm:update」が記述される。更新対象要素定義「xrm:update」では、入力されるXML文書141とRDB122上のテーブルとの対応が定義されており、その属性として、入力されたXML文書141中の処理対象としているノード(カレントノードと呼称する)を起点として、その下位ノードから更新対象要素定義「xrm:update」の適用対象とする繰り返しノードを抽出するためのルート情報が、XPath式を用いたパス情報として記述される。
更新対象要素定義「xrm:update」には、1つ以上の更新対象テーブル定義「xrm:table」が記述される。また、更新対象要素定義「xrm:update」の要素として、更新対象要素定義「xrm:update」を再帰的に呼び出すための更新対象要素呼び出し「xrm:call−update」を記述することができる。
更新対象テーブル定義「xrm:table」では、更新対象とするRDB122上のテーブルの情報とそのテーブルが持つカラムの情報が定義されており、その属性としてテーブル名が記述される。更新対象要素定義「xrm:update」内に複数の更新対象テーブル定義「xrm:table」が記述されることにより、パス情報に適合したXML文書141中のノードに対して、RDB122上の複数のテーブルを対応付けることが可能となる。
また、更新対象テーブル定義「xrm:table」には、1つ以上の更新対象カラム定義「xrm:column」が記述される。更新対象カラム定義「xrm:column」では、更新対象とするカラムのメタデータ(カラム名、データ型、プライマリキーであるか否かを示す情報)と、カラムへ設定する値の取得元を指定するパス情報が定義される。カラムのメタデータは属性として記述され、パス情報はXPath式により記述される。また、カラムに設定可能なデータ型としては、単一の数値や文字列の他、LOB(Large Object)を適用することも可能となっている。
一方、データ参照定義「xml:query−def」には、1つ以上の参照対象テーブル定義「xrm:query」が記述される。参照対象テーブル定義「xrm:query」では、参照処理時に発行するSQL文を構成するために必要な情報として、参照するRDB122上のテーブルの情報や、キーとするパラメータ、復元するXML文書142のテンプレートが定義される。この参照対象テーブル定義「xrm:query」は、属性として、その名前と、発行するSQL文のWHERE句を指定するためのパラメータの値(パラメータ付きクエリと呼称する)が1つ以上記述され、その要素には、パラメータリスト「xrm:params−in−where」とテンプレート定義「xrm:template」とが1つずつ記述される。
パラメータリスト「xrm:params−in−where」では、参照対象テーブル定義「xrm:query」において指定されたWHERE句の各パラメータに値を設定する方法が定義されており、パラメータの数だけパラメータ定義「xrm:param」が記述される。パラメータ定義「xrm:param」では、SQL文を発行する際に指定するパラメータの名前、インデックス、データ型が、それぞれ属性として定義される。
また、テンプレート定義「xrm:template」では、RDB122に対する問い合わせに応じて得られたレコードごとに、置換すべきXML文書142中の要素や属性を記述したテンプレートが定義される。従って、テンプレート定義「xrm:template」の内容がインスタンス化されることで、出力するXML文書142が復元される。テンプレート定義「xrm:template」では、その要素として、テンプレート内の要素に付与する属性や、置換する値の取得元のカラムあるいはパラメータを指定する情報(カラム名、パラメータ名、データ型)を記述することができる。このデータ型としては、単一の数値や文字列の他、LOBを指定することも可能となっている。
また、テンプレート定義「xrm:template」では、他の参照対象テーブル定義「xrm:query」を再帰的に呼び出すための参照対象テーブル呼び出し「xrm:call−query」を1つだけ記述することもできる。参照対象テーブル呼び出し「xrm:call−query」では、呼び出す参照対象テーブル定義「xrm:query」の名前が、属性として指定される。
なお、以下の説明では、XML−RDB対応定義「xrm:definitions」中に、更新対象要素定義「xrm:update」、更新対象テーブル定義「xrm:table」、更新対象カラム定義「xrm:column」、参照対象テーブル定義「xrm:query」、パラメータ定義「xrm:param」が記述される個数を、それぞれUE、UT、UC、QT、QPと表すことにする。
次に、RDB更新処理部111におけるXML−RDB対応定義を用いたRDB122に対するデータ更新処理の流れについて説明する。はじめに、RDB122に対するデータの格納および削除の処理について、フローチャートを用いて説明する。
図6は、RDB122に対するデータの格納および削除を行う際の更新定義適用処理の全体の流れを示すフローチャートである。
図6の処理は、ネットワーク300を通じて、RDB更新処理部111に対してXML文書141が入力されると、開始される。このとき、入力されたXML文書141に応じたXML−RDB対応定義が指定されて、これを随時参照しながら処理が実行される。また、XML文書141とともに、引数として格納処理または削除処理を指定するフラグが入力される。
ステップS601〜S605のメインループでは、データ更新定義「xrm:update−def」に記述された更新対象要素定義「xrm:update」の数(UE)だけ繰り返し実行される。すなわち、記述された更新対象要素定義「xrm:update」をそれぞれ順次適用して、ステップS601〜S605の処理を繰り返し実行する。
ステップS602において、データの格納処理と削除処理のどちらが指定されているか判定する。格納処理が指定されている場合は、ステップS603に進み、データを格納するための更新対象要素定義「xrm:update」の適用処理(図7に記述)を実行する。また、削除処理が指定されている場合は、ステップS604に進み、データを削除するための更新対象要素定義「xrm:update」の適用処理(図9に記述)を実行する。
図7は、データを格納するための更新対象要素定義適用処理(図6のステップS603に対応)の流れを示すフローチャートである。
ステップS701では、カレントノードを起点として、その子要素の中から、更新対象要素定義「xrm:update」の属性(後述する「for−each」)に記述されたパス情報に適合する要素の配列を抽出する。初期状態では、カレントノードは、入力されたXML文書141のルートノードに設定される。また、抽出された要素数をNに設定する。
ステップS702〜S708のループは、パス情報に適合した要素配列のそれぞれに対して順次実行される。さらに、ステップS703〜S705のループでは、適合した要素配列に対して、適用中の更新対象要素定義「xrm:update」に記述された更新対象テーブル定義「xrm:table」を順次適用して、ステップS704のデータ格納のための更新対象テーブル定義適用処理を繰り返し実行する。すなわち、ステップS704の処理は、適用中の更新対象要素定義「xrm:update」に記述された更新対象テーブル定義「xrm:table」の数(UT)だけ繰り返し実行される。
次に、ステップS706では、適用中の更新対象要素定義「xrm:update」の中に、更新対象要素呼び出し「xrm:call−update」があるか否かを判断し、ある場合はステップS707に進み、ない場合はステップS708のループ終端に進む。
ステップS707では、更新対象要素呼び出し「xrm:call−update」に基づいて、図6に示した更新定義適用(格納)処理(ステップS601〜S603,S605)を再帰的に実行する。この処理では、S702〜S708のループでパス情報に適合するとして抽出されている要素をカレントノードに設定(ステップS701に対応)して、これらにすべての更新対象要素定義「xrm:update」を順次適用する。これにより、入力されたXML文書141中のさらなる下位ノードから、更新対象要素定義「xrm:update」のパス情報に適合する要素が抽出されて、処理が実行される。処理の終了後、ステップS708のループ終端に進む。
次に、図8は、データを格納する際の更新対象テーブル定義適用処理(図7のステップS704に対応)の流れを示すフローチャートである。
図8に示す更新対象テーブル定義適用処理では、更新対象テーブル定義「xrm:table」のそれぞれを適用して、XML文書141中の要素または属性の値を、対応するRDB122上のテーブルに格納するためのSQL文を、データベース部120に対して発行する。
ステップS801では、まず、発行するSQL文として、命令“INSERT INTO”と、その対象として、更新対象テーブル定義「xrm:table」の属性に記述されたテーブル名とを記述する。
ステップS802〜S804のループでは、更新対象テーブル定義「xrm:table」の要素に記述された更新対象カラム定義「xrm:column」のそれぞれの属性からカラム名を順次抽出して、ステップS801で記述したSQL文に順次追加する。なお、ステップS803では、更新対象カラム定義「xrm:column」が複数記述されていた場合には、元のSQL文に“,”を追加後、カラム名を追加する。
そして、ステップS805では、生成されたSQL文に、カラムに格納すべきデータを指定するための予約語を記述する。具体的には、“)VALUES(”と追加する。
ステップS806〜S812のループは、更新対象テーブル定義「xrm:table」の要素に記述された更新対象カラム定義「xrm:column」の数(UC)だけ実行される。
ステップS807では、処理中の更新対象カラム定義「xrm:column」の要素内容(「xrm:from−xpath」とする)に記述された値取得元のパス情報(後述する属性「xpath」)に基づいて、その要素を起点に値取得元をXML文書141から特定し、テーブルに設定する設定値とする。
ステップS808では、処理中の更新対象カラム定義「xrm:column」の属性から、カラムに格納するデータ型を判断し、LOBが指定されていた場合にはステップS809に進み、それ以外が指定されていた場合にはステップS810に進む。
ステップS809では、ステップS807で設定した設定値をその要素配下のサブツリーとし、設定値が例えばプログラムや画像・音声データ等の場合はバイナリデータ(BLOBの場合、BLOB:Binary LOB)に、例えばXML文書の要素配列等の場合は文字列(CLOBの場合、CLOB:Character LOB)にシリアライズする。また、ステップS810では、ステップS807で設定した設定値を文字列として評価し、データ型に応じた編集を行う。そして、ステップS811において、設定値をSQL文に追加し、1つの更新対象カラム定義「xrm:column」を適用した処理が終了する。
ステップS813において、予約語“VALUES”の句を終端させてSQL文を完成させ、ステップS814において、このSQL文をデータベース部120に発行する。これにより、1つのノードに対して1つの更新対象テーブル定義「xrm:table」を適用したテーブルへのデータ格納が行われる。
そして、以上の処理が、記述された更新対象テーブル定義「xrm:table」の数(UT)だけ実行され(ステップS703〜S705)、さらにこれらの処理が、カレントノード配下の適合ノードに対してそれぞれ実行され(ステップS702〜S708)、さらにこれらの処理が、すべての更新対象要素定義「xrm:update」を順次適用して実行される(ステップS601〜S603,S605)。これにより、XML文書141のすべてのノードに対して更新対象要素定義「xml:update」が適用されて、すべてのデータが抽出され、RDB122内に格納される。
例えば、XML文書の階層構造が深い場合には、更新対象要素呼び出し「xrm:call−update」を用いた再帰処理の回数が増加していくことになり、RDB122側のテーブルの階層が深い等、テーブル構造が複雑な場合には、各更新対象要素定義「xrm:update」に記述される更新対象テーブル定義「xrm:table」の数が増加することになる。
次に、RDB122内のデータを削除する場合の処理について説明する。図9は、データを削除するための更新対象要素定義適用処理(図6のステップS604に対応)の流れを示すフローチャートである。
上述したデータを格納する処理では、更新対象要素定義「xrm:update」の適用時に、まず上位のノードに対して更新対象テーブル定義「xrm:table」を順次適用し、その後に更新対象要素呼び出し「xrm:call−update」に基づいて再帰的な処理を行うことで、RDB122上では親側のレコードからデータが格納されていた。これに対し、データを削除する場合には、更新対象要素呼び出し「xrm:call−update」を先に適用することにより、子側のレコードからデータの削除を行っていく。
ステップS901では、カレントノードを起点として、その子要素の中から、更新対象要素定義「xrm:update」の属性(後述する「for−each」)に記述されたパス情報に適合する要素の配列を抽出する。初期状態では、カレントノードは、入力されたXML文書141のルートノードに設定される。また、抽出された要素数をNに設定する。
ステップS902〜S908のループは、パス情報に適合した要素配列のそれぞれに対して順次実行される。ここで、更新対象テーブル定義「xrm:table」の適用の前に、ステップS903において、更新対象要素呼び出し「xrm:call−update」が記述されているか否かを判断する。記述されている場合はステップS904に進み、記述されていない場合はステップS905に進む。
ステップS904では、図6に示した更新定義適用(削除)処理(ステップS601〜S602、S604〜S605)を再帰的に実行する。この処理では、S902〜S908のループで抽出されている要素をカレントノードに設定(ステップS901に対応)して、これらにすべての更新対象要素定義「xrm:update」を順次適用する。これにより、入力されたXML文書141中のさらなる下位ノードから、更新対象要素定義「xrm:update」のパス情報に適合する要素が抽出されて、処理が実行される。処理の終了後、ステップS905に進む。
ステップS905〜S907のループでは、ステップS901でパス情報に適合した要素配列に対して、更新対象テーブル定義「xrm:table」を順次適用して、ステップS906のデータ削除のための更新対象テーブル定義適用処理を繰り返し実行する。すなわち、ステップS906の処理は、適用中の更新対象要素定義「xrm:update」に記述された更新対象テーブル定義「xrm:table」の数(UT)だけ繰り返し実行され、処理終了後に、ステップS908のループ終端に進む。
次に、図10は、データを削除する際の更新対象テーブル定義適用処理(ステップS906に対応)の流れを示すフローチャートである。
図10示す更新対象テーブル定義適用処理では、更新対象テーブル定義「xrm:table」のそれぞれを適用して、XML文書141中の要素または属性に対応するRDB122上のレコードを削除するためのSQL文を、データベース部120に対して発行する。
ステップS1001では、発行するSQL文として、命令“DERETE FROM”を記述し、その対象として、更新対象テーブル定義「xrm:table」の属性に記述されたテーブル名を追加し、さらに削除対象のレコードを指定するための“WHERE”を追加する。
ステップS1002〜S1006のループは、更新対象テーブル定義「xrm:table」の要素に記述された更新対象カラム定義「xrm:column」の数(UC)だけ実行される。
ステップS1003では、更新対象とするカラムの名前を更新対象カラム定義「xrm:column」から取得し、その属性からこのカラム名がプライマリキーであるか否かを判断する。プライマリキーである場合はステップS1004に進み、そうでない場合はステップS1006のループ終端に進む。データを削除する場合は、テーブルのメタデータのうちプライマリキーとその値を利用することにより、削除するレコードの条件を指定する。
ステップS1004では、処理中の更新対象カラム定義「xrm:column」の要素内容(「xrm:from−xpath」)に記述された値取得元のパス情報(後述する属性「xpath」)に基づいて、その要素を起点に値取得元をXML文書141から特定し、テーブルに設定する設定値とする。そして、その設定値を文字列として評価し、指定されたデータ型に応じた編集を行う。
ステップS1005では、SQL文に、更新対象カラム定義「xrm:column」の属性で指定されたカラム名を追加し、さらにステップS1004で編集された設定値を追加する。これにより、プライマリキーで指定されたカラムに関係するレコードをすべて削除するSQL文が生成される。なお、ステップS1005では、更新対象カラム定義「xrm:column」が複数記述されていた場合には、元のSQL文に“AND”を追加後、設定値を追加する。
そして、ステップS1002〜S1006の処理がすべての更新対象カラム定義「xrm:column」について実行された後、ステップS1007において、生成されたSQL文をデータベース部120に対して発行する。以上の処理により、“WHERE”句で指定されたレコードが削除される。
なお、データの削除を行う場合には、削除したいXML文書の識別等を含む条件を指定することも可能である。この場合は、後述するデータ参照処理により、該当するXML文書を一旦抽出し、そのXML文書を上記のデータ削除処理に用いて処理することで、実現される。
また、RDB122上のデータの修正を行う場合には、該当するXML文書を用いて上記のデータ削除処理を行い、テーブル上のレコードを一旦削除した後、新規のデータを記述したXML文書を用いてデータ格納処理を行うことで、テーブル上のデータの入れ替えを行うことが可能となる。
次に、RDB122上のデータを参照してXML文書142を復元する処理について説明する。図11は、データ参照処理全体の流れを示すフローチャートである。
ステップS1101では、最初に適用させる参照対象テーブル定義「xrm:query」の名前を識別する情報と、参照対象を指定するためのパラメータの名前およびその値とを受信する。これらの情報は、クライアント201〜203のいずれかにおいてユーザによって入力され、ネットワーク300を通じて送信される。
ここで、受信したパラメータ名とその値のペアの集合を、パラメータマップとして保持する。また、最初に適用させる参照対象テーブル定義「xrm:query」では、参照対象を指定するパラメータとしてプライマリキーが指定されている必要がある。
ステップS1102では、ユーザに返却するドキュメント(XML文書142)として、空のドキュメントを設定する。
ステップS1103では、ステップS1101で指定された参照対象テーブル定義「xrm:query」を適用する処理を実行する。
ステップS1104では、ステップS1103の処理結果を用いて、返却用ドキュメントを返す。すなわち、復元されたXML文書142を、ネットワークを通じて送信する。
図12は、参照対象テーブル適用処理(ステップS1103に対応)の流れを示すフローチャートである。
ステップS1201〜S1203のループは、適用する参照対象テーブル定義「xrm:query」中のパラメータリスト「xrm:params−in−where」に記述されたパラメータ定義「xrm:param」の数、すなわち指定されるパラメータ名の数だけ実行される。
ステップS1202では、各パラメータ定義「wrm:param」の属性に記述されたパラメータ名に対応する値をパラメータマップから順次取得し、属性に記述されたデータ型に応じた編集を行う。そして、その結果を、適用中の参照対象テーブル定義「xrm:query」の属性に記述されたパラメータ付きクエリに、パラメータ定義「wrm:param」中のインデックスを指定して設定する。これにより、SQL文の“WHERE”句にセットする値が確定する。
そして、ステップS1204において、適用する参照対象テーブル定義「xrm:query」の属性に記述されたテーブル名を参照対象のテーブルとして指定し、さらに、テンプレート定義「xrm:template」で指定されたカラム名を用いて問い合わせのSQL文を生成し、データベース部120に発行する。
この問い合わせの結果、抽出されたレコードを受信すると、ステップS1205〜S1207のループはそのレコード(結果セット)の数だけ実行される。ステップS1206では、テンプレート定義「xrm:template」をインスタンス化してXML文書142を復元するテンプレート復元処理が実行される。従って、このステップS1206の処理は、テンプレート内の要素内容や属性がすべての結果セットにより置換されるまで繰り返し実行されることになる。
図13は、テンプレート復元処理(ステップS1206に対応)の流れを示すフローチャートである。
図13の処理は、テンプレート定義「xrm:template」中のノードを順に辿って、そのノードの記述に対応する処理を実行していくことにより行われる。従って、ステップS1301では、適用対象のノードの記述を参照する。そして、そのノードが抽出対象のカラムを指定する要素内容(「xrm:from−column」とする)である場合はステップS1310に進み、抽出対象のパラメータを指定する要素内容(「xrm:from−param」とする)である場合はステップS1313に進み、参照対象テーブル呼び出し「xrm:call−query」である場合はステップS1314に進み、それ以外である場合はステップS1302に進む。
ステップS1302では、適用対象となっているノードを複写して、結果格納用ノードに追加する。ここで、結果格納用ノードは、復元されるXML文書142中の1つのノードを構成する。
ステップS1303では、適用対象のノードの種類を判定し、要素が記述されていた場合はステップS1304に進む。また、テキストノードであれば、このテキストデータがXML文書142にそのまま記述されるため、処理を終了する。
ステップS1304では、適用対象ノードの子ノードを参照し、ステップS1304〜S1309のループをその子ノードの数だけ実行する。初期状態では、抽出したうちの最初の子ノードを適用対象とする。
ステップS1305では、適用対象とした子ノードが、復元するXML文書142の対象要素の属性を指定するための属性指定の要素(後述する「xrm:attribute」)であるか否かを判断し、属性指定である場合はステップS1306に進み、そうでない場合はステップS1308に進む。
ステップS1306では、ステップS1302で追加された結果格納用ノードの対象要素に、データを格納すべき属性を追加する。そして、ステップS1307では、そのノードの要素内容に従って、図13に示すテンプレート復元処理を再帰的に実行する。実行後にステップS1309のループ終端に進む。
一方、適用対象のノードが属性指定でない場合は、ステップS1308において、そのノードの要素内容に従って、図13に示すテンプレート復元処理を再帰的に実行し、実行後にステップS1309のループ終端に進む。
また、ステップS1310では、抽出対象のカラムを指定する要素内容(「xrm:from−column」)に基づき、指定されたカラムからの抽出値で置換される要素内容または属性のデータ型を判断する。データ型としてLOBが指定されていた場合にはステップS1311に進み、それ以外(例えば単一の数値や文字列)が指定されていた場合はステップS1312に進む。
ステップS1311では、抽出対象のカラムを指定する要素内容「xrm:from−column」に基づき、指定されたカラム名に対応するデータを結果セットから1つ取得して、テンプレートに基づくXML文書の要素としてパースし、結果格納用ノードに追加する。ここで、取得されるデータは、例えば、XML文書の要素配列等を示すテキストデータ(CLOBの場合)や、プログラムや画像・音声データ等のバイナリデータ(BLOBの場合)等が適用される。
一方、ステップS1312では、抽出対象のカラムを指定する要素内容「xrm:from−column」に基づき、指定されたカラム名に対応するデータを結果セットから取得して、テキストノードに変換し、結果格納用ノードに追加する。
また、ステップS1313では、抽出対象のパラメータを指定する要素内容(「xrm:from−param」)に基づき、指定されたパラメータ名に対応するデータを結果セットから1つ取得して、結果格納用ノードに追加する。
また、ステップS1314では、そのノードに記述された参照対象テーブル呼び出し「xrm:call−query」に基づき、指定された参照対象テーブル定義「xrm:query」を適用して、図12に示した処理を再帰的に実行する。これにより、指定された参照テーブル定義「xrm:query」に記述されたテンプレートがインスタンス化され、XML文書142の一部が復元される。
ここで、ステップS1307およびS1308の再帰処理について補足説明する。これらのステップでは、抽出対象とするテーブル上のカラムまたはパラメータを指定する要素内容(「xrm:from−column」または「xrm:from−param」)に基づいて、テンプレート中の適用対象ノードの属性または要素内容に対して、インスタンス化する処理が実行される。このため、この処理では、実際には、ステップS1301の判断で、ステップS1310またはS1313に続く処理が実行されることになる。
従って、図13の処理の繰り返しにより、RDB122から受信した結果セットを用いて、参照対象テーブル定義「xrm:query」に記述されたテンプレートがインスタンス化され、参照対象テーブル呼び出し「xrm:call−query」が記述されていた場合には、これにより指定された別の参照対象テーブル定義「xrm:query」を適用する処理が実行されていくことで、すべてのテンプレートがインスタンス化されて、XML文書142が復元されることになる。
例えば、テンプレートに記述されたXML文書の階層構造が深い場合には、ステップS1308を経て、再びステップS1304〜S1309のループに至る処理が複数回繰り返されることになり、RDB122のテーブル階層が深い等、テーブル構造が複雑な場合には、例えばステップS1314によって参照対象テーブル定義「xrm:query」の再帰処理回数が増加することになる。
次に、入出力対象のXML文書とRDB122のテーブル構造、およびこれに適用されるXML−RDB対応定義の例を具体的に挙げて、データベースサーバ100の具体的な動作例について説明する。なお、以下の例では、入力されるXML文書141と、出力されるXML文書142の各構造が同一である場合を想定する。
図14は、実施例1に係るXML文書とRDB122の構造を示す図である。
図14(A)に示すXML文書は、“会社”要素の下位ノードに、“名称”“部署”の各要素が記述され、さらに“部署”要素の下位ノードに“名称”要素が記述された階層構造を有している。また、図14(B)に示すRDB122は、“会社コード”“会社名”の2つのカラムを持つ会社テーブルと、“会社コード”“部署コード”“部署名”の3つのカラムを持つ部署テーブルとからなり、会社テーブル:部署テーブルが1:nの階層構造を有している。なお、“会社コード”“部署コード”のそれぞれがプライマリキー(PK)に指定されている。
図15は、図14のXML文書およびRDB122に対して適用されるXML−RDB対応定義「xrm:definitions」のコード例を示す図である。
図15に示すXML−RDB対応定義「xrm:definitions」では、第2行〜第22行にデータ更新定義「xrm:update−def」、第23行〜第49行にデータ参照定義「xrm:query−def」がそれぞれ記述されている。また、データ更新定義「xrm:update−def」には、第3行〜第11行、および第12行〜第21行の2つの更新対象要素定義「xrm:update」が記述されている。また、“for−each”属性として“会社”が記述された1つ目の更新対象要素定義「xrm:update」の要素として、更新対象要素呼び出し「xrm:call−update」が記述されている。
一方、データ参照定義「xrm:query−def」では、第24行〜第36行、および第37行〜第49行の2つの参照対象テーブル定義「xrm:query」が記述されている。また、1つ目の参照対象テーブル定義「xrm:query」内に定義されたテンプレート定義「xrm:template」の“会社”要素として、参照対象テーブル呼び出し「xrm:call−query」が記述されている。
以下、図15のXML−RDB更新定義「xrm:definitions」を適用したデータ更新および参照処理について説明する。
図16、図17および図18は、それぞれ、実施例1におけるデータ更新処理を説明するための第1、第2および第3の図である。ここで、図16〜図18において、図14(A)に示したXML文書の文書構造を模式的に表し、実施例1におけるデータ更新処理のうち、代表としてデータ格納処理について説明する。なお、これらの説明では、上記の図6〜図8のフローチャートの各ステップに随時対応付けながら説明することにする。
図14(A)に示したXML文書の文書構造は、図16(A)のように模式的に表すことができる。この図では、ルートノードの下位ノードに「会社」要素が配置され、「会社」要素の属性に「コード」、その下位ノードに「名称」要素と2つの「部署」要素が配置され、さらに「部署」要素の各属性に「コード」、その下位ノードに「名称」要素が配置されていることを示している。
まず、図16(B)に示すように、カレントノードをルートノードに設定し、データ更新定義「xrm:update−def」中のうちの1つ目の更新対象要素定義「xrm:update」を適用する(ステップS601〜S603、S605に対応)。1つ目の更新対象要素定義「xrm:update」の「for−each」属性に記述されたパス情報(XPath式「会社」)に適合する要素を、ルートノードの下位ノードから抽出する(ステップS701に対応)。これにより、更新対象テーブル定義「xrm:table」の適用対象として、「会社」要素が抽出される。
次に、抽出された「会社」要素を起点として、1つ目の更新対象要素定義「xrm:update」の配下にある更新対象テーブル定義「xrm:table」をそれぞれ適用する(ステップS703〜S705に対応)。記述された2つの更新対象テーブル定義「xrm:table」では、「会社テーブル」内のカラム名「会社コード」「会社名」に対してそれぞれデータを格納するように指示され(ステップS802〜S804に対応)、これらへの値の取得元として、図16(C)に示すように、「会社」要素を起点としたパス情報(XPath式「@コード」「名称」)により「会社」要素の「コード」属性(@コードと表記)および「名称」要素の要素内容がそれぞれ指定されている。
従って、これらの値取得元から「01」「会社A」が取得されて、SQL文が生成され(ステップS807〜S808,S810〜S812のループに対応)、データベース部120に対して発行される(ステップS814に対応)。これにより、RDB122上の会社テーブルに対してデータが格納される。
ここで、更新対象テーブル定義「xrm:table」では、2つの更新対象カラム定義「xrm:column」の後に更新対象要素呼び出し「xrm:call−update」が記述されていることから、図17(A)に示すように、カレントノードとなっていたルートノードを例えば一旦スタックに退避し、カレントノードを「会社」要素に設定して、すべての更新対象要素定義「xrm:update」を再び適用する(ステップS707に対応)。
まず、図17(A)のように、1つ目の更新対象要素定義「xrm:update」の「for−each」属性に記述されたパス情報(XPath式「会社」)に適合する要素を、「会社」の下位ノードから抽出する。ここでは、適合する要素がないことから、次に、図17(B)のように、2つ目の更新対象要素定義「xrm:update」が適用され(ステップS601〜S603,S605の処理を再び実行)、その「for−each」属性に記述されたパス情報(XPath式「部署」)に適合する要素を「会社」の下位ノードから抽出する。これにより、2つの「部署」要素が抽出される。
次に、抽出された各要素に対して、同様に、2つ目の更新対象要素定義「xrm:update」に記述された更新対象テーブル定義「xrm:table」をそれぞれ適用する(ステップS703〜S705のループを2回実行)。まず、1つ目の「部署」要素については、図18(A)に示すように、「部署テーブル」内のカラム名「会社コード」「部署コード」「部署名」に対してそれぞれデータを格納するように指示し、これらへの値の取得元を、「部署」要素を起点としたパス情報(XPath式「../@コード」「@コード」「名称」)に基づいてそれぞれ「会社」要素の「コード」属性、「部署」要素の「コード」属性、「名称」要素の要素内容として、SQL文を発行する。同様に、2つ目の「部署」要素についても、図18(B)に示すように、格納先のカラム名と、これらへの値の取得元とが指示され、SQL文が発行される。これにより、「部署テーブル」内の2つのレコードに対してデータが格納される。
以上で「会社」要素をカレントノードとした処理が終了し、ルートノードをスタックからPOPして再びカレントノードに設定する。ルートノードをカレントノードとした処理では、図16(B)および(C)に示したように、1つ目の更新対象要素定義「xrm:update」の適用が終了しているため、次に2つ目の更新対象要素定義「xrm:update」が適用される(ルートノードをカレントノードとした場合について、ステップS601〜S603,S605のループの2回目の実行)。しかし、指定されたパス情報(XPath式「部署」)に適合する要素はルートノードの下位ノードには存在しないため、これで入力されたXML文書内のすべてのノードからデータが抽出され、RDB122に格納されたことになる。
次に、図19および図20は、それぞれ、実施例1におけるデータ参照処理を説明するための第1および第2の図である。ここで、図19および図20において、発行されるSQL文とその結果セット、テンプレート、復元されるXML文書のイメージを対応付けて表し、実施例2におけるデータ参照処理について説明する。なお、これらの説明では、上記の図11〜図13のフローチャートの各ステップに随時対応付けながら説明することにする。
まず、XML文書を復元するために、ユーザより、最初の適用する参照対象テーブル定義「xrm:query」として定義名“q1”、参照対象とするパラメータとして「会社コード=01」が指定されているものとする。ここで、返却用ドキュメントの結果ツリーとして、ルートノードを作成する。そして、ユーザからの入力に基づいて、1つ目の参照対象テーブル定義「xrm:query(name=“q1”)」を適用する(ステップS1103に対応)。
この参照対象テーブル定義「xrm:query(name=“q1”)」により、パラメータリスト「xrm:params−in−where」で指定された「会社コード」のパラメータに対して、ユーザからの入力値「01」が設定されて、図19(A)に示すような問い合わせのSQL文が発行される(ステップS1201〜S1204に対応)。このSQL文への応答として、データベース部120の「会社テーブル」からは、図19(B)のような1組の結果セットが得られる。
そして、この結果セットを用いて、テンプレート定義「xrm:template」で定義されている図19(C)のようなテンプレートが復元される(ステップS1205〜S1207に対応)。このテンプレートでは、まず属性指定の要素「xrm:attribute」により、「会社」要素の属性を追加して、この属性の値を、「xrm:from−column」で指定されるカラム(会社コード)からの抽出データで置換するように定義されている(ステップS1302〜S1307に対応。ステップS1307のサブルーチンではさらにステップS1310,S1312を実行)。また、「名称」要素の要素内容を、「xrm:from−column」で指定されるカラム(会社名)からの抽出データで置換するように定義されている(ステップS1302〜S1305,S1308に対応。ステップS1308のサブルーチンではさらにステップS1310,S1312を実行)。
これにより、「会社コード=01」「会社名=会社A」の値によりテンプレートがインスタンス化され、図19(D)に示すような1つの「会社」要素からなるXML文書が復元される。また、このテンプレート内では、「会社」要素の下位ノードに参照対象テーブル呼び出し「xrm:call−query」が記述されているため、その要素を置換するために、指定された参照対象テーブル定義「xrm:query(name=“q2”)」が適用される(ステップS1314に対応)。
参照対象テーブル定義「xrm:query(name=“q2”)」に基づき、またパラメータとしては当初設定された「会社コード=01」がそのまま使用されて、図20(A)に示すような問い合わせのSQL文が発行され、その応答として、データベース部120の「部署テーブル」からは、図20(B)のような2組の結果セットが得られる。
そして、これらの結果セットを用いて、テンプレート定義「xrm:template」で定義されている図20(C)のようなテンプレートが復元される。結果セットが2つ得られているので、各結果セットを用いてテンプレートのインスタンス化がそれぞれ実行され(ステップS1205〜S1207のループを2度実行)、図20(D)に示すような2つの「部署」要素からなるXML文書が復元される。
従って、参照対象テーブル定義「xrm:query(name=“q1”)」内の参照対象テーブル呼び出し「xrm:call−query」の要素が置換されたことになり、図20(E)に示すように、「会社」要素の下位ノードに「名称」要素とともに2つの「部署」要素が記述されたXML文書が最終的に復元される。
次に、XML文書とRDB122のそれぞれが他の構造を持つ場合について、実施例2〜4として例示し、それぞれの場合のデータ更新および参照処理について簡単に説明する。
図21は、実施例2に係るXML文書とRDB122の構造を示す図である。
図21(A)に示すXML文書は、“会社”要素の下位ノードに、1つの“名称”要素と2つの“部署”要素が記述され、さらに各“部署”要素の下位ノードに“名称”要素と“社員”要素が記述され、さらに“社員”要素の下位ノードに“指名”要素が記述された階層構造を有している。
また、図21(B)に示すRDB122は、“会社コード”“会社名”の2つのカラムを持つ会社テーブルと、“会社コード”“部署コード”“部署名”の3つのカラムを持つ部署テーブルと、“会社コード”“部署コード”“社員番号”“氏名”の4つのカラムを持つ社員テーブルとからなり、会社テーブル:部署テーブルが1:n、部署テーブル:社員テーブルが1:nとされた3階層のテーブル構造を有している。なお、“会社コード”“部署コード”“社員番号”のそれぞれがプライマリキー(PK)に指定されている。
このようなXML文書のデータを用いてRDB122を更新する場合には、データ更新定義「xrm:update−def」において、XML文書中の「会社」要素を抽出して会社テーブルに対応付けたもの、「部署」要素を抽出して部署テーブルに対応付けたもの、「社員」要素を抽出して社員テーブルに対応づけたものの3つの更新対象要素定義「xrm:update」を用意する。そして、会社テーブルへのデータ操作後に更新対象要素呼び出し「xrm:call−update」を指定して、再帰処理により部署テーブルへの対応付けに基づくデータ操作を行い、さらに再帰処理により社員テーブルへの対応付けに基づくデータ操作を行うことで実現される。
一方、データ参照処理を行う場合は、抽出対象として会社テーブル、部署テーブル、社員テーブルをそれぞれ指定してテンプレートを復元する参照対象テーブル定義「xrm:query」を用意する。そして、会社テーブルからの抽出データによるインスタンス化処理後に、参照対象テーブル呼び出し「xrm:call−query」を指定して、再帰処理により部署テーブルからの抽出データによるインスタンス化を行い、さらに再帰処理により社員テーブルからの抽出データによるインスタンス化を行うことで、XML文書が復元される。
図22は、実施例3に係るXML文書とRDB122の構造を示す図である。
図22(A)に示すXML文書は、“会社”要素の下位ノードに、1つの“名称”要素と2つの“部署”要素、2つの“売上”要素が記述され、さらに各“部署”要素の下位ノードに“名称”要素が記述された階層構造を有している。
また、図22(B)に示すRDB122は、“会社コード”“会社名”の2つのカラムを持つ会社テーブルと、“会社コード”“年度”“売上”の3つのカラムを持つ売上テーブルと、“会社コード”“部署コード”“部署名”の3つのカラムを持つ部署テーブルとからなり、会社テーブル:売上テーブル、および、会社テーブル:部署テーブルがそれぞれ1:nとされた2階層のテーブル構造を有している。なお、“会社コード”“年度”“部署コード”のそれぞれがプライマリキー(PK)に指定されている。
このようなXML文書のデータでRDB122を更新する場合には、データ更新定義「xrm:update−def」において、XML文書中の「会社」要素を抽出して会社テーブルに対応付けたもの、「部署」要素を抽出して部署テーブルに対応付けたもの、「売上」要素を抽出して売上テーブルに対応づけたものの3つの更新対象要素定義「xrm:update」を用意する。そして、会社テーブルへのデータ操作後に更新対象要素呼び出し「xrm:call−update」を指定して、再帰処理により例えば部署テーブルへの対応付けに基づくデータ操作を行い、さらに同じノードについて売上テーブルへの対応付けに基づくデータ操作を行うことで実現される。
一方、データ参照処理を行う場合は、抽出対象として会社テーブル、部署テーブル、売上テーブルをそれぞれ指定してテンプレートを復元する参照対象テーブル定義「xrm:query」を用意する。そして、会社テーブルからの抽出データによるインスタンス化処理後に、参照対象テーブル呼び出し「xrm:call−query」を指定して、再帰処理により部署テーブルからの抽出データによるインスタンス化を行う。さらに、テンプレート上の「部署」要素と同じノードに参照対象テーブル呼び出し「xrm:call−query」を指定して、再帰処理により売上テーブルからの抽出データによるインスタンス化を行うことで、「部署」要素と「売上」要素とが同じノードに記述されるXML文書が復元される。
図23は、実施例4に係るXML文書とRDB122の構造を示す図である。
図23(A)に示すXML文書は、“会社”要素の下位ノードに、“名称”要素と“会社”要素が記述され、さらに“会社”要素の下位ノードに“名称”要素と2つの“会社”要素が記述され、さらにこれらの各“会社”要素の下位ノードに“名称”要素が記述された入れ子状態の深い階層構造を有している。
また、図23(B)に示すRDB122は、“会社コード”“会社名”“親会社コード”の3つのカラムを持つ会社テーブルを有しており、“親会社コード”に対して“会社コード”が指定される構造となっている。なお、“会社コード”がプライマリキー(PK)に指定されている。
このようなXML文書のデータでRDB122を更新する場合には、データ更新定義「xrm:update−def」において、XML文書中の「会社」要素を抽出して会社テーブルに対応付け更新対象要素定義「xrm:update」を1つだけ用意すればよい。この更新対象要素定義「xrm:update」では、XML文書中の「会社」要素にマッチするノードに対して、RDB122内の「会社コード」のカラムに対して親ノードの属性を対応付け、「会社名」のカラムに対して「名称」要素の内容を対応付ける更新対象テーブル定義「xrm:table」を記述するとともに、更新対象要素呼び出し「xrm:call−update」を記述しておく。これにより、XML文書中のあるノードを起点に「会社」要素にマッチするノードを抽出してデータ操作を行った後に、再帰処理によりその下位ノードから「会社」要素にマッチするノードを抽出してデータ操作を行う。このような処理の繰り返しにより、XML文書中の各ノードのデータが、会社テーブルの「会社コード」「会社名」の各カラムに対して順次格納されていく。
一方、データ参照処理を行う場合は、抽出対象として会社テーブルを指定してテンプレートを復元する参照対象テーブル定義「xrm:query」を用意する。そして、このテンプレート定義「xrm:template」において、「会社」要素の属性や「名称」要素を会社テーブルからのレコードにより置換するように指定した後、「会社」要素の下位ノードに参照対象テーブル呼び出し「xrm:call−query」により同じ参照対象テーブル定義「xrm:query」を指定しておく。これにより、再帰処理によりさらに下位ノードの要素に対するインスタンス化が順次行われ、入れ子構造のXML文書が復元される。
ところで、上記の各実施例では、RDB122上のテーブルに対して格納可能なデータ型、あるいはテーブルから抽出してテンプレートを置換することが可能なデータ型として、単一の文字列(“varchar”に対応)が指定されていたが、これ以外に、単一の数値(例えば整数値の場合“integer”等)を指定することが可能である。さらに、このデータ型としてLOB(BLOB、CLOB)を指定することも可能である。以下、実施例5として、このようにデータ型としてLOBが指定された場合の例を挙げる。
図24は、実施例5に係るXML文書とRDB122の構造を示す図である。
図24(A)に示すXML文書は、“会社”要素の下位ノードに、“名称”要素と“部署”要素が記述され、さらに“部署”要素の下位ノードに“名称”要素と“社員”要素が記述され、さらに“社員”要素の下位ノードに“氏名”要素が記述された階層構造を有している。
また、図24(B)に示すRDB122は、上述した実施例1の場合と基本的に同じであり、“会社コード”“会社名”の2つのカラムを持つ会社テーブルと、“会社コード”“部署コード”“部署情報”の3つのカラムを持つ部署テーブルとを有しており、“会社コード”“部署コード”がプライマリキー(PK)に指定されている。また、“部署情報”カラムのデータ型としてLOBが指定されている。ここで、XML文書中の“部署”要素に記述された要素配列を、“部署情報”カラムに格納し、また逆に、これらの要素配列によりXML文書を復元する場合の処理を想定する。
図25は、実施例5において適用されるXML−RDB対応定義のコード例を示す図である。
図25に示すXML−RDB対応定義「xrm:definitions」の基本的な構成は、部署テーブル内の「部署名」カラムを「部署情報」カラムに変更すれば、図15に示したものと基本的に同じ構造となっている。ただし、図15の場合と異なる点は、「for−each」属性に「部署」が設定された更新対象要素定義「xrm:update」において、「部署情報」カラムに適用するデータのデータ型として「blob」が指定されている点(第118行)、および、「name=“q2”」で表される参照対象テーブル定義「xrm:query」内のテンプレート定義「xrm:template」において、「部署情報」カラムから抽出するデータのデータ型として「blob」が指定されている点(第143行)である。
この例ではデータ型として「blob」が指定されているため、XML文書からRDB122にデータを格納する場合には、パス情報で指示される抽出元の要素内容(ここでは「部署」要素全体の要素配列)がバイナリデータとしてシリアライズされて(図8のステップS809に対応)、「部署情報」カラムに格納される。また、RDB122からデータを抽出してXML文書を復元する場合には、“部署情報”カラムからこれらの要素配列をバイナリデータとして抽出し、XML文書として変換した後、テンプレートの値を置換する。
このように、テーブルに格納、またはテーブルから抽出するデータのデータ型としてLOBを設定可能とすることにより、取り扱うことが可能なデータの範囲が広がり、汎用性が高まる。例えば、XML文書により書くことが不可能なプログラムや画像・音声等のファイルを取り扱いの対象とすることが可能となる。
以上の実施例1〜3および5のように、RDB122が正規化により階層構造をなす複数のテーブルを具備している場合や、XML文書の要素が入れ子構造であるような特殊な階層構造である場合でも、これらに対応したXML−RDB対象定義を用意しておくだけで、基本的な処理手順を変えることなく、XML文書からの抽出データの格納や、XML文書の復元を実行することが可能となる。また、入出力対象のXML文書141および142の構造や、RDB122のテーブル構造が変更された場合にも、これらの各構造に対応するXML−RDB対応定義130の記述を変更して、RDB更新処理部111およびXML復元処理部112に適用することにより対応することができる。XML−RDB対応定義130では、XML文書141および142とRDB122の各構造との間の対応関係のみが定義されており、これを利用するRDB更新処理部111やXML復元処理部112は常に同一のものが使用される。従って、両者の構造の対応関係と処理手順の双方が記述されたプログラムを、各構造の違いに応じて個別に作成する必要があった従来の手法と比較して、作業の負担を大幅に低減することが可能となり、汎用性が高められる。
また、データ更新処理では、基本的に、XML文書のノードごとにデータを抽出して、RDB122内の対応付けられたテーブルに対するデータ操作が行われる。そして、同様な処理を再帰的に行うことで、XML文書の全ノードからのデータ抽出を行い、RDB122に格納していく。従って、操作対象のテーブルやカラムは、データ更新定義「xrm:update−def」での定義に従って順次指定されていくだけなので、テーブル構造に関係なく、常に同じ処理手順をXML文書の階層ごとに繰り返していくことでRDB122へのデータ操作が順次行われていくので、効率的なデータ更新処理が実現される。
また、データ参照処理では、1つのデータ参照対象テーブル定義「xrm:query」によりRDB122上の1つのテーブルから抽出されるデータと、このデータでインスタンス化され得るXML文書の全体または一部の要素配列とが対応付けられている。従って、このようなデータ参照テーブル定義「xrm:query」を更新対象テーブル呼び出し「xrm:call−query」に基づいて順次呼び出し、同様の処理手順を再帰的に実行することにより、XML文書の要素配列が順次復元されていくので、効率的なデータ参照処理が実現される。
(付記1) 構造化文書とリレーショナルデータベースとの間でデータ構造を変換する処理をコンピュータに実行させるデータ構造変換プログラムにおいて、
入力された構造化文書中の処理対象とするノードより下位のノードについて、操作対象とするリレーショナルデータベース内のテーブルとの対応付けを定義したデータ更新定義を取得する更新定義取得ステップと、
入力された前記構造化文書中のルートノードを前記処理対象に設定する第1のステップ、
前記処理対象に設定されたノードを起点にして、前記データ更新定義により指示されるノードから繰り返し要素を抽出する第2のステップ、
前記繰り返し要素として抽出されたノードごとに、前記テーブルに対応付けられた要素内容または属性値を入力された前記構造化文書から抽出して、前記テーブルの更新を要求する第3のステップ、
からなる処理を実行し、前記第3のステップの実行中に前記データ更新定義により下位ノードからの繰り返し要素の抽出が指定されていた場合には、前記第3のステップにおいて抽出されていたノードを新たに前記処理対象として前記第2および第3のステップを実行するデータ更新ステップと、
を含む処理を前記コンピュータに実行させることを特徴とするデータ構造変換プログラム。
(付記2) 前記データ更新定義は、入力された前記構造化文書中の前記処理対象とするノードより下位のノードを相対的に指示するルート情報と、前記ルート情報により指示されたノードごとに、操作対象とする前記リレーショナルデータベース内のテーブルのメタデータを対応付けたテーブル対応付け情報とを含む更新対象要素定義を少なくとも1つ含み、
前記データ更新ステップでは、前記データ更新定義に含まれる前記更新対象要素定義を前記ルートノードから順次適用することを特徴とする付記1記載のデータ構造変換プログラム。
(付記3) 前記更新対象要素定義には、すべての前記更新対象要素定義を再帰的に呼び出すための再帰呼び出し情報を記述することが可能であり、
前記データ更新ステップでは、前記第3のステップの実行中に前記再帰読み出し情報を検出した場合に、前記第3のステップにおいて抽出されていたノードを新たに前記処理対象として前記第2および第3のステップを実行することを特徴とする付記2記載のデータ構造変換プログラム。
(付記4) 前記テーブル対応付け情報は、操作対象とする前記テーブルを識別するメタデータと、識別される前記テーブル内のカラムを定義するメタデータ、および前記カラムに格納する前記構造化文書中の要素内容または属性値を指示するパス情報を含む1つ以上のカラム定義情報とを含むことを特徴とする付記2記載のデータ構造変換プログラム。
(付記5) 前記テーブル対応付け情報により前記テーブル内に格納可能なデータとして、単一の数値または文字列、入力された前記構造化文書中の要素配列の一部からなる文字列、バイナリデータのいずれかを適用することが可能であることを特徴とする付記2記載のデータ構造変換プログラム。
(付記6) 前記リレーショナルデータベースに対する検索条件の入力を受ける条件入力ステップと、
出力される構造化文書の全体あるいは一部の構造に対応するテンプレートと、前記テンプレートのインスタンス化の際に抽出対象とする前記リレーショナルデータベース上のパラメータとを含む参照対象テーブル定義が1つ以上記述されたデータ参照定義を取得する参照定義取得ステップと、
前記検索条件および前記参照対象テーブル定義に基づいて前記リレーショナルデータベースに問い合わせを発行する第4のステップ、
前記問い合わせの結果を用いて前記テンプレートをインスタンス化する第5のステップ、
からなる処理を実行し、前記第5のステップの実行中に別の前記参照対象テーブル定義の呼び出しが指定されていた場合には、該当する前記参照対象テーブル定義を用いて前記第4および第5のステップを実行するテンプレート置換ステップと、
を含む処理をさらに前記コンピュータに実行させることを特徴とする付記1記載のデータ構造変換プログラム。
(付記7) 前記検索条件には、前記参照対象テーブル定義で定義された前記パラメータを指定する情報とその値、および前記第4のステップにおいて最初に適用する前記参照対象テーブル定義を指定する情報が含まれることを特徴とする付記6記載のデータ構造変換プログラム。
(付記8) 前記テンプレートでは、前記第4のステップで発行される前記問い合わせにより得られるレコードのうちの抽出対象とするカラムの値と、出力する前記構造化文書中の置換すべき要素内容または属性値とが対応付けられていることを特徴とする付記6記載のデータ構造変換プログラム。
(付記9) 前記テンプレートにおいてインスタンス化される対象として、単一の数値または文字列、出力される前記構造化文書中の要素配列の一部をなす文字列、バイナリデータのいずれかを適用することが可能であることを特徴とする付記6記載のデータ構造変換プログラム。
(付記10) 構造化文書とリレーショナルデータベースとの間でデータ構造を変換するためのデータ構造変換方法において、
入力された構造化文書中の処理対象とするノードより下位のノードについて、操作対象とするリレーショナルデータベース内のテーブルとの対応付けを定義したデータ更新定義を取得する更新定義取得ステップと、
入力された前記構造化文書中のルートノードを前記処理対象に設定する第1のステップ、
前記処理対象に設定されたノードを起点にして、前記データ更新定義により指示されるノードから繰り返し要素を抽出する第2のステップ、
前記繰り返し要素として抽出されたノードごとに、前記テーブルに対応付けられた要素内容または属性値を入力された前記構造化文書から抽出して、前記テーブルの更新を要求する第3のステップ、
からなる処理を実行し、前記第3のステップの実行中に前記データ更新定義により下位ノードからの繰り返し要素の抽出が指定されていた場合には、前記第3のステップにおいて抽出されていたノードを新たに前記処理対象として前記第2および第3のステップを実行するデータ更新ステップと、
を含むことを特徴とするデータ構造変換方法。
(付記11) 前記リレーショナルデータベースに対する検索条件の入力を受ける条件入力ステップと、
出力される構造化文書の全体あるいは一部の構造に対応するテンプレートと、前記テンプレートのインスタンス化の際に抽出対象とする前記リレーショナルデータベース上のパラメータとを含む参照対象テーブル定義が1つ以上記述されたデータ参照定義を取得する参照定義取得ステップと、
前記検索条件および前記参照対象テーブル定義に基づいて前記リレーショナルデータベースに問い合わせを発行する第4のステップ、
前記問い合わせの結果を用いて前記テンプレートをインスタンス化する第5のステップ、
からなる処理を実行し、前記第5のステップの実行中に別の前記参照対象テーブル定義の呼び出しが指定されていた場合には、該当する前記参照対象テーブル定義を用いて前記第4および第5のステップを実行するテンプレート置換ステップと、
をさらに含むことを特徴とする付記10記載のデータ構造変換方法。
(付記12) 構造化文書とリレーショナルデータベースとの間でデータ構造を変換するデータ構造変換装置において、
入力された構造化文書中の処理対象とするノードより下位のノードについて、操作対象とするリレーショナルデータベース内のテーブルとの対応付けを定義したデータ更新定義、および、出力される構造化文書の全体あるいは一部の構造に対応するテンプレートと、前記テンプレートのインスタンス化の際に抽出対象とする前記リレーショナルデータベース上のパラメータとを含む参照対象テーブル定義が1つ以上記述されたデータ参照定義からなるデータ対応定義を記憶する対応定義記憶部と、
入力された前記構造化文書中のルートノードを前記処理対象に設定し、前記処理対象に設定されたノードを起点にして、前記データ更新定義により指示されるノードから繰り返し要素を抽出し、前記繰り返し要素として抽出されたノードごとに、前記テーブルに対応付けられた要素内容または属性値を入力された前記構造化文書から抽出して、前記テーブルの更新を要求する処理を実行し、さらに、前記要素内容の抽出処理の実行中に前記データ更新定義により下位ノードからの繰り返し要素の抽出が指定されていた場合には、前記要素内容の抽出処理において前記繰り返し要素として抽出されていたノードを新たに前記処理対象として、前記繰り返し要素の抽出、前記要素内容の抽出および前記テーブルの更新要求の処理を再帰的に実行するデータ更新処理部と、
前記リレーショナルデータベースに対する検索条件の入力を受ける検索条件入力部と、
前記検索条件および前記データ参照定義中の前記参照対象テーブル定義に基づいて前記リレーショナルデータベースに問い合わせを発行し、前記問い合わせの結果を用いて前記テンプレートをインスタンス化する処理を実行し、前記インスタンス化の処理の実行中に別の前記参照対象テーブル定義の呼び出しが指定されていた場合には、該当する前記参照対象テーブル定義を用いてリレーショナルデータベースへの前記問い合わせの発行、および前記インスタンス化の処理を再帰的に実行するデータ参照処理部と、
を有することを特徴とするデータ構造変換装置。
本発明の原理を説明するための原理図である。 本発明を適用可能なデータベースサービスシステムのシステム構成を示す図である。 本発明の実施の形態に係るデータベースサーバのハードウェア構成例を示す図である。 本発明の実施の形態に係るデータベースサーバの機能を示すブロック図である。 XML−RDB対応定義のデータ構造を概略的に示す図である。 RDBに対するデータの格納および削除を行う際の更新定義適用処理の全体の流れを示すフローチャートである。 データを格納するための更新対象要素定義適用処理の流れを示すフローチャートである。 データを格納する際の更新対象テーブル定義適用処理の流れを示すフローチャートである。 データを削除するための更新対象要素定義適用処理の流れを示すフローチャートである。 データを削除する際の更新対象テーブル定義適用処理の流れを示すフローチャートである。 データ参照処理全体の流れを示すフローチャートである。 参照対象テーブル適用処理の流れを示すフローチャートである。 テンプレート復元処理の流れを示すフローチャートである。 実施例1に係るXML文書とRDBの構造を示す図である。 実施例1において適用されるXML−RDB対応定義のコード例を示す図である。 実施例1におけるデータ更新処理を説明するための第1の図である。 実施例1におけるデータ更新処理を説明するための第2の図である。 実施例1におけるデータ更新処理を説明するための第3の図である。 実施例1におけるデータ参照処理を説明するための第1の図である。 実施例1におけるデータ参照処理を説明するための第2の図である。 実施例2に係るXML文書とRDBの構造を示す図である。 実施例3に係るXML文書とRDBの構造を示す図である。 実施例4に係るXML文書とRDBの構造を示す図である。 実施例5に係るXML文書とRDBの構造を示す図である。 実施例5において適用されるXML−RDB対応定義のコード例を示す図である。
符号の説明
1a,1b 構造化文書
2 RDB
3 データ対応定義
3a データ更新定義
3b データ参照定義
100 データベースサーバ
110 データ構造変換部
111 RDB更新処理部
112 XML復元処理部
113 対応定義記憶部
120 データベース部
121 RDBMS
122 RDB
130 XML−RDB対応定義
141,142 XML文書
201〜203 クライアント
300 ネットワーク

Claims (5)

  1. 構造化文書とリレーショナルデータベースとの間でデータ構造を変換する処理をコンピュータに実行させるデータ構造変換プログラムにおいて、
    入力された構造化文書中の処理対象とするノードより下位のノードについて、操作対象とするリレーショナルデータベース内のテーブルとの対応付けを定義したデータ更新定義を取得する更新定義取得ステップと、
    入力された前記構造化文書中のルートノードを前記処理対象に設定する第1のステップ、
    前記処理対象に設定されたノードを起点にして、前記データ更新定義により指示されるノードから繰り返し要素を抽出する第2のステップ、
    前記繰り返し要素として抽出されたノードごとに、前記テーブルに対応付けられた要素内容または属性値を入力された前記構造化文書から抽出して、前記テーブルの更新を要求する第3のステップ、
    からなる処理を実行し、前記第3のステップの実行中に前記データ更新定義により下位ノードからの繰り返し要素の抽出が指定されていた場合には、前記第3のステップにおいて抽出されていたノードを新たに前記処理対象として前記第2および第3のステップを実行するデータ更新ステップと、
    を含む処理を前記コンピュータに実行させることを特徴とするデータ構造変換プログラム。
  2. 前記データ更新定義は、入力された前記構造化文書中の前記処理対象とするノードより下位のノードを相対的に指示するルート情報と、前記ルート情報により指示されたノードごとに、操作対象とする前記リレーショナルデータベース内のテーブルのメタデータを対応付けたテーブル対応付け情報とを含む更新対象要素定義を少なくとも1つ含み、
    前記データ更新ステップでは、前記データ更新定義に含まれる前記更新対象要素定義を前記ルートノードから順次適用することを特徴とする請求項1記載のデータ構造変換プログラム。
  3. 前記テーブル関連付け情報により前記テーブル内に格納可能なデータとして、単一の数値または文字列、入力された前記構造化文書中の要素配列の一部からなる文字列、バイナリデータのいずれかを適用することが可能であることを特徴とする請求項2記載のデータ構造変換プログラム。
  4. 前記リレーショナルデータベースに対する検索条件の入力を受ける条件入力ステップと、
    出力される構造化文書の全体あるいは一部の構造に対応するテンプレートと、前記テンプレートのインスタンス化の際に抽出対象とする前記リレーショナルデータベース上のパラメータとを含む参照対象テーブル定義が1つ以上記述されたデータ参照定義を取得する参照定義取得ステップと、
    前記検索条件および前記参照対象テーブル定義に基づいて前記リレーショナルデータベースに問い合わせを発行する第4のステップ、
    前記問い合わせの結果を用いて前記テンプレートをインスタンス化する第5のステップ、
    からなる処理を実行し、前記第5のステップの実行中に別の前記参照対象テーブル定義の呼び出しが指定されていた場合には、該当する前記参照対象テーブル定義を用いて前記第4および第5のステップを実行するテンプレート置換ステップと、
    を含む処理をさらに前記コンピュータに実行させることを特徴とする請求項1記載のデータ構造変換プログラム。
  5. 前記テンプレートにおいてインスタンス化される対象として、単一の数値または文字列、出力される前記構造化文書中の要素配列の一部をなす文字列、バイナリデータのいずれかを適用することが可能であることを特徴とする請求項4記載のデータ構造変換プログラム。
JP2003285304A 2003-08-01 2003-08-01 データ構造変換プログラム Withdrawn JP2005056085A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003285304A JP2005056085A (ja) 2003-08-01 2003-08-01 データ構造変換プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003285304A JP2005056085A (ja) 2003-08-01 2003-08-01 データ構造変換プログラム

Publications (1)

Publication Number Publication Date
JP2005056085A true JP2005056085A (ja) 2005-03-03

Family

ID=34364971

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003285304A Withdrawn JP2005056085A (ja) 2003-08-01 2003-08-01 データ構造変換プログラム

Country Status (1)

Country Link
JP (1) JP2005056085A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011013758A (ja) * 2009-06-30 2011-01-20 Hitachi Ltd データ処理装置、及び処理方法
US7886224B2 (en) 2006-09-29 2011-02-08 Kabushiki Kaisha Toshiba System and method for transforming tabular form date into structured document
JP2011511339A (ja) * 2007-12-31 2011-04-07 マスターカード インターナシヨナル インコーポレーテツド プラットフォームによらないデータファイル転送のためのシステムおよび方法
WO2011111532A1 (ja) * 2010-03-10 2011-09-15 日本電気株式会社 データベースシステム
JP2016539449A (ja) * 2013-11-22 2016-12-15 杰 盛 データベース実現方法
JP2017507426A (ja) * 2014-02-19 2017-03-16 スノーフレーク コンピューティング インク.Snowflake Computing Inc. 半構造データスキーマのトランスペアレントディスカバリ
US9851958B2 (en) 2013-12-26 2017-12-26 International Business Machines Corporation Method, apparatus, and computer program for specializing serializer
JP2022001992A (ja) * 2020-06-19 2022-01-06 株式会社オービック データ処理装置、データ処理方法、及びデータ処理プログラム

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7886224B2 (en) 2006-09-29 2011-02-08 Kabushiki Kaisha Toshiba System and method for transforming tabular form date into structured document
JP2011511339A (ja) * 2007-12-31 2011-04-07 マスターカード インターナシヨナル インコーポレーテツド プラットフォームによらないデータファイル転送のためのシステムおよび方法
US9128946B2 (en) 2007-12-31 2015-09-08 Mastercard International Incorporated Systems and methods for platform-independent data file transfers
JP2011013758A (ja) * 2009-06-30 2011-01-20 Hitachi Ltd データ処理装置、及び処理方法
WO2011111532A1 (ja) * 2010-03-10 2011-09-15 日本電気株式会社 データベースシステム
JP2016539449A (ja) * 2013-11-22 2016-12-15 杰 盛 データベース実現方法
US9851958B2 (en) 2013-12-26 2017-12-26 International Business Machines Corporation Method, apparatus, and computer program for specializing serializer
JP2017507426A (ja) * 2014-02-19 2017-03-16 スノーフレーク コンピューティング インク.Snowflake Computing Inc. 半構造データスキーマのトランスペアレントディスカバリ
JP2022001992A (ja) * 2020-06-19 2022-01-06 株式会社オービック データ処理装置、データ処理方法、及びデータ処理プログラム
JP7406461B2 (ja) 2020-06-19 2023-12-27 株式会社オービック データ処理装置、データ処理方法、及びデータ処理プログラム

Similar Documents

Publication Publication Date Title
US20210334250A1 (en) Construction of database schema models for database systems and rest api's
US5315709A (en) Method and apparatus for transforming objects in data models
US8086560B2 (en) Schema mapping specification framework
US5734887A (en) Method and apparatus for logical data access to a physical relational database
JP4141556B2 (ja) 構造化文書管理方法及びその実施装置並びにその処理プログラムを記録した媒体
JPH11242676A (ja) 構造化文書登録方法、検索方法、およびそれに用いられる可搬型媒体
JPH10240752A (ja) 構造化文書の登録方法,検索方法、およびそれに用いられる可搬型媒体
US20020002566A1 (en) Transfromation of marked up documents using a base architecture
JPWO2006051954A1 (ja) 文書処理装置及び文書処理方法
JP2005190163A (ja) 構造化データ検索方法、構造化データ検索装置およびプログラム
KR100581687B1 (ko) 이기종의 데이타베이스 관리시스템 통합방법 및 그 방법을실행하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는기록매체
JP2005056085A (ja) データ構造変換プログラム
JP2005250820A (ja) ストレージシステムにおけるxml文書分類方法
Atkinson et al. Harmonizing textual and graphical visualizations of domain specific models
JPWO2006051955A1 (ja) サーバ装置及び名前空間発行方法
Elmasri et al. Conceptual modeling for customized XML schemas
JP2003281149A (ja) アクセス権限設定方法および構造化文書管理システム
JP5458480B2 (ja) タグ付き文書データ問い合わせ処理システムに対する問い合わせ画面生成装置
US20080270985A1 (en) Database application assembly and preparation
JP2009211599A (ja) マッピング定義作成システムおよびマッピング定義作成プログラム
JP7279524B2 (ja) データ管理プログラム、データ管理方法およびデータ管理システム
JP4289022B2 (ja) 構造化文書処理方法及び装置及び構造化文書処理プログラム及び構造化文書処理プログラムを格納した記憶媒体
Shentu et al. Mechanism design of data management system for nuclear power
Jackson Thirty years (and more) of databases
KR101765324B1 (ko) Sql과 다이어그램을 이용하는 소스코드 생성 장치 및 그의 처리 방법

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20061003