説明

データ変換装置

【課題】複雑に入り組んだツリー構造の構造データに容易に変換して生成することが可能なデータ変換装置を提供すること。
【解決手段】変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備え、ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、変換データ生成手段は、繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ変換装置にかかり、特に、所定のデータ構造のデータを、特定のデータ構造に変換するデータ変換装置に関する。
【背景技術】
【0002】
近年、インターネット上における電子データの交換や保存するために、XML(eXtensible Markup Language)というデータ構造を用いている。そして、外部装置に記憶されたあるデータ構造のデータを、XMLにデータ変換する場合には、このデータ構造に合わせて、変換ルールを記述したXSLT(eXtensible Stylesheet Language Transformations)の他に、変換用プログラムを作成する必要がある。
【0003】
例えば、あるデータ構造をXMLに変換するデータ変換方法の一例としては、XML DOMによるプログラム手法や、XML DOMによるプログラム手法とXSLTとの組合せ、がある。また、特許文献1に開示されているように、データ構造のフィールド値を取り出してテキストに変換したテキストファイルとXSLTとの組合せによる方法がある。さらには、独自プログラム手法(外部装置のデータ構造をサーチして値を取り出し、XML DOMは使わずに標準ファイル出力関数を使ってXMLに出力する方法)などがある。
【0004】
【特許文献1】特開2005−267531号公報
【特許文献2】特開2005−339019号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ところが、上記いずれの方法であっても、外部装置のデータ構造に合わせてその都度データを変換するためのプログラムを必要としているため、かかるプログラムを作成することに手間がかかる。また、XML DOMや構造化データを扱うプログラム手法の専門知識を必要とするため、プログラム作成の経験もなく、専門知識のない人にはデータ変換のプログラムを作成することは難しく、作成が困難であった。さらに、XMLのノードが入れ子状となりネストするツリー構造である場合には、これをデータ変換するプログラムの作成は難しさを増すこととなる。
【0006】
また、外部装置のデータ構造の仕様変更などによりXMLの文書スタイルの仕様を変更する場合には、データ変換のプログラムの修正を行い、かつ、プログラム修正を装置に認識させるために、データ変換装置を再起動させる煩わしさもあった。なお、外部装置のデータ構造に設定されている主なフィールド値は、データベースから取出した情報を元に計算し、加工した値である。
【0007】
ここで、特許文献2では、表ファイルから、データ構造を解釈してXMLデータを生成するデータ変換装置を開示している。しかしながら、上記データ変換装置は、表ファイルからXMLデータを生成しているため、複雑に入り組んだツリー構造のXMLデータを生成することは困難である。
【0008】
このため、本発明の目的は、上述した課題である、複雑に入り組んだツリー構造の構造データに容易に変換して生成することが可能なデータ変換装置を提供することにある。
【課題を解決するための手段】
【0009】
そこで、本発明の一形態であるデータ変換装置は、
変換対象データを所定の構造を有するデータに変換するデータ変換装置であって、
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、
ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備え、
ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、
変換データ生成手段は、繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
という構成を採っている。
【0010】
また、本発明の他の形態であるプログラムは、
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶したコンピュータに、
ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を実現するためのプログラムであり、
変換データ生成手段は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
という構成を採る。
【0011】
さらに、本発明の他の形態であるデータ変換方法は、
変換対象データを所定の構造を有するデータに変換するデータ変換方法であって、
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、に基づいて、変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成工程を有し、
変換データ生成工程は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、
という構成を採る。
【発明の効果】
【0012】
本発明は、以上のように構成されるため、繰返し処理が複雑に入り組んだような変換対象データであっても、適切にツリー構造のデータに変換することができる。従って、あらゆる変換対象データの変換に対応することができ、装置の汎用性が向上し、ユーザの利便性の向上も図ることができる。
【発明を実施するための最良の形態】
【0013】
本発明の一形態であるデータ変換装置は、上述したように、変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備えている。そして、上記ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、上記変換データ生成手段は、繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、という構成を採る。
【0014】
上記発明によると、変換データ生成手段は、ツリー変換定義情報及び変換構造定義情報に基づいて変更対象データをツリー構造データに変換する。このとき、ツリー変換定義情報内の特定の処理命令を繰返す繰返し処理命令を処理する際に、この繰返し処理命令の実行に応じて遷移して処理する遷移先処理命令を特定する情報を記憶する。従って、複数の繰返し処理が入り組んだ場合であっても、繰返し処理の実行時に、記憶した遷移先処理命令を特定する情報に基づいて、適切に遷移先の処理命令を特定して実行することができる。その結果、あらゆる変換対象データであっても、適切にツリー構造のデータに変換することができる。そして、最終的にツリー構造データを所定のデータ構造に変換することで、データ構造の変換を実現できる。
【0015】
そして、上記データ変換装置では、上記変換データ生成手段が、繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び/あるいは当該繰返し処理命令の実行終了後に遷移して実行する遷移先処理命令を特定する処理命令特定情報を記憶する、という構成を採る。
【0016】
例えば、上記繰返し処理命令は、ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含む。このとき、上記変換データ生成手段は、ループ処理を開始する時に、当該ループ処理の開始点となる処理命令のアドレス情報を処理命令特定情報としてループスタック内に順に記憶し、これに基づいてループ処理を行う、という構成を採る。さらに、上記変換データ生成手段は、ループ処理を終了する処理命令を処理する時に、ループスタック内の最新の前記アドレス情報を破棄し、次に新しいアドレス情報に基づいてループ処理を実行する、という構成を採る。
【0017】
このように、繰返し処理がループ処理である場合には、そのループ処理の開始点を記憶しておく。これにより、複数の入り組んだループ処理を実行する場合であっても、蓄積した上記ループスタック内のアドレス情報である開始点に基づいて適切にループ処理を実行することができ、ツリー構造データを生成することができる。
【0018】
また、例えば、上記データ変換装置では、上記繰返し処理命令が、処理している変換対象データが下位階層のデータを有する場合に、ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含む。このとき、上記変換データ生成手段は、再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を再帰スタック内に処理命令特定情報として記憶し、再帰処理が終了したときに再帰スタックに記憶されているアドレス情報にて特定される処理命令から処理を続ける、という構成を採る。さらに、変換データ生成手段は、再帰処理を呼び出す処理命令によって呼び出されて実行される再帰処理を開始する処理命令を処理する時に、当該再帰処理の開始点となる処理命令のアドレス情報を処理命令特定情報として再帰ポインタに記憶し、再帰処理を呼び出す処理命令の実行時に、処理している変換対象データが下位階層となる子情報を持つ場合に、再帰ポインタに記憶されているアドレス情報に基づいて再帰処理を実行する、という構成を採る。
【0019】
このように、繰返し処理が再帰処理である場合には、その再帰処理の開始アドレスと終了後の戻りアドレスを記憶しておく。これにより、再帰処理が入り組んだ場合であっても、記憶した情報に基づいて、適切に再帰処理を実行し、さらには、再帰処理の終了後の処理を実行することができる。その結果、適切なツリー構造データに変換することができる。
【0020】
また、上記データ変換装置では、上記ツリー変換定義情報が、ツリー構造の分岐点を変更する分岐点変更処理を開始/終了する処理命令を含み、変換データ生成手段は、分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じてツリー構造データに変換する、という構成を採る。そして、上記変換データ生成手段は、分岐点変更処理を終了する処理命令を処理する時に、分岐スタック内に蓄積された最新の分岐点情報を破棄して、次に新しい分岐点情報を用いてツリー構造データに変換する、という構成を採る。
【0021】
このように、ツリー変換処理時に、分岐点の変化を記憶しておくことで、複雑なツリー構造となる場合であっても、正確にツリー構造データを生成することができる。
【0022】
また、本発明の他の形態であるプログラムは、変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶したコンピュータに、ツリー変換定義情報及び変換構造定義情報に基づいて変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段と、を実現するためのプログラムであり、上記変換データ生成手段は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、という構成を採る。
【0023】
さらに、本発明の他の形態であるデータ変換方法は、変換対象データを所定の構造を有するデータに変換するデータ変換方法であって、変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、変換対象データの変換後のデータ構造を定義する変換構造定義情報と、に基づいて、変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成工程を有し、この変換データ生成工程は、ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理するツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいてツリー構造データに変換する、という構成を採る。
【0024】
そして、上記変換データ生成工程は、繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び/あるいは当該繰返し処理命令の実行終了後に遷移して実行する遷移先処理命令を特定する処理命令特定情報を記憶する、という構成を採る。
【0025】
また、上記繰返し処理命令は、ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含み、上記変換データ生成工程は、ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を処理命令特定情報としてループスタック内に順に記憶し、これに基づいてループ処理を行う、という構成を採る。
【0026】
また、上記繰返し処理命令は、処理している変換対象データが下位階層のデータを有する場合に、ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含み、上記変換データ生成工程は、再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を処理命令特定情報として再帰スタック内に記憶し、再帰処理が終了したときに再帰スタックに記憶されているアドレス情報にて特定される処理命令から処理を続ける、という構成を採る。
【0027】
さらに、上記ツリー変換定義情報は、ツリー構造の分岐点を変更する分岐点変更処理を開始/終了する処理命令を含み、上記変換データ生成工程は、分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じてツリー構造データに変換する、という構成を採る。
【0028】
上述した構成のプログラムやデータ変換方法であっても、上記データ変換装置と同様に作用するため、上述した本発明の目的を達成することができる。
【0029】
以下、本発明の具体的な構成及び動作を、実施形態にて説明する。なお、以下の実施形態では、データ変換装置として、インターネットを利用した企業間連携B2Bや、企業内のシステム統合EAI(Enterprise Application Integration:エンタープライズアプリケーションインテグレーション)など、アプリケーションプログラム間のデータ交換といった用途に適用可能なデータ構造であるXML(eXtensible Markup Language)に変換する場合を例に挙げて説明する。
【0030】
具体的に、本発明のデータ変換装置は、電子商取引における取引先との商品情報や販促情報、販売実績情報などの情報をXML文書化して情報を共有するシステムや、政府や自治体における申請書の電子化にXML文書を適用した電子申請書システムに利用できる。また、ウェブサービスにおける分野で、複数の企業間の連携に利用できる。例えば、旅行代理店におけるサービスで、宿泊先と飛行機の予約に対して、各地のホテルや各社の航空チケットの空状況や格安料金の組合せなどの情報を自動で調べ、顧客に情報を提供し、予約を取るサービス・システムに利用できる。つまり、これらの情報のやり取りにXMLを適用し、各社の異なるデータベース、データ構造のデータ交換に利用する。また、XMLの構造化特性を利用して、バイオの分野に適用できる。例えば、DNAの螺旋構造やたんぱく質の立体構造のような情報が独自にデータベース化されている場合、XMLに変換して新たにデータベース化し、ユーザや企業などに情報提供してXPathによる構造検索や研究・調査に利用できる。指紋や虹彩も構造化データであるため、同様に利用できる。
【0031】
<実施形態1>
本発明の第1の実施形態を、図1乃至図20を参照して説明する。図1乃至図2は、データ変換装置の構成を示すブロック図である。図3乃至図5は、データ変換装置の動作を示すフローチャートである。図6は、出力XMLの一例を示す図であり、図7は、図6のXMLを出力するための従来技術のXSLTにおける定義の例を示す図である。図8は、図6のXMLを出力するための本発明における定義の例を示す図である。図9は、外部装置のデータ構造の一例を示す図であり、図10は、図9のデータ構造を出力XMLに変換した一例を示す図である。図11は、図9のデータ構造を図10のXMLに変換するための本発明における定義を示す図である。また、図12乃至図18は、本発明の動作を具体的に説明するためのタイムチャートである。図19は、図9のデータ構造を図11の定義によりデータ変換した最終結果のDOM木の構造を示す図であり、図20は、最終的に生成された出力XMLを示す図である。
【0032】
[構成]
図1に示すように、外部装置3のデータ構造をXMLに変換するデータ変換装置1は、クラスローダ2と、対応表定義5を解析する対応表定義解析部11と、XML構造定義を解析するXML構造定義解析部12と、XML DOM7と、これら処理部を制御する処理制御部10と、を備えている。そして、XML DOM7は、XML変換部13と、この変換部13により生成するDOM木14と、これをコード化するXMLファイル出力部15と、を含む。また、処理制御部10は、プログラム・ポインタ20とスタック21とを含む。
【0033】
また、データ変換装置1は、2つのコンパイラを持ち、具体的には、図2に示すように、対応表定義解析部11に対応表定義5を解析するコンパイラ111と、XML構造定義解析部12にXML構造定義6を解析するXML DOMパーサ121と、を含む。
【0034】
また、外部装置3のデータ構造30とそのフィールド値は、外部から参照可能なデータである。そして、本発明のデータ変換装置1は、外部装置3のデータ構造30のフィールド値をデータ変換し、目的のデータ構造の出力XMLファイル8を生成する、というものである。つまり、外部装置3に記憶されているデータ構造30(フィールド値)は、所定の構造のデータに変換される変換対象データである。
【0035】
また、上記クラスローダ2は、Javaに代表されるプログラム言語が持つAPI(Application Programming Interface)であり、プログラム言語の基本概念のクラスを装置のメモリにロードするための仕組みである。メモリにロードしたクラスは、外部装置3のデータ構造を読み取るための手段で、フィールド値への直接のアクセス、または、プログラム言語の基本概念のメソッドの実行によりフィールド値へのアクセスが可能になる。すなわち、クラスローダ2は、外部装置3のデータ構造30のフィールド値にアクセスし、値を取得するために使用する。
【0036】
また、上記XML DOM7は、(DOM:Document Object Model)は、一般的にW3C(World Wide Web Consortium)が標準化を進めるXMLとHTML文書処理用のAPIで、本発明の方式では、プログラム処理の過程でXML文書をツリー構造に変換して参照したり、ツリー構造のノードの生成や追加、削除などをすることに使用する。
【0037】
また、図2に示す上記コンパイラ111,121等は、参考文献「Compilers: Principles, Techniques, and Tools. Aho et al.」にある手法と同様に、字句解析、構文解析、意味解析などの翻訳処理をし、目的のコードを生成する。具体的には、それぞれ2つのコンパイラ111,121及びXML変換部13、XMLファイル出力部15が、各定義の解析をして中間表現のDOM木14を生成すると共に、目的の出力XMLファイルを生成する(変換データ生成手段)。なお、中間表現とは、目的の出力XMLファイルを生成するまでのコンパイラ処理過程をツリー構造データで表現するものであり、ここではDOM木を指す。そしてコード生成とは、中間表現であるツリー構造データに従って目的のデータ構造のコードを生成することであり、ここでは出力XMLファイルを生成することである。
【0038】
そして、上記プログラム・ポインタ20は、データ変換処理の過程で必要な情報と値へのデータ変換処理装置のメモリ上のアドレスを指し示す。また、スタック21は、データ変換処理の過程で時々刻々と変化するプログラム・ポインタ20が指し示すメモリ上のアドレスを一時的に退避するための後入れ先出しの機構である。
【0039】
また、図1に示す対応表定義5は、上記外部装置3内のデータ構造30をDOM木14に変換する複数の処理命令を含むツリー変換定義情報である。この対応表定義5は、データ変換装置1の対応表定義解析部11にて読み出し可能なよう、予め記憶されている。そして、具体的に、対応表定義5は、「$FormatXML」、「$NodeOccurs」、「$Create」、「$ChXPath、「$/ChXPath」、「繰返し定義」(「繰返し開始定義」、「繰返し終了定義」)、「再帰定義」(「再帰開始定義」、「再帰終了定義」、「再帰呼出し定義」)、を含んでいる。
【0040】
上記定義「$FormatXML」は、XML構造定義6のファイル名を指定する定義である。定義「$NodeOccurs」は、XML構造定義に定義するXMLの要素が持てる子供の要素の個数を与えるための属性名を指定する定義である。定義「$Create」は、外部装置のデータ構造30を参照するために外部装置3と接続する定義である。定義「$ChXPath」(XPath変更開始定義)は、コンパイラ111により解析する過程で生成するDOM木14について、あるノードの子に生成するノード、または、あるノードの子に生成する経路に含まれる複数のノードをXPathにより指定する定義であり、「$/ChXPath」(XPath変更終了定義)と組合せてこの定義の終了範囲とする。つまり、「$ChXPath」は、生成するDOM木の分岐点を変更する分岐点変更処理を開始する処理命令であり、「$/ChXPath」は、分岐点変更処理を終了する処理命令である。
【0041】
また、上記定義「繰返し定義」とは、「繰返し開始定義」と「繰返し終了定義」のことを指し、この2つの定義を対にして定義する。そして、繰返し定義間の定義を指定範囲内または指定回数内で繰返して処理(ループ処理)を行う(例えば、JavaやC言語のような一般のプログラムのループ処理に似た動作をする)。例えば、「繰返し定義」は、フィールド値に処理対象となるデータが存在する場合に繰返す。また、上記定義「再帰定義」とは、「再帰開始定義」と「再帰終了定義」と「再帰呼出定義」のことを指し、この3つの定義を組合せて定義する。具体的には、「再帰呼出し定義」で条件が真の場合に、再度、「再帰開始定義」から「再帰終了定義」間の定義の処理を行う(例えば、JavaやC言語のような一般のプログラムの再帰呼出しに似た動作をする。例えば、「再帰定義」は、処理しているフィールド値がさらに下位階層のデータ(子情報)を有する場合に(条件が真)、その子情報に対して「再帰開始定義」から「再帰終了定義」の間の処理を呼び出して実行する。
【0042】
以上のように、対応表定義5は、上記「繰返し定義」(ループ処理を実行する処理命令)、及び、上記「再帰定義」(再帰処理を実行する処理命令)、といった対応表定義5内の特定の処理命令を繰返して実行する繰返し処理命令を含んでいる。また、対応表定義5は、DOM木であるツリー構造の分岐点を変更する分岐点変更処理を開始/終了する処理命令を含んでいる。
【0043】
また、上記プログラム・ポインタは、具体的には5つ(P0〜P4)あって、以下のようなデータ変換処理装置1の各メモリ上のアドレスを指し示す。
「ポインタP0」:対応表定義の次に実行すべき定義命令が格納されているメモリ上のアドレス
「ポインタP1」:繰返し開始定義の次に実行すべき定義命令が格納されているメモリ上のアドレス
「ポインタP2」:再帰開始定義の次に実行すべき定義命令が格納されているメモリ上のアドレス
「ポインタP3」:DOM木の次にノードまたは、枝を生成(Write)すべきノードが格納されているメモリ上のアドレス
「ポインタP4」:外部装置3のデータ構造30の次にReadすべきフィールドを指すメモリ上のアドレス
【0044】
また、上記スタックは、具体的に3つ(S1〜S3)あって、以下のように目的に応じて使用する情報を後入れ先出しの方法で一時的に退避する。つまり、スタックは、当該スタックに格納されるデータを取り出す際には、後に入れたものほど先に取り出されるよう構成されている。
「スタックS1」:繰返し定義用スタック
「スタックS2」:再帰定義用スタック
「スタックS3」:DOM木ノード用スタック
【0045】
そして、上述したプログラム・ポインタとスタックの操作は、上記対応表定義解析部11にて、対応表定義5の各定義に応じて行われる。具体的には、以下のような規則に従って、対応表定義解析部11が動作し、XML変換部13にてDOM木14を生成する。
「規則1」:「繰返し開始定義」に遭遇した場合、ポインタP1とP4が指すアドレスをスタックS1に格納(push)する。
「規則2」:「再帰呼出し定義」に遭遇し、ポインタP4が子情報を持つ場合、「再帰呼出し定義」のメモリ上のアドレスであるポインタP0の次の定義のアドレスと、ポインタP4が指すアドレスを、スタックS2に格納(push)する。そして、ポインタP0をポインタP2が指すアドレスに設定する。一方、ポインタP4が子情報を持たない場合、ポインタP0に次の定義のアドレスを設定する。
「規則3」:「XPath変更開始定義」に遭遇した場合、ポインタP3が指すアドレスをスタックS3に格納(push)する。
「規則4」:「繰返し終了定義」に遭遇した場合、条件を評価して、繰返さない場合はスタックS1に格納されているデータを取り出して(pop)破棄し、その後にスタックS1に残っている先頭のデータが指す値を、ポインタP1とP4に設定する。なお、繰り返し処理を繰返す場合は、ポインタP0にP1が指すアドレスを設定する。
「規則5」:「再帰終了定義」に遭遇した場合、スタックS2に格納されているデータを取り出し(pop)、このpopした値を、ポインタP0とポインタP4に設定する。なお、スタックS2が空の場合は、ポインタP0に次の定義のアドレスを設定する。
「規則6」:「XPath変更終了定義」に遭遇した場合、スタックS3に格納されているデータを取り出して(pop)破棄し、スタックS3に残っている先頭のデータが指す値をポインタP3に設定する。
なお、参考文献「Data Structures and Algorithms. Aho et al.」にあるようにスタックの操作を再帰的手続きにより簡易的に処理する実現方法も含む。
【0046】
以上のように、各ポインタ及び各スタックへの格納規則によると、まず、「繰返し定義」の場合には、ポインタP1及びスタックS1に格納されたアドレスに基づいて繰返し処理(ループ処理)が実行される。すると、処理を繰返す場合には、ポインタP1のアドレスがポインタP0に設定されるため、次に実行すべき繰り返しの開始点を適切に実行することができる。また、繰返し処理が複雑に入り組んでいる場合であっても、繰返し処理の開始時にスタックS1に格納されたアドレスが取り出されてポインタP1に設定されるため、より適切に繰り返しの開始点に戻ることができる。
【0047】
また、「再帰定義」の場合には、再帰処理の開始アドレスをポインタP2(再帰ポインタ)に、再帰処理の終了後の戻りアドレスをスタックS2に記憶する。すると、処理しているフィールド値が下位階層となる子情報を持つ場合に、再帰処理が呼び出されると、ポインタP2のアドレスに基づいて再帰処理を呼び出して実行し、その再帰処理の終了後には、スタックS2のアドレスに戻る。従って、再帰処理が入り組んだ場合であっても、記憶した情報に基づいて、適切に再帰処理を実行し、さらには、再帰処理の終了後の処理を実行することができる。
【0048】
また、ツリーの分岐点に関する定義の場合には、分岐点情報をスタックS3(分岐点スタック)に格納し、分岐点の変更の終了時に、格納された分岐点情報が取り出されて設定される。従って、より適切に分岐点に戻ることができ、正確なDOM木を生成することができる。
【0049】
このように、本発明では、特に、「繰返し処理」や「再帰処理」といった特定の処理を繰返す処理において、繰り返しや再帰の開始点や処理後の戻り点の処理命令(遷移先処理命令)のアドレスを、ポインタやスタックに処理命令特定情報として記憶している。従って、ポインタやスタックに記憶した情報に基づいて、各処理を適切に実行することができ、複雑に入り組んだDOM木であっても正確に生成することができる。
【0050】
また、上記XML構造定義6は、出力XMLファイルの文書スタイルの構造と形式を定義した情報であり、上記DOM木を生成する際、及び、最終的に目的とするXMLファイルにコード化する際に用いられる。そして、上記XMLファイル出力部15は、XML構造定義6に基づいてDOM木から出力XMLファイル8を生成する。
【0051】
なお、上述したデータ変換装置1が備える機能、たとえば、対応表定義解析部11やXML構造定義解析部12、処理制御部10、XML変換部13、XMLファイル出力部15は、データ変換装置1に所定のプログラムが組み込まれることによって実現される。
【0052】
[動作]
次に、上記データ変換装置1の動作を、図3乃至図5のフローチャートを参照して説明する。図3は、プログラム・ポインタとスタックを使用して、本実施形態における処理の概略を示したフローチャートであり、図4及び図5は、図3に示した処理の詳細に示したフローチャートである。
【0053】
まず、プログラム・ポインタP0のアドレスの設定と対応表定義5の定義ごとのアドレスの移動により対応表定義5に定義があるか判定する(ステップS1)。定義があると判断した場合は、以下に説明する処理を繰り返す。定義がない場合は処理を終了する。
【0054】
そして、対応表定義5に定義がある場合には、対応表定義部11のコンパイラにより構文解析をし、解析結果によりコンテキスト単位であるか、コマンド単位であるか場合分けをする(ステップS2)。コンテキスト単位とは、構文解析、意味解析をすることにより複数の単語を組合せて1つの処理が実行できる定義を指し、通常は、対応表定義5に定義した1行が1つのコンテキストになる。コマンド単位とは、先頭に$の付く英数文字列で示す定義(図5のステップS601,S611,S621,S631,S641)、または、繰返し開始定義(ステップS651)、または、繰返し終了定義(ステップS661)、または、再帰開始定義(ステップS671)、再帰終了定義(ステップS681)の中のどれか1つだけの定義を指す。なお、先頭に$の付く英数文字列で示す定義とは、上述した「$FormatXML」、「$NodeOccurs」、「$Create」、「$ChXPath」、「$/ChXPath」、を指す。
【0055】
続いて、コンテキスト単位の場合(ステップS3)、以下の3つの処理(ステップS4)を行う(図4参照)。
1)メソッド実行。メソッド実行定義であるか判定し(ステップS401)、Yesの場合に対応表定義に定義したメソッドを実行する(ステップS402)。メソッドには、クラスローダ2により外部装置3のデータ構造30に接続する処理とフィールド値を取り出す処理を含む。
2)再帰呼出し時の設定。上記規則2の処理と再帰呼出しに相当するDOM木に追加する枝の生成を行う(ステップS405,S406,S407,S408,S409,S410,S7)。
3)DOM木に追加するノードの箇所に要素ノードとテキストノード、または、属性ノードとテキストノードからなる部分木を生成して、上記1)で取得したデータ構造30のフィールド値をテキストノードに設定する(ステップS411、S412,S413)。
【0056】
また、コマンド単位の場合(ステップS5)、以下の6つの処理(ステップS6)を行う(図5参照)。
1)XML構造定義取得。「$FormatXML定義」に遭遇した場合(ステップS601)、この定義に指定したXML構造定義をコンパイラにより解析し、DOM木を生成する(ステップS602)。これは、出力XMLのDOM木を生成する過程で、XPathにより指定した経路にあるすべてのノード(以降、XPath指定による枝、または、単に枝という)をXML構造定義のDOM木からの複製を取り出して、出力XMLのDOM木に追加することに使用する。
2)要素出現回数属性名定義。「$NodeOccurs定義」に遭遇した場合(ステップS611)、この定義に指定した英数字の名称をXML構造定義に指定する要素出現回数の属性名とする(ステップS612)。
3)外部装置接続手続き。「$Create定義」に遭遇した場合、クラスローダ2により外部装置3のデータベース30に接続する(ステップS622)。これによりデータ構造30のフィールド値へのアクセスを可能にする。
4)XPath変更定義。「$ChXPath定義」と「$/ChXPath定義」について処理を行う。「$ChXPath定義」に遭遇した場合(ステップS631)、上記規則3の処理とXPathに該当する枝をプログラム・ポインタP3が指すノードに生成する処理を行う(ステップS632、S633)。「$/ChXPath定義」に遭遇した場合(ステップS641)、上記規則6の処理を行う(ステップS642)。
5)繰返し定義。「繰返し開始定義」と「繰返し終了定義」について処理を行う。「繰返し開始定義」に遭遇した場合(ステップS651)、上記規則1の処理とプログラム・ポインタP1の設定を行う(ステップS652)。繰返し終了定義に遭遇した場合(ステップS661)、規則4の処理行い、繰返し定義内の定義を繰返し処理する場合は、プログラム・ポインタP4を次に読み出すべき(Readすべき)フィールド値を指すメモリ上のアドレスに移動する(ステップS662,S663,S664。なお、繰返すか否かの判定は、プログラム・ポインタP4が指すアドレスの次にReadすべきアドレスが存在するか否かで行う。存在する場合はプログラム・ポインタP1が指すアドレスをポインタP0に設定する準備を行う。存在しない場合は、繰返し終了定義の次の定義のアドレスをP0に設定する。
6)再帰定義。「再帰開始定義」と「再帰終了定義」について処理を行う。「再帰開始定義」に遭遇した場合(ステップS671)、プログラム・ポインタP2に再帰開始定義の次の定義のアドレスを設定する(ステップS672)。「再帰終了定義」に遭遇した場合(ステップS681)、上記規則5の処理を行う(ステップS682,S683,S684)。
【0057】
ここで、図6に、上記処理により生成される出力XMLの一例を示す。また、図7に、図6に示したXMLを出力するために用いるXSLTにおける定義の例を示す。一方で、図8に、図6に示したXMLを出力するために本発明にて用いるデータの例を示す。具体的には、図8(a)にXML構造定義を示し、図8(b)に対応表定義を示す。
【0058】
また、図9に、外部装置3のデータ構造30のフィールド値を示し、このフィールド値を図10に示す出力XMLにデータ変換する場合における定義を、図11(b)にXML構造定義6を、図11(c)に対応表定義5に示す。なお、図11(a)は、図11(b)XML構造定義のDOM木である。この図では、ノードPとPIの右横に記す「Occurs」は、ノード出現個数を示し、ノードの経路「R→C→P→P」で末端のノードPから親のノードPに戻る矢印は再帰であることを示す。再帰であるノードP以外の葉のノードID、NO、PAは値を持つことを意味する。ここで、XML構造定義は、図10の繰返し出現するXMLの構造パターンをまとめ、XMLの値を取除くと、図11(b)に示すXMLが得られるのは自明である。そして、繰返し出現するパターン(ノードP、ノードPI)をOccurs属性で指定し(図11(b)の5,8,11行目)、再帰的に出現するパターン(ノードP)を図11(b)の14行目のように定義する。
【0059】
そして、図11(c)に示す対応表定義は、以下のような手順で定義する。
(1)DOM木のノード経路で複数のノードを持つノードの分岐点に対してXPath変更定義をする(アドレスa1とa19、a4とa16、a8とa11)
(2)Occurs属性により出現個数が複数のノードに対して繰返し定義をする(a3とa17、a7とa12)。
(3)再帰であるノードに対して再帰定義をする(a2とa18とa14)。
(4)値を持つノードに対して対応定義をする(a5、a9、a10)。
(5)定義の見易さのために空行を入れる(a6、a13、a15)。
以上の手順により図11(c)の対応表定義が得られる。なお、ノードの定義箇所を比較すると、図11(b)と(c)は構造が似ている。
【0060】
さらに、図12、図13、図14のタイムチャートを参照して、上記図11の定義に従って図9のフィールド値をツリー構造のデータに変換していく過程を具体的に説明する。なお、さらに詳細なタイムチャートを図15乃至図18に示すが、かかる図の説明は省略する。
【0061】
まず、タイムチャートの各項目について説明する。項目「時刻t」は、処理過程で状態の変化が発生する事象を表す。項目「プログラム・ポインタ」P0、P1、P2、P3、P4と項目「スタック」S1、S2、S3は上述の通りであり、項目「P0」、項目「P1」、項目「P2」は図11(c)の対応表定義のメモリ上のアドレスを指し、項目「P3」は項目「出力XML(DOM木)」に示すDOM木の次に部分木を生成すべきノードが格納されているメモリ上のアドレスを指し(txx(xxは英数字))、項目「P4」は項目「フィールド値」が示すフィールド値が格納されているメモリ上のアドレスを指す(fxx(xxは英数字))。項目「スタックの状態」は、ある事象におけるスタックS1、S2、S3に格納される値の様子を示す。また、項目「対応表定義」は、図11(c)の対応表定義のプログラム・ポインタが指すアドレスの定義を以下の略語で示す。
(1)X始:XPath開始定義
(2)X終:XPath終了定義
(3)繰開:繰返し開始定義
(4)繰終:繰返し終了定義
(5)再開:再帰開始定義
(6)再終:再帰終了定義
(7)再呼:再帰呼出し定義
(8)対応:対応定義
さらに、項目「XPath」は、$ChXPath定義により指定したXPathの項目「値設定」は、プログラム・ポインタP3が指すノードに生成するノードとそのノードに設定する値を示す。
【0062】
図12は、処理開始の時刻(t=0)から最初の対応定義が出現する時刻(t=5)までの処理についてのタイムチャートを示す。図13は、繰返し定義の処理についてのタイムチャートを示す。図14は、再帰処理についてのタイムチャートを示す。
【0063】
(t=0)
初期設定を表す。なお、プログラム・ポインタP4は、$Create定義により外部装置3に接続済みで、かつ、データ構造30のフィールド値への初期設定のアドレスとしてfc01を指しているものとする。
【0064】
(t=1)
対応表定義5からアドレスa1をプログラム・ポインタP0に設定する。すると、コマンド定義(図3のステップS5)のXPath変更開始定義であるから(図5のステップS631)、対応表定義に「X始」を設定する。そして、XPathに、現在の「/R/C」を設定、かつ、出力XML DOM木にノードRとCを生成する(図5のステップS632)。よって、ポインタP3に「trc」を設定する。さらに、ポインタP3が指すアドレス「trc」をスタックS3にpushする(図5のステップS633)。なお、pushする値は集合の記法に習って{}で括って示す。
【0065】
(t=2)
アドレスを次のアドレスa2に移動し、ポインタP0に設定する(図3のステップS7)。このとき、再帰開始定義であるから(図5のステップS671)、対応表定義に「再始」を設定する。そして、ポインタP2を、ポインタP0が指す次のアドレスa3に設定する(ステップS672)。
【0066】
(t=3)
アドレスを次のアドレスa3に移動し、ポインタP0に設定する(図3のステップS7)。このとき、繰返し開始定義であるから(図5のステップS651)、対応表定義に「繰始」を設定する。そして、ポインタP1をポインタP0が指す次のアドレスa4に設定し、ポインタP1とポインタP4が指すアドレスをスタックS1にpushする(図5のステップS652)。
【0067】
(t=4)
アドレスを次のアドレスa4に移動し、ポインタP0に設定する(図3のステップS7)。以下は、t=1の場合と同様となる。つまり、XPathに「/R/C/P」を設定し、DOM木のポインタP3が指すノードCに、ノードPを生成する。そして、生成したノードPのアドレスを指す「tp」をポインタP3に設定し、スタックS3に{tp}をpushする。
【0068】
(t=5)
アドレスを次のアドレスa5に移動し、ポインタP0に設定する(図3のステップS7)。このとき、「対応定義」であるから、対応表定義に「対応」を設定する。そして、対応定義の左側から枝IDを、右側からデータ構造30のフィールド値取得のためのメソッドgetIDを得る。この定義はコンテキスト単位の場合(図3のステップS3)と判定する。すると、対応定義の右側の定義のメソッドgetIDを実行することにより、ポインタP4が指すアドレスfc01の値「01」を得る(図4のステップS401,S402)。そして、対応定義の左側の定義の枝IDを生成し、枝の末端のノードIDに値「01」を設定する(図4のステップS411,S412)。なお、t=6以降の処理については、図15に示すが、その説明については省略する。
【0069】
次に、時刻を進めて、図13に示すように、ポインタP0がa7を指している状態から繰返し定義の動作を説明する。
【0070】
(t=16)
繰返し開始定義であるから(図5のステップS651)、対応表定義に「繰始」を設定する。そして、ポインタP1をポインタP0が指す次のアドレスa8に設定し、ポインタP1とポインタP4が指すアドレスを、スタックS1にpushする(図5のステップS652)。これにより、スタックS1は、{a4,fc11}から{a8,fc11}に変化する(変化の仕方を矢印(→)で表す)。つまり、{a4,fc11}の上に、{a8,fc11}が最新のアドレスとして蓄積された状態となる。なお、ポインタP2,P3,P4、スタックS2,S3、及び、XPathの設定は、t=15までの設定状態を示す。
【0071】
(t=17)
アドレスを次のアドレスa8に移動し、ポインタP0に設定する(図3のステップS7)。XPathに「/R/C/P/P/PI」を設定する。このとき、DOM木のポインタP3が指すノードPにノードPIを生成し、生成したノードPIのアドレスを指す「tpi2」をポインタP3に設定する。そして、スタックS3に{tpi2}をpushする。
【0072】
(t=18)
アドレスを次のアドレスa9に移動し、ポインタP0に設定する(図3のステップS7)。ここでは、上記(t=5)の場合と同様の処理となる。具体的には、対応定義の右側の定義のメソッドgetNoの実行、ポインタP4が指すアドレスfpi3+0の値「006」を得る(図4のステップS401、S402)。そして、対応定義の左側の定義のNOを生成し、ノードNOに値「006」を設定する(ステップS411,S412)。
【0073】
(t=19)
アドレスを次のアドレスa10に移動し、ポインタP0に設定する(図3のステップS7)。ここでも上記(t=5)の場合と同様の処理となる。具体的には、DOM木のtpi3+0が指すノードPIにノードPAを生成し、値CPUを設定する(図4のステップS401,S402,S411,S412)。
【0074】
(t=20)
アドレスを次のアドレスa11に移動し、ポインタP0に設定する(図3のステップS7)。ここでは、XPath変更終了定義であるから(図5のステップS641)、対応表定義に「X終」を設定する。そして、スタックS3から最新のデータをpopして破棄し(ステップS642)、スタックS3内に残ったデータの先頭が指すアドレスをポインタP3に設定する。つまり、PI(tpi2)よりも階層が上のノードP(tp2)に移動する。
【0075】
(t=21)
アドレスを次のアドレスa12に移動し、ポインタP0に設定する(図3のステップS7)。繰返し終了定義であるから(図5のステップS661)、対応表定義に「繰終」を設定する。このとき、フィールド値に繰返し処理を行うデータが存在するため、繰返し定義内を繰返す判定で、繰返しあり「繰あり」を設定する(図5のステップS662でYes)。そして、繰返し開始位置であるポインタP1が指すアドレスa8をポインタP0に設定し、ポインタP4を次に読み出すべきアドレスtpi3+1に設定する(図5のステップS663)。
【0076】
(t=22〜26、27〜30)
その後、上記(t=17〜21)の場合と同様の処理を繰返す。なお、値設定のNO=006→007→008とPA=CPU→CPU→Memoryは、時刻の変化により値の設定が変わる様子を矢印を使って表している。
【0077】
(t=31)
アドレスを、t=30のときのアドレスa11の次のアドレスa12に移動し、ポインタP0に設定する(図3のステップS7)。繰返し終了定義であるから(図5のステップS661)、対応表定義に「繰終」を設定する。このとき、繰返すべきフィールド値がないため、繰返し定義内を繰返す判定で、繰返しなし「繰なし」を設定する(図5のステップS662でNo)。そして、スタックS1から最新のデータ{a8,fc11}をpopして破棄し、スタックS1に残った先頭のデータが指すアドレス{a4,fc11}を、それぞれポインタP1とポインタP4に設定する(ステップS664)。つまり、ここでは、ポインタP1にa4を設定し、ポインタP4にfc11を設定する。これにより、繰返し開始定義1による繰り返し処理に戻ることができ、繰返し処理が入り組んだ状態でも適切なアドレスに戻ることができる。
【0078】
次に、時刻を進めて、図14に示すように、アドレスa12〜a19間の再帰呼出し定義と再帰終了定義の動作を説明する。
【0079】
(t=2)
再帰開始定義での設定を示す。具体的な設定は、図12におけるt=2の説明と同じである。つまり、ポインタP2に再帰開始定義の次に実行すべき定義命令が格納されているアドレスa3を格納する。
【0080】
(t=11)
再帰呼出しの直前の状態を示す。
【0081】
(t=12)
アドレスを次のアドレスa14に移動し、ポインタP0に設定する(図3のステップS7)。対応定義で、かつ、再帰呼出し定義であるから(図4のステップS405でYes)、対応表定義に「再呼」を設定する。そして、対応定義の左側から枝Pを、右側からデータ構造30のフィールド値取得のためのメソッドgetChildsを得る。この定義はコンテキスト単位の場合(図3のステップS3)と判定する。右側の定義のメソッドgetChildsを実行することにより、ポインタP4が指すアドレスfc01の子情報のアドレスC0を得る(図9参照、図4のステップS401,S402,S405でYes)。すると、判定に子ありを設定し、ポインタP0が指す次の定義のアドレスa16とポインタP4が指すアドレスfc01を、スタックS2にpushする(図4のステップS407)。また、対応定義の左側の定義の枝Pを、ポインタP3が指すアドレスtrcのノードの子に生成する(図4のステップS408)。ポインタP2が指すアドレスa3をポインタP0に設定する準備をする(図4のステップS409)。
【0082】
(t=13)
続いて、アドレスをa3に移動し、ポインタP0に設定する(図3のステップS7)。そして、上記(t=3)の場合と同様の処理を実行する。
【0083】
(t=32)
上記a3以降の一連の再帰処理を実行した後に(図16、図17参照)、アドレスa14に移動し、上記(t=12)の場合と同様の処理を行う。但し、ここでは、図4のステップS406の判定が異なり、図9のC1からC11に示すように子情報がないため、No側に進む。そして、ポインタP0に次の定義を設定する準備をする(図4のステップS410)。
【0084】
(t=33)
アドレスを次のアドレスa16に移動し、ポインタP0に設定する(図3のステップS7)。XPath変更終了定義であるから(図5のステップS641)、対応表定義に「X終」を設定する。そして、スタックS3内の最新のデータ{tp2}をpopして破棄し(図5のステップS642)、スタックS3に残った先頭のデータが指すアドレスtpをポインタP3に設定し、XPathに/R/C/Pを設定する。
【0085】
(t=34)
アドレスを次のアドレスa17に移動し、ポインタP0に設定する(図3のステップS7)。繰返し終了定義であるから(図5のステップS661)、対応表定義に「繰終」を設定する。ここでは、繰返すフィールド値がないため、繰返し定義内を繰返す判定で繰返しなし「繰なし」を設定する(図5のステップS662でNo)。そして、スタックS1から最新のデータをpopして破棄し、スタックS1に残った先頭のデータが指すアドレスをポインタP1とP4に設定する(図5のステップS664)。つまり、ポインタP1にa4を設定し、ポインタP4にfc01を設定する。
【0086】
(t=35)
アドレスを次のアドレスa18に移動し、ポインタP0に設定する(図3のステップS7)。再帰終了定義であるから(図5のステップS681)、対応表定義に「再終」を設定する。このとき、スタックS2は空ではないため(図5のステップS682でNo)、スタックS2内のデータをpopし、このpopした値をポインタP0とP4に設定する(図5のステップS683)。つまり、ポインタP0に、再帰終了後の処理命令のアドレスであるa16を設定し、ポインタP4にfc01を設定する。
【0087】
(t=36)
アドレスを、上述したようにa16に設定する。以降は、上述した(t=33〜t=35)と同様の処理となる(図17参照)。ただし、a18の再帰終了定義の処理で、図5のステップS682の判定はYes側になり、ポインタP0に次の定義のアドレスa19を設定する。なお、全体的なタイムチャートは、図15乃至図18に示す。
【0088】
以上のような処理により、最終的に図19のようなDOM木を生成する。そして、さらに、XMLファイル出力部15が、XML構造定義6を参照して図19のDOM木を処理することにより、図20に示すような目的のXMLを出力し、変換データ生成工程が終了する。
【0089】
上述したように、本実施形態によると、対応表定義内の特定の処理命令を繰返す繰返し処理命令を処理する際に、この繰返し処理命令の実行に応じて遷移して処理する遷移先処理命令を特定する情報を、ポインタやスタックに記憶している。従って、ループ処理や再帰処理といった複数の繰返し処理が入り組んだ場合(ノードがネストする場合)であっても、繰返し処理の実行時に、記憶した遷移先処理命令を特定するアドレス情報に基づいて、適切に遷移先(繰り返しや再帰の開始点、戻り点)の処理命令を特定して実行することができる。その結果、あらゆる変換対象データであっても、適切にツリー構造のデータに変換することができる。
【0090】
これに加え、本実施形態では、対応表定義とXML構造定義の文書スタイルが簡易であり、また、XSLTと比較して出力XMLの構造が判別し易い。従って、手作業での作成が容易となる。さらに、変換対象となる外部装置のデータ構造の仕様変更によりXMLの文書スタイルの仕様が変更になった場合でも、プログラムの修正はなく、XML構造定義または対応表定義の変更をすることだけで済む。以上より、ユーザの利便性の向上を図ることができる。
【0091】
なお、上述したデータ変換装置1は、XML構造として、再帰定義と繰返し定義のネストのような複雑な構造を必要としない場合であっても、XMLの生成処理が可能である。この場合には、上述した図1及び図2からスタックを取り除いたもので実施可能であり、データ変換処理もスタック操作を取り除いた簡素な処理で実現できる。具体的には、図5からステップS671,S672,S681〜S684を除いたフローチャート、及び、スタックS1、S2を除いた構成で済む。
【0092】
<実施形態2>
次に、本発明の第2の実施形態を、図21を参照して説明する。本実施形態は、上記実施形態1で説明したデータ変換装置1を利用したデータ逆変換装置1’である。これは、XMLファイルを入力とし、対応表定義とXML構造定義を図2のコンパイラにより構文解析してクラスローダにより外部システムのデータ構造の合い対応するフィールド値にXMLファイルの値を設定する装置である。第1の実施例と同様な原理により実現可能である。
【0093】
具体的には、入力XMLファイル8’をコンパイラで処理することにより得たDOM木と、対応表定義に定義する対応定義の「XPath 対 外部装置のデータ構造に設定するフィールドまたはメソッド」との対応によるXPathからノードを特定して、そのノードから値を取得し、さらにデータ構造のフィールドに値を設定していく。この処理の過程は、第1の実施形態のXML構造定義のDOM木からXPathにより枝を取出すことの操作について、入力XMLのDOM木からXPathにより枝を取出す処理に置き換え、クラスローダの書き込み操作を使って取出した枝のノードの値を外部システムのデータ構造のフィールドに書き込む処理に置き換えるだけで実現できる。
【0094】
<実施形態3>
次に、本発明の第3の実施形態を、図22を参照して説明する。本実施形態は、既存の外部装置3,3’に、上記第1の実施形態と第2の実施形態を適用して、XMLによりデータを送受信する方法である。この方法は、異なるデータ構造を持つ2つの装置間のデータを第1の実施形態と第2の実施形態による装置をネットワークに接続して実現した相互データ送受信方法である。
【0095】
具体的には、ネットワークを通して送信するXMLデータには、機密保護のため、Java暗号化拡張機能(Java Crytography ExtensionのDES、RC 2/4、IDEA)やビット操作による独自手法を組合せた特殊なコードに暗号化する方法も含む。そして、F地点に設置した外部装置3を第1の実施形態のデータ変換装置1によりXMLに変換して特殊コード化し、ネットワークを通してK地点にXMLを送信する。K地点に設置した第2の実施形態のデータ逆変換装置1’により受信したXMLをK地点の外部装置3’のデータ構造に変換してディスプレイで表示したり、K地点でデータ処理する。
【産業上の利用可能性】
【0096】
本発明は、インターネットを利用した企業間連携B2Bや企業内のシステム統合EAIにおけるXMLを用いたアプリケーションプログラム間のデータ交換といった用途に適用できるため、産業上の利用可能性を有する。
【図面の簡単な説明】
【0097】
【図1】実施形態1におけるデータ変換装置の構成を示すブロック図である。
【図2】実施形態1におけるデータ変換装置の構成を示すブロック図である。
【図3】図1に開示したデータ変換装置の動作を示すフローチャートである。
【図4】図3に開示した動作の詳細を示すフローチャートである。
【図5】図3に開示した動作の詳細を示すフローチャートである。
【図6】出力XMLの一例を示す図である。
【図7】図6に開示したXMLを出力するためのXSLTにおける定義の例を示す図である。
【図8】図6に開示したXMLを出力するための実施形態1における定義の例を示す図である。
【図9】外部装置のデータ構造の一例を示す図である。
【図10】図9のデータ構造を出力XMLに変換した一例を示す図である。
【図11】図9のデータ構造を図10のXMLに変換するための実施形態1における定義を示す図である。
【図12】図1に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図13】図1に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図14】図1に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図15】図1に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図16】図1に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図17】図1に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図18】図1に開示したデータ変換装置における動作を具体的に説明するためのタイムチャートである。
【図19】図9に開示したデータ構造を図11に開示した定義によりデータ変換した最終結果のDOM木の構造を示す図である。
【図20】図19に開示したDOM木を変換したXMLを示す図である。
【図21】実施形態2におけるデータ逆変換装置の構成を示すブロック図である。
【図22】実施形態3におけるデータ送受信システムの構成を示すブロック図である。
【符号の説明】
【0098】
1 データ変換装置
2 クラスローダ
3 外部装置
4 データベース(生産装置構成情報)
5 対応表定義
6 XML構造定義
7 XML
DOM
8 出力XMLファイル
10 処理制御部
20 プログラム・ポインタ
21 スタック
11 対応表定義解析部
12 XML構造定義解析部
13 XML変換部
14 XML DOM木
15 XMLファイル出力部
30 外部装置のデータ構造


