(57)【要約】 【課題】  処理対象となる順序木の通信量を低減するのに好適な情報処理システム等を提供する。【解決手段】  情報処理システム４０１の蓄積装置４３１は、順序木を記憶し、処理装置４５１では、蓄積装置４３１内に記憶される順序木を遅延評価によって自然にトラバースできるような計算可能オブジェクトを生成し、当該計算可能オブジェクトを評価することによって、処理装置４５１は、蓄積装置４３１に、順序木内の位置を指定する取得要求を送信し、蓄積装置４３１は、記憶している順序木から、取得要求に指定された位置のノードがテキストノードである場合はその内容を、要素ノードである場合は子ノードの数を指定する取得応答を送信し、当該取得応答によって、さらなる計算可能オブジェクトが処理装置４５１側に生成される。【選択図】  図４
2005234901.tif 000002
【特許請求の範囲】
【請求項１】
蓄積装置と、処理装置と、を備える情報処理システムであって、
（ａ）前記蓄積装置は、
順序木を記憶する記憶部と、
前記処理装置から送信された取得要求を受信する取得要求受信部と、
前記記憶された順序木において、前記受信された取得情報に指定される位置のノードが、子ノードを有する場合は、当該子ノードの数を、リーフである場合は、当該リーフに付与される内容情報を、それぞれ指定する取得応答を前記処理装置に送信する取得応答送信部と、を備え、
（ｂ）前記処理装置は、
式もしくは当該式の評価結果を参照する計算可能オブジェクトを、
（ｐ）当該計算可能オブジェクトが式を参照していれば、これを計算して当該式の評価結果を得て、当該式の評価結果を返し、当該計算可能オブジェクトに、当該式にかえて当該式の評価結果を参照させ、
（ｑ）当該計算可能オブジェクトが式の評価結果を参照していれば、当該式の評価結果を返す
遅延評価部と、
前記蓄積装置に記憶される順序木の根ノードの位置をパラメータとして与えられた問合せ式を参照する計算可能オブジェクトを生成するオブジェクト生成部と、
所望のリーフに付与される内容情報が返されるまで、前記生成された計算可能オブジェクトもしくはこれに参照される評価結果に含まれる計算可能オブジェクトを、前記遅延評価部に評価させる評価制御部と、を備え、
前記遅延評価部は、問合せ式を、
（ｘ）パラメータとして与えられるノードの位置を指定する取得要求を前記蓄積装置に送信し、
（ｙ）前記蓄積装置から送信された取得応答に、子ノードの数が指定される場合、当該子ノードのそれぞれについて、その位置をパラメータとして与えた問合せ式を含む列を、評価結果とし、
（ｚ）前記蓄積装置から送信された取得応答に、リーフに付与される内容情報が指定される場合、当該内容情報を評価結果とする
ように評価することを特徴とするもの。
【請求項２】
請求項１に記載の情報処理システムであって、
（ｃ）前記処理装置は、
前記遅延評価部により評価結果として返される列もしくは内容情報から、新たな部分木を生成する処理生成部と、
前記生成された部分木を処理結果として前記蓄積装置に送信する結果部分木送信部と、をさらに備え、
前記処理生成部は、前記生成される部分木の根ノードに、前記蓄積装置に蓄積される順序木における当該根ノードの子ノードの位置を指定する位置属性情報を付加し、
（ｄ）前記蓄積装置は、
前記処理装置から送信された部分木を受信する結果部分木受信部と、
前記受信された部分木（以下、当該部分木の子ノードを根ノードとする部分木を「置換結果部分木」という。）について、「『当該置換結果部分木の根ノードに付加された位置属性情報に指定される位置』を根ノードとする部分木（以下、「置換対象部分木」という。）」を、当該置換結果部分木に置換して更新する置換更新部と、をさらに備える
ことを特徴とするもの。
【請求項３】
請求項１または２に記載の情報処理システムにおける蓄積装置。
【請求項４】
請求項１または２に記載の情報処理システムにおける処理装置。
【請求項５】
請求項３に記載の蓄積装置と通信し、遅延評価部と、オブジェクト生成部と、評価制御部と、を備える処理装置において実行される処理方法であって、
前記遅延評価部が、式もしくは当該式の評価結果を参照する計算可能オブジェクトを、
（ｐ）当該計算可能オブジェクトが式を参照していれば、これを計算して当該式の評価結果を得て、当該式の評価結果を返し、当該計算可能オブジェクトに、当該式にかえて当該式の評価結果を参照させ、
（ｑ）当該計算可能オブジェクトが式の評価結果を参照していれば、当該式の評価結果を返す
遅延評価工程と、
前記オブジェクト生成部が、前記蓄積装置に記憶される順序木の根ノードの位置をパラメータとして与えられた問合せ式を参照する計算可能オブジェクトを生成するオブジェクト生成工程と、
評価制御部が、所望のリーフに付与される内容情報が返されるまで、前記生成された計算可能オブジェクトもしくはこれに参照される評価結果に含まれる計算可能オブジェクトを、前記遅延評価工程にて評価させる評価制御工程と、を備え、
前記遅延評価工程では、問合せ式を、
（ｘ）パラメータとして与えられるノードの位置を指定する取得要求を前記蓄積装置に送信し、
（ｙ）前記蓄積装置から送信された取得応答に、子ノードの数が指定される場合、当該子ノードのそれぞれについて、その位置をパラメータとして与えた問合せ式を含む列を、評価結果とし、
（ｚ）前記蓄積装置から送信された取得応答に、リーフに付与される内容情報が指定される場合、当該内容情報を評価結果とする
ように評価することを特徴とする方法。
【請求項６】
請求項４に記載の処理装置と通信し、記憶部と、取得要求受信部と、取得応答送信部と、を備える蓄積装置において実行される蓄積方法であって、
前記記憶部は、順序木を記憶し、
前記取得要求受信部が、前記処理装置から送信された取得要求を受信する取得要求受信工程と、
前記取得応答送信部が、前記記憶された順序木において、前記受信された取得情報に指定される位置のノードが、子ノードを有する場合は、当該子ノードの数を、リーフである場合は、当該リーフに付与される内容情報を、それぞれ指定する取得応答を前記処理装置に送信する取得応答送信工程と、
を備えることを特徴とする方法。
【請求項７】
コンピュータを、請求項３に記載の蓄積装置の各部として機能させることを特徴とするプログラム。
【請求項８】
コンピュータを、請求項４に記載の処理装置の各部として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、順序木を蓄積する蓄積装置と当該蓄積された順序木を処理する処理装置とからなる情報処理システムにおいて、処理対象となる順序木の通信量を低減するのに好適な情報処理システム、蓄積装置、処理装置、蓄積方法、処理方法、ならびに、これらをコンピュータにて実現するためのプログラムに関する。
【背景技術】
【０００２】
従来から、構造化された文書であるＸＭＬ（eXtensible Markup Language）形式文書を処理する各種の技術が提案されている。また、情報処理の分野では、遅延評価の技術も知られている。
【特許文献１】特開２００２−１８２９１５号公報
【非特許文献１】Ｒ.バード・Ｐ.ワドラー共著、武市正人訳、関数プログラミング、近代科学社、１４６頁〜１５１頁、１９９１年４月
【０００３】
[特許文献１]には、ＸＭＬ形式文書をＤＯＭ（Document Object Model）技術に基づいて処理する技術が開示されている。ＤＯＭ技術では、ＸＭＬ文書を順序木構造として扱う。ここで、順序木とは、木構造のうち、共通する親ノードを有する兄弟ノードに順序が付けられているものをいい、ＤＯＭ技術では、ＸＭＬ文書全体を解析してＤＯＭ木としてメモリ上に保存して処理を行う。
【０００４】
[非特許文献１]には、ある式を実際に評価するのはその式の値が必要になるまで遅延し、一旦値が得られた後は、その値を使い続ける、という遅延評価（グラフ簡約）の技術が開示されている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＸＭＬ文書が蓄積される蓄積装置と、ＸＭＬ文書が処理される処理装置とがコンピュータ通信網で接続されているときに、データの多いＸＭＬ文書を処理したい場合には、処理装置にて多くのメモリを消費するほか、通信によってＤＯＭ木をやりとりすることとなるため、通信量が極めて多くなり、処理が遅くなってしまうなどの効率上の問題が生ずる。
【０００６】
一方で、できるだけ自然にＸＭＬ文書の構造内の必要なノードのみをトラバースできるようにしたい、という要望は大きい。
【０００７】
本発明は、上記の課題を解決するもので、順序木を蓄積する蓄積装置と当該蓄積された順序木を処理する処理装置とからなる情報処理システムにおいて、順序木のトラバースを自然に行う一方でできるだけ通信量を低減するのに好適な情報処理システム、蓄積装置、処理装置、蓄積方法、処理方法、ならびに、これらをコンピュータにて実現するためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
以上の目的を達成するため、本発明の原理にしたがって、下記の発明を開示する。
【０００９】
本発明の第１の観点に係る情報処理システムは、蓄積装置と、処理装置と、を備え、以下のように構成する。
【００１０】
すなわち、蓄積装置は、記憶部と、取得要求受信部と、取得応答送信部と、を備える。
【００１１】
ここで、記憶部は、順序木を記憶する。
【００１２】
一方、取得要求受信部は、処理装置から送信された取得要求を受信する。
【００１３】
さらに、取得応答送信部は、記憶された順序木において、受信された取得情報に指定される位置のノードが、子ノードを有する場合は、当該子ノードの数を、リーフである場合は、当該リーフに付与される内容情報を、それぞれ指定する取得応答を処理装置に送信する。
【００１４】
一方、処理装置は、遅延評価部と、オブジェクト生成部と、評価制御部と、を備える。
【００１５】
ここで、遅延評価部は、式もしくは当該式の評価結果を参照する計算可能オブジェクトを、
（ｐ）当該計算可能オブジェクトが式を参照していれば、これを計算して当該式の評価結果を得て、当該式の評価結果を返し、当該計算可能オブジェクトに、当該式にかえて当該式の評価結果を参照させ、
（ｑ）当該計算可能オブジェクトが式の評価結果を参照していれば、当該式の評価結果を返す。
【００１６】
一方、オブジェクト生成部は、蓄積装置に記憶される順序木の根ノードの位置をパラメータとして与えられた問合せ式を参照する計算可能オブジェクトを生成する。
【００１７】
さらに、評価制御部は、所望のリーフに付与される内容情報が返されるまで、生成された計算可能オブジェクトもしくはこれに参照される評価結果に含まれる計算可能オブジェクトを、遅延評価部に評価させる。
【００１８】
ここで、遅延評価部は、問合せ式を、
（ｘ）パラメータとして与えられるノードの位置を指定する取得要求を蓄積装置に送信し、
（ｙ）蓄積装置から送信された取得応答に、子ノードの数が指定される場合、当該子ノードのそれぞれについて、その位置をパラメータとして与えた問合せ式を含む列を、評価結果とし、
（ｚ）蓄積装置から送信された取得応答に、リーフに付与される内容情報が指定される場合、当該内容情報を評価結果とする
ように評価する。
【００１９】
また、本発明の情報処理システムにおいて、処理装置は、処理生成部と、結果部分木送信部とをさらに備え、蓄積装置は、結果部分木受信部と、置換更新部とをさらに備え、以下のように構成することができる。
【００２０】
まず、処理装置において、処理生成部は、遅延評価部により評価結果として返される列もしくは内容情報から、新たな部分木を生成する。
【００２１】
一方、結果部分木送信部は、生成された部分木を処理結果として蓄積装置に送信する。
【００２２】
そして、処理生成部は、生成される部分木の根ノードに、蓄積装置に蓄積される順序木における当該根ノードの子ノードの位置を指定する位置属性情報を付加する。
【００２３】
一方、蓄積装置において、結果部分木受信部は、処理装置から送信された部分木を受信する。
【００２４】
さらに、置換更新部は、受信された部分木（以下、当該部分木の子ノードを根ノードとする部分木を「置換結果部分木」という。）について、「『当該置換結果部分木の根ノードに付加された位置属性情報に指定される位置』を根ノードとする部分木（以下、「置換対象部分木」という。）」を、当該置換結果部分木に置換して更新する。
【００２５】
本発明のその他の観点に係る蓄積装置は、上記情報処理システムにおける蓄積装置である。
【００２６】
本発明のその他の観点に係る処理装置は、上記情報処理システムにおける処理装置である。
【００２７】
本発明のその他の観点に係る処理方法は、上記の蓄積装置と通信し、遅延評価部と、オブジェクト生成部と、評価制御部と、を備える処理装置において実行され、遅延評価工程と、オブジェクト生成工程と、評価制御工程と、を備え、以下のように構成する。
【００２８】
まず、遅延評価工程では、遅延評価部が、式もしくは当該式の評価結果を参照する計算可能オブジェクトを、
（ｐ）当該計算可能オブジェクトが式を参照していれば、これを計算して当該式の評価結果を得て、当該式の評価結果を返し、当該計算可能オブジェクトに、当該式にかえて当該式の評価結果を参照させ、
（ｑ）当該計算可能オブジェクトが式の評価結果を参照していれば、当該式の評価結果を返す。
【００２９】
一方、オブジェクト生成工程では、オブジェクト生成部が、蓄積装置に記憶される順序木の根ノードの位置をパラメータとして与えられた問合せ式を参照する計算可能オブジェクトを生成する。
【００３０】
さらに、評価制御工程では、評価制御部が、所望のリーフに付与される内容情報が返されるまで、生成された計算可能オブジェクトもしくはこれに参照される評価結果に含まれる計算可能オブジェクトを、遅延評価工程にて評価させる。
【００３１】
そして、遅延評価工程では、問合せ式を、
（ｘ）パラメータとして与えられるノードの位置を指定する取得要求を蓄積装置に送信し、
（ｙ）蓄積装置から送信された取得応答に、子ノードの数が指定される場合、当該子ノードのそれぞれについて、その位置をパラメータとして与えた問合せ式を含む列を、評価結果とし、
（ｚ）蓄積装置から送信された取得応答に、リーフに付与される内容情報が指定される場合、当該内容情報を評価結果とする
ように評価する。
【００３２】
本発明の他の観点に係る置換方法は、上記の処理装置と通信し、記憶部と、取得要求受信部と、取得応答送信部と、を備える蓄積装置において実行され、取得要求受信工程と、取得応答送信工程と、を備え、以下のように構成する。なお、記憶部は、順序木を記憶する。
【００３３】
さて、取得要求受信工程では、取得要求受信部が、処理装置から送信された取得要求を受信する。
【００３４】
一方、取得応答送信工程では、取得応答送信部が、記憶された順序木において、受信された取得情報に指定される位置のノードが、子ノードを有する場合は、当該子ノードの数を、リーフである場合は、当該リーフに付与される内容情報を、それぞれ指定する取得応答を処理装置に送信する。
【００３５】
本発明のその他の観点に係るプログラムは、コンピュータを、上記蓄積装置の各部として機能させるように構成する。
【００３６】
本発明のその他の観点に係るプログラムは、コンピュータを、上記処理装置の各部として機能させるように構成する。
【００３７】
上記のプログラムは、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）やＦＤ（Flexible Disk）などの各種の記録媒体に記録することができるほか、インターネットなどのコンピュータ通信網を介して配布することができる。
【発明の効果】
【００３８】
本発明によれば、順序木を蓄積する蓄積装置と当該蓄積された順序木を処理する処理装置とからなる情報処理システムにおいて、順序木のトラバースを自然に行う一方で、できるだけ通信量を低減するのに好適な情報処理システム、蓄積装置、処理装置、蓄積方法、処理方法、ならびに、これらをコンピュータにて実現するためのプログラムを提供することができる。
【発明を実施するための最良の形態】
【００３９】
以下、添付図面を参照して、本発明の実施の形態について説明する。
【実施例１】
【００４０】
図１は、本発明の蓄積装置や処理装置として機能しうる典型的な情報処理装置の概要構成を示す模式図である。以下、図１を参照して説明する。
【００４１】
情報処理装置１０１は、ＣＰＵ（Central Processing Unit；中央処理ユニット）１０２によって制御される。情報処理装置１０１に電源を投入すると、ＣＰＵ  １０２は、ＲＯＭ  １０３に記憶されたＩＰＬ（Initial Program Loader；初期プログラムローダ）を実行する。
【００４２】
ＩＰＬは、ハードディスク１０４、ＦＤドライブ１１０に装着されたＦＤ、ＣＤ−ＲＯＭドライブ１１１に装着されたＣＤ−ＲＯＭなどの記録媒体に記憶されたＯＳ（Operating System；オペレーティング・システム）プログラムを読み出して実行するプログラムである。
【００４３】
ＯＳを起動した後、ＣＰＵ  １０２は、キーボード１０５やマウス１０６などにより入力されたユーザの指示にしたがって、あるいは、ハードディスクなどにあらかじめ記述された設定ファイルの内容にしたがって、ハードディスクなどに記憶されたアプリケーションプログラムを実行する。
【００４４】
当該アプリケーションプログラムを実行することにより、情報処理装置１０１は、設計支援装置として機能することとなる。
【００４５】
ハードディスク１０４、ＦＤドライブ１１０に装着されたＦＤ、ＣＤ−ＲＯＭドライブ１１１に装着されたＣＤ−ＲＯＭなどの記憶媒体に、各種の情報が記録されることになる。
【００４６】
ＣＰＵ  １０２は、このプログラムの実行の際に、ＲＡＭ  １０７を一時的な作業用記憶領域として用いる。このほか、一時的な作業用記憶領域として、ＣＰＵ  １０２内に設けられたレジスタやキャッシュ（図示せず）が使われる。
【００４７】
プログラムの実行に伴ない、ユーザに不具合レコードを報告したり、途中経過を見せるため、ＣＰＵ  １０２は、液晶ディスプレイやＣＲＴ（Cathode Ray Tube）などの表示装置１０８に当該情報を表示することができる。マウス１０６による指示操作では、マウス１０６を移動することにより、画面に表示されたカーソルが移動し、マウス１０６をクリックすることにより、カーソルが指すメニュー項目を選択することができる。
【００４８】
情報処理装置１０１は、ＮＩＣ（Network Interface Card）やモデムなどのインターフェース１０９を介してインターネットなどのコンピュータ通信網と通信を行うことができる。インターフェース１０９を介して受信した順序木を処理の対象としたり、抽出したパターンをインターフェース１０９を介して送信したり、インターフェース１０９を介して受信したプログラムを実行したり、などができる。
【００４９】
（ＸＭＬ形式データと順序木の関係）
図２は、ＸＭＬ形式データの例を示す説明図である。図３は、これに対応する順序木の構造を示す説明図である。以下、これらの図を参照して説明する。
【００５０】
ＸＭＬ形式データは、<?xml version="1.0"?>のようなＸＭＬ宣言から始まる。ＸＭＬ宣言とは、ＸＭＬ文書の先頭に付き、その文書がＸＭＬ文書（ＸＭＬ形式データ）であることを示すための文字列である。
【００５１】
ＸＭＬ形式データは「要素」を含む。要素とは、一般には、開始タグと終了タグとに囲まれるデータであり、図２に示す例では、開始タグ<book:book ...>と終了タグ</book:book>とに囲まれている部分が最も大きな要素となる。開始タグのタグ名によって、当該要素を参照することとする。すなわち、上記要素は「book:book要素」ということになる。
【００５２】
図２に示す例では、book:book要素の中に、以下のような要素が含まれている。
book:content要素
book:chapter要素が２つ
【００５３】
また、book:content要素は、テキスト「目次」を含んでいる。
【００５４】
さらに、最初のbook:chapter要素は、book:title要素を含み、当該book:title要素は、テキスト「Ark2」を含んでいる。
【００５５】
このほか、２番目のbook:chapter要素もまた、book:title要素を含み、当該book:title要素は、code要素を含み、当該code要素は、テキスト「getPtree("abc[1]")」を含んでいる。
【００５６】
このように、要素同士には、包含関係を持たせることができる。
【００５７】
さて、これらの要素は、順序木においては、ノードに対応する。そして、要素同士の包含関係は、順序木における親ノードと子ノードとの関係となる。さらに、各要素に含まれるテキストは、順序木のリーフに対応する。また、図２におけるbook:book要素（最も大きい要素）は、図３における順序木の根ノードに対応することになる。また、ある要素は、当該順序木のうち、当該要素に対応付けられるノードを根ノードとする部分木と等価であり、当該部分木から当該要素全体を復元したり、当該要素から当該部分木を構成したりすることができる。
【００５８】
以下、理解を容易にするため、混乱が生じない限り、要素を指す際に、これに対応するノードを用いたり、ノードを指す際に、これに対応する要素を用いたりすることとする。
【００５９】
なお、リーフのことをテキストノードと呼び、テキストノードには、テキストが対応付けられている、と考える。
【００６０】
さて、ＸＭＬ形式データでは、各要素に付加的な情報を付け加えるために、属性を付与することができる。付与される属性は、開始タグ内に「属性名＝属性値」の形式で記述される。
【００６１】
図２に示す例では、以下のように属性が付与されている。たとえば、book:book要素には、属性xmlns:bookに値"http://.../book"が、属性xmlnsに値"http://.../haskell"が、属性xmlns:prtに値"http://xmlns.chimaira.org/pruned-tree"が、それぞれ付与されている。
【００６２】
なお、ＤＯＭツリーでは、ある要素の属性は、当該要素に対応するノードの子ノード（属性ノード）として考えるのが一般的であるが、本実施形態では、ある要素に付与される属性は、当該要素に対応するノードに付与される属性として考えるものとする。
【００６３】
このほか、２番目のbook:title要素に、属性名prt:refer-toの属性値として、"abc(/book:book/book:chapter[1]/book:title)"が付与されている。ここで用いられている/book:book/book:chapter[1]/book:titleは、「要素のXPath表現」と呼ばれるものである。
【００６４】
XPathは、ＸＭＬ文書の特定の部分（やその位置）を指し示すものであり、根ノードを/で表現する。以下、親ノードから子ノードへ、目的のノードに至るまで、順に要素名を並べていく。また、兄弟ノードに同じ名前の要素がある場合には、そのインデックス値を[と]で囲んで示す。
【００６５】
したがって、上記のXPathは、「book:book要素の中の１番目のbook:chapter要素の中のbook:title要素」の意味である。
【００６６】
このほか、*を用いたXPath表現を用いて、ノードの位置を示すことができる。*を用いたXPath表現では、添字が兄弟ノードにおける順序を表す。たとえば、図２において、*[1]/*[3]/*[1]なるXPath値は、「１番目の要素（book:book要素）に含まれる３番目の要素（２番目のbook:chapter要素）に含まれる１番目の要素（book:title要素）」を意味する。
【００６７】
さて、本実施形態では、属性prt:refer-toを用いて、ある要素が別の要素を参照する参照関係を表現する。したがって、当該属性は、「book:book要素の中の２番目のbook:chapter要素の中のbook:title要素」は、「book:book要素の中の１番目のbook:chapter要素の中のbook:title要素」を参照し、当該参照関係に「abc」という名前を付けた、という意味に解釈される。
【００６８】
そして、「book:book要素の中の２番目のbook:chapter要素の中のbook:title要素」は、code要素を含んでおり、code要素のテキストでは、参照関係abcに添字[1]を付加して用いている。これは、本実施形態では、「参照関係abcによって参照される１番目のノード（本例ではテキストノード「Ark2」）を、関数getPtreeに渡して処理し、その結果を用いる」という意味に解釈される。
【００６９】
したがって、図２に示すＸＭＬ形式データの一部について処理を行いたい場合、「book:book要素の中の２番目のbook:chapter要素の中のbook:title要素」に対して処理を行う際には、「book:book要素の中の１番目のbook:chapter要素の中のbook:title要素」も必要である、ということになる。
【００７０】
このように、参照関係が定義されているＸＭＬ形式データに対して各種の処理を行う場合には、必ずしもＸＭＬ形式データの全体が必要なわけではない。「book:book要素の中の１番目のbook:chapter要素の中のbook:title要素」を処理したい場合には、当該要素のみがあれば十分であるし、「book:book要素の中の２番目のbook:chapter要素の中のbook:title要素」を処理したい場合には、当該要素のほか、「book:book要素の中の１番目のbook:chapter要素の中のbook:title要素」が必要である。
【００７１】
本実施形態は、処理に必要な要素のみを抽出して、これを処理対象とすることにより、ＸＭＬ形式データ全体の受渡しをできるだけ避け、必要なデータのみの受け渡しで済ませることとして、処理を実際に行う処理装置におけるメモリ使用量や、処理装置に対して行う通信量を低減させるものである。以下、抽出された処理対象となる要素（部分木）を、「剪定木」と呼ぶこととする。
【００７２】
以下、このようなＸＭＬ形式データを蓄積している蓄積装置と、蓄積されたＸＭＬ形式データ（の一部）に対して処理を行う処理装置と、の間で、剪定木がやりとりされる様子について、さらに詳細に説明する。
【００７３】
（全体の構成）
図４は、本実施形態に係る情報処理システムの概要構成を示す説明図である。本図に示すように、情報処理システム４０１は、蓄積装置４３１と、処理装置４５１と、両者を通信可能に接続する通信経路４７１と、を備える。
【００７４】
蓄積装置４３１と、処理装置４５１と、は、処理対象とするＸＭＬ形式データ（順序木）の情報を、通信経路４７１を介してやりとりする。
【００７５】
（蓄積装置）
図５は、蓄積装置４３１の概要構成を示す模式図である。以下、本図を参照して説明する。
【００７６】
蓄積装置４３１は、記憶部５０１と、取得要求受信部５０２と、取得応答送信部５０３と、結果部分木受信部５０４と、置換更新部５０５と、を備える。
【００７７】
ここで、記憶部５０１は、図２に示すＸＭＬ形式データを処理対象の順序木として記憶する。したがって、ＲＡＭ  １０７やハードディスク１０４は、記憶部５０１として機能する。
【００７８】
一方、取得要求受信部５０２は、処理装置４５１から送信される取得要求を受信する。当該取得要求には、後述するように、処理装置４５１によって、記憶部５０１に記憶される順序木内のノードの位置を示す情報が指定されている。したがって、ＣＰＵ  １０２は、インターフェース１０９と共働して取得要求受信部５０２として機能し、受信された取得要求は、ＲＡＭ  １０７に一時的に記憶される。
【００７９】
ノードの位置を示す手法としては、前述のXPath表現や、*を用いたXPath表現のほか、これらと等価な表現を採用することができる。以下の説明では、*を用いたXPath表現の添字部分のみを並べて表現することとする。たとえば、*[1]/*[3]/*[1]は、[1,3,1]のように標記するものとし、これを「パス」と呼ぶこととする。
【００８０】
取得要求受信部５０２が、取得要求を受信すると、応答処理が開始される。図６は、図６は、蓄積装置４３１にて実行される応答処理の制御の流れを示すフローチャートである。以下、これらの図を参照して説明する。
【００８１】
まず、ＣＰＵ  １０２は、記憶部５０１に記憶されたＸＭＬ形式データを参照し、指定されたパスに対応するノードについての、以下の情報を取得する（ステップＳ６０１）。
（ａ）ノードの種類の情報。開始タグと終了タグに囲まれる要素に対応する要素ノードであれば、要素ノードである旨を示す情報とその要素の名前。テキストノードであれば、テキストノードである旨を示す情報。コメントノード等、その他のノードであれば、当該ノードの種類を示す情報。
（ｂ）当該ノードがテキストノード（順序木のリーフ）である場合は、当該ノードに対応付けられるテキスト（内容情報）。
（ｃ）当該ノードが要素ノードである場合は、当該要素ノードの子ノードの数。
（ｄ）その他の情報。たとえば、当該ノードが要素ノードである場合に、当該ノードに付与されている属性名とその属性値等。
【００８２】
次に、取得応答送信部５０３は、取得された情報を指定する取得応答を、処理装置４５１に送信して（ステップＳ６０２）、本処理を終了する。
【００８３】
図２ならびに図３の例について、「取得要求…取得応答」のように対応関係を表すと、以下のようになる。
（イ）[1]        …要素ノードbook:book。子ノードは３個。
（ロ）[1,1]      …要素ノードbook:content。子ノードは１個。
（ハ）[1,1,1]    …テキストノード。テキストは「目次」。
（ニ）[1,2]      …要素ノードbook:chapter。子ノードは１個。
（ホ）[1,2,1]    …要素ノードbook:title。子ノードは１個。
（ヘ）[1,2,1,1]  …テキストノード。テキストは「Ark2」。
（ト）[1,3]      …要素ノードbook:chapter。子ノードは１個。
（チ）[1,3,1]    …要素ノードbook:title。子ノードは１個。
（リ）[1,3,1,1]  …要素ノードcode。子ノードは１個。
（ヌ）[1,3,1,1,1]…テキストノード。テキストは「getPtree("abc[1]")」。
【００８４】
なお、一般に、処理装置４５１は、処理を開始した時点では、蓄積装置４３１が記憶しているＸＭＬ形式データの全体の木構造がどのような形状をしているか、はわからない。
【００８５】
したがって、（ロ）（ニ）（チ）の取得要求を行うためには、それ以前に（イ）の取得要求が行われていなければならない。
【００８６】
（ハ）の取得要求を行うためには、それ以前に（ロ）の取得要求が行われていなければならない。
【００８７】
（ヌ）の取得要求を行うためには、それ以前に、（イ）（ト）（チ）（リ）の取得要求が行われていなければならない。
【００８８】
また、取得要求や取得応答の形式は、上記のような情報が伝達されればいかなる形式でも良いが、これもまたＸＭＬ形式で構成しても良い。
【００８９】
たとえば、取得要求<get path="[1,1]"/>に対して取得応答<ok kind="element" type="book:content" child="1"/>が返り、取得要求<get path="[1,3,1,1,1]"/>に対して取得応答<ok kind="text">getPtree("abc[1]")</ok>が返る等である。
【００９０】
このような取得要求の依存関係は、実は図３に示す木構造に対応するものであって、親ノードについての取得要求を行い、その応答を見て初めて、当該親ノードが有する子ノードについての取得要求ができるようになるのである。
【００９１】
さて、蓄積装置４３１において、結果部分木受信部５０４が、処理装置４５１から送信された部分木を受信すると、置換更新処理が開始される。当該部分木には、後述するように、処理装置４５１によってその根ノードの属性として蓄積装置４３１に記憶される順序木における位置を表わす位置属性情報が追加されている。したがって、ＣＰＵ  １０２は、インターフェース１０９と共働して、結果部分木受信部５０４として機能する。なお、受信された部分木は、ＲＡＭ  １０７に一時的に記憶される。
【００９２】
たとえば、図２に示す例に対して、以下のような部分木が受信された場合を考える。
<put path="[1,3,1,1]">
<code>getPtree("abc[1]")</code>
<result>Hello.</result>
</put>
【００９３】
この場合、「根ノード」はputノードであり、そのpath属性として、蓄積装置４３１に記憶される順序木における位置[1,3,1,1]が指定されている。
【００９４】
そして、putノードの子ノードは、codeノードとresultノードという２つのノードを根ノードとする２つの部分木である。これを「置換結果部分木」という。
【００９５】
処理装置４５１は、上記の部分木によって、「位置[1,3,1,1]に配置されるノードを根ノードとする部分木（code要素）を、当該codeノードとresultノードという置換結果部分木に置換せよ」と依頼しているのである。
【００９６】
さて、図７は、置換更新処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
【００９７】
部分木を受信して置換更新処理が開始されると、まず、ＣＰＵ  １０２は、当該部分木の根ノードに付与されたpath属性を取得する（ステップＳ７０１）。
【００９８】
そして、置換更新部５０５は、記憶部５０１に記憶されたＸＭＬ形式データの取得されたpath属性の位置に、置換結果部分木を書き込んで（ステップＳ７０２）、置換・更新を行い、本処理を終了する。
【００９９】
図８は、図３に示す順序木について、上記の部分木が受信されて置換更新された結果を図示する説明図である。
【０１００】
このように、図３では、code要素が配置されていたところに、code要素とresult要素が配置され、順序木の構造が更新されることとなる。
【０１０１】
（処理装置）
図９は、処理装置の概要構成を示す模式図である。以下、本図を参照して説明する。
【０１０２】
処理装置４５１は、遅延評価部９０１と、オブジェクト生成部９０２と、評価制御部９０３と、処理生成部９０４と、結果部分木送信部９０５と、取得要求送信部９１１と、取得応答受信部９１２と、を備える。
【０１０３】
ここで、遅延評価部９０１は、式もしくは当該式の評価結果を参照する計算可能オブジェクトを、
（ｐ）当該計算可能オブジェクトが式を参照していれば、これを計算して当該式の評価結果を得て、当該式の評価結果を返し、当該計算可能オブジェクトに、当該式にかえて当該式の評価結果を参照させ、
（ｑ）当該計算可能オブジェクトが式の評価結果を参照していれば、当該式の評価結果を返す。
【０１０４】
前述のように、遅延評価部９０１は、必要に応じて、遅延評価（グラフ簡約）に相当する評価を行うのである。計算可能オブジェクトは、ＲＡＭ  １０７内に記憶されているため、ＣＰＵ  １０２が、計算可能オブジェクトを参照して必要があれば評価し、当該オブジェクトを書き換えることにより、遅延評価部９０１として機能する。
【０１０５】
一方、オブジェクト生成部９０２は、蓄積装置４３１に記憶される順序木の根ノードの位置をパラメータとして与えられた問合せ式を参照する計算可能オブジェクトを生成する。
【０１０６】
前述の通り、本実施形態では、ノードの位置は、数値の列にて表現する。したがって、根ノードの位置は、[1]のように表現することができる。
【０１０７】
以下では、ノードの位置を整数の列nsで表現したときに、位置nsを指定する取得要求を出してノードの情報を指定する取得応答を得る問合せ式を、g nsのように関数gを引数nsに適用する形式で記載するものとする。
【０１０８】
この場合、オブジェクト生成部９０２が生成する問合せ式はg [1]であり、ここで生成される計算可能オブジェクトは、当該g [1]を参照する。
【０１０９】
一般に、問合せ式g nsを評価した場合、以下のような処理が行われる。図１０は、問合せ式の評価処理の制御の流れを示すフローチャートである。
【０１１０】
まず、遅延評価部９０１は、nsを指定する取得要求を生成する（ステップＳ１００１）。本実施形態では、nsは、整数の列（リスト）である。
【０１１１】
そして、取得要求送信部９１１は、当該取得要求を、蓄積装置４３１に送信する（ステップＳ１００２）。すなわち、ＣＰＵ  １０２は、インターフェース１０９と共働して、取得要求送信部９１１として機能する。
【０１１２】
ついで、取得応答受信部９１２は、蓄積装置４３１が送信した取得応答を受信する（ステップＳ１００３）。すなわち、ＣＰＵ  １０２は、インターフェース１０９と共働して、取得要求受信部９１２として機能する。
【０１１３】
そして、ＣＰＵ  １０２は、当該取得応答に指定される情報の種類を調べる（ステップＳ１００４）。
【０１１４】
本実施形態では、取得応答にてテキストノードである旨と、当該テキストがssという文字列である旨とが指定されている場合、これをT ssのように表記する。
【０１１５】
また、取得応答にて、要素ノードである旨と、当該要素ノードの名前がesという文字列である旨と、当該要素ノードに子ノードがm個ある旨とが指定されている場合、これをE es mのように表記する。
【０１１６】
取得応答に指定される情報がテキストノードT ssである場合（ステップＳ１００４；T ss）、評価結果としてT' ns ssを返して（ステップＳ１００５）、本処理を終了する。ここで、T'は、評価結果がテキストノードである旨を示すためのコンストラクタである。
【０１１７】
一方、取得応答に指定される情報が要素ノードE es mである場合、評価結果として、E' ns es [g (ns+[1])，g (ns+[2])，...，g (ns+[m])]を返して（ステップＳ１００６）、本処理を終了する。ここで、E'は、評価結果が要素ノードである旨を示すためのコンストラクタである。また、ns++[i]は、数列nsの末尾にiを追加した数列を意味し、g (ns+[1])，g (ns+[2])，...，g (ns+[m])は、いずれも、nsの子ノードの情報を問い合わせるための問合せ式である。
【０１１８】
さて、遅延評価の下では、評価の結果がE' ns es [g (ns+[1])，g (ns+[2])，...，g (ns+[m])]となっていても、g (ns+[1])等、評価結果に含まれる式の評価は直ちには行われない。したがって、必要に応じて処理装置４５１から蓄積装置４３１へ問合せ（ステップＳ１００２〜Ｓ１００３）が行われることになり、通信量の節約ならびに処理装置４５１におけるメモリの節約を図ることができる。
【０１１９】
このように遅延評価される計算可能オブジェクトを用いることにより、評価制御部９０３は、必要なノードの情報が得られるまで、g [1]の評価結果の中身を順に吟味して、必要に応じて遅延評価部９０１に評価させるのである。
【０１２０】
以下、図２に示す例に対して、遅延評価により、計算可能オブジェクトがどのように変化していくか、を図１１を参照しながら説明する。
【０１２１】
まず、当初生成される計算可能オブジェクトは、g [1]を参照している（本図（ａ））。
【０１２２】
これについて取得要求−取得応答を行うと、E "book:book" 3が得られるため、評価結果は、E' [1] "book:book" [g [1,1]，g [1,2]，g [1,3]]となる（本図（ｂ））。
【０１２３】
さてここで、ユーザ等が次に調べたいものが２番目のノードであったとする。すると、評価制御部は、評価結果の中のg [1,2]を評価する。
【０１２４】
その結果、得られる取得応答はE "book:chapter" 1であるから、評価結果は、E' [1,2] "book:chapter" [g [1,2,1]]となる（本図（ｃ））。
【０１２５】
さらに、ユーザ等が次に調べたいものが、ここで得られたものの唯一の子ノードであったとする。すると、評価制御部は、評価結果の中のg [1,2,1]を評価する。
【０１２６】
その結果、得られる取得応答は、E "book:title" 1であるから、評価結果は、E' [1,2,1] "book:title" [g [1,2,1,1]]となる（本図（ｄ））。
【０１２７】
そして、ユーザ等が次に調べたいものが、ここで得られたものの唯一の子ノードであったとする。すると、評価制御部は、評価結果の中のg [1,2,1,1]を評価する。
【０１２８】
その結果、得られる取得応答は、T "Ark2"であるから、評価結果は、T' [1,2,1,1] "Ark2"となる（本図（ｅ））。
【０１２９】
このようにして、最初に生成された計算可能オブジェクトから、リーフに割り当てられた文字列「Ark2」に至るまでのトラバースが自然に行えたこととなる。
【０１３０】
しかも、このトラバースの際には、トラバースに必要となった問合せのみが生じており、それ以外のノードに関する問合せは生じていない。このように、遅延評価によれば、ノードを伝達するための通信量を必要最小限にした上で、かつ、自然にトラバースを表現することができるのである。
【０１３１】
さて、評価結果として必要なリーフやノードの情報が得られた場合、これをユーザの指示等によって変更したい場合がある。たとえば、図２に示す例では、遅延評価によって、
T' [1,3,1,1] "code" [E' [1,3,1,1,1] "getPtree("abc[1]")"]
が得られる。ただし、"は文字列内の二重引用部を意味する。
【０１３２】
処理系によっては、これを、ある種のプログラムの断片とみなして、処理を行うことができる。
【０１３３】
図１２は、このような処理により、元の順序木を更新する処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
【０１３４】
本処理は、評価結果をトラバースする際に起動されるように構成することができる。
【０１３５】
まず、処理生成部９０４は、トラバース先が、プログラム断片として実行可能であるか否かを判断する（ステップＳ１２０１）。実行可能でない場合（ステップＳ１２０１；Ｎｏ）、本処理を終了する。
【０１３６】
実行可能である場合（ステップＳ１２０１；Ｙｅｓ）、トラバース先から、実行結果を書き込むべき順序木の位置を取得する（ステップＳ１２０２）。上記の例の場合、code要素の位置である[1,3,1,1]が実行結果を書き込むべき位置に相当する。
【０１３７】
次に、code要素の子ノードであるテキストノードから、プログラム断片を抽出する（ステップＳ１２０３）。上記の例の場合、抽出されるプログラム断片は、「getPtree("abc[1]")」である。
【０１３８】
そして、抽出されたプログラム断片を実行する（ステップＳ１２０４）。実行結果が、「Hello.」という文字列であったものとする。
【０１３９】
さらに、実行されたプログラム断片と、実行結果を表す文字列と、これを書き込むべき場所と、を指定する部分木を生成する（ステップＳ１２０５）。これは、上述の通り、
<put path="[1,3,1,1]">
<code>getPtree("abc[1]")</code>
<result>Hello.</result>
</put>
である。
【０１４０】
そして、生成された部分木を、結果部分木送信部９０５が、蓄積装置４３１に送信して（ステップＳ１２０６）、本処理を終了する。この後、蓄積装置４３１は、上述のような処理を行って、順序木を更新するのである。
【実施例２】
【０１４１】
上記実施形態では、取得応答にて子ノードの数を返すこととし、ノードの位置は*を用いたXPath形式に類似する手法を用いていた。
【０１４２】
しかしながら、取得要求が行われるたびに、蓄積装置４３１側でＤＯＭ関数を呼び出して、当該子ノードのそれぞれに重複のない識別子を割り当て、識別子の列を取得応答にて返すこととしても良い。
【０１４３】
この場合、当該識別子をパスのかわりに利用することとし、当該列に含まれる識別子の数を子ノードの数として扱うことにより、上記実施形態と同様の処理を実現することができる。
【産業上の利用可能性】
【０１４４】
以上説明したように、本発明によれば、本発明によれば、順序木を蓄積する蓄積装置と当該蓄積された順序木を処理する処理装置とからなる情報処理システムにおいて、順序木のトラバースを自然に行う一方で、できるだけ通信量を低減するのに好適な情報処理システム、蓄積装置、処理装置、蓄積方法、処理方法、ならびに、これらをコンピュータにて実現するためのプログラムを提供することができ、通信技術を用いた情報処理に適用することができる。
【図面の簡単な説明】
【０１４５】
【図１】情報処理装置の概要構成を示す模式図である。
【図２】ＸＭＬ形式データの例を示す説明図である。
【図３】ＸＭＬ形式データに対応する順序木の例を示す説明図である。
【図４】本実施形態に係る情報処理システムの概要構成を示す説明図である。
【図５】蓄積装置の概要構成を示す模式図である。
【図６】蓄積装置で実行される応答処理の制御の流れを示すフローチャートである。
【図７】蓄積装置で実行される置換処理の制御の流れを示すフローチャートである。
【図８】更新された順序木の様子を示す説明図である。
【図９】本実施形態に係る処理装置の概要構成を示す模式図である。
【図１０】問合せ式の評価処理の制御の流れを示すフローチャートである。
【図１１】遅延評価の様子を示す説明図である。
【図１２】順序木を更新する処理の制御の流れを示すフローチャートである。
【符号の説明】
【０１４６】
１０１  情報処理装置
１０２  ＣＰＵ
１０３  ＲＯＭ
１０４  ＨＤ
１０５  キーボード
１０６  マウス
１０７  ＲＡＭ
１０８  表示装置
１０９  インターフェース
１１０  ＦＤドライブ
１１１  ＣＤ−ＲＯＭドライブ
４０１  情報処理システム
４３１  蓄積装置
４５１  処理装置
４７１  通信経路
５０１  記憶部
５０２  取得要求受信部
５０３  取得応答送信部
５０４  結果部分木受信部
５０５  置換更新部
９０１  遅延評価部
９０２  オブジェクト生成部
９０３  評価制御部
９０４  処理生成部
９０５  結果部分木送信部
９１１  取得要求送信部
９１２  取得応答受信部
【図１】
2005234901.tif 000003
【図２】
2005234901.tif 000004
【図３】
2005234901.tif 000005
【図４】
2005234901.tif 000006
【図５】
2005234901.tif 000007
【図６】
2005234901.tif 000008
【図７】
2005234901.tif 000009
【図８】
2005234901.tif 000010
【図９】
2005234901.tif 000011
【図１０】
2005234901.tif 000012
【図１１】
2005234901.tif 000013
【図１２】
2005234901.tif 000014