(57)【要約】【課題】  構造化文書のデータを扱うアプリケーションを作成する場合、従来は、動的に木構造に展開したり、イベントによって呼び出されるコールバック・ルーチンを駆使したりするプログラミングをする必要があったが、処理が複雑であるだけでなく、ＣＯＢＯＬのようなポインタの概念の無いプログラム言語では実現が困難であるという問題があった。【解決手段】  データ転記処理部５を用意し、これに処理対象の構造化文書の文書構造定義情報１、プログラム言語の構造体定義情報２、及び、文書構造定義と構造体定義との対応情報３を与えておく。アプリケーションプログラム４からデータ転記処理部５に読み書きの要求を出すだけで、構造化文書６とプログラム言語の構造体との間で要素毎のデータ転記が実現する。【選択図】  図１
2008165817.tif 000002
【特許請求の範囲】
【請求項１】
省略可能要素、選択可能要素、繰り返し数不定の繰り返し要素、任意の長さのデータをもつ要素を含むデータ構造が定義可能である構造化文書から、省略可能要素、選択可能要素、繰り返し数不定の繰り返し要素、任意の長さのデータをもつ要素を含むデータ構造が定義不可能であるプログラム言語の構造体に、データを読み込むアプリケーションプログラム構築方法において、
構造化文書の構造を定義した情報、及び、構造化文書の構造とプログラム言語の構造体との対応情報を取得し、前記対応情報から プログラム言語の構造体と、前記構造化文書のデータ構造のうち、省略可能要素、選択可能要素、繰り返し数不定の繰り返し要素、及び、任意の長さのデータをもつ要素に対応させる前記プログラム言語のデータ構造の要素に対して、構造化文書データでの要素の有無、選択された要素、要素の繰り返し数、要素のデータ長の情報をそれぞれ格納するフラグ構造体と、構造化文書の構造を定義した情報に従う構造化文書データから前記プログラム言語の構造体に、対応するデータを転記する読み込みルーチンを作成し、
前記読み込みルーチンを呼び出すことで、前記構造化文書のデータを前記構造体に読み込み、構造化文書の要素の有無、選択された要素、要素の繰り返し数、要素のデータ長の情報を前記フラグ構造体に設定する
ことを特徴とする、構造化文書からプログラム言語の構造体へデータを読み込むアプリケーションプログラム構築方法。
【請求項２】
省略可能要素、選択可能要素、繰り返し数不定の繰り返し要素、任意の長さのデータをもつ要素を含むデータ構造が定義可能である構造化文書へ、省略可能要素、選択可能要素、繰り返し数不定の繰り返し要素、任意の長さのデータをもつ要素を含むデータ構造が定義不可能であるプログラム言語の構造体から、データを書き出すアプリケーションプログラム構築方法において、
構造化文書の構造を定義した情報、及び、構造化文書の構造とプログラム言語の構造体との対応情報を取得し、前記対応情報から プログラム言語の構造体と、前記構造化文書のデータ構造のうち、省略可能要素、選択可能要素、繰り返し数不定の繰り返し要素、及び、任意の長さのデータをもつ要素に対応させる前記プログラム言語のデータ構造の要素に対して、構造化文書データでの要素の有無、選択された要素、要素の繰り返し数、要素のデータ長の情報をそれぞれ格納するフラグ構造体と、構造化文書の構造を定義した情報に従う構造化文書データへ前記プログラム言語の構造体から、対応するデータを転記する書き出しルーチンを作成し、
前記書き出しルーチンを呼び出すことで、前記フラグ構造体に設定されている構造化文書の要素の有無、選択された要素、要素の繰り返し数、要素のデータ長の情報に従って、前記構造化文書へ前記構造体からデータを書き出すことを特徴とする、構造化文書へプログラム言語の構造体のデータを書き出すアプリケーションプログラム構築方法。
【請求項３】
構造化文書から、プログラム言語の構造体に、データを読み込むアプリケーションプログラム構築方法において、
構造化文書の構造を定義した情報、及び、構造化文書の構造の部分要素に対するプログラム言語の構造体の対応情報を取得し、前記対応情報からプログラム言語の構造体と、 構造化文書の構造を定義した情報に従う構造化文書データの前記部分要素から前記プログラム言語の構造体に、対応するデータを転記する読み込みルーチンを作成し、
前記読み込みルーチンを複数回呼び出すことで、前記構造化文書のデータを前記構造体に読み込むことを特徴とする、構造化文書からプログラム言語の構造体へデータを読み込むアプリケーションプログラム構築方法。
【請求項４】
構造化文書へ、プログラム言語の構造体から、データを書き出すアプリケーションプログラム構築方法において、
構造化文書の構造を定義した情報、及び、構造化文書の構造の部分要素に対するプログラム言語の構造体の対応情報を取得し、前記対応情報からプログラム言語の構造体と、 構造化文書の構造を定義した情報に従う構造化文書データの前記部分要素へ前記プログラム言語の構造体から、対応するデータを転記する書き出しルーチンを作成し、
前記書き出しルーチンを複数回呼び出すことで、前記構造化文書のデータへ前記構造体から書き出すことを特徴とする、構造化文書へプログラム言語の構造体からデータを書き出すアプリケーションプログラム構築方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム言語で外部データを扱うシステム及び方法に関し、特にプログラム言語で構造化文書を扱うシステム及び方法およびプログラムに関する。
【背景技術】
【０００２】
ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）に代表される構造化文書は、さまざまな用途に使われるが、特に、企業間のデータ交換形式として使われるとき、プログラム言語でデータを扱う必要がある。
【０００３】
構造化文書自体は、文字列という以上に物理構造を持たないが、文字列内の文法規則によって構造を表現する。開始タグと終了タグの構文を用意し、これらのタグで文字列データを囲むことで構造化文書を構成する要素を表す。囲まれた文字列データの中身には、開始タグと終了タグで囲まれた別の要素を置くことが許される。これによって、再帰的な入れ子構造を表現する。この構造は、論理的に木構造である。入れ子になっている要素を木構造として見る場合は、直接囲まれている要素を子ノード、その要素を直接囲んでいる要素を親ノードとし、同じ親ノードを共有するノードを兄弟のノードとする。
【０００４】
プログラム言語からこのような構造化文書を操作する場合、構造化文書の木構造になっているデータを直接プログラム言語の構造体に転記する方式はなかった。
【０００５】
これまでの技術としては、構造化文書全体を、各要素をノードとする木構造として主記憶装置内に展開した上で、このデータ構造を操作するする方法がある。
例えば、ワールド・ワイド・ウェブ・コンソーシアム（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ  Ｃｏｎｓｏｒｔｉｕｍ）はドキュメント・オブジェクト・モデル（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）を勧告しており（非特許文献１）、主記憶内に木構造として展開したデータ構造に対する各種のデータ操作用インターフェースを定義している。
【０００６】
また、構造化文書を走査するにつれて、イベントを発生させることで、イベント・ドリブンに構造化文書を操作する方法がある。ＸＭＬ−ＤＥＶメーリングリストで開発され、ＸＭＬ文書を扱う上で事実上の業界標準となっているＳｉｍｐｌｅ  ＡＰＩ  ｆｏｒ  ＸＭＬ（非特許文献２）では、ＸＭＬで書かれた構造化文書を走査し、遭遇したタグ等に対して次々にイベントを発生させ、特定のイベント処理ルーチン（コールバック・ルーチンと呼ぶ）に制御を渡すことで、構造化文書の操作を可能にしている。
【０００７】
特許文献１では、ある構造化情報フォーマットから別の構造化情報フォーマットへ変換するためのオブジェクト指向システムが提案されているが、プログラム言語処理系には関係していない。
【０００８】
【非特許文献１】ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／ＲＥＣ−ＤＯＭ−Ｌｅｖｅｌ−１／
【非特許文献２】ｈｔｔｐ：／／ｗｗｗ．ｍｅｇｇｉｎｓｏｎ．ｃｏｍ／ＳＡＸ／
【特許文献１】特開平１１−２４２６７３
【発明の開示】
【発明が解決しようとする課題】
【０００９】
構造化文書を扱うアプリケーションを作成する場合、次に述べるように、ポインタ操作機能や、イベントによって呼び出されるコールバック・ルーチンの登録機能の無いプログラム言語では実現が困難であるという問題があった。
【００１０】
上記従来技術のうち、構造化文書を木構造に展開してプログラム言語から操作する方法では、動的なデータ構造を扱うため、プログラム言語の言語仕様として、ポインタの操作機能、又は、オブジェクト指向言語であればオブジェクト参照の操作機能を持っていなければならない。また、構造化文書をイベント・ドリブンに扱う方法では、プログラム言語の言語仕様として、イベントごとに呼び出されるコールバック・ルーチンを設定する手段を提供していなければならない。例えばプログラム言語ＣＯＢＯＬ（ＪＩＳ  Ｘ  ３００２−１９９２  電子計算機プログラム言語ＣＯＢＯＬ）のように、言語仕様としてデータ用のポインタも、手続きルーチン用のポインタの概念もない言語では、動的データ構造の扱いも、イベント・ドリブンのプログラミングも困難である。
【００１１】
本発明は、ポインタ操作や呼び出されるルーチンの登録機能がないプログラム言語でも、構造化文書のデータを扱える機能を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、プログラム言語から呼び出して使用するデータ転記処理部を置く。データ転記処理部は、構造化文書の構造を定義した情報、構造化文書の構造に対応するプログラム言語の構造体の定義情報、及び、文書構造定義と構造体定義の対応情報を入力することで、構造化文書の各要素とプログラム言語の構造体の各項目との間の対応関係と型情報に基づいて、データ型変換を含めた各々の転記方法を設定する。
【００１３】
構造化文書の内容データをプログラム言語の構造体に転記する要求をアプリケーションプログラムがデータ転記処理部に出すと、構造化文書の内容データを、個々の要素に対して上述のように設定された方法で、プログラム言語の構造体に転記する。また、逆方向のデータ転記要求として、プログラム言語の構造体データを構造化文書に転記する要求をアプリケーションプログラムがデータ転記処理部に出すと、プログラム言語の構造体データを、個々の項目に対して上述のように設定された方法で、構造化文書に転記する。
【００１４】
アプリケーションプログラムは、かかるデータ転記処理部とやり取りするだけで、構造化文書のデータを扱うことが可能になる。
尚、企業間システムにおけるデータ構造を変換するプログラムにであって、前述の企業間で共通に用いる構造化文書のデータ構造を定めておき、前述のプログラムは、前述の企業間で用いる構造化文書のデータ構造を定義した情報と、企業内で用いるプログラム言語の構造体の定義情報と、前述の企業間で用いる構造化文書のデータ構造と前記企業内で用いるプログラム言語の構造体との対応情報とを取得し、前述の取得した情報に基づいて、前述のプログラム言語の構造体の状態を格納しておくフラグ構造体と前述のフラグ構造体に対応するプログラム言語の構造体を作成し、前述の作成したフラグ構造体と前述のフラグ構造体に対応するプログラム言語の構造体とを用いることでデータ構造を変換することを可能とする。
【発明の効果】
【００１５】
以上述べたように、本発明によれば、構造化文書とプログラム言語の構造体との間で内容データを転記できるためプログラム作成の負担を減らすことができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態を詳細に説明する。
図１は、本発明における構造化文書を扱うアプリケーションプログラムの論理的なシステム構成を示すものである。図２は、図１のシステム構成のうちデータ転記処理部５の一部として、定義情報解析に基づいてあらかじめ構造化文書アクセスルーチン群５０３を生成する部分を示すものである。図３は、図２で生成した構造化文書アクセスルーチン群５０３をアプリケーションプログラムから呼び出す方法で図１のシステム構成を実施する形態を示すものである。図４は、構造化文書の構造定義情報としてＸＭＬの文書型を宣言するＤＴＤ（Ｄｏｃｕｍｅｎｔ  Ｔｙｐｅ  Ｄｅｆｉｎｉｔｉｏｎ）の例である。図５は、図４の文書構造定義情報と、その定義に従った構造化文書本体の例である。図６は、図４の文書構造定義情報に対応したプログラム言語の構造体定義５０２の例である。図７は、図６に示す構造体に図５に示す構造化文書本体のデータを転記した場合のデータ設定状態を示すものである。図８は、図４の文書構造定義情報に対応したプログラム言語の構造体定義５０２のもう一つの例である。図９は、構造化文書アクセスルーチン群５０３の機能構成を示すものである。図１０は、構造化文書の文書構造定義情報１に省略可能要素や繰り返し要素がある場合に、省略の有無や繰り返し数を保持する構造体の例である。図１１は、文書構造定義情報１の要素に属性が付く場合、属性値を要素の内容と共に保持する構造体の例である。図１２は、図１のアプリケーションプログラム４が、データ転記処理部５を使って構造化文書６を読み込む処理方法のフローチャートである。
【００１７】
図１のデータ転記システムの構成において、データ転記処理部５は、構造化文書の文書構造定義情報１、プログラム言語の構造体定義情報２、及び、文書構造定義と構造体定義との対応情報３を取得し、アプリケーションプログラム４で使用する構造体と構造化文書６との間のデータ転記処理方法を確立する。アプリケーションプログラム４は、データ転記処理部５を適宜呼び出すことで構造化文書６を読み書きするというデータ転記方法を用いる。データ転記処理部５は、明示的な呼び出し構文によって呼び出すのではなく、プログラム言語に備わった入出力用の構文の実行で呼び出すように実施しても良い。
【００１８】
データ転記処理部５は、アプリレーションプログラム４の実行時に、構造化文書の文書構造定義情報１、プログラム言語の構造体定義情報２、及び、文書構造定義と構造体定義との対応情報３を取得する方法で実施しても良いし、アプリレーションプログラム４の実行前に、これら情報を取得して確立したデータ転記方法に従うルーチンを生成しておき、アプリレーションプログラム４が生成されたルーチンを使う方法で実施してもよい。図２以降は、データ転記方法の確立を、アプリケーションプログラムの実行の前の段階であらかじめ行う方法で本発明を実施する形態を説明する。
【００１９】
図２において、定義情報解析部５０１は、構造化文書の文書構造定義情報１、プログラム言語の構造体定義情報２、及び、文書構造定義と構造体定義との対応情報３を入力する。ここで、構造化文書の構造定義１は、例えば、ＸＭＬ文書であればＤＴＤである。プログラム言語の構造体定義情報２は、ソースプログラムの構造体変数宣言部分、ソフトウェア開発の上流ツールにあるリポジトリ情報、又は、変数宣言部分を翻訳したコンパイラの中間情報等を使用する。文書構造定義と構造体定義との対応情報３は、構造化文書の各要素からプログラム言語の構造体の各項目への対応を、繰り返し要素、選択可能要素、省略可能要素等を含めて表現する。さらに、構造化文書に繰り返し要素数の最大値の定めの無い場合、最大繰り返し数を指定する。また、構造化文書に文字列長の最大値の定めの無い場合、要素の最大長も指定する。
【００２０】
次に、定義情報解析部５０１は、文書構造定義と構造体定義との対応付け機能５０１１によって両者を対応付ける。さらに、構造体定義生成機能５０１２によって、プログラム言語の構造体定義５０２を生成する。ここで、プログラム言語の構造体定義情報２がソースプログラムの構造体変数宣言部分である場合は、プログラム言語の構造体定義５０２と同一であり、構造体定義生成機能５０１２は不要である。また、プログラム言語の構造体定義情報２から、ツール等でプログラム言語の構造体定義５０２相当が生成される場合も構造体定義生成機能５０１２は不要である。
【００２１】
定義情報解析部５０１は、次に、データ転記処理生成機能５０１３によって、構造化文書のアクセスルーチン群５０３を生成する。ここで、構造化文書のアクセスルーチン群５０３は、文書構造定義と構造体定義との対応情報３に従って、データを転記するためのルーチン群であり、更に、プログラム言語の構造体定義情報２に従って、文字列から数値への変換等のデータ型変換も行う。
【００２２】
文書構造定義と構造体定義との対応情報３は、構造化文書の文書構造定義情報１と一緒に持たせることも、プログラム言語の構造体定義情報２と一緒に持たせることもできる。
【００２３】
構造化文書の文書構造定義情報１に定義される文書構造のすべて、又は、ある要素部分の構造のすべてを、その木構造を変えずにプログラム言語の構造体に対応させる場合、構造化文書の木構造からプログラム言語の構造体の構造を一意に決められるため、木構造の形に関する対応情報は必要ない。したがって、文書構造定義と構造体定義との対応情報３に構造化文書の各要素に対応する型情報を持たせれば、プログラム言語の構造体定義情報２は不要である。
【００２４】
これとは反対に、プログラム言語の構造体定義情報２に定義されるデータ項目のすべて、又は、構造体の一部分の構造のすべてを、その構造を変えずに構造化文書に対応させる場合、プログラム言語の構造体の構造から構造化文書の木構造を一意に決められるため、構造化文書の文書構造定義情報１は不要である。この場合、定義情報解析部５０１の構造体定義生成機能５０１２は、文書構造定義情報を生成する機能に置き換えることで、構造化文書の文書構造定義情報１を生成することができる。
【００２５】
図３において、アプリケーションプログラム４は、図２の定義情報解析部５０１で生成された構造化文書のアクセスルーチン群５０３を適宜呼び出すことで構造化文書６を読み書きする。このとき、アプリケーションプログラム４は、図２の定義情報解析部５０１で生成されたプログラム言語の構造体定義５０２を取り込んで、読み書きのデータのやり取りに使用する。
【００２６】
図４は、構造化文書の文書構造定義情報１の例として、ＸＭＬのＤＴＤの例を示している。要素ｏｒｄｅｒの宣言７１では、要素ｏｒｄｅｒは、要素名が、この文書型の名前と共通であり、文書型のルート要素を示している。また、要素ｏｒｄｅｒは、その内側に、一つのａｄｄｒｅｓｓ要素と一つ以上のｉｔｅｍ要素
を、この順に持つことを定義している。ａｄｄｒｅｓｓ要素は宣言７２で、ｉｔｅｍ要素は宣言７３で、それぞれ宣言されている。
【００２７】
アクセスルーチン群５０３では、アクセスの単位を、構造化文書６全体にすることもできるし、一部分にすることもできる。図４で定義される文書型の構造化文書へのアクセス用にアクセスルーチン群５０３を生成する場合、構造化文書６にアクセスする単位として、ｏｒｄｅｒ要素を選択すれば、ｏｒｄｅｒは文書型のルート要素なので、アプリケーションプログラム４は、文書全体を一度にアクセスすることになる。一方、アクセス単位を、ａｄｄｒｅｓｓ要素とｉｔｅｍ要素に分割してアクセスルーチン群５０３を生成すると、アプリケーションプログラム４は、まず、ａｄｄｒｅｓｓ要素にアクセスし、次にｉｔｅｍ要素に１度以上繰り返してアクセスすることで、構造化文書６全体をアクセスすることができる。アクセス単位の指定は、プログラム言語の構造体定義情報２、又は、文書構造定義と構造体定義との対応情報３で行う。
【００２８】
図５では、図４のＤＴＤに従ったＸＭＬ文書本体の例を図４のＤＴＤと共に示している。アクセスルーチン群５０３のアクセス単位を宣言７１で宣言されるｏｒｄｅｒ要素とする場合は、構造化文書本体（７１０）を一度にアクセスする。
また、アクセスルーチン群５０３のアクセス単位を宣言７２で宣言されるａｄｄｒｅｓｓ要素と宣言７３で宣言されるｉｔｅｍ要素に分割する場合、ＸＭＬ文書のａｄｄｒｅｓｓ要素（７２０）へのアクセスと、ＸＭＬ文書のｉｔｅｍ要素（７３１、７３２）への、２回のアクセスで、文書全体をアクセスする。
【００２９】
図６は、プログラム言語の構造体定義５０２の例であり、図４に示すＤＴＤに対応して、宣言７１で宣言されるｏｒｄｅｒ要素をアクセス単位として生成されるプログラム言語ＣＯＢＯＬの構造体定義（５０２１）を示す。ここでは、図４で宣言される要素名ｏｒｄｅｒ、ａｄｄｒｅｓｓ、ｉｔｅｍ、ｉｔｅｍｎａｍｅ、ｐｒｉｃｅ、及び、ｑｕａｎｔｉｔｙに、図６に示すＣＯＢＯＬのデータ項目名ＯＲＤＥＲ、ＡＤＤＲＥＳＳ、ＩＴＥＭ、ＩＴＥＭＮＡＭＥ、ＰＲＩＣＥ、及び、ＱＵＡＮＴＩＴＹをそれぞれ対応させている。データ項目ＡＤＤＲＥＳＳは２０文字の英数字項目に、データ項目ＩＴＥＭＮＡＭＥは１５文字の英数字項目に、データ項目ＰＲＩＣＥ及びＱＵＡＮＴＩＴＹは十進数９けたの数字項目に、そして、データ項目ＩＴＥＭの繰り返し数は２回に、それぞれ宣言している。このように、図２において、構造化文書の文書定義情報１に指定されないが、プログラム言語の構造体定義５０２では必要になる長さ情報、型情報、及び、繰り返し項目の最大繰り返し数等の情報は、プログラム言語の構造体定義情報２、又は、文書構造定義と構造体定義との対応情報３に設定しておく。
【００３０】
図７は、図５に示す構造化文書本体（７１０）の各要素のデータを、図６に示すプログラム言語ＣＯＢＯＬの構造体定義（５０２１）の各データ項目に転記した場合のデータの設定状態（５０２２）を示す。図７の各データ項目名は図６の同名のデータ項目名に対応する。図５のｉｔｅｍ要素の２回の繰り返し（７３１、７３２）に対して、データ項目ＩＴＥＭが２回繰り返され、それぞれに対応する要素データが設定されている。
【００３１】
図８は、プログラム言語の構造体定義５０２のもう一つの例として、図４のＤＴＤに対応して２つの構造体定義が含まれる例を示す。一つは宣言７２で宣言されるａｄｄｒｅｓｓ要素をアクセス単位として生成されるＣＯＢＯＬの構造体定義（５０２３）であり（ただし、ａｄｄｒｅｓｓ要素は末端の要素で内側に構造を持たないため、ＣＯＢＯＬの定義もここでは構造を持たない基本型のデータ項目になっている）、もう一つは、宣言７３で宣言されるｉｔｅｍ要素をアクセス単位として生成されるＣＯＢＯＬの構造体定義（５０２４）である。ここでは、図５で宣言される要素名ａｄｄｒｅｓｓ、ｉｔｅｍ、ｉｔｅｍｎａｍｅ、ｐｒｉｃｅ、及び、ｑｕａｎｔｉｔｙに、図８に示すデータ項目名ＡＤＤＲＥＳＳ、ＩＴＥＭ、ＩＴＥＭＮＡＭＥ、ＰＲＩＣＥ、及び、ＱＵＡＮＴＩＴＹをそれぞれ対応させている。図６の構造体定義（５０２１）とは異なり、ｉｔｅｍ要素の繰り返しは指定しない。その代わりに、アプリケーションプログラム４の中でｉｔｅｍ要素のアクセスを繰り返すことで複数のｉｔｅｍ要素にアクセスする。
【００３２】
図９において、構造化文書アクセスルーチン群５０３は、初期化処理機能５０３１、構造化文書アクセス単位の読み書き機能５０３２、構造化文書内位置付け機能５０３５、及び、終了処理機能５０３６からなる。構造化文書アクセス単位の読み書き機能５０３２は、構造化文書から構造体への読み込み機能５０３３と構造体から構造化文書への書き出し機能５０３４からなる。
【００３３】
構造化文書アクセス単位の読み書き機能５０３２は、アクセス単位毎に一つ生成される。したがって、一つの文書型に複数のアクセス単位を設定する場合は、複数の構造化文書アクセス単位の読み書き機能５０３２が生成される。構造化文書アクセス単位の読み書き機能５０３２を実装するルーチンの入り口点は、アクセス単位に一そろいずつ生成しても良いし、一そろいだけ生成して、呼び出し時に引数やその他の方法で与えられる情報によってアクセス単位を選択しても良い。
【００３４】
初期化処理機能５０３１は、構造化文書６を読み込む場合には、まず、指定された場所（ファイル名や主記憶装置の番地）に格納されている構造化文書をすべて読み込み、構造化文書の構造を、主記憶装置内で木構造のデータ構造に展開する。構造化文書６を書き出す場合には、指定された書き出し場所（ファイル名や主記憶装置の番地）を確保又は登録する。読み込みの場合も書き出しの場合も、構造化文書の格納場所にファイルを指定するなら、ファイルを先にオープンしておく。構造化文書６に対して読み込みと書き出しを行う場合には、上述の読み込み用の初期化、及び、書き出し用の初期化を行う。
【００３５】
構造化文書アクセス単位の読み書き機能５０３２は、状態として、アクセス対象の構造化文書内の現在位置を保持する。初期状態は、構造化文書の先頭である。
【００３６】
構造化文書から構造体への読み込み機能５０３３は、主記憶装置内で木構造に展開した構造化文書から、アクセス単位分の要素データを与えられた構造体の対応するデータ項目に読み込むことでデータ転記を実現する。実施の形態として、現在位置から読み込む方法と、対応するアクセス単位を、現在位置から構造化文書の前又は後ろ方向に検索し、見つかったアクセス単位を読み込む方法がある。
ここで、読み込んだ要素の終了位置を、現在位置情報として保持する。次に、構造化文書から構造体への読み込み機能５０３３のいずれかが呼ばれたときには、現在位置から先にあるアクセス単位を探して、与えられた構造体に読み込む。構造化文書から構造体への読み込み機能５０３３が呼ばれたとき、対応するアクセス単位が構造化文書内に無ければ、エラーコードを返却することで、アプリケーションプログラム４に次の操作を選択する機会を与える。
【００３７】
構造体から構造化文書への書き出し機能５０３４は、引数やその他の方法で渡される構造体データを、呼び出されるたびに直接構造化文書の文字列として書き出すことでデータ転記を実現する。実施の形態として、現在位置から書き出す方法と、対応するアクセス単位が存在可能な位置を、構造化文書の現在位置から後ろ方向に検索し、見つかった位置にアクセス単位を書き出す方法がある。構造体から構造化文書への書き出し機能５０３４は、与えられたアクセス単位の構造体に格納されたデータを次のように処理することで構造化文書の文字列を生成する。データ項目は構造体型又は基本型のどちらかであり、構造体型は、内部にデータ項目（構造体型又は基本型）を一つ以上持つという構造になっている。まず、データ項目が基本型であれば、型に従ってデータ値を表す文字列に変換し、構造体の文書構造定義と構造体定義との対応情報３で指定された要素の開始タグと終了タグで、変換後の文字列を囲む。それが構造体型であれば、その構造体が含むデータ項目をすべて開始タグと終了タグで囲んでから、それら全体を、構造体の文書構造定義と構造体定義との対応情報３で指定された要素の開始タグと終了タグで囲む。なお、構造体から構造化文書への書き出し機能５０３４には、引数やその他の方法で呼び出し時に情報を与えることで選択可能なオプションとして、データ値を表す文字列の前、又は、後ろの余分な空白を削除する機能を入れることができる。
【００３８】
上述の手順だけでは、図８のように構造化文書のアクセス単位を分割した場合に、構造体５０２３を書き出しても構造体５０２４を書き出しても、全体を囲んでいるｏｒｄｅｒ要素の開始タグと終了タグを付与しない。最外側の開始タグ及び終了タグ書き出しでなくとも、二つの部分的アクセス単位の書き出しの間でも、同様にタグを付与しない場合がある。そこで、構造体から構造化文書への書き出し機能５０３４には、部分的なアクセス単位を書き出すときに、その前に出現していなければならない開始タグ及び終了タグを自動的に付与する機能を持たせる。また、終了処理機能５０３６には、構造化文書６が終了する前に閉じていなければならないタグを付与する機能を持たせる。
【００３９】
構造体から構造化文書への書き出し機能５０３４のもう一つの実施形態として、各呼び出しでは、引数やその他の方法で渡される構造体データを構造化文書の部分的な木構造表現に変換し、主記憶装置内で木構造表現にした構造化文書に付加していき、終了処理機能５０３６が呼ばれるときに、木構造表現全体から文字列表現の構造化文書を生成する実施形態がある。この実施形態でも、現在位置から書き出す方法と、対応するアクセス単位が存在可能な位置を、構造化文書の現在位置から前又は後ろ方向に検索し、見つかった位置にアクセス単位を書き出す方法がある。例えばＸＭＬ文書の場合、ドキュメント・オブジェクト・モデル形式の木構造を作成し、終了処理機能５０３６は、現在のドキュメント・オブジェクト・モデル形式木構造に基づいて、文字列のＸＭＬ文書を生成する。この実施形態では、アプリケーションプログラム４は、構造化文書６の中で変更しない部分をアクセス単位にする必要が無いため、既存の構造化文書の一部分だけを修正するアプリケーションに向いている。
【００４０】
構造化文書内位置付け機能５０３５は、構造化文書内の位置を表す情報を受け取り、その位置に新たに現在位置を設定する。構造化文書内の位置を表す方法については、ＸＭＬであれば、ＸＭＬ  Ｐａｔｈ  Ｌａｎｇｕａｇｅ（ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／１９９９／ＲＥＣ−ｘｐａｔｈ−１９９９１１１６）を用いることができる。
【００４１】
終了処理機能５０３６は、ファイルのクローズ処理、メモリの解放処理、閉じていないタグの付与処理等を行う。また、構造体から構造化文書への書き出し機能５０３４が主記憶装置内に木構造表現で構築した構造化文書を、終了処理機能５０３６が文字列表現の構造化文書を生成する実施形態の場合は、この生成処理も行う。
【００４２】
図１０において、ＸＭＬの部分的なＤＴＤ（８１）は、要素Ａの内側に、要素Ｂ１又はＢ２が存在し、その次に要素Ｃが存在しても良いが省略可能で、最後に要素Ｄが一つ以上繰り返すという構造を定義している。また、要素Ｂ１、Ｂ２、Ｃ、及び、Ｄは、それぞれ文字列データと定義している。ＣＯＢＯＬの部分的な構造体（８２）は、部分的なＤＴＤ（８１）に対応する構造体の例であり、データ項目Ａ、Ｂ１、Ｂ２、Ｃ、及び、Ｄは、それぞれ要素Ａ、Ｂ１、Ｂ２、Ｃ、及び、Ｄに対応する。データ項目Ｂ１、Ｂ２、Ｃ、及び、Ｄは、長さ２０文字の英数字項目に、データ項目Ｄの繰り返し数は１０回に、それぞれ固定値で定義し、これらのデータ項目を含む構造体としてデータ項目Ａを定義している。ここで、選択要素である要素Ｂ１と要素Ｂ２のそれぞれに独立したデータ項目を与えているが、データ項目Ｂ２をデータ項目Ｂ１の再定義項目としてデータ領域を共用させても良い。
【００４３】
構造化文書のアクセス単位を要素Ａとする場合、上述の方法だけでは、構造化文書の読み込み時、要素Ｂ１又はＢ２のどちらが存在したか、要素Ｃは存在したかどうか、そして、要素Ｄの出現回数はいくつであったか、それぞれアプリケーションプログラムでは確認できない。また、書き出し時には、要素Ｂ１又はＢ２のどちらを書き出すのか、要素Ｃは書き出すのか書き出さないのか、要素Ｄは何回書き出したら良いのかをアプリケーションプログラムから指定できない。そこで、図２の構造体定義生成機能５０１２に、要素の存在の有無、及び、出現回数を納めるフラグ構造体も、プログラム言語の構造体定義５０２の一部として生成する機能を加える。また、構造化文書から構造体への読み込み機能５０３３には、フラグ構造体に値を設定する機能を追加し、構造体から構造化文書への書き出し機能５０３４には、フラグ構造体に設定された値に従ってアクセス単位の構造化文書を書き出す機能を追加する。（なお、フラグ構造体とは、構造体の状態を保持するものである。たとえば、データの有無や、データの長さ、データの型、データの出現回数などである。詳しくは以下で図１０の（８３）を用いて説明する。）
ＣＯＢＯＬの部分的な構造体（８３）は、部分的なＤＴＤ（８１）及びＣＯＢＯＬの部分的な構造体（８２）に対応するフラグ構造体の例である。要素Ｂ１、Ｂ２、及び、Ｃに対応して、データ項目Ｂ１、Ｂ２、及び、Ｃが一文字のデータ値を持ち、要素の存在の有無を表現する。また、要素Ｄに対応して、データ項目Ｄが十進数９けたのデータ値を持ち、繰り返し要素の出現回数を表現する。
【００４４】
フラグ構造体は、構造化文書の要素データに対応する構造体データ項目上の開始位置と長さの情報を表現する目的でも使用できる。構造化文書から構造体への読み込み機能５０３３が、構造化文書の要素データの文字列を構造体の固定長データ項目に転記すると、なんらかの埋め草文字をデータの前又は後ろに挿入する。このままでは、アプリケーションプログラム４からは、そもそも構造化文書上でデータであった部分と埋め草として埋め込まれた文字との区別がつかない。データ項目に対応して、実際に読み込んだデータを格納した開始位置と長さの情報を、フラグ構造体に持たせることで、アプリケーションプログラム４は、実際に読み込まれたデータ部分を認識できる。また、構造体から構造化文書への書き出し機能５０３４が、構造体のデータ項目に格納された文字列データを構造化文書の要素に転記するとき、対応するフラグ構造体に格納された開始位置と長さ情報に従って部分的に転記することで、アプリケーションプログラム４は、転記するデータ部分を制御できる。
【００４５】
さらに、フラグ構造体は、構造化文書のデータが、構造体として用意しているデータ領域に収まり切らない状態を表現する目的でも使用できる。構造化文書から構造体への読み込み機能５０３３が構造化文書を読み込むとき、要素データ長や要素の繰り返し数が、対応する構造体側で固定に定義しているデータの長さや繰り返し数を超えているとき、あふれる分のデータは転記できない。繰り返し数がデータ構造で用意した数を超えたことを表すフラグ、及び、長さがデータ構造で用意した数を超えたことを表すフラグを、フラグ構造体に付加し、さらに、実際のデータの繰り返し数情報データ項目、及び、実際のデータの長さ情報データ項目を付加し、構造化文書から構造体への読み込み機能５０３３がこれらの情報を設定することで、アプリケーションプログラム４は、読み込みエラー状態を認識できると共に、エラーに対処する処理を実行することができる。
【００４６】
なお、フラグ構造体を使用せずに、構造体に含まれる各基本型データ項目に省略時に設定するそれぞれの値をあらかじめ文書構造定義と構造体定義との対応情報３で指定しておき、これを構造化文書アクセス単位の読み書き機能５０３２が利用することで、要素の存在の有無を表現する実施の形態もある。構造化文書から構造体への読み込み機能５０３３は、構造化文書６の内容データを構造体読み込むと共に、選択されなかった選択可能要素、及び、存在しなかった省略可能要素に対応するデータ項目に、並びに、繰り返し可能要素の構造化文書内での実際の繰り返し数が、構造体で用意していた繰り返し数より少ないとき、データが読み込まれなかったデータ項目に、省略時設定値を設定する。反対に、構造体から構造化文書の書き出し機能５０３４は、省略時設定値が設定されているデータ項目の対応する要素を書き出さない。アプリケーションプログラム４は、読み込みのとき、省略時設定値が設定されたデータ項目に対応する要素が構造化文書６に存在しなかったことを認識でき、書き出しのとき、データ項目にあらかじめ省略時設定値を設定しておくことで、書き出さない要素を指定できる。
【００４７】
この実施の形態では、フラグ構造体を用いる実施形態に比較して、機能的にいくつかの制限がある。基本型のデータ項目でなく構造体型の項目レベルでの要素の省略を表現できないし、省略時設定値を意味のあるデータから除外する必要がある。また、構造化文書内の繰り返し数が構造体で用意した数を超えたことを表現する手段を別に用意する必要がある。選択可能要素に対応して用意するデータ項目は領域を共用せずに、それぞれに独立したデータ項目として用意し、それぞれの省略時設定値を判断できるようにする必要がある。しかしながら、本来のデータを扱う構造体とは別の構造体を用意する必要が無いので、データの扱いは単純になる。
【００４８】
図１１において、部分的なＤＴＤ（９１）には、要素ｒｏｏｍと、要素ｒｏｏｍに付属する属性ｓｍｏｋｉｎｇが定義されている。部分的なＸＭＬ文書（９２）は、部分的なＤＴＤ（９１）に従ったＸＭＬ文書の例であり、要素ｒｏｏｍの内容データには０３０８、属性ｓｍｏｋｉｎｇには"ｎｏ"が設定されている。開始タグと終了タグで囲まる要素の内容データと共に、要素の属性値をプログラム言語の構造体で扱うには、構造化文書の要素に対応して、構造体の中に、属性値用のデータ項目と要素の内容用のデータ項目を持つ構造体を定義する。部分的なＣＯＢＯＬの構造体定義（９３）は、部分的なＤＴＤ（９１）に対して、属性値と要素内容の両方を表現させたＣＯＢＯＬの構造体の例である。要素ｒｏｏｍの値は、ＣＯＢＯＬでは、構造体ＲＯＯＭの中のデータ項目ＶＡＬに対応付けられ、要素ｒｏｏｍの属性ｓｍｏｋｉｎｇの値は、ＣＯＢＯＬでは、構造体ＲＯＯＭの中の構造体ＡＴＴＬＩＳＴの中のデータ項目ＳＭＯＫＩＮＧに対応付けられている。
【００４９】
構造化文書の文書構造定義情報１に属性情報が含まれる場合、プログラム言語の構造体定義情報２に、属性情報を格納するデータ項目を定義すると共に、文書構造定義と構造体定義との対応情報３で、両者の対応を指定する。さらに、データ転記処理部生成機能５０１３では、属性情報の転記処理を含めた構造化文書のアクセスルーチン群５０３を生成する。
【００５０】
図１２は、アプリケーションプログラム４が、構造化文書６を読み込む処理のフローチャートである。構造化文書のアクセスルーチン群５０３があらかじめ生成されており、これらのルーチンを呼び出すことで、構造化文書６を読み込む。まず、初期化処理機能５０３１を呼び、構造化文書の格納されたファイルのオープン処理や構造化文書の主記憶装置内での木構造への展開等の必要な初期化処理を行う（ステップ４１）。次に、構造化文書から構造体への読み込み機能５０３３を呼び、この時、対応する構造体を引数やその他の方法で渡し、定義情報解析部５０１に対してあらかじめ設定したアクセス単位分の構造化文書データを構造体に取得する（ステップ４２）。次に、アクセス単位の繰り返しが終わったかどうかを、構造化文書から構造体への読み込み機能５０３３の結果で判断し（ステップ４３）、繰り返しが続く場合はステップ４２に戻り、終了している場合はステップ４４に行ってこの処理を終了する。構造化文書６の全体を一度に読み込む場合は、ステップ４３の判断による繰り返し処理は不要である。構造化文書６を書き出す場合は、ステップ４２で、構造化文書から構造体への読み込み機能５０３３の代わりに構造体から構造化文書への書き出し機能５０３４を呼べば良い。
このように構造化文書のアクセス処理は単純化される。
【００５１】
以上述べたように、本発明によれば、構造化文書のアクセスルーチン群を呼ぶだけで、構造化文書とプログラム言語の構造体との間で内容データを一度に転記できるため、構造化文書の内容のアクセスに、動的にデータ構造を構築したり、そのデータ構造を渡り歩くためにポインタ操作をしたり、状態管理しながらイベント処理のコール・バックルーチンを駆使したりする必要がなくなる。そのため、プログラミングの負担を減らすことができると共に、プログラム不良を作り込む機会を少なくすることができる。また、特に、ＣＯＢＯＬ等のポインタの概念を持たない言語でも、構造化文書の処理が可能になる。
【００５２】
図１３を用いて本発明の他の実施例を説明する。
ここで、ネットワークを介して接続されている企業システムＡ(1300)、企業システムＢ(1302)、企業システムＣ(1304)の間で顧客データをやり取りする場合を示す。
【００５３】
予め、各企業間でデータを交換する場合のデータ構造(1306)を定めておくものとする。
各企業内では、各企業固有のアプリケーションおよびデータ構造を用いるものとする。
たとえば、企業システムＡで用いるデータの構造体は(1301)であり、Ａ社内でのデータ構造(1306)と各社共通のデータ構造(1306)とのデータ構造を変換するためのプログラム(1307)をＡ社の企業システムが有しているものとする。尚、図示していないが、各企業システムには、業務に必要なハードウエア・ソフトウエアを有しているものとする。
企業システムＢも同様に、Ｂ社内で用いるデータ構造(1303)と各社共通で用いるデータ構造(1306)とを変換するためのプログラム(1308)を有しているものとする。
企業システムＣも同様に、Ｃ社内で用いるデータ構造(1305)と各社居通で用いるデータ構造(1306)とを変換するためのプログラム(1309)を有しているものとする。
【００５４】
各社のシステムが有するデータ変換プログラム(1307,1308,1309)は、本発明の図３で示した構成でも良いし、他のものでも良い。尚、データ変換プログラム(1307,1308,1309)は、アプリケーションプログラム(4)と、プログラム言語の構造体定義(502)と、構造化文書のアクセスルーチン群(503)とを含む一つのプログラムとして図示したが、この構成以外で本発明を実施しても良い。
【００５５】
上述のように、予め企業間で送受信する構造化文書のデータ構造を定めておき、各企業内で用いるデータ構造との変換プログラムを各企業システムで有することにより、企業間でデータ交換を行う際に、各企業内システムで従来より用いていたデータ構造を変更することなく、他企業システムとのデータ交換を可能とする。企業内システムにおいては、従来から用いているデータ構造に変更を及ぼさずにすむため、企業内の従来から用いているアプリケーションの変更やデータベース管理にかかる手間が省け、システム変更・構築にかける労力・時間を軽減できる。また、新たなデータ構造でデータを交換することになっても、従来からのデータ資源・ソフトウエア資源に及ぼす影響を少なくすることができる。
【００５６】
たとえば、各企業内システムにおいてはＣＯＢＯＬのアプリケーションを用いており、各企業内では別々のデータ構造でデータを管理しており、企業間で送受信するデータ構造をＸＭＬなどの構造化文書で定め、上述したプログラムを用いて本発明を適用することも可能である。
【００５７】
図１４を用いて本発明の他の実施例を説明する。
集計センタ(1400)、Ａ支店システム(1403)、Ｂ支店システム(1404)各々がネットワークで接続されているものとする。
【００５８】
集計センタにおいては、集計センタ内で用いるデータ構造(1401)を用いて、各支店から送信されたデータを処理するものとする。また、集計センタにおいては、集計センタ内で用いるデータ構造(1401)でデータの処理を行うものとする。  
Ａ支店システムにおいては、顧客からの注文データをメールプログラムもしくはＷｅｂブラウザ等を経由して顧客端末(1405)、携帯電話(1406)などでうけつけ、Ａ支店システム内で処理するものとする。たとえば、Ａ支店システムでは、ポインタを使ってデータを管理しているものとする。
【００５９】
Ｂ支店システムにおいては、Ｂ支店業務クライアントプログラムからの要求をＢ支店業務サーバプログラムで処理し、配列型のデータ構造でデータを管理しているものとする。
【００６０】
集計センタで、Ａ支店、Ｂ支店その他各支店のデータを集計するため、各支店−集計センタ間で用いるデータ構造(1402)を定めておき、各支店は集計センタとの送受信に用いるデータ構造(1402)に基づいてデータを送受信し、集計センタはデータ変換プログラム(1407)を用いて、各支店から受信したデータ構造(1402)を、センタ内で用いるデータ構造（1401）へ変換してデータ集計処理を行う。    
このように本発明を適用することで、集計センタ内で従来より用いられていたデータ構造を変更することなく、各支店からのデータの処理を行うことができるため、センタ内でのアプリケーションの変更に掛かる時間・労力などが軽減できる。
【００６１】
たとえば、集計センタ内で従来からＣＯＢＯＬのアプリケーションを用いており、集計センタ−支店間でのデータ交換をＸＭＬなどの構造化文書を用いる場合などに本発明を適用することも可能である。
【図面の簡単な説明】
【００６２】
【図１】本発明における構造化文書を扱うアプリケーションプログラムの論理的なシステム構成のブロック図である。
【図２】図１のシステム構成のうち、データ転記処理部５の一部として、定義情報解析に基づいてあらかじめ構造化文書アクセスルーチン群５０３を生成する部分を示すブロック図である。
【図３】図２で生成した構造化文書アクセスルーチン群５０３をアプリケーションプログラムから呼び出す方法で図１のシステム構成を実施する形態を示す。
【図４】構造化文書の構造定義情報としてＸＭＬの文書型を宣言するＤＴＤ（Ｄｏｃｕｍｅｎｔ  Ｔｙｐｅ  Ｄｅｆｉｎｉｔｉｏｎ）の例である。
【図５】図４の文書構造定義情報と、その定義に従った構造化文書本体の例である。
【図６】図４の文書構造定義情報の全体にマッピングしたプログラム言語の構造体定義５０２の例である。
【図７】図６に示す構造体に図５に示す構造化文書本体のデータを転記した場合のデータ設定状態を示す。
【図８】図４の文書構造定義情報に対して２つに分割してマッピングしたプログラム言語の構造体定義５０２の例である。
【図９】構造化文書アクセスルーチン群５０３の機能構成を表すブロック図である。
【図１０】構造化文書の文書構造定義情報１に省略可能要素や繰り返し要素がある場合に、省略の有無や繰り返し数の情報を保持する構造体の例である。
【図１１】文書構造定義情報１の要素に属性が付く場合、属性値を要素の内容と共に保持する構造体の例である。
【図１２】図１のアプリケーションプログラム４が、データ転記処理部５を使って構造化文書６を読み込む処理方法のフローチャートである。
【図１３】本発明を企業間システムに適用した例である。
【図１４】本発明を支店−集計センタにおけるシステムに適用した例である。
【符号の説明】
【００６３】
１  構造化文書の文書構造定義情報
２  プログラム言語の構造体定義情報
３  文書構造定義と構造体定義との対応情報
４  アプリケーションプログラム
５  データ転記処理部
６  構造化文書
【図１】
2008165817.tif 000003
【図２】
2008165817.tif 000004
【図３】
2008165817.tif 000005
【図４】
2008165817.tif 000006
【図５】
2008165817.tif 000007
【図６】
2008165817.tif 000008
【図７】
2008165817.tif 000009
【図８】
2008165817.tif 000010
【図９】
2008165817.tif 000011
【図１０】
2008165817.tif 000012
【図１１】
2008165817.tif 000013
【図１２】
2008165817.tif 000014
【図１３】
2008165817.tif 000015
【図１４】
2008165817.tif 000016