Webアノテーションシステムは、他のアノテーションの存在によって、構造位置情報からWebテキスト上のアノテーションを埋め込む具体的な位置を求める計算が影響を受ける。したがって、Webアノテーションシステムでは、あるアノテーションを付与する時に存在した他のアノテーションが削除されると、構造位置情報がずれ、アノテーションの埋め込み位置がずれるという問題が発生していた。
Webアノテーションシステムは、アノテーションの埋め込み位置がずれないようにするため、アノテーション付与時に存在していた他のアノテーションが削除されて存在しなくなったとしてもWeb資源(Webページ)解析結果上にダミーとして一時的に存在させる。このように、Webアノテーションシステムは、残りのアノテーションを埋め込む位置の位置計算を正しく行えるようにする。
さらに、Webアノテーションシステムはダミーとして付与したアノテーションを後で消去あるいは無視する処理を加えることで、他のアノテーションの削除等による埋め込み位置のずれの問題を解決する。
本実施例は、Web資源に対してWeb資源上の位置をXPathのような構造位置情報として外部記憶装置(アノテーションDB)に保持し、このアノテーションDBに保持されている構造位置情報にしたがってWeb資源に一時的にアノテーションテキストフラグメントを埋め込むことでアノテーションを行うWebアノテーションシステムを一例として説明する。
本実施例のWebアノテーションシステムでは、あるWebアノテーションを付与する時に存在していた他のWebアノテーションがアノテーションDBから削除されることによって引き起こされる構造位置情報計算のずれを補正し、付与時と同一の位置にWebアノテーションを復元する。
上述の例では、アノテーション(3,X)、(8,Y)、(6,Z)が登録された後、アノテーション(3,X)が削除されたとしても、意図どおりにアノテーションが「ABCDEZFGYHIJ」と復元される。
本実施例のWebアノテーションシステムでは、アノテーションの削除があったときに単純にアノテーションDBからアノテーションデータを削減してしまったのでは位置を復元できなくなってしまう。例えばアノテーションの削除があったときに意図どおりにアノテーションを復元する為には、削除も含めてすべてのアノテーションDBに対する操作を履歴として保持し、アノテーションDBに対する操作をWeb資源の解析結果であるWeb資源解析結果に対して復元するという方法が考えられる。
しかし、アノテーションの削除は本来履歴を復元するだけならばアノテーションDBから対応するレコードを削除することになるが、これだけだとWeb資源解析結果に反映されたアノテーションテキストフラグメントが残ったままになってしまうという問題が新たに発生する。すなわち、各時点でのアノテーションDBの状態が反映されて作成されるWeb資源解析結果においては、アノテーションの付与・削除というアノテーションDBに対する個々の操作からWeb資源解析結果の差分を求め、本来直接的な操作が行われるのではないWeb資源解析結果上で履歴を復元することが課題となる。
具体的な例で示すと、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div class="annotation">アノテーション</div><div>テキスト2</div>< div class="annotation">アノテーション</div><div>テキスト3</div></body></html>というようなWeb資源解析結果においては、アノテーションDB上の一つのアノテーションが削除された時、削除された後のアノテーションDBから新たなWeb資源解析結果を作成するのではなく、この一つのアノテーションが削除されたという履歴から、Web資源解析結果を正しく改変することが課題となる。
この課題を解決するため、本実施例のWebアノテーションシステムはアノテーション付与操作のときにマーカを付与して埋め込んでおくことで、アノテーションDBからアノテーションが削除された時に、対応するマーカをWeb資源解析結果から探し出して削除するという操作を加える。
あるいは、本実施例のWebアノテーションシステムはアノテーションテキストフラグメントをWeb資源解析結果に付与するとき、そのアノテーションテキストフラグメントが後で削除されるアノテーションに対応するものであるかどうかを判定する。
後で削除されるアノテーションである場合、本実施例のWebアノテーションシステムは位置計算時に存在するものとして計算されるが作用時に無いものとして取り扱われるようなマーカを持ったアノテーションテキストフラグメントを付与する。
操作ログを保持し、その履歴情報の操作順に再生する技術は例えば特開平7−134716号公報などで開示されている。特開平7−134716号公報ではハイパーメディア文書の状態を復元するため、時系列に操作履歴を保持しておき、後で操作履歴の先頭から操作を再実行することが示されている。特開平7−134716号公報に「対応する処理と同一の処理が行われる」とあるように、従来技術における履歴の再生とは、通常操作と同一の処理が行われることが前提となっている。例えばテキストの削除では、テキスト上のある位置からある位置までの範囲そのものと、削除という動作が直接履歴に残され、再生時に、その履歴に残された処理そのものが復元される。
ここで示すアノテーションでは、一般に削除操作がアノテーションDBから対応するレコードを削除するという処理が行われるだけのものであり、Web資源解析結果に対して何の操作も行われない。
したがって、特開平7−134716号公報で示されるような履歴情報の再生を行っただけでは、Web資源解析結果に一旦反映されてしまったアノテーションテキストフラグメントが残ったままになってしまう。もし、アノテーションDBから対応するレコードを取り除いた時点で新たにWeb資源解析結果を最初から作り直したのでは、従来の技術の課題として示したようにアノテーションの位置がずれてしまうという問題が起きる。すなわち特開平7−134716号公報に示されるような再生処理だけでは本課題が解決されない。
すなわち、アノテーションの削除という操作に対して、通常のアノテーションDB上のレコードの削除という操作に加えて、本来削除されてWeb資源解析結果に存在しないはずなのに、履歴の再生という処理を設けてしまったせいでWeb資源解析結果に埋め込まれてしまったアノテーションテキストフラグメントを見つけだして、これをWeb資源解析結果から取り除く処理を新たに設けることが必要になる。この点は、従来の一般的なエディタにおける履歴の保存、及び、その実行履歴を再生する手法と本実施例のWebアノテーションシステムとの大きな相違点になる。
なお、対応するアノテーションテキストフラグメントを見つけ出す為には、正しく対応するアノテーションテキストフラグメントを同定することが必要であり、アノテーション付与操作のときにマーカを付与して埋め込んでおくことが必要になる。
例えばアノテーション(3,X)というような、そもそも埋め込みが行われたときの位置情報は、ずれている可能性がある。Webページ「ABCXDEFGHIJ」は、アノテーション(3,Y)が付与されると、Webページ「ABCYXDEFGHIJ」となり、「3」という位置にアノテーション「Y」に対応するアノテーションテキストフラグメントが見つかるのであってアノテーション「X」に対応するアノテーションテキストフラグメントが見つかるものではない。
Web資源取得部10は、特定のWeb資源の所在情報(URL)を指定されたときに指定されたURLのWeb資源をネットワークから取り出す。Web資源解析結果準備部11は、取り出されたWeb資源をそのままWeb資源解析結果19とすることも可能であるが、通常、Web資源をパージングした結果である木構造をWeb資源解析結果19として保持する。
アノテーション復元部13は、取り出されたWeb資源に付与されたアノテーションの情報をアノテーションDB20から取り出す。アノテーション埋込部15は、Web資源解析結果19上でアノテーション情報に指示されている構造位置を探し出し、その構造位置にアノテーション内容を適切な形式で埋め込む。ここまでの処理は、Web資源に関連するすべてのアノテーションに対して行われる。
アノテーション作用部18は、アノテーション情報が埋め込まれたWeb資源解析結果19を作用させる。アノテーション作用部18が行う作用は、典型的に、レンダリングエンジンによって見える形に変換して表示させることである。
アノテーション操作ログDB21は、アノテーションDB20とは別にアノテーションに関する操作,アノテーション構造位置情報、アノテーション内容を保持している。アノテーション操作ログ取得部12は、現Web資源に対するアノテーション操作ログ(以降単に操作ログと記す)を取り出す。
アノテーション復元部13では、アノテーションDBの情報にしたがって復元するのではなく、操作ログに記述されているアノテーション操作とアノテーション位置にしたがって時系列に処理する。操作ログに記録されたアノテーション操作がアノテーション付与であるとき、アノテーション埋込部15は操作ログに記述されている構造位置情報にしたがってWeb資源解析結果19上の位置を見つけ、アノテーション内容にしたがって作成したアノテーションテキストフラグメントを埋め込む。
そのとき、アノテーションマーカ付与部14は埋め込むアノテーションテキストフラグメントに対して、後で削除する際に識別可能なマーカを付与して埋め込む。従来、削除されたアノテーションはアノテーションDB20に無いため何もできなかった。本実施例では削除されたアノテーションも一旦Web資源解析結果19にアノテーションテキストフラグメントとして埋め込まれていることになるので、アノテーションの削除に対して対応するアノテーションテキストフラグメントをWeb資源解析結果19から削除することが必要になる。
そのため、アノテーションテキストフラグメント特定部16は、アノテーションテキストフラグメントに埋め込まれた識別マーカを手がかりに、削除されたアノテーションに対応するアノテーションテキストフラグメントをWeb資源解析結果19上から探し出す。アノテーションフラグメント削除部17は削除されたアノテーションに対応するアノテーションテキストフラグメントをWeb資源解析結果19上から取り除く。
以上のように、本実施例のWebアノテーションシステムでは、アノテーション付与だけでなくアノテーション削除も含めて操作ログとして記録し、削除されたアノテーションも一旦Web資源解析結果19に埋め込んでおく。
他のアノテーションの付与を行ったあとで、操作ログにしたがって実際に削除されたタイミングで、そのアノテーションテキストフラグメントをWeb資源解析結果19から削除することで、本実施例のWebアノテーションシステムは一部のアノテーションの削除があっても、残りのアノテーションの位置を正しく復元することが可能である。
なお、本実施例のWebアノテーションシステムでは、アノテーション操作ログDB21にアノテーション情報のすべてを保持することで、アノテーションDB20をなくすこともできるし、操作ログの基本情報のみをアノテーション操作ログDBに保持21し、アノテーションの詳細情報をアノテーションDB20に保持するようにしてもよい。
本実施例のWebアノテーションシステムは、例えばアノテーション付与時に、Webページ「ABCDEFGHIJ」に対してまず、位置「3」にアノテーション「X」が付与されると、アノテーションを保持するアノテーションDB20に、アノテーション位置とアノテーション内容とが保持される。同時に、本実施例のWebアノテーションシステムでは、アノテーション操作ログDB21に、位置「3」にアノテーション「X」を付与(挿入)と記録する。
ここで、本実施例のWebアノテーションシステムは、アノテーション操作ログDB21に、(#1,insert,3,X)と記述することとする。なお、「#1」は、あとでアノテーション操作(イベント)を参照するための識別ID(イベント番号)である。
次に、本実施例のWebアノテーションシステムは「G」と「H」との間の位置にアノテーション「Y」を付与したことを、(#2,insert,8,Y)とアノテーション操作ログDB21に記録する。なお、「G」と「H」との間の位置はアノテーション「X」が既に付与されているため、位置「8」となっている。
次に、本実施例のWebアノテーションシステムは「E」と「F」との間の位置にアノテーション「Z」を付与したことを、(#3,insert,6,Z)とアノテーション操作ログDB21に記録する。なお、「E」と「F」との間の位置はアノテーション「X」が既に付与されているため、位置「6」となっている。
その後、本実施例のWebアノテーションシステムはアノテーション「X」が削除されたことを(#4,delete,#1)としてアノテーション操作ログDB21に記録する。(#4,delete,#1)は、イベント1(#1)で付与したアノテーションを削除したという意味である。つまり、削除したアノテーションはアノテーション操作ログDB21においてイベント番号で示されている。以上のように、アノテーション操作ログDB21は操作ログを保持する。
アノテーション作用時、本実施例のWebアノテーションシステムは、アノテーション操作ログDB21から操作ログとして、(#1,insert,3,X)、(#2,insert,8,Y)、(#3,insert,6,Z)、(#4,delete,#1)を取り出す。取り出した操作ログは、Webページ「ABCDEFGHIJ」に対して一旦アノテーション「X」が付与されて「ABCXDEFGHIJ」となり、アノテーション「Y」が付与されて「ABCXDEFGYHIJ」となり、アノテーション「Z」が付与されて「ABCXDEZFGYHIJ」となる。
実際に、アノテーション「X」にマーカとして「#1」のような識別子が付与されているので、操作ログ(#4,delete,#1)によりマーカ「#1」が付与されているアノテーション「X」が取り除かれてWebページは「ABCDEZFGYHIJ」となる。
以上、本実施例のWebアノテーションシステムはアノテーションの一部が削除されたとしても、削除されたアノテーションが存在する状態で、残ったアノテーションの位置が求められる。そして、本実施例のWebアノテーションシステムは削除が起こったタイミングでアノテーションの削除が行われるので、残りのアノテーションを正しい位置に復元できる。
図4は本実施例のWebアノテーションシステムの他の例の説明図である。図4のWebアノテーションシステムは、図3のWebアノテーションシステムのアノテーション操作ログ取得部12とアノテーション復元部13との間に、アノテーション位置影響分析部30及びアノテーション操作ログ書き換え部31が設けられている。
図3のWebアノテーションシステムは操作ログを真正直にすべて再生している。操作ログをすべて再生するのでは、アノテーションの付与と削除とが繰り返されたような場合に時間的オーバヘッドが大きくなってしまう。そこで、図4のWebアノテーションシステムでは、時間的オーバヘッドを削減するために、アノテーション位置影響分析部30及びアノテーション操作ログ書き換え部31を設け、アノテーション位置影響分析部30が他のアノテーションの位置に影響を与えないアノテーション操作をアノテーション操作ログDB21から取り除いている。
図3のWebアノテーションシステムでは、(#1,insert,3,X)、(#2,insert,8,Y)、(#3,delete,#2)、(#4,insert,6,Z)のような操作ログに対しても正直にアノテーションY(#2)を付与し、アノテーションY(#2)を削除する。
しかし、(#1,insert,3,X)、(#2,insert,8,Y)、(#3,delete,#2)、(#4,insert,6,Z)のような操作ログの場合、アノテーションY(#2)が付与されてから削除されるまでに他のアノテーション操作がなく、アノテーションYの付与・削除の再生は無意味である。
(#1,insert,3,X)、(#2,insert,8,Y)、(#3,delete,#2)、(#4,insert,6,Z)のような操作ログの場合は、(#2,insert,8,Y)、(#3,delete,#2)の対を削除できる。
同様に、(#1,insert,3,X)、(#2,insert,8,Y)、(#3,insert,6,Z)、(#4,delete,#2)のような操作ログの場合、(#2,insert,8,Y)と(#4,delete,#2)との間に(#3,insert,6,Z)があるが、(#3,insert,6,Z)は(#2,insert,8,Y)の前方への付与なのでアノテーションY(#2)に位置の計算が影響されないため、アノテーションYの付与・削除の再生は無意味である。
(#1,insert,3,X)、(#2,insert,8,Y)、(#3,insert,6,Z)、(#4,delete,#2)のような操作ログの場合は、(#2,insert,8,Y)、(#4,delete,#2)の対を削除できる。
このように、図4のWebアノテーションシステムでは、アノテーション位置の影響を分析し、他のアノテーションの位置計算に影響を与えないアノテーション操作の対をアノテーション位置影響分析部30が見つけ出し、アノテーション操作ログ書き換え部31がアノテーション操作ログDB21から他のアノテーションの位置計算に影響を与えないアノテーション操作の対のレコードを削除する。
図5は本実施例のWebアノテーションシステムの他の例の説明図である。図5のWebアノテーションシステムは、図3のWebアノテーションシステムのアノテーションマーカ付与部14,アノテーションフラグメント特定部16,アノテーションフラグメント削除部17に替えて、ダミーアノテーションテキストフラグメント生成部40が設けられていると共に、削除済みアノテーション認識手段41が新たに設けられている。
図5のWebアノテーションシステムは、削除されたアノテーションをアノテーションテキストフラグメントとしてWeb資源解析結果19に埋め込む時、真のアノテーションテキストフラグメントを埋め込むのではなく、ダミーアノテーションテキストフラグメントを埋め込む。
ダミーアノテーションテキストフラグメントは、Web資源解析結果19に埋め込まれることにより、アノテーションの埋め込みポイントの位置を求めようとしたとき、正常に求められるようになり、アノテーション作用部18で処理しようとすると何もないのと同等になる。ダミーアノテーションテキストフラグメント生成部40はダミーアノテーションテキストフラグメントを生成する。
図5のWebアノテーションシステムは、アノテーション操作ログDB21に記録されている操作ログのうちアノテーション操作が付与の操作ログが、後に削除されているかどうかを判定する削除済みアノテーション認識手段41が設けられている。そして、削除済みアノテーション認識手段41はアノテーション操作ログDB21にある付与操作のアノテーションが、後に削除されているかどうかを判定する。
そして、図5のWebアノテーションシステムは、アノテーション操作ログDB21を用いて操作ログを時系列に処理する。アノテーション埋込部15は通常のアノテーション付与操作に対して、Web資源解析結果19上の対応する位置に通常のアノテーションテキストフラグメントを埋め込む。
また、アノテーション埋込部15は削除されたアノテーションのアノテーション付与操作に対して、ダミーアノテーションテキストフラグメント生成部40が生成したダミーアノテーションテキストフラグメントを、Web資源解析結果19上の対応する位置に埋め込む。
ダミーアノテーションテキストフラグメントは、後でアノテーション作用部18が処理するときに無視される(何も効果を示さない)が、アノテーションの位置計算においてアノテーションが付与されているときと同じ効果を示す。
例えばアノテーション操作ログDB21にはWebページ「ABCDEFGHIJ」に対する操作ログ(#1,insert,3,X)、(#2,insert,8,Y)、(#3,insert,6,Z)があるものとする。次にアノテーションX(#1)が削除されたとすると、図5のWebアノテーションシステムは、アノテーション操作ログDB21に(#4,delete,#1)を記録する。
ただし、図5のWebアノテーションシステムは図3のWebアノテーションシステムとことなり、削除操作のログを後で利用しないため、削除操作のログをアノテーション操作ログDB21に記録しなくてもよい。ただし、図5のWebアノテーションシステムはアノテーション操作ログDB21の操作ログ(#1,insert,3,X)に対して削除済みのマークを与える。
この結果、図5のWebアノテーションシステムは、後でアノテーション位置を復元する際、アノテーション「X」のアノテーション付与がダミーであることを表す「x」というアノテーションテキストフラグメントが付与されるので、Webページ「ABCDEFGHIJ」は「ABCxDEFGHIJ」となり、アノテーション「Y」,「Z」が正しいアノテーション位置である「ABCxDEZFGYHIJ」と復元される。
しかも「x」はダミーなので、アノテーション作用時に何も効果を示さず、完全に削除されたのとほぼ同じ効果になる。ちなみに、図5のWebアノテーションシステムはアノテーションX(#1)が削除されたあと、「F」と「G」との間に、新たに「W」というアノテーションが付与されたとき、アノテーション「X」の痕跡「x」が「ABCxDEZFGYHIJ」というように残っているので、計算すると、アノテーション「W」の位置が「8」になる。一方、図3のWebアノテーションシステムは「ABCDEZFGYHIJ」に基づいて計算するのでアノテーション「W」の位置が「7」になる。
図6は、本実施例のWebアノテーションシステムの一実施例の構成図である。図6のWebアノテーションシステムは、アノテーション付与装置50,アノテーション作用装置51,アノテーション管理サーバ52,アノテーション操作ログ管理装置53を有している。
アノテーション付与装置50は、Web閲覧器61,アノテーション付与拡張部62,アノテーション操作ログ拡張部63を有する。アノテーション作用装置51は、アノテーション作用拡張部64,アノテーション操作ログ拡張部65,Web閲覧器66を有する。アノテーション管理サーバ52は、アノテーションDB管理部67,アノテーションDB68を有する。アノテーション操作ログ管理装置53は、アノテーション一覧管理部69,アノテーション操作ログDB70を有する。
図6のWebアノテーションシステムはWebアノテーションをWeb閲覧器61,66の拡張機能として実施される。アノテーション付与装置50は、ユーザの特定の操作を受け、アノテーションを付与したり削除したりする。アノテーション作用装置51は、Web資源にアクセスした際にアノテーションを表示させるあるいは作用させる。
アノテーション付与装置50およびアノテーション作用装置51の一つの実施形態はWeb閲覧器61,66を拡張するものである。なお、アノテーション付与装置50およびアノテーション作用装置51は同時に一つの閲覧器を拡張することができる。
図3のWebアノテーションシステムの場合、Web資源取得部10,Web資源解析結果準備部11,アノテーション操作ログ取得部12,アノテーション復元部13,アノテーションマーカ付与部14,アノテーション埋込部15,アノテーションフラグメント特定部16,アノテーションフラグメント削除部17,アノテーション作用部18が、図6のアノテーション作用装置51に対応する。
図4のWebアノテーションシステムの場合、Web資源取得部10,Web資源解析結果準備部11,アノテーション操作ログ取得部12,アノテーション復元部13,アノテーションマーカ付与部14,アノテーション埋込部15,アノテーションフラグメント特定部16,アノテーションフラグメント削除部17,アノテーション作用部18,アノテーション位置影響分析部30,アノテーション操作ログ書き換え部31が、図6のアノテーション作用装置51に対応する。
図5のWebアノテーションシステムの場合、Web資源取得部10,Web資源解析結果準備部11,アノテーション操作ログ取得部12,アノテーション復元部13,アノテーション埋込部15,アノテーション作用部18,ダミーアノテーションテキストフラグメント生成部40が、図6のアノテーション作用装置51に対応する。
図6のアノテーション付与装置50,アノテーション作用装置51,アノテーション管理サーバ52,アノテーション操作ログ管理装置53は、例えば図7に示すコンピュータシステムにより実現できる。
図7はコンピュータシステムの一例の構成図である。コンピュータシステムは、それぞれバスBで相互に接続されている入力装置81,出力装置82,ドライブ装置83,補助記憶装置84,主記憶装置85,演算処理装置86およびインターフェース装置87を有する。
入力装置81はキーボードやマウスなどで構成され、各種信号を入力するために用いられる。出力装置82はディスプレイ装置などで構成され、各種ウインドウやデータ等を表示するために用いられる。インターフェース装置87は、モデム,LANカードなどであり、ネットワークに接続する為に用いられる。
本実施例のアノテーションプログラムはアノテーション付与装置50,アノテーション作用装置51を制御する各種プログラムの少なくとも一部である。アノテーションプログラムは例えば記録媒体88の配布やネットワークからのダウンロードなどによって提供される。アノテーションプログラムを記録した記録媒体88は、CD−ROM、フレキシブルディスク、光磁気ディスク等の様に情報を光学的,電気的或いは磁気的に記録する記録媒体、ROM、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
また、アノテーションプログラムを記録した記録媒体88がドライブ装置83にセットされると、アノテーションプログラムは記録媒体88からドライブ装置83を介して補助記憶装置84にインストールされる。ネットワークからダウンロードされたアノテーションプログラムは、インターフェース装置87を介して補助記憶装置84にインストールされる。補助記憶装置84は、インストールされたアノテーションプログラムを格納すると共に、必要なファイル,データ等を格納する。
主記憶装置85は、コンピュータの起動時に補助記憶装置84からアノテーションプログラムを読み出して格納する。そして、演算処理装置86は主記憶装置85に格納されたアノテーションプログラムに従って、後述するような各種処理を実現している。
以下では、本実施例のWebアノテーションシステムにおいてアノテーションを表示する(作用させる)処理、アノテーションを付与する処理、アノテーションを削除する処理について説明する。
(アノテーション作用装置51が図3の構成である例)
本実施例のアノテーションプログラムを組み込んだWeb閲覧器(あるいは一般にWebクライアント)61,66は、図8に示すフローチャートのような動作を行う。図8はアノテーション作用装置のアノテーション表示処理を表したフローチャートである。
ステップS1に進み、Web閲覧器66は表示(作用)するWeb資源の所在情報(URL)を受け取る。ステップS2に進み、Web閲覧器66は受け取ったURLで指定されるWeb資源をネットワークから読み込む。ステップS3に進み、Web閲覧器66は読み込んだWeb資源(HTMLなどで記述されたテキストファイル)をパーサによって解析し、構造を抽出する。抽出された構造は木構造(ツリー)の形をとる(例えばDOMツリー)。
例えばWeb資源として以下のようなHTML<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div>テキスト2</div><div>テキスト3</div></body></html>があったとすると、パージング結果である木構造は、図9に示すようになる。図9は木構造の一例を示す説明図である。
Web閲覧器66は図9に示すような木構造をレンダリングエンジンに送り、タグを解釈し(例えば<title>はタイトル、<h2>はヘッダー、<p>は段落など)、見える形に変換して表示する(あるいはレンダリングの代わりに何らかの作用が行われる)。
上記は静的なページの動きである。動的なページでは、Web閲覧器66がWeb資源をパーサによって解析したあと、例えばJavascriptで記述されたプログラムをJavascriptエンジンに送って実行し、木構造を変更する(動的に文書が作り出される)。
Web閲覧器66は木構造をレンダリングエンジンに送り、表示する。場合により、Web閲覧器66はユーザのアクションにより木構造を書き換え、新しい木構造をレンダリングエンジンに送り、表示するということを繰り返す。
本実施例のアノテーションプログラムを組み込んだWeb閲覧器66は通常のWebアノテーションが組み込まれたWeb閲覧器66と同様、読み込んだWeb資源をパーサで解析した結果(例えばDOMツリー)を、Web資源解析結果として、すぐにレンダリングエンジンに渡さずに以下の処理を行う。
アノテーション作用拡張部64は、現在表示(作用)しようとしているWeb資源に関連するアノテーションデータを、アノテーション管理サーバ52のアノテーションDB68からアノテーションDB管理部67を介して取り出し、アノテーションテキストフラグメントをWeb資源解析結果に埋め込んでいく(木構造上で接ぎ木する)。
通常のWebアノテーションが組み込まれたWeb閲覧器66では、WebページのURL等を手がかりにアノテーションDB68からアノテーションデータを取り出し、アノテーションが付与された順に、Web資源解析結果の指定された位置にアノテーションテキストフラグメントを埋め込んで行く。
なお、削除されたアノテーションのアノテーションデータはアノテーションDB68に存在しないため、Web資源解析結果に反映されない。一方、本実施例のアノテーションプログラムを組み込んだWeb閲覧器66は、アノテーション操作ログDB70が存在するので、アノテーションDB68にアクセスするのではなく、アノテーション操作ログDB70にアクセスする。
ステップS4に進み、アノテーション操作ログ拡張部65はアノテーション操作ログDB70から、WebページのURL等を手がかりに操作ログをすべて取り出し、古い方から順に並べる。
図10はアノテーション操作ログDBに記録されている操作ログの一例を示す説明図である。図10に示す操作ログは、ID,操作種類,XPath又はID,アノテーション内容,アノテーションレコードをフィールドとして持つ。
IDは各操作につけられたIDである。IDは例えば一連番号でよい。操作種類はアノテーションに関する操作の種類を記述したものである。操作種類は、「付与」あるいは「削除」という値が記述されている。
XPath又はIDは、操作が「付与」のとき、アノテーションが付与された構造位置としてXPathが記述され、操作が「削除」のとき、どのアノテーションが削除されたのかを表す操作ログ上のIDが記述されている。アノテーション内容は、付与されたアノテーションに記述された情報である。アノテーション内容は、アノテーションテキストフラグメントの中に反映するものであり、文字列やリンクであったり、場合によってはHTMLそのものが記述されたりしてもよい。
アノテーションレコードは、付与されたアノテーションのアノテーションDB68上のレコードを示すポインタである。アノテーションレコードは、アノテーションの削除操作が行われた時に、削除しようとしているアノテーションを指しているのかどうかを確認するために用いられるものである。
なお、図10ではXPath及びアノテーション内容をアノテーション操作ログDB70の中に直接記述する例を示した。XPath及びアノテーション内容はアノテーションDB68中のアノテーション情報とも重なるので、アノテーションレコードのポインタをたどってアノテーションDB68にアクセスして、取り出すこともできる。
ただし、XPath及びアノテーション内容をアノテーションDB68から取り出す場合は、アノテーションが削除されたときにアノテーションDB68から単純にレコードを削除してしまったのでは、操作ログの復元ができなくなってしまう。
アノテーションの削除の際には、アノテーションDB68の削除するレコードの内容をどこかに転記/保存しておき、操作ログのアノテーションレコードが、転記/保存場所を示すようにしておくことが必要である。
また、アノテーションの削除の際には、アノテーションDB68の削除するレコードを削除済みとマークし、データ自身を削除しないようにするということで対応することもできる。
ステップS5に進み、アノテーション操作ログ拡張部65は、操作ログの中の最初の(一番古い)操作(レコード)に注目する。ステップS6に進み、アノテーション操作ログ拡張部65は現在注目している操作(レコード)がある間、ステップS7に進む。ステップS7では、アノテーション操作ログ拡張部65が、注目している操作を付与か削除かで切り分ける。
注目している操作が付与であった場合、アノテーション操作ログ拡張部65はステップS8に進み、付与操作のときに付与されたアノテーション情報(XPath、アノテーション内容)を得る。ステップS9に進み、アノテーション操作ログ拡張部65はステップS8で得た構造位置情報(XPath)から、Web資源解析結果におけるアノテーションの位置を求める。
例えば図10の操作ログに含まれる/html/body/div[1]は、Web資源解析結果の木構造を上から順にhtml、body、divというノードを辿ることを示している。ここでdiv[1]はdivの1番目を示している。したがって、/html/body/div[1]は、図11の木構造において矢印で示したノードを示すことになる。図11は木構造とXPathが示す位置との関係を説明するための説明図である。
なお、上記ではWeb資源解析結果を木構造として示している。しかし、木構造は元のHTMLと対応しているのでWeb資源解析結果として、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div>テキスト2</div><div>テキスト3</div></body></html>のように元のテキストのまま保持し、テキスト上で処理を進めることも可能である。
ステップS10に進み、アノテーション操作ログ拡張部65はアノテーション内容からアノテーションテキストフラグメントを作成する。このとき、アノテーション操作ログ拡張部65のアノテーションマーカ付与部14に相当する部分がテキストに識別マーカを付与する。識別マーカとしては、例えば操作ログのID(一連番号)を用いる。
なお、アノテーションとしてどう作用させるかはテキストフラグメントにより作成することもできるし、<div class="annotation" id="001">X</div>のようなアノテーションテキストフラグメントのclass属性とその値を与え、CSS(Cascading Style Sheets)を使って処理することもできる。なお、タグで囲まれた部分にはアノテーション内容(アノテーションDB68の対応するレコードに記述されている具体的なテキストや画像へのリンクを含むHTMLテキストなど)を与える。
ステップS11に進み、アノテーション操作ログ拡張部65は識別マーカをつけたアノテーションテキストフラグメントを、ステップS9で求めたWeb資源解析結果の位置に埋め込む。埋め込む位置は指定されたノードの前、後、下など取り決めによって決めることができる。
ここでは指定されたノードの後(弟)に埋め込むものとし、最初のアノテーションを埋め込んだWeb資源解析結果を図12に示す。図12は最初のアノテーションが埋め込まれたWeb資源解析結果を表す木構造の説明図である。なお、XPathのツリー表現では本来属性もノードで表現される。図12の木構造は簡略的に示したものである。図12において「X」とした部分はXPathとして#text(文字列)であるが、他の#textとの区別を明確にするために「X]と示している。その他の木構造を示す説明図においても同様である。
図12のツリーのテキスト表現は、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div class="annotation" id="001">X</div><div>テキスト2</div><div>テキスト3</div></body></html>となる。以上で、注目している付与操作の復元は終わる。
ステップS12に進み、アノテーション操作ログ拡張部65は操作ログの中の次の操作に注目位置を移してステップS6に戻る。アノテーション操作ログ拡張部65は、最初の付与操作(ID=001)と同様にして、次の付与操作(ID=002)に対する処理を行う。付与操作(ID=002)に対する処理が終わったときのWeb資源解析結果の状態は図13に示すようになる。図13は2番目のアノテーションが埋め込まれたWeb資源解析結果を表す木構造の説明図である。
図13のツリーのテキスト表現は、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div class="annotation" id="001">X</div><div>テキスト2</div><div class="annotation" id="002">Y</div><div>テキスト3</div></body></html>となる。
ステップS7において、注目している操作が削除であった場合、アノテーション操作ログ拡張部65はステップS13に進み、どのアノテーションが削除されたのかの情報として削除されたアノテーションの識別マーカを得る。例えば図10の操作ログでは、削除されたアノテーションの識別マーカとして、アノテーションが付与された時の操作ログのIDが記述されている。
ステップS14に進み、アノテーション操作ログ拡張部65は、Web資源解析結果上の削除された(識別マーカが付いた)アノテーションテキストフラグメントを求める。ステップS15に進み、アノテーション操作ログ拡張部65はステップS14で求めたテキストフラグメントをWeb資源解析結果から削除する。
図13の例では、div id=001以下(テキスト表現では<div class="annotation" id="001">X</div>)が削除される。図14は、div id=001以下が削除されたWeb資源解析結果を表す木構造の説明図である。図14のツリーのテキスト表現は、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div>テキスト2</div><div class="annotation" id="002">Y</div><div>テキスト3</div></body></html>となる。
なお、ここでは単純に削除を行っているが、アノテーションにアノテーションが付与されている場合もあるので、もう少し厳密な処理が必要である。なお、アノテーションにアノテーションが付与された実施例は後述する。
ステップS6においてアノテーション操作ログDB70上の操作ログすべてをWeb資源解析結果に反映したと判定したら、アノテーション作用拡張部64及びアノテーション操作ログ拡張部65はWeb資源解析結果をレンダリングエンジンに渡す(あるいはレンダリング以外の作用を起こす)。
なお、ここまでの例ではアノテーションが<div>から</div>までのような構造に対して付与される例を示してきた。しかし、アノテーションは文字列(#text)の一部に対して付与することもできる。例えば<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><p>テキスト1</p><p>abcde</p><p>テキスト3</p></body></html>は図15のようにツリー表現される。図15は木構造の一例を示す説明図である。
ここでは、図15のツリーのabcdeという文字列のbとcとの間にX、dとeとの間にYというアノテーションを順に付与した場合について説明する。この場合のツリーのテキスト表現は、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><p>テキスト1</p><p>ab<div class="annotation" id="001">X</div>cd<div class="annotation" id="002">Y</div>e</p><p>テキスト3</p></body></html>となる。また、この場合の木構造は図16に示すようになる。図16は文字列の一部に対してアノテーションが付与されたWeb資源解析結果を表す木構造の説明図である。
アノテーションXの構造位置を単に/html/body/p[2]/#text[1]としてしまうのでは、#textの何文字目に挿入されているのかわからなくなってしまうので、/html/body/p[2]/#text [1]:2というように前の#textブロックの構造位置と、その何文字目の後に挿入されているかのオフセット(上記例では:の後の数字)を記録している。同様にアノテーションYの構造位置は/html/body/p[2]/#text[2]:2と記録している。
ここで、アノテーションXが削除されたとすると、アノテーションYの位置が解決できなくなる(#text[2]:2ではなく#text[1]:4になる)のはアノテーションが<div>から</div>までのような構造に対して付与される例と同様である。
アノテーションXが削除されたとすると、アノテーションYの位置が解決できなくなる問題は、テキストに対してアノテーションした場合も、アノテーションが<div>から</div>までのような構造に対して付与される例と同様に解決される。
また、アノテーションはアノテーションに対して付与することもできる。図17はアノテーションXが埋め込まれた木構造の説明図である。ここでは、アノテーションXという文字列(XPathは/html/body/div[2]/#text)に対してアノテーションYを付与したとする。なお、アノテーションXは何文字かの文字列であって、その中の任意の何文字かを指定することもできるが、アノテーションX全体が選択されたとして説明する。
図18はアノテーションXにアノテーションYが付与された木構造の説明図である。図18のツリーのテキスト表現は、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div class="annotation" id="001">X<div class="annotation" id="002">Y</div></div><div>テキスト2</div><div>テキスト3</div></body></html>となる。
このとき、アノテーションYのXPathは、/html/body/div[2]/#text:n(nはXの文字数)と記録されることになる。従来は、アノテーションXが削除されると、div id=001のノードが作成されないので、アノテーションYはdiv id=001の後のノードの下に付与されることになってしまっていた。
このようなケースも考慮したアノテーションテキストフラグメントの削除するステップS23の処理は以下のようになる。例えばdiv id=001のノードを削除するとはdiv id=001のノード以下のすべてを単純に削除するのでなく、ノード以下にある他のアノテーションノードを保存するように削除する。すなわち、上記の例では、div id=001とXというテキスト部分とを削除し、div id=002以下をbodyの下(元のdiv id=001の位置)になるようにする(テキストでは、<body>‥<div id="001">X<div id="002">Y</div></div>‥</body>を<body>‥<div id="002">Y</div>‥</body>と変換することに相当する)。
すなわち、図19に示すような木構造になる。図19はアノテーションXが削除された木構造の説明図である。図19のツリーのテキスト表現は、<html><head><title>タイトル</title></head><body><h1>ヘッダー</h1><div>テキスト1</div><div class="annotation" id="002">Y</div><div>テキスト2</div><div>テキスト3</div></body></html>となる。
図20はアノテーションが付与されたアノテーションをWeb資源解析結果から削除する処理を表したフローチャートである。ステップS21に進み、アノテーション操作ログ拡張部65は削除対象のノードとしてdiv id=001をPとする。ステップS22に進み、アノテーション操作ログ拡張部65はPの子ども要素としてノードX,ノードdiv id=002を注目要素として順にたどる。まず、アノテーション操作ログ拡張部65は注目要素としてノードXを処理する。
ステップS23に進み、未処理の注目要素があるため、アノテーション操作ログ拡張部65はステップS24に進む。アノテーション操作ログ拡張部65は注目要素のノードXが他のアノテーションでないため、ステップS25に進み、注目要素のノードX以下をPから取り除く。ステップS27に進み、アノテーション操作ログ拡張部65は次の注目要素をノードdiv id=002としてステップS23に戻る。
ステップS23に進み、未処理の注目要素があるため、アノテーション操作ログ拡張部65はステップS24に進む。アノテーション操作ログ拡張部65は注目要素のノードdiv id=002以下が他のアノテーションであるため、ステップS26に進む。ステップS26では、アノテーション操作ログ拡張部65が、注目要素のノードdiv id=002以下を残したままステップS27に進む。
ステップS27に進み、アノテーション操作ログ拡張部65は次の注目要素を選択せずにステップS23に戻る。未処理の注目要素がないため、アノテーション操作ログ拡張部65はステップS28に進み、Pを残した要素であるノードdiv id=002以下に置き換えられる(ここでは残されたアノテーションが一つだったが、複数のアノテーションがあれば順序を保持しながらPを置き換える)。
(アノテーション付与装置50)
図6のアノテーション付与装置50は、例えば図21のフローチャートに示すような処理を行う。図21はアノテーション付与装置の処理を表したフローチャートである。
ステップS31に進み、アノテーション付与拡張部62は、注目しているWeb資源に対して、Web資源を表示する前に、そこに付与されているアノテーションを表示する処理を行って、アノテーションが付与されている状態でWeb資源の表示を行う。
ステップS32に進み、アノテーション付与拡張部62はユーザの操作を受ける。アノテーション付与拡張部62はユーザの操作がWeb資源に対するアノテーション付与ならステップS33に進み、アノテーション付与拡張部62はアノテーション付与部(図示せず)の呼び出しを行い、アノテーションの付与を行わせる。
アノテーション付与拡張部62はユーザの操作がWeb資源に対するアノテーション削除ならステップS34に進み、アノテーション削除部(図示せず)の呼び出しを行い、アノテーションの削除を行わせる。
アノテーション付与拡張部62はアノテーションの付与・削除が反映された結果をアノテーションDB68に記憶して、次のユーザ操作を待つ。また、アノテーション操作ログ拡張部63はアノテーションの付与・削除の結果をアノテーション操作ログDB70に記憶して、次のユーザ操作を待つ。
図22はアノテーション付与操作の処理を表したフローチャートである。アノテーション付与操作は、ユーザに画面上の適当な位置を指定させ、アノテーション内容となるテキストを入力、あるいはファイル上の画像を指定させることによって行われる。
ステップS41に進み、アノテーション付与部はユーザに指定された画面上の位置が現在表示されているWeb資源のどの位置であるかを表すXPathを求める。このようにアノテーション付与部はWeb資源のURL,XPath,アノテーション内容等をアノテーション情報として受け取る。
ステップS42に進み、アノテーション付与拡張部62は受け取ったWeb資源のURL,XPath,アノテーション内容等をアノテーション情報としてアノテーションDB68に登録する。なお、XPathは現在表示されているWeb資源に対して求められるため、アノテーションが既に付与されているならば、アノテーションを含めたXPathで求められる。
ステップS43に進み、アノテーション操作ログ拡張部63はアノテーション操作ログDB70にアノテーション付与のアノテーション操作ログを登録する。アノテーション操作ログ拡張部63は、現在のWeb資源の操作ログを記録しているアノテーション操作ログDB70の一連のレコードの最後に、操作種類として付与、アノテーション構造位置としてXPath、アノテーション内容、アノテーションレコードを登録する処理がさらに加わる。
図23はアノテーション削除操作の処理を表したフローチャートである。アノテーション削除操作は、ユーザが画面上のアノテーションを指定した後のアノテーション削除アクション(例えば用意されたボタンやメニューなど)によって行われる。
ステップS51に進み、アノテーション削除部は、どのアノテーションに対する削除アクションであるかを認識する。ステップS52に進み、アノテーション付与拡張部62は削除対象のアノテーションに対応するアノテーションDB68上のレコードを求める。
ステップS53に進み、アノテーション付与拡張部62は削除対象のアノテーションに対応する対応付与操作のレコードをアノテーションDB68上で特定する。ステップS53の処理の詳細は後述する。ステップS54に進み、アノテーション付与拡張部62はアノテーションDB68からステップS53で特定したレコードを削除する。
ステップS55に進み、アノテーション操作ログ拡張部63はアノテーション操作ログDB70にアノテーション削除のアノテーション操作ログを登録する。アノテーション操作ログ拡張部63は削除されたアノテーションが何であったかをID(識別マーカ)でアノテーション操作ログDB70に記録しておく。
ID(識別マーカ)としては、例えば付与されたときの操作ログ上でのIDを利用することができる。アノテーション操作ログ拡張部63は、現在のWeb資源の操作ログを記録しているアノテーション操作ログDB70の一連のレコードの最後に、操作種類として削除、ID(識別マーカ)を登録する処理がさらに加わる。
図24は、対応付与操作特定の処理を表したフローチャートである。対応付与操作特定の処理は、削除されたアノテーションがアノテーション操作ログDB70上の操作ログで表される、どの操作で付与されたのかを特定するものである。アノテーション操作ログ拡張部63は、現在のWeb資源の操作ログを最新のものから順にたどっていき、付与操作の中から、現在削除しようとしているアノテーションとアノテーション内容が一致する操作を求め、その付与操作のIDを対応付与操作のID(識別マーカ)とすればよい。アノテーション操作ログDB70へのアノテーション削除操作の登録は、操作種類フィールドに削除、XPathまたはIDフィールドにID(識別マーカ)を登録する。
ステップS61に進み、アノテーション操作ログ拡張部63はアノテーション操作ログDB70上の最新の操作ログに注目する。ステップS62に進み、アノテーション操作ログ拡張部63は注目した操作ログの操作種類が付与ならば、ステップS63に進む。
ステップS63では、アノテーション操作ログ拡張部63が、注目した操作ログに記述されているアノテーションレコードに基づき、アノテーションDB68のレコードを読み出す。アノテーション操作ログ拡張部63は、読み出したアノテーションのレコードが現在削除しようとしているアノテーションのレコードと一致するかを判定する。
読み出したアノテーションのレコードが現在削除しようとしているアノテーションのレコードと一致すれば、現在の注目操作が現在削除しようとしているアノテーションに対応する付与操作なので、アノテーション操作ログ拡張部63は現在注目している操作のIDをアノテーション付与拡張部62に返して図24のフローチャートの処理を終了する。
読み出したアノテーションのレコードが現在削除しようとしているアノテーションのレコードと一致しなければ、現在の注目操作が現在削除しようとしているアノテーションに対応する付与操作でないので、アノテーション操作ログ拡張部63はステップS64に進み、注目する操作ログを一つ過去の操作ログに移し、ステップS62の処理に戻る。
(アノテーション作用装置51が図4の構成である例)
図4に示したアノテーション位置影響分析部30及びアノテーション操作ログ書き換え部31は、任意のタイミングにおいてアノテーション操作ログDB70を走査して、操作ログを書き換えることができる。典型的な実施形態は、アノテーション削除操作の処理において、操作ログに「削除操作」を登録したタイミングで行われるものである。
すなわち、今回削除されたアノテーションに対して、アノテーション位置影響分析部30は、今回削除されたアノテーションに対応する付与操作と共に操作ログから削除しても他のアノテーション位置に影響がないかどうかを分析する。
影響がないならばアノテーション操作ログ書き換え部31は操作ログから対応する付与操作のレコードを削除する。また、アノテーション操作ログ拡張部63は今回の削除操作も操作ログに登録しない。
もし影響があるならば、操作ログの付与操作のレコードはそのままにして、今回の削除操作も操作ログに残すものである。アノテーション作用装置51が図4の構成である場合は図23に示したアノテーション削除操作の処理を以下のフローチャートに置き換えることになる。
図25はアノテーション削除操作の処理を表した他の例のフローチャートである。図25のフローチャートのステップS71〜S75の処理は、上記の図23のフローチャートのステップS51〜S55の処理と同様である。ステップS76のアノテーション位置影響分析処理は、削除されたアノテーションに対して、そのアノテーションが付与された時点から削除までの間に、付与された他のアノテーションとの位置影響関係を求め、影響がある操作が一つもないときに、付与と削除の対を消す。
位置影響関係は、自分よりも前方、あるいは木構造の別ブロックかどうかを判定することで求める。また、対を消したことによって、これまでは消すことができなかった付与と削除の対の中で消すことができるようになった対をさらに消す。
図26はアノテーション位置影響分析処理を表したフローチャートである。ステップS81に進み、アノテーション位置影響分析部30は、削除されたアノテーションの操作ログ上のID(識別マーカ)を受け取る。アノテーション位置影響分析部30は受け取ったIDだけを要素とする要素数1のリストを作り、削除イベントリストとする。
ステップS82に進み、アノテーション位置影響分析部30は削除イベントリストから先頭の要素を取り出す。最初、削除イベントリストは要素数1のリストである。このためステップS82で取り出されるIDは、ステップS81で設定されたID(このIDで指定される操作は必ず削除である)である。また、要素を取り出した結果として、削除イベントリストは空になる。
ステップS83に進み、アノテーション位置影響分析部30はステップS82で取り出したIDに対応する付与時のIDを求める。図23に示したアノテーション削除操作の処理では、操作ログにおける操作種類が削除のレコードに、対応する付与操作のID(識別マーカ)が登録されているので、操作ログにおける操作種類の値を取り出す。ここまでの処理により、アノテーション位置影響分析部30はアノテーションを削除する削除操作のIDと、削除操作に対応するアノテーションを付与した付与操作のIDとが得られる。
ステップS84に進み、アノテーション位置影響分析部30はアノテーション操作ログDB70に記録されている操作ログを参照し、ステップS83で求めた付与操作から削除操作までの間に、ステップS83で求めた付与操作の操作ログを消すと、位置再現に影響のあるアノテーションの有無を判定する。ステップS84の処理の詳細は後述する。
位置再現に影響のあるアノテーションがあれば、アノテーション位置影響分析部30はステップS85に進み、ステップS83で求めた付与操作の操作ログを消去できないと判断し、アノテーション操作ログDB70に、ステップS83で求めた付与操作及び削除操作の操作ログを、そのまま残す。
ステップS85に続いてステップS86に進み、アノテーション位置影響分析部30は削除イベントリストが空かを判定する。削除イベントリストが空であれば、アノテーション位置影響分析部30は図26のフローチャートの処理を終了する。削除イベントリストが空でなければ、アノテーション位置影響分析部30はステップS82に戻る。
一方、アノテーション位置影響分析部30はステップS84において、位置再現に影響のあるアノテーションがなければ、ステップS83で求めた付与操作の操作ログを消去できると判断する。アノテーション位置影響分析部30はステップS87に進み、ステップS83で求めた対となる付与操作及び削除操作の操作ログを、アノテーション操作ログ書き換え部31にアノテーション操作ログDB70から削除させる。
例えば操作ログが(#1,insert,3,X)、(#2,insert,5,Y)、(#3,delete,#1)である場合、#3における削除操作の時点では、#2で付与されたアノテーションYの存在により#1と#3との対(ペア)を操作ログから取り除くことができない。
しかし、(#4,delete,#2)という削除操作が加わると、#2と#4とのペアは操作ログから取り除くことができる。すると、#1と#3とのペアの間に影響のある付与操作が無くなり、#1と#3とのペアは操作ログから取り除くことができる。このような波及効果を実現するために、アノテーション位置影響分析部30はステップS87に続いてステップS88に進み、取り除いた付与操作及び削除操作の操作ログの間にある削除操作のIDを削除イベントリストに付け加えてステップS82の処理に戻る。ステップS82〜S88の処理を繰り返し行うことで、アノテーション位置影響分析部30は波及して取り除ける操作ログを求めることができる。
ステップS84の処理である影響有無判定処理は、次のように行う。付与操作と削除操作の操作ログ上のIDが与えられたとき、アノテーション位置影響分析部30は、この付与操作および削除操作の操作ログをアノテーション操作ログDB70から取り除けるかどうかを判定する。
図27は付与操作および削除操作の操作ログをアノテーション操作ログDBから、どのようなときに取り除けて、どのようなときに取り除けないかを表した説明図である。例えばアノテーション操作ログDB70から操作ログを取り除きたいノードはノードIであるとする。
ノードIの操作ログをアノテーション操作ログDB70から取り除けるのは、ノードIが付与されて削除されるまでの間に付与されたすべてのアノテーションの構造位置(XPath)が、ノードIの有無によらず不変であるときである。ノードIが付与されて削除されるまでの間に付与されたアノテーションの構造位置が、ノードIの有無により一つでも変化してしまうのであれば、ノードIの操作ログはアノテーション操作ログDB70から取り除けない。
図27のノードIの子孫であるノードJ,Kは、ノードIが無くなると当然構造位置が変わってしまう。また、ノードIの弟であるノードLと、その子孫であるノードM,NもノードIが無くなると構造位置が変わってしまう。
一方、ノードIと親を共通にしないノードB,C,D,O,P及びQは、ノードIが無くなっても構造位置が不変である。ノードIと親が共通であっても、ノードIの前方にある兄であるノードFと、その子孫であるノードG,Hとは、ノードIが無くなっても構造位置が不変である。
結局、ノードIの付与から削除までの間に、自分自身(ノードI)の子孫、あるいは弟とその子孫になる位置に一つでもアノテーションが付与されたならば、アノテーション位置影響分析部30はノードIの操作ログをアノテーション操作ログDB70から取り除けないと判定する。また、ノードIの付与から削除までの間に、自分自身の子孫、あるいは弟とその子孫になる位置にアノテーションが付与されなければ、アノテーション位置影響分析部30はノードIの操作ログをアノテーション操作ログDB70から取り除けると判定する。
図28は付与操作および削除操作の操作ログをアノテーション操作ログDBから取り除けるかどうかを判定する処理を表したフローチャートである。
ステップS91に進み、アノテーション位置影響分析部30は、付与操作のIDをiとし、削除操作のIDをjとする。ステップS92に進み、アノテーション位置影響分析部30はiの構造位置(XPath)を求めてpとする。
なお、アノテーションDB68やアノテーション操作ログDB70に登録されている構造位置は、どのノードの後にアノテーションを挿入するかの位置である。例えば図27の場合、ノードIは構造位置としてノードFが指定されている。しかし、ここではノードFの構造位置ではなくノードI自身の構造位置をpとする。
ステップS93に進み、アノテーション位置影響分析部30は注目する操作ログ上の位置iを、現在のiの次の操作ログのIDとする。なお、操作ログはアノテーション操作ログDB70から取り除かれていることもあるため、現在のiの次の操作ログのIDが連番でないこともある。
ステップS94に進み、アノテーション位置影響分析部30は注目する操作ログ上の位置iが削除操作(j)よりも過去に行われた操作であるかを判定する。注目する操作ログ上の位置iが削除操作(j)よりも過去に行われた操作であれば、アノテーション位置影響分析部30はステップS95に進む。
ステップS95では、アノテーション位置影響分析部30が、iで示される操作が付与操作であるかを判定する。iで示される操作が付与操作であれば、アノテーション位置影響分析部30はステップS96に進み、iで示される付与操作の構造位置を取り出し、その構造位置をqとする。なお、ここではpと同様に、付与されたアノテーション自身の構造位置をqとする。
そして、ステップS97に進み、アノテーション位置影響分析部30はqがpの子孫であるか、あるいは弟であるか、あるいは弟の子孫であるかを判定する。qがpの子孫であるか、あるいは弟であるか、あるいは弟の子孫であれば、アノテーション位置影響分析部30は、影響のあるアノテーションが存在すると判定する。qがpの子孫でなく、あるいは弟でなく、あるいは弟の子孫でなければ、アノテーション位置影響分析部30は、ステップS93に戻る。
なお、ステップS94において、注目する操作ログ上の位置iが削除操作(j)よりも過去に行われた操作でなければ(jと一致)、アノテーション位置影響分析部30は影響のあるアノテーションが存在しないと判定する。ステップS95において、iで示される操作が付与操作でなければ、アノテーション位置影響分析部30はステップS93に戻る。
(アノテーション作用装置51が図5の構成である例)
図5の構成のアノテーション作用装置51は、アノテーションの削除操作に対し、アノテーション操作ログDB70内の対応するレコードに、図29に示すように、削除済みのマーカを付与する。図29はアノテーション操作ログDBの他の例の構成図である。図29のアノテーション操作ログDB70は、図10に示したアノテーション操作ログDB70と、付与したアノテーションが削除済か否かのマーカが記録されることが異なる。
また、図29のアノテーション操作ログDB70には、削除操作の操作ログが記録されない(記録されたとしても無視される)。図29のアノテーション操作ログDB70では操作種類のフィールドが残されているが、記録される操作ログが付与操作だけである為、操作種類のフィールドを無くしてもよい。
また、図29のアノテーション操作ログDB70はID003のXPathが図10のアノテーション操作ログDB70と異なっている。この理由はWeb資源解析結果に削除済の痕跡が残るからである。図30は、削除済の痕跡が残るWeb資源解析結果を表す木構造の説明図である。図30では、div class=deletedという削除済の痕跡が残っているため、アノテーションZの構造位置が/html/body/div[4]となる。
図31はアノテーション作用装置のアノテーション表示処理を表したフローチャートである。図31のフローチャートは、図8のフローチャートと比べて、アノテーションを表示(作用)するときに「削除済」マーカを考慮すること、削除済みのアノテーションを認識し「削除済」マーカを付与すること、とが異なる。
具体的に、図31のフローチャートは、図8のフローチャートと以下の点が異なっている。第1に、図5の構成のアノテーション作用装置51は、削除操作をアノテーション操作ログDB70に記録しないため、図8のフローチャートにおけるステップS7,S13〜S15が不要となる。
第2に、図5の構成のアノテーション作用装置51は、図8のフローチャートにおけるステップS10のテキストフラグメント化に対応する処理おいて、「削除済」マーカがある場合と「削除済」マーカがない場合とで作成するテキストフラグメントが異なる。第3に、図5の構成のアノテーション作用装置51は、後で操作ログを削除する必要がないので識別マーカも不要である。
ステップS101〜S106、S107,S108,S112,S113の処理は図8のステップS1〜S6、S8、S9、S12、S16の処理と同様であるため、説明を省略する。
ステップS109に進み、アノテーション操作ログ拡張部65はアノテーションをテキストフラグ化する際に、アノテーションが既に削除されているか否かをアノテーション操作ログDB70のマーカのフィールドを参照して確認する。「削除済」マーカが付いていなければ、アノテーション操作ログ拡張部65はアノテーションが存在すると判定し、ステップS110に進む。ステップS110では、アノテーション操作ログ拡張部65が図8のステップS10と同様、アノテーション内容からアノテーション用のテキストフラグメントを作成するが、特に識別マーカをテキストフラグメントに埋め込む必要はない。
もし、「削除済」マーカが付いていれば、アノテーション操作ログ拡張部65は、既にアノテーションが削除されていると判定し、ステップS114に進む。ステップS114ではアノテーション操作ログ拡張部65がダミーのアノテーションテキストフラグメントを作成する。ダミーのアノテーションテキストフラグメントは、構造位置を計算する時にアノテーションがあるのと同様な働きをするが、表示や作用のときに何も効果を生じないようなテキストフラグメントである。具体的に、例えば属性値としてdeletedを持ち、テキスト要素が空のテキストフラグメントとして<div class="annotation deleted"/>を作成する。
削除済みアノテーションを認識する典型的な実施例は、アノテーションの削除操作が行われたときに呼び出されるものである。例えば、図23のアノテーション削除の実施例においてステップS55のアノテーション操作ログに「削除」を登録する代わりに、図31のフローチャートは、対応する付与操作(これは図23のフローチャートではステップS53において求まっている)のレコードに削除済というマーカを付与する点で異なる。
また、図5の削除済みアノテーション認識手段41は、アノテーションの削除操作時点で何もせず、ステップS109でアノテーションが既に削除されているかどうかを確認する際、「削除済」マーカの有無を確認するのではなく、アノテーションDB68にアクセスし、そのアノテーションのレコードが存在するかどうかでアノテーションが存在するか削除されているかを確認できる。なお、このやり方の場合には操作ログの「削除済」マーカのフィールドは不要である。なお、アノテーションDB68へのアクセスは、このタイミングでなくステップS107でアノテーション情報を取り出すときに行ってもよい。
(アノテーションプログラムがブラウザに適用された例)
図32は、本実施例のアノテーションプログラムを適用したブラウザの一例の構成図である。図32のブラウザ200は、典型的な構成を示したものであり、説明に不要なCSSの処理やPDFプラグイン等の細かい部分を省略している。
ネットワークを経由して受信されたHTML文書100をHTMLパーサ201は解析して、木構造(DOMツリー)202を生成する。これと同時に、Javascriptプログラム205はHTML文書100中にあったJavascriptプログラム205を実行し、DOMツリー202の中身を書き換える。書き換えられたDOMツリー202はレンダリングエンジン203に送られる。
レンダリングエンジン203は送られてきたDOMツリー202を画面で見える形に変換する。そして、ユーザインタフェース204を介したユーザの操作等によってJavascriptプログラム205はDOMツリー202を書き換え、表示させる内容を変化させる。
アノテーションプログラム210は、典型的にブラウザ200の中に保持される(すなわち、ブラウザ200に組込まれる、あるいは機能拡張として付け加えられる形で実現される)。
そして、読み込まれたHTML文書100のJavascriptプログラム205が実行されるのに追加して、アノテーションプログラム210は実行され、DOMツリー202を書き換える。なお、アノテーションプログラム210が参照するアノテーションDB等のデータはブラウザ200の外部に保持される。
アノテーションプログラム210を保持する別の実施形態としては、読み込まれるHTML文書に、アノテーションプログラム210を保持しておくことが考えられる。この実施形態では、適用できるWebページが限定されるが、ブラウザ200にアノテーションプログラム210を保持するのと同じ効果を持たせることができる。
本発明は、以下に記載する付記のような構成が考えられる。
(付記1)
アノテーション情報を管理するコンピュータを動作させるアノテーションプログラムであって、
前記コンピュータを、
Web資源を受信する受信手段と、
受信したWeb資源に対する操作ログを、Web資源の識別情報と操作ログとを対応付けて時系列に記憶しているアノテーション操作ログ記憶手段から取り出すアノテーション操作ログ取得手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログがアノテーションの付与操作であるとき、前記Web資源に埋め込むアノテーションに、前記アノテーションを識別可能なマーカを付与するアノテーションマーカ付与手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログがアノテーションの削除操作であるとき、前記マーカを利用して、前記Web資源に埋め込まれている削除操作の対象であるアノテーションを特定して削除するアノテーション特定削除手段と
して動作させるアノテーションプログラム。
(付記2)
前記コンピュータを、
前記アノテーション操作ログ記憶手段に記憶されているアノテーションの付与操作及び削除操作の操作ログの対のうち、削除しても他のアノテーションの付与位置に影響を与えないアノテーションの付与操作及び削除操作の操作ログの対を分析するアノテーション位置影響分析手段と、
削除しても他のアノテーションの付与位置に影響を与えないアノテーションの付与操作及び削除操作の操作ログの対を前記アノテーション操作ログ記憶手段から削除するように書き換えるアノテーション操作ログ書き換え手段と
して動作させる付記1記載のアノテーションプログラム。
(付記3)
アノテーション情報を管理するコンピュータを動作させるアノテーションプログラムであって、
前記コンピュータを、
Web資源を受信する受信手段と、
受信したWeb資源に対する操作ログを、Web資源の識別情報と操作ログとを対応付けて時系列に記憶しているアノテーション操作ログ記憶手段から取り出すアノテーション操作ログ取得手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログが既に削除されているアノテーションの付与操作であるとき、他のアノテーションの付与位置に影響を与え、前記アノテーションの作用時に影響を与えないダミーアノテーションの生成を行うダミーアノテーション生成手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログが存在するアノテーションの付与操作であるとき、前記アノテーションを前記Web資源に埋め込み、前記操作ログが既に削除されているアノテーションの付与操作であるとき、前記ダミーアノテーションを前記Web資源に埋め込むアノテーション埋込手段と
して動作させるアノテーションプログラム。
(付記4)
アノテーション情報を管理するアノテーション装置であって、
Web資源を受信する受信手段と、
受信したWeb資源に対する操作ログを、Web資源の識別情報と操作ログとを対応付けて時系列に記憶しているアノテーション操作ログ記憶手段から取り出すアノテーション操作ログ取得手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログがアノテーションの付与操作であるとき、前記Web資源に埋め込むアノテーションに、前記アノテーションを識別可能なマーカを付与するアノテーションマーカ付与手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログがアノテーションの削除操作であるとき、前記マーカを利用して、前記Web資源に埋め込まれている削除操作の対象であるアノテーションを特定して削除するアノテーション特定削除手段と
を有するアノテーション装置。
(付記5)
アノテーション情報を管理するアノテーション装置であって、
Web資源を受信する受信手段と、
受信したWeb資源に対する操作ログを、Web資源の識別情報と操作ログとを対応付けて時系列に記憶しているアノテーション操作ログ記憶手段から取り出すアノテーション操作ログ取得手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログが既に削除されているアノテーションの付与操作であるとき、他のアノテーションの付与位置に影響を与え、前記アノテーションの作用時に影響を与えないダミーアノテーションの生成を行うダミーアノテーション生成手段と、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログが存在するアノテーションの付与操作であるとき、前記アノテーションを前記Web資源に埋め込み、前記操作ログが既に削除されているアノテーションの付与操作であるとき、前記ダミーアノテーションを前記Web資源に埋め込むアノテーション埋込手段と
を有するアノテーション装置。
(付記6)
アノテーション情報を管理するアノテーション装置のアノテーション方法であって、
Web資源を受信する受信ステップと、
受信したWeb資源に対する操作ログを、Web資源の識別情報と操作ログとを対応付けて時系列に記憶しているアノテーション操作ログ記憶手段から取り出すアノテーション操作ログ取得ステップと、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログがアノテーションの付与操作であるとき、前記Web資源に埋め込むアノテーションに、前記アノテーションを識別可能なマーカを付与するアノテーションマーカ付与ステップと、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログがアノテーションの削除操作であるとき、前記マーカを利用して、前記Web資源に埋め込まれている削除操作の対象であるアノテーションを特定して削除するアノテーション特定削除ステップと
を有するアノテーション方法。
(付記7)
アノテーション情報を管理するアノテーション装置のアノテーション方法であって、
Web資源を受信する受信ステップと、
受信したWeb資源に対する操作ログを、Web資源の識別情報と操作ログとを対応付けて時系列に記憶しているアノテーション操作ログ記憶手段から取り出すアノテーション操作ログ取得ステップと、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログが既に削除されているアノテーションの付与操作であるとき、他のアノテーションの付与位置に影響を与え、前記アノテーションの作用時に影響を与えないダミーアノテーションの生成を行うダミーアノテーション生成ステップと、
前記アノテーション操作ログ記憶手段から取り出した前記Web資源に対する操作ログを時系列に選択し、前記操作ログが存在するアノテーションの付与操作であるとき、前記アノテーションを前記Web資源に埋め込み、前記操作ログが既に削除されているアノテーションの付与操作であるとき、前記ダミーアノテーションを前記Web資源に埋め込むアノテーション埋込ステップと
を有するアノテーション方法。
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。