以下、図面を参照して、本発明を実施するための最良の形態(以下「実施形態」と呼ぶ)について説明する。
[実施形態1]
図1は、本発明に係るナビゲーションサーバの構成を示す機能ブロック図である。この図において、ナビゲーションサーバ1000は、インターネットやイントラネット等のネットワーク1200上に存在するコンピュータから文書を収集し、収集した文書の情報からナビゲーション用の情報を作成してユーザに提供するサーバである。ここで提供するナビゲーション用の情報は、ネットワーク1200上の文書群が構成するハイパーテキスト構造を簡略化した木構造である。ナビゲーションサーバ1000の詳細については、システムの全体像を説明した後で詳しく説明する。
ウェブサーバ1100は、ネットワーク1200上のユーザとナビゲーションサーバとの間のユーザインタフェース機能を提供するサーバである。ウェブサーバ1100は、まず、ナビゲーションサーバ1000に対するナビゲーション情報の要求を入力するためのウェブページを提供する。ユーザは、クライアント装置1300(例えばブラウザ)によりそのウェブページを取得し、そのページに対して欲しいナビゲーション情報を特定する条件を入力する。この条件には、ナビゲーション情報として欲しい木構造の範囲、すなわち木構造に組み込むべき文書群の所在範囲や、木構造の根(ルート)とすべき文書を特定する情報(例えばURLなど)を含めることができる。範囲を特定するための情報としては、ウェブサイトのドメイン名やホスト名などを用いることができる。なお、範囲としてのウェブサイトを指定すれば、ウェブサーバ1100乃至ナビゲーションサーバ1000がそのサイトのトップページを自動的に木構造の根と判断するようにしてもよい。これら入力された条件の情報は、クライアント装置1300からウェブサーバ1100に送られる。これを受け取ったウェブサーバ1100は、その条件をナビゲーションサーバ1000に渡して木構造の作成を依頼する。ナビゲーションサーバ1000は、この条件に従って、文書群の木構造を示したナビゲーション用のウェブページ(ナビゲーションページと呼ぶ)を作成し、これをウェブサーバ1100を介して、要求元のクライアント装置1300に提供する。
次に、ナビゲーションサーバ1000の詳細について説明する。リンク収集部1010は、HTML(HyperTextMarkup Language)やXML(eXtensible Markup Language)等のハイパーテキスト記述言語で記述された文書群を収集し、それら文書群の記述を解析してそれら文書群が構成するハイパーテキスト構造を求める機能モジュールである。リンク収集部1010は、例えば、ネットワーク1200上にある文書中のリンク情報をたどって行くことで、文書間のリンク関係の情報(すなわちハイパーテキスト構造)を求める。
すなわちリンク収集部1010は、文書を解析してアンカータグ(『<AHREF="...(リンク先のURLを示す文字列)">』)などのリンク情報を検出し、リンク情報を見つけるとそのリンク情報に示されるリンク先URL(UniformResource Locator)の文書の取得処理を実行する。この取得処理では、そのリンク先URLで示される文書を要求する取得要求(GETリクエストなど)を発行する。この取得要求に対し、要求に係るURLの文書を管理するウェブサーバからその文書を取得できた場合、リンク収集部1010は、取得した文書に対して、上述したリンク情報の検出処理及びそのリンク先の取得処理を実行する。リンク収集部1010は、起点として与えられた1以上の文書から解析を始め、上記のリンク情報の検出処理及びそのリンク先の取得処理を繰り返していくことで、文書やそれらのリンク関係の情報を収集する。この繰り返しが、リンク収集部1010によるハイパーテキスト構造のトラバース(巡回ともいう)である。リンク収集部1010は、このトラバースの過程で取得した文書の実体データ(すなわちHTMLで記述された文書データ)を図示省略する文書格納装置へと格納し、同じくトラバースの過程で検出した文書間のリンクの情報をハイパーテキスト構造保持部1020へと格納する。これまでに説明したリンク収集部1010の機能は、ロボット検索型のサーチエンジンがウェブ文書を収集するために用いている既存のクローラー乃至スパイダーと同等のものである。
以上のようなリンク収集部1010によるトラバース処理により、ハイパーテキスト構造保持部1020には、トラバース処理の過程で検出した文書についての管理情報が登録された文書テーブル1022と、検出したリンクについての管理情報が登録されたリンクテーブル1024とが形成される。文書テーブル1022のデータ内容の一例を図2に、リンクテーブル1024のデータ内容の一例を図3に示す。
なお、図2及び図3は、図4に例示した文書1500−1,2,・・・,6,・・・が成すハイパーテキスト構造の一部を表現したものである。図4の例は、「ABCD会社」のウェブサイトのハイパーテキスト構造を示している。このウェブサイトには、トップページ1500−1の他に、商品紹介のためのインデックスページ1500−2,各商品の説明のページ1500−3,1500−4,ダウンロードプログラムのインデックスページ1500−5,及びデバイスドライバプログラムのダウンロードページ1500−6が含まれる。図において、矢印の向きはリンクの方向を示している。図示のように、トップページ1500−1以外の各ページには、トップページ1500−1へのリンクが張られている。
文書テーブル1022には、図2に示すように、検出したウェブ文書ごとに、その文書に割り当てた一意的な識別子である「文書ID」、その文書の「URL」(プロトコル指定記述を除いたURI(UniformResource Identifier)でもよい)、その文書の「タイトル」、及びその文書が存在するか否かを示す「状態」情報が登録される。「タイトル」には、文書のヘッダ内に<title>タグで示されたタイトル文字列が登録される。「状態」の項目があるのは、次のような理由からである。すなわち、リンク収集部1010のトラバース処理の過程では、文書が検出されるのは、起点として与えられた文書を除き、他の文書中のリンク情報に示されるURL(又はURI)からである。しかし、そのURL等には実際には文書が存在しない(すなわち、URLによる取得要求に対してウェブサーバから文書が返されない)こともあり得る。したがって、リンク情報が示すURL等を用いて文書が取得できた場合は、文書テーブル1022におけるその文書の「状態」は「存在」となり、そうでない場合は「非存在」となる。なお、リンク収集部1010が、トラバースの際に取得した各文書をナビゲーションサーバ1000内に保存するようにすることもでき、その場合は、各文書の保存場所を示すアドレス情報を、文書テーブル1022の各文書のデータ項目として追加することも好適である。
リンクテーブル1024には、図3に示すように、検出されたリンクごとに、そのリンクのリンク元の文書の文書IDと、リンク先の文書の文書IDが登録される。リンク収集部1010は、文書中からリンク情報を検出した場合、リンクテーブルに1つのエントリを追加し、その文書の文書IDをそのエントリのリンク元に、そのリンク情報のURLが示すウェブ文書の文書IDをリンク先に、それぞれ登録する。
リンク収集部1010は、定期的に、あるいはユーザや管理者から収集命令が到来するなどの所定の収集開始条件が満足されると、リンク情報の収集処理を実行する。リンク収集部1010に対しては、収集処理の終了条件が設定可能であり、収集を開始した後その終了条件が満足されると、収集部1010は収集処理を終える。終了条件は、例えば、リンク探索の起点として指定された1乃至複数の文書から、リンクを介して辿りうるすべての文書を検出し終わった時、収集を終了する、等の条件である。なお、リンク情報の収集を行う範囲を限定(例えば予め登録された1乃至複数のドメインに限定するなど)することもできる。
木構造作成部1030は、ハイパーテキスト構造保持部1020が保持するハイパーテキスト構造の情報に基づき、それを簡略化した木構造のデータを作成する機能モジュールである。冗長リンク削除部1040は、木構造作成部1030が作成する木構造から、トップページへのリンクなどのように多くのページに存在する冗長なリンクによる親子関係を削除するための機能モジュールである。木構造情報保持部1050は、木構造作成部1030がハイパーテキスト構造のリンクをたどりながら作成していく木構造の情報を保持する機能モジュールである。これら木構造作成部1030と冗長リンク削除部1040と木構造情報保持部1050との協働により、冗長なリンクの情報を極力含まない簡略化された木構造が作成される。この木構造作成の処理の流れについて、以下に詳しく説明する。
木構造は、ユーザから指示された条件などに基づき特定される根(ルート)ノードの文書を起点とし、その起点からリンクをたどってハイパーテキスト構造を探索していくことにより作成される。一般に、木構造作成の際の探索規則の一つとして幅優先探索規則が知られており、以下ではこの幅優先探索による木構造の作成処理を説明する。ただし、当業者には明らかなように、深さ優先探索規則など、他の規則に従った探索によっても木構造は作成できる。
この探索処理の手順を図5に示す。この処理では、木構造作成部1030は、ハイパーテキスト構造の幅優先探索を行うために、リンクを格納するキュー(先入れ先出し式の待ち行列)を一つと、各文書に対応する探索フラグを生成する(S100)。木構造作成の開始時に、すべての文書の探索フラグをリセットし、起点(根)の文書から探索を開始する。
まずその起点の文書の探索フラグを立て、その起点の文書をキューに追加する(S102)。そして、キュー内に文書があれば(S104)、キューの先頭の文書を取得し(S106)、その文書中のリンク情報の各々について、S108〜S119の処理を繰り返す。
この繰り返しの中では、まず木構造作成部1030は、取得した文書から延びるリンクを示すリンク情報を1つリンクテーブル1024から取得する(S108)。これには、その取得した文書の文書IDをリンク元文書IDとして含むリンク情報をリンクテーブル1024から取得すればよい。一度取得したリンク情報はそれを記憶しておき、再度取得されることがないようにする。そして、このように取得したリンク情報を冗長リンク削除部1040に渡し、冗長リンクかどうかの判定を依頼する(S110)。
この依頼を受けた冗長リンク削除部1040の処理手順を図6に示す。この手順では、まず木構造作成部1030からリンク情報を取得する(S120)。次に、冗長リンク削除部1040は、木構造情報保持部1050を参照して、そのリンク情報が示すリンク元文書(すなわちそのリンク情報内の「リンク元文書ID」に対応する文書)の木構造上での親を特定する(S122)。
ここで注目しているリンク元文書は、言い換えれば、木構造作成部1030がS110で冗長リンク削除部1040に処理を依頼した際に着目している文書、すなわちS104で取得した文書のことである。したがって、S106でキューから取得された文書が根の文書である場合は、S122では木構造上の親文書が存在しないので、この場合は冗長リンク削除部1040は、S120で取得したリンク情報は冗長と判断せず、そのリンク情報を考慮すべき旨(すなわち削除しない)の指示を木構造作成部1030に通知する(図示省略)。
また、S106において根の文書以外の文書をキューから取り出した場合、そのときに呼び出される図6の処理では、その文書(すなわちリンク元文書)に対する親が木構造上に必ず存在する。したがって、冗長リンク削除部1040は、木構造情報保持部1050に保持される木構造情報(図7参照)から、その文書のIDを子文書に持つ親文書のIDを求める(S122)。そして、親文書のIDが分かれば、次にリンクテーブル1024において、その親文書IDをリンク元とする各リンク情報を調べ、その中にS120で取得したリンク情報と同じリンク先文書を指しているものがあるかどうかを判定する(S124)。冗長リンク削除部1040は、S124の判定の結果親文書のリンク先の中にS120で取得したリンク情報のリンク先と同じものがあれば、木構造作成部1030に対してそのリンク情報を無視すべき旨の指示を送信し(S126)、そうでなければ木構造作成部1030に対してそのリンク情報を考慮すべき旨の指示を送信する(S128)。
再び図5の手順に戻り、冗長リンク削除部1040からの指示を受け取った木構造作成部1030は、S112で、その指示がリンクを無視する旨の指示であるかどうかを判定する。そして、この判定結果が肯定(N)であれば、S108で取得したリンクを木構造に考慮すべきということなので、そのリンク情報が示すリンク先の文書を、リンク元の文書(すなわちS106で取得した文書)の子のノードとして、木構造に組み込む(S114)。そして、いま木構造に組み込んだ文書(すなわちリンク先)が探索済みかどうかを、その文書の探索済みフラグを参照して判定(S116)し、探索済みでなければ、そのリンク先文書をキューに追加し(S118)、S119の処理へ進む。S114の処理と、S116及びS118のペアの処理とは、順番を入れ替えてもよい。一方、S116でリンク先文書が既に探索済みであると判定された場合、そのリンク先文書はキューに入っているか、或いは既にキューから取り出し済みかのどちらかである。したがって、この場合、そのリンク先文書から広がる部分木は既に作成済みであるか、これから作成される予定であるかのどちらかである。このため、その場合本実施形態では、重複したトラバース処理を避けるため、そのリンク先文書はキューには追加しない。
なお、S112で、冗長リンク削除部1040からの指示がリンク情報の無視を示すものである場合は、S114〜S118の処理はスキップされ、S119に進む。この場合、そのリンク情報に対応するリンク関係は木構造には組み込まれなくなる。
S119では、S106でキューから取得した文書をリンク元とするリンク情報に未処理のものが残っているかどうかを判定し、残っていればS108に戻り未処理のリンク情報を1つ取得してS110以降の処理を繰り返す。一方、残っていなければ、S104に戻ってキュー内に文書があるかどうかを検査し、あればキューから先頭の文書を取り出してS108以降の処理を繰り返す。以上の処理を、キューから文書がなくなるまで繰り返せば、根の文書からリンクをたどって到達できる文書群の木構造が作成できる。
なお、繁雑さを避けるため以上の説明では省略したが、リンクテーブル1024から得たリンク情報に示されるリンク先文書が、文書テーブル1022内に存在しないことも考えられる。すなわち、リンク元の文書中にリンクの記述は存在するものの、そのリンク先には実際の文書が存在しない場合である。このような場合、リンク先の文書が存在しないのだから、そのリンクを木構造に反映させる必要はない。このような場合を考慮する場合、処理手順は例えば次のようになる。すなわち、図5の手順のS108でリンク情報を取り出した際、そのリンク情報のリンク先文書の「状態」を文書テーブル1022(図2参照)から調べ、リンク先文書の状態が「非存在」であるならば、S110〜S118の処理を飛ばして(従って木構造には組み込まれない)、S119に移行するという手順である。リンク先文書の状態が「存在」の場合は、S110以降の処理を実行すればよい。
次に図5及び図6の処理手順に従って図4のハイパーテキスト構造に対する木構造を作成する際の具体的な処理の流れを、図7〜図11を参照して説明する。
図7〜図11は、処理の流れにおけるいくつかの時点でのキューの状態(a)、木構造情報保持部1050に保持される木構造情報(b)、及びその木構造情報が表す木構造(c)をそれぞれ示している。
図7は、図5のS102で根の文書(文書ID=001、「ABCD会社のトップページ」)をキューに追加した時点での状態を示している。このときキュー1600には(a)に示すように文書001のみが保持され、木構造情報保持部1050には(b)に示すように親文書のIDが001 で子文書は未登録のエントリが保持されている。これは(c)に示すようにトップページ1500−1のみからなる木構造を示す。
この状態からキュー1600から文書001 を取り出し(S106)、この文書をリンク元とするリンク情報をリンクテーブル1024から探すと(S108)、リンク元が001でリンク先が002であるリンク情報(図3の1行目)が見つかる。ここで、文書001は根なので木構造上には親が存在しない。このため、リンク先文書002 は木構造作成に考慮すべきと冗長リンク削除部1040で判定され、それに応じ木構造作成部1030は文書002を親文書001 の子文書の欄に登録する。また、文書002 は、この時点ではまだキュー1600に入ったことがないので、探索フラグは未探索状態を示している。したがって、この文書002はキュー1600に追加される。この追加に併せて、木構造作成部1030は新たに追加した文書002 を親文書とするエントリを木構造情報保持部1050に追加する。図8は、この時点でのキュー1600,木構造情報保持部1050及び木構造の状態を示している。
文書002のキュー1600への追加が終わると、木構造作成部1030は文書001 に他にリンク情報がないかどうかを調べる。この調査で、リンク元が001でリンク先が005であるリンク情報が見つかる。あとは、文書002の場合と同様の流れで、文書005が親文書001の子文書として登録され、キュー1600に追加される。この時点でのキュー1600,木構造情報保持部1050及び木構造の状態を示したのが、図9である。この処理の流れでは、ある文書が木構造情報保持部1050の親文書としてのエントリを持つことは、探索フラグが探索済みであると等価である。
このようにして文書001から005へのリンクの処理が終わると、文書001 には他にリンク情報はないので、その時点でキュー1600の先頭にある文書002 を取り出す(S106)。文書002から延びるリンクには、文書003へのもの、文書004へのもの及び文書001へのものと、3つのリンクがあるが、文書002の親文書001から延びるリンクには、それら3つのリンクとリンク先が一致するものはない。したがって、上述の処理により文書003,004,001の3つの文書は全て文書002 の子文書として登録される。ここで、文書003,004 は未探索なのでキュー1600に追加されるが、文書001 は既に探索済みなのでキュー1600には追加されない。図10は、この時点での状態を示した図である。
更に処理が進み、文書005 をキュー1600から取り出した場合には(S106)、上述と同様の処理の流れで文書006,001が文書005 の子文書として登録される。そして、次に文書003をキュー1600から取り出して調べたとき、文書003 から文書001 へのリンクがリンクテーブル1024(図3参照)に見つかるが、文書003 の親文書002 には、同じ文書001へ延びるリンクが存在するので、文書003 から文書001 へのリンクは木構造作成の際に無視される。この結果、木構造上では文書003 の子に文書001 は現れない。なお、文書003はその他にリンクを持たないので、結局文書003 の子文書は「なし」となる。図11は、この時点でのキュー1600,木構造情報保持部1050及び木構造の状態を示している。
以上のような処理を、キュー1600から文書がなくなるまで実行すれば、結局木構造情報保持部1050には図12に示すような木構造情報が保持されることになる。これが表す木構造は、図11の(c)に示したものと同様である。
以上の処理により作成された木構造の情報は、ナビゲーションページ作成部1060に渡される。ナビゲーションページ作成部1060は、この木構造を示したナビゲーションページを作成する。ナビゲーションページでは、各文書をノードとした木構造が図式化して示される。
好適な態様では、ナビゲーションページは、木構造を表示する欄と、その木構造からユーザがクリックなどの操作により選択した文書を表示する欄を含んだページとして構成する。ここで、木構造表示おける各ノードには、それぞれ対応する文書のタイトル(或いはその一部)と、その対応する文書を呼び出すための呼出用情報が設定される。タイトルは、木構造の各ノードの表示に用いられる。呼出用情報は、例えば、そのノードに対応する文書を表示したナビゲーションページを作成するためのCGI(Common Gateway Interface)プログラムを示すURLである。これにより、ユーザがクライアント装置1300のブラウザ上で木構造中のノードを選択すると、そのウェブサーバ1100がCGIプログラムを呼び出す。そのCGIプログラムは、文書の表示欄にはその選択された文書が表示され、木構造の表示欄にはそのノードが選択状態であることを示すよう他のノードと表示形態を異ならせて表示した木構造が表示されたナビゲーションページを作成し、これをウェブサーバ1100を介してブラウザに提供する。木構造の表示は、木構造全体を表示するものに限らず、最初は根から所定の深さのノードまでを表示し、下位の表示を省略したノードをユーザが選択した場合、そのノードの子を更に表示すると言ったような、段階的な木構造表示を行うようにすることもできる。なお、このようなナビゲーションページやCGIを用いた仕組みの実装はあくまで一例に過ぎず、当業者ならば様々な変形が容易であることが了解されよう。
また、各ノードにそれぞれ対応する文書のURLを埋め込んだ木構造を表示したナビゲーションページをユーザに提供するようなサービス形態も可能である。この場合、ユーザは、ナビゲーションページ上で文書のノードをクリックしてその文書をブラウザに表示させ、それが自分の求めるものでなければナビゲーションページに戻って更に別のノードをクリックする等の作業により、求める文書を探すことになる。
以上、本発明の好適な実施形態を説明した。本実施形態の処理手順では、注目している文書から延びるリンクのリンク先が、その文書の親のいずれかのリンクのリンク先と同じである場合、注目している文書からのそのリンクを冗長なリンクとみなし、木構造作成においてそのリンクを無視するようにしている。このような構成によれば、注目する文書から延びるリンクのうち、親文書と同じリンク先を示しているものは木構造に反映させないので、作成される木構造が従来手法により作成される木構造よりも簡素なものとすることができる。例えば図2〜図4に例示したハイパーテキスト構造の場合、従来手法で木構造を作成した場合、図13に示すように、商品Aや商品Bのページ1500−3,1500−4、ドライバのページ1500−6のそれぞれの子としてトップページが現れるが、本実施形態の方式では、図11の(c)に示したようにトップページが子として現れるのは商品のページ1500−2とダウンロードのページ1500−5だけである。
以上のように、注目している文書から延びるリンクのリンク先が、その文書の親のいずれかのリンクのリンク先と同じである場合、注目している文書からのそのリンクを削除しても、それはナビゲーション上あまり問題とならないと考えられる。なぜなら、ユーザが木構造を表示したナビゲーションページを見ながら所望の文書を探す場合、ユーザは木構造を根から順にたどって所望の文書を探していくことが一般的と考えられるので、親文書Aからあるリンク先の文書Xへとたどらなかった場合、その親文書Aの子文書Bに同じ文書Xへのリンクがあったとしてもその子文書Bからたどって文書Xを取得しようとする可能性は低いからである。
このような簡略化により、木構造が簡素になってユーザにとって分かりやすくなる。例示したような小規模なハイパーテキスト構造ではこの利点は分かりにくいかも知れないが、大規模なウェブサイトのように多数の文書を含んだハイパーテキスト構造に適用した場合には、顕著な効果が期待できる。また、上述のように冗長リンクを省いて木構造を簡略化することで、木構造のデータ量を減らすことができる。このようなデータ量の削減は、通信コストの削減に資する。クライアント装置1300が高コストの無線通信を用いる携帯端末である場合、この通信コスト削減の効果は顕著である。また、携帯端末は記憶装置の容量や表示画面のサイズなどのリソースが少ないので、冗長リンクの削除による木構造の簡素化は有益である。
なお、特開2002−55872号公報には、ウェブ文書の閲覧の際、クライアント側に送るデータの量を削減するために、そのウェブ文書を、過去のバージョン、又はそのウェブ文書と同一ディレクトリ(すなわちそのウェブ文書とURLの階層が同じ)の文書とDOM(Document Object Model)レベルで比較し、その差分のみを示したページを作成してユーザに送る方式が開示されている。この従来技術は、2つの文書の差異の部分に着目してデータ量を削減するという点では本実施形態と共通している。しかしながら、この従来技術はウェブページ自体の簡略化のためのものであって木構造の簡略化のためのものではない。また、この従来技術では、ある文書を簡略化するために比較対象となる別の文書を探してくる必要があるが、本実施形態では、ハイパーテキスト構造をたどって木構造を作成する過程で、注目する文書と親文書のリンク情報を比較するものであり、注目する文書から延びるリンクを処理する際には親文書の情報は既に分かっているので、従来技術のような比較対象探索の手間はない。
以上の例では、リンクが冗長か否かを、「同一文書へのリンクが親にある」か否かという条件で判定した。この改良として、更にリンクを示すアンカーが設定される対象(アンカー対象と呼ぶ)の一致も考慮して冗長リンクか否かを判定する方式もある。アンカー対象とは、aタグの開始タグと終了タグに囲まれた部分であり、テキストの場合もあれば、イメージファイルの格納場所を記述したタグの場合もある。同じリンク先文書を指したリンクでも、アンカー対象が異なっていれば、文書の作成者が各文書に機械的に(例えばコピー操作などで)同じリンクを設定したのではなく、子文書のリンクは親文書のリンクとは異なる独自の意味を持たせて設定した可能性が高い。そこで、そのような子文書のリンクは、木構造に反映させた方が好適である。このため、この改良版では、「同一文書へのリンクが親にある」場合、直ちにそれを冗長リンクと判定するのではなく、更にアンカー対象の記述が一致するか否かを調べ、一致する場合に冗長リンクと判定する。逆に言えば、「同一文書へのリンクが親にない」場合と、「同一文書へのリンクが親にあり、かつアンカー対象が親のその同一文書へのリンクのアンカー対象と一致する」場合とでは、冗長なリンクではないと判定する。
また、以上の例では、冗長リンクは木構造に反映させなかったが、その代わりに、冗長リンクを、そうでないリンクとは区別した形で木構造に組み込むことも可能である。すなわち、この場合、木構造作成部1030は、各ノード(文書)が冗長リンクのリンク先か、非冗長リンク(冗長リンクでないリンク)のリンク先かを示す情報を含んだ木構造情報を作成する。そして、ナビゲーションページ作成部1060は、木構造の表示情報として、冗長リンクのリンク先であるノード、及び親からそのノードへと延びるエッジを、例えば、非冗長リンクのリンク先であるノード及びそれに延びるエッジよりも薄く示したり、或いはより目立ちにくい色に変えて示したりしたものを作成する。これにより、冗長リンクに由来する親子関係を、ユーザが見たときに煩雑にならない形で提示できる。
また、以上の例では、ハイパーテキスト構造を根文書から順にトラバースしていって木構造を順に作り上げていく際に、注目する文書の親文書をその途中段階の木構造の情報から求め、それら両文書の間での比較により冗長リンクか否かを判定したが、この代わりに、収集したリンク情報を統計処理して冗長リンクを検出することも可能である。すなわち、各文書からのリンクのうち、同一文書をリンク先とするリンクの割合が高い場合に、その同一文書への各文書からのリンクを、冗長リンクと判定するという方式である。より具体的には、例えば、リンクテーブル1024から、文書ごとに、その文書をリンク先とするリンク情報の数を集計し、この数をハイパーテキスト構造を構成する文書の総数で割ることで、同一文書に対する割合が求められる。この割合が所定のしきい値(例えば50パーセント)より高ければ、その同一文書をリンク先とするリンク情報は冗長と判定する。ただし、全部を冗長リンクとしては、木構造上にその「同一文書」がノードとして現れないことになるので、それらのうち1つだけは冗長リンクとは判定しないようにする。例えば、木構造上で最上位に来るもののうちの1つだけを冗長リンクではないものと判定するようにすればよい。このような方式でも、サイト内のトップページへのリンクなど、多数の文書(ウェブページ)に設定された同一文書へのリンクが木構造に現れて煩雑な見栄えになることを防止乃至低減できる。なお、以上ではハイパーテキスト構造を構成する全ての文書を母集団として同一文書へのリンクの割合を求めたが、この代わりに、無作為に抽出した十分な数のリンク情報を母集団として同一文書へのリンクの割合を求めるようにしてもよい。
また、以上の例では、ハイパーテキスト構造をトラバースしていく途上で、それぞれのリンクが冗長かを判定し、その判定結果に従ってそのリンクを木構造に組み入れるかどうかを制御したが、木構造の簡略化はこのような手順に限らない。この代わりに、例えば、リンクが冗長かどうかを判定せずに木構造を一旦作成してしまい、その後でその木構造のノードごとに、そのノードと同じ文書を指すノードが親ノードの兄弟にあればそのノードを削除するような手順でも、同様の木構造の簡略化が可能である。
[実施形態2]
本出願人は、特願2003−305880号及び特願2004−123428号にて、ハイパーテキスト構造の変化に応じた木構造の変化を示す差分データを効率的に算出する仕組みを提案した。冗長リンクの判別及び削除による木構造の簡略化は、その差分情報算出の仕組みにも適用可能である。以下、その具体的な適用の仕方について説明する。
<基礎となる構成>
まず、特願2004−123428号にて提案した仕組みについて説明する。
図14は、この基礎構成のシステムの全体構成の一例を示す図である。
このシステムにおいて、各企業企業A,B及びCは社内ネットワーク14a,14b及び14cをそれぞれ有しており、パーソナルコンピュータや各種サーバなどの多数のコンピュータがそれら社内ネットワーク14a,14b及び14cに接続されている。社内ネットワーク14a,14b及び14cには、それぞれファイアウォールが設けられており、インターネット10上の装置から社内ネットワーク内に不正アクセスができないようになっている。社内ネットワーク14a,14b及び14c上には多くの文書がウェブページとして存在している。それらウェブページ群は、リンク記述によって相互にリンクされ、ハイパーテキスト構造を形成している。各企業内のユーザは、パーソナルコンピュータ上のウェブブラウザを用い、インターネット10上のサーバが公開している文書と共に、自社の社内ネットワーク14a,14b又は14c上に存在する文書を閲覧することができる。
ここで、文書群が構成するハイパーテキスト構造は人間にとって理解が難しいので、これを人間に理解しやすい木構造に変換してユーザに提示することができれば、ユーザは所望の文書を探しやすくなる。インターネット10に接続された木構造情報提供サーバ12は、このような木構造情報の提供を行うサーバである。木構造情報提供サーバ12は、例えばASP(アプリケーションサービスプロバイダ)のサーバである。この場合、企業A,B及びCがASPの顧客である。木構造情報提供サーバ12は、企業A,B及びCに対し、各々の社内ネットワーク14a,14b及び14c内の文書群のリンク関係を木構造で表した木構造データを提供する。
ここで、社内ネットワーク14a,14b及び14c内では、随時文書の新規生成、削除、内容変更が行われており、これらに応じて文書群が構成するリンク構造(ハイパーテキスト構造)は変化する。このような状況で顧客企業内のユーザにできるかぎり最新の木構造データを提供するために、木構造情報サーバ12は、各社内ネットワーク14a,14b及び14c内の文書群の変化に応じて、該サーバ12自身が保持している木構造データを更新する必要がある。
ところが、一般に各社内ネットワーク14a,14b及び14cはそれぞれファイアウォールで保護されているため、木構造情報提供サーバ12がそれら社内ネットワーク14a,14b及び14c上の文書(ウェブページ)を取得出来ない。
そこで、本基礎構成では、各企業の社内ネットワーク14a,14b及び14cのファイアウォール内にそれぞれ木構造情報収集装置16を設ける。木構造情報収集装置16は、自社の社内ネットワーク14a,14b又は14cに存在する文書群を調査し、それら文書群が構成する木構造が前回調査時からどのように変わったかを示す差分データを作成し、木構造情報提供サーバ12に送信する。これにより木構造情報提供サーバ12は、ファイアウォール内の文書群がなす木構造についての差分データを得ることができる。
図15は、木構造情報提供サーバ12及び木構造情報収集装置16の機能モジュール構成の一例を示す図である。
木構造情報提供サーバ12は、記憶装置122と、クライアント要求処理部126と、木構造更新部128を有している。記憶装置122には、各顧客企業の社内ネットワーク14a,14b及び14c内の文書群が構成する木構造を示す木構造データ124が記憶されている。
クライアント要求処理部126は、インターネット10上に接続されたクライアント装置18(典型的には各顧客企業内のユーザのPC)から木構造要求180を受け取り、その要求180に対応する木構造データ182を作成し、クライアント装置18に提供する。ここで、記憶装置122内の木構造データ124は、全ての顧客企業の社内ネットワーク上の文書群やインターネット上に公開されている文書群が構成する木構造群を含んでいる。クライアント要求処理部126は、そのような大規模な木構造データ124の中から、木構造要求180を発したユーザが指示した木構造閲覧範囲、及び該ユーザの閲覧権限の範囲に属する木構造を抽出し、これを木構造データ182としてクライアント装置18に送信する。
木構造更新部128は、記憶装置122内の木構造データ124を更新するための機能モジュールである。木構造更新部128は、各顧客企業の木構造情報収集装置16から送られてくる木構造差分データ220に基づき、現在記憶装置122に保存されている木構造データ124を最新のハイパーテキスト構造を反映したものに更新する。
各顧客企業内に設けられる木構造情報収集装置16は、記憶装置200と、収集部162と、差分データ作成部164とを有している。
記憶装置200には、巡回リスト202,前回文書テーブル204,前回リンクテーブル206及び差分情報判定テーブル208が記憶される。巡回リスト202は、木構造の更新タイミングが来た時に、その更新のために取得すべき文書を示したリストである。前回文書テーブル204は、前回の木構造更新タイミングでの収集処理で求めた、社内ネットワーク上の各文書の存在・非存在の状態を示すテーブルである。前回リンクテーブル206は、前回の木構造更新タイミングでの収集処理で求めた、社内ネットワーク上の各文書間のリンクの存在・非存在の状態を示すテーブルである。差分情報判定テーブル208は、更新タイミングの前後での文書及びリンクの状態変化の組合せから、木構造の差分を求めるための規則を示したテーブルである。
また、記憶装置200上には、収集部162による文書及びリンク情報の収集に応じ、収集後文書テーブル210及び収集後リンクテーブル212が作成される。収集後文書テーブル210は、収集部162の収集処理の結果判明した各文書の状態を示すテーブルである。また、収集後リンクテーブル212は、収集部162の収集処理の結果判明した各リンクの状態を示すテーブルである。これらのリスト及びテーブルの詳細な内容やその利用の仕方については、後に具体例を挙げて説明する。
収集部162は、木構造情報収集装置16が設けられた社内ネットワーク14上に存在する文書群や、それら文書に記述されたリンクを収集する機能モジュールである。この収集により、収集後文書テーブル210及び収集後リンクテーブル212が作成される。
差分データ作成部164は、収集部162による収集の結果である収集後文書テーブル210及び収集後リンクテーブル212と、記憶装置200内に記憶された他の情報を利用して、木構造差分データ220を作成する機能モジュールである。
これら収集部162及び差分データ作成部164が行う処理の詳細は、後に具体例を挙げて説明する。
木構造情報収集装置16は、所定の規則によって定まる木構造更新タイミングが到来する毎に、収集部162及び差分データ作成部164を動作させて木構造差分データ220を作成し、木構造情報提供サーバ12に送信する。
次に、具体例を挙げて本基礎構成のシステムの動作を説明する。
図16Aは、ある社内ネットワーク内の文書群が、前回の木構造更新タイミングにおいて構成していたハイパーテキスト構造を示す図である。図16Bは同じ社内ネットワーク内の文書群が、今回の木構造更新タイミングにおいて構成しているハイパーテキスト構造を示す図である。図16A及びBにおいて、丸印で示したノード300はハイパーテキスト構造を構成する個々の文書を示し、丸印の中に示した数字は当該文書に付与された文書IDを示す。また、矢印で示したアーク302はそれら文書間のリンクを示す。矢印の根もとのノードがリンク元の文書を、矢印の先端(矢じり側)のノードがリンク先の文書を示す。
図16Aにおいて、文書ID「7」のノードの枠線が点線で示されているのは、そのノードに対応する文書の実体データが社内ネットワーク上に存在しないことを意味する。すなわち、文書ID「3」の文書には、文書ID「7」の文書へのリンクが記述されているにもかかわらず、文書ID「7」の文書自体は存在していない。なお、以下では記述を簡明にするため、『文書ID「n」(nは自然数)の文書』と記述する代わりに、単に『文書n』と記述することとする。
図16Aと図16Bを比較すれば、前回の更新タイミングと今回の更新タイミングとで、ハイパーテキスト構造に以下のような変化があることが分かる。
(1)文書2から文書4へのリンクが削除された
(2)文書4から文書1へのリンクが新たに生成された
(3)文書5の内容(コンテンツ)が更新された
(4)文書6が削除された(付随的に文書6から8へのリンクも削除)
(5)文書7が新たに生成された
(6)文書7から文書8へのリンクが新たに生成された。
大まかに言えば、木構造情報収集装置16から木構造情報提供サーバ12へは、このような変化を示す情報を木構造差分データ220として送信すればよい。
図16Aや図16Bは説明のために作成した非常に簡単な例なので差分データを簡単に求めることができるが、実際の社内ネットワークでは、数千、数万、或いはそれ以上の文書がハイパーテキスト構造を構成しており、そのような膨大な文書群が構成する構造に対応する木構造の差分データを求めるのは容易ではない。そこで、本基礎構成の木構造情報収集装置16は、以下のような処理により、木構造差分データを効率的に作成する。
図17は、本基礎構成のシステムにおける木構造データの更新処理の流れを示す図である。
この処理では、木構造データの更新タイミングが到来すると、まず社内ネットワーク内に設けられた木構造情報収集装置16の収集部162が、巡回リスト202を参照して文書群の取得処理を実行する。そして収集部162は、その取得処理の結果と前回文書テーブル204と前回リンクテーブル206とを比較することにより、更新タイミングの前後での各文書及び各リンクの状態変化を示した収集後文書テーブル210及び収集後リンクテーブル212を作成する(S10)。
図18は、巡回リスト202のデータ内容の一例を示す図である。図18に示すように、巡回リスト202には、木構造情報収集装置16が設置された社内ネットワーク内でハイパーテキスト構造を構成する各文書毎に、その文書に付与した文書IDとその文書のURL(Uniform Resource Locator)とが登録されている。文書IDは、社内ネットワーク上で一意なものでよいが、複数の社内ネットワークを含むシステム全体で一意なものとしてももちろんよい。巡回リスト202には、社内ネットワーク内でハイパーテキスト構造を構成する文書のうち、前回の木構造更新タイミングでの処理により、存在することが確認された文書(すなわち取得出来た文書)についての情報が記憶されている。なお、図18の例は、図16Aに示したハイパーテキスト構造に対応しているので、文書ID「7」の文書に対応するエントリはない。もっとも、これはあくまで一例であり、この代わりに、取得出来なかった文書でも、その文書を指すリンクが他の文書に記述されていれば、これを巡回リスト202に登録しておくこともできる。
S10では、まず収集部162は、HTTP(ハイパーテキスト・トランスファ・プロトコル)のGETメソッドを用い、巡回リスト202に登録されている各文書のURLに示される文書の取得を試みる。また、この取得処理により取得した文書の内容に、巡回リスト202に含まれていないURLを示すリンク記述があれば、収集部162はそのリンク記述が示す文書に対し新たな文書IDを付与して巡回リスト202に登録し、その文書の取得を試みる。この取得要求に対し、取得対象の文書のURLが示すサーバは、要求されたURLが示す文書を持っていればその文書を木構造情報収集装置16へと送信し、そのURLが示す文書を持っていなければ「その文書が存在しない」旨を示すデータを木構造情報収集装置16へと送信する。なお、この取得処理では、例えばIf-modified-sinceヘッダを用いることで、取得対象の文書が更新されている場合にのみ、その文書の実体データが木構造情報収集装置16に送られるようにすることもできる。この場合、取得対象の文書が更新されていない場合は、更新がない旨を示すデータが木構造情報収集装置16に返される。このような取得処理により、取得しようとした各文書が存在するかしないかが分かる。また、If-modified-sinceヘッダを用いれば、存在する文書の内容が前回取得時から更新されているか否かを判別することもできる。なお、木構造の差分を求めるのみならば、文書の内容が更新されているか否かまでは調べる必要はないが、If-modified-sinceヘッダを用いれば既に木構造情報収集装置16に取得済みの文書を再度取得することを避けることができるというメリットがある。
収集部162は、この取得結果と前回文書テーブル204とを比較することにより、各文書の状態が前回の更新タイミングからどのように変化したか求め、その状態変化を示す収集後文書テーブル210を作成する。
図19Aは、図16Aのハイパーテキスト構造に対応した前回文書テーブル204のデータ内容の一例を示す図である。この図では、各文書ごとに、その文書IDとその文書の状態が登録されている。登録される文書の「状態」は、「存在」か「非存在」のいずれかである。すなわち、前回文書テーブル204には、前回の木構造更新タイミングの時点で、各文書IDに対応する文書がネットワーク上に存在していたか否かが登録される。なお、図19Aの例は、「非存在」の文書は前回文書テーブル204に登録しないという方式に従ったものであるため、文書ID「7」のエントリは存在しない。しかしながら、これは一例であり、この代わりに、いずれかの文書のリンク記述に示される文書であれば前回文書テーブル204に登録するという方式も考えられる。この場合、前回文書テーブル204には、文書ID「7」が「非存在」であるとして登録されることになる。
図19Bは、図16Aのハイパーテキスト構造が図16Bの構造へと変化した場合に、収集部162により作成される収集後文書テーブル210のデータ内容の一例を示す図である。収集後文書テーブル210には、収集の前後での各文書の状態の変化が示される。収集前の各文書の状態は前回文書テーブル204に示されており、収集後の文書の状態は収集部162による文書取得処理により求められる。収集前後の文書状態の変化には、(1)「新規」(収集前になかった文書が収集時に新たに検出された)、(2)「削除」(収集前に存在した文書が収集時には存在しなかった)、(3)「更新」(収集前に存在した文書の内容が更新されたことが収集時に分かった)、の3種類がある。また、文字通りの意味では「変化」とは言えないが、収集前後の文書の状態同士の関係を示す広義の「変化」として、(4)「存在」(収集前に存在した文書が内容更新されないまま収集時にも存在している)、及び(5)「非存在」(収集前になかった文書が収集時にも存在しなかった)がある。なお、収集前に存在せず、且つ収集時にも存在しない文書(「非存在」)は、木構造上には現れないので、テーブル204に登録しなくてもよい。また、木構造の変化のみを知りたい場合は、「更新」は「存在」と同様に扱えばよい。
収集部162は、前回文書テーブル202と今回の取得処理結果とをつき合わせることで、取得を試みた各文書の状態変化を求め、収集後文書テーブル210に登録する。図19Bの例では、例えば文書5は「更新」、文書6は「削除」、文書7は「新規」となっている。
収集部162は、以上の処理を、巡回リスト202に登録された全てのURL、及びこの処理で新たに検出した全てのURLの取得結果が判明するまで繰り返すことで、収集後文書テーブル210を完成させる。
またS10では、収集部162は、今回の更新タイミングの前後でのリンクの状態変化を検出する。更新タイミング到来前のリンク群の状態は前回リンクテーブル206に示されている。
図20Aは前回リンクテーブル206のデータ内容の一例を示す図である。この図に示すように、リンクテーブル206で1つのリンクを示すエントリは、リンク元ID、リンク先ID、状態、及び最短パスフラグ、の4つの項目から構成される。リンク元IDは、当該リンクのリンク元文書(すなわちそのリンクの記述を含んでいる文書)の文書IDである。リンク先IDは、当該リンクのリンク先文書(すなわちそのリンクが指す文書)の文書IDである。
状態は、当該リンクが存在しているか否かを示す情報である。前回更新タイミングで取得した文書群のいずれかにリンク記述があれば、そのリンク記述が示すリンクの状態は「存在」となる。図20Aの例では、存在しないリンクをテーブルに登録しない方式をとっているため、全てのリンクの状態が「存在」となっている。
そして、最短パスフラグは、当該リンクが木構造作成時に当該リンク先の文書に到達する最短パスであるか否かを示すフラグである。本基礎構成では、木構造の差分データを作成するために、更新タイミングにおけるハイパーテキスト構造を、木構造作成の際のリンク探索の規則に従って探索していく。一般に、木構造作成の際の探索規則の一つとして幅優先探索規則が知られている。ここで、本基礎構成における幅優先探索による木構造の作成処理を説明する。この処理では、木構造の作成のために、収集後文書テーブル210に示される各文書の情報と、収集後リンクテーブル212に示されるそれら文書間のリンクの情報とを調査する。
ハイパーテキスト構造の幅優先探索を行うために、リンクを格納するキューを一つと、各文書に対応する探索フラグを用意する。木構造作成の開始時に、すべての文書の探索フラグをリセットし、所定の先頭文書(例えば企業Webページのトップページ)から探索を開始する。すなわち、まずその先頭文書の探索フラグを立て、先頭文書に示される1以上のリンクを所定の順序(例えばその文書の記述中での各リンクの出現順序)でキューに追加したものを初期状態とする。そして、「キューから一つリンクを取得し、そのリンク先の文書へ探索を行い、この探索により到達した文書(「探索文書」と呼ぶ)の探索フラグを立て、探索文書に示されるリンクをキューに追加する」ことを、キューが空になるまで繰り返す。探索の過程で、既に一度探索した文書に再度到達することもあるが、このときは探索フラグは既に立てられており、その探索フラグの状態はこのまま変化させない。ここで、この探索においてリンクを取得してくる収集後文書テーブル210や収集後リンクテーブル212には、現時点ではWWW上には存在しない文書やリンクも入っているので、このような不在の文書やリンクは木構造に組み込まないようにする必要がある。このため、収集後文書テーブル210に示されるその探索文書の状態変化が「削除」もしくは「非存在」である場合にはその探索文書に示されるリンクをキューに追加しないようにする。また、キューから取り出したリンクの状態変化(これは収集後リンクテーブル212に示される。詳細は後述)が「削除」もしくは「非存在」である場合にはリンク先の文書の探索フラグは立てず、探索文書に示されるリンクをキューに追加することも行わないこととする。この探索の過程で辿った文書及びリンクの系列は木構造を示す。但し木構造では、1つのノード(「注目ノード」と呼ぶ)が複数の親ノードの子となることはできないので、木構造の生成では、ある注目ノード(文書)は、その注目ノードに最初に到達した時(つまり注目ノードの探索フラグが立っていない時)に辿ったリンクのリンク元文書のノードの子とする。そして、次以降、別のノードから注目ノードに到達した場合(つまり注目ノードの探索フラグが立っている場合)は、その「別のノード」には、その注目ノードを指す参照ノード(ショートカット・ノード)を子として付加する。これに対し、最初に注目ノードに到達した時のリンクに対応する子ノードは、実ノードとして取り扱う。リンク先の文書を参照ノードとした場合、そのリンク先文書に記述されたリンクの探索は中止する(つまり文書に示されているリンクをキューに追加しない)。これは、リンク先文書に記述されたリンクから先は、そのリンク先文書に対応する実ノードのルートで探索できるため、重複探索を避けているからである。なお、木構造データを表示する場合、実ノードと参照ノードを異なる表示形態で表示することができる。
最短パスフラグは、このようなハイパーテキスト構造の探索において、「リンク先ID」が示す文書に最も早く到達したか、否かを示す。以上の説明から分かるように、最短パスフラグが「○」、すなわち「最短パスである」ことを示す場合は、木構造データにおいて、リンク先IDのノードはリンク元IDのノードの子であり、かつ実ノードとなる。これに対し、最短パスフラグが「×」、すなわち「最短パスでない」ことを示す場合は、木構造データにおいて、リンク先IDのノードはリンク元IDのノードの子ではあるが、参照ノードであることを意味する。
図16Aのネットワーク構造では、文書4へは文書2と文書5の両方の経路から到達できるが、文書1を起点に探索すると文書2を通る経路の方が先に到達することができるので、図20Aのテーブルでは、文書2から4へのリンクが最短パスであり、文書5から4へのリンクが最短パスでない、となっている。
なお、図16Aのネットワーク構造では、文書7は存在しない。存在しない文書については、その文書に到達するリンクそれぞれについて最短パスかどうかを決定することができないので、最短パスフラグは「不明」としている。
以上、更新タイミング到来前のリンク群の状態を示す前回リンクテーブル206について説明した。収集部162は、このテーブル206と、今回収集した各文書に記述されたリンク記述とをつき合わせることで、収集の前後での各リンクの状態変化を求め、この状態変化を示した収集後リンクテーブル212を作成する。
リンクの状態変化には、(1)「新規」、(2)「削除」、(3)「存在」、(4)「非存在」の4種がある。それら4種の状態変化が示す意味は、上述した文書の状態変化の場合と同じである。
図16Aから図16Bへのハイパーテキスト構造の変化に対応する、収集後リンクテーブル212の例を図20Bに示す。収集後リンクテーブル212は、前回リンクテーブル206に登録された各リンク、及び今回の収集により新たに検出された各リンクについて、それぞれエントリを有する。1つのエントリは、リンクを特定するリンク元ID及びリンク先IDのペア、当該リンクの状態変化、及び最短パスフラグを含んでいる。リンクの状態変化は、前回リンクテーブル206と、今回の収集により判明した各リンクの有無との比較により、求めることができる。例えば、文書2から4へのリンクは、前回リンクテーブル206では「存在」するのに、図16Bのハイパーテキスト構造の探索時には検出出来ないので、状態変化が「削除」となる。また、文書4から1へのリンクは、前回リンクテーブル206では存在しないのに、図16Bのハイパーテキスト構造の探索時には検出されるので、状態変化が「新規」となる。また、最短パスフラグは、今回「新規」に検出されたリンクについては「不明」とし、その他の状態変化(「存在」及び「削除」)に該当するリンクについては、前回リンクテーブル206の最短パスフラグの値を引き継ぐ。
以上、収集部162による収集処理(S10)について説明した。この収集処理が完了し、収集後文書テーブル210及び収集後リンクテーブル212が完成すると、次に差分データ作成部164による処理が実行される(再び図17参照)。
すなわち、差分データ作成部164は、収集後文書テーブル210及び収集後リンクテーブル212と差分情報判定テーブル208とを用いて、木構造の差分データを作成する(S12)。この作成処理では、差分データ作成部164が、ハイパーテキスト構造上のリンクを、所定の先頭文書から順に、木構造作成のための幅優先探索の順序に従って辿ることにより、該ハイパーテキスト構造上の文書を巡回していく。収集後リンクテーブル212には、今回の更新タイミングにおいて存在するリンクが全て網羅されているので、このテーブル212を参照することでその探索を実行できる。差分データ作成部164は、その幅方向優先探索の際に新たにリンクを見つける(このリンクを注目リンクと呼ぶ)毎に、その注目リンクの状態変化とその注目リンクが指すリンク先文書の状態変化を収集後文書テーブル210及び収集後リンクテーブル212からそれぞれ求める。そして、その注目リンクとリンク先文書の状態変化の組合せを判定テーブル208にて検索し、この検索により差分情報が求められれば、それを木構造差分データに追加する。S12では、このリンクの探索、判定テーブル208の検索、及びその検索結果に基づく差分情報の追加を、ハイパーテキスト構造の全てのリンクを辿り終えるまで繰り返す。
図21A〜Dに、差分情報判定テーブル208の具体例を示す。これら4つのテーブルでは、注目リンクの状態変化と該注目リンクが示すリンク先文書の状態変化との組合せが示すセルには、その組合せに対応する木構造の変化の内容が登録されている。これらのテーブルにおいて斜線が示されたセルは、そのセルが示す組合せが起こりえないか、又はそのセルが示す組合せについては木構造に変化がないか、のいずれかであることを示している。
また、これら4つのテーブルは、幅優先探索を開始する前と後との間での注目リンクの最短パス状態の変化に応じて、用意したものである。ここで、探索を開始する前の各リンクの最短パス状態は、収集後リンクテーブル212に「最短パスフラグ」として示されている。また、探索後のリンクの状態は、リンク先文書の探索フラグにて決定することができる。すなわち、注目リンクを辿って到達したリンク先の文書の探索フラグが立っていなければ(これは探索の過程でその文書に初めて到達したことを示す)、その注目リンクは最短パスであり、探索フラグが立っていれば最短パスではない。したがって、ある注目リンクを辿った時点では、その注目リンクの状態変化は確定している。この状態変化に応じて、図21A〜Dの中から適切なテーブルを選択し、利用する。
図21Aは、注目リンクが幅優先探索開始前(以下、簡単のため「過去」という)に最短パスで、今回の幅優先探索が完了した時点(以下、簡単のため「現在」という)でも最短パスである場合の、差分情報判定テーブル208Aの一例を示している。
このテーブル208Aでは、文書の状態変化が「削除」でリンクの状態変化が「削除」又は「存在」である場合、木構造の差分情報は「削除」となる。この差分情報の「削除」は、木構造において、注目リンクのリンク先文書を示す実ノードを、該リンクのリンク元文書を示すノードの子から「削除」することを意味している。すなわちこの場合、注目リンクを辿って到達したリンク先文書は、前回更新タイミングにはリンク元文書の子の実ノードとして存在したものであるが、今回の更新タイミングではその文書自体が削除されていることが判明したので、その実ノードを削除するというわけである。この場合、注目リンクのリンク元を親とするリンク先の実ノードが削除された旨を示す差分情報を木構造差分データ220に追加する。図22に示す木構造差分データ220のうち、末尾の文書6に対応するエントリが、この差分情報の一例である。ここで、リンクの状態変化が「存在」である場合は、更新後もハイパーテキスト上の注目リンクだけは残る(ただしこれは木構造とは関係がない)。
また、文書の状態変化が「更新」でリンクの状態変化が「存在」の場合は、差分情報が「更新」となる。すなわち、リンクの状態変化が「存在」で文書の状態変化が「更新」ということは、探索前も後も「最短パス」であることを考慮すると、当該文書は前回の更新タイミングでも今回の更新タイミングでもリンク元文書の子の実ノードであり、且つその文書の内容が更新されたことを意味する。したがって、木構造差分データ220には、木構造において、注目リンクのリンク元文書の子であるとリンク先文書が内容更新された旨を示す差分情報を追加する。図22の木構造差分データ220のうち、先頭の文書5に対応するエントリが、この差分情報の一例である。なお、純粋に木構造の変化だけ分かればよい(すなわち文書内容の更新まではクライアント装置18に渡す木構造データ182に表現しない)場合は、この組合せに対しては木構造が変化無しとすればよい。
なお、リンクの状態変化が「新規」という状況は、リンクが過去に最短パスであったことと矛盾するので、起こりえない。また、リンクの状態変化が「非存在」である場合は、過去も現在も注目リンクがないので、木構造上にその注目リンクに対応する親子関係は過去も現在も存在しないことになり、結局過去と現在とで変化がないことになる。したがって、この場合はその注目リンクについての情報は木構造差分データ220に組み込む必要がない。また、文書の状態変化が「非存在」の場合も、その文書自体が過去も現在も存在しないので、木構造でも過去も現在もその文書が存在しない。すなわち、結局木構造に変化はない。
また、文書及び注目リンクの状態変化が共に「存在」である場合は、該注目リンクが過去も現在も最短パスであるという状況下では、過去も現在も該リンクのリンク先文書がリンク元文書の子の実ノードであることを示すので、木構造上での変化は無い。
また、文書の状態変化が「新規」という状況は、リンクが過去に最短パスであったことと矛盾するので、起こりえない。
なお、注目リンクの状態変化が「削除」で、リンク先の文書の状態変化が「存在」又は「更新」の場合は、前回の更新タイミングでは該リンク先文書は木構造上でリンク元文書の子である実ノードとして存在していたが、今回のタイミングでは注目リンクが削除されたため、その親子関係がなくなっている。したがって、1つの考え方では、この差分情報テーブル208Aでは、それら2つの組合せに対応する差分情報を「削除」とすればよい。しかし、この場合、木構造情報提供サーバ12が木構造差分データ220を先頭から順に1差分情報ずつ処理していくタイプのものであった場合、この「削除」という差分情報を木構造差分データ220において該注目リンクの巡回順序の位置に組み込んでしまうと、木構造情報提供サーバ12はその差分情報を読み取った時、その注目リンクが示すリンク先文書を示す実ノードを削除してしまうため、次のような問題がある。
すなわちこの場合、その実ノードの削除により、木構造におけるその実ノードの子孫のノード群も削除されてしまうことになる(木構造だから、このような扱いが一般的である)。しかし、その実ノード及びその子孫ノード(以下、これらを「子孫ノード」と総称する)のいずれかは、後で別の文書からリンクされていると判明することもある。このような場合、別文書からリンクされていると判明した子孫ノードについては親が変わるだけで他の属性は変わらない。またその子孫ノードの子孫については親も他の属性もいっさい変化がない。このような場合、もっとも簡潔には、その子孫ノードの新たな親を示す差分情報をサーバ12に送ればよい。その子孫ノードの子孫については、親も他の属性も変化していないので、差分情報を送る必要はない。
ところが、いったん注目リンクのリンク先文書を示す実ノードを削除してしまうと、子孫ノードが別ノードの子であることが判明した場合、その実ノードを削除することを示す差分情報と、子孫ノードを新たに別ノードの子として「新規」に追加することを示す差分情報とをサーバ12に送る必要が出てくる。またその子孫ノードの子孫についても、直接の親ノードに変化がなくても、いったん削除されてしまっているので、「新規」に追加することを示す差分情報を送る必要が出てくる。これでは、上述した簡潔な差分情報に比べ、データ量が大きくなる。親の情報以外の属性も差分情報に含める場合は、差分情報の量はさらに大きくなってしまう。
そこで、本基礎構成では、図21Aのケースでは、注目リンクの状態変化が「削除」で、そのリンク先の文書の状態変化が「更新」又は「存在」である場合は、その注目リンクを辿った時点では、リンク先文書の実ノードを「削除」する旨の差分情報を木構造差分データ220に組み込まない。この代わりにこの時点では、該リンク先文書の実ノードについて、削除される可能性がある旨を示すフラグをオンにして、残りの探索を続行する。残りの探索で、その実ノード又はその子孫を指すリンクが見つかれば、そのフラグをオフにし、そのリンクに応じた差分情報を作成する。これにより、上述の問題が回避される。また、探索を最後まで行った段階で、その実ノードが一度も巡回されなかった場合は、削除を示すフラグがオンのままなので、その実ノードを削除する旨の差分情報を作成し、木構造差分データ220に追加する。このように、リンクが削除されても文書自体が存在し続ける場合は、木構造上でその文書に対応するノードを最終的に削除するかどうかが、ハイパーテキスト構造の探索が終了して初めて決定されるので、無駄な差分情報の発生を低減し、木構造差分データ220のデータ量を小さくすることができる。
なお、以上は注目リンクの状態変化が「削除」で、そのリンク先の文書の状態変化が「更新」又は「存在」である場合の処理であったが、一般に実ノードを削除する旨の差分情報は、木構造差分データ220の末尾に組み込むようにすることで、木構造差分データ220のデータ量を小さくすることができる。
図21Bは、注目リンクが、過去には最短パスであったが、現在は最短パスでないと判明した場合の、差分情報判定テーブル208Bの一例を示している。
このテーブル208Bにおいて、リンクの状態変化が「新規」及び「非存在」の場合に該当する各縦列、及び文書の状態変化が「新規」及び「非存在」の場合に該当する各横行の内容は、上述のテーブル208Aの場合と同じ考え方である。
また、文書の状態変化が「削除」でリンクの状態変化が「削除」又は「存在」である場合、木構造の差分情報は「削除」となる点も、テーブル208Aの場合と同様の考え方である。
また注目リンクの状態変化が「削除」で、リンク先文書の状態変化が「更新」又は「存在」の場合に、ノードの状態を変化させないのも、テーブル208Aの場合と同様の考え方である。
これに対し、注目リンクの状態変化が「存在」で、リンク先文書の状態変化が「更新」又は「存在」となるセルは、テーブル208Aの場合とは内容が異なる。このような状態変化の組合せは、そのリンク先文書は過去の時点では木構造上での実ノードであり、それが現時点では参照ノードに変わったことを意味する。したがって、これらの組合せでは、差分情報を「新規」且つ「最短パスでない」とする。この差分情報は、木構造において、注目リンクのリンク元の文書のノードに、リンク先の文書を示す参照(ショートカット)ノードを子として追加することを意味する。
図21Cは、注目リンクが、過去には最短パスでなかったが、現在は最短パスであると判明した場合の、差分情報判定テーブル208Cの一例を示している。
このテーブル208Cにおいて、リンクの状態変化が「非存在」の場合に該当する縦列、及び文書の状態変化が「非存在」の場合に該当する横行の内容は、上述のテーブル208Aの場合と同じ考え方である。
リンクの状態変化が「新規」でかつ文書の状態変化が「新規」の場合は、文書もリンクも新規に出現したものである。ここで、そのリンクは最短パスなので、その組合せに対応する差分情報は、「新規」かつ「最短パスである」とする。この差分情報は、木構造において、注目リンクのリンク元の文書のノードに、リンク先の文書を示す実ノードを子として追加することを意味する。図22の例では、2行目の文書7に対応するエントリが、この場合の差分情報に該当する。
リンクの状態変化が「新規」でかつ文書の状態変化が「更新」及び「存在」の場合は、過去にその文書は存在していたがそのリンクは最短パスでなかった、すなわちその文書は実ノードではなかったところが、現在は最短パスになったのでその文書は実ノードになったことを意味する。このような組合せに対応するセルには「更新」かつ「最短パスである」の旨を示す情報が登録されている。図22に示す木構造差分データ220のうち、6行目の文書8に対応するエントリが、この情報から作成される差分情報の一例である。この差分情報は、文書8は実ノードであること、および文書7の子となるように「更新」されたことを示しているので、サーバ12は、木構造において文書8の実ノードを文書7を示す実ノードの子とする。
注目リンクの状態変化が「新規」でリンク先文書の状態変化が「削除」となる組合せでは、木構造に変化はないので差分情報を作成しなくてよい。
注目リンクの状態変化が「削除」であり、かつリンク先文書の状態変化が「更新」、「削除」、「存在」のいずれかである場合に対応するセルの内容は「削除」となる。この場合、過去に存在したリンク先文書を示すノードを削除する旨の差分情報が作成される。
注目リンクの状態変化が「存在」であり、かつリンク先文書の状態変化が「新規」である組合せに対応するセルの内容は「新規」かつ「最短パスである」となる。この場合、リンク先文書を示す実ノードを、リンク元文書の子として追加する旨の差分情報が作成される。
注目リンクの状態変化が「存在」であり、かつリンク先文書の状態変化が「更新」又は「存在」のいずれかである場合に対応するセルの内容は「本体更新」かつ「ショートカット削除」かつ「最短パスである」である。「本体更新」とは、過去には注目リンクのリンク先ノードの親が、リンク元ノード以外のノードであったものを、リンク元ノードへと更新することを意味する。また「ショートカット削除」とは、その更新に伴い、そのリンク元ノードの子として存在したリンク先ノードの参照ノード(ショートカット)を削除することを意味する。したがって、この場合、図22の例では、4及び5行目に示す、文書4及び文書4のショートカットに対応する2つのエントリが、差分情報として作成されることになる。
注目リンクの状態変化が「存在」であり、かつリンク先文書の状態変化が「削除」である組合せに対応するセルの内容は「削除」となる。この場合、リンク先文書を示す参照ノードを、リンク元文書の子から削除する旨の差分情報が作成される。
図21Dは、注目リンクが、過去には最短パスでなく、現在も最短パスでないと判明した場合の、差分情報判定テーブル208Dの一例を示している。
このテーブル208Dにおいて、リンクの状態変化が「非存在」の場合に該当する縦列、及び文書の状態変化が「非存在」の場合に該当する横行の内容は、上述のテーブル208Aの場合と同じ考え方である。
注目リンクの状態変化が「新規」でかつリンク先文書の状態変化が「新規」、「更新」、又は「存在」のいずれかである場合、過去では注目リンクが存在しなかったので、木構造中にはそのリンク先文書に対応するノードもなかった。これに対し、現在ではその注目リンクが新規に生成され、かつ現在はリンク先文書の存在しているので、木構造に新たなノードを加えることになる。ただし、その注目リンクは最短パスではないので、新規追加するノードは参照ノードである。このようなことから、それらの組合せに対応するセルの内容は、「新規」かつ「最短パスでない」となる。図22の例では、3行目の文書1のショートカットに対応するエントリが、このような差分情報の一例となる。
注目リンクの状態変化が「新規」でリンク先文書の状態変化が「削除」となる組合せでは、木構造に変化はないので差分情報を作成しなくてよい。
注目リンクの状態変化が「削除」であり、かつリンク先文書の状態変化が「更新」、「削除」、「存在」のいずれかである場合に対応するセルの内容は「削除」となる。この場合、注目リンク自身が削除されるのでそのリンクのリンク先に該当する木構造のノードは消滅する。したがって、過去に存在したリンク先文書を示すノードを削除する旨の差分情報が作成される。
注目リンクの状態変化が「存在」であり、かつリンク先文書の状態変化が「新規」である組合せに対応するセルの内容は「新規」となる。この場合、リンク先文書を示す参照ノードを、リンク元文書の子として追加する旨の差分情報が作成される。
注目リンクの状態変化が「存在」であり、かつリンク先文書の状態変化が「更新」又は「存在」のいずれかである場合は、該リンク先文書は過去には参照ノード(過去最短パスでないから)であり、現在も参照ノードのまま(現在も最短パスでないから)であるので、木構造には変化が起こらない。このため、差分情報を作成する必要がない。
注目リンクの状態変化が「存在」であり、かつリンク先文書の状態変化が「削除」である組合せに対応するセルの内容は「削除」となる。この場合、リンク先文書を示す実ノードを、リンク元文書の子として追加する旨の差分情報が作成される。
以上に説明した差分情報判定テーブル208A〜Dと図20Bの収集後リンクテーブル212とを用い、ハイパーテキスト構造の幅優先探索によって作成された木構造差分データ220の一例が図22に示される。
この差分データ220の各行は、それぞれ1つの差分情報に該当する。1つの差分情報は、「文書ID」、「操作」、「親文書ID」及び「他の属性」から構成される。「文書ID」と「親文書ID」の組は、木構造において前者が後者の子であることを示す。「操作」は、木構造の更新のための操作内容を示している。
「操作」の内容が「新規」である場合、「親文書ID」の子として「文書ID」のノードを木構造に新規に追加する。
「操作」の内容が「更新」である場合は、木構造において「文書ID」が示す実ノードの親を「親文書ID」のノードへと変更する。これは、同時に、その「文書ID」の実ノードと、前回更新タイミングでの親との親子関係を削除することを含意している。例えば、図22の4行目には、文書4の実ノードを文書5の子へと変える「更新」処理が示されているが、これには、前回更新タイミング(図16A)に存在した文書2と文書4の親子関係の削除を伴っている。サーバ12は、差分情報の「操作」内容が「更新」である場合、その差分情報に示される文書の実ノードの親が、前回更新タイミングでのその文書の実ノードの親と異なっていれば、上記のような親子関係の変更を行う。
なお、差分情報の「操作」内容が「更新」である場合には、文書の内容が変更された場合も含まれる。サーバ12は、差分情報の「操作」内容が「更新」である場合、差分情報が示す文書の実ノードに親子関係が変更されたか否かを判定し、変更されていなければ、その文書の内容が更新されたものと判断する。
「操作」の内容が「削除」である場合は、「親文書ID」の子である「文書ID」のノードを木構造から削除する。
なお、この差分データの各行のエントリと、図16A及びBに示した構造変化との関係は既に説明したのでここでは省略する。
このように、図22のような木構造差分データ220を作成し、サーバ12に送信すれば、サーバ12は木構造を更新することが可能となる。
再び図17に戻り、木構造情報収集装置16は、このように作成された木構造差分データ220を木構造情報提供サーバ12に送信する(S14)。
木構造情報提供サーバ12は、その木構造差分データ220を受信し(S20)、そのデータ220に従って、記憶装置122に記憶された、差分データ送信元の木構造情報収集装置16に対応する木構造データを更新する(S22)。
なお、木構造情報収集装置16は、木構造差分データ220をサーバ12に送信すると、収集後文書テーブル210及び収集後リンクテーブル212から、次の更新タイミングにおける「前回」文書テーブル204及び「前回」リンクテーブル206を作成する。すなわち、収集後文書テーブル210及び収集後リンクテーブル212は、文書及びリンクの過渡的な「状態変化」を示したものなので、その「状態変化」を「状態」へと書き換える。図23は、その書換の規則を示したものである。図23の規則では、状態変化が「新規」、「更新」及び「存在」である場合、それを「存在」という状態に変換する。また、状態変化が「削除」又は「非存在」であった場合は、それを「非存在」という状態に変換する。
また、この変換ではハイパーテキスト構造を幅優先探索で探索した時に求めた最短パスか否かの情報を、リンクテーブルに反映させる。
以上のような書換により得られた文書テーブル204’及びリンクテーブル206’は、図24及び図25に示すようなものとなる。これらは、図19B及び図20Bのテーブルをそれぞれ書き換えることで作成される。
以上、本基礎構成の基礎構成を説明した。以上の説明から分かるように、本基礎構成によれば、木構造情報収集装置16による木構造差分データ220の作成処理の際、木構造の探索に該当する処理としては、ハイパーテキスト構造の幅優先探索を1度行うだけでよいので、木構造を2回探索していた従来技術よりも処理負荷が軽減される。また、前回の木構造データという膨大なデータを保存しておかなくてよいので、装置16の記憶容量も節約できる。
以上に説明した木構造情報提供サーバ12及び木構造情報収集装置16は、一般的なコンピュータシステムのハードウエアを用いて、本明細書中で説明した各機能モジュールの処理内容を記述したプログラムを実行することで、実現することができる。
以上に説明した基礎構成は、あくまで例示のためのものであり、本基礎構成の範囲内で様々な変形が可能である。例えば、以上の例では、木構造情報提供サーバ12は、ある顧客企業に対してはその企業の社内ネットワーク内の文書の木構造情報を提供したが、社内文書の木構造をインターネット10上に公開されている文書群の木構造にマージし、そのマージ結果を提供することもできる。また、以上の例では、木構造差分データ220を作成するのに、ハイパーテキスト構造を幅優先探索の規則に従って巡回したが、この代わりに、深さ優先探索規則など他の探索規則を利用した方式でもよい。
また、以上の説明は、木構造差分データを取得したクライアント装置側での木構造の表示には特に詳しくは触れなかったが、実際にはクライアント装置側での木構造の表示では、木構造を構成する個々の文書の識別のために、木構造表示(ツリー表示)上の各文書のアイコンに対し文書名を表示する。この文書名の表示において注意すべき点がある。
すなわち、ウェブ文書の文書名としてまず考えられるのが該文書のファイル名或いはURLであるが、これでは見る人が文書を識別しづらいという問題がある。これに対する解決としては、ウェブ文書のHTML記述に含まれるタイトル(<TITLE>タグで示される)を文書名として表示するという方法がある。タイトルは、一般に見る人に分かりやすいフレーズであることが多いため、これはこれで一つのよい解決策である。しかしながら、この方法には欠点がある。これを、図26を参照して説明する。
図26は、クライアント装置の表示装置に表示されるブラウザ画面400の一例を示す図である。このブラウザ画面400には、ウェブ文書を表示する文書表示画面410と、ナビゲーションのために文書群の木構造を表示するツリー表示画面420を含んでいる。ツリー表示画面420には、木構造情報提供サーバ12が提供する木構造のデータとその差分データに基づき構成された文書の木構造が、ファイルシステムにおけるフォルダやファイルがなす木構造と同様の表示方式で示されている。ファイルシステムのツリーの方はフォルダとファイルとの包含関係を示すのに対し、文書の木構造の場合は文書間のリンク元とリンク先の関係を示すところが違うだけである。このツリー表示画面420では、個々の文書はHTML記述中のタイトル文字列を示したアイコン422で示される。
ここで問題になるのは、ツリー表示中の文書としてタイトル文字列を表示したアイコン422を表示すると、ウェブ文書表示中でのリンク記述412と文言上の食い違いが生じるという点である。ウェブ文書中では、リンク先の文書は、アンカーテキスト(アンカータグ<A href=URL>と</A>との間に挟まれた文字列。表示上では一般に下線などで他と区別される)として示されるが、このアンカーテキストはリンク元の文書の作成者が自由に記述するものであり、そのリンク先文書中に記述されたタイトルとは独立にしているので、両者は一般に一致しない。ツリー表示上の文書名と、実際のウェブ文書に現れるリンク記述が異なると、ユーザはツリー表示上の文書が実際のどのウェブ文書を指しているのかが把握しづらい。
これはツリー表示の文書名としてタイトルを表示した場合のことであるが、ファイル名を文書名とした場合も同様か、それ以上にユーザにとって分かりづらくなると考えられる。
これに対し、図27に示すように、ツリー表示画面420A中の各文書のアイコン422Aに示される文書名が、ウェブ文書中のリンク記述412と一致していると、ユーザにとってツリー表示画面420に示される個々の文書がどの文書であるかを把握しやすいという利点がある。
ここで、本基礎構成のように個々の木構造情報収集装置16から中央の木構造情報提供サーバ12に対し木構造の差分データを送信するシステムの場合、図27のような表示を実現するためには、収集装置15がウェブ文書中でのリンク記述のアンカーテキストの変化を検出し、その変化をサーバ12に伝える仕組みが必要となる。このような仕組みについての変形例を以下に説明する。
なお、この変形例は、システム及び装置の構成は図14及び15に示した上記基礎構成のものと同様でよく、収集部162や差分データ作成部164,木構造更新部128の処理内容が異なるだけである。
この変形例では、ウェブの巡回によるリンク収集の際に収集部162が、リンクのURLだけでなく、それに伴うアンカーテキストも同時に収集し、これをリンクの属性の1つとしてリンクテーブルに記録する。ウェブのサーフィングにおけるユーザにとっては、アンカーテキストは、当該リンクのリンク先の文書を識別するための識別名として機能しているので、この例ではアンカーテキストを当該リンク先文書の「参照名」として取り扱う。すなわち、リンクテーブルには、リンクのアンカーテキストを当該リンクの属性の一つである参照名の値として登録する。そして、差分データ作成部164が、前回リンクテーブル206中の各リンクの参照名(アンカーテキスト)と、収集によって得られた収集後リンクテーブル212中の各リンクの参照名とを比較し、同一のリンクに対する参照名が更新の前後で変化している場合に、この変化を示す情報を木構造差分データ220に組み込んで木構造情報提供サーバ12に送る。
木構造情報提供サーバ12は、ユーザに分かりやすいツリー表示を提供するために、各文書の文書名としてその文書へと至るリンクの参照名を示した木構造データ124をクライアント装置18に提供する。ここでは、ハイパーテキスト構造を木構造に展開したため、同一の文書に対し複数の文書からリンクが張られている場合、木構造上にはそれら各リンクに応じた複数のノード(上記基礎構成ではそのうち初出のものが実ノード、残りが参照用ノード)ができるが、この変形例では、それら各ノードに対し、それぞれそのノードへのリンクが示すアンカーテキストが参照名として登録されることになる。このような木構造データ124を保守するために、木構造更新部128は、木構造収集装置16から受け取った木構造差分データ220に基づき木構造データ124を更新する際、差分データ220中に示される参照名の変更の情報に応じ、木構造データ124中の文書の参照名を変更する。
以上の処理を、例を用いて説明する。ある更新タイミングで図28Aに示すような状態であったハイパーテキスト構造が、次の更新タイミングで図28Bに示すようになった場合を例にとる。本変形例ではリンクテーブル210に各リンクのアンカーテキストを参照名として登録するので、図28Aの状態に対応する前回リンクテーブル206a(図29A参照)、及び図28Bの状態に対応する収集後リンクテーブル212a(図29B参照)には「参照名」のデータ項目が設けられている。図28A及び図28Bの例は、図16A及び図16Bの例に対し文書ID「9」の文書を加えたものであり、前回と今回との差分では、文書ID「5」の文書から文書ID「9」のリンクの参照名が更新されている点以外は図16A及び図16Bの例と同じである。同様に図29A及び図29Bに示した各リンクテーブルは、図20A及び図20Bの各リンクテーブルに対し、文書ID「9」の文書へのリンクについてのレコードを追加したものである。なお、図28A及び図28B、図29A及び図29Bでは、それぞれ図16A及び図16B、図20A及び図20Bとそれぞれ同内容の部分には薄墨を付すことで差を明示している。
この例では、図29A及び図29Bから分かるように、文書ID「5」の文書から「9」の文書へのリンクに対する参照名が、前回の更新タイミングで収集した際は「提案書書式」であったのに対し、今回の収集タイミングで収集した際は「アイデアシート」に変わっている。差分データ作成部164は、前回リンクテーブル206aと収集後リンクテーブル212aの比較から、そのように参照名が変化している文書「5」から「9」へのリンクを探し出す。そして差分データ作成部164は、この参照名の変化の情報を、図30に示すように、当該リンクのリンク先文書である文書「9」についての差分情報(図30のテーブルの最下行)として木構造差分データ220aに組み込む。この木構造差分データ220aには、図22に示した木構造差分データ220の各データ項目に加え、「参照名」のデータ項目が設けられており、自分に対するリンクの参照名に変化のあった文書の差分情報レコードには、「操作」の値として「更新」が、「参照名」の値として変更後の参照名「アイデアシート」が組み込まれる。
なお、図30の例では、煩雑さを避けるために省略したが、木構造差分データ220aのある文書の差分情報の「操作」の値が「新規」である場合には、その文書(または参照用のショートカット・ノード)が新たに木構造に加わったことを意味するので、今回の収集により得たその文書の参照名(アンカーテキスト)をその差分情報レコードに組み込む。また、ある文書の「操作」の値がアンカーテキストの変更以外の理由で「更新」となる場合には、親文書の変更による場合があり、親文書が変われば一般に当該文書を指すアンカーテキストの内容も変わる。したがって、「操作」の値が「更新」となるケース一般で、差分情報レコードに対して今回の収集時に得た当該文書の参照名を組み込むようにする。また、図22の例では、「操作」が「更新」となるのは実ノードに該当する文書の差分情報レコードであったが、この変形例ではアンカーテキストの変更でも「操作」を「更新」とするため、参照用のショートカット・ノードに対応する差分情報レコードについても「操作」が「更新」となる場合が出てくる。
このような木構造差分データ220aを木構造情報収集装置16から受信した木構造情報提供サーバ12は、該差分データ220aに含まれる各文書の差分情報レコードの参照名の値(もしあれば)を、現在の木構造データ124中の当該文書のノードの参照名と比較し、両者が相違していれば、木構造データ124中の参照名を差分情報レコード中の参照に変更する。なお、木構造差分データ220a中の「新規」の文書については、その文書を示すノードを「親文書ID」が示すノードの子ノードとして木構造データ124中に作成し、当該文書のノードに対し、木構造差分データ220a中に示された参照名を設定する。
このように、本変形例では、木構造情報収集装置16が文書中のリンクに設定されたアンカーテキストの変化をハイパーテキストのリンク構造の変化と同様に検知し、この変化の情報を木構造差分データ220aに組み込んで木構造情報提供サーバ12に送信するようにしたので、木構造情報提供サーバ12は、クライアント装置18に対し、ウェブ・サーフィングの際のリンクの表示(アンカーテキスト)との整合性の高い文書名を示したツリー表示を提供することができる(図27参照)。
なお、この変形例では、木構造の各ノード(文書)に対しアンカーテキストを参照名として表示するので、ウェブ・サーフィングとの整合性が分かりやすい反面、実ノードと参照用のショートカット・ノードとの間で、それらノードが指している文書が同一の実体であるのか否かが分かりにくくなるというデメリットがある。これに対しては、木構造中の文書のノードに対し、アンカーテキストに加え、当該文書のファイル名(或いはURL)及び当該文書のHTML記述中のタイトルのうちの少なくとも一方を、参照名として設定し、ツリー表示中では1つの文書に対するそれら複数種類の名称を並べて表示する方法が好適である。このように並べて表示するモードと、アンカーテキストのみを表示するモードの両方をクライアント装置18のブラウザに設け、モード選択できるようにすることも好適である。なお、この場合、木構造情報収集装置16は、アンカーテキストの場合と同様の方法で、文書中のリンクのリンク先文書のタイトルを収集し、タイトルに変化がある場合には変化後のタイトルを属性として含んだ当該リンクの差分情報レコードを木構造差分データ220aに組み込むようにすればよい。なお、リンク先の文書のファイル名(或いはURL)の方は、巡回リスト202を参照して付加すればよい。すなわち、更新タイミングごとに、前回の更新タイミングからの巡回リスト202の差分(初回タイミングのみ巡回リスト202全体)又は、巡回リスト202を木構造情報収集装置16から木構造情報提供サーバ12へ提供すれば、木構造データ124の各文書のノードに対し、ファイル名やURLの情報を付加することができる。
なお、この変形例は、以上に示した処理手順の他に次のような処理手順でも実現可能である。
この処理手順では、リンクの状態として新たに「更新」という状態を導入し、リンク状態が「更新」の場合についての規定を含んだ差分情報判定テーブルを用いて、木構造差分データを作成する。
このため木構造情報収集装置16の収集部162は、収集した文書中のリンク記述のアンカーテキストと、これに対応する前回リンクテーブル206aに示されたリンクの参照名との比較に基づき、リンクの参照名が更新されたことを検知すると、図31に示すように収集後リンクテーブル212aの該当するリンクの状態変化欄に「更新」と設定する。
このようにして収集部162により収集後リンクテーブル212a等の作成が終わると、次に差分データ作成部164が、図32A〜図32Dに示すような差分情報判定テーブル208E〜208Hを用いて、差分データを作成する。差分情報判定テーブル208E〜208Hは、図21A〜Dに示した差分情報判定テーブル208A〜208Dにそれぞれ順に対応するものである。図21A〜Dの場合と異なるのは、リンク状態変化が「更新」に該当する列だけなので、以下ではその列のケースに該当する場合についてのみ説明する。
木構造差分データの作成の際のリンク探索において、注目リンクが過去に最短パスであり現在も最短パスの場合は、図32Aの差分情報判定テーブル208Eが参照される。このとき、注目リンクの状態変化が「更新」の場合を考える。この場合、リンク先の文書の状態変化が「新規」や「非存在」となることはあり得ない。一方、リンク先の文書の状態変化が「更新」の場合は、注目リンクの状態変化が「存在」の場合と同様、当該文書の内容が更新されたことを意味すると共に、当該文書の参照名も更新されたことを意味する。そこで、この注目リンクについては、木構造差分データに対し、「操作」の値が「更新」で、参照名が更新後の値となった差分情報を組み込む(図30参照)。更新後の参照名は、収集後リンクテーブル212aから検索すればよい。また、リンク先の文書の状態変化が「削除」の場合は、文書自体が削除されるので木構造の差分情報は「削除」となる。また、リンク先文書の状態変化が「存在」の場合は、当該文書自体に変化はないが参照名は変更されたと言うことであり、この場合、「操作」が「更新」となり、収集後リンクテーブル212aから検索した当該リンクの参照名を含んだ差分情報を作成する。
次に、注目リンクが過去に最短パスであったが、現在は最短パスでない場合は、図32Bの差分情報判定テーブル208Fが参照される。このとき、注目リンクの状態変化が「更新」の場合を考える。この場合、リンク先の文書の状態変化が「新規」や「非存在」となることはあり得ない。一方、リンク先の文書の状態変化が「削除」の場合は、文書自体が削除されるので木構造の差分情報は「削除」となる。また、リンク先の文書の状態変化が「更新」又は「存在」の場合は、注目リンクの状態変化が「存在」の場合と同様、当該文書は参照(ショートカット)ノードとなり、そのリンクは最短パスではなくなる。したがって、操作が「新規」であり、かつ「最短パスでない」という情報を含み、かつ収集後リンクテーブル212aから求めた参照名を含んだ差分情報を作成する。
次に、注目リンクが過去に最短パスでなかったが、現在は最短パスである場合は、図32Cの差分情報判定テーブル208Gが参照される。このとき、注目リンクの状態変化が「更新」の場合を考えると、リンク先の文書の状態変化が「非存在」となることはあり得ない。一方、リンク先の文書の状態変化が「削除」の場合は、文書自体が削除されるので木構造の差分情報は「削除」となる。また、リンク先の文書の状態変化が「新規」の場合は、その文書が新たに実ノードとなり、かつ参照名が更新されたということなので、差分情報としては操作が「新規」でかつ「最短パスである」という情報と、更新後の参照名を含んだレコードを作成し木構造差分データに組み込む。また、リンク先の文書の状態変化が「更新」又は「存在」の場合は、参照(ショートカット)ノードであったものが実ノードになったということなので、操作が「更新」であり、かつ「最短パスである」という情報を含み、かつ収集後リンクテーブル212aから求めた参照名を含んだ差分情報を作成する。
最後に、注目リンクが過去に最短パスでなく、現在も最短パスでない場合は、図32Dの差分情報判定テーブル208Gが参照される。このとき、注目リンクの状態変化が「更新」の場合を考えると、リンク先の文書の状態変化が「非存在」となることはあり得ない。一方、リンク先の文書の状態変化が「削除」の場合は、文書自体が削除されるので木構造の差分情報は「削除」となる。また、リンク先の文書の状態変化が「新規」の場合は、テーブル208Gにおけるその組合せに対応するセルの内容は「新規」となる。この場合、リンク先文書を示す参照ノードを、リンク元文書の子として追加する旨と、その参照名とを含んだ差分情報が作成される。また、リンク先の文書の状態変化が「更新」又は「存在」の場合は、リンク先の文書は参照(ショートカット)ノードのままであり、参照名が変化したと言うことなので、操作が「更新」であり、かつ収集後リンクテーブル212aから求めた参照名を含んだ差分情報が作成され、木構造差分データに組み込まれる。
以上説明した処理により、参照名の変更の情報を含んだ木構造差分データを作成することができる。
<冗長リンク簡略化のための構成>
以上のような木構造差分データ生成の仕組みに対する、冗長リンク簡略化の適用について以下に説明する。
冗長リンク簡略化のために、この実施形態では、リンクテーブル(図20A,図20B参照)に「冗長フラグ」の項目を設けた(図33,図34)。冗長フラグは、リンクが冗長であるか否かを示すフラグである。リンクが冗長であるかどうかは、上述の実施形態1で例示した各種手法により判定する。
すなわち、差分データ作成部164は、上述のように、収集後リンクテーブル212の示すハイパーテキスト構造をトラバースしていきながら、木構造差分データを作成するが、このとき用いられるトラバースの方法は、実施形態1に示した木構造作成のためのトラバースの方法と同じである。したがって、この差分データ作成処理でのハイパーテキストのトラバースの際に、実施形態1の手法で木構造情報を作成していくことができ、この木構造情報を用いることで、「同一文書へのリンクが親にある」場合に冗長なリンクと判定するという方式が利用できる。
いま具体例として、図4に示したハイパーテキスト構造が図35に示した構造へと変化した際の木構造差分データの作成を例にとって、説明を行う。なお、図4のハイパーテキスト構造のうちの文書1500−2から1500−1に延びるリンクがなくなったのが、図35のハイパーテキスト構造である。
図33は、図4のハイパーテキスト構造に対応したリンクテーブルである。これを、前回リンクテーブル206として用いる。ハイパーテキスト構造が図4から図35のように変化した後で、収集部162(実施形態1のリンク収集部1010に対応)がリンク情報を収集すれば、図34に示した収集後リンクテーブル212のうち、「リンク元文書ID」、「リンク先文書ID」、及び「状態変化」の各項目の情報が収集できる。差分データ作成部164は、この段階で収集後リンクテーブル212が保持する情報に基づき、根の文書を起点に、幅優先探索規則などに従ってハイパーテキスト構造をトラバースしていく。このトラバースの過程で、差分データ作成部164は、リンクを1つ取り出すごとに、そのリンクが最短パスかどうかを上述の基礎構成と同様に判定するとともに、そのリンクが冗長リンクであるかどうかを実施形態1と同様に判定する。
そして、その冗長リンクかどうかの判定結果を、前回リンクテーブル206における同じリンクの「冗長リンク」フラグの値と比較し、そのフラグの値の変化に応じて、そのリンクの「状態変化」の読替を行う。読替は、図36に示した読替規則テーブルの情報に基づいて行う。
図36の読替規則テーブルには、リンクの状態変化と冗長フラグの状態変化の組合せごとに、リンクの状態変化をどのような値に読み替えるかが示されている。冗長リンクの状態変化には、「非→非」(前回「非冗長」で今回も「非冗長」)、「非→冗長」(前回「非冗長」から今回「冗長」に変化)、「冗長→非」(前回「冗長」から今回「非冗長に変化」)、「冗長→冗長」(前回「冗長」で今回も「冗長」)の4種類が想定される。以下、テーブルの内容について説明する。
まず冗長フラグの状態変化が「非→非」の場合、これは、注目しているリンクが前回も今回の時点でも冗長ではないということなので、リンクの状態変化の読替をしない(すなわち収集後リンクテーブル212に登録された状態変化の値をそのまま用いる)。
次に「非→冗長」の状態変化は、前回冗長でなかったリンクが今回冗長リンクになったことを示す。このような場合、そのリンクが前回木構造に反映されていたなら、今回はそのリンクが木構造に反映されないようにしなければならない。そこで、この場合には、リンクの状態変化が「存在」や「更新」(この「更新」は、前回も今回もリンクは変わらず存在するがその参照名が前回から変化したことを示す状態である)であれば、それを「削除」に読み替えるようにしている。また、リンクの状態変化が「新規」の場合、前回「非存在」であったリンクが今回新たに出現したわけであるが、このリンクは今回「冗長」と判断されたので、木構造に反映されないようこれを「非存在」のままにしておく必要がある。そこで、「新規」であるリンク状態変化を「非存在」と読み替える。また、リンクの状態変化が「削除」の場合は、冗長フラグの状態変化によらずそのリンクは削除され木構造には反映されなくなるので、状態変化は「削除」のままでよい。そして、リンクの状態変化が「非存在」の場合は、前回も今回もそのリンクは存在しないので、他の条件がどうであっても、そのリンクの状態変化(すなわち非存在のまま)が木構造に変化を与えることはない。したがって、リンクの状態変化の読替を行う必要もない。なお、このようなリンクの状態変化が「非存在」の場合の考え方は、冗長フラグの状態変化が「非→冗長」以外の場合でも同じである。
次に「冗長→非」という状態変化は、前回冗長であったリンクが今回非冗長になったことを示す。例えば、図4のハイパーテキスト構造では、商品Aのページ1500−3はトップページ1500−1へのリンク1510−1を持つが、親である商品ページ1500−2も同じくトップページ1500−1へのリンク1510−2を持つので、そのリンク1510−1は冗長と判定される。ところが、図35の構造では、商品ページ1500−2も同じくトップページ1500−1へのリンク1510−2がなくなったため、リンク1510−1は非冗長と判定されることになる(なお、逆に図35から図4へとハイパーテキスト構造が変化した場合、リンク1510−1の状態変化は「非→冗長」となる)。このように冗長から非冗長へと状態が変化した場合、前回リンクが存在していたとしてもそれは冗長だったので木構造に反映されなかったが、今回も存在すればそのリンクを木構造へ反映することを考慮する必要が出てくる。そこで、このような場合には、リンクの状態変化が「存在」又は「更新」であれば、その状態変化を「新規」と読み替えるのである(図36参照)。この読替により、前回はリンクが存在していても木構造作成の際には存在しないとみなされていたところが、今回の非冗長への状態変化により、そのリンクが新たに現れた(「新規」)ものと扱われることになる。また、リンクの状態変化が「新規」の場合は、読替の必要はない。なお、リンクの状態変化が「削除」の場合は、今回リンク自体が削除され存在しなくなったわけであるが、前回はそのリンクが存在していても冗長と判断され存在しないものとみなされていたので、状態変化を「非存在」と読み替える。
そして「冗長→冗長」という状態変化は、前回も今回もリンクは冗長なので、そのリンクが実際に存在していようがいまいが、前回も今回も存在しないものとして取り扱われる。したがって、リンクの状態変化は、リンク収集時に求めた値によらず「非存在」に読み替える。
なお、リンク状態変化の読替は一時的なものであり、次回に残すリンクテーブル(次回の更新タイミングでの「前回リンクテーブル」となる)上のリンクの状態変化の欄には読替前のものを残しておく。
以上、リンクの状態変化の読替処理について説明した。本実施形態では、ハイパーテキスト構造のトラバースしていく過程で、差分データ作成部164がリンクを1つ取り出してそれに対応する木構造の差分を求めるごとに、上述のリンク状態変化の読替を行った上で差分情報判定テーブル208A〜208D或いは208E〜208Hに当てはめ、そのリンクに対応する木構造差分の情報を求めるのである。読替によりリンク状態変化はリンクが冗長か否かを反映したものとなっているので、それを差分情報判定テーブルに適用すれば適切な差分情報が求められる。
このように、本実施形態では、各リンクの冗長フラグを記録する点、及びこの冗長フラグの変化に応じてリンク状態変化を読み替える点を除いては、上述の基礎的な構成と同様の処理を利用することができる。
以上、木構造の差分情報を生成する場合への本発明の適用の例を説明したが、この例はあくまで例示的なものであり、本発明の範囲内で様々な変形が可能である。
例えば、冗長リンクと判定する条件として、「同一文書へのリンクが親にある」だけでなく、アンカーの対象となるテキスト等の一致まで要求するという方式は、この実施形態にもそのまま適用可能であることは容易に理解できるであろう。また、収集したリンク情報の統計処理から冗長リンクを割り出す方式も、この実施形態に適用可能である。
なお、以上の各実施形態において検出した冗長リンクの情報を、文書自体の簡略化に利用することもできる。すなわち、この場合には、上述の手法で冗長と判定したリンクの記述を文書中から削除する。これにより、文書のデータサイズを小さくすることができるので、通信コストの削減に寄与するとともに、携帯端末等のリソースの限られた装置における文書閲覧にも資する。例えば、ナビゲーションサーバ1000が、収集した文書から冗長リンクを削除した版(バージョン)を作成して保持し、ナビゲーションページを用いてユーザが文書を選択し、その選択の情報をウェブサーバ1100を介してナビゲーションサーバ1000に伝え、ナビゲーションサーバ1000がその文書の冗長リンク削除版をユーザに提供するようにするなどのシステム形態が可能である。
以上、本発明の好適な実施形態を説明した。以上に説明した実施形態のナビゲーションサーバ1000や木構造情報収集装置16は、典型的には、上述の処理内容を記述した1又は複数のプログラムを、中央演算処理装置や主記憶装置、不揮発性の大容量記憶装置などを備えた一般的なコンピュータシステムで実行することにより実現される。そのようなプログラムは、1台のコンピュータシステムで実行してもよいし、複数のコンピュータシステムで分散処理してもよい。
1000 ナビゲーションサーバ、1010 リンク収集部、1020 ハイパーテキスト構造保持部、1022 文書テーブル、1024 リンクテーブル、1030 木構造作成部、1040 冗長リンク削除部、1050 木構造情報保持部、1060 ナビゲーションページ作成部、1100 ウェブサーバ、1200 ネットワーク、1300 クライアント装置。