(57)【要約】【課題】  テンプレートの仕様の定義およびレビューと、テンプレートのデバックおよびテストとが容易なテンプレートを作成する装置を提供する。【解決手段】  テキスト入力手段１は、テンプレートを用いて生成可能としようとするテキストのサンプルとなるサンプルテキストを入力する。区画情報入力手段３は、サンプルテキストに対応して、テンプレートにおいて文字列の置換を可能とする挿入区画の範囲および構造を示す区画情報を入力する。データモデル入力手段５は、サンプルテキストの挿入区画の文字列の基となるデータモデルを入力する。生成規則入力手段７は、データモデルから、サンプルテキストの挿入区画の文字列を生成するための生成規則を入力する。テンプレート生成手段９は、サンプルテキストにおける挿入区画の範囲を置換可能とし、生成規則により生成した文字列を挿入区画に挿入してテンプレートを生成する。【選択図】      図１
2005234959.tif 000002
【特許請求の範囲】
【請求項１】
文字列を含むテキストを生成するときに雛型として用いられるテンプレートを作成するテンプレート作成装置であって、
前記テンプレートを用いて生成可能としようとするテキストのサンプルとなるサンプルテキストを入力するテキスト入力手段と、
前記テキスト入力手段により入力された前記サンプルテキストに対応して、前記テンプレートにおいて文字列の置換を可能とする挿入区画の範囲および構造を示す区画情報を入力する区画情報入力手段と、
前記サンプルテキストの前記挿入区画の文字列の基となるデータモデルを入力するデータモデル入力手段と、
前記データモデルから、前記サンプルテキストの前記挿入区画の文字列を生成するための生成規則を入力する生成規則入力手段と、
前記サンプルテキストにおける前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した前記文字列を、置換可能な前記挿入区画に挿入して前記テンプレートを生成するテンプレート生成手段とを有するテンプレート作成装置。
【請求項２】
前記区画情報入力手段が、前記挿入区画内にさらに挿入区画を階層的に設定し、
前記生成規則入力手段が、前記挿入区画内に階層的に設定された挿入区画の生成規則を入力し、
前記テンプレート生成手段が、前記サンプルテキストにおける各階層の前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した文字列を置換可能な前記挿入区画に挿入して、階層的に挿入区画が設定されたテンプレートを生成する、請求項１記載のテンプレート作成装置。
【請求項３】
前記区画情報入力手段が、前記テキストの構造に従って、前記挿入区画内を複数の要素区画を有する繰り返し構造に設定し、
前記生成規則入力手段が、前記挿入区画の生成規則と共に、該挿入区画内の前記要素区画の生成規則を入力し、
前記テンプレート生成手段が、前記サンプルテキストにおける前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した前記挿入区画内の前記要素区画の文字列が共通であれば、前記要素区画の文字列を代表する文字列を前記挿入区画に挿入し、前記挿入区画内の前記要素区画の文字列が共通でなければ、前記要素区画の文字列をif-then-else構文で結合した文字列を前記挿入区画に挿入して、前記テンプレートを生成する、請求項１または２に記載のテンプレート作成装置。
【請求項４】
前記テキスト入力手段が、前記テンプレートを用いて生成可能としようとするテキストのサンプルとなる複数の前記サンプルテキストを入力し、
前記区画情報入力手段が、前記サンプルテキストの各々に対応して、前記テンプレートにおいて文字列の置換を可能とする前記挿入区画の範囲および構造を示す前記区画情報を入力し、
前記生成規則入力手段が、前記データモデルから、前記サンプルテキストの前記挿入区画の文字列を生成するための前記生成規則を前記サンプルテキストの各々について入力し、
前記テンプレート生成手段が、前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した、同じ前記挿入区画に関する前記サンプル毎の文字列が共通であれば、前記サンプル毎の文字列を代表する文字列を前記挿入区画に挿入し、同じ前記挿入区画に関する前記サンプル毎の文字列が共通でなければ、前記サンプル毎の文字列をif-then-else構文で結合した文字列を前記挿入区画に挿入して、前記テンプレートを生成する、請求項１〜３のいずれか１項に記載のテンプレート作成装置。
【請求項５】
前記テンプレート生成手段は、作成したテンプレート内に共通した前記挿入区画があれば、それら共通した前記挿入区画を代表する文字列を該挿入区画に挿入することにより前記テンプレートを簡単化する、請求項１〜４のいずれか１項に記載のテンプレート作成装置。
【請求項６】
前記サンプルテキスト間、前記挿入区画間、または前記要素区画間で前記データモデルが共通のものが有ればそれを検出し、共通する前記データモデルの文字列を代表する文字列のデータモデルにまとめる汎化手段をさらに有する、請求項１〜５のいずれか１項に記載のテンプレート作成装置。
【請求項７】
前記汎化手段は、前記テンプレート生成手段により生成された前記テンプレートにif-then-else構文の部分があり、前記if-then-else構文で結合された文字列に互いに共通する複数の文字列があれば、前記複数の文字列を、前記複数の文字列を代表する文字列にまとめる、請求項６記載のテンプレート作成装置。
【請求項８】
前記サンプルテキスト、前記データモデル、および前記生成規則が相互に整合性が取れているか否か検証する整合性検証手段と、
前記データモデルの変更が要求されると、変更内容を定めて前記整合性検証手段に前記変更内容で前記サンプルテキスト、前記データモデル、および前記生成規則が相互に整合性が取れているか否かの検証を指示し、前記整合性が取れていれば前記変更内容で前記データモデルを変更し、前記整合性が取れていなければ前記データモデルの変更をキャンセルするデータモデル修正手段と、
前記生成規則の変更が要求されると、変更内容を定めて前記整合性検証手段に前記変更内容で前記サンプルテキスト、前記データモデル、および前記生成規則が相互に整合性が取れているか否かの検証を指示し、前記整合性が取れていれば前記変更内容で前記生成規則を変更し、前記整合性が取れていなければ前記生成規則の変更をキャンセルする生成規則修正手段とをさらに有する、請求項１〜７いずれか１項に記載のテンプレート作成装置。
【請求項９】
前記テキスト入力手段が入力した前記サンプルテキストを利用者の任意に変更するテキスト修正手段と、
前記テキスト修正手段が前記サンプルテキストを変更したとき、その変更内容に応じて前記区画情報を変更し、また前記区画情報入力手段が入力した前記区画情報を前記利用者の任意に変更する区画情報修正手段とをさらに有し、
前記データモデル修正手段は、前記テキスト修正手段が前記テキストを変更したとき、または前記区画情報修正手段が前記区画情報を変更したとき、その変更内容に応じて前記データモデルを変更し、また前記利用者の任意に前記データモデルを変更し、
前記生成規則修正手段は、前記区画情報修正手段が前記区画情報を変更したとき、その変更内容に応じて前記生成規則を変更し、また前記利用者の任意に前記生成規則を変更する、請求項８記載のテンプレート作成装置。
【請求項１０】
文字列を含むテキストを生成するときに雛型として用いられるテンプレートを作成するためのテンプレート作成プログラムであって、
前記テンプレートを用いて生成可能としようとするテキストのサンプルとなるサンプルテキストを入力するテキスト入力手段と、
前記テキスト入力手段により入力された前記サンプルテキストに対応して、前記テンプレートにおいて文字列の置換を可能とする挿入区画の範囲および構造を示す区画情報を入力する区画情報入力手段と、
前記サンプルテキストの前記挿入区画の文字列の基となるデータモデルを入力するデータモデル入力手段と、
前記データモデルから、前記サンプルテキストの前記挿入区画の文字列を生成するための生成規則を入力する生成規則入力手段と、
前記サンプルテキストにおける前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した前記文字列を、置換可能な前記挿入区画に挿入して前記テンプレートを生成するテンプレート生成手段としてコンピュータを機能させるためのテンプレート作成プログラム。
【請求項１１】
文字列を含むテキストを生成するときに雛型として用いられるテンプレートをコンピュータにより作成するためのテンプレート作成方法であって、
前記コンピュータのテキスト入力手段が、前記テンプレートを用いて生成可能としようとするテキストのサンプルとなるサンプルテキストを入力する第１のステップと、
前記コンピュータの区画情報入力手段が、前記テキスト入力手段により入力された前記サンプルテキストに対応して、前記テンプレートにおいて文字列の置換を可能とする挿入区画の範囲および構造を示す区画情報を入力する第２のステップと、
前記コンピュータのデータモデル入力手段が、前記サンプルテキストの前記挿入区画の文字列の基となるデータモデルを入力する第３のステップと、
前記コンピュータの生成規則入力手段が、前記データモデルから、前記サンプルテキストの前記挿入区画の文字列を生成するための生成規則を入力する第４のステップと、
前記コンピュータのテンプレート生成手段が、前記サンプルテキストにおける前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した前記文字列を、置換可能な前記挿入区画に挿入して前記テンプレートを生成する第５のステップとを有するテンプレート作成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、利用者の所望するテンプレートを作成するテンプレート作成装置に関する。
【背景技術】
【０００２】
ＷｅｂページのＨＴＭＬソースやプログラムのソースコードなどのテキストを生成するのにテンプレート（雛型）が用いられる。テンプレートは、テキストの汎用的なデータ構造やアルゴリズムを利用しやすい形でまとめたものであり、これを雛型として用いるとテキストの生成が容易となる。
【０００３】
また、テンプレートを用いて利用者の所望するテキストを作成するテンプレートエンジンと呼ばれる仕組みがある。ＷｅｂページのＨＴＭＬソースを生成するときにテンプレートエンジンを用いれば、実際のコンテンツの表示イメージを意識しながらＨＴＭＬソースを生成することができる。
【０００４】
一般的なテンプレートエンジンは、テンプレートを記述するための言語を持っている。その言語には、データモデルから生成する文字列を定型テキスト中の所定の位置へ挿入することを示す表記法や、モデル内の繰返し構造や再帰構造をテキストへ展開するための制御構文が備えられている。そのため、単純な構造の定型テキストを生成する場合だけなく、プログラムソースコードのような複雑な構造をもつファイルの生成にも適用可能とされている。テンプレートエンジンの例としては、ＶｅｌｏｃｉｔｙやＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）がある。
【０００５】
非特許文献１には、従来のテンプレートエンジンの一例が示されている。非特許文献１に示されているテンプレートエンジンはＶｅｌｏｃｉｔｙである。Ｖｅｌｏｃｉｔｙは、テンプレートを記述する言語としてＶＴＬ（Ｖｅｌｏｃｉｔｙ  Ｔｅｍｐｌａｔｅ  Ｌａｎｇｕａｇｅ）を備えている。ＶＴＬには、ＶＴＬのコンテキストからデータモデルを参照し、それを編集または加工した結果を固定のテキスト中へ挿入する操作を記述した制御構文や、データモデル内の繰返し構造を文字列へと展開する操作を記述した制御構文など、様々な制御構文が備えられている。そのため、ＶＴＬは、ＷｅｂページのＨＴＭＬソースの自動生成や、より複雑なプログラム・ソースコードの自動生成に用いることができる。
【０００６】
また、非特許文献２には、Ｖｅｌｏｃｉｔｙと同様な機能を持った従来の他のテンプレートエンジンの例が示されている。非特許文献２に示されているテンプレートエンジンはＪＳＰである。ＪＳＰによってもＨＴＭＬソースの自動生成等を行うことができる。
【０００７】
また、特許文献１には、従来のテンプレート自動生成システムの一例が示されている。特許文献１の図１に示されているように、この従来のテンプレート自動生成システムは、サンプルページ記憶部およびテンプレート抽出手段を備えている。
【０００８】
サンプルページ記憶部には、利用者の好みに合った複数のサンプルページが格納される。
【０００９】
テンプレート抽出手段は、サンプルページ記憶部に格納されているサンプルページの内の、複数のサンプルページにおいてほぼ同一位置に配置され、かつ内容が同一の構成要素を内容一致構成要素として抽出し、また、これら複数のサンプルページにおいてほぼ同一位置に配置され、内容が異なる構成要素を内容不一致構成要素として抽出する。そして、テンプレート抽出手段は、抽出した内容一致構成要素を、その内容一致構成要素のサンプルページ上の配置位置に応じた位置に配置し、利用者の所望により入力可能な内容不一致構成要素の記入欄を、内容不一致構成要素のサンプルページ上における配置位置に応じた位置に配置したテンプレートを生成する。
【００１０】
これにより、従来のテンプレート自動生成システムは、複数のサンプルページの共通部分を内容一致構成要素とし、個別部分を内容不一致構成要素として利用者が所望の構成要素を記入できるようなテンプレートを生成する。このテンプレートを用いれば、利用者は、共通部分は自動的に生成され、個別部分は自分の所望の内容にしたテキストを容易に作成することができる。
【非特許文献１】"The apache vacarta project"、[online]、Apache Software Foundation、[平成１６年２月１３日検索]、インターネット<URL : http://jakarta.apache.org/velocity/user-guide.html>(日本語訳:http://www.jajakarta.org/velocity/velocity-1.2/docs-ja/user-guide.html)
【非特許文献２】"Java Technology  Java 2 Platform, Enterprise Edition (J2EE)"、[online]、Sun Microsystems, Inc、[平成１６年２月１３日検索]、インターネット、<URL : http://java.sun.com/j2ee/index.jsp >
【特許文献１】特開２００１−３１２４９０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
従来、テンプレートエンジンの主な用途は、データベースから定型的なＷｅｂページを生成するような、生成規則が比較的単純なテキストの生成であった。このような用途ではテンプレートの構造も比較的単純であるため、テンプレートの生成にさしたる困難はなかった。
【００１２】
しかし、テンプレートエンジンによりプログラムのソースコードを生成する場合、テキストの生成規則が複雑である。テキストの生成規則が複雑となれば、そのテキスト生成に用いるテンプレートの構造も複雑となる。
【００１３】
そのため、非特許文献１または非特許文献２に記載されたテンプレートエンジンによれば、複雑なプログラム・ソースコードを自動生成は可能であるが、作成しようとするテンプレートの仕様を定義し、またその仕様をレビューするのが困難であるという問題があった。また、テンプレートの作成においてテンプレートのデバッグの生産性が低いという問題があった。さらに、作成されたテンプレートのテストを行なうことが困難であるという問題があった。
【００１４】
また、特許文献１に記載されたテンプレート自動生成システムによれば、複雑なプログラム・ソースコードの生成に用いるテンプレートを作成することができるが、類似性を有する複雑なサンプルを複数集めるのは容易でなく、また作成されるテンプレートの仕様の特定も困難であった。
【００１５】
本発明の目的は、テンプレートの仕様の定義およびレビューを容易にし、またテンプレートのデバックおよびテストを容易にするテンプレート作成装置を提供することである。
【課題を解決するための手段】
【００１６】
上記目的を達成するために、本発明のテンプレート作成装置は、文字列を含むテキストを生成するときに雛型として用いられるテンプレートを作成するテンプレート作成装置であって、
前記テンプレートを用いて生成可能としようとするテキストのサンプルとなるサンプルテキストを入力するテキスト入力手段と、
前記テキスト入力手段により入力された前記サンプルテキストに対応して、前記テンプレートにおいて文字列の置換を可能とする挿入区画の範囲および構造を示す区画情報を入力する区画情報入力手段と、
前記サンプルテキストの前記挿入区画の文字列の基となるデータモデルを入力するデータモデル入力手段と、
前記データモデルから、前記サンプルテキストの前記挿入区画の文字列を生成するための生成規則を入力する生成規則入力手段と、
前記サンプルテキストにおける前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した前記文字列を、置換可能な前記挿入区画に挿入して前記テンプレートを生成するテンプレート生成手段とを有している。
【００１７】
したがって、本発明によれば、テキスト入力手段がサンプルテキストを入力し、区画情報入力手段がそのサンプルテキストの区画情報を入力し、データモデル入力手段が各区画のデータモデルを入力し、生成規則入力手段がデータモデルから各区画の内容の文字列を生成する生成規則を入力し、テンプレート生成手段が、生成規則に従ってテンプレートにおいて置換可能な各区画の内容の文字列を生成しつつ、要素区画間およびテキスト間の重複を取り除くことができる。
【００１８】
また、本発明によれば、サンプルテキストに対して区画情報、データモデルおよび生成規則を照らし合わせることでテンプレートの仕様のレビューを行なうことができる。
【００１９】
また、本発明によれば、テンプレートを利用者が直接に編集することがなく、与えられた仕様に従ってテンプレート作成装置が機械的にテンプレートを作成するので、テンプレートに文法のエラーは発生しえず、また、テンプレートを用いてテキスト生成を行なうことなく、サンプルテキスト、区画情報、データモデル、または生成規則を編集するだけでデバッグを行なうことができる。
【００２０】
また、本発明によれば、テンプレートの仕様が事例で与えられるため、要求された仕様と現実に作成されたテンプレートとの乖離が原理的に生じない。
【００２１】
また、本発明のテンプレート作成装置は、前記区画情報入力手段が、前記挿入区画内にさらに挿入区画を階層的に設定し、
前記生成規則入力手段が、前記挿入区画内に階層的に設定された挿入区画の生成規則を入力し、
前記テンプレート生成手段が、前記サンプルテキストにおける各階層の前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した文字列を置換可能な前記挿入区画に挿入して、階層的に挿入区画が設定されたテンプレートを生成することとしてもよい。
【００２２】
また、本発明のテンプレート作成装置は、前記区画情報入力手段が、前記テキストの構造に従って、前記挿入区画内を複数の要素区画を有する繰り返し構造に設定し、
前記生成規則入力手段が、前記挿入区画の生成規則と共に、該挿入区画内の前記要素区画の生成規則を入力し、
前記テンプレート生成手段が、前記サンプルテキストにおける前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した前記挿入区画内の前記要素区画の文字列が共通であれば、前記要素区画の文字列を代表する文字列を前記挿入区画に挿入し、前記挿入区画内の前記要素区画の文字列が共通でなければ、前記要素区画の文字列をif-then-else構文で結合した文字列を前記挿入区画に挿入して、前記テンプレートを生成することとしてもよい。
【００２３】
また、本発明のテンプレート作成装置は、前記テキスト入力手段が、前記テンプレートを用いて生成可能としようとするテキストのサンプルとなる複数の前記サンプルテキストを入力し、
前記区画情報入力手段が、前記サンプルテキストの各々に対応して、前記テンプレートにおいて文字列の置換を可能とする前記挿入区画の範囲および構造を示す前記区画情報を入力し、
前記生成規則入力手段が、前記データモデルから、前記サンプルテキストの前記挿入区画の文字列を生成するための前記生成規則を前記サンプルテキストの各々について入力し、
前記テンプレート生成手段が、前記挿入区画の前記範囲を置換可能とし、前記生成規則により生成した、同じ前記挿入区画に関する前記サンプル毎の文字列が共通であれば、前記サンプル毎の文字列を代表する文字列を前記挿入区画に挿入し、同じ前記挿入区画に関する前記サンプル毎の文字列が共通でなければ、前記サンプル毎の文字列をif-then-else構文で結合した文字列を前記挿入区画に挿入して、前記テンプレートを生成することとしてもよい。
【００２４】
また、本発明のテンプレート作成装置は、前記テンプレート生成手段は、作成したテンプレート内に共通した前記挿入区画があれば、それら共通した前記挿入区画を代表する文字列を該挿入区画に挿入することにより前記テンプレートを簡単化することとしてもよい。
【００２５】
また、本発明のテンプレート作成装置は、前記サンプルテキスト間、前記挿入区画間、または前記要素区画間で前記データモデルが共通のものがあればそれを検出し、共通する前記データモデルの文字列を代表する文字列のデータモデルにまとめる汎化手段をさらに有することとしてもよい。
【００２６】
したがって、本発明によれば、汎化手段が重複するデータモデルをマージすることによりデータモデルおよび生成規則を汎化することができる。
【００２７】
また、本発明のテンプレート作成装置は、前記汎化手段は、前記テンプレート生成手段により生成された前記テンプレートにif-then-else構文の部分があり、前記if-then-else構文で結合された文字列に互いに共通する複数の文字列があれば、前記複数の文字列を、前記複数の文字列を代表する文字列にまとめることとしてもよい。
【００２８】
したがって、本発明によれば、テンプレート生成手段が生成したテンプレート内のｉｆ−ｔｈｅｎ−ｅｌｓｅ構文内の重複を汎化手段により除去することができる。
【００２９】
また、本発明のテンプレート作成装置は、前記サンプルテキスト、前記データモデル、および前記生成規則が相互に整合性が取れているか否か検証する整合性検証手段と、
前記データモデルの変更が要求されると、変更内容を定めて前記整合性検証手段に前記変更内容で前記サンプルテキスト、前記データモデル、および前記生成規則が相互に整合性が取れているか否かの検証を指示し、前記整合性が取れていれば前記変更内容で前記データモデルを変更し、前記整合性が取れていなければ前記データモデルの変更をキャンセルするデータモデル修正手段と、
前記生成規則の変更が要求されると、変更内容を定めて前記整合性検証手段に前記変更内容で前記サンプルテキスト、前記データモデル、および前記生成規則が相互に整合性が取れているか否かの検証を指示し、前記整合性が取れていれば前記変更内容で前記生成規則を変更し、前記整合性が取れていなければ前記生成規則の変更をキャンセルする生成規則修正手段とをさらに有することとしてもよい。
【００３０】
したがって、本発明によれば、データモデル修正手段または生成規則修正手段が内容の変更を入力すると、整合性検証手段がその変更内容においてデータモデル、区画情報およびテキストの整合性が取れているか否か判定し、整合性が取れているときだけ、データモデル修正手段または生成規則修正手段が変更を行なうので、事例の内容を変更しても各情報が相互に矛盾することが無い。
【００３１】
また、本発明のテンプレート作成装置は、前記テキスト入力手段が入力した前記サンプルテキストを利用者の任意に変更するテキスト修正手段と、
前記テキスト修正手段が前記サンプルテキストを変更したとき、その変更内容に応じて前記区画情報を変更し、また前記区画情報入力手段が入力した前記区画情報を前記利用者の任意に変更する区画情報修正手段とをさらに有し、
前記データモデル修正手段は、前記テキスト修正手段が前記テキストを変更したとき、または前記区画情報修正手段が前記区画情報を変更したとき、その変更内容に応じて前記データモデルを変更し、また前記利用者の任意に前記データモデルを変更し、
前記生成規則修正手段は、前記区画情報修正手段が前記区画情報を変更したとき、その変更内容に応じて前記生成規則を変更し、また前記利用者の任意に前記生成規則を変更することとしてもよい。
【発明の効果】
【００３２】
本発明によれば、テキスト入力手段がサンプルテキストを入力し、区画情報入力手段がそのサンプルテキストの区画情報を入力し、データモデル入力手段が各区画のデータモデルを入力し、生成規則入力手段がデータモデルから各区画の内容の文字列を生成する生成規則を入力し、テンプレート生成手段が、生成規則に従ってテンプレートにおいて置換可能な各区画の内容の文字列を生成しつつ、要素区画間およびテキスト間の重複を取り除くので、内容の把握が容易なサンプルテキストとそれに関する区画情報、データモデルおよび生成規則により、複雑なテンプレートの仕様を容易に定義することができる。
【００３３】
また、サンプルテキストに対して区画情報、データモデルおよび生成規則を照らし合わせることでテンプレートの仕様のレビューを行なうことができるので、複雑なテンプレートを直接チェックする必要がなく、テンプレートの仕様のレビューが容易である。
【００３４】
また、テンプレートを利用者が直接に編集することがなく、与えられた仕様に従ってテンプレート作成装置が機械的にテンプレートを作成するので、テンプレートに文法のエラーは発生しえず、また、テンプレートを用いてテキスト生成を行なうことなく、サンプルテキスト、区画情報、データモデル、または生成規則を編集するだけでデバッグを行なうことができ、コンパイルエラーに対する対処が容易であり、デバッグを効率的に行うことができる。
【００３５】
また、テンプレートの仕様が事例で与えられるため、要求された仕様と現実に作成されたテンプレートとの乖離が原理的に生じないので、仕様自体が妥当であるかどうかのみを検証すれば、仕様とテンプレートとの一致を検証する必要が無く、テンプレートのテストの効率が向上する。
【００３６】
また、汎化手段が重複するデータモデルをマージすることによりデータモデルおよび生成規則を汎化するので、それらの情報から作成されるテンプレートの冗長性が軽減される。
【００３７】
また、テンプレート生成手段が生成したテンプレート内のｉｆ−ｔｈｅｎ−ｅｌｓｅ構文内の重複を汎化手段が除去するので、テンプレートの冗長性が軽減される。
【００３８】
また、データモデル修正手段または生成規則修正手段が内容の変更を入力すると、整合性検証手段がその変更内容においてデータモデル、区画情報およびテキストの整合性が取れているか否か判定し、整合性が取れているときだけ、データモデル修正手段または生成規則修正手段が変更を行なうので、事例の内容を変更しても各情報が相互に矛盾することが無く、適切に仕様の修正を行なうことができる。
【発明を実施するための最良の形態】
【００３９】
本発明の一実施形態について図面を参照して詳細に説明する。本発明のテンプレート作成装置はコンピュータで構成されており、テンプレートから生成されるべきテキストを基にして、そのテキストの生成に適したテンプレートを生成するものである。そのため、テンプレートの生成には、サンプルとして少なくとも１つのテキストが必要とされる。
【００４０】
図１は、本発明の第１の実施形態によるテンプレート作成装置の構成を示すブロック図である。図１を参照すると、第１の実施形態のテンプレート作成装置は、テキスト入力部１、テキスト格納部２、区画情報入力部３、区画情報格納部４、データモデル入力部５、データモデル格納部６、生成規則入力部７、生成規則格納部８、およびテンプレート生成部９を有している。
【００４１】
テキスト入力部１は、テンプレートから生成されるべきテキストのサンプルとして用いられるテキストを少なくとも１つ入力し、テキスト格納部２に送る。テキストは文字列で表現されている。
【００４２】
テキスト格納部２は、テキスト入力部１により入力された少なくとも１つのテキストを格納する。テキスト格納部２は、作成の目的である１つのテンプレートに関して、サンプルのテキストを少なくとも１つ格納するものとし、複数個格納することもできる。
【００４３】
区画情報入力部３は、テキスト格納部２に格納されたテキストの各々について、テンプレートエンジンにより文字列を置換可能とする範囲、およびその範囲の中の繰返し構造を明示する情報として区画情報を入力し、区画情報格納部４に送る。
【００４４】
区画情報格納部４は、区画情報入力部３により入力された区画情報を、テキスト格納部２に格納されているテキストとの対応関係とともに格納する。
【００４５】
データモデル入力部５は、区画情報格納部４に格納された区画情報の各々に対応したデータモデルを入力し、データモデル格納部６に送る。データモデルとは、入れ子構造や繰り返し構造のような区画の構造に従って、各区画の内容に応じた情報である。データモデルにある生成規則を適用すると、区画の内容の文字列を得ることができる。
【００４６】
データモデル格納部６は、データモデル入力部５により入力されたデータモデルを、区画情報格納部４に格納されている区画情報との対応関係とともに格納する。
【００４７】
生成規則入力部７は、各区画内の文字列の生成規則を入力し、生成規則格納部８に送る。生成規則とは、各区画内の文字列を生成する方法を規定する規則である。そして、生成規則は、テキスト格納部２に格納されているテキストと、そのテキストに対応して区画情報格納部４に格納されている区画情報と、その区画情報に対応してデータモデル格納部６に格納されているデータモデルとに基づいて定められ、どのデータモデルにどのような加工処理を行うと、どの区画内の文字列が生成されるかを規定した情報である。
【００４８】
生成規則格納部８は、生成規則入力部７によって入力された生成規則を、処理結果が挿入される区画の区画情報に対応付けて格納する。
【００４９】
このようにして入力されたテキスト、区画情報、データモデル、および生成規則のセットが１つの事例となる。テンプレートの生成には、少なくとも１つの事例が入力される必要があり、複数の事例が入力されてもよい。これら事例として入力されたテキスト、区画情報、データモデル、および生成規則が、どのようなテンプレートを生成すべきかの情報、すなわちテンプレートの仕様を表している。
【００５０】
テンプレート生成部９は、事前に入力された事例、すなわちテキスト格納部２に格納されたテキスト、そのテキストに関連付けられて区画情報格納部４に格納された区画情報、その区画情報に関連付けられてデータモデル格納部６に格納されたデータモデル、および同じく区画情報に関連付けられて生成規則格納部８に格納された生成規則に基いてテンプレートを生成する。その際、テンプレート生成部９は、テキストにおける挿入区画の範囲を置換可能とし、データモデルに生成規則を適用して生成した文字列を置換可能な挿入区画に挿入することにより、テンプレートを生成する。また、挿入区画に要素区画があれば、テンプレート生成部９はその要素区画間の重複を取り除く。また、テキスト間で挿入区画に重複があれば、テンプレート生成部９はその挿入区画の重複を取り除く。
【００５１】
図２は、第１の実施形態のテンプレート作成装置の動作を示すフローチャートである。（ａ）はメインルーチンであり、（ｂ）はサブルーチンである。
【００５２】
図２（ａ）のメインルーチンを参照すると、テンプレート作成装置は、まず、入力すべき事例（サンプル）が存在するか否か判定する（ステップＡ１）。ここでは、事例として用いるべきテキストがあるか否か判定することとなる。また、事例として用いるテキストは、作成すべきテンプレートを用いて生成されるテキストの例である。良いテンプレートを生成するために適切なテキストを予め選択しておくことが望ましい。
【００５３】
入力すべき事例が存在すれば、テンプレート作成装置は図２（ｂ）のサブルーチンを呼び出し、サブルーチンの処理が終了するとステップＡ１の処理に戻る（ステップＡ２）。ステップＡ１〜Ａ２を繰り返すことにより、テンプレート作成装置は、入力すべき１つ以上の事例を入力する。
【００５４】
入力すべき事例を全て入力すると、テンプレート生成装置は、ステップＡ１の判定において入力すべき事例がなくなるので、次にテンプレートを作成する（ステップＡ２５）。
【００５５】
上述したステップＡ２にて呼び出される図２（ｂ）のサブルーチンを参照すると、まず、テキスト入力部１は、利用者の所望に従って事例のテキストを入力し、テキスト格納部２に格納する（ステップＡ２１）。図９は、事例として入力されるテキストの一例を示す図である。図９では、テキストの一例としてプログラムのソースコードを用いているが、本発明はそれに限定されるものではない。本発明のテキストは、文字列で表現されたテキスト全般を広く含み、他の例としてＷｅｂページのＨＴＭＬソースであってもよい。
【００５６】
次に、区画情報入力部３は、テキスト格納部２に格納されているテキストを利用者に提示し、利用者の操作に従って、そのテキスト内で区画とするべき範囲を区画情報として指定し、区画情報格納部４に格納する（ステップＡ２２）。図１０は、事例として入力される区画情報の区切り方の一例を示す図である。ここでいう区画情報は、図１０に例示されているようにテキスト内の部分文字列を区切ることによりできた区画を明示する情報である。
【００５７】
区画情報は少なくとも１つの挿入区画を含んでいる。挿入区画とは、テンプレート中において、データモデルから生成された文字列が挿入されるべき区画である。図１０の例では、Ｂｌｏｃｋ［０］、Ｂｌｏｃｋ［１］、Ｂｌｏｃｋ［２］が挿入区画である。
【００５８】
挿入区画には、複数の要素区画からなる繰り返し構造を持ったものと、繰り返し構造を持たないものとがある。要素区画とは、繰り返し構造を持った挿入区画内で繰り返される要素の区画である。図１０の例では、挿入区画Ｂｌｏｃｋ［１］は要素区画Ｂｌｏｃｋ［１］［０］〜Ｂｌｏｃｋ［１］［２］からなる繰り返し構造を持ち、挿入区画Ｂｌｏｃｋ［２］は要素区画Ｂｌｏｃｋ［２］［０］〜Ｂｌｏｃｋ［２］［２］からなる繰り返し構造を持っている。これに対して、挿入区画Ｂｌｏｃｋ［０］は繰り返し構造を持っていない。
【００５９】
また、繰り返し構造には、要素区画を区切る区切り区画を持つものと、持たないものとがある。区切り区画とは、繰り返し構造を持った挿入区画から要素区画を除外すると残る区画であり、要素区画間を区切る区画である。図１０では、挿入区画Ｂｌｏｃｋ［２］の繰り返し構造は区切り区画（文字列“，”）を持っており、挿入区画Ｂｌｏｃｋ［１］の繰り返し構造は区切り区画を持っていない。
【００６０】
そして、区画情報には、対応するテキストの表示と、挿入区画、要素区画、および区切り区画の各々の開始位置および終了位置とを示す情報が含まれている。
【００６１】
作成しようとする１つのテンプレートに対して複数の事例のテキストが入力された場合、各テキストに対して区画情報が入力される。その場合、全ての事例のテキストについて、区画以外の部分文字列が互いに一致し、かつ区画の配置および名称が互いに重なるように区画を定義する。
【００６２】
なお、図１０において、挿入区画に付与されたＢｌｏｃｋ［０］、Ｂｌｏｃｋ［１］や、要素区画に付与されたＢｌｏｃｋ［０］［０］、Ｂｌｏｃｋ［０］［１］、Ｂｌｏｃｋ［０］［２］は区画名の例である。本実施形態では、この区画名の他にもテキスト、区画情報、データモデル、生成規則およびテンプレートの各々に名称を付与する。
【００６３】
図１１は、第１の実施形態において用いる事例集合の構成と、各情報に付与する名称の例と、その表記法を記載した図である。図１１の上段には、複数の事例を含む事例集合の構成と、その事例集合に含まれる各情報名称の例が示されている。下段には、その名称の基となっている表記法の一覧が示されている。
【００６４】
図１１の例では、事例集合がＣａｓｅと称している。その事例集合に含まれる複数の事例をＣａｓｅ［ｋ］としている。ｋは事例番号であり、“０”から始まるものとする。ｋ＋１番目の事例がＣａｓｅ［ｋ］という名称となる。
【００６５】
区画情報はＢｌｏｃｋと称されている。その中で挿入区画はＢｌｏｃｋ［ｊ］とされている。ｊは挿入区画番号であり、これも“０”から始まるものとする。事例Ｃａｓｅ［ｋ］の中のｊ＋１番目の挿入区画はＣａｓｅ［ｋ］．Ｂｌｏｃｋ［ｊ］となる。
【００６６】
挿入区画Ｂｌｏｃｋ［ｊ］内の要素区画はＢｌｏｃｋ［ｊ］［ｉ］とされている。ｉは挿入区画内の要素区画番号であり、これも“０”から始まるものとする。
【００６７】
区切り文字列はＢｒｅａｋｅｒと称されている。そして、ｊ番の区画とｊ＋１番の区画の間の区切り区画はＢｒｅａｋ［ｊ］である。
【００６８】
データモデルはＰａｒｔと称されており、生成規則はＲｕｌｅと称されている。
【００６９】
図１１において事例の中にテンプレートが含まれているが、これは本テンプレート作成装置が最終的な作成の目的とするテンプレートではなく、作成目的のテンプレートを作成する過程において各事例の中に生成されるテンプレートである。
【００７０】
図１２は、第１の実施形態における各情報の内容例を示す図である。図１２の区画情報を参照すると、挿入区画、要素区画、および区切り区画の各々の開始位置および終了位置を示す情報が含まれている。例えば、挿入区画Ｂｌｏｃｋ［０］の開始位置はテキスト内の第１行の第１４列であり、終了位置は同じく第１行の第１６列である。
【００７１】
次に、データモデル入力部５は、区画情報格納部４に格納されている区画情報の各々の区画に対するデータモデルを利用者の所望に従って入力し、データモデル格納部６に格納する（ステップＡ２３）。例えば、データモデル入力部５は、その区画情報が囲む範囲のテキストを利用者に提示し、その中の挿入区画および／または要素区画に対応するデータモデルを利用者の操作に従って入力すればよい。
【００７２】
データモデルは、テキストにおける区画情報が囲んでいる部分文字列に対応している。このデータモデルに対して生成規則に従った加工処理を行うと、テキストの各区画の部分文字列が生成される関係にある。
【００７３】
図１１において、データモデルはＰａｒｔ［ｊ］とされている。ｊは対応する区画の番号である。データモデルＰａｒｔ［ｊ］が持っている部分的なテキストは、Ｐａｒｔ［ｊ］．Ｔｅｘｔとされている。データモデルＰａｒｔ［ｊ］が持っている区画はＰａｒｔ［ｊ］．Ｂｌｏｃｋ［ｉ］とされている。ここでｉは区画の番号であり、“０”から始まる。
【００７４】
図１２では、区画情報に示された挿入区画Ｂｌｏｃｋ［０］〜Ｂｌｏｃｋ［２］に対応してデータモデルＰａｒｔ［０］〜Ｐａｒｔ［２］が示されている。また、各データモデルＰａｒｔ［０］〜Ｐａｒｔ［２］内には各要素区画の文字列がそのまま示されている。
【００７５】
次に、生成規則入力部７は、区画情報格納部４に格納されている区画情報とデータモデル格納部６に格納されているデータモデルとの関係を示す関数関係式を生成規則として利用者の操作に従って入力し、生成規則格納部８に格納する（ステップＡ２４）。
【００７６】
図１１において、各挿入区画Ｂｌｏｃｋ［ｊ］の生成規則は、生成規則Ｂｌｏｃｋ［ｊ］．Ｒｕｌｅとされている。ｊは対応する区画の番号である。
【００７７】
図１２の例では、生成規則Ｂｌｏｃｋ［０］．Ｒｕｌｅは、データモデルＰａｒｔ［０］に関数ｆｉｒｓｔＵｐｐｅｒ（Ｐａｒｔ［０］）を適用した結果を挿入区画Ｂｌｏｃｋ［０］に挿入することを表現している。また、生成規則Ｂｌｏｃｋ［１］．Ｒｕｌｅは、データモデルＰａｒｔ［１］［０］を要素区画Ｂｌｏｃｋ［１］［０］へ、データモデルＰａｒｔ［１］［１］をそのまま要素区画Ｂｌｏｃｋ［１］［１］へ、データモデルＰａｒｔ［１］［２］をそのまま要素区画Ｂｌｏｃｋ［１］［２］へ挿入することを表現している。
【００７８】
以上のステップＡ２１〜Ａ２４が図２（ｂ）のサブルーチンの処理であり、これを終了すると、テンプレート作成装置は図２（ａ）に示されたメインルーチンのステップＡ１の判定に戻る。
【００７９】
図３は、図２（ｂ）に示したステップＡ２２における詳細な動作を示すフローチャートである。図３を参照すると、区画情報入力部３は、まず、ステップＡ２１で入力された、テンプレート作成の事例となるテキストを利用者に提示する（ステップＡ２２０１）。
【００８０】
次に、区画情報入力部３は、提示したテキストに挿入区画を定義すべき文字列があるか否かを利用者に確認することで判定する（ステップＡ２２０２）。例えば、テンプレートを用いて生成するテキストのサンプルを複数入力しておき、それら複数のテキストに共通の部分を不変部分として挿入区画に含めず、他の部分を可変部分として挿入区画とすればよい。なお、ここでは一例として利用者に確認することで挿入区画とする部分の有無を判断することとしたが、本発明はそれに限定されず、例えば、上述の判断に従ってテンプレート作成装置が自動的に判断することとしてもよい。
【００８１】
挿入区画として定義すべき文字列が未だあれば、区画情報入力部３は、利用者の所望に従って挿入区画として定義すべき文字列の範囲を入力する（ステップＡ２２０３）。例えば図１２の挿入区画Ｂｌｏｃｋ［０］であれば、文字列“ＸＸＸ”を囲む範囲（第１行第１４列〜第１６列）の情報が入力される。
【００８２】
次に、区画情報入力部３は、ステップＡ２２０３で入力された範囲の区画名を利用者の所望に従って入力する（ステップＡ２２０４）。例えば、図１２における最初の挿入区画であれば、区画名として“ｂｌｏｃｋ［０］”が入力される。
【００８３】
次に、区画情報入力部３は、ステップＡ２２０３で入力された挿入区画内に繰り返し構造があるか否かを利用者に確認する（ステップＡ２２０５）。
【００８４】
挿入区画に繰り返し構造が無ければ、区画情報入力部３はステップＡ２２０２の処理に戻る。例えば、図１２における挿入区画Ｂｌｏｃｋ［０］には繰り返し構造がないので、区画情報入力部３はステップＡ２２０２の処理に戻る。
【００８５】
挿入区画に繰り返し構造があれば、区画情報入力部３は、繰り返し構造に区切り区画となる文字列があるか否か利用者に確認することで判定する（ステップＡ２２０６）。区切り区画となる文字列があれば、区画情報入力部３は、区切りの文字列と区切り区画の範囲を利用者の所望に従って入力する（ステップＡ２２０７）。例えば、図１２における区画情報の挿入区画Ｂｌｏｃｋ［２］では、区切りの文字列として“，”が入力される。また、１番目の要素区画Ｂｌｏｃｋ［２］［０］と２番目の要素区画Ｂｌｏｃｋ［２］［１］を区切る区切り区画Ｂｒｅａｋ［２］［１］の範囲は第９行第１８列〜第１９列と入力され、２番目の要素区画ｂｌｏｃｋ［２］［１］と３番目の要素区画Ｂｌｏｃｋ［２］［２］を区切る区切り区画Ｂｒｅａｋ［２］［２］の範囲は第９行第３１列〜第３２列と入力される。
【００８６】
ステップＡ２２０７の処理が終了したら、またはステップＡ２２０６の判定で区切り区画となる文字列ばなければ、区画情報入力部３は、挿入区画内の繰返し構造にある要素区画の範囲を利用者の所望に従って入力し（ステップＡ２２０８）、ステップＡ２２０２の処理に戻る（ステップＡ２２０２）。テキストの中に挿入区画を定義すべき文字列があれば、ステップＡ２２０２〜Ａ２２０８の処理が繰り返される。なお、挿入区画は互いに並列の関係にある必要は無く、挿入区画の中に、さらに小さな挿入区画を定義することも可能である。
【００８７】
例えば、図１２における挿入区画Ｂｌｏｃｋ［２］であれば、繰返し構造内に３つの要素区画Ｂｌｏｃｋ［２］［０］〜Ｂｌｏｃｋ［２］［２］の各々の範囲が第９行第７列〜第１７列、第９行第２０列〜第３０列、第９行第３３列〜第４３列と入力される。
【００８８】
ステップＡ２２０２の判定において、挿入区画として定義すべき文字列がなければ、区画情報入力部３は一連の処理を終了する。例えば、図１２において挿入区画Ｂｌｏｃｋ［０］〜Ｂｌｏｃｋ［２］までの全ての区画情報の入力が終われば、区画を定義する文字列が無いこととなる。
【００８９】
図４は、図２（ｂ）に示したステップＡ２３における詳細な動作を示すフローチャートである。図４を参照すると、データモデル入力部５は、ステップＡ２３０１とステップＡ２３０２の間にある処理を反復し、区画情報の各挿入区画についてデータモデルを入力する。例えば、図１２の区画情報において、挿入区画Ｂｌｏｃｋ［０］、Ｂｌｏｃｋ［１］、Ｂｌｏｃｋ［２］の各々についてステップＡ２３０１〜Ａ２３０２の間の処理を行う。
【００９０】
その際、データモデル入力部５は、まず、区画情報の中から１つの挿入区画を選択し（ステップＡ２３０１）、その挿入区画に要素区画があるか否か判定する（ステップＡ２３０３）。
【００９１】
要素区画が無ければ、データモデル入力部５は、挿入区画内にさらに小さな挿入区画を定義するか否か利用者に確認することで判定する（ステップＡ２３０４）。小さな挿入区画を定義すべき文字列があれば、データモデル入力部５は、小さな挿入区画を定義しようとする文字列を引数として図２（ｂ）のサブルーチンを実行する（ステップＡ２３０６）。そして、データモデル入力部５は、ステップＡ２３０６の処理の引数と実行結果として得られた事例をデータモデルとして登録する（ステップＡ２３０７）。この事例には、テキストに相当する引数の文字列と、サブルーチン実行結果の戻り値である区画情報、データモデル、生成規則およびテンプレートとの組合せが含まれ、データモデルの中にさらに事例が存在するという階層構造が構成される。これで１つの挿入区画のデータモデルの入力が終了し、次の挿入区画のステップＡ２３０１からの処理に移行する。
【００９２】
ステップＡ２３０４の判定で、小さな挿入区画を定義すべき文字列がなければ、データモデル入力部５は、利用者の操作に従ってデータモデルを入力する（ステップＡ２３０５）。その際、データモデル入力部５は、挿入区画の構造に従ってデータモデルを作成し、挿入区画の文字列をデータモデルの内容のデフォルト値として利用者に提示し、利用者の所望に従ってデータモデルの内容の文字列をデータモデル格納部６に格納する。また他の例として、データモデル入力部５は、利用者の介在無しでデフォルト値をデータモデルの内容の文字列として自動入力してもよい。これで１つの挿入区画のデータモデルの入力が終了し、次の挿入区画のステップＡ２３０１からの処理に移行する。
【００９３】
また、ステップＡ２３０３の判定で、挿入区画に要素区画があれば、ステップＡ２３０８とステップＡ２３０９の間にある処理を反復し、各要素区画についてデータモデルを入力する。例えば、図１２に示した挿入区画Ｂｌｏｃｋ［２］は繰り返し構造を持つので、要素区画Ｂｌｏｃｋ［２］［０］〜Ｂｌｏｃｋ［２］［２］の３回の反復が行われる。
【００９４】
その際、データモデル入力部５は、まず、要素区画内にさらに小さな挿入区画を定義するか否か利用者に確認することにより判定する（ステップＡ２３１０）。小さな挿入区画を定義すべき文字列があれば、データモデル入力部５は、小さな挿入区画を定義しようとする文字列を引数として図２（ｂ）のサブルーチンを実行する（ステップＡ２３１２）。そして、データモデル入力部５は、ステップＡ２３１２の処理の引数と実行結果として得られた事例をデータモデルとして登録する（ステップＡ２３１３）。この事例には、テキストに相当する引数の文字列と、サブルーチン実行結果の戻り値である区画情報、データモデル、生成規則およびテンプレートとの組合せが含まれるので、データモデルの中にさらに事例が存在するという階層構造が構成される。これで１つの要素区画のデータモデルの入力が終了し、次の要素区画のステップＡ２３０８からの処理に移行する。
【００９５】
ステップＡ２３１０の判定で、小さな挿入区画を定義すべき文字列がなければ、データモデル入力部５は、利用者の所望に従ってデータモデルを入力する（ステップＡ２３１１）。その際、データモデル入力部５は、要素区画の構造に従ってデータモデルの構造を作成し、要素区画の文字列をデータモデルの内容のデフォルト値として利用者に提示し、利用者の所望に従ってデータモデルの内容の文字列をデータモデル格納部６に格納する。また他の例として、データモデル入力部５は、利用者の介在無しでデフォルト値をデータモデルの内容の文字列として自動入力してもよい。
【００９６】
図１３は、図９に示したテキストに対して図２（ｂ）の処理を実行して得られる事例の情報セットを示す図である。図２（ｂ）の処理は再帰構造を有するので、テキストに対して図２の一連の処理を行うと、テキスト全体に関する事例に加えて、そのテキスト内に階層構造で存在する区画に関する事例が得られる。図１３は、元のＴｅｘｔに対して区画のデータモデルＰａｒｔ［１］およびＰａｒｔ［２］の事例が存在するという、２段階の再帰処理が行われた例であるが、一般的には何段階となってもよい。
【００９７】
図５は、図２（ｂ）に示したステップＡ２４における詳細な動作を示すフローチャートである。図５を参照すると、生成規則入力部７は、ステップＡ２４０１とステップＡ２４０６の間にある処理を各挿入区画について反復し、区画情報に含まれている各挿入区画の生成規則を入力する。
【００９８】
その際、生成規則入力部７は、まず、区画情報にある１つの挿入区画を選択する（ステップＡ２４０１）。そして、生成規則入力部７は、選択した挿入区画のデータモデルが加工処理なしでそのままその挿入区画に挿入されるような生成規則をデフォルトとして利用者に提示した後、その挿入区画の生成規則を利用者の所望に従って入力する（ステップＡ２４０２）。また、他の例として、生成規則入力部７は、上述したデフォルトの生成規則を自動入力することとしてもよい。
【００９９】
次に、生成規則入力部７は、ステップＡ２４０３とステップＡ２４０５の間にある処理を各要素区画について反復し、各要素区画の生成規則を入力する。
【０１００】
その際、生成規則入力部７は、まず、挿入区画内の１つの要素区画を選択する（ステップＡ２４０３）。そして、生成規則入力部７は、選択した要素区画のデータモデルが加工処理なしでそのままその要素区画に挿入されるような生成規則をデフォルトとして利用者に提示した後、その要素区画の生成規則を利用者の操作に従って入力する（ステップＡ２４０４）。また、他の例として、生成規則入力部７は、上述したデフォルトの生成規則を自動入力することとしてもよい。
【０１０１】
生成規則入力部７は、要素区画および挿入区間の数だけ処理を反復し、未選択の挿入区間がなくなると一連の処理を終了する。
【０１０２】
図２（ｂ）のサブルーチンの一連の処理のより図１３の最右列に示したような生成規則が得られる。
【０１０３】
図６は、図２（ｂ）に示したステップＡ２５における動作のメインルーチンを示すフローチャートである。図７、８は、図２（ｂ）に示したステップＡ２５における動作のサブルーチンを示すフローチャートである。サブルーチンは便宜上図７、８に分割して示されているが、これらは一連の処理である。
【０１０４】
図６のメインルーチンを参照すると、テンプレート生成部９は、テンプレートの作成に用いられるテキストと、そのテキストに関する区画情報および生成規則とを引数として、図７のサブルーチンを呼び出す（ステップＡ２５０）。１つのテンプレートの生成に用いるテキストは１つであってもよく、また複数であってもよい。複数のテキストが用いられる場合には、それらに対応する複数の事例が引数となる。サブルーチンの引数となるテキスト、区画情報、および生成規則の各々はテキスト格納部２、区画情報格納部４、および生成規則格納部８から取込むことができる。
【０１０５】
図７、８のサブルーチンを参照すると、テンプレート生成部９は、まず、区画情報が挿入区画を有するか否か判定する（ステップＡ２５０１）。区画情報が挿入区画を有しなければ、テンプレート生成部９は、テキストをそのままテンプレートとして出力し（ステップＡ２５０２）、サブルーチンの処理を終了する。
【０１０６】
区画情報が挿入区画を有していれば、テンプレート生成部９は、区画情報に含まれている各挿入区画に対して、ステップＡ２５０３とステップＡ２５０４の間の処理を反復し、全ての挿入区画に対する処理が終了すると、その結果として得られたテキストをテンプレートとして出力し（ステップＡ２５１８）、サブルーチンの処理を終了する。
【０１０７】
ステップＡ２５０３からステップＡ２５０４までの間の処理として、テンプレート生成部９は、まず、区画情報の中から１つの挿入区画を選択し（ステップＡ２５０３）、１つのテンプレートの生成に複数のテキストが用いられているか、または、選択した挿入区画に要素区画があるか否か判定する（ステップＡ２５０５）。
【０１０８】
１つのテキストしか用いられておらず、かつ、挿入区画に要素区画が無ければ、テンプレート生成部９は、挿入区画内のテキストと、そのテキストに関する区画情報および生成規則とを引数として図６（ｂ）のサブルーチンを再帰的に実行し、戻り値であるテンプレートをデータモデルとして扱い、そのデータモデルに生成規則を適用して文字列を獲得する（ステップＡ２５０６）。次に、テンプレート生成部９は、選択中の挿入区画の内容をステップＡ２５０６で得られた文字列で置換し（ステップＡ２５０７）、その挿入区画に対する処理を終えてさらに反復が必要であればステップＡ２５０３に戻る（ステップＡ２５０４）。
【０１０９】
図１４は、第１の実施形態のテンプレート生成部９による処理の概略を説明するための図である。図１４のＰ３からＰ４への処理において、挿入区画Ｂｌｏｃｋ［１］に着目すると、その中にテキストＰａｒｔ［１］［ｋ］．Ｔｅｘｔがある。ここでｋ＝０，１，２である。テキストＰａｒｔ［１］［ｋ］．Ｔｅｘｔと、区画情報Ｐａｒｔ［１］［ｋ］．Ｂｌｏｃｋ［０］と、データモデルＰａｒｔ［１］［ｋ］．Ｐａｒｔ［０］と、生成規則Ｂｌｏｃｋ［１］［ｋ］．Ｒｕｌｅ［０］を引数として再帰的にサブルーチンを実行することにより、テンプレートＰａｒｔ［１］［ｋ］．Ｔｅｍｐｌａｔｅ（ｋ＝０，１，２）が得られ、それが挿入区画Ｂｌｏｃｋ［１］の内容となる。
【０１１０】
ステップＡ２５０５の判定において、テキストが複数であるか、あるいは要素区画があれば、テンプレート生成部９は、繰り返し構造を表現するループ構文を挿入区画の前後に挿入する（ステップＡ２５０８）。例えば、図１４におけるＰ２からＰ３への処理において、挿入区画Ｂｌｏｃｋ［１］の前後にループ構文が挿入されている。
【０１１１】
次に、テンプレート生成部９は、作業変数リストを用意し、その内容を空に初期化する（ステップＡ２５０９）。作業変数リストとは、リスト構造を有する変数であり、リストを構成する要素をテンプレートに含めて保持することができる。１つの挿入区画に挿入すべき文字列を生成するために、複数のテキストあるいは複数の要素区画から得られた文字列が作業変数リストにリストアップされる。１つの作業変数リストにリストアップされる文字列は、例えば１つの挿入区画に関する文字列である。
【０１１２】
次に、テンプレート生成部９は、ステップＡ２５１０とステップＡ２５１１の間にある処理を各要素区画に対して反復する。その際、テンプレート生成部９は、複数のテキストの中から１つを選択し、ステップＡ２５１２とステップＡ２５１３の間にある処理を各要素区画に対して反復する。なお、テキストが１つであれば、テンプレート生成部９は、ステップＡ２５１２とステップＡ２５１３の間の処理を１回だけ行えばよい。
【０１１３】
テンプレート生成部９は、まず、挿入区画の中から１つの区画を選択し（ステップＡ２５１２）、区画内のテキストと、そのテキストに関する区画情報および生成規則を引数として図６（ｂ）のサブルーチンを再帰的に呼び出して実行し、戻り値のテンプレートをデータモデルとして扱い、そのデータモデルに生成規則を適用して得た文字列を作業変数リストに追加する（ステップＡ２５１４）。なお、ステップＡ２５０５の判定において、要素区画が有るかテキストが複数かの少なくとも一方に該当すれば、ステップＡ２５１２〜Ａ２５１３の処理が行われることとなる。挿入区画に要素区画がある場合には、ステップＡ２５１２で選択される区画は各要素区画である。テキストが複数であるが、挿入区画に要素区画が無い場合には、ステップＡ２５１２で選択される区画は、各テキストにおける挿入区画そのものである。
【０１１４】
図１４のＰ３は、区画情報Ｐａｒｔ［１］の要素区画についてステップＡ２５１２の処理を行った結果を示している。挿入区画Ｂｌｏｃｋ［１］に対応するデータモデルＰａｒｔ［１］の有するテキストＰａｒｔ［１］．ｔｅｘｔ［０］、Ｐａｒｔ［１］．ｔｅｘｔ［１］、およびＰａｒｔ［１］．ｔｅｘｔ［２］に対して、図６（ｂ）のサブルーチンの処理を行うと、テンプレートＰａｒｔ［１］［ｋ］．Ｔｅｍｐｌａｔｅ（ｋ＝０，１，２）が得られる。
【０１１５】
各要素区画分の反復を終え、未選択の要素区画が無くなると、テンプレート生成部９は、次に、作業変数リスト内の各テンプレートの構造が共通であるか否かを判定する（ステップＡ２５１５）。
【０１１６】
作業変数リスト内のテンプレートの構造が全て共通であれば、テンプレート生成部９は、選択中の挿入区画の内容を、作業変数リスト内の各テンプレートを代表する文字列で置換し（ステップＡ２５１６）、その挿入区画に対する処理を終えてさらに反復が必要であればステップＡ２５０３に戻る（ステップＡ２５０４）。各テンプレートを代表する文字列とは、テンプレート間で異なる部分を変数とすることにより、各テンプレートの表現を共通化した文字列を指す。例えば、テンプレート間で、区画の番号のみが異なれば、その部分を変数とすることで、それらテンプレートを共通化した表現にすることができる。
【０１１７】
図１４のＰ４は、作業変数リスト内の３つのテンプレートＰａｒｔ［１］［ｋ］．Ｔｅｍｐｌａｔｅ（ｋ＝０，１，２）を代表する文字列を、挿入区画Ｂｌｏｃｋ［１］に埋め込んだ状態を示している。変数＄｛ｉｔｅｍ，Ｂｌｏｃｋ［１］｝を用いて、テンプレートを共通化している。同様に、図１４のＰ５からＰ６への処理は、Ｐａｒｔ［２］に関する処理結果の作業変数リストから、３つのテンプレートを代表する文字列を挿入区画Ｂｌｏｃｋ［２］に埋め込むものである。
【０１１８】
ステップＡ２５１５の判定において、作業変数リスト内のテンプレートの構造が共通でなければ、テンプレート生成部９は、選択中の挿入区画の内容を、作業変数リスト内の各テンプレートをｉｆ−ｔｈｅｎ−ｅｌｓｅ構文で結合した文字列で置換し（ステップＡ２５１７）、その挿入区画に対する処理を終えてさらに反復が必要であればステップＡ２５０３に戻る（ステップＡ２５０４）。
【０１１９】
図１５は、図６（ｂ）のステップＡ２５１７の処理の具体例を示す図である。図１５を参照すると、挿入区画Ｂｌｏｃｋ［１］は４つの要素区画Ｂｌｏｃｋ［１］［０］〜Ｂｌｏｃｋ［１］［３］を有している。そして、要素区画Ｂｌｏｃｋ［１］［０］〜Ｂｌｏｃｋ［１］［３］の各々に対応するテンプレートＰａｒｔ［１］［０］．Ｐａｒｔ［０］．Ｔｅｍｐｌａｔｅ〜Ｐａｒｔ［１］［３］．Ｐａｒｔ［０］．Ｔｅｍｐｌａｔｅの構造が互いに異なる。そのため、これらのテンプレートはｉｆ−ｅｌｓｅ構文で結合されている。
【０１２０】
各挿入区画の反復を終え、未選択の挿入区画が無くなると、テンプレート生成部９は、次に、得られたテキストをテンプレートとして出力し、サブルーチンを終了する（ステップＡ２５１８）。図１４のＰ６は、出力されたテンプレートの例を示している。
【０１２１】
以上説明した第１の実施形態のテンプレート作成装置によれば、テキスト入力部１が事例のテキストを入力し、区画情報入力部３がそのテキストの区画情報を入力し、データモデル入力部５が各区画のデータモデルを入力し、生成規則入力部７がデータモデルから各区画の内容の文字列を生成する生成規則を入力し、テンプレート生成部９が、テンプレートにおいて置換可能な部分である各区画の内容の文字列を生成規則に従って生成しつつ、要素区画間およびテキスト間の重複を取り除くので、テンプレートの仕様が、事例としたテキストとそれに関する区画情報、データモデルおよび生成規則で容易に定まる。
【０１２２】
内容の把握が容易なテキスト、区画情報、データモデルおよび生成規則を入力することでテンプレートの仕様を定義することができるので、複雑なテンプレートの仕様を直感的かつ容易に定義することができる。
【０１２３】
また、事例のテキストに対して区画情報、データモデルおよび生成規則を照らし合わせることでテンプレートの仕様のレビューを行なうことができるので、複雑なテンプレートを直接チェックする必要がなく、テンプレートの仕様のレビューが格段に容易となる。
【０１２４】
また、直接にテンプレートを編集する従来のデバッグ方法では、デバッグ中のテンプレートをテンプレートエンジンにかけてテキスト生成結果を得た上で、生成時のエラーや生成結果のコンパイルエラーを調べて除去する必要があった。しかし、本実施形態のテンプレート作成装置によれば、テンプレートを利用者が直接に編集することがなく、与えられた仕様に従ってテンプレート作成装置が機械的にテンプレートを作成するので、テンプレートに文法のエラーは発生しえず、また、テンプレートを用いてテキスト生成を行なうことなく、事例を編集するだけでデバッグを行なうことができ、コンパイルエラーに対する対処が容易であり、デバッグを効率的に行うことができる。
【０１２５】
また、テンプレートの仕様が事例で与えられるため、要求された仕様と現実に作成されたテンプレートとの乖離が原理的に生じないので、仕様自体が妥当であるかどうかのみを検証すれば、仕様とテンプレートとの一致を検証する必要が無く、テンプレートのテストの効率が向上する。
【０１２６】
なお、本実施形態では、テンプレート生成部９は、テンプレートを生成するとき、複数テキスト間および挿入区画内の要素区画間の重複を取り除くが、テンプレート内の挿入区画間の重複に対して何らの処理を行わないこととしたが、本発明はそれに限定されるものではない。テンプレート生成部９は、テンプレート内の挿入区画間に重複があれば、それを共通化したテンプレートを生成することとしてもよい。例えば、テンプレート生成部９は、区画番号に対応する部分以外に違いの無い、共通した挿入区画がテンプレート内に有れば、それらを代表する新たな挿入区画でそれらを置き換えればよい。
【０１２７】
本発明の第２の実施形態について図面を参照して説明する。
【０１２８】
図１６は、本発明の第２の実施形態によるテンプレート作成装置の構成を示すブロック図である。図１６を参照すると、第２の実施形態のテンプレート作成装置は、テキスト入力部１、テキスト格納部２、区画情報入力部３、区画情報格納部４、データモデル入力部５、データモデル格納部６、生成規則入力部７、生成規則格納部８、テンプレート生成部９、および事例汎化部１０を有している。
【０１２９】
テキスト入力部１、テキスト格納部２、区画情報入力部３、区画情報格納部４、データモデル入力部５、データモデル格納部６、生成規則入力部７、生成規則格納部８、およびテンプレート生成部９は図１に示された第１の実施形態のものと同様のものである。
【０１３０】
事例汎化部１０は、データモデル格納部６に格納されたデータモデルおよび生成規則格納部８に格納された生成規則の冗長性を削減するとともに、テンプレート生成部９の生成したテンプレートの冗長性を削減する。その際、事例汎化手段１０は、挿入区画間でデータモデルが共通のものが有ればそれを検出し、共通する挿入区画のデータモデルの文字列を代表する文字列を、それら挿入区画に共通のデータモデルとする。また、事例汎化部１０は、要素区画間でデータモデルが共通のものが有ればそれを検出し、共通する要素区画のデータモデルの文字列を代表する文字列を、それら要素区画に共通のデータモデルとする。また、事例汎化部１０は、テンプレート生成部９により生成されたテンプレートにif-then-else構文の部分があり、if-then-else構文で結合された文字列に互いに共通する複数の文字列があれば、その複数の文字列をif-then-else構文から取り除き、その代わりに複数の文字列を代表する文字列をif-then-else構文に含める。
【０１３１】
図１７は、第２の実施形態のテンプレート作成装置の動作を示すフローチャートである。図１７にはメインルーチンのみが示されており、サブルーチンは図２（ｂ）と同じものである。また、図１７のメインルーチンの中で、図２（ａ）のメインルーチンと同じ符号を付与したものは同じ処理である。
【０１３２】
図１７を参照すると、テンプレート作成装置は、まず、ステップＡ１〜Ａ２を繰り返すことにより所望数の事例を入力する。
【０１３３】
次に、事例汎化部１０が生成規則を汎化する（ステップＢ１）。次に、テンプレート生成部９が、上述した第１の実施形態と同様に事例に基づいてテンプレートを作成する（ステップＡ２５）。最後に、事例汎化部１０が、テンプレート生成部９によって生成されたテンプレートを汎化する（ステップＢ２）。
【０１３４】
図１８は、図１７に示したステップＢ１における動作のメインルーチンを示すフローチャートである。図１９、２０は、図１７に示したステップＢ１における動作のサブルーチンを示すフローチャートである。サブルーチンは便宜上図７、８に分割して示されているが、これらは一連の処理である。
【０１３５】
図１８のメインルーチンを参照すると、事例汎化部１０は、トップレベルの事例集合を引数として図１９、２０のサブルーチンを実行する（ステップＢ１０）。トップレベルの事例集合とは、サンプルとしてテキスト入力部１により入力されたテキスト内の階層構造の１段目に関する事例の集合である。事例集合に含まれる事例の数は１つであってもよく、複数であってもよい。
【０１３６】
図１９、２０のサブルーチンを参照すると、事例汎化部１０は、まず、引数として与えられた事例集合全体にわたってデータモデルの重複を検出する（ステップＢ１０１）。事例集合に含まれるデータモデルの中に共通するものがあれば、これにより検出される。
【０１３７】
次に、事例汎化部１０は、ステップＢ１０１で検出した重複するデータモデル同士をマージし、新たなデータモデルを作成する（ステップＢ１０２）。次に、事例汎化部１０は、ステップＢ１０２で作成された新たなデータモデルの名称を生成規則に反映させる。
【０１３８】
図２２は、図１９のステップＢ１０２〜Ｂ１０３の処理の具体例を示す図である。図２２を参照すると、２つのデータモデルＰａｒｔ［１］とＰａｒｔ［２］は重複している。テンプレートの構成を簡単化するために、事例汎化部１０は、それらをマージして新たなデータモデルＰａｒｔＮｅｗを作成し、生成規則Ｐａｒｔ［ｊ］［ｋ］．Ｂｌｏｃｋ［０］．Ｒｕｌｅ（ｊ＝０，１，ｋ＝０，１，２）に新たなデータモデルの名称を反映させている。
【０１３９】
次に、事例汎化部１０は、図２０のステップＢ１０４〜ステップＢ１０５の処理を各挿入区画について反復する。
【０１４０】
その際、事例汎化部１０は、まず、区画情報の中から１つの挿入区画を選択する（ステップＢ１０４）。次に、事例汎化部１０は、その挿入区画に要素区画があるか否か判定する（ステップＢ１０６）。要素区画があれば、事例汎化部１０は、挿入区画内の各要素区画の構造が共通か否か判定する（ステップＢ１０７）。
【０１４１】
全ての要素区画の構造が共通であれば、事例汎化部１０は、全ての要素区画を１つのグループにグループ化する（ステップＢ１０８）。構造の異なる要素区画があれば、事例汎化部１０は、共通の構造を有する要素区画同士を１つのグループにグループ化する（ステップＢ１０９）。これにより要素区画は複数のグループにグループ化されることもありうる。
【０１４２】
次に、事例汎化部１０は、ステップＢ１１０とステップＢ１１１の間にある処理を各グループについて反復する。その際、事例汎化部１０は、まず、１つのグループを選択する（ステップＢ１１０）。次に、事例汎化部１０は、そのグループ内の各要素区画に対応したデータモデルを集め、処理対象の事例集合とする（ステップＢ１１２）。次に、事例汎化部１０は、ステップＢ１１２で作成された事例集合を引数として、図１９、２０の本サブルーチンを再帰的に呼び出して実行する（ステップＢ１１３）。これで１つのグループに対する処理が終了する。
【０１４３】
事例汎化部１０は、未選択のグループがあれば次のグループにステップＢ１１０〜Ｂ１１１の間の処理を行い、未選択のグループが無くなると、その挿入区画の各グループについての反復を終える（ステップＢ１１１）。これで１つの挿入区画に対する処理が終了する。
【０１４４】
事例汎化部１０は、未選択の挿入区画があれば次の挿入区画にステップＢ１０４〜Ｂ１０５の処理を行い、未選択の挿入区画が無くなると、区画情報の各挿入区画についての反復を終えて、サブルーチンの処理を終了する（ステップＢ１０５）。
【０１４５】
図２１は、図１７に示したステップＢ２における詳細な動作を示すフローチャートである。なお、ステップＢ２の処理は、図１７に示したように、ステップＡ２５の処理によってテンプレートが生成された後に行われる。
【０１４６】
図２１を参照すると、事例汎化部１０は、作成されたテンプレートがｉｆ−ｅｌｓｅ構文で結合された節（ｉｆ−ｅｌｓｅ節）を持っているか否か判定する（ステップＢ２０１）。テンプレートがｉｆ−ｅｌｓｅ節を持っていなければ、事例汎化部１０はそのまま処理を終了する。
【０１４７】
テンンプレートがｉｆ−ｅｌｓｅ節を持っていれば、事例汎化部１０は、そのｉｆ−ｅｌｓｅ節に対してステップＢ２０２〜ステップＢ２０３の処理を反復する。その際、事例汎化部１０は、各ｉｆ−ｅｌｓｅ節において、内容が共通する区画をマージする（ステップＢ２０４）。事例汎化部１０は、全てのｉｆ−ｅｌｓｅ節に対して反復処理を終え、未処理のｉｆ−ｅｌｓｅ節が無くなると、処理を終了する。図２３は、図２１の処理の具体例を示す図である。図２３参照すると、テンプレートＴｅｍｐｌａｔｅには、ｉｆ−ｅｌｓｅ節があり、さらにその中に重複する区画があるので、事例汎化部１０は、その中の重複する区画をマージすることにより、ｉｆ−ｅｌｓｅ節を汎化している。
【０１４８】
上述した第１の実施形態において、例えばステップＡ２３０５、ステップＡ２３１１、ステップＡ２４０２、ステップＡ２４０４において利用者を介在さず、テンプレート作成装置が自動的にデフォルト値を入力することとすれば、利用者はテンプレートをより容易に作成することができる。しかし、その場合、複数の事例間でデータモデルの内容に重複があれば、それに伴って生成規則に冗長性が生じうる。また、第１の実施形態では、テンプレート生成部９によるステップＡ２５１５の処理において、ｉｆ−ｅｌｓｅ構文を含む区画の内容に重複のあるテンプレートが生成されうる。
【０１４９】
これに対して、第２の実施形態のテンプレート作成装置によれば、事例汎化部１０が事例間、挿入区画間、および要素区画間のデータモデルの重複があれば、そのデータモデルをマージすることによりデータモデルおよび生成規則を汎化し、さらに、テンプレート内のｉｆ−ｅｌｓｅ構文内の重複を除去するので、データモデル、生成規則、およびテンプレートの冗長性を軽減することができる。
【０１５０】
なお、図１９、２０およびその説明では、説明の簡単化のため、要素区画間の共通化に着目しているが、本発明はそれに限定されるものではない。第１の実施形態と同様に、複数のテキストが入力されれば、複数テキスト間の挿入区画の共通化も同様に行うことができる。
【０１５１】
本発明の第３の実施形態について図面を参照して説明する。図２４は、本発明の第３の実施形態によるテンプレート作成装置の構成を示すブロック部である。図２４を参照すると、第３の実施形態のテンプレート作成装置は、テキスト入力部１、テキスト格納部２、区画情報入力部３、区画情報格納部４、データモデル入力部５、データモデル格納部６、生成規則入力部７、生成規則格納部８、テンプレート生成部９、テキスト修正部１１、区画情報修正部１２、データモデル修正部１３、生成規則修正部１４、および整合性検証部１５を有している。
【０１５２】
テキスト入力部１、テキスト格納部２、区画情報入力部３、区画情報格納部４、データモデル入力部５、データモデル格納部６、生成規則入力部７、生成規則格納部８、およびテンプレート生成部９は図１に示された第１の実施形態のものと同じである。
【０１５３】
テキスト修正部１１は、テキスト格納部２に格納されているテキストを利用者の所望に従って修正する。そして、テキスト修正部１１は、修正内容を区画情報修正部１２およびデータモデル修正部１３に通知して区画情報およびデータモデルの修正を指示する。
【０１５４】
区画情報修正部１２は、テキスト修正部１１からテキストに関する修正内容を通知されると、それを反映させるように区画情報を修正する。また、区画情報修正部１２は利用者の所望に従って区画情報を修正する。そして、区画情報修正部１２は、区画情報の修正内容をデータモデル修正部１３および生成規則修正部１４に通知してデータモデルおよび生成規則の修正を指示する。
【０１５５】
データモデル修正部１３は、テキスト修正部１１からテキストの修正内容を通知され、データモデルの修正を指示されると、その指示に従ってテキストの修正内容を反映するようにデータモデルの変更内容を入力する。また、データモデル修正部１３は、区画情報修正部１２から区画情報の修正内容を通知され、データモデルの修正を指示されると、その指示に従って区画情報の修正内容を反映するようにデータモデルの変更内容を入力する。さらに、データモデル修正部１３は、利用者の所望に従ってデータモデルの変更内容を入力する。データモデルの変更内容は、一旦、例えばデータモデル格納部６に蓄積される。
【０１５６】
そして、データモデル修正部１３は、データモデルの変更内容を整合性検証部１５に通知し、その変更内容が生成規則およびテキストと整合性の取れたものであるか否かの判定を指示する。整合性検証部１５から整合性が取れている旨の判定結果が戻れば、データモデル修正部１３は、その変更内容に従ってデータモデル格納部６のデータモデルを変更する。整合性が取れていない旨の判定結果が戻れば、データモデル修正部１３は、データモデル格納部６のデータモデルの変更をキャンセルし、データモデルを元のままに維持する。
【０１５７】
生成規則修正部１４は、区画情報修正部１２から区画情報の修正内容を通知され、生成規則の修正を指示されると、その指示に従って区画情報の修正内容を反映するように生成規則の変更内容を入力する。さらに、生成規則修正部１４は、利用者の所望に従って生成規則の変更内容を入力する。生成規則の変更内容は、一旦、例えば生成規則格納部８に蓄積される。
【０１５８】
そして、生成規則修正部１４は、生成規則の変更内容を整合性検証部１５に通知し、その変更内容がデータモデルおよびテキストと整合性が取れたものであるか否かの判定を指示する。整合性検証部１５から整合性が取れている旨の判定結果が戻れば、生成規則修正部１４は、その変更内容に従って生成規則格納部８の生成規則を変更する。整合性が取れていない旨の判定結果が戻れば、生成規則修正部１４は、生成規則格納部８の生成規則の変更をキャンセルする。
【０１５９】
整合性検証部１５は、データモデル修正部１３または生成規則修正部１４から通知された変更内容を適用した場合、テキスト、データモデルおよび生成規則に相互に整合性が取れているか否か判定し、その判定結果を戻す。整合性が取れているか否かは、テキスト、データモデルおよび生成規則が互いに矛盾の無い状態となるか否かで判定される。
【０１６０】
図２５、２６は、第３の実施形態に特有の動作を示すフローチャートである。図２５を参照すると、テンプレート作成装置は、まず、修正すべき対象がテキストか否か判定する（ステップＣ１０１）。
【０１６１】
修正対象がテキストであれば、テキスト修正部１１は、そのテキストにおける全階層の区画情報の中から、修正部分の文字列を囲む区画を選択する（ステップＣ１０２）。次に、テキスト修正部１１は、選択した区画が区切り区画か否か判定する（ステップＣ１０３）。
【０１６２】
選択した区画が区切り区画であれば、テキスト修正部１１は、その区切り区画の文字列を修正する（ステップＣ１０４）。選択した区画が区切り区画でなければ、テキスト修正部１１は、その選択した区画の文字列を変更する（ステップＣ１０５）。
【０１６３】
ステップＣ１０４またはステップＣ１０５の処理の後、テキスト修正部１１からの指示に従って、区画情報修正部１２は、文字列の変更によりずれた区画の範囲を修正（シフト）する（ステップＣ１０６）。次に、データモデル修正部１３は、テキスト修正部１１からの指示に従って、変更された区画に対応するデータモデルの文字列を更新し（ステップＣ１０７）、処理を終了する。
【０１６４】
ステップＣ１０１の判定において修正対象がテキストでなければ、次に、テンプレート作成装置は、修正対象が区画情報か否か判定する（ステップＣ１０８）。
【０１６５】
修正対象が区画情報であれば、区画情報修正部１２は、修正は区画の範囲を変更するものか否か判定する（ステップＣ１０９）。修正が区画の範囲を変更するものであれば、区画情報修正部１２は、それに従って区画の範囲を変更する（ステップＣ１１０）。そして、データモデル修正部１３は、区画情報修正部１２からの指示に従って、変更された区画に対応するデータモデルの文字列を更新する（ステップＣ１１１）。
【０１６６】
ステップＣ１０９の判定において、修正が区画の範囲を変更するものでなければ、区画情報修正部１２は、修正が区画の追加または削除を行なうものであるか否か判定する（ステップＣ１１２）。修正が区画の追加または削除を行なうものであれば、区画情報修正部１２が区画の追加または削除を行なった後、生成規則修正部１４は、その区画に対応する生成規則の追加または削除を行ない（ステップＣ１１３）、処理を終了する。ステップＣ１１２の判定において、修正が区画を追加または削除するものでなければ、生成規則に変更をせず、そのまま処理を終了する。
【０１６７】
ステップＣ１０８の判定において修正対象が区画情報でなければ、テンプレート作成装置は、図２６に示すように、修正対象がデータモデルか否か判定する（ステップＣ１１４）。修正対象がデータモデルであれば、データモデル修正部１３は、データモデルの変更内容を入力する（ステップＣ１１５）。そして、整合性検証部１５は、その変更内容がデータモデル、生成規則およびテキストの整合性を保つものであるか否かを判定する（ステップＣ１１６）。整合性が保たれる変更内容であれば、データモデル修正部１３は、その変更内容でデータモデルを変更する（ステップＣ１１７）。修正内容が整合性の保たれないものであれば、データモデル修正部１３は、その変更をキャンセルし、処理を終了する。
【０１６８】
ステップＣ１１４の判定で修正対象がデータモデルでなければ、テンプレート作成装置は、修正対象が生成規則であるか否か判定する（ステップＣ１１８）。修正対象が生成規則であれば、生成規則修正部１４は、修正が生成規則の追加または削除を行なうものであるか否か判定する（ステップＣ１１９）。修正が生成規則の追加または削除を行なうものであれば、生成規則修正部１４は、生成規則を追加または削除する（ステップＣ１２０）。
【０１６９】
ステップＣ１１９の判定において修正が生成規則を追加または削除するものでなければ、生成規則修正部１４は、その修正が生成規則の内容を変更するものか否か判定する（ステップＣ１２１）。修正が生成規則の内容を変更するものであれば、生成規則修正部１４は、それに従って生成規則の変更内容を入力する（ステップＣ１２２）。そして、整合性検証部１５は、その変更内容がデータモデル、生成規則およびテキストの相互の整合性を保つものであるか否か判定する（ステップＣ１２３）。整合性が保たれる変更内容であれば、生成規則修正部１４は、その変更内容で生成規則を変更する（ステップＣ１２４）。変更内容が整合性の保たれないものであれば、生成規則修正部１４は、その変更をキャンセルし、処理を終了する。
【０１７０】
以上説明した第３の実施形態のテンプレート作成装置によれば、テキスト修正部１１、区画情報修正部１２、データモデル修正部１３および生成規則修正部１４から事例の内容の変更が可能であり、データモデル修正部１３または生成規則修正部１４が内容の変更を入力すると、整合性検証部１５がその変更内容においてデータモデル、区画情報およびテキストの整合性が取れているか否か判定し、整合性が取れているときだけ、データモデル修正部１３または生成規則修正部１４が変更を行なうので、事例の内容を変更しても各情報が相互に矛盾することが無く、適切に仕様の修正を行なうことができる。
【産業上の利用可能性】
【０１７１】
本発明は、例えば、「表記法」のみに限定した「統一モデリング言語」であるＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）のソフトウェアモデルからソースコードを生成する際に、テンプレートエンジンにて用いられるテンプレートを作成するために利用できる。また、本発明は、Ｗｅｂページを生成するのに用いられるテンプレートの作成に利用できる。
【図面の簡単な説明】
【０１７２】
【図１】本発明の第１の実施形態によるテンプレート作成装置の構成を示すブロック図である。
【図２】第１の実施形態のテンプレート作成装置の動作を示すフローチャートである。
【図３】図２（ｂ）に示したステップＡ２２における詳細な動作を示すフローチャートである。
【図４】図２（ｂ）に示したステップＡ２３における詳細な動作を示すフローチャートである。
【図５】図２（ｂ）に示したステップＡ２４における詳細な動作を示すフローチャートである。
【図６】図２（ｂ）に示したステップＡ２５における動作のメインルーチンを示すフローチャートである。
【図７】図２（ｂ）に示したステップＡ２５における動作のサブルーチンの一部を示すフローチャートである。
【図８】図２（ｂ）に示したステップＡ２５における動作のサブルーチンの他の一部を示すフローチャートである。
【図９】事例として入力されるテキストの一例を示す図である。
【図１０】事例として入力される区画情報の区切り方の一例を示す図である。
【図１１】第１の実施形態において用いる事例集合の構成と、各情報に付与する名称の例と、その表記法を記載した図である。
【図１２】第１の実施形態における各情報の内容例を示す図である。
【図１３】図９に示したテキストに対して図２（ｂ）の処理を実行して得られる事例の情報セットを示す図である。
【図１４】第１の実施形態のテンプレート生成部９による処理の概略を説明するための図である。
【図１５】図６（ｂ）のステップＡ２５１７の処理の具体例を示す図である。
【図１６】本発明の第２の実施形態によるテンプレート作成装置の構成を示すブロック図である。
【図１７】第２の実施形態のテンプレート作成装置の動作を示すフローチャートである。
【図１８】図１７に示したステップＢ１における動作のメインルーチンを示すフローチャートである。
【図１９】図１７に示したステップＢ１における動作のサブルーチンの一部を示すフローチャートである。
【図２０】図１７に示したステップＢ１における動作のサブルーチンの他の一部を示すフローチャートである。
【図２１】図１７に示したステップＢ２における詳細な動作を示すフローチャートである。
【図２２】図１９のステップＢ１０２〜Ｂ１０３の処理の具体例を示す図である。
【図２３】図２１の処理の具体例を示す図である。
【図２４】本発明の第３の実施形態によるテンプレート作成装置の構成を示すブロック部である。
【図２５】第３の実施形態に特有の動作を示すフローチャートの一部である。
【図２６】第３の実施形態に特有の動作を示すフローチャートの他の一部である。
【符号の説明】
【０１７３】
１    テキスト入力部
２    テキスト格納部
３    区画情報入力部
４    区画情報格納部
５    データモデル入力部
６    データモデル格納部
７    生成規則入力部
８    生成規則格納部
９    テンプレート生成部
１０    事例汎化部
１１    テキスト修正部
１２    区画情報修正部
１３    データモデル修正部
１４    生成規則修正部
１５    整合性検証部
Ａ１、Ａ２、Ａ２１〜２５、Ａ２２０１〜２２０８、Ａ２３０１〜２３１３、Ａ２４０１〜２４０６、Ａ２５０、Ａ２５０１〜２５１８    ステップ
Ｂ１、Ｂ１０、Ｂ１０１〜１０１１３、Ｂ２、Ｂ２０１〜２０４    ステップ
Ｃ１０１〜１２４    ステップ
【図１】
2005234959.tif 000003
【図２】
2005234959.tif 000004
【図３】
2005234959.tif 000005
【図４】
2005234959.tif 000006
【図５】
2005234959.tif 000007
【図６】
2005234959.tif 000008
【図７】
2005234959.tif 000009
【図８】
2005234959.tif 000010
【図９】
2005234959.tif 000011
【図１０】
2005234959.tif 000012
【図１１】
2005234959.tif 000013
【図１２】
2005234959.tif 000014
【図１３】
2005234959.tif 000015
【図１４】
2005234959.tif 000016
【図１５】
2005234959.tif 000017
【図１６】
2005234959.tif 000018
【図１７】
2005234959.tif 000019
【図１８】
2005234959.tif 000020
【図１９】
2005234959.tif 000021
【図２０】
2005234959.tif 000022
【図２１】
2005234959.tif 000023
【図２２】
2005234959.tif 000024
【図２３】
2005234959.tif 000025
【図２４】
2005234959.tif 000026
【図２５】
2005234959.tif 000027
【図２６】
2005234959.tif 000028