(57)【要約】【課題】構造化文書の上位のフォルダの階層構造も取り込んだテンプレート処理を可能にする。【解決手段】文書データベース内の階層構造をなすフォルダ群のいずれかのフォルダに格納される複数の構造化文書に対して１以上のテンプレートを適用した結果を生成するためにコンピュータシステムが実行する文書処理方法であって、構造を成す文書要素群からなる第１の構造化文書を取得し、文書データベースのフォルダ群がなす階層構造の情報を取得し、第１の構造化文書の文書要素群がなす構造を、フォルダ群がなす階層構造において当該第１の構造化文書が格納されているフォルダの位置に併合することにより、統合構造情報を作成し、統合構造情報に対してテンプレートを適用する。【選択図】図１
2007156965.tif 000002
【特許請求の範囲】
【請求項１】
文書データベース内の階層構造をなすフォルダ群のいずれかのフォルダに格納される複数の構造化文書に対して１以上のテンプレートを適用した結果を生成するためにコンピュータシステムが実行する文書処理方法であって、
構造を成す文書要素群からなる第１の構造化文書を取得し、
文書データベースのフォルダ群がなす階層構造の情報を取得し、
第１の構造化文書の文書要素群がなす構造を、フォルダ群がなす階層構造において当該第１の構造化文書が格納されているフォルダの位置に併合することにより、統合構造情報を作成し、
統合構造情報に対してテンプレートを適用する、
文書処理方法。
【請求項２】
請求項１記載の文書処理方法であって、
前記統合構造情報を作成する処理では、前記文書データベース内の各フォルダの属性情報と、前記第１の構造化文書の各文書要素の属性情報と、を前記統合構造情報内の各フォルダ及び各文書要素に対応づけて記憶し、
前記統合構造情報に対してテンプレートを適用する処理は、各フォルダ又は各文書要素に対応づけて記憶された属性情報を前記テンプレートの対応箇所に代入する、
ことを特徴とする文書処理方法。
【請求項３】
請求項１記載の文書処理方法であって、
前記統合構造情報を作成する処理では、更に、第１の構造化文書の文書要素から参照される第２の構造化文書の文書要素群がなす構造を、前記統合構造情報における当該第２の構造化文書が格納されているフォルダの位置に併合する、
ことを特徴とする文書処理方法。
【請求項４】
請求項１記載の文書処理方法であって、
前記統合構造情報を作成する処理では、前記第１の構造化文書の構造のうち、所定の章立て規則に従った構造を文書スケルトンとして抽出し、該文書スケルトンに含まれない個別構造は、該文書スケルトンにおいて当該個別構造のルートに該当する文書要素の子孫として表現する、
ことを特徴とする文書処理方法。
【請求項５】
請求項１記載の方法であって、更に
前記統合構造情報における各フォルダ又は文書要素に対し、該フォルダ又は文書要素のＩＤ属性に基づき作成されたアクセス情報をアクセス情報属性として追加する、
処理を行うことを特徴とする方法。
【請求項６】
請求項５記載の方法であって、更に、
前記統合構造情報に対してテンプレートを適用する処理では、前記統合構造情報内のフォルダ又は文書要素に対してテンプレートを適用して得られたデータを、前記アクセス情報によりアクセスできるように保存する、
ことを特徴とする方法。
【請求項７】
請求項１記載の文書処理方法であって、更に、
フォルダ又は文書要素の種別と当該種別に対して適用すべきテンプレートとの対応関係を示す対応情報を取得し、
前記統合構造情報に対してテンプレートを適用する処理では、前記統合構造情報における各フォルダ又は各文書要素に対し、対応情報に示される当該フォルダ又は文書要素の種別に対応するテンプレートを適用する、
処理を行うことを特徴とする文書処理方法。
【請求項８】
請求項１記載の文書処理方法であって、更に、前記コンピュータシステムは、
フォルダ又は文書要素の種別と当該種別に対して適用すべき複数のテンプレートとの対応関係を示す対応情報を取得し、
前記統合構造情報における各フォルダ又は文書要素に対し、前記対応情報における該フォルダ又は文書要素に適用すべきテンプレートごとに、該フォルダ又は文書要素のＩＤ属性と該テンプレートを特定する情報とに基づき作成されたアクセス情報をアクセス情報属性として追加する、
処理を更に実行し、
前記統合構造情報に対してテンプレートを適用する処理では、前記統合構造情報における各フォルダ又は各文書要素に対して前記対応情報に示される当該フォルダ又は文書要素の種別に対応する各テンプレートを適用し、前記統合構造情報内のフォルダ又は文書要素に対してテンプレートを適用して得られたデータを、前記アクセス情報によりアクセスできるように保存する、
ことを特徴とする方法。
【請求項９】
請求項１記載の文書処理方法であって、
前記統合構造情報における１つのフォルダ又は文書要素に対し、複数のテンプレートの適用が指示された場合に、それら各テンプレートごとに、該フォルダ又は文書要素のＩＤ属性と該テンプレートを特定する情報とに基づき作成されたアクセス情報をアクセス情報属性として追加する、
処理を更に実行し、
前記統合構造情報に対してテンプレートを適用する処理では、前記統合構造情報におけるフォルダ又は文書要素に対して前記各テンプレートを適用し、前記統合構造情報内のフォルダ又は文書要素に対してテンプレートを適用して得られたデータを、前記アクセス情報によりアクセスできるように保存する、
ことを特徴とする方法。
【請求項１０】
請求項１記載の文書処理方法であって、更に、前記コンピュータシステムは、
フォルダ又は文書要素の種別と当該種別に対して適用すべき複数のテンプレートとの対応関係を示す対応情報を取得し、
前記統合構造情報における各フォルダ又は文書要素に対し、前記対応情報における該フォルダ又は文書要素に適用すべきテンプレートごとに、該フォルダ又は文書要素のＩＤ属性と該テンプレートを特定する情報とに基づき作成されたアクセス情報をアクセス情報属性として追加し、適用すべきテンプレートが前記対応情報にて示されていない各フォルダ又は文書要素に対しては、該フォルダ又は文書要素のＩＤ属性と、該フォルダ又は文書要素の前記統合構造情報における祖先のフォルダもしくは文書要素で適用すべきテンプレートが前記対応情報にて示されているもののアクセス情報とに基づき作成されたアクセス情報をアクセス情報属性として追加する、
処理を更に実行し、
前記統合構造情報に対してテンプレートを適用する処理では、前記統合構造情報における各フォルダ又は各文書要素に対して前記対応情報に示される当該フォルダ又は文書要素の種別に対応する各テンプレートを適用し、前記統合構造情報内のフォルダ又は文書要素に対してテンプレートを適用して得られたデータを、前記アクセス情報によりアクセスできるように保存する、
ことを特徴とする方法。
【請求項１１】
請求項１記載の文書処理方法であって、
フォルダ又は文書要素の種別と当該種別に対して適用すべきテンプレートとの対応関係を示す対応情報を取得し、
前記統合構造情報に対してテンプレートを適用する処理では、前記統合構造情報におけるフォルダ又は文書要素のうち、該テンプレートを適用すべき種別に該当するものを該対応情報から求め、求めたフォルダ又は文書要素をカレント要素とし、該カレント要素を基点として該テンプレートを適用する
処理を行うことを特徴とする文書処理方法。
【請求項１２】
請求項１１記載の文書処理方法であって、
前記統合構造情報に対してテンプレートを適用する処理では、該テンプレートの要素群がなす構造を解析して解析ツリーを求め、前記統合構造情報における前記カレント要素の周囲の構造と該解析ツリーとのマッチング処理により、該テンプレートの要素にマッチする前記統合構造情報内のフォルダ又は文書要素を求め、該テンプレートの各要素に対し、それにマッチする前記統合構造情報内のフォルダ又は文書要素の情報を流し込む、
ことを特徴とする文書処理方法。
【請求項１３】
請求項１１記載の文書処理方法であって、
前記テンプレートには、ディレクトリ要素を組み込むことができ、
前記統合構造情報に対してテンプレートを適用する処理では、該テンプレート中のディレクトリ要素を検出すると、前記統合構造情報内のフォルダ又は文書要素のうち該ディレクトリ要素中に記述される条件を満足するフォルダ又は文書要素をカレント要素とした上で、該ディレクトリ要素中のテンプレート内容を適用する、
ことを特徴とする文書処理方法。
【請求項１４】
請求項１記載の文書処理方法であって、
前記テンプレートには、エンコード要素を組み込むことができ、
前記統合構造情報に対してテンプレートを適用する処理では、該エンコード要素内のテンプレート内容の適用結果の文字列に対し、該エンコード要素が示すエンコードを施す、
ことを特徴とする文書処理方法。
【請求項１５】
文書データベース内の階層構造をなすフォルダ群のいずれかのフォルダに格納される複数の構造化文書に対して１以上のテンプレートを適用した結果を生成する処理をコンピュータシステムに実行させるためのプログラムであって、該コンピュータシステムに、
構造を成す文書要素群からなる第１の構造化文書を取得し、
文書データベースのフォルダ群がなす階層構造の情報を取得し、
第１の構造化文書の文書要素群がなす構造を、フォルダ群がなす階層構造において当該第１の構造化文書が格納されているフォルダの位置に併合することにより、統合構造情報を作成し、
統合構造情報に対してテンプレートを適用する、
処理を実行させるためのプログラム。
【請求項１６】
文書データベース内の階層構造をなすフォルダ群のいずれかのフォルダに格納される複数の構造化文書に対して１以上のテンプレートを適用した結果を生成する文書処理システムであって、
構造を成す文書要素群からなる第１の構造化文書を取得する手段、
文書データベースのフォルダ群がなす階層構造の情報を取得する手段、
第１の構造化文書の文書要素群がなす構造を、フォルダ群がなす階層構造において当該第１の構造化文書が格納されているフォルダの位置に併合することにより、統合構造情報を作成する手段、
統合構造情報に対してテンプレートを適用する手段、
を備える文書処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下では、分類や章立てなどの構造をなす構造化文書を処理するための方法又は装置に関し、特に構造化文書群に対するテンプレートの適用に関する。
【背景技術】
【０００２】
電子文書の処理や再利用を容易にするために、ＸＭＬ(eXtensible Markup Language)やＨＴＭＬ(Hypertext Markup Language)などといったマークアップ言語、或いはそれと同等の記述能力を持つ言語を用いた文書の構造化が普及している。構造化された電子文書（以下、単に構造化文書と呼ぶ）の再利用では、テンプレートを構造化文書に適用することで、構造化文書に含まれる情報を用いて別の文書を作成することが行われている。
【０００３】
例えば、特許文献１に示されるシステムでは、テンプレートを構造化文書として作成し、テンプレートの構造要素をコンテントエリア（個々の文書ごとに異なる内容を設定したり自由に編集したりすることが可能な領域）として指定可能としている。そして、このシステムは、テンプレートの適用対象となるＨＴＭＬ文書の構造中からユーザが選択した要素を、コンテントエリアに挿入する。また、このシステムは、最初の文書のテンプレート処理の後、別のＨＴＭＬ文書が入力された場合、この文書中に最初の文書で選択されたものと構造的に適合する要素があるか否かを判定し、あればその要素をテンプレートに挿入する。
【０００４】
また、特許文献２には、テンプレートを用いてＨＴＭＬ等の文書についての目次や索引を作成するシステムが開示される。このシステムでは、テンプレート中に繰り返し構造を示す記号を記述可能とし、この記号で囲まれる範囲の条件にマッチする記述をＨＴＭＬ文書から検出すると、それら検出した各記述に対し、その条件に示される処理内容を適用することで、目次や索引などといった類似の構造が繰り返される文書を作成する。
【０００５】
さて、構造化文書の実際の利用では、複数の構造化文書から必要な部分を取捨選択して組み立てることで、目的や用途に応じた様々な電子文書を生成したいなどの要望がある。例えば、製品マニュアルの各パートをそれぞれ別々に構造化文書として作成し、それら各パートの構造化文書から、印刷又は配布用のフォーマット（例えばＰＤＦ(Portable Document Format)形式）のマニュアルを作成したり、ウェブページ等として公開するために１つ又は複数のＨＴＭＬ文書からなるマニュアルを作成したりするなどである。
【０００６】
ところが、上記特許文献１及び２に示されるシステムは、いずれも１つのＨＴＭＬ文書に対してテンプレートを適用し、１つの文書を作成することしか想定していない。
【０００７】
また、目的や用途に応じた個々の電子文書の元になる多数の構造化文書のファイルは、ファイル管理のために、階層構造をなすフォルダ群に分類して保存されることが一般的である。フォルダの階層構造は、例えば収容する文書群の内容の属する分野やその他の属性（例えばその文書の作成した部門）など、１つ乃至複数の観点からの分類に応じて作成される場合が多いと考えられる。したがって、フォルダの階層構造は構造化文書の分類に関するある種の情報を持っていると捉えることができる。
【０００８】
ところが、特許文献１及び２を初めとする従来の技術では、複数の構造化文書からなる群にテンプレートを適用して文書等を作成するに当たり、そのようなフォルダ構造が持つ情報を利用することについて考慮を払っていない。
【０００９】
【特許文献１】特開２００５−０５００７８号公報
【特許文献２】特開２００４−０８６８５５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は、上記従来技術の問題点の少なくとも１つを解決することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の１つの側面では、文書データベース内の階層構造をなすフォルダ群のいずれかのフォルダに格納される複数の構造化文書に対して１以上のテンプレートを適用した結果を生成するためにコンピュータシステムが実行する文書処理方法であって、構造を成す文書要素群からなる第１の構造化文書を取得し、文書データベースのフォルダ群がなす階層構造の情報を取得し、第１の構造化文書の文書要素群がなす構造を、フォルダ群がなす階層構造において当該第１の構造化文書が格納されているフォルダの位置に併合することにより、統合構造情報を作成し、統合構造情報に対してテンプレートを適用する文書処理方法を提供する。
【００１２】
本発明の別の側面では、文書データベース内の階層構造をなすフォルダ群のいずれかのフォルダに格納される複数の構造化文書に対して１以上のテンプレートを適用した結果を生成する処理をコンピュータシステムに実行させるためのプログラムであって、該コンピュータシステムに、構造を成す文書要素群からなる第１の構造化文書を取得し、文書データベースのフォルダ群がなす階層構造の情報を取得し、第１の構造化文書の文書要素群がなす構造を、フォルダ群がなす階層構造において当該第１の構造化文書が格納されているフォルダの位置に併合することにより、統合構造情報を作成し、統合構造情報に対してテンプレートを適用する、処理を実行させるためのプログラムを提供する。
【００１３】
本発明の更に別の側面では、文書データベース内の階層構造をなすフォルダ群のいずれかのフォルダに格納される複数の構造化文書に対して１以上のテンプレートを適用した結果を生成する文書処理システムであって、構造を成す文書要素群からなる第１の構造化文書を取得する手段、文書データベースのフォルダ群がなす階層構造の情報を取得する手段、第１の構造化文書の文書要素群がなす構造を、フォルダ群がなす階層構造において当該第１の構造化文書が格納されているフォルダの位置に併合することにより、統合構造情報を作成する手段、統合構造情報に対してテンプレートを適用する手段、を備える文書処理システムを提供する。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して、本発明の実施の形態（以下「実施形態」とも呼ぶ）について説明する。
【００１５】
Ａ．システムの概略構成
図１に、実施形態の文書処理システムの概略構成を示す。このシステムは、文書データベース１０、文書取得部１２、フォルダ構造取得部１４、参照先取得部１６、ディレクトリマージ部１８、ＵＲＬ生成部２０、データ変換部２２、テンプレート解析部２６、マッチング処理部２８、流し込み処理部３４、を備える。
【００１６】
なお、これら各部は必ずしも同一のコンピュータ上に構築される必要はなく、ネットワーク等を介して相互に通信可能な複数のコンピュータ上に分散して構築されてもよい。例えば、上述のシステムの構成要素のうち、文書データベース１０とその他の構成要素群とをそれぞれ別々のコンピュータ上に構築し、後者が前者からネットワーク経由等で必要なデータを取得し、処理を行うようにしてもよい。
【００１７】
文書データベース１０には、処理の対象となる複数の構造化文書のデータが格納されている。以下では、文書データベース１０に、構造化文書の一種であるＸＭＬ文書のファイル群が格納されている場合を例にとって説明する。ただし、以下の説明から当業者には理解されるように、この文書処理システムは、ＸＭＬ文書以外の構造化文書にも適用可能である。
【００１８】
文書データベース１０は、階層構造をなすフォルダ（ディレクトリ）群を有しており、各ＸＭＬ文書はそれぞれ適切なフォルダに格納されている。
【００１９】
以下では、文書データベース１０に格納されたそれら複数のＸＭＬ文書から、例えばウェブページとして公開するための、１以上のＨＴＭＬ文書を作成する場合を例にとって、文書処理システムの機能を説明する。ただし、当業者ならば以下の説明から理解できるように、以下で説明する文書処理システムは、ＨＴＭＬ文書以外の形式の文書（構造化文書以外の文書も含む）を作成する場合にも適用可能である。
【００２０】
図１に示した文書処理システムの構成要素は、２つのグループに大別できる。１つの準備フェーズの処理を行うグループであり、もう１つはテンプレート処理フェーズのためのグループである。準備フェーズのためのグループには、文書取得部１２、フォルダ構造取得部１４、参照先取得部１６、ディレクトリマージ部１８、ＵＲＬ生成部２０、データ変換部２２が含まれる。テンプレート処理フェーズのためのグループには、テンプレート解析部２６、マッチング処理部２８、流し込み処理部３４が含まれる。以下、これら各フェーズのための構成要素及びその処理内容につき順に説明する。
【００２１】
Ｂ．準備フェーズ
この例では、文書データベース１０中の注目する文書の構造と、文書データベース１０の階層的なフォルダ構造とをマージして統合構造情報を作成し、この統合構造情報に対してテンプレートを適用する。また注目する文書の中から他の文書が参照されている場合、その参照先の文書の構造を統合構造情報に組み込む。準備フェーズでは、このような統合構造情報を作成する。また、以下の例では、作成した統合構造情報を、テンプレート処理に適したディレクトリレコード（詳細は後述）の形に変換する処理も行っている。以下、この準備フェーズのための構成要素群について説明する。
【００２２】
文書取得部１２は、ＨＴＭＬ文書を作成する対象となるＸＭＬ文書の指定をうけ、該当する文書を文書データベースより取得する。具体的には該当する文書はＸＭＬ形式で文書データベース１０中に格納されており、文書取得部１２は、指定されたＸＭＬ文書を取得する。対象となるＸＭＬ文書は、例えば、ユーザが文書データベース１０を管理するファイルシステムのユーザインタフェース画面から指定すればよい。また、別の例では、テンプレートの適用対象を指定する表（対応表と呼ぶ）をユーザが作成して文書処理システムに入力すると、文書取得部１２は、その対応表に示された条件に該当する文書を文書データベース１０から取得する（この処理については、後で具体例を挙げて詳しく説明する）。文書取得部１２は、取得したＸＭＬ文書を構造化レコードに変更してもよい。構造化レコードの形式としては、例えばＤＯＭ(Document Object Model )ツリーがある。
【００２３】
ここでは文書データベース１０内の「文書3」が指定され、次のようなＸＭＬ文書「文書3」が取得されるとする。
<BOOK title=”文書3”>
<PART title=”従来技術の問題点” ID=”A030100”>
<CHAPTER title=”従来技術” ID=”A030101”>
従来、構造化文書処理におけるレイアウト処理では、<JUMP JUMPID=”A010200”>参考文献1</JUMP>に述べられているように...
</CHAPTER>
<CHAPTER title=”課題” ID=”A030102”>
<SECTION title=”コスト” ID=”A030102_1”>...</SECTION>...
</CHAPTER>
</PART>
<PART title=”新たな技術の提案” ID=”A030200”> ... </PART> ...
</BOOK>
【００２４】
この例では、BOOK要素は１つのＸＭＬ文書を示し、属性としてタイトル（"title"）を有する。１つのBOOK（文書）は０個以上の"PART"要素（すなわち章立て構造における「編」）を含むことができる。また、１つのPART要素は０個以上の"CHAPTER"（章）要素を含むことができ、１つCHAPTER要素は０個以上の"SECTION"（節）要素を含むことができる。なお、BOOK、PART、CHAPTER、SECTIONは、それぞれテキスト（文字列）要素を含むこともできる。
【００２５】
この例は、文書−編−章−節という階層的な章立て構造にしたがったものである。以下の例では、文書データベース１０に格納される各文書は、このような章立て構造に従ってあらかじめ作成されているものとする。ただし、当業者には明らかなように、文書データベース１０に格納される文書群が従うべき構造は上記のものに限られるものではない。それら文書は、共通の階層的な章立て構造に従っていればよい。
【００２６】
また、属性"ID"は、文書要素の識別情報であり、文書データベース１０内で一意にその文書要素を識別できるものを用いればよい。
【００２７】
なお、ＸＭＬ文書の構造とＤＯＭツリーとは構造的には等価であり、前者から後者を求める方式は周知なので、この「文書3」に対応するＤＯＭツリーについては例示を省略する。
【００２８】
フォルダ構造取得部１４は、文書データベース１０より、文書群を整理するフォルダ（ディレクトリ）構造を取得する。このＸＭＬ形式のフォルダ構造データでは、一つの文書もしくはフォルダはそれぞれ一つの要素となり、ある親フォルダに含まれるフォルダもしくは文書は、親フォルダに対応する要素の子要素となる。文書データベース１０は、フォルダ構造取得部１４の求めに応じ、その内部のフォルダ構造を上記形式のＸＭＬデータで返す。フォルダ構造より上記形式のデータを作成する方法は自明であるのでここでは説明を省略する。また、フォルダ構造取得部１４は、取得したフォルダ構造をＤＯＭツリーに変更する機能を持っていてもよい。
【００２９】
ＸＭＬ形式のフォルダ構造データの例を以下に示す。
<FOLDER NAME=”フォルダ1”>
<FOLDER NAME=”フォルダ2”>
<DOCUMENT NAME=”文書1” />
<DOCUMENT NAME=”文書2” />
</FOLDER>
<FOLDER NAME=”フォルダ3”>
<DOCUMENT NAME=”文書3” />
</FOLDER>
</FOLDER>
【００３０】
この例は、図２に示すように、「フォルダ1」の子要素として「フォルダ2」及び「フォルダ3」が存在し、「フォルダ2」の子要素として「文書1」及び「文書2」が、「フォルダ3」の子要素として「文書3」が存在するフォルダ構造を示している。"FOLDER"要素は、属性として名前"NAME"を有し、子要素として"FOLDER"要素又は"DOCUMENT"要素をとることができる。"DOCUMENT"要素は、文書データベース１０の管理単位での１つの文書を示し、属性として名前"NAME"を有する。
【００３１】
参照先取得部１６は、文書取得部１２が取得した対象文書の中から参照される他のＸＭＬ文書を取得する。ここで、参照先取得部１６は、文書取得部１２から対象文書の構造化レコードを取得し、そのレコードの情報に基づき、その対象文書から参照される他文書を求めるようにしてもよい。他文書の参照は、例えば上述の「文書3」の場合、JUMP要素により表現される。参照先はそのJUMP要素のJUMPID属性の属性値と同一の値をID属性値にもつＸＭＬ要素である。「文書3」には、「A010200」をID属性値として持つ要素を参照先とするJUMP要素が含まれているので、ID属性値が「A010200」である要素が参照先である。参照先取得部１６は、この参照先要素を含むＸＭＬ文書を文書データベース１０から取得する。
【００３２】
より具体的には、参照先取得部１６は、例えば、文書取得部１２から得た対象文書のＤＯＭツリーをトラバースし、見つかった各JUMP要素についてJUMPIDの値を求める。なお、ＤＯＭツリーとＸＭＬ文書とは等価なので、演算処理の負荷が問題にならないのであれば、ＸＭＬ文書そのものを解析してJUMPIDを求めてもよい。次に文書データベース１０においてそのJUMPIDの値をID属性値としてもつ要素を含む文書を検索して取得する。取得した参照先文書は、ＤＯＭツリーに変更してもよい。なお、対象文書中に参照先文書が一つも存在しない場合も(JUMP要素が存在しない等)もあれば、参照先文書が複数存在する場合もある。
【００３３】
「文書3」の例では、参照先文書は一つである。ここでは、一例として、その参照先文書は次のような「文書1」であるとする。
<BOOK title=”文書1”>
<PART title=”従来技術の問題点” ID=”A010100”> ... </PART>
<PART title=”新たな技術の提案” ID=”A010200”> ... </PART> ...
</BOOK>
【００３４】
ディレクトリマージ部１８は、フォルダ構造取得部１４が生成したフォルダ構造に対し、文書取得部１０が取得した対象文書の構造と、参照先取得部１６が取得した参照先文書の構造とをマージする。ここでの構造のマージは、例えばＤＯＭツリー同士のマージ（併合）により行うことができる。すなわち、このマージ処理では、フォルダ構造のＤＯＭツリー上で対象文書及び参照先文書を示す各ノード（要素）の子要素として、対象文書及び参照先文書のＤＯＭツリーにおけるルート要素"BOOK"の子孫の要素群を挿入すればよい。この処理は、言い換えれば、フォルダ構造における対象文書と参照先文書の各要素を、それぞれ、当該文書のルート要素"BOOK"を頂点とする当該文書のツリー構造全体（すなわち"BOOK"とその子孫の要素群からなるツリー）に置き換えることである。
【００３５】
よって、以上に挙げた「フォルダ1」、対象文書「文書3」及び参照先文書「文書1」の例では、「フォルダ1」のＤＯＭツリーにおいて、「文書3」及び「文書1」に対応する各DOCUMENT要素の下に、文書3及び文書1のＤＯＭツリーのBOOK要素の子要素であるPART要素以下のツリー構造が挿入されることになる。この結果、次のような構造が得られる。
<FOLDER NAME=”フォルダ1”>
<FOLDER NAME=”フォルダ2”>
<DOCUMENT NAME=”文書1” >
<PART title=”従来技術の問題点” ID=”A010100”> ... </PART>
<PART title=”新たな技術の提案” ID=”A010200”> ... </PART> ...
</DOCUMENT>
<DOCUMENT NAME=”文書2” />
</FOLDER>
<FOLDER NAME=”フォルダ3”>
<DOCUMENT NAME=”文書3”>
<PART title=”従来技術の問題点” ID=”A030100”>
<CHAPTER title=”従来技術” ID=”A030101”>
従来、構造化文書処理におけるレイアウト処理では、<JUMP JUMPID=”A010200”>参考文献1</JUMP>に述べられているように...
</CHAPTER>
<CHAPTER title=”課題” ID=”A030102”>
<SECTION title=”コスト” ID=”A030102_1”>...</SECTION>...
</CHAPTER>
</PART>
<PART title=”新たな技術の提案” ID=”A030200”> ... </PART> ...
</DOCUMENT>
</FOLDER>
</FOLDER>
【００３６】
ここでは、煩雑さを避けるためＸＭＬ形式で示しているが、これはＤＯＭツリーと構造的には等価である。なお、以上では、フォルダ構造と文書構造のマージをＤＯＭツリーで行うと説明したが、演算処理負荷が問題にならなければ、ＸＭＬ形式の構造同士をマージしてももちろんかまわない。ここで例示した構造を構造例（ａ）と呼ぶ。
【００３７】
以下では、このようにして対象文書の文書構造（及び、もしあれば、参照先文書の文書構造）を文書データベース１０のフォルダ構造にマージしたものを、統合構造情報と呼ぶことにする。
【００３８】
ＵＲＬ生成部２０は、ディレクトリマージ部１８が生成した統合構造情報のうちID属性をもつ要素全てについて、ＵＲＬ属性を設定する。このＵＲＬ属性は、その要素についてテンプレートを適用した結果生成されるデータのＵＲＬを指定するために用いる（詳細は後述）。後述の変形例で、１つの要素に対して複数のＵＲＬ属性を設定する例を示すので、ここで設定するＵＲＬ属性を第１のＵＲＬ属性という意味で"url_1"属性と呼ぶこととする。ＵＲＬ生成部２０は、要素に対して付加するurl_1属性の属性値を、例えば、当該要素のID属性を用いて「<IDの属性値>.html」と設定する。ただし、これはあくまで一例であり、当該要素と、そのurl_1属性が示すＵＲＬにあるファイルとが一対一で対応づけることができる限りにおいて、url_1属性の属性値はどのような規則に従って生成してもよい。
【００３９】
１つの例では、url_1属性の設定は、統合構造情報を示すＤＯＭツリーをトラバースし、ID属性をもつ要素全てについてurl_1属性を新規に追加し、その属性値を「<IDの属性値>.html」とすることで行うことができる。もちろん、ＤＯＭツリーベースではなく、ＸＭＬ形式の統合構造情報に対しても、同様のＵＲＬ属性付加を行うことができる。
【００４０】
上述の構造例（ａ）に対し、ＵＲＬ生成部２０が処理を行った結果は、次のようになる。この例は、統合構造情報をＸＭＬ文書として示しているが、当業者ならばこれと等価なＤＯＭツリーも容易に理解できるであろう。
<FOLDER NAME=”フォルダ1”>
<FOLDER NAME=”フォルダ2”>
<DOCUMENT NAME=”文書1” >
<PART title=”従来技術の問題点” ID=”A010100” url_1=”A010100.html”> ... </PART>
<PART title=”新たな技術の提案” ID=”A010200” url_1=”A010200.html”> ... </PART> ...
</DOCUMENT>
<DOCUMENT NAME=”文書2” />
</FOLDER>
<FOLDER NAME=”フォルダ3”>
<DOCUMENT NAME=”文書3”>
<PART title=”従来技術の問題点” ID=”A030100” url_1=”A030100.html”>
<CHAPTER title=”従来技術” ID=”A030101” url_1=”A030101.html”>
従来、構造化文書処理におけるレイアウト処理では、<JUMP JUMPID=”A010200”>参考文献1</JUMP>に述べられているように...
</CHAPTER>
<CHAPTER title=”課題” ID=”A030102” url_1=”A030102.html”>
<SECTION title=”コスト” ID=”A030102_1” url_1=”A030102.html_1”>...</SECTION>...
</CHAPTER>
</PART>
<PART title=”新たな技術の提案” ID=”A030200” url_1=”A030200.html”> ... </PART> ...
</DOCUMENT>
</FOLDER>
</FOLDER>
【００４１】
データ変換部２２は、ＵＲＬ生成部２０が生成したＸＭＬ文書（又はそのＤＯＭツリー）から、ディレクトリレコードと呼ぶデータを作成する。ディレクトリレコードは、統合構造情報の表現形式の一形態であり、内容的はＸＭＬ文書又はＤＯＭツリーで表現された統合構造情報と等価である。ディレクトリレコードは、図３及び図４に示すように、複数の属性値からなるレコードの集合である。図３及び図４は、上に例示した統合構造情報を示すディレクトリレコードであり、ページ当たりの表示範囲の制限のため、２つの図に分けて示している。
【００４２】
ディレクトリレコードの１行が、該ディレクトリレコードを構成する１つのレコードであり、これが統合構造情報における１つの要素（フォルダ又は文書要素）に対応する。１つのレコードは、コンテキスト番号、コンテキスト識別子、要素名、"text"（テキスト内容）、"NAME"（名前)、タイトル("title")、ID、url_1、及びJUMPIDの属性を含む。このうち、"NAME"、"title"、ID、url_1、及びJUMPIDは、統合構造情報において当該要素が持っている属性であり、これらの意味については既に説明した。これらは元々対象文書や参照先文書の各文書要素の属性や、各フォルダの属性として保持されていたデータである。
【００４３】
コンテキスト番号、コンテキスト識別子、要素名、"text"は、ＸＭＬ又はＤＯＭツリー形式の統合構造情報からデータ変換部２２が生成する属性である。ここで、「コンテキスト」とは、ディレクトリレコードにおける１つのレコードのことであり、これは統合構造情報における１つの要素（すなわちフォルダ構造におけるフォルダ又は文書、又は文書構造における文書要素）に対応する。コンテキスト番号は、コンテキストに対してデータ変換部２２が付与する識別番号である。コンテキスト番号は、例えば、１つの統合構造情報に現れる各コンテキストに対して通し番号の形で与えればよい。コンテキスト識別子は、当該コンテキスト（すなわち要素）が、統合構造情報のツリー構造の中で占める位置を示す識別情報である。図示例では、ファイルシステムにおけるディレクトリパスの表現と同様の方式で、ルートから見た当該コンテキストの位置を示している（コンテキスト識別子の生成規則の例は後述）。要素名は、ＸＭＬ又はＤＯＭツリー形式の統合構造情報の各要素の要素名、すなわちＸＭＬでのタグ名であり、タグから抽出できる。"text"は、対象文書及び参照先文書に含まれる文字列のデータである。
【００４４】
データ変換部２２は、このようなディレクトリレコードを、以下のような手順で作成する。
【００４５】
１．統合構造情報（例えばその統合構造を示すＸＭＬ文書）の全ての要素を調べ、出現する属性全てをリストアップする。（ここでリストアップされた属性に、「コンテキスト番号」、「コンテキスト識別子」、「要素名」、「text」の各属性を加えたものがレコードの属性セットとなる。）
【００４６】
２．統合構造情報における出現順に、各要素に対し一つのレコードを生成する。ここで生成されるレコードの各属性の値は次のように定める。
・「コンテキスト番号」については、生成されるレコード毎に0,1,2,...という値を順に与える。
・「コンテキスト識別子」については、統合構造情報のルート要素については「/」、その他の要素については、親要素のコンテキスト識別子が<PC>で、その要素がその親要素のn番目の子要素であるならば「<PC>/n」とする。但し親要素がルート要素の場合は「/n」とする。数値nの代わりに子要素の中でユニークに識別可能な任意の文字列を用いることもできる。
・「要素名」については、その要素の要素名とする。
・「text」については、その要素の内容から他の要素を除いた部分とする。
・統合構造情報からリストアップされたその他の属性については、その属性をその要素が保持しているならば、その属性の値をセットし、保持していないならばその属性の値を空とする。
【００４７】
上述のＵＲＬ生成部２０の出力結果の例をもとに、データ変換部２２が生成したディレクトリレコードの例が図３及び図４の例である。このディレクトリレコードの例には、上述のＵＲＬ生成部２０の出力結果の例において「...」と省略していた部分の要素に対応するレコードも表している。
【００４８】
このようにしてデータ変換部２２が生成したディレクトリレコードに対して、次のフェーズでテンプレート処理が行われる。以下、このテンプレート処理フェーズについて説明する。
【００４９】
Ｃ．テンプレート処理フェーズ
(C1)テンプレート解析
このフェーズは、テンプレート解析部２６，マッチング処理部２８及び流し込み処理部３４によって実行される。このフェーズに対する入力は、テンプレート２４と、データ変換部２２が生成したディレクトリレコードと、テンプレート処理の基点とするディレクトリレコード上の特定のレコードを指定するコンテキスト番号と、の組である。使用するテンプレート２４は、ユーザが指定してもよいし、タイプ-テンプレート対応表（詳細は後述）に示される対応関係に基づき自動的に選択されてもよい。また、テンプレート処理の基点とするコンテキスト番号は、ユーザが指定してもよいし、タイプ-テンプレート対応表に示される対応関係から決定するようにしてもよい（詳細は後述）。そして、テンプレート処理フェーズでは、テンプレート２４を評価した結果をテキスト文字列として出力する。
【００５０】
このフェーズで用いるテンプレート２４は、所定の文法に基づいて記述された、例えばテキストファイルとする。テンプレートは、この文書処理システムからアクセス可能なファイルシステムに配置されているか、あるいは所定のテンプレートデータベースに格納されている。
【００５１】
一例として、テンプレート２４は、次の構文要素から構成される。
<テンプレート>::=<テンプレート要素列>
<テンプレート要素列>::=<テンプレート要素列><テンプレート要素>
<テンプレート要素>::=<テキスト要素>
| <変数要素>
| <繰り返し要素>
| <選択要素>
| <ディレクトリ要素>
| <エンコード要素>
<繰り返し要素>::=’{{‘ <テンプレート要素列> ‘}}’
<選択要素>::=’[[‘<テンプレート要素列>‘]]’
<ディレクトリ要素>::=‘#directory’ <条件式> <テンプレート要素列> ‘#end’
<エンコード要素>::=‘#encode’ <エンコード形式> <テンプレート要素> ‘#end’
<変数要素>::=‘$’<変数名>‘.’<属性名>‘$’
<テキスト要素>::=<$,{,},[,]を含まない文字列>
<変数名>::=<アルファベット・数字の列>
<属性名>::=<アルファベット・数字の列>
<条件式>::=<変数要素>’==’<定数>｜<変数要素>
<定数>::=<”を含まない文字列>
<エンコード形式>::=<$,{,},[,]を含まない文字列>
【００５２】
すなわち、テンプレート２４はテンプレート要素の列であり、テンプレート要素列はテンプレート要素列に対してテンプレート要素を併合したものとして定義される。テンプレート要素は、テキスト要素又は変数要素又は繰り返し要素又は選択要素又はディレクトリ要素又はエンコード要素のいずれかに該当する。繰り返し要素は、この例では、テンプレート要素列を二重括弧’{{‘ ‘}}’で括ったものであり、そのテンプレート要素列を繰り返し適用することを示すものである。選択要素は、この例では、テンプレート要素列を二重ブラケット’[[‘‘]]’で括ったものであり、そのテンプレート要素列全体が条件により選択的に出力される、または、出力されないことを示すものである。ディレクトリ要素は、カレントコンテキストの移動を指示するための要素であり、これについては後で詳しく説明する。エンコード要素は、エンコード方式に従った文字の置き換えを指示するための要素であり、これについても詳細は後で説明する。変数要素は、変数名と属性名とにより示され、その前後を「$」で囲むことで表現される。変数名がコンテキストの要素名にマッチした場合において、変数要素の属性名に合致する当該コンテキストの属性の値が、その変数要素に代入される。テキスト要素は、テンプレートの文法で変数や各種要素を示すために用いられる特別な文字を含まない文字列である。変数名及び属性名は、アルファベットと数字からなる列である。条件式は、要素名と属性名の組合せが定数に等しい場合、という条件を記述することができる。なお、定数は、文字列（ただし「”」を含んではならない）であり、その前後を「”」で囲むことで表現する。
【００５３】
この生成規則に基づく文法では、テンプレート、選択要素と繰返し要素、ディレクトリ要素、エンコード要素は、解析ツリー上で子のテンプレート要素を持つことができる。
【００５４】
テンプレート解析部２６は、このようなテンプレートを解析し、解析ツリーを得る。以下に例示するテンプレート（テンプレート（１）と呼ぶ）が与えられたの場合、解析ツリーは図５に示すようになる。
目次
{{$SECTION.title$[[($SECTION.whatsNew$)]]: 
}}
【００５５】
この例示したテンプレートの解析ツリーにおける各ノード（テンプレートの要素）のレコード内容を図６に示す。ここで、ノードＩＤは、ノードの識別情報であり、この例では、ツリーをルートから行きがけ順にたどった時に当該ノードを通る順番を示す番号（ただし、ルートノードの番号を０番とする）の頭にEをつけた文字列を用いている。ノードラベルは、ノードのラベル名であり、この例では、図５に図示したラベル名を示している。ノードタイプは、当該ノードが上述のテンプレート要素の種類の中のどれに該当するかを示す。ノード値は、テンプレート２４中で当該ノード（テンプレート要素）の文字列である。なお、この例では、「<改行>」は改行文字を表す。
【００５６】
テンプレート処理フェーズの処理はマッチング処理と流し込み処理の２パス処理で行う。前者はマッチング処理部２８が、後者は流し込み処理部３４が実行する。まず、マッチング処理から説明する。
【００５７】
(C2)マッチング処理
マッチング処理では、ディレクトリレコード中の着目しているコンテキスト番号の行（以降「カレントコンテキスト」と呼ぶ）において、ディレクトリレコードと、テンプレート中のテンプレート要素とのマッチング判定を行う。判定結果は、「<確定>」または、「<代入可能>」または、「<代入不能>」のいずれかになる。
【００５８】
マッチング処理の目的は、『ディレクトリレコードのどのコンテキストとテンプレートのどの変数要素とをマッチさせるか』、及び『どのテンプレート要素を何回繰り返せば、ディレクトリレコードとテンプレートの解析ツリーとがマッチするか』を計算することである。
【００５９】
判定結果「<確定>」は、テンプレート要素が、ディレクトリレコードの値とは無関係にマッチしうることを表す。例えば、図６に示したテンプレート解析結果のノードE1はテキスト要素であり、これはテンプレートにおける固定的な文字列（定型部分）である。このような定型部分は、テンプレートが適用される対象が変わっても固定であり、テンプレートの適用対象とは無関係に必ず採用すべきものなので、マッチング処理では、常にマッチすると判定するのである。
【００６０】
「<代入可能>」とは、テンプレート要素が、カレントコンテキストにおいてディレクトリレコードとマッチすることを表す。すなわち、この場合、カレントコンテキストの持つ属性が、そのテンプレート要素に代入できる。
【００６１】
「<代入不能>」は、テンプレート要素が、カレントコンテキストではディレクトリレコードとマッチしないことを表す。
【００６２】
以下、マッチング処理部２８が実行する処理について説明する。マッチング処理部２８は、最初にテンプレート２４のルートのノードRを着目ノードEに指定し、ディレクトリレコード上のカレントコンテキストCを指定し、以下の処理を再帰的に実施する。カレントコンテキストは、以下に示す処理の中で順に移動していくが、最初のカレントコンテキスト（初期コンテキストと呼ぶ）は、例えばユーザが明示的に指定する。また、ユーザが入力した検索条件に合致するものを初期コンテキストとして選択するようにしてもよい。また、タイプ-テンプレート対応表（後述）に示される要素に該当するコンテキストを初期コンテキストとして選択してもよい。以下、マッチング処理の手順を順に示す。マッチング処理部２８は、以下に示す手順を、テンプレート２４のルートノードRと初期コンテキストとの組を開始点として再帰的に実行する。
【００６３】
１．着目ノードEがテキスト要素なら、判定値は<確定>である。
【００６４】
２．着目ノードEが変数要素なら、カレントコンテキストCを基点として、その変数要素で指定された要素名の探索を試みる。この探索により、そのノードEに示される条件に合致（例えば要素名が一致）するディレクトリレコードのコンテキストVが見つかり、変数要素で指定した属性値の値vが空文字列でなければ、判定結果は<代入可能>としvを記録する。それ以外は<代入不能>とする。
【００６５】
ここで用いる探索方法は、変数の記述と解釈により変えてよい。例えば上述のように、変数名と属性名の組で変数要素を指定する場合（例えば「CHAPTER.title」）、統合構造情報のツリーをカレントコンテキストから親の方向に向かってルートまでのパス上に現れるコンテキストに限定して探索を行い、ノードEの変数名(例えば「CHAPTER」)と一致する要素名を持つコンテキストを探索結果とするなどである。親に向かう方向に探索するのは、例えば、文書の作りによっては、例えば「章」に対する説明や属性がその「節」のタイトル番号に組み込まれているなど、あるレベルの要素に対する属性等がその祖先の要素に組み込まれている場合があるからである。（第2章の3節のタイトル番号を「2.3節」とつける場合など。）なお、このような探索で見つけられた探索結果のコンテキストが持つ属性のうち、変数要素の属性名に対応する属性の値が、その変数要素に代入される値と決定される。
【００６６】
探索方法の別の例では、変数名に「CHAPTER/SECTION」のようなパスパターンを記述できるようにし、パスパターンに一致するコンテキスト（CHAPTERの直下のSECTION）を探索結果とする方法がある。更に別の例では、探索の方向は親に向かう方向だけではなく、子孫に向かう方向を指定できるようにしてもよい。例えば変数名の先頭に「./」となどといった所定の文字列を付けた場合には、探索方向を子孫の方向にするなどである。例えば変数名として「./CHAPTER/SECTION」とした場合は、マッチング処理部２８は、カレントコンテキストの要素名がCHAPTERであって、子のコンテキストの要素名がSECTIONであるコンテキストを、カレントコンテキストから統合構造情報のツリーの子孫である範囲のコンテキストを番号順に探索する。
【００６７】
３．着目ノードEが選択要素なら、そのノードEの子のテンプレート要素列を{E1, …, Ek}（kは１以上の整数）として、カレントコンテキストにおいて、テンプレート要素の列{E1, …, Ek}（iは１〜kの整数）の各Eiを新たな着目ノードEとして再帰的に判定を行う。一例として判定は<代入不能>のＯＲ（論理和）結合で行う。すなわち各Eiについて順に、E1, …, Ekについての判定値のいずれかが<代入不能>であった場合、Eの判定値は<代入不能>とする。E1, …, Ekの判定値のすべてが<確定>の場合は、Eの判定値は<確定>とする。それ以外は<代入可能>とする。このような処理によれば、カレントコンテキストにおいて、選択要素のすべての子要素が<代入可能>又は<確定>と判定された場合にのみ、そのカレントコンテキストが当該選択要素にマッチしたとコンテキストとして選ばれることになる。
【００６８】
４．着目ノードEが繰返し要素の場合の処理手順を説明する。まず、着目ノードEの子のテンプレート要素列を{E1, …, Ek}とする。また、カレントコンテキストCの子のコンテキストの列を{C1, …, Cm}とする。そして、カレントコンテキストをC1,…,Cmの順に移して行く。各時点でのカレントコンテキストCi(iは１〜ｍの整数）に対して、テンプレート要素列Es={E1, …, Ek}の判定を再帰的に行う。一例として、この判定は<代入可能>のＯＲ結合で行う。
【００６９】
ここでCiに対してEsの判定を行うとは、以下のような処理を意味する。すなわち、コンテキストCiにおいて、E1, …, Ekのいずれかが<代入可能>であった場合、そのCiを繰り返し対象として選択する。そして、カレントコンテキストの子の列{C1, …, Cm}のうち繰り返し対象として選択されたコンテキストの列を、S={S1, …, Sn}として記録する。Sが空でなければ、繰り返し要素の判定結果は<代入可能>とする。Sが空なら<代入不能>とする。また、Cの子がない場合、および、Eの子がない場合は<代入不能>とする。
【００７０】
このような処理によれば、カレントコンテキストの子のうちいずれかが繰り返し対象として選択されれば、カレントコンテキストにおいて、当該繰り返し要素は<代入可能>と判定される。このように、繰り返し要素の場合、選択要素と異なり、カレントコンテキストの子の全てがマッチしなくても、その一部でもマッチすれば、代入の対象として選ばれることになる。
【００７１】
５．ノードEがディレクトリ要素なら、Eの子のテンプレート要素列を{E1, …, Ek}とする。また、ディレクトリ要素の条件式に合致するコンテキストを、ディレクトリレコード全体の中から探索し集める。条件式に合致するコンテキストを発見順に{C1, …, Cm}とする。そして、カレントコンテキストをC1,…Cmの順に移し、各時点のカレントコンテキストCiに対して、テンプレート要素列Es={E1, …, Ek}の判定を再帰的に行う。一例として判定は<代入可能>のＯＲ結合で行う。ここで、Ciに対してEsの判定を行うとは、E1, …, Ekのいずれかが<代入可能>であった場合、Ciをコンテキストの移動対象として選択する。移動対象として選択されたコンテキストの列を、S={S1, …, Sn}とし記録する。Sが空でなければ、ディレクトリ要素の判定は<代入可能>とする。Sが空なら<代入不能>とする。また、条件式に合致するコンテキストがない、および、Eの子がない場合は<代入不能>とする。ディレクトリ要素の詳細については、後で詳しく説明する。
【００７２】
また、エンコード要素の取扱についても後で詳しく説明する。
【００７３】
図７に示すようなツリー構造を持ち、図８に示すようなディレクトリレコードを持つ統合構造情報に対し、初期コンテキストとしてコンテキスト番号４を指定して上述のテンプレート（１）を適用すると、図９に示すようなディレクトリ・テンプレート要素対応表３０（図１参照）を得ることができる。
【００７４】
ここで、図８の例では、ディレクトリレコードの属性の一つとして「whatsNew」なる属性があるが、これは処理の対象のＸＭＬ文書、又はこのＸＭＬ文書からの参照先の文書の要素に設定された属性の一つであり、新着情報であることを示す。また、図８の例では、煩雑さを避けるためJUMPID属性は省略している。
【００７５】
図９の対応表は、テンプレート（１）をカレントコンテキスト「４」に上述の処理手順に従って適用していく際に、テンプレートの各ノードに行き当たる順に、その行き当たった時のマッチングの判定結果を順に示したものである。図９の表において、「ノード番号」は、着目ノードを示す番号であり、図６のテンプレート解析結果におけるノードＩＤの番号部分である。「ノードタイプ」及び「変数名」はテンプレートにおける着目ノードの属性（図６に示したものと同じ）である。「コンテキスト識別子」は、そのレコードが示す判定の時点でのカレントコンテキストの識別子である。この例では、識別子が長くなることによる煩雑さを避けるため、初期コンテキストであるコンテキスト「４」（すなわち図７における「章１」）を「／１／１」としている。また、「コンテキストの要素名」はカレントコンテキストの要素名である。「マッチング判定値」は、マッチング判定結果の値である。「繰り返し対象」は、着目ノードが繰り返し要素である場合において、繰り返しの対象として選択された子ノードの識別子を示す。「Ｖ」は、変数要素の条件に合致するコンテキストの番号を示し、「ｖ」はマッチするコンテキストの属性値を示す。なお、図９では、子要素を持つノードに対応するレコードには網掛けを施して分かりやすくしている。
【００７６】
このマッチング結果を図式化すると、図１０に示すようなものとなる。この例では、煩雑さを避けるため、テキスト要素は省略されている。この例では、「節１／１／２」、「節１／１／３」及び「節１／１／４」が「繰り返し要素１」にマッチしており、そのうち「節１／１／２」は「変数要素１($SECTION.title$)」だけでなく「変数要素２($SECTION.whatsNew$)」にもマッチするため、「選択要素１」の中で選択されている。「節１／１／３」及び「節１／１／４」は、「変数要素２」にマッチする子要素を持たないので、「選択要素１」では選択されない。
【００７７】
(C3)流し込み処理
流し込み処理は、ディレクトリレコードの属性値を、変数と置き換える処理である。テンプレート中の着目ノードEと、ディレクトリレコード上のカレントコンテキストCとを指定して行ったマッチング処理の判定結果が<代入可能>か<確定>であるようなノードEに対して、流し込み処理部３４が流し込み処理を行う。
【００７８】
流し込み処理部３４は次のステップを再帰的に行う。以下の処理は、図９に示すようなマッチング判定結果のデータにうち、判定値が<代入可能>か<確定>であるようなノードに対してのみ適用される。判定値が<代入不能>となっているノードはスキップされる
【００７９】
１．着目ノードEがテキスト要素なら、ノード値ｖ（テンプレート中の文字列）を出力する。
【００８０】
２．着目ノードEが変数要素なら、マッチング処理で記録したノード値v（マッチした変数の属性値）を出力する。
【００８１】
３．着目ノードEが選択要素なら、当該ノードEの子のテンプレート要素列を{E1, …, Ek}の各Eiを新たな着目ノードEとし、カレントコンテキストCを指定し、マッチング判定結果が<代入可能>か<確定>であるEiを選択して再帰的に流し込み処理を行う。
【００８２】
４．着目ノードEが繰り返し要素の場合は次のような処理を行う。すなわち、Eの子のテンプレート要素列を{E1, …, Ek}とする。また、マッチング処理で記録したコンテキストの列を{S1, …, Sn}とし、各Siを順にカレントコンテキストとして選んでいく。そのなかで、テンプレート要素列Es={E1, …, Ek}のマッチング判定結果が<代入可能>か<確定>であるEiについて、選択して再帰的に流し込み処理を行う。
【００８３】
５．ノードEがディレクトリ要素の場合は次のような処理を行う。すなわち、Eの子のテンプレート要素列を{E1, …, Ek}とする。また、マッチング処理で記録したコンテキストの列を{S1, …, Sn}とし、各Siを順にカレントコンテキストとして選んでいく。その中で、テンプレート要素列Es={E1, …, Ek}のマッチング判定結果が<代入可能>か<確定>であるEiを選択して再帰的に流し込み処理を行う。
【００８４】
上述のテンプレート（１）を図７及び図８に示した統合構造情報に対して適用した場合、次のような文字列が変換結果３６（図１参照）として得られる。
目次
機能1(新着):
機能2:
機能3:
【００８５】
Ｄ．別の具体例
以上、文書処理システムの構成及び処理について説明した。次に、以上の処理を、章（CHAPTER）要素を基点としたテンプレート処理において、章に含まれる節の見出しリストである「章目次ファイル」を生成する場合を例にとって説明する。節の見出しリストには、各節の内容（コンテンツ）ファイルへのハイパーリンクが設定されているようにする。
【００８６】
この例では、テンプレート処理の入力は、図８に示したディレクトリレコードであるとする。すでに説明したように、ディレクトリレコードにはＵＲＬ生成部２０によってID属性を持つ全ての要素に対して付与された”url_1”属性が含まれている。このため、章目次ファイルを生成する時点で、下層の節レベルの内容ファイルのＵＲＬは解決できていることになる。
【００８７】
章目次ファイルを生成するためのテンプレートの例（以下では、テンプレート（２）とも呼ぶ）を以下に示す。
<HTML>
章目次
{{<A href=”$SECTION.url_1$”> $SECTION.title$[[($SECTION.whatsNew$)]]: </A> 
}}
</HTML>
【００８８】
このテンプレートを使用し、初期コンテキストCに番号「４」のコンテキストを指定してテンプレート処理を行った結果、生成される章目次ファイルは、次のようなファイル内容となる。
<HTML>
章目次
<A href=”A0101010100.html”>機能1(新着): </A>
<A href=”A0101010200.html”>機能2: </A>
<A href=”A0101010300.html”>機能3: </A>
</HTML>
【００８９】
図８を参照すれば分かるように、このコンテキスト「４」のurl_1属性は「A0101010000.html」なので、流し込み処理部３４は、生成した章目次ファイルのファイル名を「A0101010000.html」とする。
【００９０】
ここの章目次ファイルからリンクされる各ＨＴＭＬファイルは、次のようなテンプレート（以下、テンプレート（３）と呼ぶ）を用いることで作成することができる。
<HTML>
<H3>$SECTION.title$</H3>
{{<A name=”$DOCITEM.ID$”></A>
<P>$DOCITEM.text$</P>
}}
</HTML>
【００９１】
このテンプレート（３）を、要素名が「SECTION」であるコンテキストを基点（初期コンテキスト）として適用することで、節の内容を示すＨＴＭＬファイルを作成することができる。図８のディレクトリレコードでは、番号「６」，「８」，「１０」のコンテキストが「SECTION」なので、これらをそれぞれ初期コンテキストに選んでテンプレート（３）適用すれば、各節の内容ファイルを作成できる。生成される各節の内容ファイルは、それぞれ「A0101010100.html」、「A0101010200.html」、「A0101010300.html」というファイル名で出力される。
【００９２】
例えば、「A0101010300.html」のファイル内容は以下のようになる。
<HTML>
<H3>機能3</H3>
<A name=” A0101010301”></A>
<P>この節では、機能3の説明をします。</P>
<A name=” A0101010302”></A>
<P>※この機能はRev 2.0でサポートされます。</P>
</HTML>
【００９３】
上記のテンプレート処理によって生成されたファイルのファイル名と参照関係を図１１に示す。
【００９４】
この例では、章にテンプレート（２）を適用し、各節にテンプレート（３）を適用することにより、リンク付きの章目次ファイルと、その章目次ファイルからリンクされる各節の内容ファイルとを作成することができる。なお、このように章にテンプレート（２）を適用し、各節にテンプレート（３）を適用するようにするには、例えば図１２に示すようなタイプ-テンプレート対応表を文書処理システムに登録すればよい。この対応表は、統合構造情報の要素名（これは要素のタイプを示す）と、その要素名の要素に対して適用すべきテンプレートの識別名とのペアを登録したものである。この例では、テンプレート（２）の識別名（この例ではファイル名）が「chapter.html」、テンプレート（３）の識別名が「section.html」である。文書処理システムは、タイプ-テンプレート対応表が与えられると、その対応表に示される要素名に合致する要素を統合構造情報から検索し、検索された各要素をそれぞれ初期コンテキストに選び、この初期コンテキストに対して要素名のペアとなっているテンプレートを適用する。
【００９５】
このように、本実施形態では、統合構造情報の各要素（コンテキスト）に準備フェイズでＩＤ属性を元に生成したＵＲＬ属性(url_1属性）を付与し、その要素にテンプレートを適用した結果得られるファイルに対しそのＵＲＬ属性の値をファイル名として付与するようにした。このような構成によれば、テンプレート処理により生成されるファイルには必ず一意なＵＲＬが付与されることとなり、このＵＲＬは文書処理システムにとっては既知のものなので、外部の装置からこのＵＲＬが要求された場合には、対応するファイルを提供することができる。このように、コンテキストに対してテンプレートを適用した結果のＵＲＬを準備フェーズで定め、これをテンプレート適用結果のファイルに付与することで、様々な条件によって変化しうるリンクをテンプレートの中に記述しやすくなる。
【００９６】
ここでは、章目次ファイルと節内容ファイルを作成する場合を例示したが、同様の考え方を応用すれば、様々なレベルのリンク関係をテンプレートに記述できる。例えば、文書ごとの見出しリストや文書目次、編目次など、文書を分類した統合構造における目次を作成することができる。また、各レベルの内容ファイルも同様に作成することができる。
【００９７】
以上説明したように、本実施形態によれば、一つのディレクトリレコードに対し、階層ごとに複数のテンプレートを切り替えて適用することで、矛盾のない階層構造をなすハイパーテキスト構造を生成することができる。このように、本実施形態によれば、階層的なデータ（統合構造情報）と階層的な制御構造（テンプレート）とを自動的に突合せ、章立て構造や分類構造を有する文書を生成することができる。
【００９８】
Ｅ．水平型のテンプレート適用
上記Ｄ節の具体例では、統合構造情報における異なる階層に対してそれぞれ異なるテンプレートを選択的に適用する例を示した。これに対し、この節では、同じ要素に対して複数のテンプレートを適用する例を示す。
【００９９】
例えば、章の目次を示すフレームの隣に章の内容を示すフレームを配置したウェブページを作成しようとする場合、同じ「章」のコンテキストから、章目次と章内容とを作成する必要がある。この場合、章目次作成用のテンプレートと章内容作成用のテンプレートとをそれぞれ用意し、それを同じ「章」に適用すれば、章目次と章内容を作成することができる。このように、同じコンテキストに複数のテンプレートを適用して異なる複数の文書を作成することを、「水平型」のテンプレート適用と呼ぶことにする。これに対し、上記Ｄ節で示したような階層ごとに異なるテンプレートを適用することを、「垂直型」のテンプレート適用と呼ぶ。
【０１００】
水平型の場合、同じコンテキストから生成した複数の文書（例えば章目次と章内容）に対してそれぞれ他の文書から適切にリンクできるようにする必要がある。以下では、このようなことを実現するためのシステムについて説明する。
【０１０１】
図１３は、この文書処理システムの概略的な構成を示す機能ブロック図である。この図において、図１に示したシステムの構成要素と同一又は類似の機能を持つ構成要素には、同一符号を付して説明を省略する。
【０１０２】
図１３のシステムは、図１のシステムに対し、テンプレートデータベース２５、タイプ-テンプレート対応表３７及びテンプレート選択部３８を追加したものである。
【０１０３】
テンプレートデータベース２５は、複数のテンプレートが登録されたデータベースである。タイプ-テンプレート対応表３７は、すでに上記Ｄ節で説明したように、統合構造情報における要素名と、その要素名の要素に対して適用すべきテンプレートの識別名とのペアを登録した表である。ただし、Ｄ節の対応表（図１２）とは異なり、対応表３７には、同じ要素名に対して複数のテンプレート名が登録される。対応表３７の具体例を図１４に示す。この例では、"PART"（編）要素に対してフレームセット用の"frameSet.html"と、左側フレーム用の"partLeft.html"と、右側フレーム用の"partRight.html"という３つのテンプレートが登録され、"CHAPTER"要素に対しても同様に左側フレーム用の"chapterLeft.html"と、右側フレーム用の"chapterRight.html"という２つのテンプレートが登録されている。
【０１０４】
このシステムでは、準備フェーズにて、ＵＲＬ生成部２０が各フレーム用のＵＲＬを統合構造情報に組み込むために、次のような処理を行う。すなわち、ＵＲＬ生成部２０は、タイプ-テンプレート対応表３７を参照しながら、ディレクトリマージ部１８が生成した統合構造情報（例えばＤＯＭツリー）をトラバースし、ID属性をもつ要素全てについて次のような属性を新規に追加する。
・その要素（着目要素と呼ぶ）に対応するテンプレートがn種類、タイプ-テンプレート対応表３７に記述されているならば、url_1, url_2, ...url_n属性を追加し、それらの属性値をそれぞれ「<IDの属性値>_<テンプレート名>」とする。
・着目要素に対応するテンプレートが対応表３７に記述されていない場合は、その祖先の要素でテンプレートが対応表３７に記述されている直近の要素を求める。求めた直近の祖先要素にurl_1, ..., url_n属性が追加されているならば、着目要素にもurl_1, ..., url_nを追加し、これらの属性値をそれぞれ「<祖先のurl_i属性値>#<IDの属性値>」(但しiは1からn)とする。
【０１０５】
図１４に例示した対応表３７には、PART及びCHAPTERには対応するテンプレートが存在するので、それら要素については「<IDの属性値>_<テンプレート名>」という形式の属性値が使用される。SECTIONについては対応するテンプレートが対応表に存在しないので、祖先の要素の属性値から求める。SECTIONの祖先の要素でテンプレートに対応する要素としてはPART及びCHAPTERが存在するが、SECTIONにはCHAPTERの方が近いので、CHAPTERの値から求められる。したがって、先に例示した構造例（ａ）に対し、図１４の対応表を適用した場合、ＵＲＬ生成部２０は次のようなデータを生成する。
<FOLDER NAME=”フォルダ1”>
<FOLDER NAME=”フォルダ2”>
<DOCUMENT NAME=”文書1” />
<PART title=”従来技術の問題点” ID=”A010100” 
url_1=”A010100_frameSet.html” url_2=”A010100_partLeft.html”
url_3=”A010100_partRight.html”> ... </PART>
<PART title=”新たな技術の提案” ID=”A010200” 
url_1=”A010200_frameSet.html” url_2=”A010200_partLeft.html”
url_3=”A010200_partRight.html” > ... </PART> ...
<DOCUMENT NAME=”文書2” />
</FOLDER>
<FOLDER NAME=”フォルダ3”>
<DOCUMENT NAME=”文書3”>
<PART title=”従来技術の問題点” ID=”A030100”
url_1=”A030100_frameSet.html” url_2=”A030100_partLeft.html”
url_3=”A030100_partRight.html”>
<CHAPTER title=”従来技術” ID=”A030101” 
url_1=”A030101_chapterLeft.html” url_2=”A030101_chapterRight.html”>
従来、構造化文書処理におけるレイアウト処理では、<JUMP JUMPID=”A010200”>参考文献1</JUMP>に述べられているように...
</CHAPTER>
<CHAPTER title=”課題” ID=”A030102” 
url_1=”A030102_chapterLeft.html” url_2=”A030102_chapterRight.html”> 
<SECTION title=”コスト” ID=”A030102_1”
url_1=”A030102_chapterLeft.html#A030102_1”
url_2=”A030102_chapterRight.html#A030102_1”>...</SECTION>...
</CHAPTER>
</PART>
<PART title=”新たな技術の提案” ID=”A030200” 
url_1=”A030200_frameSet.html” url_2=”A030200_partLeft.html”
url_3=”A030200_partRight.html”> ... </PART> ...
</DOCUMENT>
</FOLDER>
</FOLDER>
【０１０６】
このようなＵＲＬ生成部２０の処理により、各要素から生成される文書に対してＵＲＬが設定される。
【０１０７】
次に、テンプレート処理フェーズでは、テンプレート選択部３８が、統合構造情報をトラバースし、その中の各要素がそれぞれ対応表３７に記載されているかを調べ、記載されているならば、対応するテンプレートの名前をキーにテンプレートデータベース２５を検索してそのテンプレートを取得し、テンプレート解析部２６に引き渡す。
【０１０８】
タイプ-テンプレート対応表３７の別の例を図１５に示す。この対応表３７によれば、CHAPTER要素を基点としたテンプレート処理では３つのファイルが生成される。すなわちこの例では、第１のテンプレート"chapterFrameSet.html"は２つのフレームからなるフレームセットページであり、その各フレームに、第２及び第３のテンプレートである"chapterLeft.html"及び"chapterRight.html"により生成されるファイルを表示させる。
【０１０９】
例えば、第１のテンプレート"chapterFrameSet.html"は以下のようなものであるとする。
<HTML>
<FRAMESET cols=”30,*”>
<FRAME src=”$CHAPTER.url_2$” name=”left”>
<FRAME src=”$CHAPTER.url_3$” name=”right”>
</FRAMESET>    
</HTML>
【０１１０】
また、第２のテンプレート"chapterLeft.html"は以下のようなものであるとする。
<HTML>
章目次
{{<A href=”$SECTION.url_1$” target=”right”> $SECTION.title$: <A> 
}}
</HTML>
【０１１１】
また、第３のテンプレート"chapterRight.html"は以下のようなものであるとする。
<HTML>
<H3>$CHAPTER.title$</H3>
{{<A name=”$DOCITEM.ID$”></A>
<P>$DOCITEM.text$</P>
}}
</HTML>
【０１１２】
図１５に例示したタイプ-テンプレート対応表を上述の構造例（ａ）に適用した結果生成されるディレクトリレコードを図１６及び図１７に例示する。このディレクトリレコードは、マッチング処理部２８に渡される。
【０１１３】
一方、テンプレート選択部３８は、図１５のタイプ-テンプレート対応表に登録された各要素名の要素を統合構造情報から抽出し、抽出した各要素をそれぞれ初期コンテキストとして選ぶ。そして、抽出した要素ごとに、その要素に対応するテンプレート名をタイプ-テンプレート対応表から求め、そのテンプレート名に対応するテンプレートをデータベース２５から検索する。このような処理により、初期コンテキストとテンプレートのペアが複数求められ、これらがテンプレート解析部２６に渡される。テンプレート解析部２６は、ペアごとに、その中のテンプレートを上述のように解析し、これにより得られた解析ツリーと初期コンテキストのペアをマッチング処理部２８に渡す。
【０１１４】
マッチング処理部２８は、テンプレートの解析ツリーと初期コンテキストのペアごとに、上述のマッチング処理を実行する。そして、このペアごとのマッチング処理の結果を受けて、流し込み処理部３４が、それらペアごとに上述の流し込み処理を実行する。
【０１１５】
図１５の対応表と図１６及び図１７のディレクトリレコードとが与えられた場合、まず初期コンテキストとしてコンテキスト「４」が選ばれ、これに第１のテンプレート"chapterFrameSet.html"が適用される。この結果得られるファイルの内容は次のようなものとなる。
<HTML>
<FRAMESET>
<FRAME src=” A0101020000_chapterLeft.html” name=”left”>
<FRAME src=” A0101020000_chapterRight.html” name=”right”>
</FRAMESET>
</HTML>
【０１１６】
また、このファイルは、CHAPTER要素に適用される最初のテンプレートから生成されるものなので、url_1属性に示されるファイル名（ＵＲＬ）が付与される。すなわち、そのファイルのファイル名は"A0101010000_ chapterFrameSet.html"となる。
【０１１７】
また、CHAPTER要素には第２のテンプレート"chaterLeft.html"も対応づけられているので、同じコンテキスト「４」に対して第２のテンプレートが適用される。その結果、"A0101020000_chapterLeft.html"というファイル名で次のような内容のファイルが作成される。
<HTML>
章目次
<A href=”A0101010100_section.html” target=”right”>機能1: <A>
<A href=”A0101010200_section.html” target=”right”>機能2: <A>
<A href=”A0101010300_section.html” target=”right”>機能3: <A>
</HTML>
【０１１８】
また、CHAPTER要素には第３のテンプレート"chaterRight.html"も対応づけられているので、同じコンテキスト「４」に対して第３のテンプレートが適用される。その結果、"A0101020000_chapterRight.html"というファイル名で次のような内容のファイルが作成される。
<HTML>
<H3>操作</H3>
<A name=” A0101010001”>
<P>この章では、操作を説明します。</P>
</HTML>
【０１１９】
また、SECTION要素には、上述のテンプレート（３）と同様のテンプレートを適用することで、各節の節内容ファイルが作成される。このようにして生成されたファイルとリンクの関係を図１８に示す。
【０１２０】
ここでは章目次と章内容をＨＴＭＬのフレーム形式で表示する場合を説明したが、ここで例示した水平型のテンプレート適用は、これに限らず、統合構造情報の様々な階層に適用することができる。したがって、統一的なフレーム構造において、例えば、目次と内容をそれぞれ第１のフレームと、第２のフレームにわけて表示するための階層構造をなすハイパーテキスト構造を、生成することができる。
【０１２１】
なお、この方式は、例示したフレームセットと左フレーム及び右フレームからなるフレーム構造に限らず、２以上のフレームからなるフレーム構造一般に適用可能であることは明かであろう。
【０１２２】
Ｆ．ディレクトリ要素
次に、ディレクトリ要素について説明する。
【０１２３】
以上の説明では、ユーザの明示的な指示、又はタイプ-テンプレート対応表から求められるコンテキストを初期コンテキストとし、繰り返し要素や選択要素を処理する際には上述のアルゴリズムに従って適宜その初期コンテキストを基点にカレントコンテキストを移動させつつ再帰的に処理を行った。ここで説明するディレクトリ要素は、そのような再帰処理でのカレントコンテキストの子コンテキストへの移動ではなく、テンプレート作成者が意図したコンテキストへカレントコンテキストを移動させるために用いられる要素である。
【０１２４】
例えば、初期コンテキストを基点にして作成する文書に対し、テンプレート作成者が意図する条件に合致する文書、編、章又は節を参照するリンクを含めたい場合に、ディレクトリ要素をテンプレートに組み込めばよい。ディレクトリ要素は、‘#directory’という文字列の後に <条件式>及び<テンプレート要素列> が順に続き、‘#end’という文字列で終わる。<条件式>は、「<変数要素>’==’<変数要素>」または「<変数要素>’==’<定数>」という形式で記述され、左辺で指定した「変数要素」が、右辺で指定した「変数要素」(カレントコンテキストにおいて「代入可能」または「確定」であることが必須)の値、または「定数」に等しくなるコンテキストを抽出する条件となっている。システムは、この条件式にマッチするコンテキストへ、カレントコンテキストを移動させる。そして、システムは、移動後のカレントコンテキストに対し、<テンプレート要素列>を適用する。条件式にマッチするコンテキストが複数見つかった場合は、それら複数のコンテキストに対して順にカレントコンテキストを移し、それぞれのカレントコンテキストに対し、<テンプレート要素列>を適用する。
【０１２５】
以下に、ディレクトリ要素を含むテンプレートの例（テンプレート（４）と呼ぶ）を示す。
$SECTION.title$ :
#directory $*.ID$==$JUMP.JUMPID$
<A href=”$SECTION.ID$.htm”>$PART.title$:$CHAPTER.title$:$SECTION.title$</A> 
#end
【０１２６】
このテンプレート（４）では、カレントコンテキストの移動先として、ディレクトリレコード中のいずれかの要素のID属性値が、カレントコンテキストで評価したときのJUMP要素のJUMPID属性値に等しくなる行を指定している(アスタリスク”*”は、任意の要素を意味している)。
【０１２７】
このテンプレート（４）と、図１９及び図２０に示すディレクトリレコードとを指定し、初期コンテキストに「１３」が指定された指定した場合を例にとる。ディレクトリ要素で移動先に指定されたコンテキストは、図２０に示されるコンテキスト「２５」であり、図では分かりやすくするために網掛けで示している。
【０１２８】
この場合、テンプレート（４）の１行目の$SECTION.title$には、カレントコンテキスト「１３」の先祖のSECTION要素がマッチする。次に、「#directory $*.ID$==$JUMP.JUMPID$」 にマッチするコンテキストへカレントコンテキストが移動する。この例では、条件式の右辺部分である「$JUMP.JUMPID$」に、（移動前の）カレントコンテキスト「１３」（JUMP要素）のJUMPID属性がマッチするので、その属性値である「A0201010300」がその定数部分に代入される。この結果、条件式はＩＤ属性値が「A0201010300」となるコンテキストを指定するものとなる。この条件式に合致するコンテキストとして、「２５」が見つかるので、このディレクトリ要素の実行によりカレントディレクトリは一時的に「２５」に移る。そして、このカレントコンテキスト「２５」を基点として、「#end」までに記述されたテンプレート要素列、すなわち「<A href=”$SECTION.ID$.htm”>$PART.title$:$CHAPTER.title$:$SECTION.title$</A>」が適用される。この例では、まず、変数要素「$SECTION.ID$」に対してカレントコンテキスト「２５」のＩＤ属性値「A0201010300」がマッチする。次の変数要素「$PART.title$」はカレントコンテキスト「２５」にマッチしないので、統合構造情報を祖先の方向に順に遡ってマッチするものが探索される。この場合コンテキスト「１８」のタイトル属性「基本編」がテンプレートに代入されることになる。同様に、次の変数要素「$CHAPTER.title$」には、コンテキスト「１９」のタイトル属性「操作＆手順」が代入される。そして、最後の変数要素「$SECTION.title$」には、カレントコンテキスト「２５」のタイトル属性「参照<3>」が代入されることになる。したがって、テンプレートの適用により次のような文字列が生成されることになる（文字列（Ａ）と呼ぶ）。
機能3 :
<A href=“A0201010300.htm”>基本編: 操作&手順: 参照<3></A>
【０１２９】
ここで、仮に条件式に合致する移動先が複数発見された場合は、あたかも、マッチする複数のコンテキストをメンバに持つディレクトリが存在するかのように、発見されたコンテキストに対して、繰り返しテンプレート処理が行われる。このように構成することで、条件式に合致する仮想的なディレクトリを構成し、テンプレート処理を行うことができるため、柔軟なテンプレート処理を提供することができる。
【０１３０】
Ｇ．デバッグ
次に、文書処理システムにおけるデバッグ処理について説明する。
【０１３１】
テンプレートにおいて選択要素などの各種条件に書き間違いがあったり、ディレクトリレコードの属性値がテンプレート作成側で想定したものと異なるなどのデータ不備があったりした場合など、様々なミスにより期待したテンプレート処理結果が得られなくなる場合がある。
【０１３２】
そのようなミスを見つけ出すために、この文書処理システムにデバッグ機能を追加することもできる。このデバッグ機能は、マッチング処理部２８への追加機能として実現することができる。デバッグでは、ユーザ等が指定したカレントコンテキストに対するテンプレートのマッチング処理の判定結果を出力するようにすれば、前述したような条件の書き間違いやデータの不備を発見するのに役立つ。
【０１３３】
ここで、テンプレート作成者からみた場合、デバッグ出力としての判定値は、テンプレート要素の階層の上位から子孫に向かって順に出力されることが望ましい。しかしながら、マッチング処理においては、下位(子孫)のテンプレート要素の判定値のいずれか、あるいはすべてが定まった後で、自ノードの判定値が定まるような、再帰的な処理ステップを含む。このような処理順序に従ってそのままマッチング判定結果を出力したのでは、テンプレート作成者から見て分かりにくいものとなってしまう。
【０１３４】
そこで、マッチング処理部２８の処理手順にグローバルな変数(WATCH_MODE)を設ける。WATCH_MODEは"true"又は"false"のいずれかの値をとり得る。そして、「WATCH_MODE=true」の場合は、本来のマッチング処理に先立ち、マッチング判定値を知るために、デバッグ出力をするためのダミーのマッチング処理を行うよう、マッチング処理部２８の処理手順を変更する。判定値が求まれば、着目したテンプレート要素の属性値と判定値をデバッグ出力として表示した後、本来のマッチング処理を実行する。このように変更した処理手順によれば、テンプレートの親の要素から子孫に向かう順に判定値を出力することができる。
【０１３５】
変更したマッチング処理の手順は、詳細には以下のようになる。ここでは、着目したコンテキスト番号は、ウォッチポイントと呼ぶ。すなわち、ユーザ（例えばテンプレート作成者）が指定したウォッチポイントについて選択的にデバッグ処理が実行され、その結果が出力されることになる。
【０１３６】
１．カレントコンテキストがウォッチポイントでない場合、通常のマッチング処理を行う。
【０１３７】
２．カレントコンテキストがウォッチポイントの場合、WATCH_MODE=falseなら、WATCH_MODEをtrueに変更して、ダミーのマッチング処理を行い、判定値をデバッグ出力する。デバッグ出力は、テンプレートの階層構造を反映し、ノード深さに応じて適宜インデントをしたり、ツリー構造を表示したりしてもよい。そして、デバッグ出力を行った後で、WATCH_MODEをfalseに設定し、通常のマッチング処理を行う。
【０１３８】
３．カレントコンテキストがウォッチポイントの場合、WATCH_MODE=trueなら、通常のマッチング処理を行い、判定値を計算する。
【０１３９】
この処理手順では、WATCH_MODEがfalseの状態でマッチング処理が開始される。そして、カレントコンテキストがウォッチポイントに移ったときに、上述のステップ２．でWATCH_MODEがtrueとなり、ダミーのマッチング処理が行われる。このウォッチポイントでのマッチング判定値が決まるのに、下位のマッチング判定結果が決まることが必要である場合、ステップ１．又は３．に該当するので、通常のマッチング処理が行われ、判定値が計算される。以上の処理が再帰的に繰り返されることで、ステップ２．でウォッチポイントの判定値が決定され、デバッグ情報３２（図１、図１３参照）として出力されることになる。
【０１４０】
上記Ｃ節に例示したテンプレート（１）と図７及び図８のディレクトリレコードが与えられ、処理の基点となる初期コンテキストが「４」、ウォッチポイントが「６」に指定された場合のデバッグ出力の例を以下に示す。
Watch Point: :C6[SECTION] (C4[CHAPTER]の配下)
E2 http://server/template.html: 2行:[代入可能] 繰返し: C6[SECTION]: 3 回の繰返し中 2 回目の流し込みです。
| {{$SECTION.title$[[($SECTION.whatsNew$)]]: 
| *
| + E3 http://server/template.html: 2行:[代入可能] 変数: 値は [機能1] です。
| | {{$SECTION.title$[[($SECTION.whatsNew$)]]: 
| |   *
| + E4 http://server/template.html: 2行:[代入可能] 選択範囲: 選択されました。
| | {{$SECTION.title$[[($SECTION.whatsNew$)]]: 
| |                  *
| | + E6 http://server/template.html: 2行:[代入可能] 変数: 値は [新着] です。
| | | {{$SECTION.title$[[($SECTION.whatsNew$)]]: 
| | |                     *
【０１４１】
ここで「E2」などの記号はテンプレート要素のノードＩＤである。’*’は、前の行においてテンプレート要素のデバッグ出力メッセージの該当する箇所を示すマーカである。‘|’は兄弟の関係にあるテンプレート要素を表す。すなわち、’+’の左側にある’|’の数が、テンプレート要素の解析ツリー上の深さを示す。
【０１４２】
テンプレート（１）は誤りがないので、上に例示したデバッグ結果は全て正常である。これに対し、テンプレート（１）における”$SECTION.whatsNew$” を ”$SECTION.whatsnew$” と書き間違えた場合は、上と同じ条件でテンプレート処理を行ったときのデバッグ出力は以下のようになる。
Watch Point: :C6[SECTION] (C4[CHAPTER]の配下)
E2 http://server/template.html: 2行:[代入可能] 繰返し: C6[SECTION]: 3 回の繰返し中 2 回目の流し込みです。
| {{$SECTION.title$[[($SECTION.whatsnew$)]]: 
| *
| + E3 http://server/template.html: 2行:[代入可能] 変数: 値は [機能1] です。
| | {{$SECTION.title$[[($SECTION.whatsnew$)]]: 
| |   *
| + E4 http://server/template.html: 2行:[代入不能] 選択範囲: 選択されません。
| | {{$SECTION.title$[[($SECTION.whatsnew$)]]: 
| |                  *
| | + E6 http://server/template.html: 2行:[代入不能] 変数: SECTION は指定した属性 whatsnewの値がありません。
| | | {{$SECTION.title$[[($SECTION.whatsnew$)]]: 
| | |                     *          
【０１４３】
このように構成することで、テンプレートのデバッグ機能を提供することができる。すなわち、テンプレートを記述する者が期待するテンプレート処理結果が得られない場合に、テンプレートの選択要素の条件の書き間違いや、ディレクトリレコードの属性値が、テンプレートで想定したものと異なるようなデータ不備を発見する助けとすることができる。テンプレート処理のマッチング処理がウォッチポイントに到達するたびに、（すなわち前記ステップ2を実行するたびに、）入力待ちとなることでテンプレート処理がブロック（一旦停止）し、キーボード操作やマウス操作によって、入力待ちブロックが解除され、テンプレート処理が継続するように、構成することも可能である（流し込み処理のステップ動作に相当する）。
【０１４４】
Ｈ．エンコード要素
次に、テンプレートに組み込み可能なエンコード要素について説明する。例えばＸＭＬやＨＴＭＬなどといった文書を表現する言語では、言語の仕様上、通常の文字列には使用できない文字が存在し、その文字を文字列に組み込むには特殊な修飾を行うなどの処置が必要になる場合がある。このように、文書を表現する言語に応じた文字の置き換えを指示するために用いるのがエンコード要素である。
【０１４５】
エンコード要素は、‘#encode’という文字列から始まり、その後にエンコード形式を指定する文字列<エンコード形式>が続く。そして、そのエンコード形式を適用する対象を特定する<テンプレート要素列>が続き、最後は文字列‘#end’で終わる。
【０１４６】
エンコード要素を含むテンプレートの例を以下に示す（これをテンプレート（５）と呼ぶ）。
#encode XMLEntityEncoding
#directory $*.ID$==$JUMP.JUMPID$
<A href=”$SECTION.ID$.htm”>$PART.title$：$CHAPTER.title$：$SECTION.title$</A> 
#end
#end
【０１４７】
このテンプレート（５）では、１行目でエンコード形式が指定され、２〜４行目でそのエンコード形式を適用する対象が特定される。この形式のエンコード規則は、図２１に示すようなものとなる。例えば、このエンコード形式の場合、文字「&」を文字列中に組み込むには「&amp」に変換する必要がある。
【０１４８】
エンコード要素を含むテンプレートを用いる場合、マッチング処理部２８の処理（上記(C2)参照）に次のステップ６を付け加えればよい。
６．着目ノードEがエンコード要素なら、唯一の子のテンプレート要素Ecの判定値をEの判定値とする。
【０１４９】
また流し込み処理部３４の処理（上記(C3)参照）に次のステップ６を付け加える。
６．着目ノードEがエンコード要素なら、グローバル変数（ENCODER）にエンコード方式を設定し、Eの唯一の子のテンプレート要素Ecのマッチング判定結果が<代入可能>か<確定>である場合に、Ecを指定して再帰的に流し込み処理を行う。
【０１５０】
また、流し込み処理のステップ２を以下のように変更する。
２．着目ノードEが変数要素なら、マッチング処理で記録したvをグローバル変数（ENCODER）に指定されたエンコード方式でエンコード処理して出力する。
【０１５１】
テンプレート（５）を例にとると、その２〜４行目は上述のテンプレート（４）で示したディレクトリ要素である。したがって、図１９及び図２０に示すディレクトリレコードに対し、初期コンテキストに「１３」を指定してこのテンプレート（５）を適用すると、まず、２〜４行目の部分の処理結果として上述の文字列（Ａ）から最初の行を除いたもの（すなわちリンク記述部分）が生成され、それに対してXMLEntityEncoding形式のエンコードが行われることになる。その結果、次のような文字列が出力される。
<A href=“A0201010300.htm”>基本編: 操作&amp;手順: 参照&lt;3&gt;</A>
【０１５２】
以上説明したように、エンコード要素を用いることで、テンプレート処理結果の文字列を、目的とする言語における正しいエンコード形式に置き換えることができる。例えば、テンプレート処理結果がＨＴＭＬ形式である場合に、タグ要素以外の箇所に”<”が出現するなど、ブラウザで正しく表示されなくなることを避けることが出来る。
【０１５３】
上述したエンコード処理は、変数要素にマッチするコンテキストの属性値「ｖ」の中の語を別の語に変換する処理であるが、複数の変換テーブルを用意し、テンプレート処理が行われた際に定まる環境条件（例えば日付時刻やWebリクエストで指定されるパラメータ）によって、所定の変換テーブルを選択する構成にすることもでき、これによりより柔軟なエンコード処理が可能になる。
【０１５４】
Ｉ．索引生成への応用
ここでは、上述の文書処理システムを利用して複数文書にわたる索引を生成する例を説明する。
【０１５５】
この例は、基本的なシステム構成は図１に示したものでよい。ただし、データ変換部２２については、上述の例よりも機能を拡張する。
【０１５６】
索引生成のために、この例では、データ変換部２２は、ディレクトリレコードにおいて、ID属性に、複数の文書をまたがってコンテキストを一意に識別可能なＩＤを付与するものとする。
【０１５７】
また、データ変換部２２は、ディレクトリレコードの特定のレコード（もしくは要素）から特定の属性を抽出し、サブレコードの集合を作成する。索引作成の場合、タイトルの読みに応じた処理が必要となるので、読みの属性(reading属性と呼ぶ）が設定されている要素（コンテキスト）が抽出対象のレコードとなる。また、索引作成に必要な属性として、例えば、要素名、title 、reading、ID、url_1の各属性がある。したがって、データ変換部２２は、reading属性を持つレコードから、要素名、title 、reading、ID、url_1からなるサブレコードを抽出することとなる。
【０１５８】
なお、ディレクトリレコードからサブレコードを抽出する代わりに、元の複数のＸＭＬ文書（対象文書や参照先文書）からサブレコードを生成してもよい。
【０１５９】
ユーザは、データ変換部２２に対して、図２２に示すような内容の分類出力指示を与える。この指示は、"root", "record", "INDEX"の３つのレコードからなり、各レコードは、"tag"（タグ）, "title"（タイトル）, "g.INDEX"の３項目のうち、それぞれ必要な項目の情報を含んでいる。
【０１６０】
ここで分類出力指示の”record”レコードの”g.INDEX”項目におけるINITIAL関数は引数の文字列の先頭１文字を返す関数である。但し、先頭1文字が濁音や半濁音である場合は、清音にして返す。また、GYOU関数は、引数の文字が「あ、か、さ、た、な、...」のいずれの行に属するかを返す関数であり、たとえば引数が「け」であれば、「か行」を返す。また$readingはreading属性の値を示す。
【０１６１】
この出力指示の入力が行われると、データ変換部２２は、上述のようにして作成したサブレコードに対し、以下の処理を行う。
１．rootエントリを追加
２．サブレコードの属性の集合に対しtag及びg.INDEX属性を追加
３．各エントリのtag, g.INDEX属性に分類出力指示に従い属性値を設定（rootには更にtitle属性値を設定）
【０１６２】
このような処理の結果、図２３に示すようなデータが得られる。このデータに対し、データ変換部２２は、以下のような処理を行う。
１．g.INDEX属性でソート
２．INDEXデータエントリを追加
３．階層構造を生成（コンテキスト識別子の付与）
４．要素名がないエントリについてtagから要素名を付与
【０１６３】
ここで、INDEXデータエントリは、「あ行」、「か行」などの各行の先頭に追加され、その行の名前（「あ行」など）がそのエントリのtitle属性値に設定される。階層構造は、rootを最上位とし、「あ行」等の各行のINDEXデータエントリがrootの子となる。また、「あ行」等の各行に属する個々の要素は、対応するINDEXデータエントリの子となる。このような処理により、図２４及び図２５に示すようなディレクトリレコードが作成される。この例は、図１９及び図２０に示したディレクトリレコードを原料として、上述の処理を施した結果得られるものである（図１９及び図２０の例ではreading属性は示していなかったが、ディレクトリレコードにはreading属性が含まれていたものとする）。図２４及び図２５の例ではコンテキスト番号は省略しているが、rootを０として順に各コンテキストに番号が付されているものとする。
【０１６４】
このようなディレクトリレコードに対して、索引生成用のテンプレートを適用する。索引生成用のテンプレートとしては、例えば以下のようなものを用いることができる。
<HTML>
<H1> $ROOT.title$
{{<H2>$INDEX.title$</H2>
{{[[<A href="$FOLDER.url_1$"> $FOLDER.title$ </A>
]][[<A href="$DOCUMENT.url_1$"> $DOCUMENT.title$ </A>
]][[<A href="$PART.url_1$"> $PART.title$ </A>
]][[<A href="$CHAPTER.url_1$"> $CHPATER.title$ </A>
]][[<A href="$SECTION.url_1$"> $SECTION.title$ </A>
]]}}}}</HTML>
【０１６５】
初期コンテキストＣに「０」を指定して図２４及び図２５のディレクトリレコードにこのテンプレートを適用すると、以下のような出力が生成される。
<HTML>
<H1> 索引
<H2>あ行</H2>
<A href="A0102010000.html"> 応用編 </A>
<A href="A0202010000.html"> 応用編 </A>
<H2>か行</H2>
<A href="A0101010100.html"> 機能1 </A>
<A href="A0101010200.html"> 機能2 </A>
<A href="A0101010300.html"> 機能3 </A>
<A href="A0101000000.html"> 基本編 </A>
<A href="A0201000000.html"> 基本編 </A>
<H2>さ行</H2>
<A href="A0201010100.html"> 参照<1> </A>
<A href="A0201010200.html"> 参照<2> </A>
<A href="A0201010300.html"> 参照<3> </A>
<A href="A0100000000.html"> 説明書 </A>
<H2>は行</H2>
<H2>や行</H2>
<A href="A0200000000.html"> 用語集 </A>
</HTML>
【０１６６】
このように構成することで、階層的なデータから、階層情報をハイパーテキスト構造に反映した複数のファイルを、テンプレート処理で生成できるだけでなく、索引データなど、階層データを処理、加工して作られる新たな階層データから、索引ファイルのように、ハイパーテキスト構造の辻褄があった階層情報を含むハイパーテキストファイルを生成することが、容易に、かつ柔軟にできる。
【０１６７】
以上、文書処理システムの実施形態について説明した。以上に説明した文書処理システムでは、対象となる文書の階層構造を文書データベース１０のフォルダの階層構造にマージして統合構造情報を作成し、この統合構造情報に対してテンプレートを適用する。このような方式によれば、フォルダ群の階層構造から文書内部の階層構造に至るまで、継ぎ目なく透過的に、同じ処理を適用することができる。また、統合構造情報にテンプレートを適用すれば、文書内部だけでなく、その上部構造であるフォルダ群の階層構造の持つ情報（例えばフォルダのタイトルなど）をテンプレートに代入して出力文書を作成することもできる。また、このシステムでは、対象となる文書から参照される参照先文書の構造を統合構造情報に組み込むことができるので、参照先文書の情報を含んだ出力文書を作成することができる。
【０１６８】
また、このシステムの処理方式では、初期コンテキストの祖先と子孫、及び参照先文書とその祖先の情報のみがあれば処理が実行できる。したがって、文書データベース１０からそれらの情報のみをメモリにロードして処理するように制御することで、メモリの必要量を節約することができる。
【０１６９】
上記の例では、文書の構造をフォルダ群の階層構造にマージしていたが、この代わりに、図２６に示すような３段階の構成をとってもよい。図２６の例では、文書の構造のうち編−章−節などといった標準的な章立て構造を抽出してこれを文書スケルトン１０２とし、この文書スケルトン１０２のルートをフォルダの階層構造１００における当該文書のノードにマージする。そして、文書スケルトン１０２における各章、各節等のノードに対し、それら各章、各節等の内容１０４の構造をマージする。例えば章の内容１０４は、元の文書の中でのその章の子孫のうち、節などといった標準的な章立て構造に属するノードとその子孫を除いたものである。この内容１０４のツリー構造のルートを文書スケルトン１０２の対応するノードにマージする。なお、文書スケルトン１０２の抽出は、文書取得部１２や参照先取得部１６で行えばよい。
【０１７０】
また、本実施形態では、テンプレートを解析して解析ツリーを求め、この解析ツリーとテンプレート適用対象の統合構造情報のツリーとのパターンマッチングによりテンプレートが適用できる部分を特定する。
【０１７１】
この文書処理システムは、典型的には、汎用のコンピュータシステムにて上述の各構成要素の機能又は処理内容（詳細は後述）を記述したプログラムを実行することにより実現される。コンピュータシステムは、ハードウエアとして、図２７に示すように、ＣＰＵ（中央演算装置）４０、メモリ（一次記憶）４２、各種Ｉ／Ｏ（入出力）インタフェース４４等がバス４６を介して接続された回路構成を有する。また、そのバス４６に対し、例えばＩ／Ｏインタフェース４４経由で、ハードディスクドライブ４８やＣＤやＤＶＤ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体を読み取るためのディスクドライブ５０が接続される。このようなドライブ４８又は５０は、メモリに対する外部記憶装置として機能する。実施形態の処理内容が記述されたプログラムがＣＤやＤＶＤ等の記録媒体を経由して、又はネットワーク経由で、ハードディスクドライブ４８等の固定記憶装置に保存され、コンピュータシステムにインストールされる。固定記憶装置に記憶されたプログラムがメモリに読み出されＣＰＵにより実行されることにより、実施形態の処理が実現される。
【図面の簡単な説明】
【０１７２】
【図１】文書処理システムの概略的な構成を示す機能ブロック図である。
【図２】階層的なフォルダ構造の一例を示す図である。
【図３】ディレクトリレコードの一例の一部を示す図である。
【図４】ディレクトリレコードの一例の残りの部分を示す図である。
【図５】テンプレートを解析して得られた解析ツリーの例を示す図である。
【図６】図５の解析ツリーにおける各ノードのレコード内容を示すための図である。
【図７】統合構造情報の一例をツリー構造で示した図である。
【図８】図７の統合構造情報に対応するディレクトリレコードを示す図である。
【図９】図７及び図８の統合情報構造とテンプレート（１）とのマッチング処理の結果生成されるデータの例をテーブル形式で示す図である。
【図１０】図７及び図８の統合情報構造とテンプレート（１）とのマッチング処理の結果を図式化して示す図である。
【図１１】章目次ファイルと節内容ファイルとのリンク関係を示す図である。
【図１２】タイプ-テンプレート対応表の一例を示す図である。
【図１３】１つのコンテキストから複数の文書を生成する文書処理システムの概略的な構成を示す機能ブロック図である。
【図１４】タイプ-テンプレート対応表の別の一例を示す図である。
【図１５】タイプ-テンプレート対応表の更に別の一例を示す図である。
【図１６】ディレクトリレコードの別の例の一部を示す図である。
【図１７】ディレクトリレコードの別の例の残りの部分を示す図である。
【図１８】図１６及び図１７のディレクトリレコードのコンテキスト「４」に対してテンプレート群を適用することにより生成されるファイル群のリンク関係を示す図である。
【図１９】ディレクトリレコードの更に別の例の一部を示す図である。
【図２０】ディレクトリレコードの更に別の例の残りの部分を示す図である。
【図２１】XMLEntityEncoding形式の置き換え規則を示す図である。
【図２２】索引生成のための分類出力指示の内容を示す図である。
【図２３】索引生成のための生成されるサブレコードの例を示す図である。
【図２４】図２３のサブレコードから作成されたディレクトリレコードの一部を示す図である。
【図２５】図２３のサブレコードから作成されたディレクトリレコードの残りの部分を示す図である。
【図２６】文書スケルトンを説明するための図である。
【図２７】文書処理システムが実装されるコンピュータシステムのハードウエア構成の一例を示す図である。
【符号の説明】
【０１７３】
１０  文書データベース、１２  文書取得部、１４  フォルダ構造取得部、１６  参照先取得部、１８  ディレクトリマージ部、２０  ＵＲＬ生成部、２２  データ変換部、２４  テンプレート、２６  テンプレート解析部、２８  マッチング処理部、３０  ディレクトリ・テンプレート要素対応表、３４  流し込み処理部、３６  変換結果。
【図１】
2007156965.tif 000003
【図２】
2007156965.tif 000004
【図３】
2007156965.tif 000005
【図４】
2007156965.tif 000006
【図５】
2007156965.tif 000007
【図７】
2007156965.tif 000008
【図８】
2007156965.tif 000009
【図１２】
2007156965.tif 000010
【図１３】
2007156965.tif 000011
【図１４】
2007156965.tif 000012
【図１５】
2007156965.tif 000013
【図１６】
2007156965.tif 000014
【図１７】
2007156965.tif 000015
【図１９】
2007156965.tif 000016
【図２２】
2007156965.tif 000017
【図２３】
2007156965.tif 000018
【図２４】
2007156965.tif 000019
【図２５】
2007156965.tif 000020
【図２６】
2007156965.tif 000021
【図２７】
2007156965.tif 000022
【図６】
2007156965.tif 000023
【図９】
2007156965.tif 000024
【図１０】
2007156965.tif 000025
【図１１】
2007156965.tif 000026
【図１８】
2007156965.tif 000027
【図２０】
2007156965.tif 000028
【図２１】
2007156965.tif 000029