(57)【要約】【課題】異なるプログラミング言語間のデータ表現形式を直接変換できるデータ変換プログラムを自動生成する。【解決手段】プログラミング言語におけるデータの構造とデータ型を規定するスキーマに対して、データ変換を実行する実行系に依存する実行系依存情報を注釈として付与した注釈付きスキーマ１０１と、注釈付きスキーマ１０１に付与された実行系依存情報を参照して、あるプログラミング言語によるデータの表現形式を別のプログラミング言語によるデータの表現形式に変換するデータ変換プログラム１０３を生成するデータ変換プログラム生成手段１０２を備える。【選択図】図１
2008171275.tif 000002
【特許請求の範囲】
【請求項１】
プログラミング言語におけるデータの構造とデータ型を規定するスキーマに対して、データ変換を実行する実行系に依存する実行系依存情報を注釈として付与した注釈付きスキーマと、
該注釈付きスキーマに付与された実行系依存情報を参照して、あるプログラミング言語によるデータの表現形式を別のプログラミング言語によるデータの表現形式に変換するデータ変換プログラムを生成するデータ変換プログラム生成手段とを備えたデータ変換プログラム生成装置。
【請求項２】
上記注釈付きスキーマに注釈として付与された実行系依存情報として、データ構造全体の大きさとデータの構造を構成する各構成要素の大きさを含むことを特徴とする請求項１記載のデータ変換プログラム生成装置。
【請求項３】
上記注釈付きスキーマに注釈として付与された実行系依存情報として、データの構造を構成する各構成要素について、データ構造全体における先頭からの位置を含むことを特徴とする請求項１記載のデータ変換プログラム生成装置。
【請求項４】
上記注釈付きスキーマに注釈として付与された実行系依存情報として、データ構造全体又はデータの構造を構成する各構成要素の文字コードを含むことを特徴とする請求項１記載のデータ変換プログラム生成装置。
【請求項５】
上記注釈付きスキーマに注釈として付与された実行系依存情報として、計算機のＣＰＵのバイト順序を含むことを特徴とする請求項１記載のデータ変換プログラム生成装置。
【請求項６】
プログラミング言語によって記述されたデータ構造のデータ定義プログラムから、データの構造とデータ型に関する情報と実行系依存情報とを抽出し、上記注釈付きスキーマを生成する注釈付きスキーマ生成手段を備えたことを特徴とする請求項１記載のデータ変換プログラム生成装置。
【請求項７】
構造体利用上の規約をデータ変換に必須な情報として上記注釈付きスキーマに付与する注釈付きスキーマ修正手段を備えたことを特徴とする請求項１記載のデータ変換プログラム生成方装置
【請求項８】
データ変換プログラム生成手段が、プログラミング言語におけるデータの構造とデータ型を規定するスキーマに対してデータ変換を実行する実行系に依存する実行系依存情報を注釈として付与した注釈付きスキーマに含まれる実行系依存情報を参照して、あるプログラミング言語によるデータの表現形式を別のプログラミング言語によるデータの表現形式に変換するデータ変換プログラムを生成するデータ変換プログラム生成方法。
【請求項９】
プログラミング言語におけるデータの構造とデータ型を規定するスキーマに対してデータ変換を実行する実行系に依存する実行系依存情報を注釈として付与した注釈付きスキーマに含まれる実行系依存情報を参照して、あるプログラミング言語によるデータの表現形式を別のプログラミング言語によるデータの表現形式に変換するデータ変換プログラムを生成するデータ変換プログラム生成手順を、コンピュータに実行させるためのデータ変換プログラム生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は異なるプログラミング言語間のデータ表現形式を変換するデータ変換プログラムを生成するデータ変換プログラム生成装置、データ変換プログラム生成方法及びデータ変換プログラム生成プログラムに関するものである。
【背景技術】
【０００２】
近年、ビジネスプロセスの統合、企業間取引のシステム化の進展等にともない、互いに異なるシステムを効率的に連携させるシステム間連携技術が重要となっている。個々のアプリケーションシステムはさまざまなプログラミング言語によって構築されており、データ形式もさまざまである。
【０００３】
異なるシステム間でデータを相互にやりとりするためには、各システム固有のデータ表現形式をＸＭＬ（Extensible Markup Language）のような中間的な形式に変換する方法がある。この場合、各アプリケーションシステムでは、ＸＭＬデータと各システム固有のデータ表現形式とを相互変換する必要がある。このデータ変換処理を人手で個別に実施することは効率が悪く、データ変換プログラムの自動生成方式が望まれている。
【０００４】
従来から、データ変換プログラムを自動生成する技術として特許文献１の方法があり、ここでは、Ｗｅｂサービスのインタフェース定義を構成する複数の要素の関連を示す第一要素木に基づいて、Ｗｅｂサービスを実行する関数によって処理可能な入出力データと、Ｗｅｂサービスに関する要求及び応答メッセージに含まれる値のデータ型との変換処理を行う変換プログラムを生成する方法を開示している。
【０００５】
この特許文献１の段落０００７に記載されているように、Ｗｅｂサービスのインタフェース定義の一例としてはＷＳＤＬ（Web Service Description Language）がある。この場合、Ｗｅｂサービスに関する要求及び応答メッセージはＸＭＬデータであり、その構造とデータ型はＷＳＤＬのｔｙｐｅｓ要素におけるＸＭＬスキーマによって規定されている。また、この特許文献１の段落００４１から段落００５２には、ＸＭＬスキーマ解析部によりＸＭＬスキーマを解析し、ＸＭＬスキーマで規定されるＸＭＬデータの構造とデータ型に対応した、Ｃ言語の構造体を定義するプログラムを生成する方法が示されている。さらに、この特許文献１の段落００５３から段落００６０には、Ｃ言語構造体データをＸＭＬデータへ変換するシリアライザ、ＸＭＬデータをＣ言語構造体データへ変換するデシリアライザを生成する方法が記載されている。
【０００６】
このような、ＸＭＬデータに対応したデータ構造定義プログラムとデータマッピング処理をＸＭＬスキーマから生成する技術は、一般にスキーマコンパイラ技術あるいはデータバインディング技術と呼ばれている。
【０００７】
【特許文献１】特開２００５−３１０１７１号公報（段落０００７，００４１〜００５２，００５３〜００６０）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従来のデータ変換プログラム生成装置は以上のように構成され、例えば上記特許文献１では、ＸＭＬデータとあるプログラミング言語でのデータを相互に変換するデータ変換プログラムを自動生成できるが、異なるプログラミング言語間のデータを直接変換することはできないという課題があった。すなわち、ＡシステムとＢシステム間で連携を行うためには、Ａシステムのデータ表現形式を一旦ＸＭＬ等の中間形式に変換し、それをＢシステムのデータ表現形式に変換しなければならず、汎用性が非常に重要な場合には有効であるが、社内システム等では、汎用性を犠牲にしても処理速度の向上を望む場合には、変換処理が多段になり効率が悪いという課題があった。
【０００９】
この発明は上記のような課題を解決するためになされたもので、異なるプログラミング言語間のデータ表現形式を直接変換できるデータ変換プログラムを自動生成し、効率的なシステム間連携を実現することができるデータ変換プログラム生成装置、データ変換プログラム生成方法及びデータ変換プログラム生成プログラムを得ることを目的とする。
【課題を解決するための手段】
【００１０】
この発明に係るデータ変換プログラム生成装置は、プログラミング言語におけるデータの構造とデータ型を規定するスキーマに対して、データ変換を実行する実行系に依存する実行系依存情報を注釈として付与した注釈付きスキーマと、該注釈付きスキーマに付与された実行系依存情報を参照して、あるプログラミング言語によるデータの表現形式を別のプログラミング言語によるデータの表現形式に変換するデータ変換プログラムを生成するデータ変換プログラム生成手段とを備えたものである。
【発明の効果】
【００１１】
この発明により、異なるプログラミング言語間のデータ表現形式を直接変換できるデータ変換プログラムを自動生成し、効率的なシステム間連携を実現することができるという効果が得られる。
【発明を実施するための最良の形態】
【００１２】
実施の形態１．
図１はこの発明の実施の形態１によるデータ変換プログラム生成装置の基本構成を示す図である。図１において、注釈付きスキーマ１０１は、あるプログラミング言語でのデータの構造とデータ型を規定するスキーマに対して、データの構造とデータ型以外の実行系依存情報を注釈として付与したものである。データ変換プログラム生成手段１０２は、注釈付きスキーマ１０１を参照して、あるプログラミング言語によるデータの表現形式を別のプログラミング言語によるデータの表現形式に相互変換するデータ変換プログラムを生成するものである。データ変換プログラム１０３はデータ変換プログラム生成手段１０２によって生成されるデータ変換プログラムのソースコードである。
【００１３】
次にデータ変換プログラム生成方式の処理について説明する。
この実施の形態１では、データ変換プログラムの入力、すなわち変換元データがＣ言語構造体のバイナリ表現で、データ変換プログラムの出力、すなわち変換先データがＪａｖａ（登録商標）言語のオブジェクト（クラスのインスタンス）の場合、及びその逆の場合について説明する。また、Ｊａｖａ（登録商標）言語によるデータ変換プログラムを生成する例について説明する。
【００１４】
図２はこの発明の実施の形態１によるデータ変換プログラム生成装置により生成されたデータ変換プログラムの実行時の構成を示す図である。データ変換プログラム実行手段１１２は、図１のデータ変換プログラム生成手段１０２により生成されたデータ変換プログラム１０３を実行するもので、例えばＪａｖａ（登録商標）言語の実行環境が動作するコンピュータ等であり、変換元データであるＣ言語構造体のバイナリ表現１１１を変換先データであるＪａｖａ（登録商標）言語のオブジェクト１１３に変換する。
【００１５】
図３はＣ言語構造体の例を示す図であり、ここでは、ＭＳＧ（構造体名）構造体とＭＳＧＳ（構造体名）構造体を定義したＣ言語によるデータ定義プログラムを示している。
ＭＳＧ構造体はｃｏｄｅとｂｏｄｙという２つのメンバを持ち、それぞれデータ型はｉｎｔとｃｈａｒ配列である。ｉｎｔ型のｃｏｄｅはメッセージのコード番号を格納するために用いられ、ｃｈａｒ配列型のｂｏｄｙはメッセージ文字列を格納するために用いられる。ここで、メンバはデータの構造を構成する各構成要素を示す。
【００１６】
ＭＳＧＳ構造体はｆｌａｇとｄａｔａという２つのメンバを持ち、それぞれデータ型はｃｈａｒとＭＳＧ配列である。ｃｈａｒ型のｆｌａｇはアプリケーションのためのフラグを格納するために用いられ、ＭＳＧ配列型のｄａｔａは複数（１０個）のＭＳＧ構造体をまとめて保持するために用いられる。
【００１７】
図４は変換元データであるＣ言語構造体（ＭＳＧ構造体）のバイナリ表現１１１の例を示す図である。このようなバイナリデータは、ＭＳＧ構造体を利用するアプリケーション内部で用いられたり、複数のアプリケーション間において送受信されるものである。Ｃ言語であれば、ｆｗｒｉｔｅ（）関数等を用いて構造体のバイナリ表現をファイルに出力することも可能である。また、出力したファイルは、例えばＵＮＩＸ（登録商標）のｏｄコマンド等を利用してその内容を確認できる。
【００１８】
図４に示す例は、ｃｏｄｅメンバが整数値の７６、ｂｏｄｙメンバが文字列”ｔｅｓｔ．テスト。”を保持しているＭＳＧ構造体の１６進数でのバイナリ表現である。バイト順序はリトル・エンディアンで、文字コードはＳｈｉｆｔ＿ＪＩＳである。なお、図中の一番左側の一列は、説明のためデータ番地を表している。最初の４バイトがｃｏｄｅメンバに対応し、１６進の４ｃは１０進の７６である。５バイト目から４２バイト分がｂｏｄｙメンバに対応し、Ｓｈｉｆｔ＿ＪＩＳで１６進の６５はアルファベットの’ｅ’に対応し、７４は’ｔ’に対応している。これらは、ｔｅｓｔの２番目と最初の文字である。順序が入れ替わっているのはバイト順序がリトル・エンディアンのためである。
【００１９】
図５は変換先データであるＪａｖａ（登録商標）言語（ＭＳＧクラスとＭＳＧＳクラス）のオブジェクト１１３の例を示す図である。ここでは、ＭＳＧクラスとＭＳＧＳクラスを定義しており、変換処理の結果として得られるのは、ＭＳＧクラスとＭＳＧＳクラスのインスタンスである。図５はデータを格納するためのクラスであり、例えば、ＭＳＧクラスはデータを格納するプロパティとしてｃｏｄｅとｂｏｄｙを持っている。Ｊａｖａ（登録商標）言語はオブジェクト指向言語であり、これらのプロパティには直接アクセスせずに、図５に示すように、ｓｅｔＣｏｄｅ（）やｇｅｔＣｏｄｅ（）等の操作メソッドを規定するのが一般的である。
【００２０】
図６は注釈付きスキーマ１０１の例を示す図であり、ＭＳＧ構造体とＭＳＧＳ構造体に対応する注釈付きスキーマである。なお、一番左の列は説明のための行番号である。注釈付きスキーマ１０１は、構造体の構造及びデータ型の情報を記述する部分と、データ変換を実行するＣＰＵやコンパイラ等の実行系に依存する実行系依存情報を記述する部分とから構成されている。前者の構造体の構造及びデータ型の情報は、図６に示す注釈付きスキーマ１０１の０３行目や０６行目のように、ｘｓｄ：ｃｏｍｐｌｅｘＴｙｐｅやｘｓｄ：ｅｌｅｍｅｎｔ等のＸＭＬスキーマの要素によって記述する。ｘｓｄ：が付与されたタグはＷ３Ｃ（World Wide Web Consortium）によるＸＭＬスキーマ標準のタグである。一方、後者の実行系依存情報は、図６に示す注釈付きスキーマ１０１の０４行目や０７行目のように、ｘｓｄ：ａｎｎｏｔａｔｉｏｎ要素中の独自タグｓＩｎｆｏによって記述する。
【００２１】
まず、図６に示す注釈付きスキーマ１０１における構造体の構造及びデータ型の情報を記述している部分について説明する。構造体の構造すなわちメンバの順序と構成は、ＸＭＬ文書の階層構造に対応付けて記述する。データ型は、ｘｓｄ：ｅｌｅｍｅｎｔ要素のｔｙｐｅ属性によって記述する。以下、具体例で説明する。
【００２２】
図６に示す注釈付きスキーマ１０１の０３行目の要素ｘｄｓ：ｃｏｍｐｌｅｘＴｙｐｅがＭＳＧ構造体の定義である。属性ｎａｍｅにより構造体の名前“ＭＳＧ”を規定している。
【００２３】
図６に示す注釈付きスキーマ１０１の０５〜１２行目は構造体メンバの定義である。各メンバはｘｄｓ：ｓｅｑｕｅｎｃｅ要素の子要素であるｘｓｄ：ｅｌｅｍｅｎｔ要素によって記述する。ｘｓｄ：ｓｅｑｕｅｎｃｅ要素中のｘｓｄ：ｅｌｅｍｅｎｔの出現順序は、構造体でのメンバの順序に対応する。例えば、最初のｘｄｓ：ｅｌｅｍｅｎｔ要素はメンバｃｏｄｅの定義であり、２番目のｘｓｄ：ｅｌｅｍｅｎｔ要素はメンバｂｏｄｙの定義である。
【００２４】
ｘｓｄ：ｅｌｅｍｅｎｔ要素のｎａｍｅ属性によってメンバの変数名を、ｍａｘＯｃｃｕｒｓ及びｍｉｎＯｃｃｕｒｓ属性によって繰り返し数を、ｔｙｐｅ属性によってデータ型を記述する。ｍａｘＯｃｃｕｒｓとｍｉｎＯｃｃｕｒｓは必ず同一の値を持ち、２以上であればメンバが配列であることを意味する。例えば、図６に示す注釈付きスキーマ１０１の２０行目はＭＳＧＳ構造体のｄａｔａメンバの定義であるが、ｍａｘＯｃｃｕｒｅｓとｍｉｎＯｃｃｕｒｓは１０であり、これはｄａｔａメンバがＭＳＧ型の長さ１０の配列であることに対応している。
【００２５】
図６に示す注釈付きスキーマ１０１の０９行目はＭＳＧ構造体のメンバｂｏｄｙに対応する記述である。ＭＳＧ構造体のｂｏｄｙメンバはｃｈａｒ配列型であり、その配列長は４２である。一方、０９行目の定義では繰り返し数１の文字列型となっている。Ｃ言語において、ｃｈａｒ配列型はほとんどの場合文字列を格納するために用いられるため、本実施の形態では、Ｃ言語の構造体メンバのｃｈａｒ配列型は、Ｊａｖａ（登録商標）言語のＳｔｒｉｎｇ型に対応付けている。
【００２６】
次に、図６に示す注釈付きスキーマ１０１におけるデータ変換を実行するＣＰＵやコンパイラ等の実行系に依存する実行系依存情報を記述する部分について説明する。この実行系依存情報は、ＸＭＬスキーマに注釈を付与するためのｘｄｓ：ａｎｎｏｔａｔｉｏｎ要素で記述する。注釈は構造体全体に対するものと個々のメンバに対するものがある。構造体全体に対する注釈は、図６に示す注釈付きスキーマ１０１の０４行目のように構造体定義の一番外側の要素であるｘｓｄ：ｃｏｍｐｌｅｘＴｙｐｅの子要素として付与する。０４行目では、ＭＳＧ構造体のサイズ（大きさ）が４８バイトであることをｓＩｎｆｏ要素のｓｉｚｅ属性で記述している。また、バイト順序がリトル・エンディアンであることをｂｙｔｅＯｒｄｅｒ属性の属性値ＬＩＴＴＬＥ＿ＥＮＤＩＡＮで記述している。さらに、データの文字エンコードがＳｈｉｆｔ＿ＪＩＳであることを属性ｅｎｃｏｄｉｎｇにより記述している。
【００２７】
一方、メンバのみに対する注釈は、ｘｓｄ：ｅｌｅｍｅｎｔ要素の子要素として付与する。図６に示す注釈付きスキーマ１０１の０７行目では、メンバｃｏｄｅはＭＳＧ構造体バイト列のオフセット０の位置から４バイト分を占めることを、ｓＩｎｆｏ要素のｓｉｚｅ属性とｏｆｆｓｅｔ属性で記述している。
【００２８】
なお、ＭＳＧ構造体のメンバｃｏｄｅが４バイト、メンバｂｏｄｙが４２バイトであることから、単純にこれらの和をとればＭＳＧ構造体のサイズは４６バイトと予想される。しかし、構造体全体のサイズは、コンパイラによるパディング等のために実行系に依存してさまざまに変化する。例えば、ある実行系ではＭＳＧ構造体全体のサイズは４８バイトとなる。同様に、バイト列中の各メンバの位置（オフセット）も、パディング等の影響により単純に変数の占めるバイト数の和とはならない。
このような情報が無いとバイト列からＪａｖａ（登録商標）オブジェクト及びその逆のデータ変換処理は正しく行えない。したがって、データ変換を実行する実行系に依存する実行系依存情報を注釈としてスキーマに付与しておく。
【００２９】
データ変換プログラム生成手段１０２は、注釈付きスキーマ１０１を読み込み、データ変換プログラム１０３を生成する。以下、Ｃ言語のＭＳＧ構造体のバイト列とＪａｖａ（登録商標）言語のＭＳＧオブジェクトの変換プログラムの生成を例に説明する。生成するデータ変換プログラム１０３はＪａｖａ（登録商標）言語によるプログラムであり、ＭＳＧＣｏｎｖｅｒｔｅｒというクラスとする。また、データ変換処理はＭＳＧＣｏｎｖｅｒｔｅｒクラスのｔｏＯｂｊｅｃｔ及びｔｏＢｙｔｅｓメソッドとして生成するものとする。ここで、ｔｏＯｂｊｅｃｔはＣ言語のＭＳＧ構造体バイナリ列を引数として受け取り、Ｊａｖａ（登録商標）言語のＭＳＧオブジェクトを返すメソッド、ｔｏＢｙｔｅｓはＪａｖａ（登録商標）言語のＭＳＧオブジェクトを引数として受け取り、Ｃ言語のＭＳＧ構造体バイナリ列を返すメソッドとする。
【００３０】
図７及び図８はデータ変換プログラム生成手段１０２の処理フローの一例を示す図である。図７はバイト列からＪａｖａ（登録商標）オブジェクトへのデータ変換プログラム１０３を生成する処理フローを示し、図８はＪａｖａ（登録商標）オブジェクトからバイト列へのデータ変換プログラム１０３を生成する処理フローを示している。
【００３１】
図９はデータ変換プログラム生成手段１０２により生成されたＭＳＧ構造体に対するデータ変換プログラム１０３の例を示す図である。図１０はデータ変換プログラム生成手段１０２により生成されたＭＳＧＳ構造体に対するデータ変換プログラム１０３の例を示す図である。
【００３２】
まず、図７の処理フローについて説明する。ステップＳＴ１１の「スキーマ読み込み」ステップにおいて、注釈付きスキーマ１０１を読み込み、参照可能な状態で保持する。上記の例では、注釈付きスキーマ１０１はＸＭＬ形式であるので、公知のＸＭＬパーサを利用して、読み込み処理及びＸＭＬ内容へのアクセス処理を構成することが可能である。例えば、後で参照可能としておくためには、読み込んだＸＭＬスキーマをＤＯＭ木として保持しておき、ＸＭＬの標準的なＡＰＩ（Application Program Interface）であるＤＯＭ（Document Object Model）でアクセスすれば良い。また、ＤＯＭ木ではなく、ＸＭＬスキーマ情報を格納するための専用のＪａｖａ（登録商標）クラスを用意し、そこに格納して参照しても良い。
【００３３】
ステップＳＴ１２の「開始処理生成」ステップでは、データ変換メソッドの開始記述等のデータ変換プログラム１０３の定型的な部分を生成する。これは図９に示すデータ変換プログラム１０３の０１行から０３行目の部分である。生成するデータ変換プログラム１０３において、構造体によって異なるのはＭＳＧＣｏｎｖｅｒｔｅｒというクラス名とｔｏＯｂｊｅｃｔメソッドの戻り値であり、その他の部分は構造体によらず固定である。したがって、注釈付きスキーマ１０１を参照してｘｓｄ：ｃｏｍｐｌｅｘＴｙｐｅのｎａｍｅ属性から構造体名ＭＳＧを取得して、図９に示すデータ変換プログラム１０３の０１から０３行目の部分を生成すれば良い。
【００３４】
この場合、例えば、固定的な文字列部分をデータ変換プログラム１０３中に埋め込んでおき、可変部分のみ注釈付きスキーマ１０１を参照した値に置き換えることにより実現できる。また、固定的な文字列と置き換え記号を含むテンプレートファイルを用意しておき、置き換え記号を注釈付きスキーマ１０１から取得した値に置き換えるテンプレート変換方式で実現しても良い。
【００３５】
ステップＳＴ１３の「初期化プログラム生成」ステップでは、データ変換処理において一時的に用いる読み出し可能なバッファを生成し、変換対象となるデータ（バイト列）を格納するプログラムを生成する。例えば、図９に示すデータ変換プログラム１０３の０４行目のように、バイト列ｂｙｔｅｓを初期値としたｂｕｆという変数名のバッファを生成する。さらに、注釈付きスキーマの０４行目のｂｙｔｅＯｒｄｅｒ属性によりバイト順序がＬＩＴＴＬＥ＿ＥＮＤＩＡＮであることが規定されているので、図９に示すデータ変換プログラム１０３の０５行目のように、生成したバッファのバイト順序をＬＩＴＴＬＥ＿ＥＮＤＩＡＮに設定する。
【００３６】
ステップＳＴ１４の「ループ初期化処理」ステップでは、注釈付きスキーマ１０１のｘｓｄ：ｅｌｅｍｅｎｔ要素を順に取得して、それぞれの構造体メンバに対するデータ変換プログラム１０３を生成するためのループ初期処理を行う。ＭＳＧ構造体の例では、最初のメンバとしてｃｏｄｅを選択する。次のループはメンバｂｏｄｙに対して行う。ループ回数は２回である。
【００３７】
ステップＳＴ１５の「構造体メンバに対するデータ変換プログラム生成」ステップでは、選択したメンバに対するデータ変換プログラム１０３を生成する。まず、メンバｃｏｄｅが選択されている場合について説明する。
【００３８】
プログラム生成１）では、選択した構造体メンバに対する注釈を参照し、構造体の先頭からのオフセットを取得し、バッファの読み出し位置を、取得したオフセットにセットするプログラムを生成する。図６に示す注釈付きスキーマ１０１の０７行目からメンバｃｏｄｅのオフセットは０であると分かるので、ｐｏｓｉｔｉｏｎメソッドによってバッファの読み出し位置を０にセットするプログラムを生成する（図９に示すデータ変換プログラム１０３の０６行目の処理）。
【００３９】
プログラム生成２）では、選択した構造体メンバに対するスキーマを参照して繰り返し回数を取得し、次のプログラム生成３），４）の処理を繰り返し回数だけ行うプログラムを生成する。図６に示す注釈付きスキーマ１０１の０６行目のｍｉｎＯｃｃｕｒｓ及びｍａｘＯｃｃｕｒｓ属性からメンバｃｏｄｅの繰り返し回数は１回と分かる。したがって、次に示すプログラム生成処理３）、４）によって生成されるプログラム（図９に示すデータ変換プログラム１０３の０７行目）を一度だけ実行するようにプログラムを生成する。
【００４０】
プログラム生成３）では、選択した構造体メンバに対する注釈を参照してサイズを取得し、バッファから取得したサイズ分のデータを読み出すプログラムを生成し、プログラム生成４）では、選択した構造体メンバに対するスキーマを参照してデータ型を取得し、プログラム生成３）で読み出したデータを該データ型へ変換する処理を呼び出すプログラムを生成する。
【００４１】
プログラム生成３），４）では、図６に示す注釈付きスキーマ１０１の０７行目のｓｉｚｅ属性からメンバｃｏｄｅのサイズが４バイト、０６行目のｔｙｐｅ属性からデータ型がｉｎｔであることが分かる。したがって、Ｊａｖａ（登録商標）言語の標準メソッドであるｇｅｔＩｎｔメソッドを用いてバッファから４バイトを読み出してｉｎｔデータに変換し、その値をｓｅｔＣｏｄｅメソッドによりＭＳＧオブジェクトのｃｏｄｅプロパティに設定するプログラムを生成する（図９に示すデータ変換プログラム１０３の０７行目の処理）。
【００４２】
以上により、メンバｃｏｄｅに対する変換処理プログラム（図９に示すデータ変換プログラム１０３の０６〜０７行目の処理）が生成される。
【００４３】
ステップＳＴ１６において、全体構造体メンバについて処理完了しているかをチェックし、メンバｂｏｄｙについて処理を行っていないので、ステップＳＴ１７の「次の構造体メンバの選択」ステップにおいて、ステップＳＴ１５の「構造体メンバに対するデータ変換プログラム生成」ステップでの対象メンバとしてｂｏｄｙを選択する。
【００４４】
メンバｂｏｄｙを対象として、ステップＳＴ１５の「構造体メンバに対するデータ変換プログラム生成」を実行する。メンバｃｏｄｅと同様に、図６に示す注釈付きスキーマ１０１の０９及び１０行目を参照すると、メンバｂｏｄｙのオフセットは４バイト、繰り返し数は１回、サイズが４２バイト、データ型は文字列型（Ｓｔｒｉｎｇ）であることが分かる。したがって、まずバッファの読み出し位置を４バイト目にセットし（図９に示すデータ変換プログラム１０３の０８行目）、４２バイト分のデータを読み出すためのバッファｂｕｆＢｏｄｙを新規に作成し（図９に示すデータ変換プログラム１０３の０９行目）、バッファｂｕｆから４２バイト分のデータをｂｕｆＢｏｄｙに読み込み（図９に示すデータ変換プログラム１０３の１０行目）、ｂｕｆＢｏｄｙに読み込んだバイト列を文字列型に変換してＭＳＧオブジェクトのｂｏｄｙプロパティにｓｅｔＢｏｄｙメソッドを用いて格納するプログラム（図９に示すデータ変換プログラム１０３の１１行目）を生成する。なお、図６に示す注釈付きスキーマの０４行目より、データの文字コードがＳｈｉｆｔ＿ＪＩＳであることが分かるので、文字列型への変換処理であるＳｔｒｉｎｇ（）メソッドの呼び出し時に文字コードとしてＳｈｉｆｔ＿ＪＩＳを指定する。
【００４５】
以上により、メンバｂｏｄｙに対する変換処理プログラム（図９に示すデータ変換プログラム１０３の０８〜１１行目）が生成される。
【００４６】
なお、ステップＳＴ１５の「構造体メンバに対するデータ変換プログラム生成」ステップで生成するプログラムは、構造体メンバのデータ型に応じて固定部分を雛形として予め用意しておくことが可能であり、メンバ名やサイズ等の可変部分を置き換えれば良い。
【００４７】
ステップＳＴ１６において、全体構造体メンバについて処理完了しているかをチェックし、構造体のメンバはｃｏｄｅとｂｏｄｙの２つなので、全体構造体メンバについて処理完了していると判断して、ステップＳＴ１８の「終了処理生成」ステップに進む。ステップＳＴ１８の「終了処理生成」ステップでは、メソッドの戻り値処理の終了記述等のプログラムの定型的な部分を生成する（図９に示すデータ変換プログラム１０３の１２〜１３行目）。
【００４８】
以上の処理により、ＭＳＧ構造体のバイト列をＭＳＧオブジェクトへ変換するデータ変換プログラム（図９に示すデータ変換プログラム１０３の０２〜１３行目）が生成できる。
【００４９】
次に図８の処理フローについて説明する。
続いて、図８の処理フローを実行することにより、ＭＳＧオブジェクトをＭＳＧ構造体のバイト列へ変換するデータ変換プログラム（図９に示すデータ変換プログラム１０３の１４〜２９行目）１０３が生成できる。図８のステップＳＴ２１の「スキーマ読み込み」ステップ、ステップＳＴ２２の「開始処理生成」ステップ、ステップＳＴ２４の「ループ初期化処理」ステップは、図７のステップＳＴ１１，１２，１４の処理と同様なので省略する。
【００５０】
ステップＳＴ２３の「初期化プログラム生成」ステップでは、注釈付きスキーマ１０１を参照し、構造体のサイズを取得し、構造体のサイズを保持する変数を生成して、取得した構造体のサイズで初期化するプログラムを生成する。例えば、図６に示す注釈付きスキーマ１０１中の０４行目のｓＩｎｆｏ要素のｓｉｚｅ属性を参照することで、ＭＳＧ構造体のサイズは４８バイトであることが得られる。したがって、サイズを保持する変数ｓｉｚｅを４８で初期化するプログラム（図９に示すデータ変換プログラム１０３の１５行目）を生成する。
【００５１】
次に、メンバｃｏｄｅに対するステップＳＴ２５の「構造体メンバに対するデータ変換プログラム生成」ステップの処理について説明する。
プログラム生成１）では、選択した構造体メンバに対する注釈を参照してサイズを取得し、スキーマを参照して繰り返し回数を取得し、取得したサイズと繰り返し回数を乗じたサイズのバッファを作成するプログラムを生成する。図６に示す注釈付きスキーマ１０１の０７行目からメンバｃｏｄｅのサイズは４、０６行目から繰り返し回数が１であると分かるので、サイズ４のバッファｂｆＣｏｄｅを作成するプログラムを生成する（図９に示すデータ変換プログラム１０３の１６行目の処理）。また、図６に示す注釈付きスキーマの０４行目からバイト順序がＬＩＴＴＬＥ＿ＥＮＤＩＡＮと分かるので、生成したバッファのバイト順序をＬＩＴＴＬＥ＿ＥＮＤＩＡＮに設定する（図９に示すデータ変換プログラム１０３の１７行目の処理）。
【００５２】
プログラム生成２）では、選択した構造体メンバに対するスキーマを参照して繰り返し回数を取得し、次に示すプログラム生成処理３）、４）の処理を繰り返し回数だけ行うプログラムを生成する。図６に示す注釈付きスキーマ１０１の０６行目からｃｏｄｅの繰り返し回数は１回と分かる。したがって、次のプログラム生成処理３）、４）によって生成されるプログラム（図９に示すデータ変換プログラム１０３の１８行目）を一度だけ実行するようにプログラムを生成する。
【００５３】
プログラム生成３）では、選択した構造体メンバに対するスキーマを参照してデータ型を取得し、オブジェクトのプロパティ値を取得し、該データ型に応じたバイト列変換処理を呼び出すプログラムを生成し、プログラム生成４）では、プログラム生成１）で生成したバッファへプログラム生成３）で変換したデータを書き出すプログラムを生成する。
【００５４】
プログラム生成３，４）では、図６に示す注釈付きスキーマ１０１の０６行目のｔｙｐｅ属性からデータ型がｉｎｔであることが分かる。したがって、オブジェクトからプロパティ値を取得するｇｅｔＣｏｄｅメソッドを用いてｃｏｄｅの値を取得し、Ｊａｖａ（登録商標）の標準メソッドであるｐｕｔＩｎｔメソッドによりバイト列に変換してバッファｂｆＣｏｄｅに格納するプログラムを生成する（図９に示すデータ変換プログラム１０３の１８行目の処理）。なお、ｂｆＣｏｄｅを後から利用するために、ｒｅｗｉｎｄ（）というメソッド合わせて呼び出している（図９に示すデータ変換プログラム１０３の１９行目の処理）。
【００５５】
プログラム生成５）では、ステップＳＴ２３の「初期化プログラム生成」ステップにおいて初期化した構造体のサイズが０の場合、サイズを保持する変数にプログラム生成１）で生成したバッファのサイズを足し込むプログラムを生成するが、ステップＳＴ２３の「初期化プログラム生成」ステップにおいて初期化したｓｉｚｅ変数の値は０ではないので、プログラム生成５）のステップは実行しない。
【００５６】
以上により、メンバｃｏｄｅに対する変換処理プログラム（図９に示すデータ変換プログラム１０３の１６〜１９行目の処理）が生成される。メンバｂｏｄｙについても、メンバｂｏｄｙに対するステップＳＴ２５の「構造体メンバに対するデータ変換プログラム生成」ステップの処理を実行し、変換処理プログラム（図９に示すデータ変換プログラム１０３の２０〜２３行目の処理）が生成される。
【００５７】
ステップＳＴ２６において、全体構造体メンバについて処理完了しているかをチェックし、メンバはｃｏｄｅとｂｏｄｙのみであるので、ステップＳＴ２８の「終了処理生成」ステップに進む。
【００５８】
ステップＳＴ２８の「終了処理生成」ステップにおいて、ステップＳＴ２５の「構造体メンバに対するデータ変換プログラム生成」ステップで生成した各構造体メンバに対するバッファの内容を、注釈を参照してオフセットの位置に並べ戻り値とし、メソッドの終了記述等のプログラムの定型的な部分を生成するプログラムを生成する。図６に示す注釈付きスキーマ１０１を参照すると、メンバｃｏｄｅのオフセットは０、サイズは４、メンバｂｏｄｙのオフセットは４、サイズは４２であることが分かる。そこで、ｓｉｚｅが保持する値に等しいサイズのバイト列ｂを作成し、ステップＳＴ２５の「構造体メンバに対するデータ変換プログラム生成」ステップで作成した各メンバに対するバッファｂｆＣｏｄｅ及びｂｆＢｏｄｙの内容を、オフセットとサイズに応じてｂｕｆ上に配置するプログラムを生成する（図９に示すデータ変換プログラム１０３の２４〜２６行目の処理）。最後にｂを戻り値とするプログラムを生成する（図９に示すデータ変換プログラム１０３の２７行目の処理）。
【００５９】
以上の処理により、ＭＳＧオブジェクトをＭＳＧ構造体のバイト列へ変換するデータ変換プログラム（図９に示すデータ変換プログラム１０３の１４〜２８行目）が生成できる。
【００６０】
なお、ステップＳＴ２５の「構造体メンバに対するデータ変換プログラム生成」ステップやステップＳＴ２８の「終了処理生成」ステップで生成するプログラムは、メンバ名やサイズ等の注釈付きスキーマ１０１を参照して決定する部分のみが可変部分で、その他の部分は構造体によらず固定部分である。したがって、構造体メンバのデータ型に応じて固定部分を雛形として予め用意しておくことが可能であり、メンバ名やサイズ等の可変部分を置き換えれば良い。
【００６１】
同様にして、データ変換プログラム生成手段１０２は、ＭＳＧＳ構造体の注釈付きスキーマ（図６に示す注釈付きスキーマ１０１の１４行目〜２４行目）１０１に対して、図７及び図８の処理フローを実行することにより、図１０に示すＭＳＧＳオブジェクトとＭＳＧＳ構造体バイト列の相互変換を行うデータ変換プログラム１０３を生成する。
【００６２】
以上のように、この実施の形態１によれば、データの構造とデータ型を規定するスキーマに対して、データ変換を実行するＣＰＵやコンパイラ等の実行系に依存する実行系依存情報を注釈として付与しておき、その情報を利用することで、異なるプログラミング言語間のデータ表現形式を直接変換できるデータ変換プログラム１０３を自動生成し、効率的なシステム間連携を実現することができるという効果が得られる。
【００６３】
実施の形態２．
図１１はこの発明の実施の形態２によるデータ変換プログラム生成装置の基本構成を示す図である。図１１において、データ定義プログラム１０４はプログラム言語によって記述されたデータ構造の定義プログラムである。注釈付きスキーマ生成手段１０５は、データ定義プログラムを解析して注釈付きスキーマを１０１生成するものであり、データの構造とデータ型に関する情報をデータ定義プログラム１０４から抽出する構造・データ型情報抽出手段１０６と、データ変換を実行するＣＰＵやコンパイラ等の実行系に依存する実行系依存情報を、データ定義プログラム１０４から抽出する実行系依存情報抽出手段１０７により構成される。
【００６４】
実施の形態２の図１１において、注釈付きスキーマ１０１、データ変換プログラム生成手段１０２及びデータ変換プログラム１０３は、上記実施の形態１の図１と同じなので説明を省略する。
以下、注釈付きスキーマ生成手段１０５の処理について、図３に例として示すデータ定義プログラム１０４を入力して、図６に示す注釈付きスキーマ１０１を出力する例について説明する。
【００６５】
まず、構造・データ型情報抽出手段１０６について説明する。プログラミング言語は構文が仕様として規定されており、パーサと呼ばれる構文解析プログラムによって処理することが可能である。したがって、構造・データ型抽出手段１０６は、プログラムを解析して構造情報とデータ型情報を抽出する機能を持つパーサとして実現することができる。
【００６６】
パーサの生成方法は各種公知のものが提案されており、例えば、ｙａｃｃというツールは構文定義からパーサを生成するコンパイラ・コンパイラツールとして広く利用されている。ｙａｃｃでは、プログラムを構文定義に追記しておくことで、パーサによる解析時にそのプログラムを実行することができる。
【００６７】
ｙａｃｃの構文定義及び処理については本発明の主眼ではないので詳細な説明は割愛するが、以下に動作の概略を示す。
例えば、図１２は構造・データ型情報抽出手段１０６を生成するための構文定義の例を示す図であり、ｙａｃｃへの入力となる構文定義の一部分を示す図である。図１２において、ＩｎｔＭｅｍｂｅｒは構文を定義するための非終端記号であり、ｉｎｔという文字列からなる終端記号と、ＷＯＲＤという非終端記号の並びとして定義されている。ここで、非終端記号ＷＯＲＤは任意の一単語と一致するように構文定義中で定義されている。
【００６８】
括弧（｛｝）の中には、構文解析処理で非終端記号ＩｎｔＭｅｍｂｅｒを検出したときに実行するプログラムを記述する。「＄数字」という記法により構文定義に含まれる終端記号及び非終端記号の値を参照することが可能であり、図１２の例で＄２はＷＯＲＤを参照している。したがって、構文解析時に非終端記号ＩｎｔＭｅｍｂｅｒの構文定義に一致する記述を検出した場合、”＜ｘｓｄ：ｅｌｅｍｅｎｔ  ｎａｍｅ＝”ＷＯＲＤ”  ｍａｘＯｃｃｕｒｓ＝”１”  ｍｉｎＯｃｃｕｒｓ＝”１”  ｔｙｐｅ＝”ｘｓｄ：ｉｎｔ”＞”という文字列が出力される。ここで、ＷＯＲＤは構文解析処理によって検出したプログラム中の一単語に置き換えられる。
【００６９】
例えば、図３のＭＳＧ構造体のデータ定義プログラムを構文解析処理した場合、データ定義プログラム２行目のメンバｃｏｄｅの定義箇所がＩｎｔＭｅｍｂｅｒの構文定義と一致する。したがって、ＷＯＲＤをｃｏｄｅと置き換え”＜ｘｓｄ：ｅｌｅｍｅｎｔ  ｎａｍｅ＝”ｃｏｄｅ”  ｍａｘＯｃｃｕｒｓ＝”１”  ｍｉｎＯｃｃｕｒｓ＝”１”  ｔｙｐｅ＝”ｘｓｄ：ｉｎｔ”＞”という図６に示す注釈付きスキーマ１０１の０６行目のスキーマ記述を出力する。
【００７０】
同様にして、Ｃ言語の全ての構造体定義記述を受理するような構文定義を記述し、それぞれの非終端記号にスキーマ出力のプログラムを規定することで、ＭＳＧ構造体のデータ定義プログラム１０４から図６に示す注釈付きスキーマ１０１の０３〜１３行目（ただし、注釈部分である０４、０７、１０行目を除く）を生成するようなパーサを構成することが可能である。
【００７１】
次に、実行系依存情報抽出手段１０７について説明する。実行系依存情報抽出手段１０７も構造・データ型情報抽出手段１０６と同様に、構文解析時に実行系依存情報を検出するプログラムを生成するパーサとして構成すれば良い。
【００７２】
図１３はＭＳＧ構造体の実行系依存情報を検出するプログラムの例を示す図であり、ここでは、例えば、ＭＳＧ構造体の実行系依存情報として、構造体全体の大きさ、構造体の各メンバの大きさ、各メンバの先頭からのオフセットを抽出するには、図１３に示すようなプログラムを生成すれば良い。このような定型的なプログラムは、構造・データ型情報抽出手段１０６と同様に、ｙａｃｃ等のツールを用いて生成可能なことは明らかであり詳細な説明は割愛する。
【００７３】
図１４は実行系依存情報抽出手段１０７、すなわち図１３に示すプログラムにより抽出されたＭＳＧ構造体の実行系依存情報の例を示す図であり、ここでは、ＭＳＧ構造体の実行系依存情報として、構造体全体の大きさ、構造体の各メンバの大きさ、各メンバの先頭からのオフセット、バイト順序が抽出されている。
【００７４】
実行系依存情報抽出手段１０７は、抽出した実行系依存情報を、構造・データ型情報抽出手段１０６が生成したスキーマに統合する。構造・データ型情報も実行系依存情報もＸＭＬ形式で記述されているため、以下の処理で統合が可能である。まず、構造・データ型情報のｘｓｄ：ｃｏｍｐｌｅｘＴｙｐｅ要素あるいはｘｓｄ：ｅｌｅｍｅｎｔ要素のｎａｍｅ属性値と一致するタグを実行系依存情報から探し、次に、一致したタグの子要素として含まれるｓＩｎｆｏ要素を、ｘｓｄ：ｃｏｍｐｌｅｘＴｙｐｅあるいはｘｓｄ：ｅｌｅｍｅｎｔのｘｓｄ：ａｎｎｏｔａｔｉｏｎ子要素として追加する。このような処理は、構造・データ型情報及び実行系依存情報をＸＭＬパーサによって読み込んでＤＯＭ木として保持し、ＤＯＭ−ＡＰＩを用いてＤＯＭ木の要素にアクセスし、ＤＯＭ木のノードを追加するようなプログラムによって容易に実現することが可能である。
【００７５】
以上の処理により、図３のデータ定義プログラムから図６に示す注釈付きスキーマ１０１を生成することが可能である。
【００７６】
なお、この実施の形態２では、構造・データ型情報抽出手段１０６と実行系依存情報抽出手段１０７の処理を独立に説明し、双方の出力結果を実行依存情報抽出手段１０７が統合する例で説明したが、構造・データ型情報抽出手段１０６と実行系依存情報抽出手段１０７の機能を合わせたパーサを生成して、両方の出力情報を含んだスキーマを一度に生成しても良い。また、パーサ生成の方法としてＣ言語とｙａｃｃを用いて説明したが、Ｊａｖａ（登録商標）言語とＪａｖａ（登録商標）ＣＣ等、他のプログラミング言語や他の方法を用いても良い。
【００７７】
以上のように、この実施の形態２によれば、上記実施の形態１と同様の効果が得られると共に、データの構造とデータ型に関する情報をデータ定義プログラムから抽出する構造・データ型情報抽出手段１０６と、データ変換を実行するＣＰＵやコンパイラ等の実行系に依存する実行系依存情報を抽出する実行系依存情報抽出手段１０７により、注釈付きスキーマ生成手段１０５がデータ定義プログラム１０４を解析して注釈付きスキーマ１０１を生成するため、注釈付きスキーマ１０１を人手で構築しなくても良く、効率良く、かつ誤り無く注釈付きスキーマ１０１を構築できるという効果が得られる。
【００７８】
実施の形態３．
図１５はこの発明の実施の形態３によるデータ変換プログラム生成装置の基本構成を示す図である。図１５において、注釈付きスキーマ修正手段１０８は、注釈付きスキーマ１０１の内容を修正するものであり、データ定義プログラムには記述されない構造体利用上の規約を、データ変換に必須な情報として注釈付きスキーマ１０１に付与する。注釈付きスキーマ１０９は修正後の注釈付きスキーマである。
【００７９】
図１６はＭＳＧ２構造体のＣ言語によるデータ定義プログラムの例を示す図であり、ｆｌａｇ、ｌｅｎ、ｂｏｄｙの３つのメンバを持つＭＳＧ２構造体が定義されている。
ｆｌａｇメンバはｃｈａｒ配列型である。Ｃ言語には文字列型が無いため、ｃｈａｒ配列型を使って文字列を格納するのが一般的である。しかしながら、ｃｈａｒ配列型が全て文字列を格納するものとは限らない。ｆｌａｇメンバもそのようなメンバであり、４バイトはそれぞれ独立のフラグを格納するものであるとする。このような規約はＭＳＧ２構造体の利用上の規約であって、ＭＳＧ２構造体の定義には記述されていない。すなわち、注釈付きスキーマ生成手段１０５により、そのような情報を抽出することはできず、構造体定義プログラム以外の情報を外部から与える必要がある。
【００８０】
ｂｏｄｙメンバはｃｈａｒポインタ型であり、実行時に確保したメモリ領域の先頭アドレスを保持するために用いられる。確保したメモリ領域のサイズは、一般に構造体の他のメンバに保持しておく。ＭＳＧ２構造体ではｌｅｎメンバがそのために用いられる。このような、構造体のメンバ間の関係もＭＳＧ２構造体の利用上の規約であって、ＭＳＧ２構造体の定義には記述されていない。
【００８１】
上記のデータ定義プログラムには記述されないデータに関係する情報は、データ変換に必須である。例えば、上記のｂｏｄｙメンバのサイズは実行時に動的に決まり、ｌｅｎメンバを参照しないと得られない。したがって「ｂｏｄｙメンバのサイズはｌｅｎメンバの値を参照する」という情報が無ければ正しいデータ変換は行えない。そこで、注釈付きスキーマ修正手段１０８は、これらの情報を注釈付きスキーマ１０１に付与して、注釈付きスキーマ１０９を出力する。この注釈付きスキーマ修正手段１０８はスキーマの内容を変更できるものであればどのように構成しても良い。例えば、テキストエディタやＸＭＬ編集ツール等の公知の方法を用いれば良い。また、置き換え規則に従って自動書き換えを行うプログラムであっても良い。
【００８２】
図１７はＭＳＧ２構造体に対する注釈付きスキーマ１０１の例を示す図である。まず、図１６のＭＳＧ２構造体のデータ定義プログラムから、図１７に示す注釈付きスキーマ１０１を生成する。生成の方法は、人手で作成しても良いし、上記実施の形態２で述べた注釈付きスキーマ生成手段１０５を用いても良い。
【００８３】
ｆｌａｇメンバのデータ型はｘｓｄ：ｓｔｒｉｎｇ、ｍａｘＯｃｃｕｒｓとｍｉｎＯｃｃｕｒｓは１となっている（図１７に示す注釈付きスキーマ１０１の０６行目）。また、ｓＩｎｆｏ要素のｓｉｚｅ属性は４となっている（図１７に示す注釈付きスキーマ１０１の０７行目）。
【００８４】
図１８は注釈付きスキーマ修正手段１０８により修正されたＭＳＧ２構造体に対する修正後の注釈付きスキーマ１０９の例を示す図である。前述したように、ｆｌａｇメンバは独立の４バイトとして扱う変数のため、データ型はｘｓｄ：ｂｙｔｅ、ｍａｘＯｃｃｕｒｓとｍｉｎＯｃｃｕｒｓは４、ｓＩｎｆｏ要素のｓｉｚｅ属性は１でなければならない。そこで、例えばテキストエディタ等の注釈付きスキーマ修正手段１０８が人間の指示に基づき図１８の０６及び０７行目ように修正する。
【００８５】
ｂｏｄｙメンバはポインタ型のため大きさが不定を意味する０となっている（図１７の０４行目のｓｉｚｅ属性）。ｂｏｄｙメンバの大きさはｌｅｎメンバに格納されているので、その値を参照することを意味するという記述、例えばｇｅｔＬｅｎ（）に変更する（図１８に示す修正後の注釈付きスキーマ１０９の１４行目）。
【００８６】
このように、注釈付きスキーマ修正生成手段１０８は、外部からの指示に基づき、データ定義プログラムには記述されない構造体利用上の規約を、データ変換に必須な情報として注釈付きスキーマ１０１に付与して、図１８に示す修正後の注釈付きスキーマ１０９を生成する。
【００８７】
図１９はデータ変換プログラム生成手段１０２により生成された構造体ＭＳＧ２に対するデータ変換プログラム１０３の例を示す図である。データ変換プログラム生成手段１０２は、図１８に示す修正後の注釈付きスキーマ１０９を入力し、上記実施の形態１と同様に処理して、図１９に示すデータ変換プログラム１０３を生成する。
【００８８】
以上のように、この実施の形態３によれば、上記実施の形態１と同様の効果が得られると共に、構造体メンバ間の関係等、データ定義プログラムには記述されない構造体利用上の規約を、データ変換に必須な情報として注釈付きスキーマ１０９に付与することができるため、メンバ間の内容を相互参照するようなデータ変換プログラム１０３を自動生成できるという効果がある。
【００８９】
なお、上記実施の形態１から上記実施の形態３によるデータ変換プログラム生成装置は、コンピュータと、このコンピュータを上記実施の形態１から上記実施の形態３における各手順として実行させるためのデータ変換プログラム生成プログラムにより実現することも可能である。
【図面の簡単な説明】
【００９０】
【図１】この発明の実施の形態１によるデータ変換プログラム生成装置の基本構成を示す図である。
【図２】この発明の実施の形態１によるデータ変換プログラム生成装置により生成されたデータ変換プログラムの実行時の構成を示す図である。
【図３】この発明の実施の形態１によるデータ変換プログラム生成装置におけるＣ言語構造体（ＭＳＧ構造体とＭＳＧＳ構造体）の例を示す図である。
【図４】この発明の実施の形態１によるデータ変換プログラム生成装置におけるＣ言語構造体（ＭＳＧ構造体）のバイナリ表現の例を示す図である。
【図５】この発明の実施の形態１によるデータ変換プログラム生成装置におけるＪａｖａ（登録商標）言語（ＭＳＧクラスとＭＳＧＳクラス）のオブジェクトの例を示す図である。
【図６】この発明の実施の形態１によるデータ変換プログラム生成装置における注釈付きスキーマの例を示す図である。
【図７】この発明の実施の形態１によるデータ変換プログラム生成装置のデータ変換プログラム生成手段の処理フローの一例を示す図である。
【図８】この発明の実施の形態１によるデータ変換プログラム生成装置のデータ変換プログラム生成手段の処理フローの一例を示す図である。
【図９】この発明の実施の形態１によるデータ変換プログラム生成装置のデータ変換プログラム生成手段により生成されたＭＳＧ構造体に対するデータ変換プログラムの例を示す図である。
【図１０】この発明の実施の形態１によるデータ変換プログラム生成装置のデータ変換プログラム生成手段により生成されたＭＳＧＳ構造体に対するデータ変換プログラムの例を示す図である。
【図１１】この発明の実施の形態２によるデータ変換プログラム生成装置の基本構成を示す図である。
【図１２】この発明の実施の形態２によるデータ変換プログラム生成装置における構造・データ型情報抽出手段を生成するための構文定義の例を示す図である。
【図１３】この発明の実施の形態２によるデータ変換プログラム生成装置においてＭＳＧ構造体の実行系依存情報を検出するプログラムの例を示す図である。
【図１４】この発明の実施の形態２によるデータ変換プログラム生成装置の実行系依存情報抽出手段により抽出されたＭＳＧ構造体の実行系依存情報の例を示す図である。
【図１５】この発明の実施の形態３によるデータ変換プログラム生成装置の基本構成を示す図である。
【図１６】この発明の実施の形態３によるデータ変換プログラム生成装置におけるＭＳＧ２構造体のＣ言語によるデータ定義プログラムの例を示す図である。
【図１７】この発明の実施の形態３によるデータ変換プログラム生成装置におけるＭＳＧ２構造体に対する注釈付きスキーマの例を示す図である。
【図１８】この発明の実施の形態３によるデータ変換プログラム生成装置の注釈付きスキーマ修正手段により修正されたＭＳＧ２構造体に対する修正後の注釈付きスキーマの例を示す図である。
【図１９】この発明の実施の形態３によるデータ変換プログラム生成装置のデータ変換プログラム生成手段により生成された構造体ＭＳＧ２に対するデータ変換プログラムの例を示す図である。
【符号の説明】
【００９１】
１０１，１０９  注釈付きスキーマ、１０２  データ変換プログラム生成手段、１０３  データ変換プログラム、１０４  データ定義プログラム、１０５  注釈付きスキーマ生成手段、１０６  構造・データ型情報抽出手段、１０７  実行系依存情報抽出手段、１０８  注釈付きスキーマ修正手段、１１１  Ｃ言語構造体のバイナリ表現、１１２  データ変換プログラム実行手段、１１３  Ｊａｖａ（登録商標）言語のオブジェクト。
【図１】
2008171275.tif 000003
【図２】
2008171275.tif 000004
【図３】
2008171275.tif 000005
【図４】
2008171275.tif 000006
【図５】
2008171275.tif 000007
【図６】
2008171275.tif 000008
【図７】
2008171275.tif 000009
【図８】
2008171275.tif 000010
【図９】
2008171275.tif 000011
【図１０】
2008171275.tif 000012
【図１１】
2008171275.tif 000013
【図１２】
2008171275.tif 000014
【図１３】
2008171275.tif 000015
【図１４】
2008171275.tif 000016
【図１５】
2008171275.tif 000017
【図１６】
2008171275.tif 000018
【図１７】
2008171275.tif 000019
【図１８】
2008171275.tif 000020
【図１９】
2008171275.tif 000021