(57)【特許請求の範囲】
【請求項１】
切り取り元のＷｅｂ資源から切り取った切り取り範囲を貼り付け先のＷｅｂ資源に貼り付けるコンピュータを動作させるマッシュアッププログラムであって、
前記コンピュータを、
機能の実現に単独で意味をなさない部品タグと前記部品タグをまとめて機能を実現する構成タグとが対応付けられているテーブルに基づき、切り取り範囲として与えられたノードが未解決部品ではない場合、前記ノードの木構造の下位に未解決部品ノードがあるかを確認する未解決部品確認手段と、
前記未解決部品ノードがあると確認されたとき、前記切り取り範囲として与えられたノードの木構造の上位ノードである前記未解決部品ノードに対応する構成ノードを見つけ、見つけた前記構成ノード以下の要素を正規化切り取り範囲とする関連構成取得手段と
して動作させるマッシュアッププログラム。
【請求項２】
前記コンピュータを、更に、
前記正規化切り取り範囲に他のアクション要素において定義される関数又は変数の識別子の参照が含まれる場合、前記正規化切り取り範囲を含む前記切り取り元のＷｅｂ資源全体のドキュメントツリーを受け取り、前記ドキュメントツリーに含まれるアクション要素ノードを、アクション要素ノードを定義したアクション要素テーブルに基づき取得するアクション取得手段と、
前記アクション取得手段が取得した前記アクション要素ノードを前記正規化切り取り範囲に追加すべきアクション要素ノード集合として出力するアクション要素集合出力手段と
して動作させる請求項１記載のマッシュアッププログラム。
【請求項３】
前記コンピュータを、更に、
前記アクション取得手段が取得した前記アクション要素ノードと前記正規化切り取り範囲との関連度を前記アクション要素ノードごとに判定し、関連度が高い前記アクション要素ノードに前記アクション取得手段が取得した前記アクション要素ノードを絞り込むアクション要素取捨選択手段
として動作させる請求項２記載のマッシュアッププログラム。
【請求項４】
前記コンピュータを、更に、
前記アクション要素ノードから定義される識別子と参照する識別子とを取り出す識別子参照定義関係取得手段と、
前記識別子参照定義関係取得手段が取り出した前記切り取り元のＷｅｂ資源全体のドキュメントツリーに含まれている前記アクション要素ノードから定義される識別子と参照する識別子とに基づき、前記アクション要素ノード，定義される識別子及び参照する識別子を対応づけるアクション要素の参照・定義表に設定すると共に、前記識別子参照定義関係取得手段が取り出した前記正規化切り出し範囲に含まれる前記アクション要素ノードから定義される識別子と参照する識別子とに基づき、識別子欄，参照欄及び定義済欄を持つ識別子管理表を設定し、未解決な前記識別子を管理する識別子管理手段と、
前記識別子管理表から定義済みでない未解決な前記識別子を取り出し、前記識別子を定義している前記アクション要素ノードを前記アクション要素の参照・定義表から求めて前記正規化切り取り範囲に追加すべきアクション要素ノード集合に追加させる識別子定義元アクション要素取得手段と
して動作させる請求項２記載のマッシュアッププログラム。
【請求項５】
切り取り元のＷｅｂ資源から切り取った部分を貼り付け先のＷｅｂ資源に貼り付けるマッシュアップ装置であって、
機能の実現に単独で意味をなさない部品タグと前記部品タグをまとめて機能を実現する構成タグとが対応付けられているテーブルに基づき、切り取り範囲として与えられたノードが未解決部品ではない場合、前記ノードの木構造の下位に未解決部品ノードがあるかを確認する未解決部品確認手段と、
前記未解決部品ノードがあると確認されたとき、前記切り取り範囲として与えられたノードの木構造の上位ノードである前記未解決部品ノードに対応する構成ノードを見つけ、見つけた前記構成ノード以下の要素を正規化切り取り範囲とする関連構成取得手段と
を有するマッシュアップ装置。
【請求項６】
切り取り元のＷｅｂ資源から切り取った部分を貼り付け先のＷｅｂ資源に貼り付けるコンピュータによって実行されるマッシュアップ方法であって、
前記コンピュータが、
機能の実現に単独で意味をなさない部品タグと前記部品タグをまとめて機能を実現する構成タグとが対応付けられているテーブルに基づき、切り取り範囲として与えられたノードが未解決部品ではない場合、前記ノードの木構造の下位に未解決部品ノードがあるかを確認する未解決部品確認ステップと、
前記未解決部品ノードがあると確認されたとき、前記切り取り範囲として与えられたノードの木構造の上位ノードである前記未解決部品ノードに対応する構成ノードを見つけ、見つけた前記構成ノード以下の要素を正規化切り取り範囲とする関連構成取得ステップと
を実行するマッシュアップ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マッシュアッププログラム、マッシュアップ装置及びマッシュアップ方法に係り、特にネットワーク上の資源を合わせるマッシュアップ（ｍａｓｈ  ｕｐ）と呼ばれる技術を利用するマッシュアッププログラム、マッシュアップ装置及びマッシュアップ方法に関する。
【背景技術】
【０００２】
近年、インターネットやイントラネット等のネットワーク上の情報資源（例えばＷｅｂページ）のマッシュアップと呼ばれる技術が、よく利用されている。マッシュアップは複数の異なる提供元のコンテンツや機能を合わせて新しいコンテンツやサービスを形成するものである（例えば特許文献１参照）。
【０００３】
Ｗｅｂにおけるマッシュアップでは、検索、写真、動画、地図などのサービスサイトがＡＰＩ（Application Program Interface）を公開することで、写真と撮影場所の地図とを組み合わせたり、郵便番号データと地図とを組み合わせたりするサービスが構築されてきた。
【０００４】
Ｗｅｂにおけるマッシュアップは、このようなサービスをプログラムレベルで構築するだけでなく、エンドユーザレベルで簡単にできるようになれば、気づきの共有、Ｗｅｂページの共同制作、進捗管理、ポータルの作成、広告システムなど様々な場面で利用されることが期待される。
【０００５】
あるＷｅｂページ上のコンテンツや機能の一部分を切り取り、別のＷｅｂページ上に貼り付けることで利用可能にする、すなわち、あるＷｅｂページにアクセスしたとき、その時点での別のＷｅｂページの内容を表示したり、検索や動画閲覧などの機能を可能にしたりするには、指定されたＷｅｂページの一部分を切り取る技術と、Ｗｅｂページの一部分を指定された別のＷｅｂページに貼り付ける技術とが必要になる。
【０００６】
あるＷｅｂページの一部分を切り取る技術はクリッピング技術あるいはスクレイピング技術として、以下のような技術が良く知られている。例えばＷｅｂクリッピング技術としては、指定されたＷｅｂページの一部分を画像（スナップショット）として切り取るものが知られている。Ｗｅｂスクレイピング技術としては、指定されたＷｅｂページに対してパターンマッチングやＸｐａｔｈによる位置指定などによりデータを抜き取るものが知られている（例えば特許文献２参照）。
【０００７】
一方、あるＷｅｂページに情報を付与する技術はＷｅｂアノテーション技術として知られており、テキストや画像、ＨＴＭＬ断片（注：Ｗｅｂページの記述にはＨＴＭＬ以外にもＸＨＴＭＬ、ＸＭＬ、ＣＨＴＭＬなど様々な形式があるが、これらを代表してＨＴＭＬとして記述する）などＨＴＭＬで扱えるデータを、別のＷｅｂページ（ＨＴＭＬ）に埋め込む。
【０００８】
このように、Ｗｅｂページからデータを切り取る技術と、別のＷｅｂページにデータを付与するアノテーション技術とを組み合わせれば、あるＷｅｂページからクリップないしスクレイプしたデータを別のＷｅｂページ上にマッシュアップ（合成）して表示することは可能である。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−２９９４１４号公報
【特許文献２】特開２００４−１１０４２７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、通常のクリッピングやスクレイピングでは元のＷｅｂページをスナップショットとして画像で保存する、あるいは元のＷｅｂページの構造化文書（ＨＴＭＬ）そのものの断片、または、構造化文書から構造（タグ）を取り除いたデータを保存しているため、マッシュアップした画面にアクセスした時点での最新の情報が反映されず、元のＷｅｂページにあった検索や動画等の機能も利用できない。
【００１１】
既存のシステムとして、あらかじめ用意されたガジェット（ウィジェット）を特定のＷｅｂページに貼り付けるものがある。また、既存のシステムとして、「これを自分のブログに貼り付けてください」ということで構造化文書の断片があらかじめ用意されているものもある。これらのシステムでは、特定の機能をもつ画面を別のＷｅｂページに貼り付けることができるが、用意されたものを貼り付けられるだけで、任意のＷｅｂページの一部分を貼り付けられるものではない。
【００１２】
さらに、ユーザはＷｅｂページ上のコンテンツや機能の一部分を切り取り、別のＷｅｂページ上に貼り付けることで、何らかの機能が別のＷｅｂページに引き継がれることを常識的に期待している。しかし、ユーザが期待する機能を別のＷｅｂページに引き継ぐためには、あるＷｅｂページからＨＴＭＬフラグメントの適切な範囲を切り取らなければならない。
【００１３】
しかしながら、一般的なユーザにとって、期待する機能を別のＷｅｂページに引き継ぐ為に、あるＷｅｂページからＨＴＭＬフラグメントの適切な範囲を切り取ることは容易でなかった。
【００１４】
本発明の一実施形態は、上記の点に鑑みなされたもので、ネットワーク上の任意の資源の機能をマッシュアップにより形成した新たな資源に引き継がせるマッシュアッププログラム、マッシュアップ装置及びマッシュアップ方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の一実施形態は、切り取り元のＷｅｂ資源から切り取った切り取り範囲を貼り付け先のＷｅｂ資源に貼り付けるコンピュータを動作させるマッシュアッププログラムであって、前記コンピュータを、機能の実現に単独で意味をなさない部品タグと前記部品タグをまとめて機能を実現する構成タグとが対応付けられているテーブルに基づき、切り取り範囲として与えられたノードが未解決部品ではない場合、前記ノードの木構造の下位に未解決部品ノードがあるかを確認する未解決部品確認手段と、前記未解決部品ノードがあると確認されたとき、前記切り取り範囲として与えられたノードの木構造の上位ノードである前記未解決部品ノードに対応する構成ノードを見つけ、見つけた前記構成ノード以下の要素を正規化切り取り範囲とする関連構成取得手段として動作させる。
【００１６】
なお、本発明の一実施形態の構成要素、表現又は構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
【発明の効果】
【００１７】
本発明の一実施形態によれば、ネットワーク上の任意の資源の機能をマッシュアップにより形成した新たな資源に引き継がせるマッシュアッププログラム、マッシュアップ装置及びマッシュアップ方法を提供できる。
【図面の簡単な説明】
【００１８】
【図１】切り取り元のＷｅｂページの一例のイメージ図である。
【図２】貼り付け先のＷｅｂページの一例のイメージ図である。
【図３】切り取り元のＷｅｂページから切り取られた部分が貼り付けられた貼り付け先のＷｅｂページの一例のイメージ図である。
【図４】切り取り元のＷｅｂページの一例のイメージ図である。
【図５】部品・構成タグ一覧テーブルの一例の構成図である。
【図６】切り取り範囲を拡張する第１の方法を示す説明図である。
【図７】切り取り元のＷｅｂページの一例のイメージ図である。
【図８】ドキュメントツリーの一例の構成図である。
【図９】切り取り範囲を拡張する第２の方法を示す説明図である。
【図１０】アクション要素テーブルの一例の構成図である。
【図１１】切り取り範囲を拡張する第３の方法を示す説明図である。
【図１２】切り取り範囲を拡張する第４の方法を示す説明図である。
【図１３】本実施例のマッシュアップ装置を含むシステムの一実施例の構成図である。
【図１４】コンピュータシステムの一例の構成図である。
【図１５】本実施例のマッシュアッププログラムを適用したＷｅｂ閲覧器の一例の構成図である。
【図１６】切り取り元選定部の処理を表したフローチャートである。
【図１７】貼り付け先選定部の処理を表したフローチャートである。
【図１８】範囲提示選定部の処理を表したフローチャートである。
【図１９】Ｗｅｂマッシュアップ実現装置の処理を表したフローチャートである。
【図２０】未解決部品確認部の処理手順を表した一例のフローチャートである。
【図２１】未解決部品確認部のオプションの処理手順を表した一例のフローチャートである。
【図２２】関連構成取得部の処理手順を表した一例のフローチャートである。
【図２３】切り取り範囲を拡張する第２の方法の処理手順を表した一例のフローチャートである。
【図２４】スクリプトソース記述可能属性テーブルの一例の構成図である。
【図２５】切り取り範囲を拡張する第３の方法の処理手順を表した一例のフローチャートである。
【図２６】正規化切り取り範囲とアクション要素との関連度を判定する処理手順を表した一例のフローチャートである。
【図２７】切り取り範囲を拡張する第４の方法の処理手順を表した一例のフローチャートである。
【図２８】アクション要素の参照・定義表の一例の構成図である。
【図２９】識別子管理表の一例の構成図である。
【図３０】識別子管理表の一例の構成図である。
【発明を実施するための形態】
【００１９】
次に、本発明を実施するための形態を、以下の実施例に基づき図面を参照しつつ説明していく。なお、本実施例では、ネットワーク上の資源の一例としてＷｅｂページを例に説明する。
【００２０】
（本実施例の概要）
本実施例は、Ｗｅｂページ上の画面を切り取って、指定された他のＷｅｂページに貼付するマッシュアップ装置において、フォーム入力等の切り取り元のＷｅｂページの持つ機能が正しく実行されるようにするために、切り取り元のＷｅｂページの切り取り範囲から構成タグ検索，アクション要素検索，アクション要素の絞り込みにより、最低限必要な情報を切り取って保持することで、貼り付け先のＷｅｂページにおいて正しい機能が実行されるようにしている。本実施例は必要となる正規化を切り取り元のＷｅｂページ側で行うことによって、貼り付け先のＷｅｂページにおいて正しい機能が実行されるようにするものである。
【００２１】
まず、本実施例の理解を容易とする為、あるＷｅｂページ上のコンテンツや機能の一部分を切り取り、別のＷｅｂページ上に貼り付けることで利用可能にする、すなわち、あるＷｅｂページにアクセスしたとき、その時点での別のＷｅｂページの内容を表示したり検索や動画閲覧などの機能を可能にしたりするマッシュアップ技術について説明する。
【００２２】
図１は切り取り元のＷｅｂページの一例のイメージ図である。図１の切り取り元のＷｅｂページは検索窓の部分１を有する。ユーザはシステムがＷｅｂページ上で提示する例えば赤枠２を移動させて適切な部分を選択し、所定のコマンド（ｃｔｒｌ−ｃ）等でＷｅｂページ上の部分を切り取る。
【００２３】
図１のＷｅｂページは赤枠２により検索窓の部分１が指定されている。ユーザは図１の状態でＷｅｂページ上の部分を切り取る所定のコマンドを入力することにより、切り取り元のＷｅｂページから検索窓の部分１を切り取ることができる。
【００２４】
図２は貼り付け先のＷｅｂページの一例のイメージ図である。ユーザはシステムが貼り付け先のＷｅｂページ上で提示する例えば赤枠を移動させて適切な部分を選択し、所定のコマンド（ｃｔｒｌ−ｖ）等で、切り取り元のＷｅｂページから切り取った検索窓の部分１を貼り付ける。図３は切り取り元のＷｅｂページから切り取られた部分が貼り付けられた貼り付け先のＷｅｂページの一例のイメージ図である。
【００２５】
図３のＷｅｂページは赤枠３により貼り付け部分が指定されている。ユーザはＷｅｂページ上の部分に貼り付ける所定のコマンドを入力することにより、切り取り元のＷｅｂページから切り取った検索窓の部分１を、赤枠３により指定されている貼り付け先のＷｅｂページの貼り付け部分に貼り付けることができる。図３のＷｅｂページは図１に示す切り取り元のＷｅｂページの検索窓の部分１が赤枠３により指定された貼り付け部分に埋め込まれている。
【００２６】
貼り付け先のＷｅｂページに貼り付けたものは単なるスナップショットでなく、切り取り元のＷｅｂページから切り取った切り取り部分が持つ機能を、そのまま有する。図３の例では、切り取り元のＷｅｂページが有する検索機能を保持している。ユーザは図３のＷｅｂページに貼り付けられた検索窓の部分１にクエリーを入力することで検索結果を得ることができる。
【００２７】
このように、切り取り元のＷｅｂページが有する検索機能を貼り付け先のＷｅｂページで保持できるのは、以下の理由による。まず、Ｗｅｂページは、ＨＴＭＬ等で作成されている。検索窓の部分１の周辺のＨＴＭＬは具体的に以下のように記述されている。
<h5><label for="searchInput">検索</label></h5>
<div id="searchBody" class="pBody">
<form action="/w/index.php" id="searchform">
<div>
<input type=“hidden”name="title" value="特別:Search"/>
<input id="searchInput" name="search" type="text" accesskey="f" value="" />
<input type=“submit” name="go" class="searchButton" id="searchGoButton" value="表示" />
<input type=“submit” name="fulltext" class="searchButton" id="mw-searchButton" value="検索" />
</div>
</form>
</div>
【００２８】
そして、切り取り元のＷｅｂページが有する検索機能は、上記のようなＨＴＭＬを単なる文字列テキストとして捉えるのではなく、ドキュメントツリーを意識して適当な範囲で切り取り、別のＷｅｂページのＨＴＭＬテキストの中に埋め込むことで、貼り付け先のＷｅｂページで実現される。
【００２９】
しかし、切り取り元のＷｅｂページから切り取った部分を貼り付け先のＷｅｂページに埋め込む場合、切り取り元のＷｅｂページから切り取る範囲によっては、ユーザが期待する機能を保持（貼り付け先のＷｅｂページで同じ機能を利用）できないことがある。
【００３０】
図４は切り取り元のＷｅｂページの一例のイメージ図である。例えば、図４の切り取り元のＷｅｂページは赤枠４が図１よりも狭い範囲（検索窓）を指定している。ユーザは図４の状態でＷｅｂページ上の部分を切り取る所定のコマンドを入力することにより、切り取り元のＷｅｂページから検索窓を切り取ることができる。ユーザは貼り付け先のＷｅｂページ上で赤枠を移動させて適切な部分を選択し、所定のコマンド等で、切り取り元のＷｅｂページから切り取った検索窓を貼り付けたとする。
【００３１】
図４では、赤枠４の部分が検索窓である。しかし、赤枠４が指定する検索窓を他のＷｅｂページに貼り付けたとしても、ユーザが期待する機能は保持されない。ここで、ユーザが期待する機能とは、単に検索窓を貼り付けることでなく、検索機能であることが常識である。ユーザが期待する検索機能が保持されない理由は以下の通りである。
【００３２】
まず、ＷｅｂページはＨＴＭＬ等で作成されている。検索窓の周辺のＨＴＭＬは具体的に以下のように記述されている。
<h5>検索</h5>
<div id="searchBody" class="pBody">
<form action="/w/index.php" id="searchform">
<div>
<input type=“hidden” name="title" value="特別:Search"/>
<input id="searchInput" name="search" type="text" accesskey="f" value="" />
<input type=“submit” name="go" class="searchButton" id="searchGoButton"
value="表示" />
<input type=“submit” name="fulltext" class="searchButton" id="mw-searchButton" value="検索" />
</div>
</form>
</div>
【００３３】
図１の例では赤枠２が<form> 〜 </form> の範囲を示していた。図４の例では赤枠４が<input id="searchInput" name="search" type="text" accesskey="f" value="" />の範囲を示す。上記のＨＴＭＬでは実際の検索機能を保持する為、<form> 〜 </form> 全体が必要になる。
【００３４】
ＨＴＭＬフラグメントを切り取って別のＷｅｂページに貼り付けた時に、ユーザが常識的に期待する機能を保持する為には、適切な範囲を切り取らなければならない。図４の例では説明を分かり易くするために検索窓の範囲に限定したが、<form> 〜 </form> の内部にある<div> 〜 </div> を切り取ったとしても検索機能を保持できない。この時にブラウザ上で見えている範囲（例えば赤枠２で指定される範囲）は、図１の赤枠２で指定される範囲と同じである。
【００３５】
この他の例については、後に述べるが、切り取り元のＷｅｂページの切り取った範囲から期待される機能を貼り付け先のＷｅｂページにおいても保持する為に、切り取り元のＷｅｂページから切り取る切り取り範囲を適切に制御する必要がある。
【００３６】
なお、切り取り元のＷｅｂページの切り取った範囲から期待される機能を貼り付け先のＷｅｂページにおいても保持する手法としては、切り取り元のＷｅｂページの切り取り対象部分を切り取るのではなく、切り取り元のＷｅｂページ全体を取り出して貼り付け先のＷｅｂページに貼り付け、切り取り対象部分以外を非表示とすることも考えられる。
【００３７】
この手法では、切り取り対象部分以外を非表示とするため、見かけ上、指定された部分を切り取っているように振る舞える。また、この手法では切り取り元のＷｅｂページ全体を保持する為、切り取り元のＷｅｂページの機能も損なわず、貼り付け先のＷｅｂページにおいて期待される機能を保持できる。
【００３８】
しかしながら、切り取り元のＷｅｂページ全体を保持することは、必要のない部分まで保持するため、無駄がある。これは容量的に無駄があるというだけでなく、切り取り元のＷｅｂページの切り取り対象部分以外に有する（記述されている）機能が副作用として実行されてしまうという現象を起こすことにもなる。例えば副作用としては、あるＷｅｂページにアクセスすると、ポップアップで別の情報（広告など）が表示されたり、音楽が流れたりするというようなものである。
【００３９】
また、切り取り元のＷｅｂページが持つ機能をそのままに、表示スタイルを貼り付け先のＷｅｂページに合わせるなど、２つのＷｅｂページを融合させたいというような場合にも上記手法では応えることができない。これは切り取り元のＷｅｂページの機能だけが必要だったのに、切り取り元のＷｅｂページのスタイルもそのまま引き継いでしまったということで、一種の副作用として考えることもできる。
【００４０】
以上、任意のＷｅｂページの情報を切り取って、新しいＷｅｂページに貼り付けたときに、任意のＷｅｂページが有する機能を、そのまま新しいＷｅｂページに引き継ぐ為には適切な範囲が切り取られることを期待するか、副作用がないことを期待する（あるいはあっても無視する）しかなかった。
【００４１】
本実施例では任意のＷｅｂページにおける任意の切り取り範囲の指定に対しても、その切り取り範囲からユーザが期待する機能を推定し、貼り付け先のＷｅｂページにおいて広い意味での副作用を起こすことなく、ユーザの期待する機能が正しく働く率を高めるものである。言い換えれば、本実施例では任意のＷｅｂページにおける任意の切り取り範囲を指定することで、その切り取り範囲からユーザが期待する機能を推定し、切り取り元のＷｅｂページ全体を保持するのではなく、推定した機能の実行に必要最低限と思われる部分を切り取るものである。
【００４２】
マッシュアップ装置には、切り取り元のＷｅｂページ上の画面を切り取らせて、その位置を位置情報として保持しておき、指定された貼り付け先のＷｅｂページにアクセスしたときに、切り取り元のＷｅｂページの位置情報から現在の切り取り元のＷｅｂページの情報を取り出して貼り付け先のＷｅｂページに合うように正規化を行い、現在アクセスしている貼り付け先のＷｅｂページに一時的に埋め込むことで、複数のＷｅｂページの機能をそのままに、マッシュアップさせるものがある。
【００４３】
しかしながら、上記のマッシュアップ装置は切り取り範囲が正当である（切り取り範囲はユーザが期待する機能を実行するのに必要な情報がすべてそろっている）ことを仮定している。そこで、本実施例は、ユーザにより指定された切り取り範囲に対して、切り取り範囲が示唆する機能（切り取り範囲からユーザが期待する機能）の実行に必要な情報をすべて含むように、指定された切り取り範囲を拡張するものである。
【００４４】
以下では、ユーザにより指定された切り取り範囲に基づいて、切り取り範囲が示唆する機能の実行に必要な情報をすべて含むように、切り取り範囲を拡張する方法について説明していく。
【００４５】
（切り取り範囲を拡張する方法）
ここでは、主に検索機能を有するＷｅｂページの検索窓を他のＷｅｂページに貼り付ける場合を例として説明する。Ｗｅｂページ上で検索機能をサービスとして提供する場合は入力フォームが用いられることが多い。入力フォームを表示するには<form>タグが用いられ、form要素（<form>~</form>）が一つのフォームとなる。フォーム要素中にはinput要素、select要素、textarea要素などのフォーム部品が配置される。
【００４６】
例えば、input要素はフォームの中のテキスト入力や実行ボタンなどの各フォーム部品を表示する。また、フォームは通常、ひとつのサブミット（実行）ボタンを持ち、各入力部品に値を入力した後、サブミットボタンが押されることで、<form>タグのmethod属性で指定した転送方法により、action属性で指定したアクションを呼び出す。
【００４７】
すなわち、input要素はform要素の部品であるため、<input>~</input>が切り取り範囲として指定されたとしても、<form>~</form>のフォーム全体で切り取らないと意味をなさないことになる。select要素、textarea要素もinput要素と同様、form要素の部品であるため、<form>~</form>のフォーム全体で切り取らなければ、意味をなさないことになる。
【００４８】
このような例は他にもあり、<param>タグは、<applet>タグ（ＨＴＭＬドキュメントにＪａｖａアプレットを挿入するためのタグ）や<object>タグ（画像・動画・音声・各種プラグインデータ・Ｊａｖａアプレット・他のＨＴＭＬ文書等の様々な形式のデータを文書に埋め込むための汎用的なタグ）の中でデータが実行される際に必要となるパラメータを指定するタグであり、<applet>~</applet>や<object>~</object>のノード全体で切り取らなければ、意味をなさないことになる。
【００４９】
そこで、以下では<input>、<select>、<textarea>、<param>タグを部品タグと呼ぶこととする。<form>、<applet>や<object>タグを構成タグと呼ぶこととする。部品タグと構成タグとの関係は図５のような部品・構成タグ一覧テーブルとして保持される。図５は部品・構成タグ一覧テーブルの一例の構成図である。
【００５０】
図５の部品・構成タグ一覧テーブルは、<input>、<select>、<textarea>タグが<form>タグの部品タグであることを表す。図５の部品・構成タグ一覧テーブルは、<param>タグが<applet>や<object>タグの部品タグであることを表す。
【００５１】
また、図５の部品・構成タグ一覧テーブルは、<form>タグが<input>、<select>、<textarea>タグの構成タグであることを表す。図５の部品・構成タグ一覧テーブルは、<applet>や<object>タグが<param>タグの構成タグであることを表す。
【００５２】
図６は切り取り範囲を拡張する第１の方法を示す説明図である。図６は部品の指定に対して構成ノードを見つけることにより切り取り範囲を拡張するものである。未解決部品確認部１２は切り取り範囲（ＨＴＭＬフラグメントあるいはドキュメントツリーのサブツリー）が与えられる。
【００５３】
例えば未解決部品確認部１２はユーザにより指定された図７の赤枠１５が示す検索窓が切り取り範囲として与えられる。図７は切り取り元のＷｅｂページの一例のイメージ図である。図７のＷｅｂページはＨＴＭＬで示されるが、そのドキュメントツリーが図８に示すようになっている。
【００５４】
図８はドキュメントツリーの一例の構成図である。切り取り範囲として与えられた赤枠１５が示す検索窓はform要素の下位構造のp要素の最初のinputノード２０に対応したinput要素となる。未解決部品確認部１２では、切り取り範囲が与えられる。具体的には切り取り範囲がドキュメントツリーのノードとして与えられる。木構造上のノードは、そのノードをルートとするサブツリーを示すと考える。
【００５５】
すなわち、図８のinputノード２０はＨＴＭＬ上で<input>〜</input>のinput要素を示しているものとする。未解決部品確認部１２では、与えられたノード自身あるいは与えられたノードより木構造での下位構造に、form要素などの構成要素の下位構造ではないinput等の部品要素（木構造上では部品タグでラベル付けされるノード）を有するかどうかを判定する。
【００５６】
例えば、図８のinputノード２０は、自分自身が部品要素である。したがって、未解決部品確認部１２はinputノード２０が未解決部品要素ということで未解決部品要素ありと判定する。
【００５７】
inputノード２０の兄弟のspanノード２１が与えられた場合は、spanノード２１自身が部品要素ではなく、spanノード２１より木構造での下位構造を辿っても、a要素があるだけである。したがって、未解決部品確認部１２はa要素が部品要素でないということで未解決部品要素なしと判定する。
【００５８】
inputノード２０の親であるpノード２２が与えられた場合は、pノード２２自身が部品要素ではないが、pノード２２より木構造での下位構造を辿ると、form等の構成要素がないままに部品要素であるinputノード２０が出現する。したがって、未解決部品確認部１２は未解決部品要素ありと判定する。pノード２２の先祖のformノード２３が与えられた場合は、formノード２３自身が構成要素である。したがって、未解決部品確認部１２は未解決部品要素なしと判定する。
【００５９】
formノード２３の先祖であるbodyノード２４が与えられた場合、bodyノード２４より木構造での下位構造を辿っても、構成要素なしで部品要素が出現することはない。したがって、未解決部品確認部１２は未解決部品要素なしと判定する。図８ではbodyノード２４の下位のdivノード２５の下にformノード２３が出現する。したがって、未解決部品確認部１２はformノード２３の下位にあるinputノード２０まで見に行かない。
【００６０】
以上のように、未解決部品確認部１２では、与えられた範囲（ノード）において、未解決部品要素があるかないかの確認を行う。未解決部品要素がない場合、未解決部品確認部１２は与えられた範囲（ノード）を、そのまま返すことになる。また、未解決部品要素がある場合、未解決部品確認部１２は関連構成取得部１３を呼び出す。
【００６１】
関連構成取得部１３は与えられた範囲（ノード）に対して木構造での上位構造を辿っていき、構成要素を見つける。構成要素を見つけると、関連構成取得部１３は見つけた構成要素（構成ノードをルートとするサブツリー）を正規化された範囲（正規化切り取り範囲）として返す。
【００６２】
inputノード２０の場合には、木構造での上位構造を辿っていくとformノード２３のところで構成要素が見つかるので、form要素（formノード２３をルートノードとするサブツリー）が正規化切り取り範囲として返される。pノード２２の場合も、木構造での上位構造を辿っていくとformノード２３のところで構成要素が見つかるので、form要素が正規化切り取り範囲として返される。
【００６３】
なお、上記では部品要素の部分（下位）構造（例えばボタンに記述された文字列）が切り取り範囲として指定された場合に、下位構造を部品要素と見なさなかったが、部品要素の一部としてみなすことも可能である。その場合、未解決部品確認部１２は、下位構造を辿って部品要素を探すとともに、上位構造を辿って構成要素より上位構造にはない部品要素の存在を確かめることになる。
【００６４】
切り取り範囲を拡張する第１の方法では、リテラシーの低い人やHTMLソースとブラウザ画面との対応関係を与えるユーザインタフェースの制限上の問題などにより、部品要素のみが選択された場合であっても、その部品要素を利用する構成要素が正規化切り取り範囲（マッシュアップ対象）として選択される。
【００６５】
これにより、切り取り範囲を拡張する第１の方法では、単純に切り取った部分（切り取り範囲）を貼り付けた場合に比べて、一般的に意図されるとおりの機能（ユーザが期待する機能）が保存される可能性を大幅に増加させる。また、切り取り範囲を拡張する第１の方法では、貼り付け部分（正規化切り取り範囲）の増加が最小限であり、副作用を起こす可能性も少ない。
【００６６】
ただし、切り取り範囲に関連する機能が局所的な切り取りで実現しない場合には、切り取り範囲を拡張する第１の方法だけで一般的に意図されるとおりの機能を保存することができない。
【００６７】
次に、切り取り範囲を拡張する第２の方法について説明する。例えば切り取り範囲は下記のような要素（ＨＴＭＬ記述）であったとする。
<form id="fm1" onsubmit="return f()">
<input type="text" name="q" value="" size="35">
<input type="submit" value="検索">
</form>
【００６８】
onsubmit属性は、送信ボタンが押された時に起動するスクリプトを記述しているものである。上記のＨＴＭＬ記述では「検索」が押されると関数f()が呼び出される。上記の要素ではform要素（<form>〜</form>）だけでアクションが完結せず、関数f()も取り込まなければならない。
【００６９】
関数f()は、Ｗｅｂページ中のどこかに直接記述されているか、あるいは外部から取り込まれるスクリプトの中に記述されているはずである。そこで、切り取り範囲を拡張する第２の方法は、Ｗｅｂページのスクリプト記述のすべてと、外部からスクリプトを読み込む記述とをすべて取り込んでおき、貼り付け先のＷｅｂページにもＷｅｂページのスクリプト記述のすべてと、外部からスクリプトを読み込む記述とをすべて反映させることにより関数f()を実行できるようにする。
【００７０】
図９は、切り取り範囲を拡張する第２の方法を示す説明図である。図９は、切り取り範囲に関連する機能が局所的な切り取りで実現しない場合に、Ｗｅｂページ内の全てのアクションを見つけて切り取り範囲を拡張することで、一般的に意図されるとおりの機能を保存するものである。
【００７１】
アクション取得部３２は、切り取り範囲から呼び出される関数や変数の定義（あるいは呼び出された関数から繰り返し的に呼び出される関数や変数の定義）を含む可能性のあるアクション要素を取得する。なお、アクション要素は、アクション要素テーブルにある要素名（タグ）により判定される。図１０は、アクション要素テーブルの一例の構成図である。アクション取得部３２は切り取り元のＷｅｂページのドキュメントツリーを入力として受け取り、ドキュメントツリーの各ノードに対して、アクションを含むノード（アクション要素）を切り出していく。
【００７２】
アクション要素の典型的なものはscript要素である。<script>タグはJavaScriptなどのスクリプトを記述するものであり、<script>~</script>に直接スクリプトが記述されることもあるし、<script type="text/javascript" src="xxx.js" />のようにsrc属性により呼び出される外部ファイルに記述されることもある。
【００７３】
アクション要素としては、script要素以外にform要素がある。例えば下記のようなform要素であったとする。
<form id="f1" name="f1" method="post" action="">
<input name="q" type="hidden" value="">
<input name="r" type="hidden" value="s">
</form>
【００７４】
このform要素は、すべてのinput要素がhiddenであり、ユーザに何も入力を要求しておらず、他のアクション要素の補助的な働きを持つものである。したがって、上記のようなform要素はアクション要素として切り出すことが必要になる。
【００７５】
アクション要素管理部３３は切り出されたアクション要素を適切な形式に変換してアクション要素集合テーブル３１に保持する。例えば、アクション要素は、その記述自身で保持する方法もあるし、そのアクション要素の位置をXPathのような形式で保持してもよい。アクション要素集合出力部３４はドキュメントツリー全体からアクション要素を取得し終えたならば、切り取り位置の拡張として追加すべきアクション要素集合をアクション要素集合テーブル３１から出力する。
【００７６】
切り取り範囲を拡張する第２の方法では、Ｗｅｂページ内にあるすべてのアクションを切り取るので、局所的な切り取りで実現しない機能を保存できる。また、切り取り範囲を拡張する第２の方法は切り取り元のＷｅｂページ全体でなく、アクションで切り取り範囲を拡張するため、切り取り元のＷｅｂページ全体を取り出して貼り付け先のＷｅｂページに貼り付けるよりも切り取り範囲が限定され、スタイル等の取り込みを制御することができる。
【００７７】
しかし、切り取り範囲を拡張する第２の方法はアクションのすべての部分を切り取ってしまうので、広告のような定型情報の表示など、副作用が残ることもある。次に、切り取り範囲を拡張する第３の方法について説明する。
【００７８】
スクリプトには命令やイベントハンドラ等から呼び出されたときに実行される関数の定義が記述される。しかし、次のスクリプトは命令だけで関数定義がない例である。
<div>
<script type="text/javascript">
document.write("Hello ")
</script>
world
</div>
【００７９】
上のスクリプトは、読み込まれた時点で評価されて実行される。したがって、上のスクリプトの実行結果（スクリプトを実行した後のドキュメントツリー）は、Hello worldとなる。
【００８０】
このように、スクリプト中に関数定義のないものは、他のアクションから参照されない独立したものなので、切り取り範囲として付け加える必要がない。しかもスクリプト中に関数定義のないものは、逆に残してしまうと、上のスクリプトのように本来切り取った部分にない余分なテキストを書き出したり、あるいは広告を表示したりするなどの副作用を起こすかもしれない。
【００８１】
そこで、上のような関数定義のないスクリプトなど、本来の切り取り範囲にある機能の実現に関係のなさそうなアクション要素は切り取りリストに入れないようにする。
【００８２】
以下に他の例を示す。例えば、以下のようなform要素がアクションとして切り出されたとする。
<body>
<form id="f1" name="f1" method="post" action="">
<input name="q" type="hidden" value="">
<input name="ie" type="hidden" value="UTF-8">
<input name="ref" type="hidden" value="sa">
</form>
<h1>ヘッダ</h1>
‥
【００８３】
このform要素ではすべてのinputのtypeがhiddenとなっている。これは、入力用の窓やボタン等がブラウザ上になにも表示されていないことを意味する。また、このform要素はh1の手前に独立して存在している（何かのブロック内部ではない）。このことから、本form要素は独立して用いられるというよりも、何か別のform要素に付随する（別のスクリプトから呼び出される）可能性が高い（独立度が低い）と判断できる。
【００８４】
一方、以下のようなform要素がアクションとして切り出されたとする。
<form action="http://xxx/search.js" name="search" method="get">
<B>WEBサイト検索</B>
<input type="text" size="28" name="search"><input type="submit" value="検索">
<input type="hidden" name="target" value="combined">
<input type="hidden" name="look" value="yyy">
</form>
【００８５】
このform要素では一部のinputのtypeがhiddenとなっているが、type="text"とtype="submit"があり、通常の入力に対して検索などの何かの処理を実行するためのフォームの可能性が高い（独立度が高い）と判断できる。このような独立度の高いアクションの中には、サブミットしない限り、副作用を及ぼさないものもあるが、広告等の定型的な情報を出力するためにも使われている。
【００８６】
図１１は、切り取り範囲を拡張する第３の方法を示す説明図である。図１１は、切り取り範囲に関連する機能が局所的な切り取りで実現しない場合に、Ｗｅｂページ内の全てのアクションから切り取り範囲とアクションとの関連性によってアクションを絞り込んで切り取り範囲を拡張することで、一般的に意図されるとおりの機能を保存するものである。
【００８７】
切り取り範囲を拡張する第３の方法は、各アクション要素に対して、切り取り範囲内のアクション要素との関連度を計算して（アクション要素の独立度が高ければ関連度は低いことになる）、アクション要素集合として残すかどうか篩にかける。図１１は図９の構成にアクション要素取捨選択部３５を付け加えたものになっている。
【００８８】
アクション要素取捨選択部３５は、プログラムの形態、存在位置、変数等から、与えられたアクション要素の独立度や、切り取り範囲のアクションとの関連度を計算する。アクション要素取捨選択部３５は、独立度が低く、切り取られた範囲との関連度が高いと認められたアクション要素（例えばある閾値以上の場合）だけを残す。独立度が低く、切り取られた範囲との関連度が高いと認められたアクション要素だけを残すアクション要素取捨選択部３５の処理の詳細は後述する。
【００８９】
なお、アクション要素取捨選択部３５は、独立度が低く、切り取られた範囲との関連度が高いアクション要素を自動的に判定しても構わないし、人が何らかの指示を与えるのでも構わない。
【００９０】
切り取り範囲を拡張する第３の方法では、Ｗｅｂページ内にあるそれぞれのアクション要素に対して、切り取り範囲内にあるアクション要素との関連性を計算して、切り取り範囲として残す部分を絞り込むので、副作用（切り取り範囲とは無関係で独立な広告表示等の不要なアクションの実行）の可能性を大幅に減らすことができる。
【００９１】
しかし、切り取り範囲を拡張する第３の方法によるアクション関連度計算はヒューリスティックスによるものとなるので、副作用が残る場合や、本来必要だったアクション要素を篩にかけて落としてしまうという場合も起こりえる。次に、切り取り範囲を拡張する第４の方法について説明する。
【００９２】
例えば、以下のスクリプトを切り取ったとする
<form style="margin: 0px;" id="fm1" name="fm1" onSubmit="return goF2('fm1')">
<input name="q" autocomplete="off" value="" size="35" class="j12" accesskey="e" type="text" />
<input value="検索" class="j12" onclick="return goF1('fm1')" type="button" />
<input value="クリア" onclick="javascript:wordClear('fm1')" class="j12" type="button" />
</form>
【００９３】
このスクリプトでは、goF2とgoF1という関数を呼び出している。したがって、より正確にアクション要素を絞り込む為には呼び出している関数が定義されているアクション要素に絞り込んだアクション要素集合を取り出せば良い。しかし、実際には関数定義の中からまた別のアクション要素に記述されている関数や変数などを呼び出しているかもしれないので、未解決な識別子（関数や変数）を管理しながら、取り込むべきアクション要素を決定することが必要になる。
【００９４】
図１２は、切り取り範囲を拡張する第４の方法を示す説明図である。図１２は、切り取り範囲に関連する機能が局所的な切り取りで実現しない場合に、Ｗｅｂページ内の全てのアクションからアクションの解析によって、より正確にアクションを絞り込んで切り取り範囲を拡張することで、一般的に意図されるとおりの機能を保存するものである。図１２は図９の構成に識別子参照定義関数取得部３６，識別子定義元アクション要素取得部３７及び識別子管理部３８を付け加えたものになっている。
【００９５】
識別子管理部３８は、解決した（取り込んだアクション要素内で定義されている）識別子（関数や変数）と未解決な（取り込んだアクション要素内だけではまだ定義されていない）識別子を管理するものである。
【００９６】
識別子参照定義関係取得部３６は、与えられたアクション要素に対して、まずスクリプトを取り込む。取り込むスクリプトは、スクリプトがアクション要素内部で記述されている場合、それ自身である。また、取り込むスクリプトは、外部ファイルが参照されている場合、その外部ファイルを取り込んで、その外部ファイルに記述されているスクリプトになる。識別子参照定義関係取得部３６は、取り込んだスクリプトを解析し、そのスクリプト内部でどのような識別子が定義されているか、またどのような外部識別子を参照しているかを解析する。
【００９７】
識別子定義元アクション要素取得部３７は、未解決な識別子に対して、識別子参照定義関係取得部３６の解析結果を利用して、その識別子を解決するためのアクション要素を特定するものである。
【００９８】
実際の動作は、例えば、まず切り取り範囲内のアクション要素に対する未解決および解決済の識別子を識別子管理部３８に与える。識別子参照定義関係取得部３６ではあらかじめすべてのアクション要素に対して、どのアクション要素でどの識別子が定義され、どのような識別子が参照されるかを解析し、その一覧表を保持しておく。
【００９９】
識別子定義元アクション要素取得部３７では識別子管理部３８から未解決な識別子を取り出し、識別子参照定義関係取得部３６の解析結果を参照して、その識別子を解決するためのアクション要素を特定する。識別子定義元アクション要素取得部３７は、特定したアクション要素をアクション要素管理部３３に通知するとともに、取り込んだアクション要素によって定義されている識別子の情報と、外部参照が行われている識別子の情報とを識別子管理部３８に通知する。そして、識別子定義元アクション要素取得部３７は未解決な識別子がなくなるまでこのような動作を繰り返すことで、すべての識別子を解決済とするアクション要素の集合を特定する。なお、識別子参照定義関数取得部３６，識別子定義元アクション要素取得部３７及び識別子管理部３８の処理の詳細は後述する。
【０１００】
（本実施例の詳細）
図１３は本実施例のマッシュアップ装置を含むシステムの一実施例の構成図である。図１３のシステムは、Ｗｅｂマッシュアップ設定装置１００，Ｗｅｂマッシュアップ実現装置１１０，アノテーション管理サーバ１２０を有している。
【０１０１】
Ｗｅｂマッシュアップ設定装置１００はユーザに切り取り部分および貼り付け先を指定させる。Ｗｅｂマッシュアップ実現装置１１０はユーザに指定された切り取り部分および貼り付け先に基づいたマッシュアップ結果を表示する。アノテーション管理サーバ１２０はマッシュアップするためのデータを管理する。Ｗｅｂマッシュアップ設定装置１００及びＷｅｂマッシュアップ実現装置１１０はＷｅｂ閲覧器１０１，１１１の拡張機能として実施される。図１３ではＷｅｂマッシュアップ設定装置１００とＷｅｂマッシュアップ実現装置１１０とを分けているが、一つのＷｅｂ閲覧器の拡張機能として同時に実現してもよい。
【０１０２】
Ｗｅｂマッシュアップ設定装置１００は、Ｗｅｂ閲覧器１０１，切り取り元選定部１０２，範囲提示選定部１０３，貼り付け先選定部１０４，アノテーション管理部１０５を有する。
【０１０３】
範囲提示選定部１０３は、通常のＷｅｂ閲覧器１０１によるＷｅｂページの表示においてユーザの特定の操作を受けることで、切り取り範囲や貼り付け先の位置の候補をユーザのキーボードやマウス操作などによって提示する。範囲提示選定部１０３は、指定された操作（例えばｃｔｒｌ−ｃやｃｔｒｌ−ｖ）によって現在表示されている範囲に相当する木構造上の位置を返す。
【０１０４】
切り取り元選定部１０２はユーザの特定の操作によって切り取り候補の提示・取得作業を開始し、指示された範囲の切り取りを行う（実際には切り取り位置を取得する）。貼り付け先選定部１０４はユーザの特定の操作（例えば切り取り終了や特定のキー操作）によって貼り付け候補の提示・取得作業を開始し、指示された位置を貼り付け先と決定（実際には貼り付け位置を取得する）し、切り取り情報（切り取ったＷｅｂページのＵＲＩと切り取った部分のＸＰａｔｈ）と貼り付け情報（貼り付けるＷｅｂページのＵＲＩである貼り付け先ＵＲＩと貼り付け位置のＸＰａｔｈ）とをセットとしてアノテーション管理部１０５に渡す。
【０１０５】
アノテーション管理部１０５は与えられた切り取り情報と貼り付け情報とをセットにしたアノテーション情報の登録をアノテーション管理サーバ１２０に依頼する。なお、切り取りから貼り付けの間にはＷｅｂ閲覧器１０１による一般的なＷｅｂページ間の移動やＷｅｂページ内での移動などが行われる。
【０１０６】
Ｗｅｂ閲覧器１０１による一般的なＷｅｂページ間の移動やＷｅｂページ内での移動などの作業が一連の作業として行われることを前提とする場合は、切り取り情報を一時的にメモリに保持しても良いが、切り取り作業の終了時に切り取り情報を外部のファイルに書き込み、貼り付け作業の開始時に適切な切り取り情報を外部のファイルから取り出すという形態でも良い。
【０１０７】
アノテーション管理サーバ１２０は、アノテーションデータベース管理部１２１，アノテーションデータベース１２２を有する。アノテーションデータベース管理部１２１はＷｅｂマッシュアップ設定装置１００からの依頼を受け、切り取り情報と貼り付け情報とをセットとしたアノテーション情報をアノテーションデータベース１２２に登録する。
【０１０８】
また、アノテーションデータベース管理部１２１はＷｅｂマッシュアップ実現装置１１０からの依頼を受け、指定されたＵＲＩを貼り付け先ＵＲＩとして持つアノテーション情報を返す。なお、アノテーション管理サーバ１２０は、Ｗｅｂマッシュアップ設定装置１００及びＷｅｂマッシュアップ実現装置１１０と同一のコンピュータ上に実現しても構わないし、ネットワークを介して繋がった別のコンピュータ上に実現しても構わない。
【０１０９】
Ｗｅｂマッシュアップ実現装置１１０は、Ｗｅｂ閲覧器１１１，切り出し情報取得部１１２，正規化部１１３，貼り付け位置獲得部１１４，合成部１１５，アノテーション管理部１１６を有する。
【０１１０】
Ｗｅｂ閲覧器１１１は指定されたＵＲＩのコンテンツ（Ｗｅｂページ）をネットワークから取り込む。このとき、アノテーション管理部１１６は指定されたＵＲＩに付与されたアノテーション情報をアノテーション管理サーバ１２０に要求して受け取る。切り出し情報取得部１１２は受け取ったアノテーション情報の個々について、アノテーション情報に記述された切り取り元のＵＲＩをＷｅｂ閲覧器１１１に渡し、切り取り元のＵＲＩのコンテンツをネットワークから取り込み、アノテーション情報に記述された切り取り元のＸＰａｔｈの部分（ＨＴＭＬ断片）を切り出す。
【０１１１】
正規化部１１３は切り出されたＨＴＭＬ断片を、貼り付け先のＷｅｂページの環境に適合するように正規化する。貼り付け位置獲得部１１４はアノテーション情報に記述された貼り付け先のＸＰａｔｈからＨＴＭＬ断片を貼り付ける貼り付け位置を求める。
【０１１２】
合成部１１５は、貼り付け位置獲得部１１４が求めた貼り付け位置に正規化されたＨＴＭＬ断片を貼り付ける。なお、正規化されたＨＴＭＬ断片が合成部１１５により貼り付けられたＷｅｂページのＤＯＭツリーは、後述するように、レンダリングエンジンによってレンダリングされて表示される。
【０１１３】
図１３のＷｅｂマッシュアップ設定装置１００，Ｗｅｂマッシュアップ実現装置１１０及びアノテーション管理サーバ１２０は、例えば図１４に示すコンピュータシステムにより実現できる。
【０１１４】
図１４はコンピュータシステムの一例の構成図である。コンピュータシステムは、それぞれバスＢで相互に接続されている入力装置１５１，出力装置１５２，ドライブ装置１５３，補助記憶装置１５４，主記憶装置１５５，演算処理装置１５６及びインターフェース装置１５７を有する。
【０１１５】
入力装置１５１はキーボードやマウス等である。入力装置１５１は各種信号を入力するために用いられる。出力装置１５２はディスプレイ装置等である。出力装置１５２は各種ウインドウやデータ等を表示するために用いられる。インターフェース装置１５７はモデムやＬＡＮカードなどであり、ネットワークに接続する為に用いられる。
【０１１６】
本実施例のマッシュアッププログラムはＷｅｂマッシュアップ設定装置１００，Ｗｅｂマッシュアップ実現装置１１０を制御する各種プログラムに含まれる。マッシュアッププログラムは例えば記録媒体１５８の配布やネットワークからのダウンロードなどによって提供される。マッシュアッププログラムを記録した記録媒体１５８は、ＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスク等の様に情報を光学的，電気的或いは磁気的に記録する記録媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
【０１１７】
マッシュアッププログラムを記録した記録媒体１５８がドライブ装置１５３にセットされると、マッシュアッププログラムは記録媒体１５８からドライブ装置１５３を介して補助記憶装置１５４にインストールされる。
【０１１８】
ネットワークからダウンロードされたマッシュアッププログラムはインターフェース装置１５７を介して補助記憶装置１５４にインストールされる。補助記憶装置１５４はインストールされたマッシュアッププログラムを格納すると共に、必要なファイル，データ等を格納する。
【０１１９】
主記憶装置１５５は、コンピュータの起動時に補助記憶装置１５４からマッシュアッププログラムを読み出して格納する。そして、演算処理装置１５６は主記憶装置１５５に格納されたマッシュアッププログラムに従って、後述の各種処理を実現している。
【０１２０】
（マッシュアッププログラムがＷｅｂ閲覧器に適用された例）
図１５は、本実施例のマッシュアッププログラムを適用したＷｅｂ閲覧器の一例の構成図である。図１５のＷｅｂ閲覧器１６０は、典型的な構成を示したものであり、説明に不要なＣＳＳの処理やＰＤＦプラグイン等の細かい部分を省略している。
【０１２１】
ネットワークを経由して受信されたＨＴＭＬ文書１６１をＨＴＭＬパーサ１６２は解析して、木構造（DOMツリー）１６３を生成する。これと同時に、Ｊａｖａｓｃｒｉｐｔエンジン１６５はＨＴＭＬ文書１６１中にあったＪａｖａｓｃｒｉｐｔプログラム１６４を実行し、DOMツリー１６３の中身を書き換える。書き換えられたＤＯＭツリー１６３はレンダリングエンジン１６６に送られる。
【０１２２】
レンダリングエンジン１６６は送られてきたＤＯＭツリー１６３を画面で見える形に変換する。そして、ユーザインタフェース１６７を介したユーザの操作等によってＪａｖａｓｃｒｉｐｔエンジン１６５はＪａｖａｓｃｒｉｐｔプログラム１６４に従って、ＤＯＭツリー１６３を書き換え、表示させる内容を変化させる。マッシュアッププログラム１６８は、典型的にＷｅｂ閲覧器１６０の中に保持される（すなわち、Ｗｅｂ閲覧器１６０に組込まれる、あるいは機能拡張として付け加えられる形で実現される）。
【０１２３】
そして、読み込まれたＨＴＭＬ文書１６１のＪａｖａｓｃｒｉｐｔプログラム１６４が実行されるのに追加して、マッシュアッププログラム１６８は実行され、ＤＯＭツリー１６３を書き換える。
【０１２４】
なお、マッシュアッププログラム１６８が参照するアノテーションデータベース等のデータはＷｅｂ閲覧器１６０の外部に保持される。マッシュアッププログラム１６８を保持する別の実施形態としては、読み込まれるＨＴＭＬ文書１６１に、マッシュアッププログラム１６８を保持しておくことが考えられる。この実施形態では、適用できるＷｅｂページが限定されるが、Ｗｅｂ閲覧器１６０にマッシュアッププログラム１６８を保持するのと同じ効果を持たせることができる。
【０１２５】
以下では、図１３のシステムにおけるＷｅｂマッシュアップ設定装置１００及びＷｅｂマッシュアップ実現装置１１０の処理について説明する。
【０１２６】
（Ｗｅｂマッシュアップ設定装置１００）
Ｗｅｂマッシュアップ設定装置１００を組込んだ典型的なＷｅｂ閲覧器１０１は、切り取り元選定部１０２、範囲提示選定部１０３、貼り付け先選定部１０４、アノテーション管理部１０５を有する。
【０１２７】
図１６は、切り取り元選定部の処理を表したフローチャートである。切り取り元選定部１０２は、Ｗｅｂ閲覧器１０１に埋め込まれたコマンド（キー操作やメニュー、ボタンなど）により起動される。
【０１２８】
ステップＳ２１に進み、起動された切り取り元選定部１０２はモードを切り取りとして範囲提示選定部１０３を起動する。ステップＳ２２に進み、切り取り元選定部１０２は範囲提示選定部１０３から切り取り位置のノード（ＸＰａｔｈ）を受け取る。ステップＳ２３に進み、切り取り元選定部１０２は範囲提示選定部１０３から受け取った切り取り位置のノード（ＸＰａｔｈ）を切り取り情報として一時的に格納して終了する。
【０１２９】
図１７は、貼り付け先選定部の処理を表したフローチャートである。貼り付け先選定部１０４は、切り取り元選定部１０２の終了によって、あるいはＷｅｂ閲覧器１０１に埋め込まれたコマンド（キー操作やメニュー、ボタンなど）により起動される。
【０１３０】
ステップＳ３１に進み、起動された貼り付け先選定部１０４はモードを貼り付けとして範囲提示選定部１０３を起動する。ステップＳ３２に進み、貼り付け先選定部１０４は範囲提示選定部１０３から貼り付け位置のノード（ＸＰａｔｈ）を受け取る。
【０１３１】
ステップＳ３３に進み、貼り付け先選定部１０４はアノテーション管理部１０５を呼び出し、一時的に格納してあった切り取り情報と範囲提示選定部１０３から受け取った貼り付け位置のノード（ＸＰａｔｈ）である貼り付け情報とをセットにして、アノテーションデータベース１２２に登録する。
【０１３２】
図１８は、範囲提示選定部の処理を表したフローチャートである。範囲提示選定部１０３はユーザのアクション等により、切り取り位置、或いは、貼り付け位置のノード（ＸＰａｔｈ）を切り取り元選定部１０５又は貼り付け先選定部１０４に返すものである。具体的に範囲提示選定部１０３は、例えばマウスカーソルの移動によって現在注目している木構造上のノードを画面上で選定させ、木構造上のノードをマウスクリックによって確定させるものである。
【０１３３】
ステップＳ４１に進み、範囲提示選定部１０３は、現在が切り取り作業のための範囲提示なのか、貼り付け作業のための範囲提示なのかのモードを受け取る。例えば範囲提示選定部１０３は切り取り元選定部１０２から切り取り作業のための範囲提示であることを示す切り取りモードを受け付ける。また、範囲提示選定部１０３は貼り付け先選定部１０４から貼り付け作業のための範囲提示であることを示す貼り付けモードを受け付ける。範囲提示選定部１０３は受け付けたモードを起動させる。
【０１３４】
ステップＳ４２に進み、範囲提示選定部１０３は、画面上のマウスカーソルの位置を求める。ステップＳ４３に進み、範囲提示選定部１０３は画面上のマウスカーソルの位置に対応するＷｅｂページの木構造上の位置を求める。ステップＳ４４に進み、範囲提示選定部１０３は画面上のマウスカーソルの位置に対応するＷｅｂページの木構造上の位置から適切なノード（要素）を現在のノードとして求める。例えば範囲提示選定部１０３は文字や文字間（＃ｔｅｘｔノード）ならば、上位ノード（pノード、tdノード、h1ノードなど）を現在のノードとする。
【０１３５】
ステップＳ４５に進み、範囲提示選定部１０３は現在のノードを囲う枠をモードに合わせて表示する。範囲提示選定部１０３は例えば切り取り作業の枠の色と貼り付け作業の枠の色とを変更する。また、範囲提示選定部１０３はマウスカーサの動きにより枠を大きくしたり小さくしたりする。
【０１３６】
ステップＳ４６に進み、範囲提示選定部１０３は予め設定したアクション（マウスボタンをクリックするであるとか、指定されたキー入力など）による割り込みがあれば、その時点でのノード（枠が表示されている範囲）を切り取り元選定部１０２又は貼り付け先選定部１０４に返す。なお、範囲提示選定部１０３は予め設定したアクションによる割り込みがなければ、ステップＳ４２に戻り、処理を続ける。
【０１３７】
（Ｗｅｂマッシュアップ実現装置１１０）
本実施例のマッシュアッププログラム１６８を組み込んだＷｅｂ閲覧器（あるいは一般にＷｅｂクライアント）１１１は図１９に示すフローチャートのような動作を行う。図１９はＷｅｂマッシュアップ実現装置の処理を表したフローチャートである。
【０１３８】
図１９中、ステップＳ５１では、Ｗｅｂ閲覧器１１１が、表示するＷｅｂページのＵＲＩを受け取る。ステップＳ５２に進み、Ｗｅｂ閲覧器１１１は受け取ったＵＲＩで指定されるＷｅｂページをネットワークから読み込む。ステップＳ５３に進み、Ｗｅｂ閲覧器１１１は読み込んだＷｅｂページをパーサによって解析し、構造を抽出する。抽出された構造は木構造（ツリー）の形をとる（例えばＤＯＭツリー）。
【０１３９】
ステップＳ５４に進み、アノテーション管理部１１６は受け取ったＵＲＩをキーとしてアノテーション管理サーバ１２０にアクセスし、受け取ったＵＲＩが貼り付け先に指定されている全てのアノテーション情報を獲得する。そして、Ｗｅｂマッシュアップ実現装置１１０はステップＳ５４で獲得したアノテーション情報のそれぞれに対して以下の処理を行う。
【０１４０】
まず、ステップＳ５５に進み、切り出し情報取得部１１２は受け取ったアノテーション情報に記述された切り取り元のＵＲＩを獲得する。ステップＳ５６に進み、切り出し情報取得部１１２は獲得した切り取り元のＵＲＩをＷｅｂ閲覧器１１１に渡し、切り取り元のＵＲＩのＷｅｂページをネットワークから獲得する。ステップＳ５７に進み、Ｗｅｂ閲覧器１１１は獲得した切り取り元のＵＲＩのＷｅｂページを、ＨＴＭＬパーサ１６２で解析する。
【０１４１】
ステップＳ５８に進み、切り出し情報取得部１１２はアノテーション情報に記述された切り取り元のＸＰａｔｈから切り取り位置を求め、切り取り元のＷｅｂページの切り取り位置からＨＴＭＬ断片を取り出す。ステップＳ５９に進み、正規化部１１３は取り出されたＨＴＭＬ断片を、貼り付け先のＷｅｂページの環境に適合するように正規化する。
【０１４２】
ステップＳ６０に進み、貼り付け位置獲得部１１４はアノテーション情報に記述された貼り付け先のＸＰａｔｈと、ステップＳ５３で抽出された木構造とに基づき、ＨＴＭＬ断片を貼り付ける木構造上の貼り付け位置を獲得する。ステップＳ６１に進み、合成部１１５は貼り付け位置獲得部１１４が獲得した貼り付け位置に、正規化されたＨＴＭＬ断片を埋め込む（接ぎ木する）。
【０１４３】
ステップＳ５４で獲得したアノテーション情報のそれぞれに対するステップＳ５５〜Ｓ６１の処理が終了すると、Ｗｅｂ閲覧器１１１はステップＳ６２に進み、アノテーション情報のそれぞれのＨＴＭＬ断片が埋め込まれた木構造をレンダリングエンジン１６６に渡してレンダリングする。
【０１４４】
（本実施例におけるマッシュアップ方法の３つの実施形態）
本実施例におけるマッシュアップ方法を図１３のマッシュアップ装置に組込む典型的な実施形態としては、第１〜第３の実施形態がある。第１の実施形態は、切り取る位置を指定された時に、その時点で位置を拡張する方法である。第２の実施形態は、Webマッシュアップ実現時に位置を拡張する方法である。第３の実施形態は、ユーザインタフェースとして必要最小限の情報を含まない時に切り取りができないようにする方法である。
【０１４５】
以下、第１〜第３の実施形態について説明する。
【０１４６】
第１の実施形態は、Ｗｅｂマッシュアップ設定装置１００の切り取り元選択部１０２を拡張するものである。第１の実施形態では、切り取り範囲が指定された後、切り取り範囲を正規化する。この正規化された切り取り範囲をアノテーション管理部１０５に対して正規化切り取り範囲として与えることで、第１の実施形態はユーザが指定した切り取り範囲にかかわらず正規化した切り取り範囲が与えられるので、期待される機能が保持されたマッシュアップが可能となる。
【０１４７】
第２の実施形態は、Ｗｅｂマッシュアップ実現装置１１０の切り出し情報取得部１１２を拡張するものである。第２の実施形態ではアノテーション情報として実際に切り取った範囲（正規化前のもの）を保持しておく。第２の実施形態では、Ｗｅｂマッシュアップ実現装置１１０の切り出し情報取得部１１２がアノテーション情報として切り取り範囲が与えられる。切り出し情報取得部１１２は切り取り元のＷｅｂページからＨＴＭＬフラグメントを取得する前に、与えられた切り取り範囲を正規化して、正規化された範囲（正規化切り取り範囲）を用いて実際の切り取りを行う。
【０１４８】
このように第２の実施形態は、第１の実施形態と正規化するタイミングが異なる。第１の実施形態では切り取り時に１回だけ正規化を行えば良い。第２の実施形態ではマッシュアップされた情報を表示するWebマッシュアップ実現時に毎回正規化を行う必要がある。その代わり、第２の実施形態では切り取り時から貼り付け時の間にスクリプトの変更などがあった場合、新しいスクリプトに基づいて切り取り範囲等が決定されることになる。
【０１４９】
第３の実施形態は、Ｗｅｂマッシュアップ設定装置１００の範囲提示選定部１０３を拡張するものである。第３の実施形態では、ユーザインタフェースとして切り取れる範囲を提示する際に、木構造上の内部的に指し示しているノード（切り取り範囲）と正規化された切り取り範囲とを同時に持つようにする。
【０１５０】
第３の実施形態は、通常（特殊な操作をしない限り）、ユーザに正規化された範囲しか提示しないことで正規化された範囲でしか切り取れないようにするものである。第３の実施形態は、ユーザに対して何が起きているのかを示しやすくなる。なお、実施形態１〜３は複数を組み合わせることもあり得る。
【０１５１】
（切り取り範囲を拡張する第１の方法）
図５のような部品・構成タグ一覧テーブルは、部品タグと構成タグとの関係を保持したものである。部品タグは検索等の機能を実現するための部品であって単独では意味をなさない。構成タグは部品タグをまとめて機能を実現する為のスクリプト（プログラム）を呼び出す役割を果たす。
【０１５２】
図２０は未解決部品確認部の処理手順を表した一例のフローチャートである。ステップＳ７１に進み、未解決部品確認部１２は切り取り範囲をドキュメントツリーのノードとして受け取り、このノードを一つ含む探索リストを設定する。
【０１５３】
ステップＳ７２に進み、未解決部品確認部１２は探索リストが空になったら未解決部品ノードなしを返す。探索リストにメンバが存在するならば、未解決部品確認部１２はステップＳ７３に進み、メンバ（ノード）を一つ取り出し、取り出したメンバを探索リストから取り除く。
【０１５４】
ステップＳ７４に進み、未解決部品確認部１２は取り出したメンバが部品要素か否かを確認する。具体的に、未解決部品確認部１２は取り出したノードのタグ名が部品・構成タグ一覧テーブル１１に部品タグ名として登録されているか否かを確認する。
【０１５５】
取り出したノードのタグ名が部品タグとして登録されているならば未解決部品確認部１２は取り出したメンバが部品要素であると判定する。部品要素であると判定すれば、未解決部品確認部１２は未解決部品ノードありを返す。部品要素であると判定しなければ、未解決部品確認部１２はステップＳ７５に進み、ステップＳ７４と同様、取り出したメンバが構成要素か否かを確認する。構成要素であると判定すれば、未解決部品確認部１２はステップＳ７２に戻る。
【０１５６】
すなわち、未解決部品確認部１２はステップＳ７３で取り出したノードの下位構造に関しての探索を行わない。構成要素でないと判定すれば、未解決部品確認部１２はステップＳ７３で取り出したノードの子ノードが存在するならば、その子ノードをそれぞれ探索リストのメンバとしてつけ加えたあと、ステップＳ７２に戻る。すなわち、構成要素でなかった場合、未解決部品確認部１２はステップＳ７３で取り出したノードの下位構造も部品要素を探索することになる。
【０１５７】
図２１は、未解決部品確認部のオプションの処理手順を表した一例のフローチャートである。図２０のフローチャートでは、検索窓の中の文字列など、部品要素の内部が選択された場合に、部品要素ではないとしている。しかし、部品の内部の要素も部品であると考えるならば、未解決部品確認部１２は部品要素でないと判定されたときに、さらに図２１のフローチャートの処理を実行する。
【０１５８】
すなわち、未解決部品確認部１２はステップＳ８１に進み、オリジナルノード（切り取り範囲）を受け取る。ステップＳ８２に進み、未解決部品確認部１２は受け取ったオリジナルノードがトップノードか否かを判定する。トップノードでなければ、未解決部品確認部１２はステップＳ８３に進み、オリジナルノードが構成要素か否かを確認する。構成要素であると判定しなければ、未解決部品確認部１２はステップＳ８４に進み、オリジナルノードが部品要素か否かを判定する。部品要素であると判定しなければ、未解決部品確認部１２はステップＳ８５に進み、オリジナルノードを一つ上位ノードへ移動させたあとステップＳ８２に戻る。
【０１５９】
ステップＳ８２において、未解決部品確認部１２は受け取ったオリジナルノード又はステップＳ８５で移動されたノードがトップノードであれば、オリジナルノードが部品要素の部分でないと判定する。ステップＳ８３において、受け取ったオリジナルノード又はステップＳ８５で移動されたノードが構成要素であれば、未解決部品確認部１２はオリジナルノードが部品要素の部分でないと判定する。
【０１６０】
ステップＳ８４において、未解決部品確認部１２は受け取ったオリジナルノード又はステップＳ８５で移動されたノードが部品要素であれば、オリジナルノードが部品要素の部分であると判定する。
【０１６１】
図２１のフローチャートの処理において、未解決部品確認部１２はオリジナルノードからノードを順に上位ノードへ辿っていき、構成要素や部品要素が見つからないままトップノードに辿り着いたならば、オリジナルノードが部品要素の部分でないと判定する。先に構成要素が見つかった場合も、未解決部品確認部１２はオリジナルノードが部品要素の部分でないと判定する。先に部品要素が見つかった場合、未解決部品確認部１２はオリジナルノードが部品要素の内部であったと判定する。なお、本実施例では、例えば、検索のボタンとボタンとの間にある文字列を部品要素と考えないことになる。
【０１６２】
図２２は関連構成取得部の処理手順を表した一例のフローチャートである。ステップＳ９１に進み、関連構成取得部１３はオリジナルノード（切り取り範囲）を受け取る。ステップＳ９２に進み、関連構成取得部１３はオリジナルノードを一つ上位ノードへ移動させる。ステップＳ９３に進み、関連構成取得部１３はステップＳ９２で移動されたノードが構成要素でなければステップＳ９２に戻り処理を繰り返す。ステップＳ９２で移動されたノードが構成要素であれば、関連構成取得部１３はステップＳ９２で移動されたノードを正規化された範囲（正規化切り取り範囲）として返す。
【０１６３】
図２２のフローチャートの処理において、関連構成取得部１３は切り取られた範囲に未解決部品要素があると未解決部品確認部１２に判定された場合に呼び出される。関連構成取得部１３では切り取られた範囲であるドキュメントツリーのノードを起点として、上位ノードへ一つずつ辿っていく。辿ったところのノードが構成要素であったら、関連構成取得部１３は構成要素（構成ノードをルートとするサブツリー）を正規化切り取り範囲として返す。
【０１６４】
（切り取り範囲を拡張する第２の方法）
図２３は切り取り範囲を拡張する第２の方法の処理手順を表した一例のフローチャートである。ステップＳ１０１の処理は、上記した切り取り範囲を拡張する第１の方法と同様であるため説明を省略する。
【０１６５】
ステップＳ１０２に進み、アクション取得部３２はステップＳ１０１で正規化された範囲（正規化切り取り範囲）以下の構造において、まず他のアクション要素において定義される関数や変数等の識別子の参照を含むかどうか判定する。関数や変数等の識別子はスクリプト内部に記述される。したがって、アクション取得部３２は、簡易的に、スクリプトのソースが記述されているかどうかで判定する。
【０１６６】
具体的に、ステップＳ１０２の参照を含むかどうかの判定は、スクリプトソース記述可能属性テーブルの要素・属性の有無にしたがって判定される。図２４はスクリプトソース記述可能属性テーブルの一例の構成図である。なお、図２４のスクリプトソース記述可能属性テーブルにおけるコメントは説明の為に付けたものであり、必須でない。
<form>
<input type="button" value="Click!" onClick="ソース記入">
</form>
【０１６７】
上記のform要素はonClick属性の値としてスクリプトのソースが記述されている例である。スクリプトソースが記述される可能性のあるのは図２４のスクリプトソース記述可能属性テーブルに示した、form要素に記述されるonreset属性、onsubmit属性などのフォーム要素イベント属性や、html、head、titleなどのいくつかの要素を除いた様々な要素において記述可能なonclick属性、onmousedown属性などのマウスイベント属性がある。また、スクリプトはaタグのhref属性の値として以下のように記述されることもある。
<a href="JavaScript:ソース記入">ここをクリック</a>
【０１６８】
正規化切り取り範囲内に上記のようなスクリプトを何も含まない場合、アクション取得部３２は特に何もすることはなく、そのまま正規化切り取り範囲を返す。正規化切り取り範囲内に上記のようなスクリプトを含む場合、アクション取得部３２は参照を含む可能性があると判定して、以下の処理を行う。
【０１６９】
ステップＳ１０３に進み、アクション取得部３２はドキュメントツリーのトップに焦点を当て、ドキュメントツリーのトップ以下の各ノードを順に辿る。木構造の探索は一般に良く知られたアルゴリズムであるので説明を省略する。ここではアクション取得部３２が深さ優先探索で木構造のノードを順に辿るものとする。
【０１７０】
ステップＳ１０４に進み、アクション取得部３２は巡るノードが有るか無いかで探索終了か否かを判定する。辿るノードがあるならば、アクション取得部３２はステップＳ１０５に進み、焦点を次のノードに移す。ステップＳ１０６に進み、アクション取得部３２はステップＳ１０５で焦点を当てたノードがアクション要素かどうかを判定する。
【０１７１】
具体的に、アクション取得部３２はアクション要素テーブルに基づき、入力フォームを構成するform要素、スクリプトを記述するscript要素などをアクション要素として判定する。
【０１７２】
ステップＳ１０５で焦点を当てたノードがアクション要素であった場合、アクション要素管理部３３はステップＳ１０７に進み、ステップＳ１０５で焦点を当てたノード以下をアクション要素としてアクション要素集合に追加登録する。また、ステップＳ１０５で焦点を当てたノード以下をアクション要素として登録するので、アクション取得部３２はステップＳ１０５で焦点を当てたノード以下の木構造の個別の探索が不要なので、焦点をステップＳ１０５で焦点を当てたノードの最後のノードまで移動する。
【０１７３】
辿るノードが無くなるまで、アクション取得部３２はステップＳ１０４〜Ｓ１０７の処理を繰り返し行う。辿るノードが無くなる、言い換えれば、ドキュメントツリー全体の探索が終了したならば、アクション要素集合出力部３４は登録されているアクション要素集合をアクション要素集合テーブル３１から出力する。
【０１７４】
（切り取り範囲を拡張する第３の方法）
図２５は切り取り範囲を拡張する第３の方法の処理手順を表した一例のフローチャートである。図２５のフローチャートでは正規化切り取り範囲とアクション要素との関連度が高いか否かを判定し、正規化切り取り範囲と関連度が高いアクション要素をアクション要素集合に登録するものである。
【０１７５】
ステップＳ１１１〜Ｓ１１６の処理は図２３のステップＳ１０１〜Ｓ１０６の処理と同様であるため、説明を省略する。ステップＳ１１５で焦点を当てたノードがアクション要素であった場合、アクション要素取捨選択部３５はステップＳ１１７に進み、正規化切り取り範囲とアクション要素との関連度が高いか否かを図２６のフローチャートに示す処理により判定する。
【０１７６】
図２６は正規化切り取り範囲とアクション要素との関連度を判定する処理手順を表した一例のフローチャートである。ステップＳ１２１に進み、アクション要素取捨選択部３５はステップＳ１１５で焦点を当てたアクション要素が内部に関数定義も変数定義もないscriptであるか否かを判定する。
【０１７７】
ステップＳ１１５で焦点を当てたアクション要素が内部に関数定義も変数定義もないscriptであれば、アクション要素取捨選択部３５は正規化切り取り範囲とアクション要素との関連度が低いと判定する。
【０１７８】
ステップＳ１１５で焦点を当てたアクション要素が内部に関数定義も変数定義もないscriptでなければ、アクション要素取捨選択部３５はステップＳ１２２に進む。ステップＳ１２２に進み、アクション要素取捨選択部３５はステップＳ１１５で焦点を当てたアクション要素がすべてのinputのtypeがhiddenなform要素であるか否かを判定する。ステップＳ１１５で焦点を当てたアクション要素がすべてのinputのtypeがhiddenなform要素であれば、アクション要素取捨選択部３５は正規化切り取り範囲とアクション要素との関連度が高いと判定する。
【０１７９】
ステップＳ１１５で焦点を当てたアクション要素が、全てのinputのtypeがhiddenなform要素でなければ、アクション要素取捨選択部３５はステップＳ１２３に進む。ステップＳ１２３に進み、アクション要素取捨選択部３５はステップＳ１１５で焦点を当てたアクション要素が、hiddenでないinputを持つform要素であるか否かを判定する。
【０１８０】
ステップＳ１１５で焦点を当てたアクション要素が、hiddenでないinputを持つform要素であれば、アクション要素取捨選択部３５は正規化切り取り範囲とアクション要素との関連度が低いと判定する。
【０１８１】
ステップＳ１１５で焦点を当てたアクション要素が、hiddenでないinputを持つform要素でなければ、アクション要素取捨選択部３５は正規化切り取り範囲とアクション要素との関連度を判定する残りの処理を行う。ステップＳ１２１〜Ｓ１２３は正規化切り取り範囲とアクション要素との関連度を判定する処理の一例である。
【０１８２】
図２５のステップＳ１１７に戻り、アクション要素取捨選択部３５は正規化切り取り範囲とアクション要素との関連度が高いと判定すると、ステップＳ１１８に進み、ステップＳ１１５で焦点を当てたノード以下をアクション要素としてアクション要素集合に追加登録する。また、ステップＳ１０５で焦点を当てたノード以下をアクション要素として登録するので、アクション取得部３２はステップＳ１１５で焦点を当てたノード以下の木構造の個別の探索が不要なので焦点をステップＳ１１５で焦点を当てたノードの最後のノードまで移動する。
【０１８３】
辿るノードが無くなるまで、アクション取得部３２はステップＳ１１４〜Ｓ１１８の処理を繰り返し行う。辿るノードが無くなる、言い換えれば、ドキュメントツリー全体の探索が終了したならば、アクション要素集合出力部３４は登録されているアクション要素集合をアクション要素集合テーブル３１から出力する。
【０１８４】
切り取り範囲を拡張する第２の方法では、正規化切り取り範囲にスクリプト記述が存在すれば参照を含むとして、ドキュメントツリーにあるすべてのform要素やscript要素の集合をアクション要素集合として正規化切り取り範囲に加えている。しかし、切り取り範囲を拡張する第２の方法では、不必要な（場合によっては副作用を起こす）アクション要素も正規化切り取り範囲に含めてしまうことになる。
【０１８５】
実際には、いくつかのヒューリスティックスによって、正規化切り取り範囲に含むべき要素を篩にかけることができる。単純なヒューリスティックスとしては、アクション要素そのものだけで判断するものがある。例えばスクリプトを含むが、スクリプト内部に関数定義も変数設定も存在しない要素やhiddenでないinputを持つform要素はアクション要素として含めない具体例である。切り取り範囲を拡張する第３の方法は、いくつかのヒューリスティックスによって、正規化切り取り範囲に含むべき要素を篩にかけるものである。
【０１８６】
（切り取り範囲を拡張する第４の方法）
図２７は切り取り範囲を拡張する第４の方法の処理手順を表した一例のフローチャートである。ステップＳ１３１に進み、識別子管理部３８はアクション要素の参照・定義表を作成する。
【０１８７】
識別子参照定義関係取得部３６はアクション要素のそれぞれに対して、そのアクション要素内部でどのような識別子が定義されているのか、またどのような識別子が参照されているのかを求め、識別子管理部３８にアクション要素の参照・定義表を設定させる。
【０１８８】
なお、アクション要素は、具体的にドキュメントツリー上の位置（例えばXPath）として保持される。例えば、アクション要素の参照・定義表は図２８のようになる。図２８はアクション要素の参照・定義表の一例の構成図である。アクション要素は直接記述されたスクリプトのみではない。アクション要素は外部ファイルを参照している場合に、その外部ファイルを取り込んで、その外部ファイルの内容であるスクリプトから識別子を取り出す。なお、スクリプトの解析技術はパージング技術として良く知られているため、詳細を省く。
【０１８９】
ステップＳ１３２に進み、識別子参照定義関係取得部３６は正規化切り取り範囲にあるアクション要素から識別子の定義と識別子の参照を取り出す。また、ステップＳ１３３に進み、識別子管理部３８は識別子管理表の設定を行う。識別子管理表は識別子欄，参照欄及び定義済欄を持たせる。ステップＳ１３２でアクション要素から取り出された識別子の定義と識別子の参照とから識別子管理部３８は識別子管理表を設定する。
【０１９０】
例えば正規化切り取り範囲が以下のform要素であったとする。
<form style="margin: 0px;" id="fm1" name="fm1" onSubmit="return goF2('fm1')">
<input name="q" autocomplete="off" value="" size="35" class="j12" accesskey="e" type="text" />
<input value="検索" class="j12" onclick="return goF1('fm1')" type="button" />
<input value="クリア" onclick="javascript:wordClear('fm1')" class="j12" type="button" />
</form>
【０１９１】
上記のform要素の場合、識別子管理表にはgoF2とgoF1、wordClearが参照される識別子として図２９のように定義される。図２９は識別子管理表の一例の構成図である。
【０１９２】
ステップＳ１３４に進み、識別子定義元アクション要素取得部３７は図２９の識別子管理表において、参照欄に「〇」があるが定義済欄に「〇」がない識別子が存在するかどうかチェックする。参照欄に「〇」があるが定義済欄に「〇」がない識別子は未定義識別子である。
【０１９３】
未定義識別子があれば、識別子定義元アクション要素取得部３７はステップＳ１３５に進み、未定義識別子の一つを取り出す。ここでは、goF2を選んだとする。ステップＳ１３６に進み、識別子定義元アクション要素取得部３７はアクション要素の参照・定義表から未定義識別子(goF2）を解決する（定義している）アクション要素を取り出す（上の例では/html/head/script[3] が取り出される）。
【０１９４】
ステップＳ１３７に進み、識別子定義元アクション要素取得部３７はステップＳ１３６で取り出したアクション要素を、アクション要素集合に付け加える。ステップＳ１３８に進み、ステップＳ１３６で取り出したアクション要素では、goF1，goF2，goF3が定義され、checkWordが参照されているので、識別子管理表のgoF1とgoF2を定義済にする。
【０１９５】
また、識別子定義元アクション要素取得部３７はgoF3を識別子管理表に追加して定義済にする。さらに、識別子定義元アクション要素取得部３７はwordClearを識別子管理表に加えて、参照欄に「〇」をする。その結果、識別子管理表は図３０のようになる。
【０１９６】
ステップＳ１３８に進み、識別子定義元アクション要素取得部３７は未定義な識別子が無くなるまで、ステップＳ１３４〜Ｓ１３８のアクション要素の追加を繰り返す。未定義な識別子がなくなったら、アクション要素集合出力部３４は登録されているアクション要素集合をアクション要素集合テーブル３１から出力する。
【０１９７】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。なお、マッシュアップ装置は図１３のＷｅｂマッシュアップ設定装置１００を有する形態、Ｗｅｂマッシュアップ設定装置１００及びＷｅｂマッシュアップ実現装置１１０を有する形態、Ｗｅｂマッシュアップ設定装置１００，Ｗｅｂマッシュアップ実現装置１１０及びアノテーション管理サーバ１２０を有する形態など、様々な形態をとることができる。
【符号の説明】
【０１９８】
１    検索窓の部分
２，３，４，１５    赤枠
１１    部品・構成タグ一覧テーブル
１２    未解決部品確認部
１３    関連構成取得部
２０〜２５    ノード
３１    アクション要素集合テーブル
３２    アクション取得部
３３    アクション要素管理部
３４    アクション要素集合出力部
３５    アクション要素取捨選択部
３６    識別子参照定義関係取得部
３７    識別子定義元アクション要素取得部
３８    識別子管理部
１００    Ｗｅｂマッシュアップ設定装置
１０１，１１１    Ｗｅｂ閲覧器
１０２    切り取り元選定部
１０３    範囲提示選定部
１０４    貼り付け先選定部
１０５，１１６    アノテーション管理部
１１０    Ｗｅｂマッシュアップ実現装置
１１２    切り出し情報取得部
１１３    正規化部
１１４    貼り付け位置獲得部
１１５    合成部
１２０    アノテーション管理サーバ
１２１    アノテーションデータベース管理部
１２２    アノテーションデータベース
１５１    入力装置
１５２    出力装置
１５３    ドライブ装置
１５４    補助記憶装置
１５５    主記憶装置
１５６    演算処理装置
１５７    インターフェース装置
１５８    記録媒体
１６０    Ｗｅｂ閲覧器
１６１    ＨＴＭＬ文書
１６２    ＨＴＭＬパーサ
１６３    ＤＯＭツリー
１６４    Ｊａｖａｓｃｒｉｐｔプログラム
１６５    Ｊａｖａｓｃｒｉｐｔエンジン
１６６    レンダリングエンジン
１６７    ユーザインタフェース
１６８    マッシュアッププログラム
【図１】
0005476867.tif 000002
【図２】
0005476867.tif 000003
【図３】
0005476867.tif 000004
【図４】
0005476867.tif 000005
【図５】
0005476867.tif 000006
【図６】
0005476867.tif 000007
【図７】
0005476867.tif 000008
【図８】
0005476867.tif 000009
【図９】
0005476867.tif 000010
【図１０】
0005476867.tif 000011
【図１１】
0005476867.tif 000012
【図１２】
0005476867.tif 000013
【図１３】
0005476867.tif 000014
【図１４】
0005476867.tif 000015
【図１５】
0005476867.tif 000016
【図１６】
0005476867.tif 000017
【図１７】
0005476867.tif 000018
【図１８】
0005476867.tif 000019
【図１９】
0005476867.tif 000020
【図２０】
0005476867.tif 000021
【図２１】
0005476867.tif 000022
【図２２】
0005476867.tif 000023
【図２３】
0005476867.tif 000024
【図２４】
0005476867.tif 000025
【図２５】
0005476867.tif 000026
【図２６】
0005476867.tif 000027
【図２７】
0005476867.tif 000028
【図２８】
0005476867.tif 000029
【図２９】
0005476867.tif 000030
【図３０】
0005476867.tif 000031