(57)【要約】【課題】ＸＭＬ文書の表示文書上に指定された挿入位置を基に、当該ＸＭＬ文書への新たな要素を挿入することができる方法および装置を提供する。【解決手段】第１の文書を第２の文書を用いて変換した結果得られる表示文書を表示し、表示文書中の第１の表示要素の子要素あるいは兄弟要素となる新たな表示要素を挿入するために、少なくとも第１の表示要素が指定されたら、第２の文書から新たな表示要素を生成し得る第１の命令文を検索し、第１の命令文あるいは当該第１の命令文により発生した表示要素を生成するための分岐処理の対象となる第１の文書中の第１の要素の子要素あるいは兄弟要素であって、第１の命令文で指定される条件を満たす新たな要素を生成する。【選択図】    図１
2004272684.tif 000002
【特許請求の範囲】
【請求項１】
複数の要素を含む第１の文書と、当該複数の要素のいずれかに対応して生成される複数の表示要素を含む表示文書に変換するための複数の命令文を含む第２の文書を記憶する記憶手段と、
前記第１の文書を前記第２の文書を用いて前記表示文書に変換する変換手段と、
前記表示文書を表示する第１の表示手段と、
この第１の表示手段で表示された前記表示文書中の複数の表示要素のうちの１つである第１の表示要素の子要素あるいは兄弟要素となる新たな表示要素を挿入するために、少なくとも前記第１の表示要素を指定する指定手段と、
前記第２の文書から、前記新たな表示要素を生成し得る第１の命令文を検索する検索手段と、
前記第１の命令文あるいは当該第１の命令文により発生した前記表示要素を生成するための分岐処理の対象となる前記第１の文書中の前記複数の要素のうちの１つである第１の要素の子要素あるいは兄弟要素であって、前記第１の命令文で指定される条件を満たす新たな要素を生成する生成手段と、
この生成手段で生成された新たな要素を、前記第１の文書中に挿入する挿入候補として表示する第２の表示手段と、
この第２の表示手段で表示された挿入候補のうち、選択された挿入候補を前記第１の文書に挿入する挿入手段と、
を具備したことを特徴とする文書編集装置。
【請求項２】
前記変換手段で前記第１の文書を前記表示文書に変換する際には、前記第２の文書中の複数の命令文の実行順序に従って、各命令文と当該命令文の対象となった前記第１の文書中の要素との対応関係と、前記複数の命令文のうち前記分岐処理を発生する命令文により発生された当該分岐処理と当該分岐処理の対象となる前記第１の文書中の要素との対応関係と、当該分岐処理により生成される各表示要素と当該表示要素を生成した当該分岐処理中に実行される命令文との対応関係を変換ログとして記録する記録手段と、
をさらに具備し、
前記検索手段は、前記変換ログを参照して、前記第１の表示要素の子要素あるいは兄弟要素となる前記新たな表示要素を生成する、前記第２の文書中の第１の命令文を検索することを特徴とする請求項１記載の文書編集装置。
【請求項３】
前記新たな要素を前記第２の表示手段で挿入候補として表示するときには、前記第１の文書をコピーした仮文書中に当該新たな要素を挿入し、当該新たな要素の挿入された仮文書を前記第２の文書で変換した結果得られた表示文書をプレビューとして表示し、
当該新たな要素が前記第１の文書に挿入すべき挿入候補として選択されたときに、前記挿入手段で前記第１の文書中に挿入されることを特徴とする請求項１記載の文書編集装置。
【請求項４】
前記指定手段は、
前記新たな表示要素の挿入位置を入力する入力手段と、
前記挿入位置を基に、前記第１の表示要素と、前記新たな表示要素が当該第１の表示要素の子要素であるか兄弟要素であるかを決定する手段と、
を具備したことを特徴とする請求項１記載の文書編集装置。
【請求項５】
前記検索手段は、
前記変換ログ中の前記第１の表示要素を生成する前記第２の文書中の第２の命令文が実行されたときを基点として、前記新たな表示要素を生成する分岐処理の前記変換ログ中の挿入位置を求めるとともに、当該新たな分岐処理を発生させる前記第１の命令文を求めることを特徴とする請求項２記載の文書編集装置。
【請求項６】
複数の要素を含む第１の文書と、当該複数の要素のいずれかに対応して生成される複数の表示要素を含む表示文書に変換するための複数の命令文を含む第２の文書を記憶手段に記憶するステップと、
前記第１の文書を前記第２の文書を用いて前記表示文書に変換する変換ステップと、
前記表示文書を表示する第１の表示ステップと、
この第１の表示ステップで表示された前記表示文書中の複数の表示要素のうちの１つである第１の表示要素の子要素あるいは兄弟要素となる新たな表示要素を挿入するために、少なくとも前記第１の表示要素を指定する指定ステップと、
前記第２の文書から、前記新たな表示要素を生成し得る第１の命令文を検索する検索ステップと、
前記第１の命令文あるいは当該第１の命令文により発生した前記表示要素を生成するための分岐処理の対象となる前記第１の文書中の前記複数の要素のうちの１つである第１の要素の子要素あるいは兄弟要素であって、前記第１の命令文で指定される条件を満たす新たな要素を生成する生成ステップと、
この生成ステップで生成された新たな要素を、前記第１の文書中に挿入する挿入候補として表示する第２の表示ステップと、
この第２の表示手段で表示された挿入候補のうち、選択された挿入候補を前記第１の文書に挿入する挿入ステップと、
を有することを特徴とする文書編集方法。
【請求項７】
複数の要素を含む第１の文書と、当該複数の要素のいずれかに対応して生成される複数の表示要素を含む表示文書に変換するための複数の命令文を含む第２の文書を記憶手段に記憶するステップと、
前記第１の文書を前記第２の文書を用いて前記表示文書に変換する変換ステップと、
前記表示文書を表示する第１の表示ステップと、
この第１の表示ステップで表示された前記表示文書中の複数の表示要素のうちの１つである第１の表示要素の子要素あるいは兄弟要素となる新たな表示要素を挿入するために、少なくとも前記第１の表示要素を指定する指定ステップと、
前記第２の文書から、前記新たな表示要素を生成し得る第１の命令文を検索する検索ステップと、
前記第１の命令文あるいは当該第１の命令文により発生した前記表示要素を生成するための分岐処理の対象となる前記第１の文書中の前記複数の要素のうちの１つである第１の要素の子要素あるいは兄弟要素であって、前記第１の命令文で指定される条件を満たす新たな要素を生成する生成ステップと、
この生成ステップで生成された新たな要素を、前記第１の文書中に挿入する挿入候補として表示する第２の表示ステップと、
この第２の表示手段で表示された挿入候補のうち、選択された挿入候補を前記第１の文書に挿入する挿入ステップと、
をコンピュータに実行させる文書編集プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば、ＸＭＬ文書をＸＳＬＴ文書で変換した結果得られた表示文書を介して、当該ＸＭＬ文書中に新たな要素を挿入するいう編集を行うための方法、装置およびプログラムに関する。
【０００２】
【従来の技術】
ＸＭＬ文書はデータをツリー構造で記述するので、表形式のワークシートやリレーショナルデータベースと比較して、柔軟なデータ構造を定義できる。
【０００３】
また、テキスト形式の文法が標準で定められているので、ユーザが直接テキスト形式のデータを編集することも可能である。しかし、人間の可読性が確保されているとはいえ、ＸＭＬ文書に格納されている情報を把握しやすいとはいえない。開始タグと終了タグの対応を確認したり、無用にテキスト表記が長くなり一覧性が悪いからである。
【０００４】
テキスト形式ではなく、ツリー形式で表示した場合も同じである。データ構造には各種の意味があるにも関わらず、それらを一律に同じツリー形式で表示すると、ひと目で簡単にそれらの意味を区別できないからである。
【０００５】
ＸＭＬデータを編集するには、（１）一般のテキストエディタを用いる、（２）あるデータ専用の編集アプリケーションを用いる、（３）汎用のＸＭＬデータ編集アプリケーションを用いる、といった手法がある。
【０００６】
専用アプリケーションでは、表示方法や編集方法をデータに合わせて作りこむことが可能なので、使いやすくかつ動作速度等の効率も良い。しかし、ＸＭＬ文書は柔軟にデータ構造を設計できることが特徴であり、個人が容易にデータを扱う際のフォーマットとして用いるにも適している。これらのデータ構造は千差万別であり、各々に合わせた専用アプリケーションを作るには高度なプログラミング技術が必要である。
【０００７】
また、汎用のＸＭＬデータ編集アプリケーションは、一般にそのアプリケーションが提供する表示形式上でデータを編集するものであり、多くはツリー形式またはテーブル形式に変換して表示するものである。
【０００８】
スタイルシートを用いると、データを変換して様々な表示ができる。ＸＭＬ文書の構造を変換するスタイルシートの技術として、ＸＳＬＴが標準として規定されている。ＸＳＬＴを用いると、高度なプログラミング技術を必要とせず比較的容易に表示形式を変えることができる。また、単純にＸＭＬの要素をＨＴＭＬの要素に変換するだけでなく、文書の構造を変換することにより、不要なデータを表示しない形式や比較したいデータや同時に見たいデータを隣接させて表示する形式など、作業に合わせた表示が可能である。
【０００９】
ＸＳＬＴ変換後のＨＴＭＬの表示上で元ＸＭＬデータを編集するには、ＨＴＭＬノードと元ＸＭＬデータのノードとの対応関係を保持する必要がある。
【００１０】
ＸＭＬ文書をＸＳＬＴ文書で変換して、ＨＴＭＬの表示文書を介して元ＸＭＬ文書を編集するために、元ＸＭＬノードの情報を表示ノードに埋め込むというものがある（例えば、非特許文献１参照）。
【００１１】
ＸＳＬＴ変換後のＨＴＭＬの表示上で新たなデータを追加する場合、元ＸＭＬデータにも新たな要素や属性を挿入する。要素を挿入するには、挿入の基準となる要素と挿入方向の指定が必要である。しかし、それらの情報は元ＸＭＬデータの構造に関する情報であり、それらをユーザがＸＳＬＴ変換後のＨＴＭＬ上で把握することは容易ではない。なぜなら、変換後の表示上では要素名や属性名が直接表示されているとは限らず、また、元ＸＭＬデータのツリー構造と変換後のＨＴＭＬのツリー構造が異なる場合があるからである。
【００１２】
既存のＸＭＬ文書編集においても、要素名や属性名を直接入力しなくて済むように、メニュー形式で挿入候補を選択できるものは存在した。例えば、ノードの種類で分類して、選択メニューに全てのノードをリスト表示するものや、スキーマや型定義に適合するようにリスト表示するノードを制限するものがある。
【００１３】
しかし、それらは元ＸＭＬデータ上でツリー構造や挿入位置を意識する必要があることに変わりない。
【００１４】
【非特許文献１】
矢尾他，“表示スタイル変更可能なＷｅｂトップＸＭＬエディタ”，情報処理学会研究報告  ２００２−ＤＤ−３６，Ｖｏｌ．２００２  Ｎｏ．１１６，ｐｐ．１７−２４，Ｎｏｖ．２００２
【００１５】
【発明が解決しようとする課題】
本来、スタイルシートにより構造を変換して表示する場合、画面上でデータが表示される位置によって、そのデータの意味をユーザが把握できるように変換・表示する。そのような表示の上では、ユーザは各データの値を保持している要素名や属性名等を意識せずにデータの意味を把握できる。
【００１６】
しかし新規データの挿入のように、元ＸＭＬデータの構造の変更を伴う編集を行う際には、ユーザは変換後のＨＴＭＬのツリー構造を見ているにもかかわらず、元ＸＭＬデータの構造を意識して挿入位置と挿入ノードを指定する必要があった。
【００１７】
このように、従来は、ＸＭＬ文書などの所定の文書構造を有する構造化文書はスタイルシートを用いて変換した結果得られる表示文書を介して表示されるため、表示文書を介して編集する場合には、表示文書の文書構造と、その元のＸＭＬ文書との文書構造が異なるために、特に、ＸＭＬ文書に新たな要素を挿入するという編集が、表示文書上で容易に行えないという問題点があった。
【００１８】
そこで、本発明は、ＸＭＬ文書などの所定の文書構造を有する構造化文書をスタイルシートを用いて変換した結果得られる表示文書の表示画面上で、所望の新たな表示要素の挿入位置を指定するだけで、当該表示文書上の挿入位置に当該新たな表示要素を生成する新たな要素をＸＭＬ文書中に挿入することのできる文書編集方法、装置およびプログラムを提供することを目的とする。
【００１９】
【課題を解決するための手段】
本発明は、（ａ）複数の要素を含む第１の文書と、当該複数の要素のいずれかに対応して生成される複数の表示要素を含む表示文書に変換するための複数の命令文を含む第２の文書を記憶手段に記憶し、（ｂ）前記第１の文書を前記第２の文書を用いて前記表示文書に変換して当該表示文書を表示し、（ｃ）表示された前記表示文書中の複数の表示要素のうちの１つである第１の表示要素の子要素あるいは兄弟要素となる新たな表示要素を挿入するために、少なくとも前記第１の表示要素を指定し、（ｄ）前記第２の文書から、前記新たな表示要素を生成し得る第１の命令文を検索し、（ｅ）前記第１の命令文あるいは当該第１の命令文により発生した前記表示要素を生成するための分岐処理の対象となる前記第１の文書中の前記複数の要素のうちの１つである第１の要素の子要素あるいは兄弟要素であって、前記第１の命令文で指定される条件を満たす新たな要素を生成し、（ｆ）この生成された新たな要素を、前記第１の文書中に挿入する挿入候補として表示し、（ｇ）表示された挿入候補のうち、選択された挿入候補を前記第１の文書に挿入することを特徴とする。
【００２０】
本発明によれば、ＸＭＬ文書などの所定の文書構造を有する第１の文書をスタイルシート（第２の文書）を用いて変換した結果得られる表示文書（例えば、ＨＴＭＬ文書）の表示画面上で、所望の新たな表示要素の挿入位置を指定するだけで、当該表示文書上の挿入位置に当該新たな表示要素を生成する新たな要素を第１の文書中に挿入することができる。
【００２１】
【発明の実施の形態】
以下、本発明の実施形態について図面を参照して説明する。
【００２２】
なお、以下の説明では、編集対象データがＸＭＬ文書、変換手続きを記述したスタイルシートがＸＳＬＴ（Ｅｘｔｅｎｓｉｂｌｅ  Ｓｔｙｌｅｓｈｅｅｔ  ｌａｎｇｕａｇｅ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ）文書の場合を例にとり説明し、ＸＭＬ文書をＸＳＬＴ文書の記述に従い変換した結果の文書（表示データ）を表示文書と呼び、表示文書として、ＨＴＭＬ文書やＳＶＧ文書が生成される場合を例にとり説明する。また、各文書内のノード（要素）を「ＸＭＬノード」、「ＸＳＬＴノード」、「表示ノード」と呼ぶ。
【００２３】
（第１の実施形態）
図１は、第１の実施形態にかかるＸＭＬ文書編集装置の構成例を示したもので、表示部１、入力部２、文書記憶部３、変換処理部４、中間記憶部５、コンテキスト検索部６、分岐検索部７、挿入候補生成部８、候補選択部９、およびデータ更新部１０から構成される。
【００２４】
文書記憶部３は編集対象のＸＭＬ文書と、変換手順を記述したＸＳＬＴ文書を保持する。
【００２５】
変換処理部４は、編集対象のＸＭＬ文書をＸＳＬＴ文書の記述に従い表示文書に変換して、表示文書および変換ログを生成し、これらを中間記憶部５に記憶する。
【００２６】
表示文書は、変換処理の結果の文書である。ＸＳＬＴ文書は、ＸＭＬ文書を表示するための表示データ（ＨＴＭＬ文書、ＳＶＧ文書）を生成するための変換規則が記述されている。
【００２７】
変換ログには、変換処理部４の処理過程で実行されたＸＳＬＴノードの順に、当該ＸＳＬＴノードと、当該ＸＳＬＴノードに対応するＸＭＬノード（すなわちカレントノード）と、当該ＸＳＬＴノードで出力された表示ノードの対応関係を記録したものである。
【００２８】
ここでは、例えば、図２に示すようなＸＭＬ文書を図３に示すＸＳＬＴ文書を用いて図４に示すような表示文書に変換する場合を例にとり、本実施形態に係るＸＳＬＴ文書と変換ログについて簡単に説明する。なお、この例における変換ログの一例を図６に示す。また、図２〜図４のそれぞれにおいて、左端の番号（例えば、１：、２：、…）は、各文書内の要素のそれぞれを特定するための識別子として用いられる番号（ノード番号）で、各要素の各文書中での出現順に振られている。また、図６の変換ログの各エントリ（１行の記録情報）の左端の番号（例えば、１：、２：、…）は、各エントリを識別するための識別子であり、変換処理における処理順を表す番号（エントリ番号）でもある。また、図５は、図４に示した表示文書を描画して表示部１に表示した例を示したものである。
【００２９】
ＸＳＬＴ文書に記述されている、ＸＭＬ文書を表示文書に変換するための変換規則とは、▲１▼与えられたＸＭＬ文書中のどのノードを変換元とし、▲２▼変換先の表示文書にどのようなノードを生成・付加するのかを指定したものである。この２つを指定するために、ＸＳＬＴでは、「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素が用いられる。上記▲１▼の指定は、当該要素の「ｍａｔｃｈ」属性で指定される。すなわち、「ｍａｔｃｈ」属性により、ＸＭＬ文書中の処理対象とする要素の条件を指定するようになっている。また、上記▲２▼の指定、すなわち、ＸＭＬ文書中の「ｍａｔｃｈ」属性で指定される条件を満たす要素に対して生成される表示文書のノードが、「ｘｓｌ：ｔｅｍｐｌａｔｅ」タグで囲まれた部分に記述されている。「ｘｓｌ：ｔｅｍｐｌａｔｅ」タグで囲まれた部分には、表示文書上でのノードを生成（変換）するための処理手順が記述されている、とも云える。
【００３０】
そして、変換先の表示データに構造を持たせるために、「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」要素を用いる。
【００３１】
図３のＸＳＬＴ文書で記述されている、ノード番号「１」の「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素では、「ｂｏｏｋｓ」を含むＸＭＬ文書中の要素に対し、表示データ上の「ＴＡＢＬＥ」要素を生成させている。「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素の中では、図３のノード番号「３」の「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」要素により、ＸＭＬ文書中の「ｂｏｏｋｓ」を含む要素の子要素のうち、「ｓｅｌｅｃｔ」属性で指定された条件を満たす要素（すなわち、例えば「ｂｏｏｋ」を含む要素）を、別の「ｘｓｌ：ｔｅｍｐｌａｔｅ」要素（ノード番号「４」の要素）を用いて変換した結果を＜ＴＡＢＬＥ＞＜／ＴＡＢＬＥ＞の間に埋め込むようになっている。
【００３２】
上記の「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令は、「ｓｅｌｅｃｔ」属性により指定された条件を満たすノードに対して、指定した処理手順（ノードを生成するための処理もあれば、ノードを生成しない処理の場合もある）を実行する命令であり、この命令の場合、条件を満たすノードが複数あれば、そのノードの数だけ、上記指定した処理手順を繰返し実行することとなる。
【００３３】
ＸＳＬＴには、「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令の他にも、「ｘｓｌ：ｉｆ」命令が定義されており、この命令では、「ｔｅｓｔ」属性で指定された条件を満たすときには、カレントノードに対し指定した処理手順（ノードを生成するための処理もあれば、ノードを生成しない処理の場合もある）を実行するものである。この「ｘｓｌ：ｉｆ」命令の場合、この指定した処理手順は１回のみ実行される。
【００３４】
このように、ＸＭＬ文書中の指定した条件を満たすノードに対し、表示データ上のノードを生成するための所定の処理に移行して、当該所定の処理を１回のみ、あるいは複数回繰返して実行する命令をここでは、分岐命令と呼ぶ。また、ここでは、所定の処理（分岐処理）に移行することを分岐するとも呼ぶ。
【００３５】
「ｘｓｌ：ｉｆ」命令や、「ｘｓｌ：ｃａｌｌ−ｔｅｍｐｌａｔｅ」命令のように、１回のみ所定の処理を実行する分岐命令を単純分岐命令と呼び、「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令のように、ＸＭＬ文書中に存在する条件を満たすノードの数だけ、所定の処理の実行を繰り返す分岐命令を繰返し命令と呼ぶ。繰返し命令には、「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令の他、「ｘｓｌ：ｆｏｒ−ｅａｃｈ」命令、「ｘｓｌ：ｖａｌｕｅ−ｏｆ」命令などがある。
【００３６】
なお、変換ログについてのさらなる説明は後述する。
【００３７】
図１の説明に戻り、表示部１は、編集画面を表示するユーザインタフェースである。ＸＭＬ文書編集装置が動作する計算機のディスプレイ装置がこれにあたる。編集画面には変換処理部４で生成された表示文書を表示規則に従い描画する。例えば表示文書がＨＴＭＬ文書の場合にはＨＴＭＬのレンダリングを行う。また、編集画面には各種の編集メニューが表示される。
【００３８】
入力部２は、ユーザの操作を受けるユーザインタフェースである。マウスに代表されるポインティングデバイスがこれにあたる。以下の各編集操作において、ユーザが編集画面内で表示文書上の表示ノードまたは編集メニュー上の機能を選択する際に使用される。
【００３９】
コンテキスト検索部６は、表示文書上での新たな表示ノードの挿入位置（表示ノードと当該表示ノードと新たな表示ノードとの位置関係）を入力部２から受け、変換ログを参照して、当該挿入位置として指定された表示ノードを基に、当該表示ノードに対応する変換ログ中のログエントリ、カレントノード、ＸＳＬＴノードを特定する。
【００４０】
分岐検索部７は、ユーザにより挿入位置として指定された表示ノードと位置関係を基に、コンテキスト検索部６で特定された、ログエントリとカレントノードとＸＳＬＴノードをコンテキストを受け取り、指定された挿入位置に新たな表示ノードを生成するＸＳＬＴ文書中の分岐命令を求める。そして、この求めた分岐命令を挿入候補生成部８に送る。
【００４１】
挿入候補生成部８は、分岐検索部７で求めた分岐命令中の条件（条件式）を解析する。その条件を満たすような、編集対象のＸＭＬ文書への挿入候補を生成し、その挿入候補のＸＭＬ文書中での挿入位置を決定する。
【００４２】
候補選択部９は、挿入候補生成部８で生成された挿入候補を全て受け取ると、挿入候補の選択メニューを表示部１に出力する。そして入力部２を介してユーザが指定した挿入候補を選択する。
【００４３】
データ更新部１０は、候補選択部９で選択された挿入候補を、編集対象のＸＭＬ文書中の当該挿入候補の挿入位置に挿入する。
【００４４】
［ＸＭＬ文書編集装置の処理動作］
図１のＸＭＬ文書編集装置の処理動作の概略を図７のフローチャートを参照して説明する。
【００４５】
（ステップＳ１）変換処理部４において、ＸＭＬ文書をＸＳＬＴ文書を用いて表示文書に変換する。この変換処理の実行経過を変換ログとして記録する。変換ログには、ＸＳＬＴ文書中の各分岐命令により分岐が発生したとき（変換ログ上の分岐位置）とその分岐による分岐処理の内容が、一連の変換処理の実行経過の中でどこにあるかが容易に理解可能なように記録されている。
【００４６】
（ステップＳ２）表示文書を表示部１に描画する。
【００４７】
（ステップＳ３）表示部１により表示された当該表示文書の表示画面上で、ユーザにより、（新たな表示データを挿入するための）挿入位置が指定される。なお、ここでは、現在の表示文書中に存在しない表示ノードの挿入位置が指定されるのであるが、この新たな表示ノードの挿入位置を指定するためには、例えば、表示画面上の表示領域（表示ノード）と、当該表示ノードと新たな表示データとの位置関係とを指定する。
【００４８】
例えば、表示画面上に表示されたテーブル上のある１つのセル内にデータを挿入しようとする場合、セルを表示する表示ノード（例えば、「ＴＤ」要素）とその中に表示されるデータを表示する新たな表示ノードとの表示文書上の位置関係は包含関係にある（新たな表示ノードは、セルを表示する表示ノードの子ノードに対応する）。このような位置関係をここでは「ｃｈｉｌｄ」と呼ぶ。また、表示画面上に表示されたテーブル上のある１つのセルの後や、ある行の後などにデータを挿入しようとする場合、セルや行を表示する表示ノード（例えば、「ＴＤ」要素、「ＴＲ」要素）とその後に表示される新たな表示ノードは、（木構造上の同じ階層にあるノードであり、従って、表示文書上の位置関係は兄弟関係にある。このような位置関係をここでは「ｎｅｘｔ」あるいは「ｎｅｘｔＳｉｂｌｉｎｇ」と呼ぶ。
【００４９】
このように、ユーザは、挿入位置として、表示ノードを指定するとともに当該指定した表示ノードとの位置関係を指定する。
【００５０】
（ステップＳ４）コンテキスト検索部６では、変換ログを参照して、表示画面上で挿入位置として指定された表示ノードを生成した、ログエントリ、すなわち、当該指定された表示ノードを生成した、ＸＳＬＴ文書中のノード（ＸＳＬＴノード）とＸＭＬ文書中のノード（ＸＭＬノード）すなわちカレントノードを求める。
【００５１】
（ステップＳ５）分岐検索部７では、変換ログ中から求めたログエントリを基点として、挿入位置として指定された位置関係を基に、当該指定された挿入位置に新たな表示ノードを生成するようなＸＳＬＴ文書中の分岐命令を求める。なお、この分岐命令は、１つまたは複数存在する場合もあるが、それらを全て求める。また、ここでは、新たな表示ノードを生成する可能性のある新たな分岐処理の挿入位置（変換ログ中の基準となるエントリと当該エントリと新たな分岐処理との位置関係）を変換ログから求めることにより、当該分岐処理を発生させる分岐命令を求める。
【００５２】
（ステップＳ６）挿入候補生成部８では、この求めた１つまたは複数の分岐命令のそれぞれについて、当該分岐命令の処理対象となる、当該各分岐命令の条件を満たすＸＭＬ文書中のＸＭＬノードの候補（挿入候補）を生成する。このとき、当該挿入候補のＸＭＬ文書中の挿入位置（分岐検索部７で検索された分岐命令あるいは当該分岐命令により発生した分岐処理の対象となるＸＭＬ文書中のＸＭＬノードと、当該ＸＭＬノードと挿入候補との位置関係）は、分岐検索部７で検索されたエントリと、当該エントリと新たな分岐処理との位置関係に対応する。但し、挿入候補が属性ノードの場合には、上記位置関係は必要ではなく、ＸＭＬ文書中のどのＸＭＬノードに挿入すればよいかがわかればよい。従って、この場合には、分岐検索部７で検索された分岐命令あるいは当該分岐命令により発生した分岐処理の対象となるＸＭＬ文書中のＸＭＬノードが当該挿入候補の挿入位置となる。
【００５３】
（ステップＳ７〜ステップＳ８）候補選択部９では、挿入候補生成部８で生成された各挿入候補に対応する表示ノードを表示画面上に追加表示するなどして、生成された複数の挿入候補をユーザに提示し、この生成された複数の挿入候補のなかから１つをユーザに選択してもらうための選択画面を生成し、それを表示する。
【００５４】
（ステップＳ９〜ステップＳ１０）提示した挿入候補のうち、ユーザにより選択された挿入候補を、データ更新部１０がＸＭＬ文書に挿入する（ＸＭＬ文書の更新）。
【００５５】
次に、図１の変換処理部４、変換ログ、コンテキスト検索部６、分岐検索部７、挿入候補生成部８、候補選択部９について詳細に説明する。
【００５６】
［変換ログ］
変換ログには、変換処理の過程で実行されたＸＳＬＴノードと、当該ＸＳＬＴノードに対応するＸＭＬノード（すなわちカレントノード）と、当該ＸＳＬＴノードで出力された表示ノードがあるときは当該表示ノードとの対応関係を記録する。変換ログの構成は様々な形態をとり得る。
【００５７】
図６は、変換ログの一例を示したものである。この例は、変換処理においてＸＳＬＴノードが実行された順にエントリを作成し、実行されたＸＳＬＴノード、およびそのＸＳＬＴノードの実行時のカレントノード、およびそのＸＳＬＴノードの実行時に出力された表示ノードのそれぞれの識別子を、そのエントリに格納する形態である。
【００５８】
変換ログ内で記録する各ノードの識別情報（識別子）の形態として、ノードが属する文書内での位置を記録する形態（第１の形態）がある。図６では、各ノードの識別情報として、各ノードの文書内での出現順序を表す番号を使用している。これは図２および図３で示したＸＭＬ文書、ＸＳＬＴ文書の左側に付加した各ノードの番号に対応している。なおこの例では、属性を表す属性ノードを含めずに出現順序を数えている。したがって、属性ノードの位置を示す場合には、出現順序＋属性名の形式で識別情報を記録している。
【００５９】
各ノードの識別情報の他の形態として、文書ルートから指定ノードまでの経路上のノードについて、各レベル内での位置を順に記述する形態（第２の形態）が可能である。例えば、図２のＸＭＬ文書のノード番号「８」（２番目の「ｂｏｏｋ」要素の「ｔｉｔｌｅ要素」のノード位置は、最上位のレベルでノード番号「１」のノード（「ｂｏｏｋｓ」要素）の２つの子ノードのうち、２番目の子ノード（「ｂｏｏｋ」要素）の１番目の子ノードである。これをＸＰａｔｈ（ＸＭＬ  Ｐａｔｈ  Ｌａｎｇｕａｇｅ）の表記方法に従って記述すると次のようになる。
“／ｎｏｄｅ（）［１］／ｎｏｄｅ（）［２］／ｎｏｄｅ（）［１］”
さらに、次のように記法を省略して、ログのサイズを小さくすることもできる。    “１．２．１”
第２の形態の利点は、文書内での出現順序を用いる形態に比べて、位置情報の計算およびノードの特定の処理量が小さくて済む点である。
【００６０】
また、ノードの識別情報として可読なテキスト形式で記録する必要がなく、各ノードが個別のオブジェクトに格納されている場合には、各ノードの識別情報としてノードオブジェクトへの参照を記録する形態（第３の形態）も可能である。
【００６１】
変換ログは各エントリに対応する各種ノードの識別情報以外に、分岐命令により実行された処理（分岐処理）に対応する履歴（分岐処理の実行系列）である、実行系列の動的分岐構造情報を保持する。実行系列全体は、分岐処理の実行系列を単位として入れ子構造を成す。動的分岐構造情報には、この入れ子構造と、各エントリがどの実行系列に属するかを示す情報が含まれる。この情報から、各エントリに対応する処理が実行された実行系列、テンプレートをインスタンス化した「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令、「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令や「ｘｓｌ：ｆｏｒ−ｅａｃｈ」命令等の繰返し処理を行う命令において各繰返し処理の範囲を特定することができる。
【００６２】
図６に示した変換ログでは、動的分岐構造情報として、分岐処理の実行系列の入れ子構造を字下げで表現している。すなわち、分岐命令に対応するエントリを親ノード、当該分岐命令により発生した分岐、すなわち、分岐処理は、その子ノードとして記録されている。さらに、各分岐処理中に実行するＸＳＬＴの命令に対応するエントリも、当該分岐処理に対応するエントリの子ノードとして記録されている。従って、図６に示した変換ログは、ツリー状の構造をもち、この木構造上の子ノードと親ノードとの関係から、どの分岐処理がどの分岐命令により発生したものであるか、各分岐処理において、どのような命令が実行されているかが容易にわかるようになっている。
【００６３】
図６では、分岐が生じた場合、分岐命令の実行に対応するエントリの子供として、「ｂｒａｎｃｈ」エントリという特別なエントリを変換ログに記録する。分岐処理中に実行された命令に対応するエントリは、「ｂｒａｎｃｈ」エントリの子供として記録する。
【００６４】
分岐命令が繰返し命令の場合、当該繰返し命令の処理対象となるノードの条件を指定する、例えば「ｓｅｌｅｃｔ」属性に指定されたパス表現にマッチするノード毎に分岐が生じるので、その分岐処理（この場合、繰返し処理）毎に「ｂｒａｎｃｈ」エントリを記録する。
【００６５】
各「ｂｒａｎｃｈ」エントリに対応するカレントノードは、繰返し命令実行時のカレントノードではなく、テンプレートをインスタンス化した後のカレントノードとする。すなわち、分岐命令中の条件を満たす処理対象のノードが、「ｂｒａｎｃｈ」エントリに対応するカレントノードとして記録される。
【００６６】
例えば図６では、変換ログのエントリ番号「５」のエントリに対応する「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令では、条件「ｂｏｏｋ」にマッチする要素について繰返し処理を行う。図２のＸＭＬ文書では、「ｂｏｏｋ」にマッチする要素はノード番号「２」および「７」の「ｂｏｏｋ」要素のみである。この「ｂｏｏｋ」要素についての繰返し処理を記録しているのが、図６の変換ログのエントリ番号「６」および「１７」の「ｂｒａｎｃｈ」エントリである。
【００６７】
変換ログの別の形態として、１個のログに全ての情報を記録するのではなく、複数の対応表に分割する形態も可能である。変換ログには対応するＸＳＬＴノードおよび表示ノードの識別情報を記録せず、変換ログとは別に表示ノードとログエントリとの対応表と、ＸＳＬＴノードとログエントリとの対応表を生成する形態が可能である。
【００６８】
変換ログのさらに別の形態として、表示ノードに対応するログエントリやＸＳＬＴノードの識別情報を直接表示文書中の表示ノードに埋め込む形態も可能である。図８に、この形態の表示文書の一例を示す。この例では、表示ノードに対応するログエントリの識別情報を、特別な名前空間に属する属性「ｅｄ：ｌｏｇ」の値として表示ノード自体に埋め込んでいる。
【００６９】
変換ログのさらに別の形態として、ＸＭＬの文法にしたがう形態も可能である。図９に、この形態の変換ログの記述例を示す。この例は、図６に示した形態の変換ログの各エントリをＸＭＬの要素とし、各エントリに対応するＸＳＬＴノード、カレントノード、表示ノードの識別情報を属性として表現している。また、図６に示した形態で字下げによって表していた動的な分岐構造を、ＸＭＬのツリー構造で表現している。
【００７０】
［挿入位置指定］
変換処理部４で表示文書を生成すると、その表示文書を表示部１に表示して、ユーザの操作待ちになる。ここで、表示部１および入力部２を介して、ユーザが表示文書上で挿入位置を指定する。
【００７１】
図２に示すようなＸＭＬ文書を図３に示すＸＳＬＴ文書を用いて図４に示すような表示文書に変換される。図４に示した表示文書の表示例を図５に示す。表示部１には、図４に示したように、表示文書が描画されており、挿入位置（表示ノードと位置関係）を指定する手段を提供する。
【００７２】
図７のステップＳ３において、ユーザは、マウスポインタをある表示ノードの表示領域上に移動してクリックする。また、ある表示ノードの表示領域の内部や枠の色を一時的に変更してフォーカスがあたっていることを示し、カーソルキーでフォーカスを別の表示ノード（表示領域）に移動して決定キー（例えばエンターキー）で挿入位置を決定する形態も可能である。
【００７３】
ユーザが表示ノードを決定すると、次に当該表示ノードと新たな表示ノードとの位置関係の指定を行う。位置関係には、少なくとも、前述したように、「ｃｈｉｌｄ」と「ｎｅｘｔ」の２種類が選択可能であることが好ましい。
【００７４】
例えば、図１０（ａ）に示すように、挿入位置として、テーブルの右下の空欄のセルの表示領域が指定されたとする。この時点で表示部１に、位置関係を指定するためのメニューを表示し、メニュー内に各位置関係を表す領域を用意する。ユーザがマウスポインタを各領域に移動すると、その領域に対応する位置関係を指定したと判断する。また、挿入位置の指定と同様に、カーソルキーを用いてフォーカスを各領域に移動して位置関係を指定する形態も可能である。こうして得られた挿入位置としての表示ノードと位置関係はコンテキスト検索部６へ渡される。
【００７５】
例えば、図７のステップＳ３において、図１０（ａ）に示すように、ユーザが、挿入位置として、テーブルの右下の空欄のセルの表示領域を指定し、位置関係として、図１０（ｂ）に示したように、「ｃｈｉｌｄ」を指定したとする。
【００７６】
［コンテキスト検索部］
コンテキスト検索部６では、挿入位置として指定された表示ノードと位置関係を受けると、当該表示ノードを生成した変換ログのエントリ、カレントノード、ＸＳＬＴノードを特定する。
【００７７】
変換ログが、図６の形態の場合、まず挿入位置として指定された表示ノードの識別情報を取得する。この形態では、表示文書内でのノードの出現順序を計算する。次に取得した識別情報と一致する表示ノードの識別情報を持つエントリを変換ログから検索して特定する。
【００７８】
図８に示したように、表示文書に、変換ログのエントリ番号が埋め込まれている形態の場合、挿入位置として指定された表示ノードに埋め込まれたエントリの識別情報（ここでは、エントリ番号）を取得して、その識別情報に対応する変換ログのエントリを特定すればよい。
【００７９】
次に、特定されたエントリに記録された各ノードの識別情報を取得し、ＸＳＬＴ文書からＸＳＬＴノード、ＸＭＬ文書からカレントノードを特定する。
【００８０】
例えば、図１０（ａ）、（ｂ）に示すように、表示ノードとしてテーブルの右下の空欄のセルの表示領域が指定されたとき、このセルを表示する表示ノードは、図４のノード番号「１０」の表示ノードである。従って、図６に示す変換ログからは、ノード番号「１０」の表示ノードの生成は、エントリ番号「２４」のログに記録されていることがわかる。このログによれば、当該指定された表示ノードは、ノード番号「８」のＸＳＬＴノードで、ノード番号「７」のＸＭＬノードがカレントノードのときに生成されている。
【００８１】
得られた変換ログのエントリ、ＸＳＬＴノードおよびカレントノードは、挿入位置として指定された表示ノードと位置関係とともに分岐検索部７に渡される。
【００８２】
［分岐検索部］
分岐検索部７は、コンテキスト検索部６から挿入位置として指定された表示ノードＤに対応する変換ログのエントリＥ、ＸＳＬＴノードＳ、カレントノードＣを受けて、変換ログとＸＳＬＴ文書を検索して、表示ノードＤとの位置関係が挿入位置として指定された位置関係にある新たな表示ノードを生成する可能性のある新たな分岐処理の挿入位置を変換ログから求める（これを、新たな分岐処理の挿入位置を検索する、ともいう）。変換ログ中の新たな分岐処理の挿入位置が求まれば、当該分岐処理を発生させる分岐命令に対応するエントリは、変換ログ中で、当該分岐処理に対応するエントリに対応するノードのルート方向（上流方向）にあるエントリである。
【００８３】
新たな分岐処理の挿入位置の検索処理には、ＸＳＬＴ文書上で静的な階層構造を解析すると同時に、変換ログ上で動的な実行系列の入れ子構造を解析する必要がある。
【００８４】
例えば、表示ノードＤとの位置関係が「ｃｈｉｌｄ」の場合（表示ノードＤの子ノードを新たに生成する場合）、ＸＳＬＴノードＳの子ノード以外にも、表示ノードＤの子ノードを出力するＸＳＬＴノードが存在する可能性がある。ＸＳＬＴノードＳの直接の子ノードでない子孫ノードであっても、ＸＳＬＴノードＳからの各階層に出力命令を挟まない子孫ノードが出力する表示ノードは表示ノードＤの子ノードとなる。また、ＸＳＬＴノードＳからの各階層に出力命令を挟まない子孫ノードとして「ｘｓｌ：ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令や「ｘｓｌ：ｃａｌｌ−ｔｅｍｐｌａｔｅ」命令が存在する場合、インスタンス化されたテンプレート内のＸＳＬＴノードが出力する表示ノードも表示ノードＤの子孫ノードとなる。
【００８５】
表示ノードＤとの位置関係が「ｎｅｘｔ」の場合（表示ノードＤの兄弟ノードを生成する場合）、ＸＳＬＴノードＳの直後の兄弟ノード以外にも、表示ノードＤの直後の兄弟ノードを出力するＸＳＬＴノードが存在する可能性がある。例えばＸＳＬＴノードＳの直後の兄弟ノードが出力命令でない場合には、その子孫ノードを調べる必要がある。また、ＸＳＬＴノードＳの直後に兄弟ノードが存在しない場合には、ＸＳＬＴノードＳの親ノードの直後の兄弟ノードを調べる必要がある。位置関係「ｃｈｉｌｄ」の場合と同様に、別テンプレートのインスタンス化が生じた場合には、そのテンプレートも検索の対象になる。
【００８６】
［位置関係が「ｃｈｉｌｄ」と指定された場合の新たな分岐処理の挿入位置の検索］
まず、表示ノードＤとの位置関係として「ｃｈｉｌｄ」と指定された場合の分岐検索部７の処理動作について、図１１〜図１５に示すフローチャートを参照して説明する。この処理では、変換ログとＸＳＬＴ文書を同時に解析しながら、必要に応じてエントリの解析手続き（ｆｕｎｃｔｉｏｎ  ｓｅａｃｈＣｈｉｌｄ）を再帰的に呼び出す。
【００８７】
（１）検索開始
最初に、コンテキスト検索部６から受けた変換ログのエントリを引数Ｅｓに代入し、手続き  ｓｅａｒｃｈＣｈｉｌｄ  を呼び出す（図１１のステップＳ１０１）。
【００８８】
（２）ｆｕｎｃｔｉｏｎ  ｓｅａｒｃｈＣｈｉｌｄ
引数Ｅｓに対応するログエントリに含まれるＸＳＬＴノードＳ（以下、簡単にノードＳと呼ぶ）を取得し（ステップＳ１２のステップＳ１０２）、当該ＸＳＬＴノードＳの種類（繰返し命令／単純繰返し命令／分岐命令でない命令）に応じた処理を行う。
【００８９】
ノードＳが繰返し命令の場合（ステップＳ１０３）、図１３に示した処理動作を行い、ノードＳが単純分岐命令の場合（ステップＳ１０４）、図１４に示した処理動作を行う。それ以外の場合、図１５に示した処理動作を行う。
【００９０】
（３）ノードＳが繰返し命令の場合
図１３に示すように、変換ログを参照して、まず、変数Ｅｓに代入されたログエントリが子供として「ｂｒａｎｃｈ」エントリを持つかを調べる（ステップＳ１０５）。Ｅｓに代入されたログエントリが子供の「ｂｒａｎｃｈ」エントリを持つ場合、当該「ｂｒａｎｃｈ」エントリに対応する繰返し処理（分岐処理）の前後および間に新たな繰返し処理を発生させることができる。ここでは先頭の繰返し処理の前と最後の繰返し処理の後ろに新たな繰返し処理を発生させるとする。
【００９１】
先頭の繰返し処理の前に新たな繰返し処理を発生させる場合、当該新たな繰返し処理（新たなエントリ）の挿入位置として、Ｅｓに代入されたログエントリの先頭の子供の「ｂｒａｎｃｈ」エントリを表す情報（これを「Ｅｓ．ｆｉｒｓｔＣｈｉｌｄ」と表す）と、当該先頭の子供の「ｂｒａｎｃｈ」エントリと新たな繰返し処理との位置関係として、「直前の兄弟」を表す情報（これを「ｐｒｅｖｉｏｕｓＳｉｂｌｉｎｇ」と表す）とを組にして、挿入候補生成部８に送る（ステップＳ１０６）。この場合、新たな繰返し処理（分岐処理）は、現在Ｅｓに代入されているエントリに含まれるＸＳＬＴノードにより発生するので、当該ＸＳＬＴノードが、当該新たな分岐処理を発生させる分岐命令である。「Ｅｓ．ｆｉｒｓｔＣｈｉｌｄ」は、この分岐命令を含むログエントリを通知する情報「Ｅｓ」を含む情報である。
【００９２】
また、最後の繰返しの後に新たな繰返し処理を発生させる場合、当該新たな繰返し処理（新たなエントリ）の挿入位置として、Ｅｓに代入されたログエントリの最後の子供の「ｂｒａｎｃｈ」エントリを表す情報（これを「Ｅｓ．ｌａｓｔＣｈｉｌｄ」と表す）と、当該最後の子供の「ｂｒａｎｃｈ」エントリと新たな繰返し処理との位置関係として、「直後の兄弟」を表す情報（これを「ｎｅｘｔＳｉｂｌｉｎｇ」と表す）とを組にして、挿入候補生成部８に送る（ステップＳ１０７）。この場合も、新たな繰返し処理（分岐処理）は、現在Ｅｓに代入されているエントリに含まれるＸＳＬＴノード（繰返し命令）により発生しているので、当該ＸＳＬＴノードが、当該新たな分岐処理を発生させる分岐命令である。「Ｅｓ．ｆｉｒｓｔＣｈｉｌｄ」は、この分岐命令を含むログエントリを通知する情報「Ｅｓ」を含む情報である。
【００９３】
その後、Ｅｓの子供の「ｂｒａｎｃｈ」エントリ（「Ｅｓ．ｆｉｒｓｔＣｈｉｌｄ」、「Ｅｓ．ｌａｓｔＣｈｉｌｄ」）をそれぞれ引数Ｅｓとして、手続きｓｅａｒｃｈＣｈｉｌｄを再帰的に呼び出す。全ての「ｂｒａｎｃｈ」エントリについて再帰呼び出しが終了したら、Ｅｓについての再帰呼び出しを終了して元の手続きへ返る（ステップＳ１０８〜ステップＳ１１１）。
【００９４】
Ｅｓが子供の「ｂｒａｎｃｈ」エントリを持たない場合（ステップＳ１０５）、新たな繰返し処理を発生させる条件を考えればよい。すなわち、新たな繰返し処理（新たなエントリ）の挿入位置として、当該Ｅｓを表す情報「Ｅｓ」と当該Ｅｓに代入されたログエントリと新たな繰返し処理との位置関係として「子供」を表す情報（ここでは「ｃｈｉｌｄ」と表す）とを組にして、挿入候補生成部８に送る（ステップＳ１１２）。この場合も、新たな繰返し処理（分岐処理）は、現在Ｅｓに代入されているエントリに含まれるＸＳＬＴノード（繰返し命令）により発生するので、当該ＸＳＬＴノードが、当該新たな分岐処理を発生させる分岐命令である。その後、Ｅｓについての再帰呼び出しを終了して元の手続きへ返る。
【００９５】
（４）ノードＳが単純分岐命令の場合
図１４に示すように、まず、変数Ｅｓに代入されたログエントリが子供として「ｂｒａｎｃｈ」エントリを持つかを調べる（ステップＳ１２１）。Ｅｓに代入されたログエントリが子供の「ｂｒａｎｃｈ」エントリを持つ場合、Ｅｓの子供の「ｂｒａｎｃｈ」エントリＥｂを引数Ｅｓとして（ステップＳ１２２）、手続きｓｅａｒｃｈＣｈｉｌｄを再帰的に呼び出す（ステップＳ１２３）。Ｅｂについて再帰呼び出しが終了したら、Ｅｓについての再帰呼び出しを終了して元の手続きへ返る。
【００９６】
Ｅｓに代入されたログエントリが子供の「ｂｒａｎｃｈ」エントリを持たない場合（ステップＳ１２１）、新たな分岐処理を発生させる条件を考えればよい。すなわち、新たな分岐処理の挿入位置として、当該Ｅｓを表す情報「Ｅｓ」と、当該Ｅｓに代入されたログエントリと新たな分岐処理との位置関係として「子供」を表す情報（ここでは「ｃｈｉｌｄ」と表す）とを組にして、挿入候補生成部８に送る（ステップＳ１２４）。この場合、新たな（分岐処理）は、現在Ｅｓに代入されているエントリに含まれるＸＳＬＴノード（単純分岐命令）により発生するので、当該ＸＳＬＴノードが、当該新たな分岐処理を発生させる分岐命令である。その後、Ｅｓについての再帰呼び出しを終了して元の手続きへ返る。
【００９７】
（５）ノードＳが繰返し命令および単純分岐命令以外の場合
図１５に示すように、まず、ノードＳの最初の子ノードであるＸＳＬＴノードに対応するエントリＥｃを特定する。
【００９８】
Ｅｓが「ｂｒａｎｃｈ」エントリではない場合（ステップＳ１３１）、Ｅｓの直後の兄弟エントリをＥｃとする（ステップＳ１３２）。Ｅｓが「ｂｒａｎｃｈ」エントリの場合（ステップＳ１３１）、その分岐で別のｔｅｍｐｌａｔｅをインスタンス化した場合は、ノードＳの子供ＸＳＬＴノードではなく、インスタンス化したｔｅｍｐｌａｔｅの子供ノードを調べる必要がある。そこで、Ｅｓの最初の子供エントリがｔｅｍｐｌａｔｅに対応するエントリの場合（ステップＳ１３３）、Ｅｓの最初の子供エントリ（ｔｅｍｐｌａｔｅに対応）を新たにＥｓとする（ステップＳ１３４）。そしてＥｓに対応するＸＳＬＴノード（ｔｅｍｐｌａｔｅ）をＳとして、Ｅｓの直後の兄弟エントリ（ｔｅｍｐｌａｔｅの先頭の子供に対応）をＥｃとする（ステップＳ１３４）。Ｅｓの最初の子供エントリがｔｅｍｐｌａｔｅに対応するエントリでない場合（ステップＳ１３３）、Ｅｓの最初の子供エントリ（単純分岐命令の先頭の子供に対応）をＥｃとする（ステップＳ１３５）。
【００９９】
上記の処理でＥｃが存在しない場合（ステップＳ１３６）、Ｅｓについての再帰呼び出しを終了して元の手続きへ返る。
【０１００】
Ｅｃを決定した後（ステップＳ１３６）、変換ログ内でＥｃの後ろの兄弟エントリ（ｆｏｌｌｏｗｉｎｇ−ｓｉｂｌｉｎｇ）を順に調べて、それぞれについて以下の処理を行う。
【０１０１】
Ｅｃの後ろの兄弟エントリには、ノードＳの子孫ノードに対応するエントリも含まれるので、Ｅｃに対応するＸＳＬＴノードＣ（ステップＳ１３７）がＳの直接の子ノードに含まれるかどうかを調べる。ＣがＳの子ノードでない場合（ステップＳ１３８）、次の兄弟エントリをＥｃとして（ステップＳ１４１）、ステップＳ１３６に戻り、処理を繰り返す。
【０１０２】
ＣがＳの子ノードの場合（ステップＳ１３８）、Ｃが出力命令でないならば（ステップＳ１３９）、さらにその子供を調べる必要があるので、Ｅｃを引数Ｅｓとして手続きｓｅａｒｃｈＣｈｉｌｄを再帰的に呼び出す（ステップＳ１４２）。Ｃが出力命令のときは（ステップＳ１３９）、そのまま、ステップＳ１４０へ進む。
【０１０３】
ＣがＳの最後の子供でない場合（ステップＳ１４０）、次の兄弟エントリをＥｃとして（ステップＳ１４１）、ステップＳ１３６へ戻り、処理を繰り返す。
【０１０４】
ＣがＳの最後の子供であった場合（ステップＳ１４０）、それ以降の兄弟エントリについては調べる必要がないので、Ｅｓについての再帰呼び出しを終了して元の手続きへ返る。
【０１０５】
以上の手続きにより、挿入位置として指定された表示ノードの子供（子ノード）である新たな表示ノードを生成するような新たな分岐処理の変換ログ上での挿入位置（ログエントリと、当該ログエントリと新たな分岐処理との位置関係）を挿入候補生成部８に送ることができる。これにより、挿入候補生成部８に、当該新たな分岐処理を発生させるＸＳＬＴ文書中の分岐命令（この場合、Ｅｓに含まれるＸＳＬＴノードが当該新たな分岐処理を発生させるＸＳＬＴ文書中の分岐命令）を通知することができる。なお、上記実施形態の場合、前述したように、新たな分岐処理の変換ログ上での挿入位置として通知されるログエントリに当該分岐命令を通知する情報が付加されている。
【０１０６】
［位置関係が「ｎｅｘｔ」と指定された場合の新たな分岐処理の挿入位置の検索］
次に、表示ノードＤとの位置関係として「ｎｅｘｔ」と指定された場合の分岐検索部７の処理動作について説明する。まず、この場合に、検索の対象となる変換ログのパターンを図１６、図１７を参照して説明する。
【０１０７】
図１６（ａ）に示す変換ログでは、表示ノードＤとしての「ＰＰＰ」に対応する変換ログのエントリＥ（注目エントリ）が、エントリ番号「１」のエントリであり、その後ろ方向に、繰返し命令に対応するログエントリ「ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」が存在している。その次の「ｂｒａｎｃｈ」エントリはこの「ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」の子供であって、最初の繰返し処理（分岐処理）である。この場合、
パターン１：繰返し命令の最初の分岐処理（図１６（ａ）ではエントリ番号「３」）の前（図１６（ａ）ではエントリ番号「３」の前）を新たな分岐処理の挿入位置とする。この時、当該新たな分岐処理を発生させる分岐命令は（新たな表示ノードを生成する分岐命令は）、当該「ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令である。
【０１０８】
パターン２：繰返し命令の最初の分岐処理（図１６（ａ）ではエントリ番号「３」〜「６」）の中で新たな分岐処理の挿入位置の検索を続行する。その際、図１６（ａ）では、エントリ番号「３」を注目エントリとする。
【０１０９】
図１６（ｂ）は、表示ノードＤとしての「ＰＰＰ」に対応する変換ログのエントリＥ（注目エントリ）が、エントリ番号「１」のエントリであり、その後ろ方向に繰返し命令に対応するログエントリ「ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」が存在しているが、その子供として、当該繰返し命令による分岐処理に対応する「ｂｒａｎｃｈ」エントリが存在していない変換ログを示している。この場合、
パターン３：繰返し命令に対応する子供として（図１６（ｂ）では、エントリ番号「２」と「３」の間に）新たな分岐処理を挿入する。このとき、当該新たな分岐処理を発生させる分岐命令は、当該「ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令である。
【０１１０】
パターン４：繰返し命令を無視してその後のエントリ（図１６（ｂ）ではエントリ番号「２」）を注目エントリとして、分岐処理の挿入位置の検索を続行する。
【０１１１】
図１６（ｃ）において、表示ノードＤとしての「ＰＰＰ」に対応する変換ログのエントリＥ（注目エントリ）が、エントリ番号「５」のエントリであるとき、このエントリから新たな分岐処理の挿入位置の検索を開始したが、このエントリで、当該「ＰＰＰ」要素を生成した分岐処理「ｂｒａｎｃｈ」エントリが終了している。この場合、
パターン５：現分岐処理の後に（図１６（ｃ）のエントリ番号「３」の分岐処理の次の分岐処理として）新たな分岐処理を挿入する。このとき、当該新たな分岐処理を発生させる分岐命令は、現分岐処理（図１６（ｃ）のエントリ番号「３」〜「５」）を発生させた分岐命令であり、それは、図１６（ｃ）のエントリ番号「２」の「ａｐｐｌｙ−ｔｅｍｐｌａｔｅｓ」命令である。
【０１１２】
パターン６：現分岐処理（図１６（ｃ）のエントリ番号「３」〜「５」）の次の分岐処理（図１６（ｃ）のエントリ番号「６」〜「９」）の中で新たな分岐処理の挿入位置の検索を続行する。その際、図１６（ｃ）ではエントリ番号「６」を注目エントリとする。
【０１１３】
図１６（ｃ）において、表示ノードＤとしての「ＰＰＰ」に対応する変換ログのエントリＥ（注目エントリ）が、エントリ番号「９」のエントリであるとき、このエントリは、変換ログ中の最後の分岐処理の最後のエントリである。この場合には、
パターン７：繰返し命令（図１６（ｃ）のエントリ番号「２」）の後のエントリ（図１６（ｃ）ではエントリ番号「１０」）を注目エントリとして、新たな分岐処理の挿入位置の検索を続行する。
【０１１４】
図１７（ａ）に示す変換ログでは、表示ノードＤとしての「ＰＰＰ」に対応する変換ログのエントリＥ（注目エントリ）が、エントリ番号「１」のエントリであり、その後ろ方向に、単純分岐命令に対応するログエントリ「ｉｆ」（エントリ番号「２」）が存在している。その後のエントリ番号「３」の「ｂｒａｎｃｈ」エントリは、エントリ番号「２」の「ｉｆ」命令の条件が満たされてカレントノードに対し実際に分岐処理が生じたことを示している。この場合、
パターン８：単純分岐命令の分岐処理の中で新たな分岐処理の挿入位置の検索を続行する。その際、図１７（ａ）では、エントリ番号「３」を注目エントリとする。
【０１１５】
図１７（ｂ）に示す変換ログでは、表示ノードＤとしての「ＰＰＰ」に対応する変換ログのエントリＥ（注目エントリ）が、エントリ番号「１」のエントリであり、その後ろ方向に、単純分岐命令に対応するログエントリ「ｉｆ」（エントリ番号「２」）が存在しているが、当該「ｉｆ」命令の条件が満たされずに分岐処理が生じなかった場合（「ｉｆ」エントリの子供に「ｂｒａｎｃｈ」エントリが存在していない場合）を示している。この場合、
パターン９：単純分岐命令に対応する子供として（図１７（ｂ）ではエントリ番号「２」と「３」の間に）当該単純分岐命令の条件を満たした新たな分岐処理を挿入する。この時、当該新たな分岐処理を発生させる分岐命令は、当該単純分岐命令（図１６（ｃ）のエントリ番号「２」）の「ｉｆ」命令である。
【０１１６】
パターン１０：単純分岐命令を無視してその後のエントリ（図１７（ｂ）ではエントリ番号「３」）を注目エントリとして、分岐処理の挿入位置の検索を続行する。
【０１１７】
図１７（ｃ）に示す変換ログでは、表示ノードＤとしての「ＰＰＰ」に対応する変換ログのエントリＥ（注目エントリ）が、エントリ番号「４」のエントリであり、このエントリから新たな分岐処理の挿入位置の検索を開始したが、このエントリで、当該「ＰＰＰ」要素を生成した分岐処理「ｂｒａｎｃｈ」エントリが終了している。この場合、
パターン１１：単純分岐命令の後のエントリ（図１７（ｃ）では、エントリ番号「５」）を注目エントリとして、新たな分岐処理の検索を続行する。
【０１１８】
図１８〜図２１は、上記各パターンに対応して、変換ログ上の新たな分岐処理の挿入位置と、分岐命令の検索を行う際の処理動作を説明するためのフローチャートである。
【０１１９】
フローチャート中のエントリＥｓは検索の起点となるエントリ（上記注目エントリ）を表し、ノードＳはエントリＥｓに対応するＸＳＬＴノードを表す。また、以下の説明における、上記エントリＥｓ、エントリＥｎ、Ｅｂの変換ログ上の位置関係について、図３３、図３４を参照して説明する。
【０１２０】
（１）検索開始
最初に、コンテキスト検索部６から受けた変換ログのログエントリをＥｓとし、Ｅｓに対応するＸＳＬＴノードをノードＳとする。
【０１２１】
（２）Ｅｎの特定
出力する表示ノードの表示文書の木構造上のレベル位置が変わらずにＥｓの次に実行されるＸＳＬＴノードに対応するエントリＥｎを特定する。
【０１２２】
Ｅｓが「ｂｒａｎｃｈ」エントリでない場合（ステップＳ１５１）、（ａ１）ＥｎはＥｓと兄弟である（すなわち、ＥｓとＥｎとが図３３（ａ）に示すような位置関係にある）、（ａ２）Ｅｎに対応する（Ｅｎに含まれる）ＸＳＬＴノードＮがＥｓに対応する（含まれる）ＸＳＬＴノードＳと兄弟である（ＳとＮが同じ親を持つ）、の２個の条件を満たすＥｎをＥｓから後にある兄弟エントリ（Ｅｓ．ｎｅｘｔｓｉｂｌｉｎｇ）から検索する（ステップＳ１５３〜ステップＳ１５６）。
【０１２３】
Ｅｎが存在しない場合は（ステップＳ１５３）、図１９のステップＳ１７１へ進む。
【０１２４】
Ｅｓが「ｂｒａｎｃｈ」エントリの場合（ステップＳ１５１）、その「ｂｒａｎｃｈ」エントリに対応する分岐処理で別の「ｔｅｍｐｌａｔｅ」をインスタンス化した場合は、ノードＳの子供ＸＳＬＴノードではなく、インスタンス化したｔｅｍｐｌａｔｅの子供ノードを調べる必要がある。
【０１２５】
そこで、Ｅｓの最初の子供エントリ（Ｅｓ．ｆｉｒｓｔＣｈｉｌｄ）が「ｔｅｍｐｌａｔｅ」エントリの場合（ステップＳ１５７）、Ｅｓの最初の子供エントリ（「ｔｅｍｐｌａｔｅ」エントリ）の直後の兄弟エントリ（「ｔｅｍｐｌａｔｅ」エントリの最初の子供エントリ）Ｅｓ．ｆｉｒｓｔＣｈｉｌｄ．ｎｅｘｔｓｉｂｌｉｎｇをＥｎとする（ステップＳ１５８）。このときのＥｓとＥｎとの位置関係を図３３（ｂ）に示す。
【０１２６】
Ｅｓの最初の子供エントリが「ｔｅｍｐｌａｔｅ」エントリでない場合（ステップＳ１５７）、Ｅｓの最初の子供エントリ（分岐命令の先頭の子供エントリ）Ｅｓ．ｆｉｒｓｔＣｈｉｌｄをＥｎとする（ステップＳ１５９）。このときのＥｓとＥｎとの位置関係を図３３（ｃ）に示す。
【０１２７】
Ｅｎが存在しない場合は（ステップＳ１６０）、図１９のステップＳ１７１へ進む。
【０１２８】
（３）Ｅｎの解析
図１８のステップＳ１５５、ステップＳ１６０において、Ｅｎが存在する場合、ステップＳ１６１に進むが、その際、Ｅｎに対応するＸＳＬＴノードＮ（以下、簡単にノードＮと呼ぶ）を取得する。
【０１２９】
ステップＳ１６１において、ノードＮの種類が繰返し命令の場合、図２０に示すフローチャートの処理へ進む。ノードＮが繰返し命令でないときは、ステップＳ１６２へ進む。ステップＳ１６２において、ノードＮが単純分岐命令の場合、図２１に示すフローチャートの処理へ進む。それ以外の場合、処理は終了する。
【０１３０】
（４）ノードＮが繰返し命令の場合（図２０参照）
図２０のステップＳ１８１へ進み、まず、Ｅｎが子供として「ｂｒａｎｃｈ」エントリを持つかを調べる。Ｅｓが「ｂｒａｎｃｈ」エントリを持つ場合（ステップＳ１８１）、それらの「ｂｒａｎｃｈ」エントリに対応する繰返し処理の前に、新たな繰返しを発生させることができる（上記パターン１に対応）。そこで、ステップＳ１８２へ進み、新たな繰返し処理の挿入位置として、Ｅｎの先頭の「ｂｒａｎｃｈ」エントリを表す情報（「Ｅｎ．ｆｉｒｓｔＣｈｉｌｄ」）と、当該先頭の「ｂｒａｎｃｈ」エントリと新たな繰返し処理との位置関係として「直前の兄弟」を表す情報「ｐｒｅｖｉｏｕｓＳｉｂｌｉｎｇ」とを組にして、挿入候補生成部８に送る。この場合、当該新たな繰返し処理を発生させる分岐命令は、Ｅｎに対応するＸＳＬＴノードＮである。「Ｅｎ．ｆｉｒｓｔＣｈｉｌｄ」は、この分岐命令を含むログエントリを通知する情報「Ｅｎ」を含む情報である。その後、Ｅｎの最初の子供の「ｂｒａｎｃｈ」エントリをＥｓとして、図１８のステップＳ１５１へ戻る（上記パターン２に対応）。
【０１３１】
Ｅｓが「ｂｒａｎｃｈ」エントリを持たない場合（ステップＳ１８１）、ノードＮの繰返し命令に対応する新たな繰返し処理を発生させる（上記パターン３に対応）。そのために、ステップＳ１８４では、当該新たな繰返し処理の挿入位置として、Ｅｎを表す情報「Ｅｎ」と、当該Ｅｎと新たな繰返し処理との位置関係として「子供」を表す情報「ｃｈｉｌｄ」とを組にして、挿入候補生成部８に送る。この場合、当該新たな繰返し処理を発生させる分岐命令は、Ｅｎに対応するＸＳＬＴノードＮである。その後、ＥｎをＥｓとして、図１８のステップＳ１５１へ戻る（上記パターン４に対応）。
【０１３２】
（５）ノードＮが単純分岐命令の場合（図２１参照）
図２１のステップＳ１９１へ進み、まず、Ｅｎが子供として「ｂｒａｎｃｈ」エントリを持つかを調べる。Ｅｎが「ｂｒａｎｃｈ」エントリを持つ場合（ステップＳ１９１）、その「ｂｒａｎｃｈ」エントリを（「Ｅｎ．ｆｉｒｓｔＣｈｉｌｄ」）をＥｓとして（ステップＳ１９２）、図１８のステップＳ１５１へ戻る（上記パターン８に対応）。
【０１３３】
Ｅｎが「ｂｒａｎｃｈ」エントリを持たない場合（ステップＳ１９１）、ノードＮの単純分岐命令に対応する新たな分岐処理を発生させる（上記パターン９に対応）。そのために、ステップＳ１９３では、新たな分岐処理の挿入位置として、Ｅｎを表す情報「Ｅｎ」と、当該Ｅｎと新たな分岐処理との位置関係として「子供」を表す情報「ｃｈｉｌｄ」とを組にして、挿入候補生成部８に送る。この場合、当該新たな分岐処理を発生させる分岐命令は、Ｅｎに対応するＸＳＬＴノードＮである。その後、ステップＳ１９４へ進み、ＥｎをＥｓとして、図１８のステップＳ１５１へ戻る（上記パターン１０に対応）。
【０１３４】
（６）Ｅｎが存在しない場合
図１８のステップＳ１５３、ステップＳ１６０において、Ｅｎが存在しない場合は、図１９のステップＳ１７１へ進む。ここでは、Ｅｓに対応するエントリ（注目エントリ）で当該エントリが含まれる分岐処理（現分岐処理）が終了している場合（すなわち、変換ログ中で、Ｅｓが図３４（ａ）〜（ｃ）に示すような位置に存在する場合）の処理を行う。
【０１３５】
Ｅｓの親（Ｅｓ．ｐａｒｅｎｔＮｏｄｅ）がルート（ｒｏｏｔ）、すなわち変換ログの最上位レベルにおける最後のエントリである場合、（ステップＳ１７１）、処理を終了する。そうでない場合、（ステップＳ１７１）、図３４（ａ）に示すように、Ｅｓが含まれる分岐処理に対応する「ｂｒａｎｃｈ」エントリ（すなわちＥｓの親ノードＥｓ．ｐａｒｅｎｔＮｏｄｅ）をＥｂ、その分岐処理を発生させた命令に対応するエントリ（すなわち、Ｅｂの親ノードＥｂ．ｐａｒｅｎｔＮｏｄｅ）をＥｎ、Ｅｎに対応するＸＳＬＴノードをＮとする（ステップＳ１７２）。
【０１３６】
ノードＮが繰返し命令である場合（ステップＳ１７３）、Ｅｂの兄弟ノードとして新たな繰返し処理を発生させることができる（上記パターン５に対応）。そこで、ステップＳ１７４では、新たな繰返し処理の挿入位置として、Ｅｂを表す情報「Ｅｂ」と、当該Ｅｂと新たな繰返し処理との位置関係として「次の兄弟」を表す「ｎｅｘｔＳｉｂｌｉｎｇ」とを組にして、挿入候補生成部８に送る。この場合、当該新たな分岐処理を発生させる分岐命令は、Ｅｂと図３４（ａ）に示すような位置関係にあるＥｎに対応するノードＮである。
【０１３７】
さらに、図３４（ｂ）に示すように、Ｅｂ（エントリ番号「３」）の直後にその兄弟エントリ（Ｅｂ．ｎｅｘｔｓｉｂｌｉｎｇ、エントリ番号「６」）が存在する場合（ステップＳ１７５）、そのエントリは次の繰返しを表している。そこでそのエントリ番号「６」の「ｂｒａｎｃｈ」エントリを新たにＥｓとして（ステップＳ１７６）、図１８のステップＳ１５１へ戻る（上記パターン６に対応）。
【０１３８】
一方、図３４（ｃ）に示すように、Ｅｂの直後にその兄弟エントリが存在しない場合（ステップＳ１７５）、Ｅｂが最後の繰返し処理であることを表している。そこでＥｎを新たなＥｓとして（ステップＳ１７７）、図１８のステップＳ１５１へ戻る（上記パターン７に対応）。
【０１３９】
ノードＮが単純分岐命令である場合（ステップＳ１７８）、ＥｎをＥｓとして、図１８のステップＳ１５１へ戻る（上記パターン１１に対応）。
【０１４０】
以上の手続きにより、挿入位置として指定された表示ノードの兄弟ノードである新たな表示ノードを生成するような新たな分岐処理の変換ログ上での挿入位置（ログエントリと、当該ログエントリと新たな分岐処理との位置関係）を挿入候補生成部８に送ることができる。これにより、挿入候補生成部８に、当該新たな分岐処理を発生させるＸＳＬＴ文書中の分岐命令を通知することができる。なお、上記実施形態の場合、前述したように、新たな分岐処理の変換ログ上での挿入位置として通知されるログエントリに当該分岐命令を通知する情報が付加されている。
【０１４１】
［挿入候補生成部］
前述したように、分岐検索部７で、新たな分岐処理の変換ログ中の挿入位置（基準となる変換ログ上のエントリと当該エントリと新たな分岐処理との位置関係「ｐｒｅｖｉｏｕｓＳｉｂｌｉｎｇ」「ｎｅｘｔＳｉｂｌｉｎｇ」「ｃｈｉｌｄ」）と、当該新たな分岐処理を発生させるＸＳＬＴノードの分岐命令とが求まる。
【０１４２】
具体的には、▲１▼表示文書中に挿入する新たな表示ノードを生成する新たな分岐処理を発生させるＸＳＬＴノード（分岐命令）と、当該ＸＳＬＴノードの対象となるＸＭＬノードとＸＭＬ文書中に挿入する新たな要素との位置関係（新たな要素が当該ＸＭＬノードの直前の兄弟ノードに対応する場合は「ｐｒｅｖｉｏｕｓＳｉｂｌｉｎｇ」、当該ＸＭＬノードの直後の兄弟ノードに対応する場合は「ｎｅｘｔＳｉｂｌｉｎｇ」、当該ＸＭＬノードの子ノードに対応する場合は「ｃｈｉｌｄ」）、あるいは、▲２▼表示文書中に挿入する新たな表示ノードを生成する新たな分岐処理を発生させるＸＳＬＴノード（分岐命令）と、当該ＸＳＬＴノードにより発生した分岐処理の対象となったＸＭＬノードとＸＭＬ文書中に挿入する新たな要素との位置関係（前記同様に、「ｐｒｅｖｉｏｕｓＳｉｂｌｉｎｇ」、「ｎｅｘｔＳｉｂｌｉｎｇ」、「ｃｈｉｌｄ」）が、求まる。
【０１４３】
そこで、挿入候補生成部８では、分岐検索部７で求めた変換ログ中の挿入位置（変換ログ上のエントリと当該エントリと新たな分岐処理との位置関係）に挿入される新たな分岐処理を発生させる分岐命令を基に、ＸＭＬ文書への挿入候補としてのノードを生成し、その挿入候補のＸＭＬ文書上での挿入位置を、ＸＭＬ文書中の基点となるノードと上記位置関係となるような位置とする。すなわち、上記▲１▼に示した情報が得られているときは、基点となるＸＭＬノードは、当該挿入候補を生成する新たな分岐処理を発生させる分岐命令（ＸＳＬＴノード）の対象となるＸＭＬノードであり、上記▲２▼に示した情報が得られているときは、基点となるＸＭＬノードは、当該挿入候補を生成する新たな分岐処理を発生させるＸＳＬＴノード（分岐命令）により既に発生された分岐処理の対象となったＸＭＬノードであり、この基点となるＸＭＬノードと当該挿入候補との位置関係が「ｐｒｅｖｉｏｕｓＳｉｂｌｉｎｇ」、「ｎｅｘｔＳｉｂｌｉｎｇ」、「ｃｈｉｌｄ」のいずれかにあるようなＸＭＬ文書の文書構造上の位置とする。ここでは、上記位置関係（「ｐｒｅｖｉｏｕｓＳｉｂｌｉｎｇ」、「ｎｅｘｔＳｉｂｌｉｎｇ」、「ｃｈｉｌｄ」）をＸｐａｔｈに倣い、「軸」とも呼ぶ。
【０１４４】
まず、挿入候補生成部８では、分岐検索部７で求めた挿入位置に挿入される新たな分岐処理を発生される分岐命令で指定されている条件を満たす挿入候補を生成する。当該分岐命令が繰返し命令の場合は「ｓｅｌｅｃｔ」属性、単純分岐命令の場合は「ｔｅｓｔ」属性で条件（条件式）が指定されているので、これら属性から、挿入候補が満たすべき条件を得る。
【０１４５】
ここでは簡単な例として、条件式内でノードを表すパス式として、カレントノードからの相対パスを表し、かつ、ｃｈｉｌｄ軸またはａｔｔｒｉｂｕｔｅ軸以外の軸を含まない場合のみを扱う。
【０１４６】
述語（ｐｒｅｄｉｃａｔｅ）の指定がある場合には、述語の内容が上記の相対パス式か、あるいは、相対パス式と定数との比較式の場合のみを扱う。例えば、“ｂｏｏｋ”、“＠ｐｏｉｎｔ”，“ｂｏｏｋ［ｒｅｖｉｅｗ］”，“ｂｏｏｋ［＠ｐｏｉｎｔ＝３］”等のパス式がこれに当てはまる。それに対して、“ｂｏｏｋ／ｔｉｔｌｅ”、“ｂｏｏｋ［．／／ｒｅｖｉｅｗ］”等は対象外とする。
【０１４７】
次に、図２２に示すフローチャートを参照して、挿入候補生成部８の処理動作について説明する。
【０１４８】
（１）処理開始
図２２では、まず、分岐検索部７で検索した結果得られた新たな分岐処理を発生させる分岐命令に対応するエントリＥと、上記位置関係（軸）Ａｘｉｓを受け取る（ステップＳ２０１）。
【０１４９】
次に、Ｅに対応するＸＳＬＴノードをＳ、Ｅに対応するカレントノードをＣを取得し（ステップＳ２０２、ステップＳ２０３）、Ｓの種類に応じた処理を行う（ステップＳ２０４、ステップＳ２０５）。すなわち、Ｓが繰返し命令の場合（ステップＳ２０４）、図２３に示すフローチャートの処理に移行し、Ｓが単純分岐命令の場合（ステップＳ２０５）、図２４に示すフローチャートの処理に移行する。それ以外の場合、処理を終了する。
【０１５０】
（２）ノードＳが繰返し命令の場合
Ｓが繰返し命令の場合、上記パス式のパターンに加えて、それらのパス式の結合式も挿入候補を生成する対象とする。例えば、  “ｔｉｔｌｅ｜ｒｅｖｉｅｗ”等の結合式がこれに当てはまる。
【０１５１】
図２３にＳが繰返し命令の場合の処理を示す。「ｓｅｌｅｃｔ」属性から得られた条件式をＣｏｎｄとする（ステップＳ２１１）、このＣｏｎｄをチェックして、上記の対象外の場合には（ステップＳ２１２）挿入候補を生成せずに終了する。結合式が得られた場合（ステップＳ２１３）、結合されている個々のパス式を取り出す（ステップＳ２１４）。
【０１５２】
各パス式を順次にＥｘｐとして、式Ｅｘｐ、カレントノードＣ、位置関係Ａｘｉｓを引数として、手続き  ｃｒｅａｔｅＣａｎｄ  を呼び出す（ステップＳ２１５〜ステップＳ２１８）。
【０１５３】
式Ｃｏｎｄが結合式ではない場合（ステップＳ２１３）、式Ｃｏｎｄ、カレントノードＣ、位置関係Ａｘｉｓを引数として、手続き  ｃｒｅａｔｅＣａｎｄ  を呼び出す（ステップＳ２１９）。
【０１５４】
（３）ノードＳが単純繰返し命令の場合
Ｓが単純繰返し命令（例えば「ｉｆ」命令）の場合、上記パス式のパターンに加えて、パス式と定数との比較式を、挿入候補を生成する対象とする。例えば、“＠ｐｏｉｎｔ＝３”等の比較式がこれに当てはまる。
【０１５５】
図２４に、Ｓが「ｉｆ」命令の場合の処理を示す。「ｔｅｓｔ」属性から得られた条件式をＣｏｎｄとする（ステップＳ２２１）。このＣｏｎｄをチェックして、上記の対象外の場合は（ステップＳ２２２）、挿入候補を生成せずに終了する。適合している場合、パス式か比較式かを調べる（ステップＳ２２３）。
【０１５６】
Ｃｏｎｄがパス式の場合（ステップＳ２２３）、繰返し命令の場合と同様に、式Ｃｏｎｄ、カレントノードＣ、位置関係Ａｘｉｓを引数として、手続き  ｃｒｅａｔｅＣａｎｄ  を呼び出す（ステップＳ２２４）。
【０１５７】
Ｃｏｎｄが２項比較式の場合（ステップＳ２２３）、ステップＳ２２５へ進み、  “パス式  演算子  定数”を  “パス式［．演算子  定数］”と変換する。例えば、条件式が  “＠ｐｏｉｎｔ＝３”の場合には、“＠ｐｏｉｎｔ［．＝３］”と変換する。その後、変換後のＣｏｎｄ、カレントノードＣ、位置関係Ａｘｉｓを引数として、手続き  ｃｒｅａｔｅＣａｎｄ  を呼び出す（ステップＳ２２４）。
【０１５８】
（４）パス式を満たす候補の生成（ｆｕｎｃｔｉｏｎ  ｃｒｅａｔｅＣａｎｄ）
手続きｃｒｅａｔｅＣａｎｄの処理を図２５に示すフローチャートを参照して説明する。まず、パス式の先頭のノードテスト（ＮｏｄｅＴｅｓｔ）と述語（Ｐｒｅｄｉｃａｔｅ）を分離する（ステップＳ２３１）。ノードテストが要素名の場合にはその要素を生成して挿入候補のルート要素Ｒとする（ステップＳ２３２）。述語Ｐが存在する場合（ステップＳ２３３，ステップＳ２３４）、述語内の要素または属性に対応するノードＴを生成して（ステップＳ２３６，ステップＳ２３７）、要素Ｒに子供または属性として付加する（ステップＳ２３８）。
【０１５９】
例えば、条件式が“ｂｏｏｋ［ｒｅｖｉｅｗ］”の場合、“＜ｂｏｏｋ＞＜ｒｅｖｉｅｗ／＞＜／ｂｏｏｋ＞”というツリーが挿入候補として生成される。また、条件式が、“ｂｏｏｋ［＠ｐｏｉｎｔ＝３］［ｒｅｖｉｅｗ］”の場合、“＜ｂｏｏｋ  ｐｏｉｎｔ＝３＞＜ｒｅｖｉｅｗ／＞＜／ｂｏｏｋ＞”というツリーが挿入候補として生成される。
【０１６０】
ノードテストが属性名の場合には、その属性を生成して挿入候補のノードＲとする（ステップＳ２３２）。
【０１６１】
述語Ｐが存在する場合（ステップＳ２３４）、その属性自身の値と定数との比較式の場合のみ、ノードＲがその条件を満たす値を持つものとする（ステップＳ２３５、ステップＳ２４０）。例えば、条件式が“＠ｐｏｉｎｔ［．＝３］”の場合には、「ｐｏｉｎｔ」属性を挿入候補とし、その値を「３」とする。
【０１６２】
上記の手続きで生成した挿入候補Ｒ、カレントノードＣ、位置関係Ａｘｉｓを候補選択部９に送る（ステップＳ２４１）。
【０１６３】
なお、手続き  ｃｒｅａｔｅＣａｎｄ  のより好ましい形態として、ノードＳが「ｖａｌｕｅ−ｏｆ」命令の場合には、ノードＲの値を設定する形態が可能である。述語の存在によってノードＲの値が特定されている場合はその値を使用し、値が特定されていない場合は、ノードＲの要素名または属性名をその値とする。
【０１６４】
これにより、「ｖａｌｕｅ−ｏｆ」命令によりノードＲの値が表示され、挿入候補の挿入による表示文書の変化を実際に画面上で確認することができる。
【０１６５】
［編集画面について］
分岐検索部７および挿入候補生成部８で得られた挿入候補は、複数存在する場合がある。候補選択部９では、得られた候補を表示して、それらの中から所望の候補を選択するための画面を生成し、表示部１と入力部２を介してユーザの選択を得る。
【０１６６】
挿入候補の表示形態として最も簡単な形態は、各挿入候補に対応した領域を表示し、その中に各候補をＸＭＬ文書の一般的なテキスト形式で表示する形態である。
【０１６７】
図２６に、この形態の挿入候補の表示例の例を示す。この形態では、ユーザがＸＭＬ文書の要素名および属性名等を判断材料として挿入候補を選択する。図２６の例は、図１０で挿入位置としてテーブル内の右下の空欄のセルの表示領域（表示文書中の「ＴＤ」ノードに対応）を指定し、当該指定した表示ノードと新たに挿入する表示ノードとの位置関係として「ｃｈｉｌｄ」を指定した後、各挿入候補をＸＭＬ文書の一般的なテキスト形式で表示するウインドウＲ１を表示した例である。
【０１６８】
この例では、前述の分岐検索部７の処理により、図６の変換ログ中のエントリ番号「２５」の「ｖａｌｕｅ−ｏｆ」命令により新たな分岐処理を発生させればよいことがわかる。そこで、当該新たな分岐処理の挿入位置として、エントリ番号「２５」のログエントリと、当該ログエントリと新たな分岐処理との位置関係として「子供」を表す情報「ｃｈｉｌｄ」とを組にして、挿入候補生成部８に送る（図１３のステップＳ１１２）。
【０１６９】
挿入候補生成部８では、ＸＳＬＴ文書中の当該新たな分岐処理を発生させる分岐命令「ｖａｌｕｅ−ｏｆ」の条件式「＠ｐｏｉｎｔ」を満たす挿入候補を生成する。当該挿入候補のＸＭＬ文書中の挿入位置は、当該分岐命令「ｖａｌｕｅ−ｏｆ」の対象となるＸＭＬノードとの位置関係が「ｃｈｉｌｄ」となる位置に対応する。この場合、該分岐命令「ｖａｌｕｅ−ｏｆ」の対象となるＸＭＬノードは、図２のノード番号「７」のＸＭＬノードであり、このノードとの位置関係が「子供」（または挿入候補が属性ノードの場合には「属性」）となるような挿入候補が生成される。
【０１７０】
この場合、候補選択部９には、挿入候補生成部８で生成された各挿入候補と、各挿入候補のＸＭＬ文書中の挿入位置が渡される（図２８のステップＳ２５１）。すなわち、挿入候補＝「ｐｏｉｎｔ」属性（値は文字列“ｐｏｉｎｔ”）と、当該挿入候補のＸＭＬ文書中の挿入位置として、カレントノード＝ノード番号「７」（／ｂｏｏｋｓ［１］／ｂｏｏｋ［２］）、カレントノードと当該挿入候補との位置関係＝子供「ｃｈｉｌｄ」が送られる。
【０１７１】
候補選択部９では、挿入候補生成部８で生成された各挿入候補と各挿入候補の挿入位置を表示するウインドウＲ１を生成し、表示部１に表示する（ステップＳ２５２〜ステップＳ２５４）。
【０１７２】
この例では挿入候補はこの１個だけであるので、図２６の表示画面上では、この挿入候補に対応する領域のみが表示されている。
【０１７３】
挿入候補のより好ましい表示形態としては、各挿入候補を仮にＸＭＬ文書に挿入して、ＸＳＬＴ文書によりＨＴＭＬ文書に変換して、プレビューを編集画面に表示する形態が可能である。図２７に、この形態の表示例を示す。
【０１７４】
図２６のように、ウインドウＲ１に挿入候補を表示した後（図２８のステップＳ２５４）、ユーザが所望の挿入候補にマウスポインタを移動すると、対応する挿入候補を仮挿入したＸＭＬ文書の変換結果を図２７に示すように、プレビューで表示する。
【０１７５】
さらに、ユーザがウインドウＲ１に表示されている所望の挿入候補に対し、マウスクリックする等の決定動作を行うと、当該挿入候補の選択が確定される。
【０１７６】
図２７の例では、ユーザがウインドウＲ１に表示されている挿入候補にポインタを移動すると（図２８のステップＳ２５５）、候補選択部９は、挿入候補（候補＝「ｐｏｉｎｔ」属性（値は文字列“ｐｏｉｎｔ”）と、当該挿入候補のＸＭＬ文書中の挿入位置として、ノード番号「７」に対応するＸＭＬノード（／ｂｏｏｋｓ［１］／ｂｏｏｋ［２］）と当該ノードと当該挿入候補との位置関係＝「子供（属性）」とを基に、文書記憶部３に格納されているＸＭＬ文書のコピー（仮文書）に、挿入候補（候補＝「ｐｏｉｎｔ」属性（値は文字列“ｐｏｉｎｔ”）を、ノード番号「７」に対応するＸＭＬノード（／ｂｏｏｋｓ［１］／ｂｏｏｋ［２］）と当該挿入候補との位置関係＝「子供（属性）」となる挿入位置に挿入する。この挿入候補を挿入したＸＭＬ文書のコピーを、ＸＳＬＴ文書を用いて表示文書に変換して、その変換結果としての表示文書を、現在の表示文書の代わりに表示部１に表示する（ステップＳ２５６〜ステップＳ２５８）。その結果、図２７に示すように、テーブルの右下の空欄のセル内には、挿入候補の「ｐｏｉｎｔ」属性の値である「＠ｐｏｉｎｔ」という文字列が表示される。
【０１７７】
ユーザがウインドウＲ１に表示されている所望の挿入候補に対し、マウスクリックする等の決定動作を行うと、当該挿入候補の選択が確定されるので（ステップＳ２５９）、この場合は、データ更新部１０に対し、確定された挿入候補と、その挿入位置を渡す（ステップＳ２６０）。
【０１７８】
例えば、図２７の場合、挿入候補（候補＝「ｐｏｉｎｔ」属性（値は文字列“ｐｏｉｎｔ”）と、当該挿入候補のＸＭＬ文書中の挿入位置として、ノード番号「７」（／ｂｏｏｋｓ［１］／ｂｏｏｋ［２］）と当該ノードと当該挿入候補との位置関係＝「子供（属性）」とが、データ更新部１０へ渡される。
【０１７９】
データ更新部１０では、文書記憶部３に格納されているＸＭＬ文書に、挿入候補（候補＝「ｐｏｉｎｔ」属性（値は文字列“ｐｏｉｎｔ”）を、ノード番号「７」に対応するノード（／ｂｏｏｋｓ［１］／ｂｏｏｋ［２］）と当該挿入候補との位置関係＝「子供（属性）」となる挿入位置に挿入する。
【０１８０】
その後、変換処理部４で、前述同様に、当該更新されたＸＭＬ文書をＸＳＬＴ文書を用いて表示文書に変換し（その際、変換ログを記録する）、表示部１に当該表示文書を表示する。
【０１８１】
なお、決定動作を行わずに表示画面上で、他の挿入位置に対応する領域に、マウスポインタを移動した場合、分岐検索部７から新たに処理を開始して、挿入候補の表示内容を切り替える形態も可能である。
【０１８２】
以上、説明したように、上記第１の実施形態のＸＭＬ文書編集装置によれば、ユーザが表示文書上で、新たな表示ノードの挿入位置（現在表示されている表示ノードと、当該表示ノードと新たな表示ノードとの位置関係）を指定すると、当該新たな表示ノードを生成するＸＳＬＴ文書中の分岐命令を検索し、当該分岐命令による分岐処理により当該新たな表示ノードを生成するようなＸＭＬ文書中の新たなＸＭＬノードを挿入候補として生成し、当該挿入候補のＸＭＬ文書中の挿入位置を求める。挿入候補は、上記検索された分岐命令の対象となるＸＭＬノード、あるいは、上記検索された分岐命令の対象となるＸＭＬノードにより既に発生された分岐処理の対象となったＸＭＬノードの子ノード（属性ノードを含む）と直前の兄弟ノードと直後の兄弟ノードのいずれかとしてＸＭＬ文書中に挿入される。
【０１８３】
各挿入候補をＸＭＬ文書中のそれぞれの挿入位置に挿入した結果得られる表示文書をプレビューすることで、ユーザは複数の挿入候補から、実際にユーザが希望する結果をもたらすＸＭＬ文書の編集結果が得られる挿入候補を選択することができる。
【０１８４】
挿入候補生成部８によって、ユーザが指定した位置の表示に変化を及ぼす挿入候補を生成・提示することが可能である。ユーザはＸＭＬ文書のツリー構造や要素名、属性名を意識せずに、スタイルシート（例えばＸＭＬ文書）による変換後の画面上の位置とデータの関係のみで文書データの編集が可能となる。
【０１８５】
（第２の実施形態）
上記第１の実施形態のＸＭＬ文書編集装置では、表示文書中の新たな表示ノードを挿入するための挿入位置を指定する際には、表示画面に現在表示されている表示ノードと、新たな挿入ノードとの位置関係（「ｃｈｉｌｄ」、「ｎｅｘｔ」）とを指定していた。
【０１８６】
しかし、このような挿入位置の指定方法では、画面上に表示されていない表示ノードを挿入位置として指定することはできない。例えば、表示文書（ＨＴＭＬ文書）で「ＴＡＢＬＥ」要素で表示されるテーブル内で、ある行の下にもう一行新たに追加したい場合、この新たな行を表す「ＴＲ」ノードは画面上で指定することはできない。
【０１８７】
また、表示文書中のセルを表す「ＴＤ」ノードの後ろに（兄弟ノードとして）「ＴＤ」ノードを追加する際は、画面上では「右」に表示されるのに対し、行を表す「ＴＲ」ノードの後ろに（兄弟ノードとして）「ＴＲ」ノードを追加する際は画面上では「下」に表示される。したがって、ＨＴＭＬの表示規則を知っているユーザは画面上の「右」「下」をＨＴＭＬ上の兄弟ノードを追加するという意味で、位置関係として「ｎｅｘｔ」として指定できるが、表示規則を知らないユーザにとっては操作と編集メニューの認識のギャップが生じる。
【０１８８】
このように、実際の表示画面上の表示上でのユーザ所望の挿入位置とＨＴＭＬ文書の構造中の挿入位置とが、必ずしも明確であるとは云えない。
【０１８９】
そこで、第２の実施形態に係るＸＭＬ文書編集装置では、上記の問題を解決するために、挿入位置の指定方法として、ユーザが表示画面上で指定した挿入位置を、ＸＭＬ文書編集装置内の処理に適した挿入位置に変換する挿入位置変換部１１を有している。
【０１９０】
図２９は、第２の実施形態に係るＸＭＬ文書編集装置の構成例を示した者で、図１と同一部分には同一符号を付し、異なる部分についてのみ説明する。すなわち、図２９では、挿入位置変換部１１と、この挿入位置変換部１１で用いる変換規則を記憶する変換規則記憶部１２をさらに有している。
【０１９１】
挿入位置変換部１１では、入力部２から得られたユーザにより入力された挿入位置がコンテキスト検索部６に渡る間に、変換規則記憶部１２に記憶されている変換規則を用いて当該入力した挿入位置をＸＭＬ文書編集装置内の処理に適した挿入位置に変換する。そして、挿入位置変換部１１で得られた挿入位置を用いて、コンテキスト検索部６、分岐検索部７，挿入候補生成部８，候補選択部９等の各構成部において、前述の第１の実施形態のＸＭＬ文書編集装置と同様の処理動作が行われる。それ以外は、前述の第１の実施形態のＸＭＬ文書編集装置と同様である。
【０１９２】
ユーザにとって、表示文書の表示されている表示画面上で挿入位置を指定する場合、表示画面上で現在表示されているいずれかの表示領域を指定して、当該該表示領域を基点にその中か右側か下側かで指定することが自然である。従って、図７のステップＳ２で表示文書を表示した後、ステップＳ３において、ユーザが、新たな表示ノードの挿入位置として、表示画面上のある表示領域（すなわち、表示ノード）を指定したとき、新たな表示ノードと当該表示領域との位置関係を、「中（ｉｎｎｅｒ）」、「右（ｒｉｇｈｔ）」、「下（ｄｏｗｎ）」といった画面上での位置関係で指定するための編集メニューを表示する。
【０１９３】
例えば、図３０に示すように、（表示文書を表示した）表示画面上に表示されたテーブル中の左下のセルを選択すると、上記編集メニューが表示される。この編集メニューによれば、当該選択されたセルを基点にして、当該セル内を挿入位置とする場合「中（ｉｎｎｅｒ）」と、当該セルの右側に新たなセルを挿入する場合「右（ｒｉｇｈｔ）」と、当該セルの下側に新たな行を挿入する場合「下（ｄｏｗｎ）」とのいずれかを選択することができる。ユーザがこの編集メニューから「下（ｄｏｗｎ）」を選択したとする。この場合、入力部２からは、ユーザ指定の挿入位置として、指定された表示ノード（図４のＨＴＭＬ文書中のノード番号「８」の表示ノード）と、指定された位置関係「ｄｏｗｎ」とを組にして、挿入位置変換部１１へ渡される。
【０１９４】
挿入位置変換部１１は、ユーザ指定の挿入位置情報（例えば、上記のように、表示ノードＢｉｎと位置関係Ａｉｎとの組）を受けると、変換規則記憶部１２に記憶されている各変換規則の条件部に記述されている条件を参照して、受け取ったユーザ指定の挿入位置が条件にマッチする変換規則を取得する。
【０１９５】
その変換規則に従い、ユーザ指定の挿入位置を、装置内の処理で用いる挿入位置情報（表示ノードと位置関係との組）に変換して、コンテキスト検索部６に送る。その後の処理は前述の第１の実施形態と同じである。
【０１９６】
上記例のように、表示ノード「ＴＤ」を指定するとともに、位置関係として「ｄｏｗｎ」が指定された場合には、当該セルの下側に新たな行を挿入するための挿入位置、すなわち、表示ノード「ＴＲ」と当該表示ノードと新たな表示ノードとの位置関係「ｎｅｘｔ」に変換される。
【０１９７】
この場合に適用される変換規則記憶部１２に記憶される変換規則は、例えば、条件（表示ノード「ＴＤ」，位置関係「ｄｏｗｎ」）→変換後の挿入位置（指定された表示ノードの親ノードである「ＴＲ」ノード、位置関係「ｎｅｘｔ」）である。変換後の挿入位置としては、表示ノードの要素名と、当該表示ノードと新たな表示ノードとの位置関係が指定されている。
【０１９８】
ユーザにより入力された挿入位置が、変換規則の条件部と一致した場合、挿入位置変換部１１は、変換後の（表示ノード、位置関係）をコンテキスト検索部６に送る。例えば、上記例の場合、指定された「ＴＤ」を含むＴＲノードと位置関係「ｎｅｘｔ」、すなわち（ＴＲ、ｎｅｘｔ）がコンテキスト検索部１１へ送られる。
【０１９９】
別の例として、ユーザが、表示ノード「ＴＤ」を指定するとともに、位置関係として「ｒｉｇｈｔ」を指定した場合、これに適用される変換規則は、（ＴＤ、ｒｉｇｈｔ）→（ＴＤ、ｎｅｘｔ）であり、この変換規則によると、ユーザが挿入位置としてテーブル内のあるＴＤノードを指定し、位置関係として「ｒｉｇｈｔ」を指定すると、コンテキスト検索部６には、挿入位置として、指定されたＴＤノードと、当該ＴＤノードと新たな表示ノードとの位置関係として「ｎｅｘｔ」が送られる。
【０２００】
なお、マッチする規則が複数ある場合には、それぞれの規則の変換結果の組を全てコンテキスト検索部６に送る。コンテキスト検索部６、分岐検索部７、挿入候補生成部８は、それぞれの組に対して処理を行う。挿入候補選択部８は、それらの処理で生成された挿入候補を全て選択メニューに加える。
【０２０１】
マッチする規則が存在しない場合は、下記のデフォルト変換規則を適用する。
【０２０２】
（＊、ｒｉｇｈｔ）→（＊、ｎｅｘｔ）
（＊，ｄｏｗｎ）→（＊、ｎｅｘｔ）
（＊，ｉｎｎｅｒ）→（＊、ｃｈｉｌｄ）
Ｂｉｎに指定された「＊」は、任意の要素（ノード）を表すものとする。
【０２０３】
変換規則の別の形態として、変換前後の挿入位置の指定としてＸＰａｔｈのパスパターンおよびパス式の表記が可能である。この形態の変換規則は
条件（パスパターンＰｉｎ、位置関係Ａｉｎ）→（パス式Ｐｏｕｔ、位置関係Ａｏｕｔ）の形態をとる。
【０２０４】
ユーザ指定の挿入位置（表示ノードＢｏｒｇ，位置関係Ａｏｒｇ）の組が、変換規則の条件部にマッチしているかどうかの判断は、Ｂｏｒｇに対応する表示ノードが変換規則のパスパターンＰｉｎにマッチし、かつＡｏｒｇが変換規則のＡｉｎと一致する場合に、マッチしていると判断する。変換規則にマッチしている場合、変換後の位置関係はＡｏｕｔとなる。変換後の表示ノードは、ＢｏｒｇをコンテキストノードとしてＰｏｕｔを評価した結果のノード集合に含まれるノードＢｏｕｔとなる。変換後、（Ｂｏｕｔ，Ａｏｕｔ）の組をコンテキスト検索部に送る。
【０２０５】
なお、Ｂｏｕｔが複数存在する場合には、マッチする規則が複数ある場合と同様に、それぞれのＢｏｕｔとＡｏｕｔの組を全てコンテキスト検索部６に送る。
【０２０６】
例えば、（ＴＤ｜ＴＨ、ｄｏｗｎ）→（ｐａｒｅｎｔ：：ＴＲ，ｎｅｘｔＳｉｂｌｉｎｇ）という変換規則は、ユーザが挿入位置としてテーブル内のセルを表すあるＴＤノードまたは見出し文字を表すＴＨノードを指定し、位置関係として「ｄｏｗｎ」を指定すると当該変換規則の条件部にマッチする。変換後は表示ノードＢｏｕｔとして、ユーザが指定したＴＤノードまたはＴＨノードの親ＴＲノード、位置関係Ａｏｕｔとして「ｎｅｘｔ」とがコンテキスト検索部６に送られる。これは、テーブル内のあるカラムの下を指定すると、次の行が挿入されることを期待した規則である。
【０２０７】
図３０において、ユーザにより、表示ノード（図４のＨＴＭＬ文書中のノード番号「８」の表示ノード）と、位置関係「ｄｏｗｎ」が挿入位置として指定されると、上記の変換規則（条件（表示ノード「ＴＤ」，位置関係「ｄｏｗｎ」）→（表示ノード「ＴＲ」、位置関係「ｎｅｘｔ」））にマッチする。従って、指定された表示ノードは、図４のＨＴＭＬ文書中のノード番号「７」の表示ノードに変換され、位置関係は「ｎｅｘｔ」に変換される。そして、この変換後の挿入位置が、コンテキスト検索部６に送られる。コンテキスト検索部６、分岐検索部７、挿入候補生成部８の処理により、挿入候補Ｒとして“＜ｂｏｏｋ／＞”、当該挿入候補のＸＭＬ文書中の挿入位置として、ＸＭＬノードＣ＝ノード番号「７」、当該ＸＭＬノードＣと挿入候補との位置関係として、Ａｘｉｓ＝「ｎｅｘｔＳｉｂｌｉｎｇ」が候補選択部９に送られる。
【０２０８】
当該挿入候補をＸＭＬ文書のコピーに挿入して（すなわち、図２のＸＭＬ文書に３番目の「ｂｏｏｋ」要素が挿入されて）、プレビューが表示されたとき（図２８のステップＳ２５１〜ステップＳ２５８）の画面表示例を図３２に示す。
【０２０９】
以上説明したように、上記第２の実施形態によれば、実際の表示画面上のユーザ所望の挿入位置からＨＴＭＬ文書の文書構造中の挿入位置への変換が可能となり、ユーザの理解し易い、指示し易い形態で表示画面上で挿入位置を指定することができる。
【０２１０】
なお、ユーザが挿入位置を指定する場合、上記のように、現在表示されている表示ノードのうち基点となる表示ノードと当該表示ノードとの位置関係を指定していたが、この場合に限らない。すなわち、上記変換規則を用いれば、表示画面の所望の一点あるいは領域を指定することにより挿入位置を指定することも可能である。この場合の変換規則は、指定された表示領域を条件とし、この条件にマッチするユーザ指定の挿入位置を、当該表示領域に対応する変換後の表示ノードと、新たな表示ノードとの位置関係とに変換することを指定したものとなる。
【０２１１】
また、画面に表示されない表示ノードを挿入位置とする必要がある場合に、画面に表示される別の表示ノードを挿入位置とする操作で代用することができる。
【０２１２】
本発明の実施の形態に記載した本発明の手法は、コンピュータに実行させることのできるプログラムとして実現可能であるとともに、このプログラムを磁気ディスク（フレキシブルディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、半導体メモリなどの記録媒体に格納して頒布することもできる。
【０２１３】
また、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【０２１４】
【発明の効果】
以上説明したように、本発明によれば、ＸＭＬ文書などの所定の文書構造を有する構造化文書をスタイルシートを用いて変換した結果得られる表示文書の表示画面上で、所望の新たな表示要素の挿入位置を指定するだけで、当該表示文書上の挿入位置に当該新たな表示要素を生成する新たな要素をＸＭＬ文書中に挿入することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係るＸＭＬ文書編集装置の構成例を示した図。
【図２】編集対象のＸＭＬ文書の一例を示す図。
【図３】スタイルシートとしてのＸＳＬＴ文書の一例を示す図。
【図４】表示文書の一例を示す図。
【図５】表示文書の表示例を示す図。
【図６】変換ログの一例を示す図。
【図７】図１のＸＭＬ文書編集装置の処理動作を説明するためのフローチャート。
【図８】変換ログの他の例を示す図。
【図９】変換ログのさらに他の例を示す図。
【図１０】表示文書の表示画面上で、ユーザが新たな表示ノードの挿入位置を指定するための画面表示例を示す図で、（ａ）図は、マウスポインタによる挿入位置の基点となる表示ノードを指定するときの画面表示例を示し、（ｂ）図は、マウスポインタによる基点の表示ノードと新たな表示ノードとの位置関係を指定するときの画面表示例を示している。
【図１１】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャートで、挿入位置として指定さえた基点の表示ノードとの位置関係が子ノード「ｃｈｉｌｄ」となる新たな表示ノードを生成する可能性のある新たな分岐処理の挿入位置を変換ログから求めるための処理動作を示している。
【図１２】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャート。
【図１３】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャート。
【図１４】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャート。
【図１５】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャート。
【図１６】挿入位置として指定された基点の表示ノードとの位置関係として兄弟ノード「ｎｅｘｔ」と指定された場合の分岐検索部７の処理動作を説明するための、検索の対象となる変換ログのパターンを示す図。
【図１７】挿入位置として指定された基点の表示ノードとの位置関係として兄弟ノード「ｎｅｘｔ」と指定された場合の分岐検索部７の処理動作を説明するための、検索の対象となる変換ログのパターンを示す図。
【図１８】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャートで、挿入位置として指定さえた基点の表示ノードとの位置関係が兄弟ノードとなる新たな表示ノードを生成する可能性のある新たな分岐処理の挿入位置を変換ログから求めるための処理動作を示している。
【図１９】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャート。
【図２０】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャート。
【図２１】分岐検索部の新たな分岐処理の検索処理動作を説明するためのフローチャート。
【図２２】挿入候補生成部の処理動作を説明するためのフローチャート。
【図２３】挿入候補生成部の処理動作を説明するためのフローチャート。
【図２４】挿入候補生成部の処理動作を説明するためのフローチャート。
【図２５】挿入候補生成部の処理動作を説明するためのフローチャート。
【図２６】候補選択部で生成する選択メニューの表示例を示す図。
【図２７】候補選択部で生成する選択メニューの表示例を示す図。
【図２８】候補選択部の処理動作を説明するためのフローチャート。
【図２９】本発明の第２の実施形態に係るＸＭＬ文書編集装置の構成例を示した図。
【図３０】表示文書の表示画面上で、ユーザが新たな表示ノードの挿入位置を指定するための画面表示例を示す図。
【図３１】表示文書の表示画面上で、ユーザが新たな表示ノードの挿入位置を指定するための画面表示例を示す図。
【図３２】挿入候補の表示例を示した図。
【図３３】分岐検索部の新たな分岐処理の検索処理動作を説明するための図で、エントリＥｓ、エントリＥｎ、Ｅｂの変換ログ上の位置関係について説明するための図。
【図３４】分岐検索部の新たな分岐処理の検索処理動作を説明するための図で、エントリＥｓ、エントリＥｎ、Ｅｂの変換ログ上の位置関係について説明するための図。
【符号の説明】
１…表示部、２…入力部、３…文書記憶部、４…変換処理部、５…中間記憶部、６…コンテキスト検索部、７…分岐検索部、８…挿入候補生成部、９…候補選択部、１０…データ更新部、１１…挿入位置変換部、１２…変換規則記憶部。
【図１】
2004272684.tif 000003
【図２】
2004272684.tif 000004
【図３】
2004272684.tif 000005
【図４】
2004272684.tif 000006
【図５】
2004272684.tif 000007
【図６】
2004272684.tif 000008
【図７】
2004272684.tif 000009
【図８】
2004272684.tif 000010
【図９】
2004272684.tif 000011
【図１０】
2004272684.tif 000012
【図１１】
2004272684.tif 000013
【図１２】
2004272684.tif 000014
【図１３】
2004272684.tif 000015
【図１４】
2004272684.tif 000016
【図１５】
2004272684.tif 000017
【図１６】
2004272684.tif 000018
【図１７】
2004272684.tif 000019
【図１８】
2004272684.tif 000020
【図１９】
2004272684.tif 000021
【図２０】
2004272684.tif 000022
【図２１】
2004272684.tif 000023
【図２２】
2004272684.tif 000024
【図２３】
2004272684.tif 000025
【図２４】
2004272684.tif 000026
【図２５】
2004272684.tif 000027
【図２６】
2004272684.tif 000028
【図２７】
2004272684.tif 000029
【図２８】
2004272684.tif 000030
【図２９】
2004272684.tif 000031
【図３０】
2004272684.tif 000032
【図３１】
2004272684.tif 000033
【図３２】
2004272684.tif 000034
【図３３】
2004272684.tif 000035
【図３４】
2004272684.tif 000036