(57)【要約】【課題】ソースコードを生成する工数を削減することができる。【解決手段】階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、前記所定の要素に関する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶する記憶手段と、指定された要素名である指定要素名を含む要素に関する親子関係を表す情報が、前記コード変換定義に含まれているか否か判定する判定手段と、前記判定の結果に基づいて、前記階層構造を有するデータと、前記生成ルールとに基づいて、前記ソースコードを生成する生成手段とを備えるソースコード生成装置を提供する。【選択図】      図７
2017091134.tif 000002
【特許請求の範囲】
【請求項１】
階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、前記所定の要素に関する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶する記憶手段と、
指定された要素名である指定要素名を含む要素に関する親子関係を表す情報が、前記コード変換定義に含まれているか否か判定する判定手段と、
前記判定の結果に基づいて、前記階層構造を有するデータと、前記生成ルールとに基づいて、前記ソースコードを生成する生成手段と、
を備えるソースコード生成装置。
【請求項２】
前記親子関係は、前記所定の要素の親要素の要素名と、前記親要素の親要素の要素名とを含み、
前記判定手段は、
前記定義要素名と、前記指定要素名とが一致するか否かを判定し、前記定義要素名と、前記指定要素名とが一致する場合、前記指定要素名を含む要素の親要素の要素名を示す第１親要素名を特定し、前記指定要素名を含む要素と、前記第１親要素名との親子関係と同様の親子関係が設定されているコード変換定義があるか否か判定する請求項１に記載のソースコード生成装置。
【請求項３】
前記判定手段は、
前記指定要素名を含む要素と、前記第１親要素名との親子関係と同様の親子関係が設定されているコード変換定義がある場合、前記指定要素名を含む要素の親要素の親要素の要素名を示す第２親要素名を特定し、
前記第２要素名が、前記第１親要素名との親子関係と同様の親子関係が設定されているコード変換定義に含まれるか否かを判定する請求項２に記載のソースコード生成装置。
【請求項４】
前記判定手段は、
前記定義要素名と、前記指定要素名とが一致しない場合、または前記第１親要素名との親子関係と同様の親子関係が設定されているコード変換定義がない場合、または前記第２親要素名が、第１親要素名が設定されているコード変換定義に含まれない場合、前記出力手段にエラーを通知し、
前記出力手段は、前記通知に基づいて、エラーを出力する請求項３に記載のソースコード生成装置。
【請求項５】
前記判定手段は、
前記ソースコードが生成されたことを検知し、前記検知に基づいて、前記指定要素名を含む要素の３階層上の要素があるか否か判定し、前記指定要素名を含む要素の３階層上の要素がある場合、該３階層上の要素の要素名を新たな指定要素名とする請求項１から請求項４のいずれか１項に記載のソースコード生成装置。
【請求項６】
前記階層構造を有するデータと、前記コード変換定義と、前記指定要素名と、前記指定要素名を含む要素を特定する特定情報との入力を受け付ける受付手段と、
前記生成手段が生成したソースコードに所定の文字列を追加し、前記文字列を追加したソースコードを出力する出力手段と、
を備える請求項１から請求項５のいずれか１項に記載のソースコード生成装置。
【請求項７】
前記階層構造を有するデータの階層構造が判別できるように表示する表示手段を備える請求項１から請求項６のいずれか１項に記載のソースコード生成装置。
【請求項８】
前記階層構造を有するデータは、
ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）と、ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）と、ＸＨＴＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）と、ＳＧＭＬ（Ｓｔａｎｄａｒｄ  Ｇｅｎｅｒａｌｉｚｅｄ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）とのいずれかである請求項１から請求項７のいずれか１項に記載のソースコード生成装置。
【請求項９】
階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、前記所定の要素に関する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶し、
指定された要素名である指定要素名を含む要素に関する親子関係を表す情報が、前記コード変換定義に含まれているか否か判定し、
前記判定の結果に基づいて、前記階層構造を有するデータと、前記生成ルールとに基づいて、前記ソースコードを生成するソースコード生成方法。
【請求項１０】
階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、前記所定の要素に関する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶する処理と、
指定された要素名である指定要素名を含む要素に関する親子関係を表す情報が、前記コード変換定義に含まれているか否か判定する処理と、
前記判定の結果に基づいて、前記階層構造を有するデータと、前記生成ルールとに基づいて、前記ソースコードを生成する処理と、
をコンピュータに実行させるソースコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードの記述を支援する技術に関する。
【背景技術】
【０００２】
コンピュータに対する一連の指示を示すソースコードを、自動で生成する技術が開示されている。例えば、特許文献１には、予めユーザが設計した生成モデルに基づき、ソースコードを生成するシステム開発支援方法が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２０９６５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述の特許文献１に記載の方法では、クライアント端末において、ソースコードを記述する際に必要なテンプレートを、管理サーバから取得する必要がある。また、取得したテンプレートはソースコード生成後にクライアント端末から削除される。そのため、ソースコードを生成するために何度も管理サーバからテンプレートを取得する必要があるため、ソースコードを生成する工数がかかる。
【０００５】
そこで、本発明の目的は、ソースコードを生成する工数を削減する技術を提供する。
【課題を解決するための手段】
【０００６】
本発明に係るソースコード生成装置は、階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、前記所定の要素に関する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶する記憶手段と、指定された要素名である指定要素名を含む要素に関する親子関係を表す情報が、前記コード変換定義に含まれているか否か判定する判定手段と、前記判定の結果に基づいて、前記階層構造を有するデータと、前記生成ルールとに基づいて、前記ソースコードを生成する生成手段とを備える。
【０００７】
本発明に係るソースコード生成方法は、階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、前記所定の要素に関する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶し、指定された要素名である指定要素名を含む要素に関する親子関係を表す情報が、前記コード変換定義に含まれているか否か判定し、前記判定の結果に基づいて、前記階層構造を有するデータと、前記生成ルールとに基づいて、前記ソースコードを生成する。
【０００８】
本発明に係るソースコード生成プログラムは、階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、前記所定の要素に関する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶する処理と、指定された要素名である指定要素名を含む要素に関する親子関係を表す情報が、前記コード変換定義に含まれているか否か判定する処理と、前記判定の結果に基づいて、前記階層構造を有するデータと、前記生成ルールとに基づいて、前記ソースコードを生成する処理とをコンピュータに実行させる。
【発明の効果】
【０００９】
ソースコードを生成する工数を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１実施形態に係るソースコード生成装置の構成の一例を示すブロック図である。
【図２】変換定義を示す例示的概念図である。
【図３】ＸＭＬデータを示す例示的概念図である。
【図４】本発明の第１実施形態に係るソースコード生成装置のハードウェア構成の一例を示すブロック図である。
【図５】本発明の第１実施形態に係るソースコード生成装置の動作の一例を示すフローチャートである。
【図６】本発明の第１実施形態に係るソースコード生成装置の動作の一例を示すフローチャートである。
【図７】本発明の第２実施形態に係るソースコード生成装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について図面を参照して詳細に説明する。
【００１２】
＜第１実施形態＞
図１は、本発明の第１実施形態におけるソースコード生成装置１の構成の一例を示すブロック図である。図１において、ソースコード生成装置１は、受付部１１と、記憶部１２と、表示部１３と、判定部１４と、探索部１５と、生成部１６と、出力部１７とを備える。
【００１３】
受付部１１は、開発者から変換定義の入力を受け付け、受け付けた変換定義を、記憶部１２に記憶させる。また、受付部１１は、例えば外部装置からＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）データを受け付け、受け付けたＸＭＬデータを表示部１３に送信する。また、受付部１１は、受け付けたＸＭＬデータを記憶部１２に記憶させる。さらに、受付部１１は、開発者が指定した要素に含まれる要素名（以下、指定要素名）と、指定要素名を特定する情報（以下、特定情報）とを受け付け、受け付けた指定要素名と、特定情報とを判定部１４に送信する。また、受付部１１は、例えば、開発者が入力したＸＭＬデータを受け付けてもよい。なお、受付部１１が受け付けるデータは、ＸＭＬデータに限定されず、階層構造を有するデータであればよい。例えば、ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）と、ＸＨＴＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）と、ＳＧＭＬ（Ｓｔａｎｄａｒｄ  Ｇｅｎｅｒａｌｉｚｅｄ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）とが挙げられる。ここで、図２及び図３を用いて、変換定義と、ＸＭＬデータとについて説明する。
【００１４】
図２は、変換定義を示す例示的概念図である。変換定義は、ソースコード生成装置１が受け付けるＸＭＬデータに基づいて設定され、ソースコード生成装置１が受け付けるＸＭＬデータに含まれる特定の要素名（以下、定義要素名）と、コード変換定義群とを含む。ＸＭＬデータについては後述する。コード変換定義群は、ソースコードの生成方法を規定した生成ルールを、適用するための１以上のコード変換定義を含む。
【００１５】
また、コード変換定義は、定義要素名の一階層上の要素に含まれる要素名を示す親要素名と、定義要素名の親要素名の親要素名と、ソースコードの生成方法を規定した生成ルールとを含む。つまり、コード変換定義には、定義要素名を含む要素と、該要素以外の要素との親子関係を表す情報が含まれている。なお、コード変換定義群に含まれるコード変換定義の数は、図２では２つであるが、当業者によって適宜設定することができる。
【００１６】
図３は、ＸＭＬデータを示す例示的概念図である。なお、説明の便宜上、図３に示すＸＭＬデータには、行番号を付している。図３に示すように、ＸＭＬデータはインデントによって階層を表す。また、ＸＭＬデータは、「＜」から「＞」までの文字列を開始タグと表し、「＜／」から「＞」までの文字列を終了タグと表す。また、この「＜」と「＞」とに囲まれた文字列、または、「＜／」と「＞」とに囲まれた文字列を要素名と表す。例えば、図３の３行目に示す「＜ｎａｍｅ＞ｒｅｓｕｌｔ＜／ｎａｍｅ＞」においては、「＜ｎａｍｅ＞」が開始タグを示し、「＜／ｎａｍｅ＞」が終了タグを示し、「ｎａｍｅ」が要素名を示す。なお、本実施形態においては、指定要素名および、定義要素名は、開始タグに含まれる要素名を指す。
【００１７】
また、開始タグから、終了タグまでの文字列を要素と表す。つまり、図３の３行目に示す「＜ｎａｍｅ＞ｒｅｓｕｌｔ＜／ｎａｍｅ＞」においては、「＜ｎａｍｅ＞ｒｅｓｕｌｔ＜／ｎａｍｅ＞」が要素となる。また、所定の要素を含む要素は、親要素と表す。図３においては、５行目の「＜ａｒｒａｙ＞」は、６行目の「＜ｄａｔａ＞」を含む。したがって、「＜ａｒｒａｙ＞」は「＜ｄａｔａ＞」の親要素である。また、同様の親要素を持ち、かつ同様のインデントの要素同士は、兄弟要素と表す。図３においては、例えば、３行目の要素と、４行目の要素とは、どちらも親要素を２行目の「＜ｍｅｍｂｅｒ＞」とし、かつ同様のインデントのため、互いに兄弟要素である。
【００１８】
表示部１３は、受付部１１からＸＭＬデータを受信し、受信したＸＭＬデータがもつ階層構造が判別できるように、ＸＭＬデータを画面に表示する。
【００１９】
判定部１４は、受付部１１から指定要素名と、特定情報とを受信し、受信した指定要素名と、定義要素名とが一致するか否か判定する。指定要素名と、定義要素名とが一致する場合、判定部１４は、探索部１５に、定義要素名が一致したことを示す情報（以下、一致情報）を送信する。なお、一致情報は、指定要素名と、特定情報と、定義要素名とを含む。
【００２０】
一方で、指定要素名と、定義要素名とが一致しない場合、判定部１４は、出力部１７にエラーを通知する。
【００２１】
また、判定部１４は、生成部１６が出力部１７にソースコードを送信したことを検知し、該検知に基づいて、指定要素名の３階層上に要素があるか否かを判定する。また判定部１４は、指定要素名の３階層上に要素がある場合、指定要素名の３階層上の要素に含まれる要素名を新たな指定要素名として記憶部１２に記憶させる。
【００２２】
一方で、指定要素名の３階層上に要素がない場合、指定要素名の３階層上に要素がない旨を出力部１７に通知する。
【００２３】
探索部１５は、判定部１４から一致情報を受信する。また、探索部１５は、一致情報を受信したことを契機に、記憶部１２に記憶されているＸＭＬデータから指定要素名の親要素名（以下、第１親要素名）を特定する。そして、探索部１５は、記憶部１２に記憶されているコード変換定義群の中から、特定した親要素名が設定されているコード変換定義があるか探索する。第１親要素名が設定されているコード変換定義がない場合、探索部１５は、出力部１７にエラーを通知する。
【００２４】
一方で、第１親要素名が設定されているコード変換定義がある場合、探索部１５は、ＸＭＬデータから第１親要素名の親要素名（以下、第２親要素名）を特定する。そして、探索部１５は、第２親要素名が、第１親要素名が設定されているコード変換定義に含まれるか否か判定する。第２親要素名が、第１親要素名が設定されているコード変換定義に含まれていない場合、探索部１５は、出力部１７にエラーを通知する。
【００２５】
また、第２親要素名が、第１親要素名が設定されているコード変換定義に含まれる場合、探索部１５は、生成部１６に、ソースコード生成指示を示す情報（以下、生成指示）を送信する。なお、生成指示は、指定要素名と、特定情報と、第１親要素名と第２親要素名とが設定されているコード変換定義とを含む。
【００２６】
生成部１６は、探索部１５から生成指示を受信する。また、生成部１６は、生成指示に基づいて、生成指示に含まれるコード変換定義に含まれる生成ルールを取り出す。生成部１６は、取り出した生成ルールと、記憶部１２に記憶されているＸＭＬデータとを用いて、ソースコードを生成する。そして、生成部１６は、生成したソースコードを出力部１７に送信する。本実施形態において生成するソースコードは、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）に従って、所定の機能を有するコンピュータプログラムを呼び出すためのソースコードを生成する。しかしながら、当業者によって、どのようなソースコードを生成するかは適宜設定できる。
【００２７】
出力部１７は、生成部１６からソースコードを受信し、受信したソースコードを保持する。また、出力部１７は、判定部１４から、指定要素名の３階層上に要素がない旨の通知を受け、保持しているソースコードの先頭に、所定の文字列を追加して出力する。
【００２８】
＜ハードウェア構成＞
図４は、本発明の第１実施形態に係るソースコード生成装置のハードウェア構成の一例を示すブロック図である。
【００２９】
ソースコード生成装置１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２２と、ネットワークインタフェース２３と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２４と、記憶装置２５と、入力装置２６と、出力装置２７とによって構成可能である。入力装置２６は、例えば、マウス、キーボードなどで実現される。出力装置２７は、例えば、ディスプレイで実現される。
【００３０】
受付部１１は、例えば、ネットワークインタフェース２３と、ＲＯＭ２２及び記憶装置２５に記憶されたコンピュータソースコードをＲＡＭ２４に書き込み、書き込まれたコンピュータソースコードを実行するＣＰＵ２１と、入力装置２６とによって構成される。記憶部１２は、記憶装置２５によって構成される。
【００３１】
表示部１３は、例えば、出力装置２７によって構成される。また、表示部１３が例えばタッチパネルのように入力を受け付ける機能を有する場合、表示部１３は、入力装置２６と、出力装置２７とによって構成されてもよい。
【００３２】
判定部１４と、探索部１５と、生成部１６とは、例えば、ＲＯＭ２２及び記憶装置２５に記憶されたコンピュータソースコードをＲＡＭ２４に書き込み、書き込まれたコンピュータソースコードを実行するＣＰＵ２１によって構成される。出力部１７は、例えば、出力装置２７によって構成される。なお、上記ハードウェア構成は例示であり、上記構成には限定されない。
【００３３】
図５は、本発明の第１実施形態に係るソースコード生成装置の動作の一例を示すフローチャートである。まず、受付部１１は、開発者から変換定義を受け付ける（ステップＳ１００）。そして、受付部１１は受け付けた変換定義を記憶部１２に記憶させる（ステップＳ１０１）。
【００３４】
上記処理によって、記憶部１２に図２に示すような変換定義が記憶されることで、ＸＭＬデータが入力された際に、探索部１５は、ＸＭＬデータと、変換定義とを比較することができる。
【００３５】
図６は、本発明の第１実施形態に係るソースコード生成装置の動作の一例を示すフローチャートである。このフローチャートでは、具体的に、図２に示す変換定義と、図３に示すＸＭＬデータとを使用し、説明を行う。まず、受付部１１は、例えば外部装置からＸＭＬデータを受け付け（ステップＳ２００）、受け付けたＸＭＬデータを表示部１３に送信する。また、受付部１１は、受け付けたＸＭＬデータを記憶部１２に記憶させる。
【００３６】
そして、表示部１３は、受付部１１からＸＭＬデータを受信し、受信したＸＭＬデータがもつ階層構造が判別できるように、ＸＭＬデータを画面に表示する（ステップＳ２０１）。また、受付部１１は、開発者が指定した要素に含まれる要素名（指定要素名）を受け付け（ステップＳ２０２）、受け付けた指定要素名と、特定情報とを判定部１４に送信する。例えば、図３に示す２０行目の要素「＜ｖａｌｕｅ＞ＸＭＬデータの取り扱いについて＜／ｖａｌｕｅ＞」を開発者が指定する。この場合、「＜ｖａｌｕｅ＞ＸＭＬデータの取り扱いについて＜／ｖａｌｕｅ＞」に含まれる要素名（指定要素名）は「ｖａｌｕｅ」となる。受付部１１は、指定要素名「ｖａｌｕｅ」と、指定要素名「ｖａｌｕｅ」を特定する位置（特定情報）とを判定部１４に送信する。
【００３７】
判定部１４は、受付部１１から、指定要素名と、特定情報とを受信し、受信した指定要素名と、変換定義に含まれる要素名（定義要素名）とが一致するか否か判定する（ステップＳ２０３）。具体的に、判定部１４は、指定要素名「ｖａｌｕｅ」と、図２に示す定義要素名とが一致するか否か判定する。変換定義に設定されている定義要素名は「ｖａｌｕｅ」であるため、指定要素名と、定義要素名とは一致する。指定要素名と、定義要素名とが一致する場合、判定部１４は、探索部１５に、一致情報を送信する。
【００３８】
その後、探索部１５は、判定部１４から一致情報を受信する。また、探索部１５は、一致情報を受信したことを契機に、記憶部１２に記憶されているＸＭＬデータから指定要素名の親要素名（第１親要素名）を特定する（ステップＳ２０４）。そして、探索部１５は、記憶部１２に、第１親要素名が設定されているコード変換定義があるか探索する（ステップＳ２０５）。言い換えると、探索部１５は、指定要素名を含む要素に関連する親子関係を表す情報が、コード変換定義群に含まれているか探索する。図３のＸＭＬデータを参照すると、第１親要素名は、１８行目に示す「ｍｅｍｂｅｒ」となる。探索部１５は、「ｍｅｍｂｅｒ」が設定されているコード変換定義があるか否か探索する。図２の変換定義を参照すると、コード変換定義１に設定されている親要素名は「ｍｅｍｂｅｒ」であるため、探索部１５は、第１親要素名が設定されているコード変換定義があると判定する。
【００３９】
第１親要素名が設定されているコード変換定義がある場合、探索部１５は、第１親要素名の親要素名（第２親要素名）を特定する（ステップＳ２０６）。そして、探索部１５は、第２親要素名が、第１親要素名が設定されているコード変換定義に含まれているか否か判定する（ステップＳ２０７）。図３を参照すると、指定要素名の親要素名「ｍｅｍｂｅｒ」の親要素名は、１３行目に示す「ｓｔｒｕｃｔ」となる。そして、図２を参照すると、コード変換定義１に設定されている親要素名の親要素名は「ｓｔｒｕｃｔ」である。すなわち、第２親要素名と、コード変換定義１に設定されている親要素名の親要素名とは一致する。よって、探索部１５は、第２親要素名が、第１親要素名が設定されているコード変換定義に含まれていると判定する。
【００４０】
第２親要素名が、第１親要素名が設定されているコード変換定義に含まれている場合、探索部１５は、生成部１６に、生成指示を送信する。
【００４１】
生成部１６は、探索部１５から生成指示を受信し、受信した生成指示に基づいて、生成指示に含まれるコード変換定義に含まれる生成ルールを取り出す。また、生成部１６は、取り出した生成ルールと、記憶部１２に記憶されているＸＭＬデータとを用いて、ソースコードを生成する（ステップＳ２０８）。
【００４２】
具体的に、図２を参照すると、コード変換定義１に含まれる生成ルールは、「［‘＜ｖａｌｕｅ＞の兄弟要素＜ｎａｍｅ＞の値’］」となっているため、生成部１６は図３に示すＸＭＬデータを参照し、１９行目に示す要素「＜ｎａｍｅ＞ｓｕｍｍａｒｙ＜／ｎａｍｅ＞」の値である「［‘ｓｕｍｍａｒｙ’］」をソースコードとして生成する。そして、生成部１６は、生成したソースコードを出力部１７に送信する。
【００４３】
その後、判定部１４は、生成部１６が出力部１７にソースコードを送信したことを検知し、生成部１６が出力部１７にソースコードを送信したことに基づき、指定要素名の３階層上に要素があるか否か判定する（ステップＳ２０９）。指定要素名の３階層上に要素がある場合、判定部１４は、指定要素名の３階層上の要素に含まれる要素名を、新たな指定要素名とする（ステップＳ２１０）。また、判定部１４は、新たな指定要素名を特定する位置（特定情報）を探索部１５に送信する。その後、判定部１４が、指定要素名の３階層上に要素がないと判定するまでステップＳ２０３からステップＳ２０９の処理が繰り返される。
【００４４】
図２及び図３を使用した具体例においては、１６行目に示す要素に含まれる指定要素名「ｖａｌｕｅ」の３階層上を確認すると、図３に示すＸＭＬデータの１２行目に「＜ｖａｌｕｅ＞」という要素が存在する。したがって、判定部１４は、１２行目に示す「＜ｖａｌｕｅ＞」に含まれる要素名「ｖａｌｕｅ」を新たな指定要素名とする。そして、指定要素名「ｖａｌｕｅ」について、ステップＳ２０３からステップＳ２０９の処理が行われる。なお、出力部１７が、生成部１６から新たに受信するソースコードは、すでに保持しているソースコードの文字列の前に挿入する。したがって、この時出力部１７が保持する文字列は、「［‘ｆｉｅｌｄｓ’］［‘ｓｕｍｍａｒｙ’］」となる。なお、図３を参照すると、１２行目に示す要素に含まれる指定要素名「ｖａｌｕｅ」の３階層上、８行目に示す要素「＜ｖａｌｕｅ＞」が存在している。したがって、新たな指定要素名「ｖａｌｕｅ」の３階層上の８行目に示す要素の要素名「ｖａｌｕｅ」を指定要素名として、ステップＳ２０３からステップＳ２０９の処理が繰り返される。
【００４５】
具体的に図３を参照すると、８行目に示す要素の要素名である「ｖａｌｕｅ」を指定要素名とすると、この指定要素名の親要素は、６行目に示す「＜ｄａｔａ＞」となり、「＜ｄａｔａ＞」に含まれる要素名は「ｄａｔａ」となる。このとき、コード変換定義２に設定されている親要素名は「ｄａｔａ」であるため、探索部１５は、第１親要素名が設定されているコード変換定義があると判定する。
【００４６】
また図３を参照すると、指定要素名の親要素名「ｄａｔａ」の親要素名（第２親要素名）は、５行目に示す要素の要素名である「ａｒｒａｙ」となる。そして、図２を参照すると、コード変換定義２に設定されている親要素名の親要素名は「ａｒｒａｙ」である。すなわち、第２親要素名は、コード変換定義２に設定されている親要素名の親要素名とは一致する。そのため、探索部１５は生成部１６に生成指示を送信する。生成部１６は生成指示に基づき、コード変換定義２に含まれる生成ルールを用いてソースコードを生成する。
【００４７】
図２を参照すると、コード変換定義２に含まれる生成ルールは、「［出現順番］」となっている。この出現順番は、指定要素名を含む要素が兄弟要素間で何番目に出現するのかを示す。このとき、図３を参照すると、指定要素名を含む８行目に示す要素「＜ｖａｌｕｅ＞」は、兄弟要素として７行目に示す要素「＜ｖａｌｕｅ＞２０１５−０７−２６  ０５：１７：４５．８７８０００＋００：００＜／ｖａｌｕｅ＞」を持つ。したがって、指定要素名を含む８行目に示す要素「＜ｖａｌｕｅ＞」は、２番目に出現することがわかる。出現順番は、０から数えるため、出現順番は、「１」となる。
【００４８】
つまり、出力部１７が保持するソースコードは、「［１］［‘ｆｉｅｌｄｓ’］［‘ｓｕｍｍａｒｙ’］」となる。なお、図３を参照すると、指定要素名を含む要素「＜ｖａｌｕｅ＞」の３階層上の要素には、４行目に示す要素「＜ｖａｌｕｅ＞」が存在するため、この「＜ｖａｌｕｅ＞」に含まれる要素を指定要素名として、ステップＳ２０３からステップＳ２０９の処理が繰り返される。このとき出力部１７が保持するソースコードは、「［‘ｒｅｓｕｌｔ’］［１］［‘ｆｉｅｌｄｓ’］［‘ｓｕｍｍａｒｙ’］」となる。
【００４９】
指定要素名の３階層上に要素がない場合、判定部１４は、指定要素名の３階層上に要素がない旨を出力部１７に通知する。出力部１７は、指定要素名の３階層上に要素がないという通知に基づき、保持しているソースコードの先頭に「ｖａｌ＝ａｒｒａｙ」を追加する。そして、「ｖａｌ＝ａｒｒａｙ」を追加したソースコードを出力する（ステップＳ２１１）。
【００５０】
図３に示すＸＭＬデータを使用した具体例においては、４行目に示す要素「＜ｖａｌｕｅ＞」の３階層上には要素がないため、出力部１７は、保持しているソースコードの文字列「［‘ｒｅｓｕｌｔ’］［１］［‘ｆｉｅｌｄｓ’］［‘ｓｕｍｍａｒｙ’］」に「ｖａｌ＝ａｒｒａｙ」を追加する。その結果、出力部１７の出力は、「ｖａｌ＝ａｒｒａｙ［‘ｒｅｓｕｌｔ’］［‘１’］［‘ｆｉｅｌｄｓ’］［‘ｓｕｍｍａｒｙ’］」となる。
【００５１】
また、指定要素名と、定義要素名とが一致しない場合、判定部１４は、出力部１７にエラーを通知する。また、第１親要素名が設定されているコード変換定義がない場合、または、第２親要素名が、第１親要素名が設定されているコード変換定義に含まれていない場合、探索部１５は、出力部１７にエラーを通知する。
【００５２】
そして、出力部１７は、判定部１４または探索部１５から、エラーの通知を受け付け、受け付けたエラーの通知に基づき、エラーを出力する（ステップＳ２１２）。例えば、出力部１７は、ソースコードが生成できないことを文字列として出力してもよい。
【００５３】
上記動作によって、ソースコード生成装置１は、例えば開発者が入力した指定要素に基づき、コード変換定義群から、コード変換定義を選択する。そして、ソースコード生成装置１は、選択したコード変換定義に含まれる生成ルールと、ＸＭＬデータとを用いて自動でソースコードを生成することができる。これによって、ソースコード生成装置１は、ソースコードを記述する工数を削減することができる。
＜第２実施形態＞
次に、本発明の第２の実施形態について、図７を参照して説明する。本実施の形態では、本発明の課題を解決する最小の構成であるソースコード生成装置３について説明を行う。
【００５４】
図７は、第２実施形態に係るソースコード生成装置の構成の一例を示すブロック図である。ソースコード生成装置３は、記憶部３１と、判定部３２と、生成部３３とを備える。
【００５５】
記憶部３１は、階層構造を有するデータと、階層構造を有するデータに含まれる要素のうち、所定の要素の要素名である定義要素名と、所定の要素に関連する親子関係を表す情報およびソースコードの生成方法を規定した生成ルールが設定されたコード変換定義とを記憶する。
【００５６】
判定部３２は、判定部１４と、探索部１５との機能を有する。また、判定部３２は、例えば、開発者から指定された要素の要素名を示す指定要素名を受け付け、受け付けた指定要素名を含む要素に関連する親子関係を表す情報が、記憶部３１に記憶されているコード変換定義に含まれているか否か判定し、判定の結果を生成部３３に送信する。
【００５７】
生成部３３は、判定部３２から判定の結果を受信し、受信した判定結果に基づいて、記憶部３１を参照し、階層構造を有するデータと、生成ルールとに基づいて、ソースコードを生成する。
【００５８】
上記動作によって、ソースコード生成装置３は、指定要素名と、指定要素名を含む要素に関する親子関係を表す情報がコード変換定義に含まれているか否か判定する。そして、ソースコード生成装置３は、判定結果に基づき、指定要素名を含む要素が持つ親子関係と同様の親子関係が設定されているコード変換定義に含まれる生成ルールと、階層構造を有するデータとを用いて自動でソースコードを生成する。これによって、ソースコード生成装置３は、ソースコードを記述する工数を削減することができる。
【符号の説明】
【００５９】
１    ソースコード生成装置
３    ソースコード生成装置
１１    受付部
１２    記憶部
１３    表示部
１４    判定部
１５    探索部
１６    生成部
１７    出力部
２１    ＣＰＵ
２２    ＲＯＭ
２３    ネットワークインタフェース
２４    ＲＡＭ
２５    記憶装置
２６    入力装置
２７    出力装置
３１    記憶部
３２    判定部
３３    生成部
【図１】
2017091134.tif 000003
【図２】
2017091134.tif 000004
【図３】
2017091134.tif 000005
【図４】
2017091134.tif 000006
【図５】
2017091134.tif 000007
【図６】
2017091134.tif 000008
【図７】
2017091134.tif 000009