【特許請求の範囲】
【請求項1】
変換対象データを所定の構造を有するデータに変換するデータ変換装置であって、
前記変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、前記変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶し、
前記ツリー変換定義情報及び前記変換構造定義情報に基づいて前記変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を備え、
前記ツリー変換定義情報は、当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令を含むと共に、
前記変換データ生成手段は、前記繰返し処理命令の実行に応じて遷移して処理する前記ツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
ことを特徴とするデータ変換装置。
【請求項2】
前記変換データ生成手段は、前記繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び/あるいは当該繰返し処理命令の実行終了後に遷移して実行する前記遷移先処理命令を特定する前記処理命令特定情報を記憶する、
ことを特徴とする請求項1記載のデータ変換装置。
【請求項3】
前記繰返し処理命令は、前記ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが前記変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含む、
ことを特徴とする請求項1又は2記載のデータ変換装置。
【請求項4】
前記変換データ生成手段は、前記ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報としてループスタック内に順に記憶し、これに基づいて前記ループ処理を行う、
ことを特徴とする請求項3記載のデータ変換装置。
【請求項5】
前記変換データ生成手段は、前記ループ処理を終了する処理命令を処理する時に、前記ループスタック内の最新の前記アドレス情報を破棄し、次に新しい前記アドレス情報に基づいて前記ループ処理を実行する、
ことを特徴とする請求項4記載のデータ変換装置。
【請求項6】
前記繰返し処理命令は、処理している前記変換対象データが下位階層のデータを有する場合に、前記ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含む、
ことを特徴とする請求項1,2,3,4又は5記載のデータ変換装置。
【請求項7】
前記変換データ生成手段は、前記再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を再帰スタック内に前記処理命令特定情報として記憶し、前記再帰処理が終了したときに前記再帰スタックに記憶されている前記アドレス情報にて特定される処理命令から処理を続ける、
ことを特徴とする請求項6記載のデータ変換装置。
【請求項8】
前記変換データ生成手段は、前記再帰処理を呼び出す処理命令によって呼び出されて実行される前記再帰処理を開始する処理命令を処理する時に、当該再帰処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報として再帰ポインタに記憶し、前記再帰処理を呼び出す処理命令の実行時に、処理している前記変換対象データが下位階層となる子情報を持つ場合に、前記再帰ポインタに記憶されている前記アドレス情報に基づいて前記再帰処理を実行する、
ことを特徴とする請求項7記載のデータ変換装置。
【請求項9】
前記ツリー変換定義情報は、前記ツリー構造の分岐点を変更する分岐点変更処理を開始/終了する処理命令を含み、
前記変換データ生成手段は、前記分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じて前記ツリー構造データに変換する、
ことを特徴とする請求項1,2,3,4,5,6,7又は8記載のデータ変換装置。
【請求項10】
前記変換データ生成手段は、前記分岐点変更処理を終了する処理命令を処理する時に、前記分岐スタック内に蓄積された最新の前記分岐点情報を破棄して、次に新しい前記分岐点情報を用いて前記ツリー構造データに変換する、
ことを特徴とする請求項9記載のデータ変換装置。
【請求項11】
変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、前記変換対象データの変換後のデータ構造を定義する変換構造定義情報と、を記憶したコンピュータに、
前記ツリー変換定義情報及び前記変換構造定義情報に基づいて前記変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成手段を実現するためのプログラムであり、
前記変換データ生成手段は、前記ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理する前記ツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
ことを特徴とするプログラム。
【請求項12】
前記変換データ生成手段は、前記繰返し処理命令の実行に応じて、当該繰返し処理命令の実行中及び/あるいは当該繰返し処理命令の実行終了後に遷移して実行する前記遷移先処理命令を特定する前記処理命令特定情報を記憶する、
ことを特徴とする請求項11記載のプログラム。
【請求項13】
前記繰返し処理命令は、前記ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが前記変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含み、
前記変換データ生成手段は、前記ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報としてループスタック内に順に記憶し、これに基づいて前記ループ処理を行う、
ことを特徴とする請求項11又は12記載のプログラム。
【請求項14】
前記繰返し処理命令は、処理している前記変換対象データが下位階層のデータを有する場合に、前記ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含み、
前記変換データ生成手段は、前記再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を前記処理命令特定情報として再帰スタック内に記憶し、前記再帰処理が終了したときに前記再帰スタックに記憶されている前記アドレス情報にて特定される処理命令から処理を続ける、
ことを特徴とする請求項11,12又は13記載のプログラム。
【請求項15】
前記ツリー変換定義情報は、前記ツリー構造の分岐点を変更する分岐点変更処理を開始/終了する処理命令を含み、
前記変換データ生成手段は、前記分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じて前記ツリー構造データに変換する、
ことを特徴とする請求項11,12,13又は14記載のプログラム。
【請求項16】
変換対象データを所定の構造を有するデータに変換するデータ変換方法であって、
前記変換対象データをツリー構造データに変換する複数の処理命令を含むツリー変換定義情報と、前記変換対象データの変換後のデータ構造を定義する変換構造定義情報と、に基づいて、前記変換対象データをツリー構造データに変換すると共に、所定のデータ構造に変換する変換データ生成工程を有し、
前記変換データ生成工程は、前記ツリー変換定義情報が含む当該ツリー変換定義情報内の特定の処理命令を繰返して実行する繰返し処理命令の実行に応じて遷移して処理する前記ツリー変換定義情報内における遷移先処理命令を特定する処理命令特定情報を記憶して、当該記憶した処理命令特定情報に基づいて前記ツリー構造データに変換する、
ことを特徴とするデータ変換方法。
【請求項17】
前記変換データ生成工程は、前記繰返し処理命令の実行に応じて、前記繰返し処理命令の実行中及び/あるいは前記繰返し処理命令の実行終了後に遷移して実行する前記遷移先処理命令を特定する前記処理命令特定情報を記憶する、
ことを特徴とする請求項16記載のデータ変換方法。
【請求項18】
前記繰返し処理命令は、前記ツリー変換定義情報内の特定の処理命令を当該特定の処理命令の処理対象となるデータが前記変換対象データに存在する場合に繰返すループ処理を実行する処理命令を含み、
前記変換データ生成工程は、前記ループ処理を開始する処理命令を処理する時に、当該ループ処理の開始点となる処理命令のアドレス情報を前記処理命令特定情報としてループスタック内に順に記憶し、これに基づいて前記ループ処理を行う、
ことを特徴とする請求項16又は17記載のデータ変換方法。
【請求項19】
前記繰返し処理命令は、処理している前記変換対象データが下位階層のデータを有する場合に、前記ツリー変換定義情報内の特定の処理命令を呼び出して実行する再帰処理を実行する処理命令を含み、
前記変換データ生成工程は、前記再帰処理を呼び出す処理命令を処理する時に、その次に実行する処理命令のアドレス情報を前記処理命令特定情報として再帰スタック内に記憶し、前記再帰処理が終了したときに前記再帰スタックに記憶されている前記アドレス情報にて特定される処理命令から処理を続ける、
ことを特徴とする請求項16,17又は18記載のデータ変換方法。
【請求項20】
前記ツリー変換定義情報は、前記ツリー構造の分岐点を変更する分岐点変更処理を開始/終了する処理命令を含み、
前記変換データ生成工程は、前記分岐点変更処理を開始する処理命令を処理する時に、変更後の分岐点を特定する分岐点情報を分岐スタック内に記憶し、この分岐スタック内の分岐点情報に応じて前記ツリー構造データに変換する、
ことを特徴とする請求項16,17,18又は19記載のデータ変換方法。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate


【公開番号】特開2009−169707(P2009−169707A)
【公開日】平成21年7月30日(2009.7.30)
【国際特許分類】
【出願番号】特願2008−7617(P2008−7617)
【出願日】平成20年1月17日(2008.1.17)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】