(57)【特許請求の範囲】
【請求項１】
コンピュータにより実行される、ＨＴＴＰ（HyperText  Transfer  Protocol）を用いてデータを取得する方法であって、
１）ＧＥＴメソッドで渡せない長さのデータを記憶手段から読み出しＧＥＴメソッドで渡せる長さの複数のデータ片に分割して記憶手段に格納するステップと、
２）分割したデータ片の数に対応する数のプログラム実行領域を生成するステップと、
３）前記記憶手段に格納したデータ片を前記生成した各プログラム実行領域にＧＥＴメソッドにて分配するステップと、
４）ＧＥＴメソッドによりデータ片を受け取った各プログラム実行領域においてそれぞれ転送プログラムを実行し、各転送プログラムがデータ連結を行うプログラムの実行領域を探索するステップと、
５）前記各転送プログラムから前記探索したデータ連結を行うプログラムの実行領域に前記データ片を渡すステップと、
６）この各データ片を受け取ったプログラム実行領域において連結プログラムを作動し、この連結プログラムが前記各データ片を連結して前記ＧＥＴメソッドで渡せない長さのデータの一部又は全てを再構成し記憶手段に格納するステップと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、GETメソッドで長いデータを取得する方法に関する。
【背景技術】
【０００２】
従来、HTTP（HyperText Transfer Protocol）のGETメソッドでデータを渡す場合、GETメソッドで渡すことのできる文字列の長さには限界があった。【０００３】
出願人は、これに関する公知技術文献の存在を知らない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は、GETメソッドを利用して、従来GETメソッドで渡せない長さのデータを渡すことを課題とする。
【課題を解決するための手段】
【０００５】
本発明では、コンピュータが以下のステップを実行する。
１）GETメソッドで渡せない長さのデータを記憶手段から読み出しGETメソッドで渡せる長さの複数のデータ片に分割して記憶手段に格納するステップ、
２）分割したデータ片の数に対応する数のプログラム実行領域を生成するステップ、
３）前記記憶手段に格納したデータ片を前記生成した各プログラム実行領域にGETメソッドにて分配するステップ、
４）GETメソッドによりデータ片を受け取った各プログラム実行領域においてそれぞれ転送プログラムを実行し、各転送プログラムがデータ連結を行うプログラムの実行領域を探索するステップ、
５）前記各転送プログラムから前記探索したデータ連結を行うプログラムの実行領域に前記データ片を渡すステップ、
６）この各データ片を受け取ったプログラム実行領域において連結プログラムを作動し、この連結プログラムが前記各データ片を連結して前記GETメソッドで渡せない長さのデータの一部又は全てを再構成し記憶手段に格納するステップ。
【発明の効果】
【０００６】
これによると、長いデータをGETメソッドで渡せる長さのデータ片に分割し、GETメソッドを利用してデータ片を渡した後に、データ片を連結してデータの一部又は全てを再構成するので、GETメソッドを利用して従来の限界より長いデータを渡すことができる。
【発明を実施するための最良の形態】
【０００７】
［実施形態１］【０００８】
以下、本願の第１発明に対応する実施形態を図面を参照しつつ説明する。【０００９】
［構成の説明］【００１０】
図１において、ドメイン（１）のHTTPサーバは、サーバコンピュータにより実行される。図中、ドメイン（１）のHTTPサーバを２つ図示しているが、これは図示の便宜によるもので、両者は同一のHTTPサーバを示している。同じく、ドメイン（２）のHTTPサーバがサーバコンピュータにより実行されている。HTTPサーバが取り扱うデータやプログラムは、すべてサーバコンピュータが備えるHDD（Hard Disk Drive）等の記憶手段との間で入出力される。【００１１】
一方、これらのHTTPサーバを利用するHTTPクライアントはクライアントコンピュータによって実行される。HTTPクライアントは、ドメイン（１）のHTTPサーバと通信するものと、ドメイン（２）のHTTPサーバと通信するものとの2種類が登場するが、詳しくは動作説明において述べる。HTTPクライアントが取り扱うデータやプログラムは、すべてクライアントコンピュータの備えるHDD等の記憶手段との間で入出力される。本実施形態では、HTTPクライアントとして、マイクロソフト社のインターネットエクスプローラを同社のWindows（登録商標）のOS環境で利用していることを想定している。【００１２】
［動作説明］【００１３】
次に、全体の動作説明を図中のＡ〜Ｆの矢印に沿って、説明する。以下の種々のプログラムの動作は、コンピュータがそのプログラムを実行することにより実現される。【００１４】
［動作Ａ］【００１５】
クライアントコンピュータのユーザは、入力装置を操作し、コンテンツプログラムの読み込みをHTTPクライアントに要求する。この要求を受けたHTTPクライアントは、ドメイン（１）のHTTPサーバに対し、コンテンツプログラムの提供を要求する。【００１６】
ドメイン（１）のHTTPサーバは、要求されたコンテンツプログラムを記憶手段から読み出し、要求元のHTTPクライアントに提供する。【００１７】
ここで、コンテンツプログラムは、本実施形態において、クライアントコンピュータのユーザに対し種々の情報を提供するＨＴＭＬとする。このＨＴＭＬには、Javascript（登録商標）のロジックを含み、以下、このロジックをデータ要求プログラム（第１プログラム）と呼ぶ。【００１８】
コンテンツプログラムの提供を受けたドメイン（１）のHTTPクライアントは、データ要求プログラムを含むコンテンツプログラム（主プログラム）を実行する。【００１９】
コンテンツプログラムは、表示装置等の出力装置を介してクライアントコンピュータのユーザに所定の情報を提供する。また、コンテンツプログラムは、データ要求プログラムの実行段になると、データ要求プログラムを作動する。ここで、データ要求プログラムには、所定のコールバック関数が実装されていることを想定している。データ要求プログラムの実行は、例えば、ユーザがデータ要求プログラムの実行を入力装置から指示したときに行ってもよい。【００２０】
［動作BおよびＣ］【００２１】
データ要求プログラムは、ドメイン（１）のコンテンツプログラムが、ドメイン（２）のHTTPサーバから提供されるデータを利用するために動作する。データ要求プログラムは、まず、ドメイン（２）と通信するHTTPクライアントを起動し、このHTTPクライアントに、ドメイン（２）のHTTPサーバからデータ取得プログラムおよびデータ分配プログラムを取得させる。ここで、データ取得プログラムおよびデータ分配プログラムは、Javascript（登録商標）のロジックとしてHTMLに含まれている。このドメイン（２）のHTTPサーバへのリクエストは、本実施形態においてGETメソッドにより行う。データ要求プログラムは、このGETメソッドをドメイン（２）のHTTPクライアントに指示する際に、データ要求プログラムの識別子ｉｄを出力し、データ分配プログラムがデータ要求プログラムのidを取得できるようにする。即ち、Javascript（登録商標）のプログラムでは、locationオブジェクトのプロパティを参照することによって当該プログラムを実行しているブラウズ領域にて表示されるHTMLのURI（Uniform Resource Identifier）に関する情報を取得できるので、ドメイン（２）のHTTPクライアントにGETメソッドを指示する際に、引数としてデータ要求プログラムの識別子ｉｄを渡せば、ドメイン（２）のHTTPクライアントで実行されるデータ分配プログラムはデータ要求プログラムの識別子ｉｄを取得することが可能となる。（尚、以降においても、特に断りのない限り、GETメソッドの引数としてHTMLブラウズ領域間でデータを渡す際には、同じ原理を利用している。）ここで、識別子ｉｄは、例えばデータ要求プログラムの関数名やコールバック関数の関数名のようなものでよい。ここまでの処理を終えたデータ要求プログラムは、コールバック関数が処理を待つ状態になる。その間コンテンツプログラムは他の処理を継続することができる。【００２２】
ドメイン（２）のHTTPサーバは、ドメイン（２）のHTTPクライアントからの要求を受け、データ取得プログラムおよびデータ分配プログラムを準備し、ドメイン（２）のHTTPクライアントに提供する。データ分配プログラムには、データ要求プログラムのidが渡される。【００２３】
データ取得プログラムおよびこの提供を受けたHTTPクライアントは、まず、データ取得プログラム（第２プログラム）を実行する。データ取得プログラムは、ドメイン（１）のコンテンツプログラムが利用を欲するデータを、ドメイン（２）のHTTPサーバから取得する動作を行う。データ取得プログラムは、例えば、入力装置からのイベントをトリガーとして所定のデータの取得をドメイン（２）のHTTPサーバに対し要求する。この要求を受けたドメイン（２）のHTTPサーバは、要求されたデータを準備し、データ取得プログラムに提供する。データ取得プログラムはドメイン（２）のHTTPサーバから取得したデータを記憶手段に格納する。【００２４】
［動作ＤおよびＥ］【００２５】
続いて、ドメイン（２）のHTTPクライアントは、データ分配プログラム（第２プログラム）を実行する。データ分配プログラムは、データ取得プログラムが記憶手段に格納したデータがGETメソッドで授受可能な長さであるかを判断し、GETメソッドで授受可能な長さを超えている場合は、GETメソッドで授受可能な長さのデータに分割し、分割した各データ片ｖに通し番号ｐを付加する。また、先頭のデータ片に分割したデータ片の個数numを付加する。そして、データ分配プログラムは、これらのデータ片と付加情報との関連付けを記憶手段に格納する。【００２６】
続いて、データ分配プログラムは、ドメイン（１）のHTTPサーバと通信するHTTPクライアントを起動すると共に、当該HTTPクライアントが管理するプログラム実行領域を先ほど分割したデータ片の数だけ生成させる。本実施形態では、データの分割数が3個であると仮定し、プログラム実行領域（１）〜（３）を図示した。このプログラム実行領域は、本実施形態において、iframeタグにより生成するフレームとする。また、データ分配プログラムは、先ほど分割した各データ片を記憶手段から読み出し、各データ片を個別に個々のプログラム実行領域（１）〜（３）に分配する。この際、ＧＥＴメソッドを用いる。【００２７】
データ分配プログラムは、プログラム実行領域（１）〜（３）にそれぞれＧＥＴ文を与える。各ＧＥＴ文には、先ほど分割したデータ片をＧＥＴ文の引数として添付する。更に、各ＧＥＴ文にはデータ片だけでなく、各データ片に関連付けた付加情報とデータ要求プログラムのidも引数として添付する。【００２８】
具体的には、プログラム実行領域（１）に実行させるGET文の引数には、データ要求プログラムのidと、データ片の分割数num=３と、データ片の通し番号p=0と、先頭のデータ片v=データ片（1）とを添付する。プログラム実行領域（２）に実行させるGET文の引数には、データ要求プログラムのidと、データ片の通し番号p=1と、2番目のデータ片v=データ片（２）とを添付する。プログラム実行領域（３）に実行させるGET文の引数には、データ要求プログラムのidと、データ片の通し番号p=2と、3番目（末尾）のデータ片v=データ片（３）とを添付する。【００２９】
また、各GET文がリクエストするアドレスは、ドメイン（１）のHTTPサーバが提供する転送プログラムのアドレスとする。【００３０】
このGET文を各プログラム実行領域（１）〜（３）に渡すことにより、ドメイン（２）のHTTPサーバから取得したデータのデータ片がドメイン（１）のHTTPクライアントに渡ることになる。【００３１】
各プログラム実行領域（１）〜（３）からのGETリクエストを受けたドメイン（１）のHTTPサーバは、要求された転送プログラムを記憶手段から読み出し、各プログラム実行領域（１）〜（３）に提供する。【００３２】
一方、データを分割せずにGETメソッドで渡せる長さであれば、プログラム実行領域は１つだけ生成すれば足りる。この際、データ分割数num＝１とすればよいだろう。【００３３】
［動作Ｆ］【００３４】
各プログラム実行領域（１）〜（３）は、ドメイン（１）のHTTPサーバから提供された転送プログラム（第３プログラム）を実行する。転送プログラムはJavascript（登録商標）のロジックを含むHTMLとする。【００３５】
各転送プログラム（１）〜（３）は、まず、データ要求プログラムが実行されているHTTPクライアントを把握する。この方法は、本実施形態において、windowオブジェクトのself.parent.parentプロパティを参照することにより把握することができる。【００３６】
続いて、各転送プログラム（１）〜（３）は、GET文によりデータ分配プログラムから渡されたデータ要求プログラムのidと、データ片の分割数numと、データ片の通し番号ｐと、データ片の実体ｖとを関連付け、それらをデータ要求プログラムを実行中のHTTPクライアントに引き渡す。この引渡しは、各転送プログラム（１）〜（３）から同一のHTTPクライアントに対し個別に行われる。これらの情報を受けたHTTPクライアントは、データ要求プログラムのidに基づいて処理待ち状態のデータ要求プログラムを探し、そのデータ要求プログラムに、各転送プログラムからのデータ分割数numの値と、データ片の通し番号ｐおよびデータ片ｖの関連付けと、を引き渡す（本実施形態においてnumの値は転送プログラム（１）からのみ提供される）。
ここで、各転送プログラムからデータ要求プログラムへのデータの引渡しは、各転送プログラムがデータ要求プログラムを呼ぶ処理と同時に行うことができる。例えば、コンテンツプログラム中にあるデータ要求プログラムのコールバック関数が「cbfunc」という名前の関数であるとする。同関数は、転送プログラムから見て、親の親に実装されている関数なので、転送プログラムのロジック内で、self.parent.parent.cbfunc(arg1,arg2,...)を実行することにより、引数arg1，arg2，・・・がデータ要求プログラムへ引き渡される。【００３７】
ドメイン（１）のHTTPクライアントから同じドメイン（１）のHTTPクライアントへ値を渡すことになるので、HTTPクライアントのセキュリティ制限の範囲内で値を渡すことができる。【００３８】
データ要求プログラムは、この値を受けて処理を再開し、まず、データ分割数numに対応する数のデータ片ｖを受信したか判断し、分割したすべてのデータ片が揃っていれば、各データ片ｖをデータ片の通し番号ｐの順序に並べて連結し、これにより、ドメイン（２）のHTTPサーバから提供されたデータを再構成する。【００３９】
そして、データ要求プログラムは、再生したデータをコンテンツプログラムに渡し、コンテンツプログラムは、当該ドメイン（２）のHTTPサーバから提供されたデータに基づいてユーザへ提供するサービスを変更することが可能となる。【００４０】
［適用の具体例］【００４１】
例えば、ドメイン（２）のHTTPサーバにユーザ認証の機能を持たせ、ドメイン（１）のコンテンツがドメイン（２）のユーザ認証の結果データを利用して、ユーザに提供するサービスを区別することが考えられる。【００４２】
［実施形態１の効果］【００４３】
コンテンツの製作者は、製作者サイドで必要なスクリプト言語の記述を用意するだけで別ドメインの認証サービス等のデータを利用することができる。このため、例えばセキュリティに優れたECサイト等を簡単に構築することができ、かつ、サーバサイドの作りこみを新たに行うことなく別ドメインのデータを利用することができる。また、ＧＥＴメソッドで渡すことのできない長いデータでも、データ片に分割してＧＥＴメソッドを利用し、コンテンツプログラムを実行するHTTPクライアントの側でデータ片を連結しデータを再生するので長いデータに対してもＧＥＴメソッドを利用してデータを渡すことができる。【００４４】
［変形例］【００４５】
本発明は上記実施形態に限られない。例えば、データ分配プログラムがドメイン（１）に開くプログラム実行領域はiframeタグによるフレームに限らず、プログラム実行領域ごとに個別のwindowオブジェクトを開いてもよい。また、データ分割数numの値を先頭のデータ片だけに関連付ける実施形態としたが、すべてのデータ片にデータ分割数numを関連付けることも考えられるし、逆に、データ片にはデータ分割数を関連付けずに、データ分割数numの値だけを渡すプログラム実行領域を一つ多く生成して値を渡してもよい。【００４６】
また、データ分配プログラムからドメイン（１）のプログラム実行領域へデータを渡す他の方法としてはGETメソッドを用いずにPOSTメソッドを利用する方法もある。この場合、例えば、ドメイン（１）のHTTPサーバにPOSTに対応するCGI等を予め準備しておき、データ分配プログラムはデータをPOSTでドメイン（１）のHTTPサーバに渡し、CGI側でデータを埋め込んだプログラムをプログラム実行領域に提供すればよい。また、データ要求プログラムが起動するHTTPクライアントは、非表示で動作させることもできるし、必要に応じて表示させる仕様としてもよい。また、データ要求プログラムが起動するHTTPクライアント及びデータ分配プログラムが起動するHTTPクライアントは、起動の方法が新規ウィンドウであるかフレームであるかを問わない。【００４７】
［データ分割に関する変形例］【００４８】
上述した「別ドメインの情報を取得する方法」の実施形態において、動作Ｄ〜Ｆの説明では、データ分割プログラムがGETメソッドで授受可能な長さにデータを分割し、データ要求プログラムが当該分割されたデータ片を連結する処理を説明した。ここでは、当該データの分割に関する変形例を紹介する。【００４９】
例えば、分割の対象となる元情報が以下の情報であると仮定する。【００５０】
name=ogawa&date=20060531&domain=kawachi.com&path=index.html&permission=all&perfect【００５１】
データ分割プログラムは、上記の元情報を予め決められたルールに従って分割し、複数の情報片に分ける。情報片とは、元情報を構成する要素をいう。元情報を情報片に分ける際の分け方は、上記実施形態で紹介したものをはじめ種々考えられるが、例えば、一定の文字数ごとに分割することや、偶数文字と奇数文字の組に分割すること、また、パラメータを繋いでいる「&」のところで分割し、name、date、domain等の変数ごとに分割した情報片としてもよい。このような場合は、情報片の全体を受け取るまで処理を待つのではなく、name、domainの情報片を受け取った段階でその他の変数を無視してname、domainの情報だけからなる情報を再構成して利用するようにデータ要求プログラム側であらかじめ決めておくことも考えられる。また例えば、一の情報片は、name=ogawa&date=20060531、他の情報片は、date=20060531&domain=kawachi.comのように、一部の要素を重複して持っていてもよい。一つの情報片は、GETメソッドで渡せる長さの情報に収まっていれば分割のルールは問わない。【００５２】
また、データ分割プログラムは、分割した各情報片を識別するために情報片識別子を情報片ごとに設定するようにしてもよい。上記実施形態における「通し番号」は、この情報片識別子に相当する。情報片識別子は、例えば、分割した情報片の並び順を１，２，３，…のような連番で与えてもよいし、情報片を上記のようにパラメータごとに区切った場合は、name、date等の各パラメータの変数名を情報片識別子として利用してもよい。【００５３】
また、データ分割プログラムは、各情報片に対して元情報の識別子を与えてもよい。これは、元情報の再構成に必要な情報片を元情報の識別子に基づいてデータ要求プログラム側で選別できるようにするためである。元情報の識別子は、情報片ごとに同一の識別子を与えてもよいし、情報片に異なる識別子を与えてもよい。情報片に異なる識別子を与える場合、当該異なる識別子を共通の元情報に関連付ける方法をデータ要求プログラム側に登録しておき、データ要求プログラムが、当該元情報に関連付ける方法を参照して、元情報を共通とする情報片を選択することが考えられる。【００５４】
［実施形態２］【００５５】
次に、本願の第２発明に対応する実施形態を説明する。【００５６】
［構成の説明］【００５７】
図２は、本実施形態に使用するコンピュータシステムの構成図である。本実施形態に使用するコンピュータシステムは、一般的なパーソナルコンピュータの要素を備えており、キーボードやポインティングデバイスなどの入力手段１と、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）、リムーバブルメディアなどの記憶手段２と、ディスプレイモニターなどの表示手段３と、ＣＰＵ（Central Processing Unit）などの処理手段４と、ＮＩＣ（Network Interface Card）などの通信手段５とを備えている。【００５８】
図３は、本実施形態において、上記処理手段４が実行するソフトウェアの構造図である。本実施形態においては、ＯＳ（Operating System）１１上でHTTPクライアント１２を実行し、HTTPクライアント１２が、複数のブラウズ領域を表示又は非表示にて提供する。ここで、ブラウズ領域とは、HTTPクライアント１２が管理するウィンドウ・オブジェクト又はフレーム・オブジェクトを指す。以下、ウィンドウ・オブジェクトおよびフレーム・オブジェクトを総称してウィンドウ・オブジェクトと呼ぶことにする。また、ＯＳ１１は、ハードウェアドライバ１４を介して図１に示したハードウェア１０に対し、入出力を行う。【００５９】
［動作説明］【００６０】
図４は、HTTPクライアント１２の上で構成される複数のブラウズ領域の関係図である。上下に詰まれた各ブロックは、各々が異なるブラウズ領域を示している。上下に詰まれたブラウズ領域は、下が親（上位）であり、上が子（下位）の関係になっている。本実施形態では、各ブラウズ領域にて実行されるプログラムが、Javascript（登録商標）であるとして以下の説明を行う。以下の動作は、処理手段４がプログラムを実行することによって実現される。【００６１】
ドメインＢの情報取得ブラウズ領域は、ドメインＢのHTTPサーバから情報を取得し、当該情報を記憶手段２に格納する。【００６２】
次いで、当該ドメインBの情報取得ブラウズ領域で実行されるプログラムが、ドメインＡの情報転送ブラウズ領域を開き、この情報転送ブラウズ領域に、記憶手段２に格納したドメインＢのサーバから取得した情報を渡す。【００６３】
新規に開いたブラウズ領域への情報の渡し方は幾つか考えられる。一つは、GETメソッドを利用する方法である。GETメソッドを用いて新規にウィンドウ・オブジェクトを開くとき、そのURIのパラメータにドメインＢから取得した情報を付加しておく。新規に開いたブラウズ領域、即ち、情報転送ブラウズ領域では、Javascript（登録商標）のロジックを含み、当該情報転送ブラウズ領域にて実行されるプログラムがlocationオブジェクトのプロパティを参照することによって、ドメインBから取得した情報を受け取ることができる。【００６４】
情報転送ブラウズ領域で実行される情報転送プログラムは、記憶手段２に格納された各ブラウズ領域の親子関係を参照し、当該情報転送ブラウズ領域から親又は親の親を辿って見つけられるブラウズ領域を選択する。ここで選択するブラウズ領域を、以降の説明の便宜上、「選択ブラウズ領域」と呼ぶことにする。【００６５】
図４の例では、ドメインＢの情報取得ブラウズ領域と、ドメインＣのブラウズ領域とが、情報転送ブラウズ領域から順に親を辿って見つけられるので、選択の対象となる。つまり、情報取得ブラウズ領域より上位にあるブラウズ領域を順次選択する。親を辿る方法としては、例えば、ウィンドウ・オブジェクトのopenerプロパティを参照する方法や、フレームオブジェクトのparentプロパティを参照する方法がある。【００６６】
また、情報転送プログラムは、記憶手段２に格納された親子関係を参照し、上記選択したブラウズ領域及び当該選択したブラウズ領域を親又は親の親を辿って見つけられるブラウズ領域の中からドメインＡの情報利用ブラウズ領域を選択する。換言すれば、情報転送プログラムは、記憶手段２に格納された親子関係を参照し、上記選択したブラウズ領域及び当該選択したブラウズ領域から子又は子の子を辿って見つけられるブラウズ領域の中からドメインＡの情報利用ブラウズ領域を選択する。【００６７】
本実施形態において、記憶手段２に格納された親子関係とは、情報理論が扱うデータ構造の一つである木構造における親子関係をいう。当該親子関係にある複数のブラウズ領域は、根、枝、節点、葉といった当該木構造のノードをなす。【００６８】
本実施形態において、情報転送プログラムが情報利用ブラウズ領域を選択する動作は、例えば以下のように行われる。【００６９】
情報利用ブラウズ領域では、ドメインＢのサーバから取得した情報を利用する情報利用プログラムが実行されている。この情報利用プログラム及びこの情報利用プログラムが呼び出す関数は、Javascript（登録商標）のロジックを含んでいる。当該関数の一つとして、情報利用プログラムは、ドメインBのサーバから取得した情報を利用する情報利用関数を実装している。この情報利用関数には、例えば「funcname」という識別子が与えられている。【００７０】
情報転送プログラムは、ドメインBのサーバから取得した情報を渡すべき関数の識別子が、「funcname」であることを、情報利用ブラウズ領域を探す前に予め知っている。ここで、情報を渡すべき関数の識別子は、例えば、GETメソッドの引数の一部として、情報取得ブラウズ領域から情報転送プログラムに通知され、情報転送プログラムは、当該GETメソッドの引数から当該識別子を知るようにしてもよい。【００７１】
情報転送プログラムは、window.frames[n-1].funcnameの値を調べることにより、「window」の子である任意のフレームオブジェクトが、「funcname」という識別子の関数を実装しているか否かを知ることができる。ここで、「window」は前述の選択ブラウズ領域を指す。また、frames[n-1]は、選択ブラウズ領域の子であるn番目のフレームオブジェクトを指す。nの取りうる最大の値は、windows.frames.lengthの値から知ることができる。【００７２】
情報転送プログラムは、ドメインＡの或るブラウズ領域に「funcname」という識別子（転送先識別子）の関数を発見すると、当該ドメインＡのブラウズ領域を情報利用ブラウズ領域として選択する。【００７３】
一方、情報転送プログラムは、「funcname」という識別子の関数を発見できなかった場合、今回検査した子のフレームの更に子のフレームについて、関数「funcname」を探す処理を繰り返す。情報転送プログラムは、window.frames[n-1].frames[m-1].funcnameの値を調べることにより、2階層下の子のフレームについても「funcname」関数の存在を調べることができる。ここで、frames[m-1]は、frames[n-1]の子であるm番目のフレームオブジェクトを指す。3階層以降の子のフレームについても同様にframesプロパティを重ねることで調べることができる。【００７４】
このように、選択ブラウズ領域から子の子を辿っても関数「funcname」を発見できない場合、情報転送プログラムは、現在の選択ブラウズ領域の親であるブラウズ領域を、新たな選択ブラウズ領域とする。前述のようにparentプロパティを参照することにより、親のブラウズ領域を知ることができる。そして、情報転送プログラムは、新たな選択ブラウズ領域について、情報転送プログラムは、「funcname」という識別子の関数を実装しているか否かを知る。新たな選択ブラウズ領域が当該関数を実装していない場合は、上記の「funcname」関数を探す処理を繰り返す。このとき、windowの値をwindow.parentの値に置き換えてもよいし、windowの記述をwindow.parentの記述に置き換えてもよい。また、上記の「funcname」関数を探す処理を繰り返す際には、すでに調べているフレームについては「funcname」関数を探すことを省略するような仕組みにしてもよい。【００７５】
以上の処理を繰り返すことによって、木構造を情報転送ブラウズ領域を基点として参照して取得できるすべてのブラウズ領域について関数「funcname」をくまなく検索することが可能である。この方法は、実施形態１において、転送プログラムがデータ要求プログラムを探すプロセスに採用することもできる。【００７６】
この結果、図４の例では、情報転送ブラウズ領域は、情報転送ブラウズ領域「window」から見た情報利用ブラウズ領域の識別情報がwindow.parent.parent.frames[0]であることを知る。同様に、図５の例では、情報利用ブラウズ領域の識別情報がwindow.parent.parent.parent.frames[0]であることを知る。（ただし、いずれの例でも、情報利用ブラウズ領域を表示するフレームのインデックスを０と仮定した場合。）【００７７】
情報転送プログラムは、知り得た情報利用ブラウズ領域の識別情報を利用し、ドメインＢのサーバから取得した情報を情報利用ブラウズ領域に実装された情報利用関数「funcname」に渡す。情報利用関数「funcname」は、情報転送プログラムを経由してドメインBのサーバから取得した情報を用いて所定の処理を行う。情報利用関数「funcname」は、情報利用ブラウズ領域にて実装されており、情報利用ブラウズ領域はドメインAのブラウズ領域なので、情報利用ブラウズ領域は、同じドメインAのブラウズ領域である情報転送ブラウズ領域の情報転送プログラムが取得したドメインBの情報取得ブラウズ領域の情報をHTTPクライアントのセキュリティ制限の範囲内で利用することができる。
ここで、情報転送プログラムから情報利用関数へのデータの引渡しは、情報転送プログラムが情報利用関数を呼ぶ処理と同時に行うことができる。情報転送プログラムのロジック内で、関数funcnameの場所を指定してfuncname(arg1,arg2,...)を実行することにより、引数arg1，arg2，・・・を情報利用関数へ引き渡すことができる。【００７８】
［実施形態２の効果］【００７９】
本実施形態によれば、実施形態１と同様に、HTTPクライアント（ブラウザ）のセキュリティ制限に則ったスクリプト言語を実行しつつ別ドメインの情報を利用することができる。更に、情報転送ブラウズ領域から親又は親の親を辿って見つけられるブラウズ領域だけに限らず、直接の親子関係に無いブラウズ領域に対しても別ドメインの情報を渡すことができる。【００８０】
［変形例］【００８１】
図４の例では、情報利用ブラウズ領域を子に持つ選択ブラウズ領域がドメインＣであり、情報転送ブラウズ領域のドメインＡと異なる。しかし、情報転送ブラウズ領域のドメインと情報利用ブラウズ領域のドメインとが共通するため、ブラウザのセキュリティ制限の範囲で情報を渡すことができる。つまり、選択ブラウズ領域のドメインの種類は問わない。【００８２】
また、図５に示すように、図４より多くのブラウズ領域が挟まれている場合や、情報取得ブラウズ領域（ドメインＢ）と情報転送ブラウズ領域（ドメインＡ）との間に他のブラウズ領域が挟まれている場合でも、情報転送プログラムは、実施形態２の方法で、情報利用ブラウズ領域を探すことができる。【００８３】
本発明は上記実施形態に限られない。例えば、実施形態１に示したのと同様の方法で、情報取得ブラウズ領域から情報転送ブラウズ領域にGETメソッドの引数として情報を送る際に、複数の情報転送ブラウズ領域を生成し、それぞれに分割して情報を渡すようにすることもできる。また、情報転送プログラムから情報を受け取るのは情報利用ブラウズ領域に実装された情報利用関数だとしたが、情報利用関数の替わりに情報利用ブラウズ領域に所定の変数を用意し、この変数に情報を渡すようにしても構わない。また、本実施形態においては、親子関係にあるウィンドウ・オブジェクトで子ウィンドウ・オブジェクトを取得する方法については、子ウィンドウ・オブジェクトは親ウィンドウ・オブジェクトに生成される親フレームである場合について説明したが、子となるウィンドウ・オブジェクトが新規ウィンドウとして立ち上がる場合でも、例えば、当該新規ウィンドウを生成する際に親ウィンドウのJavascript（登録商標）のロジックで子ウィンドウへのポインタを生成しており、その親ウィンドウが情報転送ブラウズ領域と同じドメインのウィンドウ・オブジェクトを表示するものであれば、情報転送ブラウズ領域は当該ポインタ情報を取得できるので、これに基づいて、当該子ウィンドウを取得できる。また、各ウィンドウ・オブジェクトが表示されているか、非表示されているかを問わない。また、木の探索方法には、実施形態で紹介した方法に限らず、種々の探索方法を採用することができる。【００８４】
［ネットワーク情報処理システム］【００８５】
次に、前述の「別ドメインの情報を取得する方法」を利用したネットワーク情報処理システムを紹介する。【００８６】
本実施形態のネットワーク情報処理システムは、HTTP（HyperText Transfer Protocol）に従うクライアント／サーバ通信環境において、クライアントが表示する一のドメインに対しユーザが情報を与える操作を行ったときに、当該情報を他のドメインのサーバに保管する技術に関する。【００８７】
HTTPクライアントが、一のドメイン（ドメインＡとする）のWEBページを表示しているとき、当該ドメインＡのWEBページに情報を与える操作を行うと、その情報が別のドメイン（ドメインＢとする）のサーバに保管されるようにしたい、という需要がある。【００８８】
また、HTTPクライアントが、一のドメイン（ドメインＡとする）のWEBページを表示しているとき、当該ドメインＡのWEBページが別のドメイン（ドメインＢとする）のサーバに保管された情報を取得したい、という需要がある。【００８９】
ここで、ドメイン「Ａ」と「Ｂ」の文字は、互いに異なるドメインであることを表すために用いており、「Ａ」，「Ｂ」の文字自体に特別な意味を持たない。【００９０】
以下、ネットワーク情報処理システムの実施形態を図面を参照しつつ説明する。【００９１】
図６は、ネットワーク情報処理システムのブロック図である。本システムは、コンピュータネットワーク（インターネット）４００に接続されたクライアントコンピュータ（クライアント）１００と、ストレージサーバコンピュータ（ストレージサーバ）２００と、アプリケーションサーバコンピュータ（アプリケーションサーバ）３００とを備えている。【００９２】
各コンピュータ１００〜３００は、キーボードやマウス等の情報入力手段と、ディスプレイ等の情報表示手段と、メモリやHDD（Hard Disk Drive）等の情報記憶手段と、NIC（Network Interface Card）等の情報通信手段と、CPU（Central Processing Unit）等の情報処理手段とを備えている。【００９３】
各コンピュータ１００〜３００において、情報の入力は入力手段によって行われる。また、情報の表示は表示手段によって行われる。また、処理手段又は通信手段において扱われる情報は、記憶手段に記憶され又は記憶手段から読み出される。また、各コンピュータ間で行われる情報の送受は、通信手段を介して行われる。処理手段は、プログラムを実行することによって、各種の処理を実行し、各種の機能を実現する。【００９４】
図７は、クライアント１００が実行するプログラム（ソフトウェア）の構成図である。クライアント１００は、Windows（登録商標）等のOS（Operating System）１０１を実行し、その上でHTTPクライアント１０２と、拡張プログラム１０３とを実行する。拡張プログラム１０３は、HTTPクライアント１０２を監視する機能を備えている。HTTPクライアント１０２は、JavaScript（登録商標）等の標準的なスクリプト実行環境１０４を備え、当該スクリプト実行環境１０４においてJavaScript（登録商標）等によるスクリプト１０５を実行する。【００９５】
本実施形態において、OS１０１はWindows（登録商標）、HTTPクライアント１０２はインターネットエクスプローラー（登録商標）、スクリプト１０５はJavaScript（登録商標）であるとする。【００９６】
また、本実施形態において、スクリプト１０５は、ストレージサーバ２００で認証を受けるための認証情報であって、アプリケーションサーバ３００又は他の図示しないサーバから予め取得したユーザ認証情報ｐを備える。このユーザ認証情報ｐの取得方法として、前述した「別ドメインの情報を取得する方法」を利用する。【００９７】
一方、ストレージサーバ２００は、HTTPサーバを実行し、クライアント１００のユーザを当該HTTPサーバを介して認証する機能と、クライアント１００から送信された情報を当該HTTPサーバを介して記憶手段に格納する機能と、クライアント１００から要求された情報を記憶手段から読み出し当該HTTPサーバを介して当該クライアント１００に送信する機能とを備えている。本実施形態において、ストレージサーバ２００が実行するHTTPサーバには、ドメインＢが設定されているものとする。【００９８】
また、アプリケーションサーバ３００は、HTTPサーバを実行し、スクリプトの実行指示を含むWEBページを当該HTTPサーバを介してクライアント１００に送信する機能を備えている。本実施形態において、アプリケーションサーバ３００が実行するHTTPサーバには、ストレージサーバ２００とは異なるドメインＡが設定されているものとする。【００９９】
図８は、クライアント１００が表示手段に表示する画面の構成図である。クライアント１００は、表示手段に、デスクトップやファイルフォルダ等のOS管理領域を表示し、その領域に管理されているファイルのアイコンやサムネイル等のコンテンツシンボルを表示する。また、クライアント１００は、HTTPクライアント１０２のウィンドウを表示し、当該HTTPクライアント１０２がアプリケーションサーバ３００から取得したWEBページを表示する。また、クライアント１００は、当該WEBページのプログラムの記述に基づいて、コンテンツ供給領域と、コンテンツ表示領域を形成する。【０１００】
そして、本実施形態では、OS管理領域に管理されているコンテンツのシンボルをコンテンツ供給領域にドラッグアンドドロップ操作すると、当該コンテンツの実体が拡張プログラム１０３によってストレージサーバ２００に送られて保管されるようになっている。更に、当該ストレージサーバ２００に保管されたコンテンツの実体をHTTPクライアント１０２が取得して当該コンテンツの実体又はそのシンボルをコンテンツ表示領域に表示するようになっている（音声再生コンテンツの場合は必ずしもコンテンツ表示領域を必要としない）。ストレージサーバ２００に保管されたコンテンツの実体をHTTPクライアント１０２が取得する動作の詳細は後述するが、以上のような処理により、クライアント１００のユーザは、コンテンツの保管先がドメインＢであることを意識することなく、ドメインＡのWEBページを利用することになる。【０１０１】
次に、本実施形態の動作を図９に基づいて説明する。【０１０２】
まず、HTTPクライアント１０２は、ドメインAのアプリケーションサーバ３００に対し、スクリプトの実行指示を含むWEBページを要求する。この際、HTTPクライアント１０２は、ドメインAのアプリケーションサーバ３００とコネクションを確立し、当該WEBページを要求する。アプリケーションサーバ３００は、要求されたWEBページをHTTPクライアント１０２に提供する（Ｓ１）。【０１０３】
HTTPクライアント１０２は、受信したWEBページのソースの実行に従って図８のように、クライアント１００の表示手段にドメインAのWEBページを表示し、そこにコンテンツ供給領域と、コンテンツ表示領域とを形成する。また、当該WEBページのソースの実行に従ってスクリプト１０５としての第１のスクリプトを実行する。ここで、コンテンツ供給領域には、ストレージサーバ２００（ドメインＢ）にファイルをアップロードするための所定のアップロードパス識別子が、当該コンテンツ供給領域を成すオブジェクトのスタイル属性の値として埋め込まれている。当該識別子は、アップロードのためのＵＲＬ（Uniform Resource Locator）のようなものでも良い。【０１０４】
拡張プログラム１０３は、当該WEBページに形成されたコンテンツ供給領域にOS管理領域からコンテンツシンボルがドラッグアンドドロップされるのを監視している。【０１０５】
クライアント１００のユーザは、入力手段を操作し、表示手段のOS管理領域に表示されているコンテンツシンボルをドラッグし、WEBページ内のコンテンツ供給領域にドロップする（Ｓ２）。【０１０６】
拡張プログラム１０３は、コンテンツシンボルのドラッグされた場所が、コンテンツ供給領域であることを、当該コンテンツ供給領域が所定のスタイル属性を持っていることから検知する。この結果、ドロップされた場所がコンテンツ供給領域であれば、拡張プログラム１０３は、HTTPクライアント１０２から、前述の「別ドメインの情報を取得する方法」により事前に取得されているドメインＢ用のユーザ認証情報ｐと、上記アップロードパスとを取得し、OSからは、ドロップされたコンテンツシンボルに対応するコンテンツの実体の格納場所（OS管理領域内の格納場所）を取得する。そして、拡張プログラム１０３は、当該コンテンツの実体を、当該取得したアップロードパスに対し、即ちドメインＢのストレージサーバ２００に対し、送信する。この際、コンテンツ実体の格納場所を指定したPOSTメソッドを実行する（Ｓ３）。また、当該POSTのパラメータとして上記ドメインＢ用のユーザ認証情報ｐを付加する。【０１０７】
当該POSTを受信したストレージサーバ２００は、当該POSTに付加されたユーザ認証情報ｐに基づいて当該POSTの正当性を判断し、正当なアクセスであれば、当該POSTの対象であるコンテンツの実体をクライアント１００から受信し、所定の格納場所（記憶領域）に格納する。そして、格納の完了を上記POSTへの応答として拡張プログラム１０３に通知する。【０１０８】
一方、スクリプト実行環境１０４では、ストレージサーバ２００からコンテンツ実体を取得するためのコールバック関数（スクリプト１０５としての第２のスクリプト）の実行を待機している。拡張プログラム１０３は、上記の格納完了通知をストレージサーバ２００から受けると、当該コールバック関数の処理の開始をHTTPクライアント１０２に指示する。この指示を受けて、HTTPクライアント１０２は当該コールバック関数を実行する。ここで、スクリプト１０５としての第１のスクリプトと、第２のスクリプトは、それぞれ単独で存在していれば足りる。【０１０９】
コールバック関数が作動すると、HTTPクライアント１０２は、当該コールバック関数の記述に従い、ストレージサーバ２００に、ファイルリストを要求する。ファイルリストとは、ストレージサーバ２００の記憶手段に格納されたファイルのリストであって、上述のドラッグアンドドロップ操作が今回及びそれ以前で一回または複数回行われたことによって、ストレージサーバ２００の記憶手段に格納されたコンテンツ実体のリストである。当該ファイルリストは、コンテンツ実体のファイル名と、当該ファイルを取得するためのURL（Uniform Resource Locator）の情報とを含んでいる。このとき、ドメインＡのWEBページを表示するHTTPクライアント１０２が、ドメインＢのストレージサーバ２００に対してファイルリストを要求するので、前述した「別ドメインの情報を取得する方法」を利用する。【０１１０】
ストレージサーバ２００は、HTTPクライアント１０２からファイルリストの要求を受けると、当該要求されたファイルリストを記憶手段から読み出し、前述の「別ドメインの情報を取得する方法」によって、ファイルリストをHTTPクライアント１０２に送信する。【０１１１】
HTTPクライアント１０２は、このファイルリストを受信し、コールバック関数に渡す。このファイルリストを取得したコールバック関数は、当該ファイルリストに記述されたファイル名とファイルパスとの関連付けをファイル毎に読み出し、コンテンツ表示領域を構成するHTMLに対し、innerHTMLの値を書き換える等によって、ファイル毎に以下のような画像取得用のHTMLを生成する。ここでは画像コンテンツを想定したが、その他の種類のコンテンツでもよく、生成するHTMLの内容はコンテンツの種類に適合するものであればよい。
【数１】
0004788768.tif 000002
【０１１２】
HTTPクライアント１０２は、コンテンツ表示領域に生成された画像取得用のHTMLを実行し、その結果、ファイルリストに列記されたファイルパスのコンテンツファイルをストレージサーバ２００に要求する。ストレージサーバ２００は、要求されたコンテンツファイルを、当該要求に付加されたファイルパスの指定に基づいて記憶手段から読み出し、HTTPクライアント１０２に送信する。HTTPクライアント１０２は、ストレージサーバ２００から受信したコンテンツファイルをコンテンツ表示領域に再生する。【０１１３】
以上説明した本実施形態によれば、HTTPクライアント１０２が、ドメインＡのWEBページを表示しているとき、当該ドメインＡのWEBページに与えられた情報をドメインＢのストレージサーバ２００に保管することができる。また、HTTPクライアント１０２が、ドメインＡのWEBページを表示しているとき、当該ドメインＡのWEBページがドメインＢのサーバに保管された情報を取得して動的に利用することができる。【０１１４】
ここで、上記実施形態では、HTTPクライアント１０２が、ストレージサーバ２００から認証情報ｐを取得する構成としたが、これに限らず、拡張プログラム１０３が認証情報ｐをストレージサーバ２００から取得してもよい。その場合、拡張プログラムが、ユーザID、パスワードなどの認証に必要な情報をユーザに入力させるなどして取得し、その情報を元に拡張プログラムが認証情報を取得するといった方法が考えられる。また、OS管理領域に表示されているコンテンツシンボルを複数ドラッグアンドドロップして、複数のコンテンツを連続してストレージサーバ２００にアップロードできるようにしてもよい。【０１１５】
また、上記実施形態では、コンテンツに関連する情報として、コンテンツの画像ファイルを取得する場合を例示したが、これに限らない。例えば、コンテンツに関連する情報として取得するファイルリストはファイルごとにファイル名、ファイルタイプ、ファイルサイズを含むものとし、その内容をコンテンツ表示領域に表示するようにしてもよい。
【図面の簡単な説明】
【０１１６】
【図１】実施形態１の構成および動作を示すブロック図である。
【図２】実施形態２のハードウェア構成を示すブロック図である。
【図３】実施形態２のソフトウェア構造を示すブロック図である。
【図４】実施形態２の動作を説明するための説明図である。
【図５】実施形態２の動作を説明するための説明図である。
【図６】ネットワーク情報処理システムの実施形態の構成を示すブロック図である。
【図７】図６のクライアントコンピュータが実行するソフトウェアの構造図である。
【図８】図６のクライアントコンピュータが表示手段に表示する画面の構造図である。
【図９】図６に示すシステムの動作説明図である。
【符号の説明】
【０１１７】
A〜F  動作の流れ
【図１】
0004788768.tif 000003
【図２】
0004788768.tif 000004
【図３】
0004788768.tif 000005
【図４】
0004788768.tif 000006
【図５】
0004788768.tif 000007
【図６】
0004788768.tif 000008
【図７】
0004788768.tif 000009
【図８】
0004788768.tif 000010
【図９】
0004788768.tif 000011