(57)【要約】【課題】複数の要素が選択された場合においても１つの要素を選択した場合と同様に編集を行なうことができ、構造化文書の編集を容易とする。【解決手段】文書編集装置は、構造化文書から要素を選択し（Ｓ１０１）、その選択された要素である部分文書の集合を記憶し（Ｓ１０２）、その記憶した部分文書の集合を、表示手段により表示された文書の構造に基づき構築し（Ｓ１０３）、この構築された部分文書に基づいて、構造化文書の構造に関する編集を行う。【選択図】図４
2007265185.tif 000002
【特許請求の範囲】
【請求項１】
構造化文書から要素を選択する要素選択手段と、
この要素選択手段により選択された要素である部分文書の集合を記憶する選択要素記憶手段と、
この選択要素記憶手段で記憶した部分文書の集合を、表示された文書の構造に基づき構築する部分文書構築手段と、
この部分文書構築手段により構築された部分文書に基づいて、構造化文書の構造に関する編集を行う要素処理手段を備えたことを特徴とする文書編集装置。
【請求項２】
前記部分文書構築手段は、スキーマから要素の構造情報を取得する要素構造取得手段と、前記部分文書構築手段により構築された部分文書をスキーマに照らして妥当か検証する部分文書検証手段を備えたことを特徴とする請求項１記載の文書編集装置。
【請求項３】
前記部分文書構築手段は、先祖・子孫の関係がある２つの要素が存在するとき、それらの間に存在する要素を取得し、２つの要素間にその要素を追加する要素補完手段を備えたことを特徴とする請求項１または２記載の文書編集装置。
【請求項４】
前記要素選択手段は、選択・選択解除した要素の対象に内部構造を含むか含まないかを選択する内部構造取得選択手段を備えたことを特徴とする請求項１記載の文書編集装置
【請求項５】
コンピュータに、
構造化文書から要素を選択させる要素選択機能と、
この要素選択機能により選択させた要素である部分文書の集合を記憶させる選択要素記憶機能と、
この選択要素記憶機能で記憶させた部分文書の集合を、表示機能により表示させた文書の構造に基づき構築させる部分文書構築機能と、
この部分文書構築機能により構築させた部分文書に基づいて、構造化文書の構造に関する編集を行わせる要素処理機能を実現させる文書編集プログラム。
【請求項６】
スキーマから要素の構造情報を取得させる要素構造取得機能と、前記部分文書構築機能により構築させた部分文書をスキーマに照らして妥当か検証させる部分文書検証機能により前記部分文書構築機能を実現させる請求項５記載の文書編集プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書を編集する文書編集装置及び文書編集プログラムに関する。
【背景技術】
【０００２】
従来の構造化文書における文章作成処理方式では、構造化文書の構造関係を保つため、構造化文書内の１つの要素を選択すると、選択要素およびその要素が内部構造としてもつ部分文書全体を選択したとみなすことが一般的である。そのため、文書構造に基づいた要素単位の編集を行うことを容易としている。
【０００３】
構造化文書のための汎用編集アプリケーションは、一般にそのアプリケーションが提供する入力表示形式にてデータを編集するものであるが、その多くは要素単位の編集の容易さからツリー形式が利用される。ツリー形式の入力表示形式だと、構造の編集を行う場合柔軟なデータ構造を定義できることからである。
【０００４】
なお、構造化文書に含まれる部分文書には少なくとも操作単位であることを示す情報が含まれており、この情報を基に、少なくとも部分文書とその部分文書の位置情報とを含む部分文書毎の部品データを作成して、構造化文書を部品データの集合として記憶手段に記憶し、操作対象として選択された部分文書に対する操作内容に応じて、操作対象の部分文書に対応する部品データを更新することにより構造化文書を編集するものが知られている（例えば、特許文献１参照）。
【特許文献１】特開２００４−４６３５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来の文書作成方式は、要素を選択する手段、選択した要素をコピーして記憶する手段、記憶した要素を選択箇所に挿入する手段、選択した要素を削除する手段などの編集手段を繰り返すことで、構造化文書を任意な構造に編集することが可能となっている。つまり複数の要素を編集する場合は、要素ごとに編集を行う必要がある。また、１つの要素に対する編集は要素の内部構造も編集の対象となるため、操作が複雑になる可能性が存在する。
【０００６】
例えば、図１９で示すツリー形式の構造化文書を図１８で示すツリー形式の構造化文書となるように編集を行う場合を考える。ここで、ツリー表現で下線を引いている要素は選択されている要素であることを示す。まず、図１９の要素ｔａｒｇｅｔ１（要素番号３）を選択し、図１８の要素ｔａｒｇｅｔ１（要素番号２）の位置へ挿入し、次に図１９の要素ｔａｒｇｅｔ１（要素番号２）の内部構造に含まれる要素を全て削除する。要素ｔａｒｇｅｔ２（要素番号８）をコピーし、図１８の要素ｔａｒｇｅｔ１（要素番号２）の子要素として挿入し、要素ｔａｒｇｅｔ２（要素番号３）の内部構造に含まれる要素を削除するという編集を行なう必要がある。要素ｔａｒｇｅｔ１と要素ｔａｒｇｅｔ２という２つの要素をコピーし、任意の場所に貼り付けるだけではなく、要素ｔａｒｇｅｔ１の内部構造を削除する作業を追加する必要が生じる。このように、従来方法では任意に編集可能であるが、ユーザに対し複雑な編集を要求していた。
【０００７】
本発明は上記事情に鑑みてなされたものであって、その目的は、複数の要素が選択された場合においても１つの要素を選択した場合と同様に編集を行なうことができ、構造化文書の編集を容易にすることができる文書編集装置及び文書編集プログラムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、構造化文書から要素を選択し、その選択された要素である部分文書の集合を記憶し、その記憶した部分文書の集合を、表示された文書の構造に基づき構築し、この構築された部分文書に基づいて、構造化文書の構造に関する編集を行う文書編集装置である。
【発明の効果】
【０００９】
本発明によると、複数の要素が選択された場合においても１つの要素を選択した場合と同様に編集を行なうことができ、構造化文書の編集を容易にすることができる文書編集装置及び文書編集プログラムを提供できる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施形態について図面を参照して説明する。なお、以下の説明では、編集対象の構造化文書がＸＭＬ文書の場合を例にとり説明する。また、これ以降記述しない限り、要素とは要素ならびに要素の内部構造をあわせたＸＭＬ部分文書を指すものとする。
【００１１】
（第１の実施の形態）
先ず、第１の実施の形態について述べる。図１は、文書編集装置１００の構成を示すブロック図である。文書編集装置１００は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、表示装置１４（表示手段）、入力装置１５、記憶装置１６等から構成されている。  
ＣＰＵ１１は、構造化文書管理装置全体の制御を司るものである。また、ＣＰＵ１１は、ＲＯＭ１２に記憶されている制御プログラムや記憶装置１６に記憶されているアプリケーションプログラムを実行することにより様々な機能を実現している。ＲＯＭ１２は、文書管理装置が動作するための基本的な制御プログラムなどが予め記憶されている不揮発性のメモリである。ＲＡＭ１３は、作業用のデータなどを一時的に格納する記憶領域が設けられたメモリである。
【００１２】
表示装置１４は、対象のＸＭＬ文書をツリー表示するためのものである。表示されるツリーはＸＭＬ文書の構造に基づくものであり、ツリーのノードはＸＭＬ文書の要素と対応している。また、入力装置１５により要素が選択されると、選択したことが識別できるようその要素にマークを付加し、選択が解除されるとマークは要素から外される（図示を省略する）。選択した要素の内部も選択された要素とされるが、それらに対してはマークを付加しない。
【００１３】
入力装置１５は、ユーザがＸＭＬ文書から編集手段の選択、要素の挿入場所を指定するためのものである。なお、編集手段は、この実施の形態では要素の選択・選択解除、要素のコピー、要素の削除・貼り付けとする。
【００１４】
記憶装置１６は、編集を行うＸＭＬ文書、入力装置１５により選択された要素の選択要素リスト１７、編集用データとして生成された編集用部分文書リスト、コピー用データとなるコピー用データリストが保持される。図２は、選択要素リスト１７を示す図である。図２に示すように、選択された要素がツリー状に示されている。また、記憶装置１６には、要素選択処理、選択要素リスト生成処理（選択要素記憶処理）、編集用データ生成処理（部分文書構築処理）、要素処理を実行するための制御プログラムを記憶している。ＣＰＵ１１は、これらの制御プログラムをＲＡＭ１３に読み出して実行することにより、要素選択機能、選択要素記憶機能、部分文書構築機能、要素処理機能を実現している。
【００１５】
図３は選択要素リスト１７構成を示す図である。選択要素リスト１７は、要素１８、編集フラグ１９を有している。要素１８には、入力装置１５によって選択されたノードに対応するＸＭＬ文書の要素が記憶され、編集フラグ１９には前記要素の内部構造にリスト内の要素が含まれているかどうかの論理値が記憶されている。理論値としては、「偽」又は「真」が記憶される。
【００１６】
なお、ＸＭＬ文書は、自身の子要素と親要素の情報から、ＸＭＬ文書を構築することができるようになっている。これ以降の説明では、ＸＭＬ文書の要素にこれらの情報が付加されているものとする。これらの情報をもとにＸＭＬ文書の構造を操作するため上記要素処理では、親要素を取得するための処理、子要素を取得する処理、子要素に要素を追加する処理、子要素を削除する処理、要素をコピーする処理を有している。すなわち、親要素を取得する機能、子要素を取得する機能、子要素に要素を追加する機能、子要素を削除する機能、要素をコピーする機能により要素処理機能を実現する。
【００１７】
要素をコピーする処理は、コピーする際に、要素とその内部構造の要素をコピーするとともに、親要素に関する情報を消去することによりＸＭＬ文書の構造と関連性を排除するものである。これらの処理は以後、次のように表現するものとする。  
要素ｅの親要素を取得する処理・・・ＰａｒｅｎｔＮｏｄｅ（ｅ）
要素ｅの子要素を取得する処理・・・ＣｈｉｌｄＮｏｄｅ（ｅ）
要素ｅのi番目の子要素を取得する処理・・・ＣｈｉｌｄＮｏｄｅ（ｅ）［ｉ］
要素ｅの子要素の末尾に要素ｃを追加する処理・・・ＡｄｄＮｏｄｅ（ｅ，ｃ）
要素ｅの全ての子要素を削除する処理・・・ＤｅｌｅｔｅＡｌｌＮｏｄｅ（ｅ）
要素ｅをコピーする処理・・・Ｃｌｏｎｅ（ｅ）
上記処理はＸＭＬ文書を表示するツリーにおいても同様の処理を可能とし、上記表現中の要素をツリーノードと置き換えることができる。
【００１８】
図４は、文書管理装置のＣＰＵ１１が実行する文書編集処理全体を示すフローチャートである。  
ＸＭＬ文書を表示したツリーからノードが選択若しくは選択解除されたことの確定をすると（ステップＳ１０１，要素選択手段）、選択された全てのノードに対応する要素を後述する選択要素リスト生成処理によりリスト化し、選択要素リスト１７として記憶領域に保持する（ステップＳ１０２，選択要素記憶手段）。次に、選択要素リスト１７から後述する編集用データ生成処理により編集用データリストを構築する（ステップＳ１０３，部分文書構築手段）。編集用データ作成後、編集手段がユーザにより入力されると（ステップＳ１０４）、編集手段がどのような編集であるかが判断される（ステップＳ１０５）。
【００１９】
ステップＳ１０５で編集手段が要素のコピーであると判断されると、編集用データリストはコピー用データ領域に保持される。この状態でＸＭＬ文書内の指定された位置に貼り付けが実行されると、コピー用データの要素ごとにその位置に挿入を行う。全ての要素が完了すると貼り付け作業を終了する。全ての要素が完了する前に、なんらかの原因により貼り付けができない場合は、コピー用データ領域の要素を挿入位置から全て取り除き、貼り付け処理を終了する（ステップＳ１０６）。また、ステップＳ１０５で要素編集手段が要素の削除・貼り付けであると判断されると、選択されたＸＭＬ文書の要素が削除される。このとき、編集用データリストにある要素と対応するＸＭＬ文書の全ての要素を対象に、削除を実行することで、選択した要素に対する削除作業を行うことができる。また、ステップＳ１０５で編集手段が要素の選択・選択解除であると判断されると、ステップＳ１０１へ処理を移行する。なお、ステップＳＴ１０５からＳＴ１０７は要素処理手段を構成する。尚、要素選択手段は確定処理を含まなくても良い。
【００２０】
次に、選択要素リスト生成処理について説明する。選択要素リスト生成処理は、入力装置１５により表示されているツリーからノードが選択・選択解除されるのを検知すると、選択されたノードと対応するＸＭＬ文書の要素を抽出し、選択要素リスト１７を生成する処理である。この処理について図５を用いて説明する。図５は選択された表示ツリーのノードから対応するＸＭＬ文書の要素をリスト化する処理を示すフローチャートである。
【００２１】
先ず、記憶領域の選択要素リスト１７を空にする（ステップＳ２０１）。ＣＰＵ１１は選択されているノード数を求め、ノードが少なくとも１つ選択されているか否かを判断する(ステップＳ２０２)。ステップＳ２０２でノードが選択されている場合は、走査対象をルートノードとし、選択要素抽出処理を実行する（ステップＳ２０３）。この選択要素抽出処理の詳細については後述する。この選択要素抽出処理が終了して選択要素リスト１７が抽出されたとき、または、ステップＳ２０２でノードが１つも選択されていない場合は、選択要素リスト１７を記憶領域に保存する（Ｓ２０４）。
【００２２】
次に、選択要素抽出処理について説明する。選択要素抽出処理は対象となるノードが選択されている場合、対応するＸＭＬ文書の要素を取得し、選択要素リスト１７に追加、その後対象ノードの内部ノードに対して同様の処理を行うものである。この処理について図６を用いて説明する。図６は、選択要素抽出処理を示すフローチャートである。
【００２３】
まず、走査対象となるノードを取得後（ステップＳ３０１）、そのノードが選択されているか確認する（ステップＳ３０２）。ノードが選択されていた場合（ステップＳ３０２でＹＥＳ）、そのノードのパスを取得し(ステップＳ３０３)、ＸＭＬ文書の対応する要素を取得し（ステップＳ３０４）、選択要素リスト１７の末尾に追加する（ステップＳ３０５）。
【００２４】
ノードのパスを選択要素リスト１７の末尾に追加した場合（ステップＳ３０５）、又はステップＳ３０２でノードが選択されていなかった場合、すなわち、対象ノードに対する処理が終了すると、対象ノードの内部のノードに対して選択要素リスト１７の追加作業を行うため、子要素に対し選択要素抽出処理を行う。まず、子要素の何番目かを指すインデックスｉを初期化する（ステップＳ３０６）。次にｉ番目の要素が存在するかを確認する（ステップＳ３０７）。ｉ番号目の要素の存在が確認できない場合は（ステップＳ３０７でＮＯ）、全ての子要素を確認したことになり処理を終了する。ｉ番目の要素の存在が確認できた場合は（ステップＳ３０７でＹＥＳ）、ｉ番目の子要素に対し、選択要素抽出処理を実行する（ステップＳ３０８）。この処理は再帰処理になっているため、走査対象のノード内部におけるすべてのノードに対し要素抽出処理を行うことができる。要素選択抽出処理が終了後、次の子要素に対し処理を行うため、インデックスｉをインクリメントし（ステップＳ３０９）、ステップＳ３０７の処理へ戻る。
【００２５】
選択要素リスト１７作成時点では、選択要素リスト１７内の要素の関係について関連付けすることはできない。ただし、親要素より子要素が、兄要素が弟要素よりも後に処理されるため、選択要素リスト１７の順番も同様に親要素より子要素が、兄要素よりも弟要素が先に出現することはない。そのため、後述する編集用データ生成処理において、編集元となるＸＭＬ文書における親子関係や兄弟関係といった要素の位置の関係性を崩すことなく編集用データを作成することができる。
【００２６】
編集用データ生成処理は、選択要素リスト１７から編集用データリストを生成するための処理であり、大きく分けて選択要素リスト１７から編集用データリストの要素となるものを取得する段階と、その編集用データリストの要素の内部構造を構築する段階の２つに分かれる。この処理について図７を用いて説明する。図７は編集用データ生成処理を示すフローチャートである。
【００２７】
まず、選択要素リスト１７から、編集用データリストの要素となるものを取得する処理を行なう（ステップＳ４０１〜Ｓ４０５）。具体的には、選択要素リスト１７のインデックスｎを初期化し（ステップＳ４０１）、選択要素リスト１７からｎ番目の要素を取得する（ステップＳ４０２）。この要素に対し、編集用要素抽出処理を実行する（ステップＳ４０３）。編集用要素抽出処理は、編集用データリストの要素か、それともその要素の内部構造のための要素かを判定し、編集用データリストの要素であれば、選択要素リスト１７から削除し、編集用データリストに追加するものである。この処理は後述する。編集用要素抽出処理終了後、インデックスｎをインクリメントする（ステップＳ４０４）。編集用要素抽出処理を全ての選択要素リスト１７に対して実行したことを確認できない場合は（ステップＳ４０５でＮＯ）、次の要素に対し処理を行う（ステップＳ４０２）。編集用要素抽出処理を全ての選択要素リスト１７に対して実行したことを確認すると（ステップＳ４０５でＹＥＳ）、編集用データリストの要素が決定する。
【００２８】
ただし、この段階では編集用データリストの各要素の内部構造は構築されていないため、編集用データリストの要素として選択されなかった選択要素リスト１７の要素を利用し内部構造を構築する処理を行なう（ステップＳ４０６〜Ｓ４１０）。具体的には、まず、編集用データリストのインデックスｍを初期化し（ステップＳ４０６）、編集用データリストからｍ番目の要素を取得する（ステップＳ４０７）。取得した要素に対し、内部構造構築処理を実行すると（ステップＳ４０８）、対象要素の内部構造が決定する。この内部構造構築処理は後述する。内部構造構築処理終了後、インデックスｍをインクリメントする（ステップＳ４０９）。編集用データリストに対し一通りの処理が終了したことを確認できない場合は（ステップＳ４１０でＮＯ）、次の要素に対し処理を行う（ステップＳ４０６）。編集用データリストに対し一通りの処理が終了したことを確認すると（ステップＳ４１０でＹＥＳ）、編集用データリストが完成し、この処理を終了する。
【００２９】
次に、編集用要素抽出処理について説明する。図８は編集用要素抽出処理を示すフローチャートである。  
まず、対象となる要素ｅを取得し（ステップＳ５０１）、要素ｅの親要素ＰａｒｅｎｔＮｏｄｅ（ｅ）が存在しないか検証する判断を行なう（ステップＳ５０２）。ＰａｒｅｎｔＮｏｄｅ（ｅ）が存在しない場合は（ステップＳ５０２でＹＥＳ）、ＸＭＬ文書におけるルート要素まで検証が行われたことを意味し、選択要素リスト１７５における各要素の内部構造のいずれにも含まれないことが証明されるため、編集用データリストの要素としてリストの末尾に追加し（ステップＳ５０３）、選択要素リスト１７から削除した後（ステップＳ５０４）、処理を終了する。
【００３０】
一方、ＰａｒｅｎｔＮｏｄｅ（ｅ）が存在する場合は（ステップＳ５０２でＮＯ）、要素ｅをＰａｒｅｎｔＮｏｄｅ（ｅ）に置き換え（ステップＳ５０５）、要素ｅが選択要素リスト１７５に含まれないかを検証する判断を行なう（ステップＳ５０６）。要素ｅが選択要素リスト１７５に含まれない場合は（ステップＳ５０６でＮＯ）、ステップＳ５０２へ戻る。要素ｅが選択要素リスト１７に含まれる場合は（ステップＳ５０６でＹＥＳ）、その選択要素リスト１７の要素の内部構造であると判断され、処理を終了する。
【００３１】
この処理では、対象要素の先祖要素を探査し、その中に選択要素リスト１７に含まれるものが無いかどうかを検証する。存在しない場合には編集用データリストの要素として抽出し編集用データリストに追加され、存在する場合はその要素の内部構造の要素として判定され、後述する内部構造構築処理にて処理される。
【００３２】
例えば、図１９の要素ｔａｒｇｅｔ１（要素番号３）、ｔａｒｇｅｔ２（要素番号７）を選択するような場合、先祖要素に選択された要素がないため編集用データリストの要素と判定され、要素ｔａｒｇｅｔ２は先祖要素に要素ｔａｒｇｅｔ１が存在するため、要素ｔａｒｇｅｔ１の内部構造の要素と判定される。
【００３３】
次に内部構造構築処理について説明する。図９は内部構造抽出処理を示すフローチャートである。  
まず、編集用データリスト内の対象となる要素ｐの内部構造の要素となる要素を探索する。すなわち、対象となる要素ｐを取得し（ステップＳ６０１）、選択要素リスト１７のインデックスｉを初期化する（ステップＳ６０２）。
【００３４】
続いて、選択要素リスト１７から要素ｌｉｓｔ［ｉ］を取得し、これを要素ｅとする（ステップＳ６０３）。そして、要素ｅが存在しないか否かを判断する（ステップＳ６０４）。要素ｅが存在しない場合は（ステップＳ６０４でＹＥＳ）、ステップＳ６１５の処理へ移行する。
【００３５】
また、要素ｅが存在する場合は（ステップＳ６０４でＮＯ）、次に、ｌｉｓｔ［ｉ］が編集用データリストにある要素の子要素にあたるのか、残った選択要素リスト１７の要素の子要素にあたるのかを調べる処理を行なう（ステップＳ６０５〜Ｓ６０７）。具体的には、要素ｅの親要素にあたるＰａｒｅｎｔＮｏｄｅ（ｅ）を取得し、要素ｅをＰａｒｅｎｔＮｏｄｅ（ｅ）に置き換え（ステップＳ６０５）、要素ｅが選択要素リスト１７の要素と一致するかを調べることにより、要素ｅが選択要素リスト１７に含まれるか否かを判断する（ステップＳ６０６）。
【００３６】
この処理一致する場合（ステップＳ６０６でＹＥＳ）、ｌｉｓｔ［ｉ］はそのリストの要素の内部構造に含まれるため、対象となるｐの子要素ではないと判断し、ステップＳ６１５の処理へ移行する。一致しない場合（ステップＳ６０６でＮＯ）、対象要素ｐと一致するかを調べる（ステップＳ６０７）。対象要素ｐと一致しない場合は（ステップＳ６０７でＮＯ）、ステップＳ６０５の処理へ戻り、さらに要素ｅの親要素について調べる。
【００３７】
対象要素ｐと一致した場合は（ステップＳ６０７でＹＥＳ）、対象要素ｐの子要素となるため、要素ｐに追加する処理を行なう（ステップＳ６０８〜Ｓ６１４）。まず、選択要素リスト１７から、要素ｐにあたる編集フラグ１９ｆを取得する（ステップＳ６０８）。編集フラグ１９が「真」か「偽」か確認した結果（ステップＳ６０９）、編集フラグ１９が「偽」の場合、要素ｐには初期の内部構造が残っているため、編集フラグ１９を「真」とし（ステップＳ６１０）、内部構造を消去する（ステップＳ６１１）。次に要素ｌｉｓｔ［ｉ］のコピーを要素ｐの子要素の末尾に追加し（ステップＳ６１２）、選択要素リスト１７からｌｉｓｔ［ｉ］を削除し（ステップＳ６１３）、要素ｐに追加したｌｉｓｔ［ｉ］の内部構造を構築するために、内部構造構築処理を呼び出す（ステップＳ６１４）。この処理が終わると、ステップＳ６１５の処理へ移行する。
【００３８】
ステップＳ６１５においては、インデックスｉをインクリメントする。そして、選択要素リスト１７を全て調査したか否かを判断する（ステップＳ６１６）。選択要素リスト１７を全て調査していない場合は（ステップＳ６１６でＮＯ）、ステップＳ６０３の処理へ戻る。また、選択要素リスト１７を全て調査している場合は（ステップＳ６１６でＹＥＳ）、処理を終了する。
【００３９】
図１０は、図１９の要素ｔａｒｇｅｔ１（要素番号３）、ｔａｒｇｅｔ２（要素番号７）が選択されたときの編集用データリストを作成するまでの過程を示している。（ａ）は編集用要素抽出処理により要素ｔａｒｇｅｔ１が編集用データリストに追加された状態である。ここで、要素ｔａｒｇｅｔ１に対する内部構造構築処理を行うと、要素ｔａｒｇｅｔ２（要素番号７）の親要素ｐａｒｅｎｔ（要素番号５）、祖父要素ｔａｒｇｅｔ１（要素番号３）について要素ｔａｒｇｅｔ１と一致するかを調べる。祖父要素は要素ｔａｒｇｅｔ１と同等なため、要素ｔａｒｇｅｔ１と対応する選択要素リスト１７のフラグを見ると「偽」なので、編集用データリストの要素ｔａｒｇｅｔ１の内部構造を消去し、編集フラグ１９を「偽」から「真」とする（図１０（ｂ））。最後に要素ｔａｒｇｅｔ２を編集用データリストの子要素の末尾に追加し、要素ｔａｒｇｅｔ２に対し内部構造構築処理を行う。選択要素リスト１７５には要素がないため、編集用データ生成処理が終了し、編集用データリストが確定する（図１０（ｃ））。
【００４０】
以上の説明のように、第１の実施の形態の文書編集装置１００によれば、一度に複数の要素を選択することにより、わずかな編集手段を用いることで、複数要素に対する編集を容易にし、ユーザが理解しやすい編集を行なうことができる。すなわち、文書編集装置１００は複数の要素が選択された場合においても１つの要素を選択した場合と同様に編集を行なうことができ、構造化文書の編集を容易にすることができる。
【００４１】
(第２の実施形態）
次に、第２の実施の形態について述べる。なお、前述した第１の実施の形態と同一の部分には同一の符号を付し詳細な説明は省略する。ここでは、ＸＭＬ文書の構造情報が示されたスキーマを利用している場合について説明する。スキーマに基づきＸＭＬ文書が構成されている場合、編集用データリストの各要素についても同様にそのスキーマに基づき構成される必要がある。このため、編集用データリストの各要素がスキーマに基づいているかを検証し、スキーマと一致しない場合には、適切な要素を補完することによりスキーマに基づいた要素を構築する。
【００４２】
この第２の実施の形態では、記憶装置１６は、編集を行うＸＭＬ文書の構造情報が記されたスキーマが保持される。図１１は、スキーマの構造例を示す図である。また、記憶装置１６には、さらに、対象の要素に関するスキーマ情報を取得し、要素の内部構造の妥当性を検証するための処理を行う制御プログラムが記憶されている。
【００４３】
次にスキーマ検証処理について説明する。図１２はスキーマ検証処理を示すフローチャートである。
【００４４】
まず、ＸＭＬ文書のスキーマから、要素ｐに対応するスキーマ情報を取得する（ステップＳ７０１，要素構造取得手段）。スキーマ情報には、子要素として持つことができる要素や、要素数などの制限などが記述されている。このスキーマ情報に照らし合わせ、要素ｐに要素ｌｉｓｔ[ｉ]を追加することが妥当かどうかを検証する(ステップＳ７０２，部分文書検証手段)。この検証処理に基づいて、検証結果は妥当か否かが判断される（ステップＳ７０３）。妥当であると判断した場合は（ステップＳ７０３でＹＥＳ）、要素ｐの子要素として要素ｌｉｓｔ［ｉ］を追加することが可能であり、要素ｐの子要素の末尾にｌｉｓｔ［ｉ］を追加し（ステップＳ７０４）、処理を終了する。妥当でないと判断した場合は（ステップＳ７０３でＮＯ）、スキーマに基づいた要素の内部構造を構築するため、要素補完処理により要素ｐとｌｉｓｔ［ｉ］を関連付けるための要素を補完し（ステップＳ７０４，要素補完手段）、処理を終了する。要素補完処理については後述する。
【００４５】
次に要素補完処理について説明する。図１３は、要素補完処理を示すフローチャートである。要素補完処理は、先祖と子孫の関係にある要素において、その間にある要素を取得し、先祖と子孫要素を結ぶための処理である。
【００４６】
まず、先祖要素にあたる要素ｐと子孫要素にあたる要素ｃ取得し(ステップＳ８０１)、内部構造の要素を示す要素c’にＣｌｏｎｅ（ｃ）を代入する(ステップＳ８０２)。次に、要素ｃの親要素Ｐａｒｅｎｔ（ｃ）を要素ｅとし（ステップＳ８０３）、要素ｅと要素ｐが一致するかを比較する(ステップＳ８０４)。
【００４７】
ステップＳ８０４で要素ｅと要素ｐが一致しない場合（ステップＳ８０４でＮＯ）、要素ｅは要素ｐの子要素ではないので、要素ｅの子要素としてｃ’を追加するためＣｌｏｎｅ（ｅ）の内部構造を消去し（ステップＳ８０５）、要素ｃ’をＣｌｏｎｅ（ｅ）の子要素として追加する（ステップＳ８０６）。要素ｃを要素ｅに要素Ｃｌｏｎｅ（ｅ）をｃ’に代入し（ステップＳ８０７）、ステップＳ８０３の処理へ戻る。ステップＳ８０４で要素ｅと要素ｐが一致する場合（ステップＳ８０４でＹＥＳ）、要素ｐの子要素の末尾に要素ｃ’を追加し(ステップＳ８０８)、処理を終了する。このように、要素ｃの親要素を順次追加することで、要素ｐと関連付けることができるとともに、要素ｐの内部構造におけるスキーマの妥当性を保証できる。
【００４８】
図１４は、ＸＭＬ文書のスキーマでは要素ｔａｒｇｅｔ１の子要素として要素ｔａｒｇｅｔ２を追加することはできないときに、図１９の要素ｔａｒｇｅｔ１（要素番号３）、ｔａｒｇｅｔ２（要素番号７）が選択された場合の編集用データリストを作成するまでの過程を示している。（ａ）は編集用要素抽出処理により要素ｔａｒｇｅｔ１が編集用データリストに追加された状態である。ここで、要素ｔａｒｇｅｔ１に対する内部構造構築処理を行うと、要素ｔａｒｇｅｔ２の親要素ｐａｒｅｎｔ、祖父要素ｔａｒｇｅｔ１について要素ｔａｒｇｅｔ１と一致するかを調べる。祖父要素は要素ｔａｒｇｅｔ１と同等なため、ｔａｒｇｅｔ２は要素ｔａｒｇｅｔ１の子要素となる。要素ｔａｒｇｅｔ１と対応する選択要素リスト１７５のフラグを見ると偽なので、編集用データリストの要素ｔａｒｇｅｔ１の内部構造を消去し、前記フラグを真とする（図１４（ｂ））。
【００４９】
次に、要素ｔａｒｇｅｔ１の子要素として要素ｔａｒｇｅｔ２を追加しようとするが、スキーマにより要素ｔａｒｇｅｔ１の子要素として要素ｔａｒｇｅｔ２を追加することはできないので、要素補完処理を実行する。要素ｔａｒｇｅｔ２の親要素ｐａｒｅｎｔを取得し内部構造を消去した後、要素ｔａｒｇｅｔ２を要素ｐａｒｅｎｔの子要素として追加する（図１４（ｃ））。
【００５０】
元のＸＭＬ文書において要素ｔａｒｇｅｔ１は要素ｐａｒｅｎｔの子要素であり、またＸＭＬ文書のスキーマとしても一致する。最後に要素ｐａｒｅｎｔを編集用データリストの子要素の末尾に追加し、要素ｔａｒｇｅｔ２に対し内部構造構築処理を行う。選択要素リスト１７５には要素がないため、編集用データ生成処理が終了し、編集用データリストが確定する（図１４（ｄ））。
【００５１】
以上説明したように、上記第２の実施の形態の文書管理装置によれば、ＸＭＬ文書の構造がスキーマにより定義されていた場合に、選択した要素から構築した編集用の要素に対しスキーマの検証を行うことにより、ＸＭＬ文書同様に構造が正しいか検証できるため、編集後のＸＭＬ文書における構造の妥当性を保証することができる。また、スキーマに一致しない構造の場合、ＸＭＬ文書から適切な要素を動的に追加することにより、ユーザはスキーマを意識することなく、要素の編集を行うことができる。
【００５２】
(第３の実施形態)
次に、第３の実施の形態について述べる。なお、前述した第１の実施の形態と同一の部分には同一の符号を付し詳細な説明は省略する。ここでは、要素選択時に要素の内部構造を含むか含まないかを任意に選択可能な内部構造取得選択手段を有し、実際に選択された要素のみで編集用データリストを作成する場合について説明する。
【００５３】
表示装置１４は、第１の実施形態と異なり、実際に選択された要素以外の要素であっても選択されたとみなす場合は、すべての要素に対しマークを付加するものとする。たとえば、要素を選択されたことにより、内部構造も選択されたことを意味した場合、それら内部構造の全ての要素に対しマークを付加する。
【００５４】
入力装置１５は、内部構造を含み選択したのか否かを判定するための入力装置１５をさらに備える。ここでは、ツリー上のノードを選択するためのその入力装置１５であるマウスを備え、シングルクリックするときは要素のみを、ダブルクリックしたときは要素と内部構造全体を選択するものとする。
【００５５】
記憶装置１６は、選択要素リスト１７より編集フラグ１９を削除した単純な要素のリストを記憶している。また、記憶装置１６には、選択要素リスト生成処理に、前記マウスによりノードをクリックしたことを検知すると、クリックの回数により、表示装置１４の各要素に対しマーク付けを行う処理ならびに前記選択要素リスト生成処理中の選択要素抽出処理に選択した要素の内部構造を消去する処理を付加する制御プログラムを記憶する。また、内部構造構築処理から、選択要素リスト１７の編集フラグ１９を検証し、追加対象の親要素から子要素を削除する処理を削除する処理を行なう制御プログラムを記憶する。したがって、ＣＰＵ１１は、記憶装置１６に記憶された制御プログラムを実行することにより、表示装置１４の各要素に対しマーク付けを行う機能、前記選択要素リスト生成処理中の選択要素抽出処理に選択した要素の内部構造を消去する機能、内部構造構築処理から、選択要素リスト１７の編集フラグ１９を検証し、追加対象の親要素から子要素を削除する処理を削除する機能を実現している。
【００５６】
次に選択要素リスト生成処理について説明する。図１５は選択要素リスト生成処理を示すフローチャートである。  
表示装置１４にツリー表示されたＸＭＬ文書から入力装置１５によりノードが選択もしくは選択が解除されると、クリックの種類が、シングルクリックであるかダブルクリックであるかを判断する（ステップＳ９０１）。この判断は、選択時のマウスのクリック回数を検知することにより行なう。
【００５７】
ステップＳ９０１でダブルクリックされたことを検知すると、その要素が選択された場合は内部構造を全て選択状態にし、選択が解除されると内部構造の全ての要素を選択解除状態にする(ステップＳ９０２)。このように、内部構造全ての要素を選択・選択解除したとき、又はステップＳ９０１でシングルクリックと判断したときは、記憶領域の選択要素リスト１７を空にし（ステップＳ９０３）、選択されているノード数を求め、ノードが少なくとも１つ選択されているか否かを判断する（ステップＳ９０４）。
【００５８】
ノードが少なくもと１つ選択されている場合は（ステップＳ９０４でＹＥＳ）、対象ノードを表示ツリーのルートノードとして、選択要素抽出処理を行う(ステップＳ９０５)。選択要素抽出処理については後述する。そして、選択要素抽出処理について全ての選択ノードに対し選択ノードからＸＭＬ文書の要素を取得する処理を行った後、又はノードが1つも選択されていない場合は（ステップＳ９０４でＮＯ）、選択要素リスト１７を記憶領域に保存し終了する（ステップＳ９０６）。
【００５９】
選択要素抽出処理は対象となるノードが選択されている場合、対応するＸＭＬ文書の要素を取得し、選択要素リスト１７に追加、その後対象ノードの内部ノードに対して同様の処理を行う。
【００６０】
次に選択要素抽出処理について説明する。図１６は選択要素抽出処理を示すフローチャートである。
【００６１】
まず、走査対象となるノードを取得し（ステップＳ１００１）、そのノードは選択されているか確認する（ステップＳ１００２）。選択されていることが確認できた場合（ステップＳ１００２でＹＥＳ）、そのノードのパスを取得し(ステップＳ１００３)、ＸＭＬ文書の対応する要素を取得し（ステップＳ１００４）、対象の要素の内部構造を全て消去した後（ステップＳ１００５）、選択要素リスト１７の末尾に追加する（ステップＳ１００６）。
【００６２】
ステップＳ１００６で対象の要素の内部構造を全て消去した要素を選択要素リスト１７の末尾に追加したとき、又は取得したノードが選択されていることが確認できなかった場合（ステップＳ１００２でＮＯ）、対象ノードの内部ノードに対して選択要素リスト１７５の追加作業を行うため、何番目の子要素かをさすインデックスｉの初期化処理を実行する（ステップＳ１００７）。
【００６３】
インデックスｉの初期化処理を実行した後、全ての子要素に対し要素抽出処理が実行されたか否かを判断する（ステップＳ１００８）。全ての子要素に対し要素抽出処理が実行されていないと判断した場合は（ステップＳ１００８でＮＯ）、ｉ番目の子要素に対し選択要素抽出処理を行う（ステップＳ１００９）。要素抽出処理後、インデックスｉをインクリメントし（ステップＳＴ１０１０）、ステップＳ１００８の処理へ戻る。このようにステップＳ１００８からＳ１０１０の処理は再帰処理になっているため、選択されたノードの内部構造に対しノード選択時の要素抽出処理を行うことができる。すべての子要素に対し要素抽出処理が実行されたと判断すると（ステップＳ１０１１）、処理を終了する。
【００６４】
内部構造構築処理は、第１の実施の形態の内部構造構築処理から選択要素リスト１７の編集フラグ１９を検証し、追加対象の親要素から子要素を削除する処理を取り除き実行する。内部構造構築処理のフローチャートを示す図１９のステップＳ６０８〜Ｓ６１１までの処理を実行せず、ステップＳ６０７からステップＳ６１２へ処理を移行する。これは、前記選択要素抽出処理が行われた段階で選択要素リスト１７における全要素の内部構造が削除されているため、内部構造構築処理で改めて内部構造の削除処理を行わなくてもよいからである。
【００６５】
図１７は、図１９のｔａｒｇｅｔ１（要素番号３）に相当するツリーノードをシングルクリック後、要素ｔａｒｇｅｔ２（要素番号７）に相当するツリーノードをダブルクリックで選択した時の状況を示す。図１７（ａ）はｔａｒｇｅｔ１（要素番号３）に相当するツリーノードをシングルクリックし、選択要素抽出処理したときのツリー表示と、選択要素リスト１７５を示す。
【００６６】
図１７（ｂ）は要素ｔａｒｇｅｔ２（要素番号７）に相当するツリーノードをダブルクリックし、選択要素抽出処理したときのツリー表示と、選択要素リスト１７を示す。要素ｔａｒｇｅｔ２（要素番号７）をダブルクリックすることにより要素ｃｈｉｌｄ（要素番号８）が選択され、選択要素リスト１７に追加される。シングルクリック、ダブルクリックのいずれの場合でも、選択要素リスト１７の各要素は内部構造が削除されている。
【００６７】
編集用データ生成処理を実行すると、ｔａｒｇｅｔ１をルートとし要素ｔａｒｇｅｔ２、要素ｃｈｉｌｄを内部構造とする選択した要素のみで構成される編集用データリストが生成される（図１７（ｃ））。
【００６８】
以上説明したように、第３の実施の形態の文書編集装置１００によれば、マウスのダブルクリック、シングルクリックを用いて要素を選択する要素選択手段を細分化することにより、ユーザに任意の要素のみを対象に要素の編集を行うことが可能であり、対象となる要素が明確な集方法を提供することができる。また、要素選択時に、要素内部を含むか含まないかを選択する手段、選択されている要素を表示する手段を提供することにより、任意の要素を選択可能とすることができる。
【００６９】
なお、上述の説明では、編集対象の構造化文書がＸＭＬ文書の場合を例にとり説明しているが、構造化文書はＸＭＬ文書に限られるものではない。例えば、構造化文書はＨＴＭＬ（Hyper Text Markup Language）文書でも良い。
【００７０】
本実施の形態では装置内部に発明を実施する機能が予め記憶されている場合で説明したが、これに限らず同様の機能をネットワークから装置にダウンロードしても良いし、同様の機能を記憶媒体に記憶させたものを装置にインストールしても良い。記憶媒体としては、ＣＤ−ＲＯＭ等プログラムを記憶でき、かつ、装置が読取り可能な記憶媒体であれば、その形態は何れの形態であっても良い。またこのように、予めインストールやダウンロードにより得る機能は装置内部のオペレーティングシステム（ＯＳ）等と協同してその機能を実現させるものであっても良い。
【００７１】
なお、本発明は、上述した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化でき、また、実施の形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を変形できるものである。
【図面の簡単な説明】
【００７２】
【図１】本発明の第１の実施の形態における文書編集装置の構成を示すブロック図。
【図２】同実施の形態における選択要素リストを示す図。
【図３】同実施の形態における選択要素リスト構成を示す図。
【図４】同実施の形態における文書編集処理全体を示すフローチャート。
【図５】同実施の形態における要素をリスト化する処理を示すフローチャート。
【図６】同実施の形態における選択要素処理を示すフローチャート。
【図７】同実施の形態における編集用データ生成処理を示すフローチャート。
【図８】同実施の形態における編集用要素抽出処理を示すフローチャート。
【図９】同実施の形態における内部構造抽出処理を示すフローチャート。
【図１０】同実施の形態における編集用データリストを作成するまでの過程を示す図。
【図１１】本発明の第２の実施の形態におけるスキーマの構造例を示す図。
【図１２】同実施の形態におけるスキーマ検証処理を示すフローチャート。
【図１３】同実施の形態における要素補完処理を示すフローチャート。
【図１４】同実施の形態における編集用データリストを作成するまでの過程を示す図。
【図１５】本発明の第３の実施の形態における選択要素リスト生成処理を示すフローチャート。
【図１６】同実施の形態における選択要素抽出処理を示すフローチャート。
【図１７】同実施の形態における編集用データリストを作成するまでの過程を示す図。
【図１８】従来における文書編集処理を説明するための図。
【図１９】従来における文書編集処理を説明するための図。
【符号の説明】
【００７３】
１１…ＣＰＵ，１２…ＲＯＭ，１３…ＲＡＭ，１４…表示装置，１５…入力装置，１６…記憶装置，１７…選択要素リスト，１８…要素，１９…編集フラグ，１００…文書編集装置
【図１】
2007265185.tif 000003
【図２】
2007265185.tif 000004
【図３】
2007265185.tif 000005
【図４】
2007265185.tif 000006
【図５】
2007265185.tif 000007
【図６】
2007265185.tif 000008
【図７】
2007265185.tif 000009
【図８】
2007265185.tif 000010
【図９】
2007265185.tif 000011
【図１０】
2007265185.tif 000012
【図１１】
2007265185.tif 000013
【図１２】
2007265185.tif 000014
【図１３】
2007265185.tif 000015
【図１４】
2007265185.tif 000016
【図１５】
2007265185.tif 000017
【図１６】
2007265185.tif 000018
【図１７】
2007265185.tif 000019
【図１８】
2007265185.tif 000020
【図１９】
2007265185.tif 000021