(57)【要約】【課題】  テンプレートシステムにおいて、ひとつのテンプレート中にプレゼンテーションデータとプレゼンテーションロジックとを混在させないために、両者を分離することを課題とする。本発明は、プレゼンテーション層Ｐを構成するプレゼンテーションデータＤに対して、変更すべき箇所になんらかの目印をつけ、そして、この変更すべき箇所を、開始部・中間部・終了部に抽象化する。さらに、プレゼンテーションロジックＬでは、前記プレゼンテーションデータＤにおける開始部、中間部、終了部のそれぞれ又は全部を操作対象とすることで、プレゼンテーションデータＤとプレゼンテーションロジックＬの分離を実現する。【選択図】  図１【特許請求の範囲】
【請求項１】
ビジネスロジック層と、プレゼンテーション層と、を備え、
前記プレゼンテーション層が、プレゼンテーションデータとプレゼンテーションロジックとに分離されて記述されているとともに、前記プレゼンテーションデータの変更箇所が、開始部、中間部、終了部に抽象化されたテンプレートシステム。
【請求項２】
前記プレゼンテーションロジックは、前記プレゼンテーションデータにおける開始部、中間部、終了部のそれぞれ又は全部を操作対象としたことを特徴とする請求の範囲第１項記載のテンプレートシステム。
【請求項３】
請求の範囲第１項又は第２項に記載されたテンプレートシステムをプログラム内部に少なくとも有することを特徴とするソフトウエアプログラム。
【請求項４】
請求の範囲第３項に記載されたソフトウエアプログラムを用いてＷｅｂページを生成する方法。
【請求項５】
請求の範囲第３項に記載されたソフトウエアプログラムを用いて情報交換のためのファイル又はデータを生成する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的にＷｅｂページを作成する方法や情報交換のためのファイル又はデータを生成する方法などに好適に利用できるテンプレートシステムに関する。より詳しくは、プレゼンテーション層が、プレゼンテーションデータとプレゼンテーションロジックとに分離されており、前記プレゼンテーションデータの変更箇所が、開始部、中間部、終了部に抽象化されたテンプレートシステムに関する。
【背景技術】
【０００２】
何らかの表示や出力を伴うソフトウエアプログラムは、その内部記述を、「何を」表示するかを司る部分である「ビジネスロジック層（又は、単にロジック層）」と、「どのように」表示するかを司る部分である「プレゼンテーション層」と、に分けて考えることができる。【０００３】
仮に、「従業員の一覧を表示するプログラム」を想定すれば、「何を」表示するか（例えば、名前、社員番号、内線番号など）を決め、そのデータを用意するのがビジネスロジック層であり、その用意されたデータを「どのように」表示するか（例えば、表示形式、文字の大きさ、色など）を決めて表示するのがプレゼンテーション層である。【０００４】
これらのビジネスロジック層とプレゼンテーション層とを分離するための手段として「テンプレートシステム」がある。この「テンプレートシステム」とは、表示する形式のデータをテンプレート（ひな型）として用意し、これをメインプログラムから読み込み、必要な部分を書き換えて出力する仕組みである。【０００５】
つまり、テンプレートシステムにおいては、メインプログラムがビジネスロジック層（何を表示するか）を担当し、テンプレートがプレゼンテーション層（どうやって表示するか）を担当するという役割分担がなされることによって、ビジネスロジック層とプレゼンテーション層とを分離している。【０００６】
このようなテンプレートシステムを用いて、ビジネスロジック層とプレゼンテーション層を分離すると、プレゼンテーション層（即ち、テンプレート）を切替えるだけで、様々な表示形式に対応することができるという利点（このとき、ビジネスロジック層（メインプログラム）は変更する必要がない。）、あるいは、いずれか一方の変更が他方に影響を与えず互いに独立して変更できるため、メインプログラムを担当するプログラマーと、テンプレートを担当するデザイナーと、が分業し易くなるという利点などがある。【０００７】
このような利点を有するため、テンプレートシステムは、特に、表示画面の変更が頻繁に発生するWebアプリケーションにおいて利用されている。
【非特許文献１】Velocity、http://jakarta.apache.org/velocity/
【非特許文献２】XMLC、http://xmlc.enhydra.org/
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ここで、上記したプレゼンテーション層（即ち、テンプレート）は、さらに、「プレゼンテーションデータ（表示に必要なデータ、例えば、ＨＴＭＬタグ、文字の大きさ、色、テーブル枠幅など）」とプレゼンテーションロジック（表示に必要なロジック（繰り返し、条件分岐など））とに分けることができる。例えば、従業員の一覧を表形式で表示する場合、表の大きさ、枠の幅や色などがプレゼンテーションデータであり、従業員の数だけ表示を「繰り返す」というのがプレゼンテーションロジックであると考えることができる。【０００９】
なお、注意を要するが、「プレゼンテーションロジック」は、あくまで「表示のために必要なロジック」であるので、同じロジックの概念であっても、データを用意するのが目的である上記ビジネスロジックとは明らかに役割が異なる。そのため、プレゼンテーションロジックをビジネスロジック層に含めることはできない。【００１０】
従来のテンプレートシステムでは、ビジネスロジック層（メインプログラム）とプレゼンテーション層（テンプレート）とを分離することが目的とされていたため、プレゼンテーション層であるテンプレートの中に、「プレゼンテーションデータ」と「プレゼンテーションロジック」の両方が混在していて、両者は、全く分離されていなかった。なお、図１５は、従来技術の例を示す図であり、テンプレートを構成するプレゼンテーション層に、「プレゼンテーションデータ」と「プレゼンテーションロジック」の両方が混在している状態を示している。【００１１】
この従来技術のように、プレゼンテーション層において、「プレゼンテーションデータ」と「プレゼンテーションロジック」とが分離されていない構成では、次のような問題が起こる。第一には、これらのいずれか一方の変更を行ったときに、誤ってもう一方も変更してしまう可能性が高いという問題が起こる。第二には、プレゼンテーションデータだけ、あるいはプレゼンテーションロジックだけを取り出して再利用することができないという問題が起こる。第三には、プログラムデザイナーは、一般にロジックの記述が苦手であるため、プレゼンテーションロジックが複雑になったときには、テンプレートを担当しているデザイナーでは対応できないという問題が起こる。【００１２】
そこで、本発明は、上記問題をすべて解決できるテンプレートシステムを提供することを主な目的とする。
【課題を解決するための手段】
【００１３】
本発明では、ビジネスロジック層と、プレゼンテーション層と、を備え、前記プレゼンテーション層が、プレゼンテーションデータとプレゼンテーションロジックとに分離されているとともに、前記プレゼンテーションデータの変更箇所が、開始部、中間部、終了部に抽象化されたテンプレートシステムを提供する。さらには、前記プレゼンテーションロジックを、プレゼンテーションデータにおける開始部、中間部、終了部のそれぞれ又は全部を、操作対象としたテンプレートシステムを提供する。【００１４】
また、本発明は、上記テンプレートシステムをプログラム内部に少なくとも有することを特徴とするソフトウエアプログラム、該ソフトウエアプログラムを用いてＷｅｂページを生成する方法や該ソフトウエアプログラムを用いて情報交換のためのファイル又はデータを生成する方法を提供する。Ｗｅｂページの生成や情報交換のためのファイル又はデータの生成を行う場合では、プレゼンテーションデータやプレゼンテーションロジックの変更頻度が高いため、本発明に係るソフトウエアプログラムを用いるのに好適である。
【発明の効果】
【００１５】
本発明によれば、プレゼンテーション層を、プレゼンテーションデータとプレゼンテーションロジックとを完全に分離した結果、いずれか一方を変更するときに他方に影響を与えないため、プレゼンテーションデータとプレゼンテーションロジックは、互いが独立して変更できる上、他方を誤って変更してしまうことがないという効果が得られる。【００１６】
また、プレゼンテーションデータとプレゼンテーションロジックのどちらか一方だけを取り出して再利用することができ、どのような表示形式や出力系式にも対応することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明に係るテンプレートシステムの好適な実施形態について、添付図面を参照しながら説明する。まず、図１は、本発明に係るテンプレートシステムの基本概念を表す図である。【００１８】
まず、本発明に係るテンプレートシステムは、図１に示されているように、テンプレートであるプレゼンテーション層Ｐを二つに分離し、プレゼンテーションデータＤと、プレゼンテーションロジックＬと、を別々に記述するようにする。【００１９】
図１に示されたプレゼンテーションデータＤは、表示に必要なデータ、例えば、ＨＴＭＬタグ、文字の大きさ、色、テーブル枠幅などに係わる記述であり、プレゼンテーションロジックＬは、表示に必要なロジック、例えば、繰り返し、条件分岐などに係わる記述である。【００２０】
次に、本発明では、前記プレゼンテーションデータＤにおいて、変更すべき箇所（以下「変更箇所」と称する。）に何らかの「目印」を付ける。【００２１】
例えば、図１では、「id="users"」が目印として機能する。そして、プレゼンテーションデータＤにおいて目印が付された変更箇所は、開始部・中間部・終了部に抽象化されて分離されている（図１のプレゼンテーションロジックＤを参照）。【００２２】
なお、開始部・中間部・終了部に抽象化するという構成は、プレゼンテーションデータＤ中に開始部、中間部、終了部として機能する抽象化された要素が形式を問わず存在すればよいのであって、例えば、開始部、中間部、終了部からなる計三つの抽象化された要素として扱う概念、あるいは一対をなす「開始部・終了部」と「中間部」からなる計二つの抽象化された要素として扱う概念（後述）などが含まれる。【００２３】
次に、図１で示されたプレゼンテーションロジックＬでは、プレゼンテーションデータＤの目印がつけられた前記変更箇所に対して繰り返しや分岐などの操作を行い、この操作は、開始部・中間部・終了部のそれぞれ又は全部に対して行うことができるように工夫する。【００２４】
この工夫によって、プレゼンテーションロジックＬでは、プレゼンテーションデータＤにおける変更箇所を、開始部・中間部・終了部に抽象化することによって、例えば、中間部だけを繰り返したり、開始部・中間部・終了部の全体を繰り返したりなど、自由に操作することができるようになるという利点が生まれる。なお、図１に示されたプレゼンテーションロジックＬでは、中間部だけを繰り返している構成が示されている。【００２５】
ここで、プレゼンテーションデータＤにおける変更箇所への目印のつけ方としては、（１）プレゼンテーションデータＤ中に、目印となる記号やキーワードを埋め込む方法（例えば、図１における「id="users"」はこの方法である）、（２）プレゼンテーションデータＤ中に現れる文字列やパターンを目印とみなす方法、（３）プレゼンテーションデータＤの先頭または末尾からの文字数やバイト数をもって目印とみなす方法などを採用することができる。【００２６】
このようにすれば、プレゼンテーションデータＤの中に、プレゼンテーションロジックＬの記述が一切入ることがなく、逆に、プレゼンテーションロジックＬの中にプレゼンテーションデータＤに係わる記述が一切入ることもなくなる。つまり、プレゼンテーションデータＤとプレゼンテーションロジックＬの両者の完全分離が可能となる。【００２７】
また、このような方法は、プレゼンテーションデータＤの形式によらず適用できる。つまり、本発明はどのような形式の出力や表示にも対応できるという利点がある。【００２８】
以下では、図２以下の図面に示された具体例に基づいて、本発明の実施形態をより詳しく説明する。具体例としては、HTMLファイルを出力するWebアプリケーションを想定する。この場合では、プレゼンテーションデータＤは、HTML形式になる。なお、本発明の射程とするプレゼンテーションデータＤはHTML形式に限定されない。【００２９】
まず、図２に示されたようなプレゼンテーションデータＤを作成し、変更箇所に目印をつける（図２参照）。この例では、２種類の目印が使われている。より詳しくは、図２において、符号Ｄ１で示す「id="users"」は、それを含むHTMLタグ「<ul>」から「</ul>」までを変更箇所とみなすことを表しており、図２において符号Ｄ２で示した「${user}」は、変数userの値で置き換えることを表している。【００３０】
このような構成のプレゼンテーションデータＤから、上記目印に基づいて、４つのマクロを自動生成する（図３参照）。この例では、次のようなマクロが自動生成される。【００３１】
図３において符号Ｍ１で示すマクロ「head_users」は、開始部（<ul>）を表している。また、この図３において符号Ｍ２で示すマクロ「body_users」は、中間部、つまり開始部と終了部の間の部分（<li>#{user}</li>）を表している。同図３において符号Ｍ３で示すマクロマクロ「foot_users」は、終了部（</ul>）を表している。この図３において符号Ｍ４で示すマクロ「elem_users」は、変更箇所全体、つまり開始部＋中間部＋終了部を表している。このとき、プレゼンテーションデータＤの変更箇所を、符号Ｍ５で示したマクロ「elem_users」で置き換える。また、目印である「id="users"」は取り除かれる。【００３２】
次に、図４に示すように、プレゼンテーションロジックＬをマクロとして作成する。【００３３】
このマクロは、変更箇所全体を表すマクロ（ここでは「elem_users」）を上書きするように作成する。この例では、配列userlistの要素をひとつひとつ変数userに代入しながら、中間部であるマクロbody_usersを繰り返している（即ち、この繰り返しがプレゼンテーションロジックＬである）。【００３４】
続いて、図５に示すように、上記したマクロ定義を読み込んで合成し、展開する。【００３５】
まず、プレゼンテーションデータＤの変更箇所は、「elem_users」というマクロに置き換えられているので、これを展開する（図５中の矢印Ｘ参照）。【００３６】
展開した中にプレゼンテーションロジックＬとマクロが含まれるので、当該マクロをさらに展開する（図５中の矢印Ｙ参照）。【００３７】
このようにして、プレゼンテーションデータＤとプレゼンテーションロジックＬとが合成されたテンプレートＴが得られる（図５参照）。【００３８】
このようにして得られたテンプレートＴを、メインプログラムから読み込み、実行する。例えば、配列userlistの内容が、["foo", "bar", "baz"] であった場合では、図６に示されたようなHTMLファイル（符号Ｆ）が生成される。【００３９】
従来一般の技術では、上記したテンプレートＴを直接生成しなければならなかった。つまり、プレゼンテーションデータＤとプレゼンテーションロジックＬが分離されておらず、１つになっていた。しかし、本発明によれば、テンプレートＴをプレゼンテーションデータＤ（図２参照）と、プレゼンテーションロジックＬ（図４参照）と、に分離できていることがわかる。【００４０】
ここで、図７は、開始部と終了部を含めた全体を繰り返すようにしたプレゼンテーションロジックの例である（図７の符号Ｌａ参照）。【００４１】
図８は、開始部と終了部を出力しないようにした（つまり、タグを出力しないようにした）プレゼンテーションロジック（図８の符号Ｌｂ参照）の変形形態を示している。この変形形態のように、タグを出力しないようにすることによって、HTMLやXML以外の形式を出力することができる。【００４２】
図9は、条件分岐など複雑なプレゼンテーションロジック（図９の符号Ｌｃを参照）を記述した変形形態を示している。【００４３】
続いて、図１０〜図１４を主に参照して、本発明の別の実施形態について説明する。この実施形態は、プレゼンテーションデータＤ中に開始部、中間部、終了部として機能する抽象化された要素を、一対をなす「開始部・終了部」と「中間部」からなる計二つの抽象化された要素に分けた構成を備える。【００４４】
まず、図１０は、図２に示されたＸＭＬ形式のプレゼンテーションデータ（「id="users"」がついたタグが変更箇所）と同じXMLを生成するプログラムである。このプログラムにおいては、メソッド「addElementUsers()」が開始部と終了部を表しており、メソッド「addContentUsers()」が中間部を表す（ただし、メソッド「addElementUsers()」において「id="users"」は削除されるものとする）。メソッドgenerate()は、プレゼンテーションデータ全体を出力するためのメソッドであり、このメソッドを実行すると、図２のプレゼンテーションデータと等価なXMLを生成する。【００４５】
またこのようなプログラムは、プレゼンテーションデータであるXMLから自動生成することが可能である。つまり図１０のプログラムは、形式こそ違うものの、図２のプレゼンテーションデータと等価であるとみなすことができる。【００４６】
図１１は、プレゼンテーションロジックを表すプログラムを示す図である。このプログラムでは、図１０で示したプログラムを継承し、かつメソッド「addContentUsers()」をオーバーライドして親クラスにおける同名のメソッドを繰り返し呼び出している。なお、親クラスのメソッド「addContentUsers()」は、中間部を表しているため、結果として図1１に示すプログラムでは中間部だけを繰り返すというプレゼンテーションロジックを実現している。【００４７】
この図１１のプログラムは、親クラスから図１０のメソッド「generate()」を継承している。このため図１１のプログラムでも、定義はされていないがメソッド「generate()」を実行することができ、その結果として、例えば、変数userlistの内容が配列 [ "foo", "bar", "baz" ] であった場合には、既述した図６と同様の出力結果が得られる。【００４８】
ここで、図１１に示すプレゼンテーションロジックでは、タグ名や属性名が現れていない。つまり図１１のプレゼンテーションロジックには図２におけるプレゼンテーションデータが一切入っていない。また、図２のプレゼンテーションデータにもプレゼンテーションロジックが一切入っていない。これは、プレゼンテーションロジックとプレゼンテーションデータが分離できていることを表している。【００４９】
次に、図１２は、開始部と終了部を含めた変更箇所全体を繰り返すようにしたプレゼンテーションロジックの例であり、図１３は、開始部と終了部を出力せずに中間部だけを繰り返すようにしたプレゼンテーションロジックの例であり、図１４は、繰り返しと条件分岐を含めた複雑なプレゼンテーションロジックの例である。【００５０】
以上のように、プレゼンテーションデータの変更箇所を「開始部・終了部」と「中間部」とに分ける実施形態においても、プレゼンテーションロジックからこれらの変更箇所を自由に操作する方法でもプレゼンテーションロジックとプレゼンテーションデータの分離が可能である。【００５１】
本発明は、上記した実施形態からもわかるように、プレゼンテーションロジックＬを複雑に変更しても、プレゼンテーションデータＤの方は、一切変更する必要がない。つまり、プレゼンテーションデータＤとプレゼンテーションロジックＬの分離が実現されていることがわかる。【００５２】
また、プレゼンテーションロジックＬでは、プレゼンテーションデータＤにおける変更箇所を、開始部・中間部・終了部に抽象化したことによって、中間部だけを繰り返したり、開始部・中間部・終了部の全体を繰り返したりなど、自由に操作することができるようになる。
【産業上の利用可能性】
【００５３】
本発明は、任意の形式のデータを出力することができるため、適用範囲も広く、HTMLやXMLを出力するＷｅｂアプリケーションの他に、各種設定ファイルや通信用データ（例えば、情報交換のためのＸＭＬファイルなどのデータファイル又はデータ）の生成など、多岐に渡って利用することができる。
【図面の簡単な説明】
【００５４】
【図１】本発明に係るテンプレートシステムの基本概念を表す図である。
【図２】目印をつけたプレゼンテーションデータ（ＸＭＬ形式）の例
【図３】プレゼンテーションデータから自動生成されたマクロの例
【図４】マクロを上書きして作成したプレゼンテーションロジックの例
【図５】マクロを合成して自動生成されたテンプレートの例
【図６】変数userlistの内容が配列 [ "foo", "bar", "baz" ] であった場合の出力例を示す図である。
【図７】プレゼンテーションロジックの変形形態（タグを含めて繰り返す例）を示す図である。
【図８】プレゼンテーションロジックの変形形態（タグを出力しない例）を示す図である。
【図９】プレゼンテーションロジックの変形形態（条件分岐を含む例）を示す図である。
【図１０】図２に示されたＸＭＬ形式のプレゼンテーションデータ（「id="users"」がついたタグが変更箇所）と同じXMLを生成するプログラムである。
【図１１】プレゼンテーションロジックを表すプログラムを示す図である。
【図１２】開始部と終了部を含めた変更箇所全体を繰り返すようにしたプレゼンテーションロジックの例を示す図である。
【図１３】開始部と終了部を出力せずに中間部だけを出力するようにしたプレゼンテーションロジックの例を示す図である。
【図１４】繰り返しと条件分岐を含めた複雑なプレゼンテーションロジックの例を示す図である。
【図１５】従来のテンプレート（プレゼンテーションデータとプレゼンテーションロジックが混在したテンプレート）を説明するための図である。
【符号の説明】
【００５５】
Ｄ  プレゼンテーションデータ
Ｌ、Ｌａ，Ｌｂ，Ｌｃ  （プレゼンテーションデータと分離された）プレゼンテーションロジック
Ｍ１  変更箇所の開始部を表すマクロ
Ｍ２  変更箇所の中間部を表すマクロ
Ｍ３  変更箇所の終了部を表すマクロ
Ｍ４  変更箇所全体を表すマクロ
Ｍ５  プレゼンテーションデータを変換したマクロ
Ｐ  プレゼンテーション層
【図１】
2005073873.tif 000002
【図２】
2005073873.tif 000003
【図３】
2005073873.tif 000004
【図４】
2005073873.tif 000005
【図５】
2005073873.tif 000006
【図６】
2005073873.tif 000007
【図７】
2005073873.tif 000008
【図８】
2005073873.tif 000009
【図９】
2005073873.tif 000010
【図１０】
2005073873.tif 000011
【図１１】
2005073873.tif 000012
【図１２】
2005073873.tif 000013
【図１３】
2005073873.tif 000014
【図１４】
2005073873.tif 000015
【図１５】
2005073873.tif 000016
【国際調査報告】
2005073873.tif 000017
2005073873.tif 000018
2005073873.tif 000019
2005073873.tif 000020
2005073873.tif 000021