(57)【要約】【課題】複雑に入り組んだツリー構造の構造データに容易に変換して生成することが可能なデータ変換装置を提供すること。【解決手段】変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備え、ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、変換データ生成手段は、繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する。【選択図】図２
2009169707.tif 000002
【特許請求の範囲】
【請求項１】
変換対象データを所定の構造を有するデータに変換するデータ変換装置であって、
前記変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、前記変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、
前記ツリー変換定義情報及び前記変換構造定義情報に基づいて前記変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備え、
前記ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、
前記変換データ生成手段は、前記繰返し処理命令の実行に応じて遷移して処理する前記ツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
ことを特徴とするデータ変換装置。
【請求項２】
前記変換データ生成手段は、前記繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び／あるいは当該繰返し処理命令の実行終了後に遷移して実行する前記遷移先処理命令を特定する前記処理命令特定情報を記憶する、
ことを特徴とする請求項１記載のデータ変換装置。
【請求項３】
前記繰返し処理命令は、前記ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが前記変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含む、
ことを特徴とする請求項１又は２記載のデータ変換装置。
【請求項４】
前記変換データ生成手段は、前記ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報としてループスタック内に順に記憶し、これに基づいて前記ループ処理を行う、
ことを特徴とする請求項３記載のデータ変換装置。
【請求項５】
前記変換データ生成手段は、前記ループ処理を終了する処理命令を処理する時に、前記ループスタック内の最新の前記アドレス情報を破棄し、次に新しい前記アドレス情報に基づいて前記ループ処理を実行する、
ことを特徴とする請求項４記載のデータ変換装置。
【請求項６】
前記繰返し処理命令は、処理している前記変換対象データが下位階層のデータを有する場合に、前記ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含む、
ことを特徴とする請求項１，２，３，４又は５記載のデータ変換装置。
【請求項７】
前記変換データ生成手段は、前記再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を再帰スタック内に前記処理命令特定情報として記憶し、前記再帰処理が終了したときに前記再帰スタックに記憶されている前記アドレス情報にて特定される処理命令から処理を続ける、
ことを特徴とする請求項６記載のデータ変換装置。
【請求項８】
前記変換データ生成手段は、前記再帰処理を呼び出す処理命令によって呼び出されて実行される前記再帰処理を開始する処理命令を処理する時に、当該再帰処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報として再帰ポインタに記憶し、前記再帰処理を呼び出す処理命令の実行時に、処理している前記変換対象データが下位階層となる子情報を持つ場合に、前記再帰ポインタに記憶されている前記アドレス情報に基づいて前記再帰処理を実行する、
ことを特徴とする請求項７記載のデータ変換装置。
【請求項９】
前記ツリー変換定義情報は、前記ツリー構造の分岐点を変更する分岐点変更処理を開始／終了する処理命令を含み、
前記変換データ生成手段は、前記分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じて前記ツリー構造データに変換する、
ことを特徴とする請求項１，２，３，４，５，６，７又は８記載のデータ変換装置。
【請求項１０】
前記変換データ生成手段は、前記分岐点変更処理を終了する処理命令を処理する時に、前記分岐スタック内に蓄積された最新の前記分岐点情報を破棄して、次に新しい前記分岐点情報を用いて前記ツリー構造データに変換する、
ことを特徴とする請求項９記載のデータ変換装置。
【請求項１１】
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、前記変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶したコンピュータに、
前記ツリー変換定義情報及び前記変換構造定義情報に基づいて前記変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を実現するためのプログラムであり、
前記変換データ生成手段は、前記ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理する前記ツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
ことを特徴とするプログラム。
【請求項１２】
前記変換データ生成手段は、前記繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び／あるいは当該繰返し処理命令の実行終了後に遷移して実行する前記遷移先処理命令を特定する前記処理命令特定情報を記憶する、
ことを特徴とする請求項１１記載のプログラム。
【請求項１３】
前記繰返し処理命令は、前記ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが前記変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含み、
前記変換データ生成手段は、前記ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報としてループスタック内に順に記憶し、これに基づいて前記ループ処理を行う、
ことを特徴とする請求項１１又は１２記載のプログラム。
【請求項１４】
前記繰返し処理命令は、処理している前記変換対象データが下位階層のデータを有する場合に、前記ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含み、
前記変換データ生成手段は、前記再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を前記処理命令特定情報として再帰スタック内に記憶し、前記再帰処理が終了したときに前記再帰スタックに記憶されている前記アドレス情報にて特定される処理命令から処理を続ける、
ことを特徴とする請求項１１，１２又は１３記載のプログラム。
【請求項１５】
前記ツリー変換定義情報は、前記ツリー構造の分岐点を変更する分岐点変更処理を開始／終了する処理命令を含み、
前記変換データ生成手段は、前記分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じて前記ツリー構造データに変換する、
ことを特徴とする請求項１１，１２，１３又は１４記載のプログラム。
【請求項１６】
変換対象データを所定の構造を有するデータに変換するデータ変換方法であって、
前記変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、前記変換対象データの変換後のデータ構造を定義する変換構造定義情報と、に基づいて、前記変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成工程を有し、
前記変換データ生成工程は、前記ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理する前記ツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
ことを特徴とするデータ変換方法。
【請求項１７】
前記変換データ生成工程は、前記繰返し処理命令の実行に応じて、前記繰返し処理命令の実行中及び／あるいは前記繰返し処理命令の実行終了後に遷移して実行する前記遷移先処理命令を特定する前記処理命令特定情報を記憶する、
ことを特徴とする請求項１６記載のデータ変換方法。
【請求項１８】
前記繰返し処理命令は、前記ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが前記変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含み、
前記変換データ生成工程は、前記ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報としてループスタック内に順に記憶し、これに基づいて前記ループ処理を行う、
ことを特徴とする請求項１６又は１７記載のデータ変換方法。
【請求項１９】
前記繰返し処理命令は、処理している前記変換対象データが下位階層のデータを有する場合に、前記ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含み、
前記変換データ生成工程は、前記再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を前記処理命令特定情報として再帰スタック内に記憶し、前記再帰処理が終了したときに前記再帰スタックに記憶されている前記アドレス情報にて特定される処理命令から処理を続ける、
ことを特徴とする請求項１６，１７又は１８記載のデータ変換方法。
【請求項２０】
前記ツリー変換定義情報は、前記ツリー構造の分岐点を変更する分岐点変更処理を開始／終了する処理命令を含み、
前記変換データ生成工程は、前記分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じて前記ツリー構造データに変換する、
ことを特徴とする請求項１６，１７，１８又は１９記載のデータ変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ変換装置にかかり、特に、所定のデータ構造のデータを、特定のデータ構造に変換するデータ変換装置に関する。
【背景技術】
【０００２】
近年、インターネット上における電子データの交換や保存するために、ＸＭＬ（eXtensible  Markup  Language）というデータ構造を用いている。そして、外部装置に記憶されたあるデータ構造のデータを、ＸＭＬにデータ変換する場合には、このデータ構造に合わせて、変換ルールを記述したＸＳＬＴ（eXtensible  Stylesheet  Language  Transformations）の他に、変換用プログラムを作成する必要がある。
【０００３】
例えば、あるデータ構造をＸＭＬに変換するデータ変換方法の一例としては、ＸＭＬ  ＤＯＭによるプログラム手法や、ＸＭＬ  ＤＯＭによるプログラム手法とＸＳＬＴとの組合せ、がある。また、特許文献１に開示されているように、データ構造のフィールド値を取り出してテキストに変換したテキストファイルとＸＳＬＴとの組合せによる方法がある。さらには、独自プログラム手法（外部装置のデータ構造をサーチして値を取り出し、ＸＭＬ  ＤＯＭは使わずに標準ファイル出力関数を使ってＸＭＬに出力する方法）などがある。
【０００４】
【特許文献１】特開２００５−２６７５３１号公報
【特許文献２】特開２００５−３３９０１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところが、上記いずれの方法であっても、外部装置のデータ構造に合わせてその都度データを変換するためのプログラムを必要としているため、かかるプログラムを作成することに手間がかかる。また、ＸＭＬ  ＤＯＭや構造化データを扱うプログラム手法の専門知識を必要とするため、プログラム作成の経験もなく、専門知識のない人にはデータ変換のプログラムを作成することは難しく、作成が困難であった。さらに、ＸＭＬのノードが入れ子状となりネストするツリー構造である場合には、これをデータ変換するプログラムの作成は難しさを増すこととなる。
【０００６】
また、外部装置のデータ構造の仕様変更などによりＸＭＬの文書スタイルの仕様を変更する場合には、データ変換のプログラムの修正を行い、かつ、プログラム修正を装置に認識させるために、データ変換装置を再起動させる煩わしさもあった。なお、外部装置のデータ構造に設定されている主なフィールド値は、データベースから取出した情報を元に計算し、加工した値である。
【０００７】
ここで、特許文献２では、表ファイルから、データ構造を解釈してＸＭＬデータを生成するデータ変換装置を開示している。しかしながら、上記データ変換装置は、表ファイルからＸＭＬデータを生成しているため、複雑に入り組んだツリー構造のＸＭＬデータを生成することは困難である。
【０００８】
このため、本発明の目的は、上述した課題である、複雑に入り組んだツリー構造の構造データに容易に変換して生成することが可能なデータ変換装置を提供することにある。
【課題を解決するための手段】
【０００９】
そこで、本発明の一形態であるデータ変換装置は、
変換対象データを所定の構造を有するデータに変換するデータ変換装置であって、
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、
ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備え、
ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、
変換データ生成手段は、繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
という構成を採っている。
【００１０】
また、本発明の他の形態であるプログラムは、
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶したコンピュータに、
ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を実現するためのプログラムであり、
変換データ生成手段は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
という構成を採る。
【００１１】
さらに、本発明の他の形態であるデータ変換方法は、
変換対象データを所定の構造を有するデータに変換するデータ変換方法であって、
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、に基づいて、変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成工程を有し、
変換データ生成工程は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、
という構成を採る。
【発明の効果】
【００１２】
本発明は、以上のように構成されるため、繰返し処理が複雑に入り組んだような変換対象データであっても、適切にツリー構造のデータに変換することができる。従って、あらゆる変換対象データの変換に対応することができ、装置の汎用性が向上し、ユーザの利便性の向上も図ることができる。
【発明を実施するための最良の形態】
【００１３】
本発明の一形態であるデータ変換装置は、上述したように、変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備えている。そして、上記ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、上記変換データ生成手段は、繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、という構成を採る。
【００１４】
上記発明によると、変換データ生成手段は、ツリー変換定義情報及び変換構造定義情報に基づいて変更対象データをツリー構造データに変換する。このとき、ツリー変換定義情報内の特定の処理命令を繰返す繰返し処理命令を処理する際に、この繰返し処理命令の実行に応じて遷移して処理する遷移先処理命令を特定する情報を記憶する。従って、複数の繰返し処理が入り組んだ場合であっても、繰返し処理の実行時に、記憶した遷移先処理命令を特定する情報に基づいて、適切に遷移先の処理命令を特定して実行することができる。その結果、あらゆる変換対象データであっても、適切にツリー構造のデータに変換することができる。そして、最終的にツリー構造データを所定のデータ構造に変換することで、データ構造の変換を実現できる。
【００１５】
そして、上記データ変換装置では、上記変換データ生成手段が、繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び／あるいは当該繰返し処理命令の実行終了後に遷移して実行する遷移先処理命令を特定する処理命令特定情報を記憶する、という構成を採る。
【００１６】
例えば、上記繰返し処理命令は、ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含む。このとき、上記変換データ生成手段は、ループ処理を開始する時に、当該ループ処理の開始点となる処理命令のアドレス情報を処理命令特定情報としてループスタック内に順に記憶し、これに基づいてループ処理を行う、という構成を採る。さらに、上記変換データ生成手段は、ループ処理を終了する処理命令を処理する時に、ループスタック内の最新の前記アドレス情報を破棄し、次に新しいアドレス情報に基づいてループ処理を実行する、という構成を採る。
【００１７】
このように、繰返し処理がループ処理である場合には、そのループ処理の開始点を記憶しておく。これにより、複数の入り組んだループ処理を実行する場合であっても、蓄積した上記ループスタック内のアドレス情報である開始点に基づいて適切にループ処理を実行することができ、ツリー構造データを生成することができる。
【００１８】
また、例えば、上記データ変換装置では、上記繰返し処理命令が、処理している変換対象データが下位階層のデータを有する場合に、ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含む。このとき、上記変換データ生成手段は、再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を再帰スタック内に処理命令特定情報として記憶し、再帰処理が終了したときに再帰スタックに記憶されているアドレス情報にて特定される処理命令から処理を続ける、という構成を採る。さらに、変換データ生成手段は、再帰処理を呼び出す処理命令によって呼び出されて実行される再帰処理を開始する処理命令を処理する時に、当該再帰処理の開始点となる処理命令のアドレス情報を処理命令特定情報として再帰ポインタに記憶し、再帰処理を呼び出す処理命令の実行時に、処理している変換対象データが下位階層となる子情報を持つ場合に、再帰ポインタに記憶されているアドレス情報に基づいて再帰処理を実行する、という構成を採る。
【００１９】
このように、繰返し処理が再帰処理である場合には、その再帰処理の開始アドレスと終了後の戻りアドレスを記憶しておく。これにより、再帰処理が入り組んだ場合であっても、記憶した情報に基づいて、適切に再帰処理を実行し、さらには、再帰処理の終了後の処理を実行することができる。その結果、適切なツリー構造データに変換することができる。
【００２０】
また、上記データ変換装置では、上記ツリー変換定義情報が、ツリー構造の分岐点を変更する分岐点変更処理を開始／終了する処理命令を含み、変換データ生成手段は、分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じてツリー構造データに変換する、という構成を採る。そして、上記変換データ生成手段は、分岐点変更処理を終了する処理命令を処理する時に、分岐スタック内に蓄積された最新の分岐点情報を破棄して、次に新しい分岐点情報を用いてツリー構造データに変換する、という構成を採る。
【００２１】
このように、ツリー変換処理時に、分岐点の変化を記憶しておくことで、複雑なツリー構造となる場合であっても、正確にツリー構造データを生成することができる。
【００２２】
また、本発明の他の形態であるプログラムは、変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶したコンピュータに、ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段と、を実現するためのプログラムであり、上記変換データ生成手段は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、という構成を採る。
【００２３】
さらに、本発明の他の形態であるデータ変換方法は、変換対象データを所定の構造を有するデータに変換するデータ変換方法であって、変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、に基づいて、変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成工程を有し、この変換データ生成工程は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、という構成を採る。
【００２４】
そして、上記変換データ生成工程は、繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び／あるいは当該繰返し処理命令の実行終了後に遷移して実行する遷移先処理命令を特定する処理命令特定情報を記憶する、という構成を採る。
【００２５】
また、上記繰返し処理命令は、ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含み、上記変換データ生成工程は、ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を処理命令特定情報としてループスタック内に順に記憶し、これに基づいてループ処理を行う、という構成を採る。
【００２６】
また、上記繰返し処理命令は、処理している変換対象データが下位階層のデータを有する場合に、ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含み、上記変換データ生成工程は、再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を処理命令特定情報として再帰スタック内に記憶し、再帰処理が終了したときに再帰スタックに記憶されているアドレス情報にて特定される処理命令から処理を続ける、という構成を採る。
【００２７】
さらに、上記ツリー変換定義情報は、ツリー構造の分岐点を変更する分岐点変更処理を開始／終了する処理命令を含み、上記変換データ生成工程は、分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じてツリー構造データに変換する、という構成を採る。
【００２８】
上述した構成のプログラムやデータ変換方法であっても、上記データ変換装置と同様に作用するため、上述した本発明の目的を達成することができる。
【００２９】
以下、本発明の具体的な構成及び動作を、実施形態にて説明する。なお、以下の実施形態では、データ変換装置として、インターネットを利用した企業間連携Ｂ２Ｂや、企業内のシステム統合ＥＡＩ（Enterprise Application Integration：エンタープライズアプリケーションインテグレーション）など、アプリケーションプログラム間のデータ交換といった用途に適用可能なデータ構造であるＸＭＬ（eXtensible Markup Language）に変換する場合を例に挙げて説明する。
【００３０】
具体的に、本発明のデータ変換装置は、電子商取引における取引先との商品情報や販促情報、販売実績情報などの情報をＸＭＬ文書化して情報を共有するシステムや、政府や自治体における申請書の電子化にＸＭＬ文書を適用した電子申請書システムに利用できる。また、ウェブサービスにおける分野で、複数の企業間の連携に利用できる。例えば、旅行代理店におけるサービスで、宿泊先と飛行機の予約に対して、各地のホテルや各社の航空チケットの空状況や格安料金の組合せなどの情報を自動で調べ、顧客に情報を提供し、予約を取るサービス・システムに利用できる。つまり、これらの情報のやり取りにＸＭＬを適用し、各社の異なるデータベース、データ構造のデータ交換に利用する。また、ＸＭＬの構造化特性を利用して、バイオの分野に適用できる。例えば、ＤＮＡの螺旋構造やたんぱく質の立体構造のような情報が独自にデータベース化されている場合、ＸＭＬに変換して新たにデータベース化し、ユーザや企業などに情報提供してＸＰａｔｈによる構造検索や研究・調査に利用できる。指紋や虹彩も構造化データであるため、同様に利用できる。
【００３１】
＜実施形態１＞
本発明の第１の実施形態を、図１乃至図２０を参照して説明する。図１乃至図２は、データ変換装置の構成を示すブロック図である。図３乃至図５は、データ変換装置の動作を示すフローチャートである。図６は、出力XMLの一例を示す図であり、図７は、図６のXMLを出力するための従来技術のXSLTにおける定義の例を示す図である。図８は、図６のXMLを出力するための本発明における定義の例を示す図である。図９は、外部装置のデータ構造の一例を示す図であり、図１０は、図９のデータ構造を出力XMLに変換した一例を示す図である。図１１は、図９のデータ構造を図１０のXMLに変換するための本発明における定義を示す図である。また、図１２乃至図１８は、本発明の動作を具体的に説明するためのタイムチャートである。図１９は、図９のデータ構造を図１１の定義によりデータ変換した最終結果のDOM木の構造を示す図であり、図２０は、最終的に生成された出力ＸＭＬを示す図である。
【００３２】
［構成］
図１に示すように、外部装置３のデータ構造をＸＭＬに変換するデータ変換装置１は、クラスローダ２と、対応表定義５を解析する対応表定義解析部１１と、ＸＭＬ構造定義を解析するＸＭＬ構造定義解析部１２と、ＸＭＬ  ＤＯＭ７と、これら処理部を制御する処理制御部１０と、を備えている。そして、ＸＭＬ  ＤＯＭ７は、ＸＭＬ変換部１３と、この変換部１３により生成するＤＯＭ木１４と、これをコード化するＸＭＬファイル出力部１５と、を含む。また、処理制御部１０は、プログラム・ポインタ２０とスタック２１とを含む。
【００３３】
また、データ変換装置１は、２つのコンパイラを持ち、具体的には、図２に示すように、対応表定義解析部１１に対応表定義５を解析するコンパイラ１１１と、ＸＭＬ構造定義解析部１２にＸＭＬ構造定義６を解析するＸＭＬ  ＤＯＭパーサ１２１と、を含む。
【００３４】
また、外部装置３のデータ構造３０とそのフィールド値は、外部から参照可能なデータである。そして、本発明のデータ変換装置１は、外部装置３のデータ構造３０のフィールド値をデータ変換し、目的のデータ構造の出力ＸＭＬファイル８を生成する、というものである。つまり、外部装置３に記憶されているデータ構造３０（フィールド値）は、所定の構造のデータに変換される変換対象データである。
【００３５】
また、上記クラスローダ２は、Ｊａｖａに代表されるプログラム言語が持つＡＰＩ（Application Programming Interface）であり、プログラム言語の基本概念のクラスを装置のメモリにロードするための仕組みである。メモリにロードしたクラスは、外部装置３のデータ構造を読み取るための手段で、フィールド値への直接のアクセス、または、プログラム言語の基本概念のメソッドの実行によりフィールド値へのアクセスが可能になる。すなわち、クラスローダ２は、外部装置３のデータ構造３０のフィールド値にアクセスし、値を取得するために使用する。
【００３６】
また、上記ＸＭＬ  ＤＯＭ７は、（DOM：Document Object Model）は、一般的にＷ３Ｃ（World Wide Web Consortium）が標準化を進めるＸＭＬとＨＴＭＬ文書処理用のＡＰＩで、本発明の方式では、プログラム処理の過程でＸＭＬ文書をツリー構造に変換して参照したり、ツリー構造のノードの生成や追加、削除などをすることに使用する。
【００３７】
また、図２に示す上記コンパイラ１１１，１２１等は、参考文献「Compilers: Principles, Techniques, and Tools. Aho et al.」にある手法と同様に、字句解析、構文解析、意味解析などの翻訳処理をし、目的のコードを生成する。具体的には、それぞれ２つのコンパイラ１１１，１２１及びＸＭＬ変換部１３、ＸＭＬファイル出力部１５が、各定義の解析をして中間表現のＤＯＭ木１４を生成すると共に、目的の出力ＸＭＬファイルを生成する（変換データ生成手段）。なお、中間表現とは、目的の出力ＸＭＬファイルを生成するまでのコンパイラ処理過程をツリー構造データで表現するものであり、ここではＤＯＭ木を指す。そしてコード生成とは、中間表現であるツリー構造データに従って目的のデータ構造のコードを生成することであり、ここでは出力ＸＭＬファイルを生成することである。
【００３８】
そして、上記プログラム・ポインタ２０は、データ変換処理の過程で必要な情報と値へのデータ変換処理装置のメモリ上のアドレスを指し示す。また、スタック２１は、データ変換処理の過程で時々刻々と変化するプログラム・ポインタ２０が指し示すメモリ上のアドレスを一時的に退避するための後入れ先出しの機構である。
【００３９】
また、図１に示す対応表定義５は、上記外部装置３内のデータ構造３０をＤＯＭ木１４に変換する複数の処理命令を含むツリー変換定義情報である。この対応表定義５は、データ変換装置１の対応表定義解析部１１にて読み出し可能なよう、予め記憶されている。そして、具体的に、対応表定義５は、「$FormatXML」、「$NodeOccurs」、「$Create」、「$ChXPath、「$/ChXPath」、「繰返し定義」（「繰返し開始定義」、「繰返し終了定義」）、「再帰定義」（「再帰開始定義」、「再帰終了定義」、「再帰呼出し定義」）、を含んでいる。
【００４０】
上記定義「$FormatXML」は、XML構造定義６のファイル名を指定する定義である。定義「$NodeOccurs」は、XML構造定義に定義するXMLの要素が持てる子供の要素の個数を与えるための属性名を指定する定義である。定義「$Create」は、外部装置のデータ構造３０を参照するために外部装置３と接続する定義である。定義「$ChXPath」（XPath変更開始定義）は、コンパイラ１１１により解析する過程で生成するＤＯＭ木１４について、あるノードの子に生成するノード、または、あるノードの子に生成する経路に含まれる複数のノードをXPathにより指定する定義であり、「$/ChXPath」（XPath変更終了定義）と組合せてこの定義の終了範囲とする。つまり、「$ChXPath」は、生成するＤＯＭ木の分岐点を変更する分岐点変更処理を開始する処理命令であり、「$/ChXPath」は、分岐点変更処理を終了する処理命令である。
【００４１】
また、上記定義「繰返し定義」とは、「繰返し開始定義」と「繰返し終了定義」のことを指し、この２つの定義を対にして定義する。そして、繰返し定義間の定義を指定範囲内または指定回数内で繰返して処理（ループ処理）を行う（例えば、JavaやC言語のような一般のプログラムのループ処理に似た動作をする）。例えば、「繰返し定義」は、フィールド値に処理対象となるデータが存在する場合に繰返す。また、上記定義「再帰定義」とは、「再帰開始定義」と「再帰終了定義」と「再帰呼出定義」のことを指し、この３つの定義を組合せて定義する。具体的には、「再帰呼出し定義」で条件が真の場合に、再度、「再帰開始定義」から「再帰終了定義」間の定義の処理を行う（例えば、JavaやC言語のような一般のプログラムの再帰呼出しに似た動作をする。例えば、「再帰定義」は、処理しているフィールド値がさらに下位階層のデータ（子情報）を有する場合に（条件が真）、その子情報に対して「再帰開始定義」から「再帰終了定義」の間の処理を呼び出して実行する。
【００４２】
以上のように、対応表定義５は、上記「繰返し定義」（ループ処理を実行する処理命令）、及び、上記「再帰定義」（再帰処理を実行する処理命令）、といった対応表定義５内の特定の処理命令を繰返して実行する繰返し処理命令を含んでいる。また、対応表定義５は、ＤＯＭ木であるツリー構造の分岐点を変更する分岐点変更処理を開始／終了する処理命令を含んでいる。
【００４３】
また、上記プログラム・ポインタは、具体的には５つ（Ｐ０〜Ｐ４）あって、以下のようなデータ変換処理装置１の各メモリ上のアドレスを指し示す。
「ポインタＰ０」：対応表定義の次に実行すべき定義命令が格納されているメモリ上のアドレス
「ポインタＰ１」：繰返し開始定義の次に実行すべき定義命令が格納されているメモリ上のアドレス
「ポインタＰ２」：再帰開始定義の次に実行すべき定義命令が格納されているメモリ上のアドレス
「ポインタＰ３」：ＤＯＭ木の次にノードまたは、枝を生成（Ｗｒｉｔｅ）すべきノードが格納されているメモリ上のアドレス
「ポインタＰ４」：外部装置３のデータ構造３０の次にＲｅａｄすべきフィールドを指すメモリ上のアドレス
【００４４】
また、上記スタックは、具体的に３つ（Ｓ１〜Ｓ３）あって、以下のように目的に応じて使用する情報を後入れ先出しの方法で一時的に退避する。つまり、スタックは、当該スタックに格納されるデータを取り出す際には、後に入れたものほど先に取り出されるよう構成されている。
「スタックＳ１」：繰返し定義用スタック
「スタックＳ２」：再帰定義用スタック
「スタックＳ３」：ＤＯＭ木ノード用スタック
【００４５】
そして、上述したプログラム・ポインタとスタックの操作は、上記対応表定義解析部１１にて、対応表定義５の各定義に応じて行われる。具体的には、以下のような規則に従って、対応表定義解析部１１が動作し、ＸＭＬ変換部１３にてＤＯＭ木１４を生成する。
「規則１」：「繰返し開始定義」に遭遇した場合、ポインタＰ１とＰ４が指すアドレスをスタックＳ１に格納（push）する。
「規則２」：「再帰呼出し定義」に遭遇し、ポインタＰ４が子情報を持つ場合、「再帰呼出し定義」のメモリ上のアドレスであるポインタＰ０の次の定義のアドレスと、ポインタＰ４が指すアドレスを、スタックＳ２に格納（push）する。そして、ポインタＰ０をポインタＰ２が指すアドレスに設定する。一方、ポインタＰ４が子情報を持たない場合、ポインタＰ０に次の定義のアドレスを設定する。
「規則３」：「XPath変更開始定義」に遭遇した場合、ポインタＰ３が指すアドレスをスタックＳ３に格納（push）する。
「規則４」：「繰返し終了定義」に遭遇した場合、条件を評価して、繰返さない場合はスタックＳ１に格納されているデータを取り出して（pop）破棄し、その後にスタックＳ１に残っている先頭のデータが指す値を、ポインタＰ１とＰ４に設定する。なお、繰り返し処理を繰返す場合は、ポインタＰ０にＰ１が指すアドレスを設定する。
「規則５」：「再帰終了定義」に遭遇した場合、スタックＳ２に格納されているデータを取り出し（pop）、このpopした値を、ポインタＰ０とポインタＰ４に設定する。なお、スタックＳ２が空の場合は、ポインタＰ０に次の定義のアドレスを設定する。
「規則６」：「XPath変更終了定義」に遭遇した場合、スタックＳ３に格納されているデータを取り出して（pop）破棄し、スタックＳ３に残っている先頭のデータが指す値をポインタＰ３に設定する。
なお、参考文献「Data Structures and Algorithms. Aho et al.」にあるようにスタックの操作を再帰的手続きにより簡易的に処理する実現方法も含む。
【００４６】
以上のように、各ポインタ及び各スタックへの格納規則によると、まず、「繰返し定義」の場合には、ポインタＰ１及びスタックＳ１に格納されたアドレスに基づいて繰返し処理（ループ処理）が実行される。すると、処理を繰返す場合には、ポインタＰ１のアドレスがポインタＰ０に設定されるため、次に実行すべき繰り返しの開始点を適切に実行することができる。また、繰返し処理が複雑に入り組んでいる場合であっても、繰返し処理の開始時にスタックＳ１に格納されたアドレスが取り出されてポインタＰ１に設定されるため、より適切に繰り返しの開始点に戻ることができる。
【００４７】
また、「再帰定義」の場合には、再帰処理の開始アドレスをポインタＰ２（再帰ポインタ）に、再帰処理の終了後の戻りアドレスをスタックＳ２に記憶する。すると、処理しているフィールド値が下位階層となる子情報を持つ場合に、再帰処理が呼び出されると、ポインタＰ２のアドレスに基づいて再帰処理を呼び出して実行し、その再帰処理の終了後には、スタックＳ２のアドレスに戻る。従って、再帰処理が入り組んだ場合であっても、記憶した情報に基づいて、適切に再帰処理を実行し、さらには、再帰処理の終了後の処理を実行することができる。
【００４８】
また、ツリーの分岐点に関する定義の場合には、分岐点情報をスタックＳ３（分岐点スタック）に格納し、分岐点の変更の終了時に、格納された分岐点情報が取り出されて設定される。従って、より適切に分岐点に戻ることができ、正確なＤＯＭ木を生成することができる。
【００４９】
このように、本発明では、特に、「繰返し処理」や「再帰処理」といった特定の処理を繰返す処理において、繰り返しや再帰の開始点や処理後の戻り点の処理命令（遷移先処理命令）のアドレスを、ポインタやスタックに処理命令特定情報として記憶している。従って、ポインタやスタックに記憶した情報に基づいて、各処理を適切に実行することができ、複雑に入り組んだＤＯＭ木であっても正確に生成することができる。
【００５０】
また、上記ＸＭＬ構造定義６は、出力ＸＭＬファイルの文書スタイルの構造と形式を定義した情報であり、上記ＤＯＭ木を生成する際、及び、最終的に目的とするＸＭＬファイルにコード化する際に用いられる。そして、上記ＸＭＬファイル出力部１５は、ＸＭＬ構造定義６に基づいてＤＯＭ木から出力ＸＭＬファイル８を生成する。
【００５１】
なお、上述したデータ変換装置１が備える機能、たとえば、対応表定義解析部１１やＸＭＬ構造定義解析部１２、処理制御部１０、ＸＭＬ変換部１３、ＸＭＬファイル出力部１５は、データ変換装置１に所定のプログラムが組み込まれることによって実現される。
【００５２】
［動作］
次に、上記データ変換装置１の動作を、図３乃至図５のフローチャートを参照して説明する。図３は、プログラム・ポインタとスタックを使用して、本実施形態における処理の概略を示したフローチャートであり、図４及び図５は、図３に示した処理の詳細に示したフローチャートである。
【００５３】
まず、プログラム・ポインタＰ０のアドレスの設定と対応表定義５の定義ごとのアドレスの移動により対応表定義５に定義があるか判定する（ステップＳ１）。定義があると判断した場合は、以下に説明する処理を繰り返す。定義がない場合は処理を終了する。
【００５４】
そして、対応表定義５に定義がある場合には、対応表定義部１１のコンパイラにより構文解析をし、解析結果によりコンテキスト単位であるか、コマンド単位であるか場合分けをする（ステップＳ２）。コンテキスト単位とは、構文解析、意味解析をすることにより複数の単語を組合せて１つの処理が実行できる定義を指し、通常は、対応表定義５に定義した１行が１つのコンテキストになる。コマンド単位とは、先頭に$の付く英数文字列で示す定義（図５のステップＳ６０１，Ｓ６１１，Ｓ６２１，Ｓ６３１，Ｓ６４１）、または、繰返し開始定義（ステップＳ６５１）、または、繰返し終了定義（ステップＳ６６１）、または、再帰開始定義（ステップＳ６７１）、再帰終了定義（ステップＳ６８１）の中のどれか１つだけの定義を指す。なお、先頭に$の付く英数文字列で示す定義とは、上述した「$FormatXML」、「$NodeOccurs」、「$Create」、「$ChXPath」、「$/ChXPath」、を指す。
【００５５】
続いて、コンテキスト単位の場合（ステップＳ３）、以下の３つの処理（ステップＳ４）を行う（図４参照）。
１）メソッド実行。メソッド実行定義であるか判定し（ステップＳ４０１）、Ｙｅｓの場合に対応表定義に定義したメソッドを実行する（ステップＳ４０２）。メソッドには、クラスローダ２により外部装置３のデータ構造３０に接続する処理とフィールド値を取り出す処理を含む。
２）再帰呼出し時の設定。上記規則２の処理と再帰呼出しに相当するＤＯＭ木に追加する枝の生成を行う（ステップＳ４０５，Ｓ４０６，Ｓ４０７，Ｓ４０８，Ｓ４０９，Ｓ４１０，Ｓ７）。
３）ＤＯＭ木に追加するノードの箇所に要素ノードとテキストノード、または、属性ノードとテキストノードからなる部分木を生成して、上記１）で取得したデータ構造３０のフィールド値をテキストノードに設定する（ステップＳ４１１、Ｓ４１２，Ｓ４１３）。
【００５６】
また、コマンド単位の場合（ステップＳ５）、以下の６つの処理（ステップＳ６）を行う（図５参照）。
１）ＸＭＬ構造定義取得。「$FormatXML定義」に遭遇した場合（ステップＳ６０１）、この定義に指定したＸＭＬ構造定義をコンパイラにより解析し、ＤＯＭ木を生成する（ステップＳ６０２）。これは、出力ＸＭＬのＤＯＭ木を生成する過程で、XPathにより指定した経路にあるすべてのノード（以降、XPath指定による枝、または、単に枝という）をXML構造定義のDOM木からの複製を取り出して、出力XMLのDOM木に追加することに使用する。
２）要素出現回数属性名定義。「$NodeOccurs定義」に遭遇した場合（ステップＳ６１１）、この定義に指定した英数字の名称をXML構造定義に指定する要素出現回数の属性名とする（ステップＳ６１２）。
３）外部装置接続手続き。「$Create定義」に遭遇した場合、クラスローダ２により外部装置３のデータベース３０に接続する（ステップＳ６２２）。これによりデータ構造３０のフィールド値へのアクセスを可能にする。
４）XPath変更定義。「$ChXPath定義」と「$/ChXPath定義」について処理を行う。「$ChXPath定義」に遭遇した場合（ステップＳ６３１）、上記規則３の処理とXPathに該当する枝をプログラム・ポインタＰ３が指すノードに生成する処理を行う（ステップＳ６３２、Ｓ６３３）。「$/ChXPath定義」に遭遇した場合（ステップＳ６４１）、上記規則６の処理を行う（ステップＳ６４２）。
５）繰返し定義。「繰返し開始定義」と「繰返し終了定義」について処理を行う。「繰返し開始定義」に遭遇した場合（ステップＳ６５１）、上記規則１の処理とプログラム・ポインタＰ１の設定を行う（ステップＳ６５２）。繰返し終了定義に遭遇した場合（ステップＳ６６１）、規則４の処理行い、繰返し定義内の定義を繰返し処理する場合は、プログラム・ポインタＰ４を次に読み出すべき（Readすべき）フィールド値を指すメモリ上のアドレスに移動する（ステップＳ６６２，Ｓ６６３，Ｓ６６４。なお、繰返すか否かの判定は、プログラム・ポインタＰ４が指すアドレスの次にReadすべきアドレスが存在するか否かで行う。存在する場合はプログラム・ポインタＰ１が指すアドレスをポインタＰ０に設定する準備を行う。存在しない場合は、繰返し終了定義の次の定義のアドレスをＰ０に設定する。
６）再帰定義。「再帰開始定義」と「再帰終了定義」について処理を行う。「再帰開始定義」に遭遇した場合（ステップＳ６７１）、プログラム・ポインタＰ２に再帰開始定義の次の定義のアドレスを設定する（ステップＳ６７２）。「再帰終了定義」に遭遇した場合（ステップＳ６８１）、上記規則５の処理を行う（ステップＳ６８２，Ｓ６８３，Ｓ６８４）。
【００５７】
ここで、図６に、上記処理により生成される出力ＸＭＬの一例を示す。また、図７に、図６に示したＸＭＬを出力するために用いるＸＳＬＴにおける定義の例を示す。一方で、図８に、図６に示したＸＭＬを出力するために本発明にて用いるデータの例を示す。具体的には、図８（ａ）にＸＭＬ構造定義を示し、図８（ｂ）に対応表定義を示す。
【００５８】
また、図９に、外部装置３のデータ構造３０のフィールド値を示し、このフィールド値を図１０に示す出力ＸＭＬにデータ変換する場合における定義を、図１１（ｂ）にXML構造定義６を、図１１（ｃ）に対応表定義５に示す。なお、図１１（ａ）は、図１１（ｂ）ＸＭＬ構造定義のＤＯＭ木である。この図では、ノードＰとＰＩの右横に記す「Occurs」は、ノード出現個数を示し、ノードの経路「R→C→P→P」で末端のノードＰから親のノードＰに戻る矢印は再帰であることを示す。再帰であるノードＰ以外の葉のノードID、NO、PAは値を持つことを意味する。ここで、XML構造定義は、図１０の繰返し出現するXMLの構造パターンをまとめ、XMLの値を取除くと、図１１（ｂ）に示すXMLが得られるのは自明である。そして、繰返し出現するパターン（ノードP、ノードPI）をOccurs属性で指定し（図１１（ｂ）の５，８，１１行目)、再帰的に出現するパターン（ノードP）を図１１（ｂ）の１４行目のように定義する。
【００５９】
そして、図１１（ｃ）に示す対応表定義は、以下のような手順で定義する。
（１）DOM木のノード経路で複数のノードを持つノードの分岐点に対してXPath変更定義をする（アドレスa1とa19、a4とa16、a8とa11）
（２）Occurs属性により出現個数が複数のノードに対して繰返し定義をする（a3とa17、a7とa12）。
（３）再帰であるノードに対して再帰定義をする（a2とa18とa14）。
（４）値を持つノードに対して対応定義をする（a5、a9、a10）。
（５）定義の見易さのために空行を入れる（a6、a13、a15）。
以上の手順により図１１（ｃ）の対応表定義が得られる。なお、ノードの定義箇所を比較すると、図１１（ｂ）と（ｃ）は構造が似ている。
【００６０】
さらに、図１２、図１３、図１４のタイムチャートを参照して、上記図１１の定義に従って図９のフィールド値をツリー構造のデータに変換していく過程を具体的に説明する。なお、さらに詳細なタイムチャートを図１５乃至図１８に示すが、かかる図の説明は省略する。
【００６１】
まず、タイムチャートの各項目について説明する。項目「時刻t」は、処理過程で状態の変化が発生する事象を表す。項目「プログラム・ポインタ」P0、P1、P2、P3、P4と項目「スタック」S1、S2、S3は上述の通りであり、項目「P0」、項目「P1」、項目「P2」は図１１（ｃ）の対応表定義のメモリ上のアドレスを指し、項目「P3」は項目「出力XML（DOM木）」に示すDOM木の次に部分木を生成すべきノードが格納されているメモリ上のアドレスを指し（txx（xxは英数字））、項目「P4」は項目「フィールド値」が示すフィールド値が格納されているメモリ上のアドレスを指す（fxx（xxは英数字））。項目「スタックの状態」は、ある事象におけるスタックS1、S2、S3に格納される値の様子を示す。また、項目「対応表定義」は、図１１（ｃ）の対応表定義のプログラム・ポインタが指すアドレスの定義を以下の略語で示す。
（１）X始：XPath開始定義
（２）X終：XPath終了定義
（３）繰開：繰返し開始定義
（４）繰終：繰返し終了定義
（５）再開：再帰開始定義
（６）再終：再帰終了定義
（７）再呼：再帰呼出し定義
（８）対応：対応定義
さらに、項目「XPath」は、$ChXPath定義により指定したXPathの項目「値設定」は、プログラム・ポインタP3が指すノードに生成するノードとそのノードに設定する値を示す。
【００６２】
図１２は、処理開始の時刻（t=0）から最初の対応定義が出現する時刻（t=5）までの処理についてのタイムチャートを示す。図１３は、繰返し定義の処理についてのタイムチャートを示す。図１４は、再帰処理についてのタイムチャートを示す。
【００６３】
（t=0）
初期設定を表す。なお、プログラム・ポインタP4は、$Create定義により外部装置3に接続済みで、かつ、データ構造30のフィールド値への初期設定のアドレスとしてfc01を指しているものとする。
【００６４】
（t=1）
対応表定義５からアドレスa1をプログラム・ポインタP0に設定する。すると、コマンド定義（図３のステップＳ５）のXPath変更開始定義であるから（図５のステップＳ６３１）、対応表定義に「X始」を設定する。そして、XPathに、現在の「/R/C」を設定、かつ、出力XML  DOM木にノードRとCを生成する（図５のステップＳ６３２）。よって、ポインタP3に「trc」を設定する。さらに、ポインタP3が指すアドレス「trc」をスタックS3にpushする（図５のステップＳ６３３）。なお、pushする値は集合の記法に習って｛｝で括って示す。
【００６５】
（t=2）
アドレスを次のアドレスa2に移動し、ポインタP0に設定する（図３のステップＳ７）。このとき、再帰開始定義であるから（図５のステップＳ６７１）、対応表定義に「再始」を設定する。そして、ポインタP2を、ポインタP0が指す次のアドレスa3に設定する（ステップＳ６７２）。
【００６６】
（t=3）
アドレスを次のアドレスa3に移動し、ポインタP0に設定する（図３のステップＳ７）。このとき、繰返し開始定義であるから（図５のステップＳ６５１）、対応表定義に「繰始」を設定する。そして、ポインタP1をポインタP0が指す次のアドレスa4に設定し、ポインタP1とポインタP4が指すアドレスをスタックS1にpushする（図５のステップＳ６５２）。
【００６７】
（t=4）
アドレスを次のアドレスa4に移動し、ポインタP0に設定する（図３のステップＳ７）。以下は、t=1の場合と同様となる。つまり、XPathに「/R/C/P」を設定し、DOM木のポインタP3が指すノードCに、ノードPを生成する。そして、生成したノードPのアドレスを指す「tp」をポインタP3に設定し、スタックS3に{tp}をpushする。
【００６８】
（t=5）
アドレスを次のアドレスa5に移動し、ポインタP0に設定する（図３のステップＳ７）。このとき、「対応定義」であるから、対応表定義に「対応」を設定する。そして、対応定義の左側から枝IDを、右側からデータ構造３０のフィールド値取得のためのメソッドgetIDを得る。この定義はコンテキスト単位の場合（図３のステップＳ３）と判定する。すると、対応定義の右側の定義のメソッドgetIDを実行することにより、ポインタP4が指すアドレスfc01の値「01」を得る（図４のステップＳ４０１，Ｓ４０２）。そして、対応定義の左側の定義の枝IDを生成し、枝の末端のノードIDに値「01」を設定する（図４のステップＳ４１１，Ｓ４１２）。なお、t=6以降の処理については、図１５に示すが、その説明については省略する。
【００６９】
次に、時刻を進めて、図１３に示すように、ポインタP0がa7を指している状態から繰返し定義の動作を説明する。
【００７０】
（t=16）
繰返し開始定義であるから（図５のステップＳ６５１）、対応表定義に「繰始」を設定する。そして、ポインタP1をポインタP0が指す次のアドレスa8に設定し、ポインタP1とポインタP4が指すアドレスを、スタックS1にpushする（図５のステップＳ６５２）。これにより、スタックS1は、{a4,fc11}から{a8,fc11}に変化する（変化の仕方を矢印（→）で表す）。つまり、{a4,fc11}の上に、{a8,fc11}が最新のアドレスとして蓄積された状態となる。なお、ポインタP2，P3，P4、スタックS2，S3、及び、XPathの設定は、t=15までの設定状態を示す。
【００７１】
（t=17）
アドレスを次のアドレスa8に移動し、ポインタP0に設定する（図３のステップＳ７）。XPathに「/R/C/P/P/PI」を設定する。このとき、DOM木のポインタP3が指すノードPにノードPIを生成し、生成したノードPIのアドレスを指す「tpi2」をポインタP3に設定する。そして、スタックS3に{tpi2}をpushする。
【００７２】
（t=18）
アドレスを次のアドレスa9に移動し、ポインタP0に設定する（図３のステップＳ７）。ここでは、上記（t=5）の場合と同様の処理となる。具体的には、対応定義の右側の定義のメソッドgetNoの実行、ポインタP4が指すアドレスfpi3+0の値「006」を得る（図４のステップＳ４０１、Ｓ４０２）。そして、対応定義の左側の定義のNOを生成し、ノードNOに値「006」を設定する（ステップＳ４１１，Ｓ４１２）。
【００７３】
（t=19）
アドレスを次のアドレスa10に移動し、ポインタP0に設定する（図３のステップＳ７）。ここでも上記（t=5）の場合と同様の処理となる。具体的には、DOM木のtpi3+0が指すノードPIにノードPAを生成し、値CPUを設定する（図４のステップＳ４０１，Ｓ４０２，Ｓ４１１，Ｓ４１２）。
【００７４】
（t=20）
アドレスを次のアドレスa11に移動し、ポインタP0に設定する（図３のステップＳ７）。ここでは、XPath変更終了定義であるから（図５のステップＳ６４１）、対応表定義に「X終」を設定する。そして、スタックS3から最新のデータをpopして破棄し（ステップＳ６４２）、スタックS3内に残ったデータの先頭が指すアドレスをポインタP3に設定する。つまり、ＰＩ（ｔｐｉ２）よりも階層が上のノードＰ（ｔｐ２）に移動する。
【００７５】
（t=21）
アドレスを次のアドレスa12に移動し、ポインタP0に設定する（図３のステップＳ７）。繰返し終了定義であるから（図５のステップＳ６６１）、対応表定義に「繰終」を設定する。このとき、フィールド値に繰返し処理を行うデータが存在するため、繰返し定義内を繰返す判定で、繰返しあり「繰あり」を設定する（図５のステップＳ６６２でＹｅｓ）。そして、繰返し開始位置であるポインタP1が指すアドレスa8をポインタP0に設定し、ポインタP4を次に読み出すべきアドレスtpi3+1に設定する（図５のステップＳ６６３）。
【００７６】
（t=22〜26、27〜30）
その後、上記（t=17〜21）の場合と同様の処理を繰返す。なお、値設定のNO=006→007→008とPA=CPU→CPU→Memoryは、時刻の変化により値の設定が変わる様子を矢印を使って表している。
【００７７】
（t=31）
アドレスを、t=30のときのアドレスa11の次のアドレスa12に移動し、ポインタP0に設定する（図３のステップＳ７）。繰返し終了定義であるから（図５のステップＳ６６１）、対応表定義に「繰終」を設定する。このとき、繰返すべきフィールド値がないため、繰返し定義内を繰返す判定で、繰返しなし「繰なし」を設定する（図５のステップＳ６６２でＮｏ）。そして、スタックS1から最新のデータ{a8,fc11}をpopして破棄し、スタックS1に残った先頭のデータが指すアドレス{a4,fc11}を、それぞれポインタP1とポインタP4に設定する（ステップＳ６６４）。つまり、ここでは、ポインタP1にa4を設定し、ポインタP4にfc11を設定する。これにより、繰返し開始定義１による繰り返し処理に戻ることができ、繰返し処理が入り組んだ状態でも適切なアドレスに戻ることができる。
【００７８】
次に、時刻を進めて、図１４に示すように、アドレスa12〜a19間の再帰呼出し定義と再帰終了定義の動作を説明する。
【００７９】
（t=2）
再帰開始定義での設定を示す。具体的な設定は、図１２におけるt=2の説明と同じである。つまり、ポインタP2に再帰開始定義の次に実行すべき定義命令が格納されているアドレスa3を格納する。
【００８０】
（t=11）
再帰呼出しの直前の状態を示す。
【００８１】
（t=12）
アドレスを次のアドレスa14に移動し、ポインタP0に設定する（図３のステップＳ７）。対応定義で、かつ、再帰呼出し定義であるから（図４のステップＳ４０５でYes）、対応表定義に「再呼」を設定する。そして、対応定義の左側から枝Pを、右側からデータ構造３０のフィールド値取得のためのメソッドgetChildsを得る。この定義はコンテキスト単位の場合（図３のステップＳ３）と判定する。右側の定義のメソッドgetChildsを実行することにより、ポインタP4が指すアドレスfc01の子情報のアドレスC0を得る（図９参照、図４のステップＳ４０１，Ｓ４０２，Ｓ４０５でＹｅｓ）。すると、判定に子ありを設定し、ポインタP0が指す次の定義のアドレスa16とポインタP4が指すアドレスfc01を、スタックS2にpushする（図４のステップＳ４０７）。また、対応定義の左側の定義の枝Pを、ポインタP3が指すアドレスtrcのノードの子に生成する（図４のステップＳ４０８）。ポインタP2が指すアドレスa3をポインタP0に設定する準備をする（図４のステップＳ４０９）。
【００８２】
（t=13）
続いて、アドレスをa3に移動し、ポインタP0に設定する（図３のステップＳ７）。そして、上記（t=3）の場合と同様の処理を実行する。
【００８３】
（t=32）
上記a3以降の一連の再帰処理を実行した後に（図１６、図１７参照）、アドレスa14に移動し、上記（t=12）の場合と同様の処理を行う。但し、ここでは、図４のステップＳ４０６の判定が異なり、図９のC1からC11に示すように子情報がないため、Ｎｏ側に進む。そして、ポインタP0に次の定義を設定する準備をする（図４のステップＳ４１０）。
【００８４】
（t=33）
アドレスを次のアドレスa16に移動し、ポインタP0に設定する（図３のステップＳ７）。XPath変更終了定義であるから（図５のステップＳ６４１）、対応表定義に「X終」を設定する。そして、スタックS3内の最新のデータ{tp2}をpopして破棄し（図５のステップＳ６４２）、スタックS3に残った先頭のデータが指すアドレスtpをポインタP3に設定し、XPathに/R/C/Pを設定する。
【００８５】
（t=34）
アドレスを次のアドレスa17に移動し、ポインタP0に設定する（図３のステップＳ７）。繰返し終了定義であるから（図５のステップＳ６６１）、対応表定義に「繰終」を設定する。ここでは、繰返すフィールド値がないため、繰返し定義内を繰返す判定で繰返しなし「繰なし」を設定する（図５のステップＳ６６２でＮｏ）。そして、スタックS1から最新のデータをpopして破棄し、スタックS1に残った先頭のデータが指すアドレスをポインタP1とP4に設定する（図５のステップＳ６６４）。つまり、ポインタP1にa4を設定し、ポインタP4にfc01を設定する。
【００８６】
（t=35）
アドレスを次のアドレスa18に移動し、ポインタP0に設定する（図３のステップＳ７）。再帰終了定義であるから（図５のステップＳ６８１）、対応表定義に「再終」を設定する。このとき、スタックS2は空ではないため（図５のステップＳ６８２でＮｏ）、スタックS2内のデータをpopし、このpopした値をポインタP0とP4に設定する（図５のステップＳ６８３）。つまり、ポインタP0に、再帰終了後の処理命令のアドレスであるa16を設定し、ポインタP4にfc01を設定する。
【００８７】
（t=36）
アドレスを、上述したようにa16に設定する。以降は、上述した（t=33〜t=35）と同様の処理となる（図１７参照）。ただし、a18の再帰終了定義の処理で、図５のステップＳ６８２の判定はYes側になり、ポインタP0に次の定義のアドレスa19を設定する。なお、全体的なタイムチャートは、図１５乃至図１８に示す。
【００８８】
以上のような処理により、最終的に図１９のようなDOM木を生成する。そして、さらに、XMLファイル出力部１５が、ＸＭＬ構造定義６を参照して図１９のDOM木を処理することにより、図２０に示すような目的のXMLを出力し、変換データ生成工程が終了する。
【００８９】
上述したように、本実施形態によると、対応表定義内の特定の処理命令を繰返す繰返し処理命令を処理する際に、この繰返し処理命令の実行に応じて遷移して処理する遷移先処理命令を特定する情報を、ポインタやスタックに記憶している。従って、ループ処理や再帰処理といった複数の繰返し処理が入り組んだ場合（ノードがネストする場合）であっても、繰返し処理の実行時に、記憶した遷移先処理命令を特定するアドレス情報に基づいて、適切に遷移先（繰り返しや再帰の開始点、戻り点）の処理命令を特定して実行することができる。その結果、あらゆる変換対象データであっても、適切にツリー構造のデータに変換することができる。
【００９０】
これに加え、本実施形態では、対応表定義とＸＭＬ構造定義の文書スタイルが簡易であり、また、ＸＳＬＴと比較して出力ＸＭＬの構造が判別し易い。従って、手作業での作成が容易となる。さらに、変換対象となる外部装置のデータ構造の仕様変更によりXMLの文書スタイルの仕様が変更になった場合でも、プログラムの修正はなく、XML構造定義または対応表定義の変更をすることだけで済む。以上より、ユーザの利便性の向上を図ることができる。
【００９１】
なお、上述したデータ変換装置１は、XML構造として、再帰定義と繰返し定義のネストのような複雑な構造を必要としない場合であっても、ＸＭＬの生成処理が可能である。この場合には、上述した図１及び図２からスタックを取り除いたもので実施可能であり、データ変換処理もスタック操作を取り除いた簡素な処理で実現できる。具体的には、図５からステップＳ６７１，Ｓ６７２，Ｓ６８１〜Ｓ６８４を除いたフローチャート、及び、スタックS1、S2を除いた構成で済む。
【００９２】
＜実施形態２＞
次に、本発明の第２の実施形態を、図２１を参照して説明する。本実施形態は、上記実施形態１で説明したデータ変換装置１を利用したデータ逆変換装置１’である。これは、XMLファイルを入力とし、対応表定義とXML構造定義を図２のコンパイラにより構文解析してクラスローダにより外部システムのデータ構造の合い対応するフィールド値にXMLファイルの値を設定する装置である。第１の実施例と同様な原理により実現可能である。
【００９３】
具体的には、入力XMLファイル８’をコンパイラで処理することにより得たDOM木と、対応表定義に定義する対応定義の「XPath 対 外部装置のデータ構造に設定するフィールドまたはメソッド」との対応によるXPathからノードを特定して、そのノードから値を取得し、さらにデータ構造のフィールドに値を設定していく。この処理の過程は、第１の実施形態のXML構造定義のDOM木からXPathにより枝を取出すことの操作について、入力XMLのDOM木からXPathにより枝を取出す処理に置き換え、クラスローダの書き込み操作を使って取出した枝のノードの値を外部システムのデータ構造のフィールドに書き込む処理に置き換えるだけで実現できる。
【００９４】
＜実施形態３＞
次に、本発明の第３の実施形態を、図２２を参照して説明する。本実施形態は、既存の外部装置３，３’に、上記第１の実施形態と第２の実施形態を適用して、XMLによりデータを送受信する方法である。この方法は、異なるデータ構造を持つ２つの装置間のデータを第１の実施形態と第２の実施形態による装置をネットワークに接続して実現した相互データ送受信方法である。
【００９５】
具体的には、ネットワークを通して送信するXMLデータには、機密保護のため、Java暗号化拡張機能(Java Crytography ExtensionのDES、RC 2/4、IDEA)やビット操作による独自手法を組合せた特殊なコードに暗号化する方法も含む。そして、F地点に設置した外部装置３を第１の実施形態のデータ変換装置１によりXMLに変換して特殊コード化し、ネットワークを通してK地点にXMLを送信する。K地点に設置した第２の実施形態のデータ逆変換装置１’により受信したXMLをK地点の外部装置３’のデータ構造に変換してディスプレイで表示したり、K地点でデータ処理する。
【産業上の利用可能性】
【００９６】
本発明は、インターネットを利用した企業間連携B2Bや企業内のシステム統合EAIにおけるXMLを用いたアプリケーションプログラム間のデータ交換といった用途に適用できるため、産業上の利用可能性を有する。
【図面の簡単な説明】
【００９７】
【図１】実施形態１におけるデータ変換装置の構成を示すブロック図である。
【図２】実施形態１におけるデータ変換装置の構成を示すブロック図である。
【図３】図１に開示したデータ変換装置の動作を示すフローチャートである。
【図４】図３に開示した動作の詳細を示すフローチャートである。
【図５】図３に開示した動作の詳細を示すフローチャートである。
【図６】出力XMLの一例を示す図である。
【図７】図６に開示したXMLを出力するためのXSLTにおける定義の例を示す図である。
【図８】図６に開示したXMLを出力するための実施形態１における定義の例を示す図である。
【図９】外部装置のデータ構造の一例を示す図である。
【図１０】図９のデータ構造を出力XMLに変換した一例を示す図である。
【図１１】図９のデータ構造を図１０のXMLに変換するための実施形態１における定義を示す図である。
【図１２】図１に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図１３】図１に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図１４】図１に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図１５】図１に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図１６】図１に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図１７】図１に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図１８】図１に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図１９】図９に開示したデータ構造を図１１に開示した定義によりデータ変換した最終結果のDOM木の構造を示す図である。
【図２０】図１９に開示したDOM木を変換したXMLを示す図である。
【図２１】実施形態２におけるデータ逆変換装置の構成を示すブロック図である。
【図２２】実施形態３におけるデータ送受信システムの構成を示すブロック図である。
【符号の説明】
【００９８】
１  データ変換装置
２  クラスローダ
３  外部装置
４  データベース（生産装置構成情報）
５  対応表定義
６  XML構造定義
７  XML
DOM
８  出力XMLファイル
１０  処理制御部
２０  プログラム・ポインタ
２１  スタック
１１  対応表定義解析部
１２  XML構造定義解析部
１３  XML変換部
１４  XML DOM木
１５  XMLファイル出力部
３０  外部装置のデータ構造
【図１】
2009169707.tif 000003
【図２】
2009169707.tif 000004
【図３】
2009169707.tif 000005
【図４】
2009169707.tif 000006
【図５】
2009169707.tif 000007
【図６】
2009169707.tif 000008
【図７】
2009169707.tif 000009
【図８】
2009169707.tif 000010
【図９】
2009169707.tif 000011
【図１０】
2009169707.tif 000012
【図１１】
2009169707.tif 000013
【図１２】
2009169707.tif 000014
【図１３】
2009169707.tif 000015
【図１４】
2009169707.tif 000016
【図１５】
2009169707.tif 000017
【図１６】
2009169707.tif 000018
【図１７】
2009169707.tif 000019
【図１８】
2009169707.tif 000020
【図１９】
2009169707.tif 000021
【図２０】
2009169707.tif 000022
【図２１】
2009169707.tif 000023
【図２２】
2009169707.tif 000024