(57)【要約】【課題】識別情報と該識別情報に関連付けられた情報本体から成るデータ構造を有するデータ内を効率良く検索する。【解決手段】データ処理装置は、複数の構成要素から成る識別情報と該識別情報に関連付けられた情報本体から成るデータ構造を有するデータを処理する。データ処理装置は、データを格納するためのデータ格納手段と、インデックス生成手段と、情報検索手段とを備える。インデックス生成手段は、データに基づいて、識別情報と情報本体との対応を示すインデックスを、識別情報を構成する複数の構成要素単位で生成する。情報検索手段は、識別情報とインデックスを構成要素単位で照合することで、識別情報に関連付けられた情報本体を検索する。【選択図】図６
2008102671.tif 000002
【特許請求の範囲】
【請求項１】
複数の構成要素から成る識別情報と前記識別情報に関連付けられた情報本体から成るデータ構造を有するデータを処理するデータ処理装置であって、
前記データを格納するためのデータ格納手段と、
前記データに基づいて、前記識別情報と前記情報本体との対応を示すインデックスを、前記識別情報を構成する前記構成要素単位で生成するインデックス生成手段と、
前記識別情報と前記インデックスを前記構成要素単位で照合することで、前記識別情報に関連付けられた前記情報本体を検索する情報検索手段と、
を備えるデータ処理装置。
【請求項２】
請求項１に記載のデータ処理装置において、
前記インデックスは、複数の前記構成要素にそれぞれ対応するノードを、前記識別情報を構成する順にリンクしたツリー構造を有し、前記複数のノードのうち、前記識別情報を構成する最後の構成要素に対応するノードに、前記情報本体が対応付けられている、データ処理装置。
【請求項３】
請求項２に記載のデータ処理装置において、
前記データは、構造化文書に含まれるデータであり、
複数の前記構成要素から成る識別情報は、文字列から成る要素名であり、
前記識別情報に関連付けられた情報本体は、前記要素名に対応する要素の内容である、データ処理装置。
【請求項４】
請求項３に記載のデータ処理装置において、
複数の前記構成要素は、前記要素名を構成する文字である、データ処理装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載のデータ処理装置は、さらに、
前記情報本体を用いた処理を実行する複数のデータ処理部を備え、
前記データ処理部は、前記識別情報を指定して前記情報本体を要求し、
前記情報検索手段は、前記要求に応じて、指定された前記識別情報に関連付けられた前記情報本体を検索する、データ処理装置。
【請求項６】
請求項５に記載のデータ処理装置は、さらに、
ローカルデバイスに接続するための第１のインタフェースを備え、
前記データ処理部は前記ローカルデバイスに関連する処理を行う、データ処理装置。
【請求項７】
請求項１ないし請求項６のいずれかに記載のデータ処理装置は、さらに、
ネットワークに接続するための第２のインタフェースを備え、
前記データは前記ネットワークを介して接続されたコンピュータから取得される、データ処理装置。
【請求項８】
複数の構成要素から成る識別情報と前記識別情報に関連付けられた情報本体から成るデータ構造を有するデータ内を検索する方法であって、
前記データを格納し、
前記データに基づいて、前記識別情報と前記情報本体との対応を示すインデックスを、前記識別情報を構成する前記構成要素単位で生成し、
前記識別情報と前記インデックスを前記構成要素単位で照合することで、前記識別情報に関連付けられた前記情報本体を検索する、方法。
【請求項９】
複数の構成要素から成る識別情報と前記識別情報に関連付けられた情報本体から成るデータ構造を有するデータ内を検索するためのコンピュータプログラムであって、
前記データを格納する機能と、
前記データに基づいて、前記識別情報と前記情報本体との対応を示すインデックスを、前記識別情報を構成する前記構成要素単位で生成する機能と、
前記識別情報と前記インデックスを前記構成要素単位で照合することで、前記識別情報に関連付けられた前記情報本体を検索する機能と
をコンピュータに実現させるコンピュータプログラム。
【請求項１０】
複数の構成要素から成る識別情報と前記識別情報に関連付けられた情報本体から成るデータ構造を有するデータに基づいて生成されるインデックスデータであって、
複数の前記構成要素にそれぞれ対応するノードを、前記識別情報を構成する順にリンクしたツリー構造を有し、前記複数のノードのうち、前記識別情報を構成する最後の構成要素に対応するノードに、前記情報本体が対応付けられているインデックスデータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイスと接続される装置、データ内を検索する方法、コンピュータプログラム、および、インデックスデータに関する。
【背景技術】
【０００２】
ネットワークに接続されたクライアント装置とサーバ装置との間の通信、例えば、クライアント装置からサーバ装置へのリクエストの送信や、サーバ装置からクライアント装置へのレスポンスの送信に、ＸＭＬ（eXtensible Markup Language）データを用いることが広く普及し始めている。ＸＭＬデータは、要素名が記述された開始タグおよび終了タグと、開始タグと終了タグに挟まれた要素の内容と、から成る要素を基本とするデータ構造を有している。ＸＭＬデータに含まれる要素の内容を用いて何らかの処理を行おうとするプログラムは、ＸＭＬデータに含まれる要素の中から必要な要素の内容を検索して取得する必要がある。
【０００３】
しかしながら、大きなＸＭＬデータには大量の要素が含まれるため、かかる検索を高速に行うことは比較的困難であった。このような課題を解決するため、例えば、ＸＭＬデータの木構造をリンクとノードに分解し、テーブルに各リンク情報と各ノード情報を関係付けて記憶する技術が知られている（例えば、特許文献１）。この技術によれば、ＸＭＬデータの木構造を辿る複雑な問い合わせに応じて、高速にＸＭＬデータ内を検索することができる。
【０００４】
【特許文献１】特開２００１−３４６１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、要素名を検索キーとした単純な問い合わせに応じて、必要な要素の内容をＸＭＬデータの中から検索して取得する技術についても、さらなる改善が望まれていた。なお、このような課題は、ＸＭＬデータの中の検索に限らず、その他の構造化文書、例えば、ＨＴＭＬ（HyperText Markup Language）データの中の検索などに共通する課題であった。一般的に言えば、ＸＭＬデータにおける要素名のような識別情報と、ＸＭＬデータにおける要素の内容のような上記識別情報に関連付けられた情報本体からなるデータ構造を有するデータ内の検索に共通する課題であった。
【０００６】
本発明は、複数の構成要素から成る識別情報と該識別情報に関連付けられた情報本体から成るデータ構造を有するデータ内を効率良く検索することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題の少なくとも一部を解決するため、本発明の第１の態様は、複数の構成要素から成る識別情報と前記識別情報に関連付けられた情報本体から成るデータ構造を有するデータを処理するデータ処理装置を提供する。第１の態様に係るデータ処理装置は、前記データを格納するためのデータ格納手段と、インデックス生成手段と、情報検索手段と、を備える。前記インデックス生成手段は、前記データに基づいて、前記識別情報と前記情報本体との対応を示すインデックスを、前記識別情報を構成する前記複数の構成要素単位で生成する。前記情報検索手段は、前記識別情報と前記インデックスを前記構成要素単位で照合することで、前記識別情報に関連付けられた前記情報本体を検索する。
【０００８】
第１の態様に係るデータ処理装置によれば、識別情報を構成する構成要素単位でインデックスを生成し、識別情報とインデックスを構成要素単位で照合することで情報本体を検索する。この結果、識別情報を構成する構成要素の数分の照合のみで、情報本体を高速に検索することができる。
【０００９】
第１の態様に係るデータ処理装置において、前記インデックスは、複数の前記構成要素にそれぞれ対応するノードを、前記識別情報を構成する順にリンクしたツリー構造を有し、前記複数のノードのうち、前記識別情報を構成する最後の構成要素に対応するノードに、前記情報本体が対応付けられている。こうすれば、識別情報とノードとを構成要素単位で照合しながら、ノードをたどることで、高速に情報本体を検索することができる。
【００１０】
第１の態様に係るデータ処理装置において、前記データは、構造化文書に含まれるデータであり、複数の前記構成要素から成る識別情報は、文字列から成る要素名であり、前記識別情報に関連付けられた情報本体は、前記要素名に対応する要素の内容であっても良い。こうすれば、構造化文書内の要素名に対応する要素の内容を高速に検索することができる。
【００１１】
第１の態様に係るデータ処理装置において、複数の前記構成要素は、前記要素名を構成する文字であっても良い。こうすれば、要素名を構成する文字数分の照合を行うだけで、高速に構造化文書内の要素の内容を検索することができる。
【００１２】
第１の態様に係るデータ処理装置において、前記情報本体を用いた処理を実行する複数のデータ処理部を備え、前記データ処理部は、前記識別情報を指定して前記情報本体を要求し、前記情報検索手段は、前記要求に応じて、指定された前記識別情報に関連付けられた前記情報本体を検索しても良い。こうすれば、複数のデータ処理部は、指定した識別情報に関連付けられた情報本体を高速に取得することができる。
【００１３】
第１の態様に係るデータ処理装置は、さらに、ローカルデバイスに接続するための第１のインタフェースを備え、前記データ処理部は前記ローカルデバイスに関連する処理を行っても良い。また、第１の態様に係るデータ処理装置は、さらに、ネットワークに接続するための第２のインタフェースを備え、前記データは前記ネットワークを介して接続されたコンピュータから取得されても良い。
【００１４】
なお、本発明は、種々の態様で実現することが可能であり、例えば、複数の構成要素から成る識別情報と前記識別情報に関連付けられた情報本体から成るデータ構造を有するデータ内を検索する方法のような方法発明として実現することができる。さらに、本発明は、上記装置または方法をコンピュータに実現させるコンピュータプログラム、そのコンピュータプログラムを記録した記録媒体、そのコンピュータプログラムを含み搬送波内に具現化されたデータ信号、等の態様で実現することができる。さらに、本発明は、複数の構成要素から成る識別情報と前記識別情報に関連付けられた情報本体から成るデータ構造を有するデータに基づいて生成されるインデックスデータとして実現することができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明について、図面を参照しつつ、実施例に基づいて説明する。
【００１６】
Ａ．実施例：
・ネットワークシステムの構成：
図１を参照して、本実施例におけるネットワークシステムの構成について説明する。図１は、ネットワークシステムの概略構成を示す説明図である。ネットワークシステムは、図１に示すように、プリントサーバ装置１００と、プリンタ２００と、クライアント装置としての計算機（以下、単にクライアントという。）３００と、を含む。クライアント３００と、プリントサーバ装置１００とは、ＬＡＮなどのネットワークＮＷを介して互いに接続されている。プリントサーバ装置１００と、プリンタ２００とは、ＵＳＢ（Universal Serial Bus）ケーブルＣＶを用いて接続されている。プリンタ２００とプリントサーバ装置１００とは、同一の筐体の中に納められていても良いし、それぞれ別体の筐体に納められていても良い。
【００１７】
プリントサーバ装置１００は、図１に示すように、中央演算装置（ＣＰＵ）１１０と、メモリ１２０と、ＵＳＢホストインタフェース（ＩＦ）部１３０と、ネットワークインタフェース（ＩＦ）部１４０と、を備えている。
【００１８】
ＵＳＢホストＩＦ部１３０は、ＵＳＢケーブルＣＶを介してプリンタ２００などのローカルデバイスと通信するためのインタフェースであり、ＵＳＢ規格に従ったデータ通信をＵＳＢケーブルＣＶ接続されたローカルデバイスとの間で実行する。
【００１９】
ネットワークＩＦ部１４０は、ネットワークＮＷを介してクライアント３００と通信するためのインタフェースであり、イーサネットの仕様に対応したケーブルを介してネットワークＮＷと接続される。
【００２０】
ＣＰＵ１１０は、メモリ１２０に格納されている各種プログラムを実行することにより、プリントサーバとしての機能を実現する。
【００２１】
メモリ１２０には、種々のプログラムやデータが格納されるが、図１においては、本実施例における処理に必要な構成を選択的に図示し、本明細書においては、図示された構成について説明する。メモリ１２０には、サービスプログラム１２２と、ＸＭＬ情報庫ブロック１２４と、通信プロトコルプログラム１２６とが格納されている。
【００２２】
サービスプログラム１２２は、クライアント３００のリクエストに応じてプリンタ２００に印刷を実行させるプリントサービスや、クライアント３００のリクエストに応じてプリンタ２００の情報を提供したりプリンタ２００の設定・制御を行ったりするプリンタ管理サービスなど、プリントサーバとしてのサービスを実行するためのプログラムである。サービスプログラム１２２は、提供するサービスに関連する複数の処理モジュール、図１に示す例では、第１処理モジュールＭ１、第２処理モジュールＭ２、第３処理モジュールＭ３を含む。複数の処理モジュールＭ１〜Ｍ３は、プリントサーバとしての機能の一部をそれぞれ担うモジュールである。処理モジュールには、例えば、クライアント３００からのリクエストを解析してサービスの種類を特定し、特定したサービスを実行するモジュールを呼び出すモジュールや、サービスを実行するモジュールや、サービスの実行結果を受けてクライアントに対するレスポンスを作成・実行するモジュールが含まれる。
【００２３】
ＸＭＬ情報庫ブロック１２４は、クライアント３００からのリクエストを保持するための機能ブロックである。クライアント３００からのリクエストは、後述するようにＸＭＬ形式で記述されたＸＭＬデータである。ＸＭＬ情報庫ブロック１２４は、ＸＭＬデータアクセスモジュール１２４ａと、インデックス生成モジュール１２４ｂと、ＸＭＬデータ格納部１２４ｃと、インデックス格納部１２４ｄとを含む。
【００２４】
ＸＭＬデータ格納部１２４ｃは、クライアント３００からのリクエストとして受信されたＸＭＬデータを格納するための記憶領域である。ＸＭＬデータは、加工されることなく、ＸＭＬデータ格納部１２４ｃにそのまま格納される。
【００２５】
インデックス格納部１２４ｄは、後述するインデックス（索引情報）を格納するための記憶領域である。
【００２６】
ＸＭＬデータアクセスモジュール１２４ａは、他のプログラム、本実施例では、サービスプログラム１２２の処理モジュールＭ１〜Ｍ３に対して、他のプログラムがＸＭＬデータ格納部１２４ｃに格納されたＸＭＬデータにアクセスするためのＡＰＩ（Application Program Interface）を提供するモジュールである。詳細は後述するが、本実施例におけるＸＭＬデータアクセスモジュール１２４ａは、請求項における情報検索手段と対応する。
【００２７】
インデックス生成モジュール１２４ｂは、ＸＭＬデータ格納部１２４ｃに格納されたＸＭＬデータに基づいて、インデックス格納部１２４ｄに格納されるインデックスを生成するモジュールである。
【００２８】
通信プロトコルプログラム１２６は、サービスプログラム１２２およびＸＭＬ情報庫ブロック１２４の下位モジュールとして、所定の通信プロトコルに従った外部機器との通信を実行するプログラムである。具体的には、通信プロトコルプログラム１２６は、ネットワークＩＦ部１４０を介してクライアント３００との通信、例えば、クライアント３００からのリクエストの受信や、クライアント３００へのリクエストの送信を、ＳＯＡＰ、ＨＴＴＰ、ＴＣＰ／ＩＰなどのプロトコルに従って実行する。また、通信プロトコルプログラム１２６は、部１３０を介してプリンタ２００との通信を、ＵＳＢプロトコルに従って実行する。
【００２９】
プリンタ２００は、図１に示すように、ＣＰＵ２１０と、メモリ２２０と、ＵＳＢデバイスインタフェース（ＩＦ）部２３０と、プリンタエンジン２４０とを備えている。
【００３０】
ＵＳＢデバイスＩＦ部２３０は、ＵＳＢケーブルＣＶを介してプリントサーバ装置１００と通信するためのインタフェースである。
【００３１】
プリンタエンジン２４０は、実際に印刷を行う機構部分であり、感光体ドラム等、用紙に印刷するためのハードウェア群から成る。
【００３２】
ＣＰＵ２１０は、メモリ２２０に格納されている制御プログラム２２２を実行することにより、プリンタ２００の各構成要素の制御を行う。例えば、ＣＰＵ２１０は、上述したＵＳＢデバイスＩＦ部２３０を制御して、プリントサーバ装置１００から印刷データを受け取り、プリンタエンジン２４０を制御して、受け取った印刷データに基づく印刷を行う。
【００３３】
メモリ２２０には、ＣＰＵ２１０によるプリンタ２００の制御を実現するための上述した制御プログラム２２２が格納されている。
【００３４】
クライアント３００は、例えば、ＣＰＵやメモリを備える周知のパーソナルコンピュータであり、ＨＴＴＰクライアントプログラム（図示省略）がインストールされている。クライアント３００はＨＴＴＰクライアントプログラムを用いて、プリントサーバ装置１００に対してリクエストを送信することにより、プリントサーバ装置１００が提供する上述のサービスを利用することができる。
【００３５】
・ネットワークシステムの動作：
プリントサーバ装置１００が、クライアント３００からリクエストを受け付け、該リクエストに対するレスポンスをクライアント３００に対して送信するサービス提供動作を具体例として、ネットワークシステムの動作を、プリントサーバ装置１００のＸＭＬ情報庫ブロック１２４の動作を中心に説明する。
【００３６】
図２は、ＸＭＬ情報庫ブロック１２４の動作ステップを示すフローチャートである。クライアント３００は、プリントサーバ装置１００からサービスの提供を受ける場合、提供を求めるサービス内容を記述したＸＭＬデータを生成し、生成したＸＭＬデータをリクエストとしてプリントサーバ装置１００に対して送信する。リクエストとしてのＸＭＬデータは、例えば、ＳＯＡＰ（Simple Object Access Protocol）を用いて、ＳＯＡＰエンベロープに格納されて送信される。プリントサーバ装置１００において、サービスプログラム１２２によってプリントサーバ装置１００からのリクエストとしてのＸＭＬデータが受信される（ステップＳ１０２）と、かかるＸＭＬデータは、加工されることなくテキストデータのままで、ＸＭＬ情報庫ブロック１２４のＸＭＬデータ格納部１２４ｃに格納される（ステップＳ１０４）。
【００３７】
図３は、ＸＭＬデータ格納部１２４ｃに格納されるＸＭＬデータの一例を示す図である。なお、ダブルスラッシュ（／／）以降の記述は、ＸＭＬデータの要素の説明を理解の容易のために示したものであり、実際のＸＭＬデータには含まれない。図３に示すＸＭＬデータは、プリンタ２００に印刷設定情報を設定することを要求するリクエストを表す。図３に示すように、ＸＭＬデータは、タグと、タグに対応する情報本体（要素の内容）とから成る要素によって構成されるデータ構造を有している。要素は、以下のような形式を有している。
＜要素名  （属性情報）＞要素の内容＜／要素名＞
属性情報は省略可能であり、図３に示す例では、属性情報は記述されていない。要素の内容は、開始タグ＜要素名  （属性情報）＞と終了タグ＜／要素名＞に挟まれている。
【００３８】
なお、要素は入れ子構造をとることができる。すなわち、一の要素の内容に他の要素を含むことができる。例えば、図３に示すＸＭＬデータにおいて、要素名SetPrintSettingRequestの要素の内容は、２行目から７行目までの６つの要素である。一方、要素名PaperSizeの要素の内容は、「Ａ４」である（図３：２行目）。
【００３９】
ＸＭＬデータがＸＭＬデータ格納部１２４ｃに格納されると、ＸＭＬ情報庫ブロック１２４のインデックス生成モジュール１２４ｂは、ＸＭＬデータ格納部１２４ｃに格納されたＸＭＬデータに基づいてインデックスを生成するインデックス生成処理を実行する（ステップＳ１０６）。
【００４０】
・インデックス生成処理：
図４〜図８を参照して、インデックス生成処理について説明する。図４は、インデックス生成処理の処理ルーチンを示すフローチャートである。図５は、インデックス生成処理の説明のための簡略化されたＸＭＬデータを示す第１の図である。図６は、インデックスを概念的に示す第１の図である。図７は、インデックス生成処理の説明のための簡略化されたＸＭＬデータを示す第２の図である。図８は、インデックスを概念的に示す第２の図である。
【００４１】
実際には、図３に示すようなＸＭＬデータや、さらに長大なＸＭＬデータに対してインデックス生成処理が行われる場合が多いが、理解の容易のため図５に示す簡略化されたＸＭＬデータに対してインデックス生成処理が行われる場合を具体例としてインデックス生成処理について説明する。
【００４２】
インデックス生成処理によって生成されるインデックスは、図６に示すように、スタートノードを基点（ルート）として、ノードをリンクしたツリー構造を有している。スタートノードを除く各ノードには、一つの文字が対応付けられており、各ノードは、対応付けられた文字が、ＸＭＬデータの要素名を構成する順にリンクしている。図６において、丸印は、ノードを概念的に表しており、丸印の内部の文字は、そのノードに対応付けられた文字を表している。さらに、ノード間の矢印はリンクを表し、矢印の始点に位置するノードは矢印の終点に位置するノードの親ノードであり、矢印の終点に位置するノードは矢印の始点に位置するノードの子ノードである。
【００４３】
インデックス生成処理は、上述したＸＭＬ情報庫ブロック１２４のインデックス生成モジュール１２４ｂによって実行される。インデックス生成処理が開始されると、インデックス生成モジュール１２４ｂは、ＸＭＬデータ格納部１２４ｃに格納されたＸＭＬデータを先頭から順次に走査していき（ステップＳ２０２）、要素名の検出を行う（ステップＳ２０４）。
【００４４】
インデックス生成モジュール１２４ｂは、要素名を検出すると（ステップＳ２０４：ＹＥＳ）、スタートノードを着目ノードに設定し（ステップＳ２０６）、変数ｎを初期化（１を代入）する（ステップＳ２０８）。
【００４５】
インデックス生成モジュール１２４ｂは、着目ノードの子ノードの中に、検出された要素名のｎ番目の文字が対応付けられたノードが在るか否かをチェックする（ステップＳ２１０）。インデックス生成モジュール１２４ｂは、要素名のｎ番目の文字が対応付けられた子ノードがないと判断すると（ステップＳ２１０：ＮＯ）、着目ノードの新たな子ノードを生成する（ステップＳ２１２）。生成される新たな子ノードには、検出された要素名のｎ番目の文字が対応付けられる。
【００４６】
ここで、ノードについて、さらに、詳細に説明しておく。インデックス生成モジュール１２４ｂは、ＪＡＶＡやＣ＋＋などのオブジェクト指向言語を用いて作成されている。ノードは、所定のオブジェクト・クラスのインスタンスである。ノードのオブジェクト・クラスには、以下のような種類のデータ型が定義される。
・m_Char  :ノードに対応付けられる文字（１バイト）
・m_ChildNodePtrList  :子ノードへのポインタのリスト（子ノードがない場合は空データ（Null）とされる）
・m_ChildNodeCount  :子ノードの数
・m_ValuePtrList  :ノードに対応付けられる文字（m_Char）が最終文字である要素名を持つ要素の内容へのポインタ（最終文字でない場合は空データ（Null）とされる）のリスト
・m_ValueSizeList  : ノードに対応付けられる文字（m_Char）が最終文字である要素名を持つ要素の内容のサイズ（最終文字でない場合は空データ（Null）とされる）のリスト
・m_ValueCount  : ノードに対応付けられる文字（m_Char）が最終文字である要素名を持つ要素の内容の数（ＸＭＬデータに同名の要素が複数存在する場合のため（後述））
【００４７】
すなわち、本実施例では、ノードの実体は、上述のオブジェクト・クラスに定義されたデータ型に対応する実データの集合（インスタンス）であり、インデックスの実体は、ノードの実体であるデータ集合のリストである。
【００４８】
以上の説明から解るように、本実施例において新たな子ノードを生成することは、上述のオブジェクト・クラスのインスタンスを新たに生成することである。
【００４９】
具体的には、インデックス生成モジュール１２４ｂは、検出された要素のｎ番目の文字をm_Charとする子ノードを新たに生成し、着目ノードのm_ChildNodePtrListに新たに生成した子ノードの先頭アドレスを格納したポインタを追加し、着目ノードのm_ChildNodeCountの値に１を加える。
【００５０】
インデックス生成モジュール１２４ｂは、新たに子ノードを生成する（ステップＳ２１２）と、あるいは、検出された要素名のｎ番目の文字が対応付けられた子ノードが既にあると判断すると（ステップＳ２１０：ＹＥＳ）、当該子ノードを着目ノードに設定する（ステップＳ２１４）。
【００５１】
インデックス生成モジュール１２４ｂは、新たな着目ノードを設定すると、検出された要素名のｎ番目の文字は、その要素名の最終文字であるか否かを判断する（ステップＳ２１６）。インデックス生成モジュール１２４ｂは、最終文字でないと判断すると（ステップＳ２１６：ＮＯ）、変数ｎをインクリメントして（ステップＳ２１８）、ステップＳ２１０にリターンする。
【００５２】
インデックス生成モジュール１２４ｂは、最終文字であると判断すると（ステップＳ２１６：ＹＥＳ）、着目ノードに検出された要素名を持つ要素の内容を対応付ける（ステップＳ２２０）。具体的には、インデックス生成モジュール１２４ｂは、着目ノードのm_ValuePtrListに、ＸＭＬデータ格納部１２４ｃにおける当該要素の内容のアドレスを格納したポインタを追加すると共に、着目ノードのm_ValueSizeListに、当該要素の内容のサイズを追加する。さらに、インデックス生成モジュール１２４ｂは、着目ノードのm_ValueCountの値に１を加える。
【００５３】
インデックス生成モジュール１２４ｂは、着目ノードに当該要素の内容を対応付けると、ＸＭＬデータ格納部１２４ｃに格納されたＸＭＬデータの走査が終了したか否かを判断する（ステップＳ２２２）。インデックス生成モジュール１２４ｂは、走査が終了していないと判断すると（ステップＳ２２２：ＮＯ）、ステップＳ２０２に戻って、検出された要素名に続くＸＭＬデータを、次の要素名が検出されるまで走査する（ステップＳ２０２、Ｓ２０４）。以下、上述した処理が繰り返される。
【００５４】
インデックス生成モジュール１２４ｂは、インデックス生成モジュール１２４ｂは、走査が終了したと判断すると（ステップＳ２２２：ＹＥＳ）、インデックス生成処理を終了する。
【００５５】
図５に示す簡略化されたＸＭＬデータに対して上述したインデックス生成処理が行われた結果、生成されるインデックスが図６に示されている。図６において、各ノード（丸印）の上に示された数字は、ノードの生成順である。具体例として図５に示すＸＭＬデータに対して行われるインデックス生成処理を簡単に説明する。
【００５６】
まず、インデックス生成モジュール１２４ｂは、図５に示すＸＭＬデータを先頭から走査していき、要素名”ＡＢ”を検出する（図４：ステップＳ２０４：ＹＥＳ）。最初は、スタートノードのみしかないので（図４：ステップＳ２１０：ＮＯ）、インデックス生成モジュール１２４ｂは、スタートノードの新たな子ノードとして、文字”Ａ”が対応付けられたノード（m_char=”Ａ”のノード、ノード［Ａ］と表記する。）を生成する（図４：ステップＳ２１２）。
【００５７】
次に、インデックス生成モジュール１２４ｂは、ノード［Ａ］を着目ノードとし（図４：ステップＳ２１４）、ノード［Ａ］に子ノードはないので（図４：ステップＳ２１０：ＮＯ）、ノード［Ａ］の子ノードとして新たにノード［Ｂ］を生成する（図４：ステップＳ２１２）。文字”Ｂ”は要素名”ＡＢ”の最終文字であるので（図４：ステップＳ２１６：ＹＥＳ）、インデックス生成モジュール１２４ｂは、ノード［Ｂ］に要素名”ＡＢ”の要素の内容「Ｖａｌｕｅ１」をノード［Ｂ］に対応付ける（図４：ステップＳ２２０）。すなわち、インデックス生成モジュール１２４ｂは、ＸＭＬデータ格納部１２４ｃにおける「Ｖａｌｕｅ１」の先頭アドレスを格納したポインタをm_ValuePtrListに、「Ｖａｌｕｅ１」のサイズをm_ValueSizeListにそれぞれ格納する。
【００５８】
インデックス生成モジュール１２４ｂは、次に、要素名”ＣＤ”を検出する（図４：ステップＳ２０４：ＹＥＳ）。インデックス生成モジュール１２４ｂは、要素名”ＡＢ”を検出した時の処理と同様に、スタートノードの子ノードとしてノード［Ｃ］を、ノード［Ｃ］の子ノードとしてノード［Ｄ］をそれぞれ生成し、要素名”ＣＤ”の最終文字が対応付けられたノード［Ｄ］に要素名”ＣＤ”の要素の内容「Ｖａｌｕｅ２」を対応付ける。
【００５９】
インデックス生成モジュール１２４ｂは、次に、要素名”ＡＢＣ”を検出する（図４：ステップＳ２０４：ＹＥＳ）。インデックス生成モジュール１２４ｂは、スタートノードの子ノードに既にノード［Ａ］が存在するので（図４：ステップＳ２１０：ＹＥＳ）、新たなノードは生成せず、既に存在するノード［Ａ］を着目ノードにする（図４：ステップＳ２１４）。そして、インデックス生成モジュール１２４ｂは、ノード［Ａ］の子ノードに既にノード［Ｂ］が存在するので（図４：ステップＳ２１０：ＹＥＳ）、新たなノードは生成せず、既に存在するノード［Ｂ］を着目ノードにする（図４：ステップＳ２１４）。インデックス生成モジュール１２４ｂは、ノード［Ｂ］に子ノードはないので（図４：ステップＳ２１０：ＮＯ）、ノード［Ｂ］の子ノードとして新たにノード［Ｃ］を生成し（図４：ステップＳ２１２）、要素名”ＡＢＣ”の最終文字が対応付けられたノード［Ｃ］に要素名”ＡＢＣ”の要素の内容「Ｖａｌｕｅ３」を対応付ける（図４：ステップＳ２２０）。
【００６０】
インデックス生成モジュール１２４ｂは、次に、要素名”ＡＥ”を検出する（図４：ステップＳ２０４：ＹＥＳ）。インデックス生成モジュール１２４ｂは、スタートノードの子ノードに既にノード［Ａ］が存在するので（図４：ステップＳ２１０：ＹＥＳ）、新たなノードは生成せず、既に存在するノード［Ａ］を着目ノードにする（図４：ステップＳ２１４）。インデックス生成モジュール１２４ｂは、ノード［Ａ］の子ノードにはノード［Ｂ］しかないので（図４：ステップＳ２１０：ＮＯ）、ノード［Ａ］の子ノードとして新たにノード［Ｅ］を生成し（図４：ステップＳ２１２）、要素名”ＡＥ”の最終文字が対応付けられたノード［Ｅ］に要素名”ＡＥ”の要素の内容「Ｖａｌｕｅ４」を対応付ける。
【００６１】
インデックス生成モジュール１２４ｂは、新たな要素名を検出することなく走査を終了するので（図４：ステップＳ２２２：ＹＥＳ）、インデックス生成処理を終了する。この結果、図６に示すインデックスが生成される。
【００６２】
次に、さらに理解を助けるため、別の具体例として、図７に示すＸＭＬデータに対して上述したインデックス生成処理が行われた結果、生成されるインデックスを図８に示す。図７に示すＸＭＬデータは、要素名”ＦＧ”を持つ要素の内容に、要素名”ＦＨ”を持つ要素と、要素名”ＨＩＪ”を持つ要素が含まれる構造、いわゆる入れ子構造を含んでいる（１行目〜４行目）。また、図７に示すＸＭＬデータは、同名の要素名”ＦＨ”を持つ要素を２つ含んでいる（２行目と６行目）。
【００６３】
図８に示すように、入れ子構造の親要素（図７に示す例では、要素名”ＦＧ”の要素）の要素名の最終文字に対応付けられたノード（図８に示す例ではノード［Ｇ］）には、要素の内容として、全ての子要素が対応付けられる（図７、８に示す例では、要素名”ＦＨ”の要素と要素名”ＨＩＪ”の要素）。この結果、後述するＸＭＬデータアクセス処理において、親要素の要素名を指定したアクセスにより、他のプログラム（例えば、処理モジュールＭ１〜Ｍ３）は、親要素に含まれる子要素全てを取得することができる。
【００６４】
図７に示すＸＭＬデータのように、同名の要素名を持つ要素が複数含まれている場合には、その要素名の最終文字に対応付けられたノード（図８に示す例では、ノード［Ｈ］）には、複数の同名の要素のそれぞれの内容（図７、８に示す例では、「Ｖａｌｕｅ５」および「Ｖａｌｕｅ８」）が、対応付けられる。すなわち、一つのノードに複数の要素の内容が対応付けられることがある。
【００６５】
・ＸＭＬデータアクセス処理：
図２に戻って、説明を続ける。インデックスが生成されると、ＸＭＬデータアクセス処理が行われる（ステップＳ１０８）。ＸＭＬデータアクセス処理は、サービスプログラム１２２の処理モジュールＭ１〜Ｍ３の要求に応じて、処理モジュールＭ１〜Ｍ３に対して要素の内容を渡す処理である。例えば、インデックスが生成された後、インデックス生成モジュール１２４ｂは、ＸＭＬデータにアクセス可能になったことをサービスプログラム１２２に通知する。そうすると、サービスプログラム１２２の処理モジュールＭ１〜Ｍ３は、ＸＭＬデータアクセスモジュール１２４ａが提供するＡＰＩをコールすることにより、ＸＭＬデータへのアクセスを行う。
【００６６】
インデックス生成モジュール１２４ｂは、要素名を指定して、当該要素名を持つ要素の内容を取得するためのＡＰＩを、サービスプログラム１２２に提供している。このＡＰＩは、例えば、以下のような書式で表される。
GetElementValue( *name, index, *outputbuf, *size)
ここで、引数*nameは、内容を取得したい要素の要素名（指定要素名）をＸＭＬデータアクセスモジュール１２４ａに渡すためのポインタである。引数indexは、指定要素名の要素が複数ある場合に、これらの要素のうち何番目の要素の内容が取得したいかを指定する変数である。引数*outputbufおよび*sizeは、インデックス生成モジュール１２４ｂが指定要素名を持つ要素の内容のアドレスおよびサイズを返すためのポインタである。
【００６７】
処理モジュールのいずれかが、GetElementValueＡＰＩをコールすると、インデックス生成モジュール１２４ｂは、ＸＭＬデータアクセス処理を開始する。
【００６８】
図９は、ＸＭＬデータアクセス処理の処理ルーチンを示すフローチャートである。ＸＭＬデータアクセスモジュール１２４ａは、ＸＭＬデータアクセス処理を開始すると、上述したポインタ*nameに格納されたアドレスを参照して指定要素名を取得する（ステップＳ３０２）。指定要素名を取得すると、ＸＭＬデータアクセスモジュール１２４ａは、インデックスのスタートノードを着目ノードに設定し（ステップＳ３０４）、変数ｎを初期化（１を代入）する（ステップＳ３０６）。
【００６９】
ＸＭＬデータアクセスモジュール１２４ａは、着目ノードの子ノードの中に、指定要素名のｎ番目の文字が対応付けられたノードが在るか否かをチェックする（ステップＳ３０８）。
【００７０】
ＸＭＬデータアクセスモジュール１２４ａは、指定要素名のｎ番目の文字が対応付けられた子ノードがないと判断すると（ステップＳ３０８：ＮＯ）、指定要素名を持つ要素がＸＭＬデータにないことを示すエラーを、GetElementValueＡＰＩをコールした処理モジュールに返し（ステップＳ３２０）、ＸＭＬデータアクセス処理を終了する。
【００７１】
一方、ＸＭＬデータアクセスモジュール１２４ａは、指定要素名のｎ番目の文字が対応付けられた子ノードがあると判断すると（ステップＳ３０８：ＹＥＳ）、当該子ノードを着目ノードに設定する（ステップＳ３１０）。
【００７２】
ＸＭＬデータアクセスモジュール１２４ａは、新たな着目ノードを設定すると、指定要素名のｎ番目の文字は、指定要素名の最終文字であるか否かを判断する（ステップＳ３１２）。ＸＭＬデータアクセスモジュール１２４ａは、最終文字でないと判断すると（ステップＳ３１２：ＮＯ）、変数ｎをインクリメントして（ステップＳ３１４）、ステップＳ３０８にリターンする。
【００７３】
ＸＭＬデータアクセスモジュール１２４ａは、最終文字であると判断すると（ステップＳ３１２：ＹＥＳ）、着目ノードに要素の内容が対応付けられているか否かを判断する（ステップＳ３１６）。具体的には、ＸＭＬデータアクセスモジュール１２４ａは、着目ノードのm_ValueCountの値が１以上である場合には、着目ノードに要素の内容が対応付けられていると判断し、m_ValueCountの値が０である場合には、着目ノードに要素の内容が対応付けられていないと判断する。
【００７４】
ＸＭＬデータアクセスモジュール１２４ａは、着目ノードに要素の内容が対応付けられていないと判断すると（ステップＳ３１６：ＮＯ）、指定要素名を持つ要素がＸＭＬデータにないことを示すエラーを、GetElementValueＡＰＩをコールした処理モジュールに返し（ステップＳ３２０）、ＸＭＬデータアクセス処理を終了する。
【００７５】
一方、ＸＭＬデータアクセスモジュール１２４ａは、着目ノードに要素の内容が対応付けられていると判断すると（ステップＳ３１６：ＹＥＳ）、着目ノードに対応付けられた要素の内容を、GetElementValueＡＰＩをコールした処理モジュールに返す（ステップＳ３１８）。具体的には、ＸＭＬデータアクセスモジュール１２４ａは、着目ノードのm_ValuePtrListに格納されているポインタの値（アドレス）と、m_ValueSizeListに格納されている要素の内容のサイズを、上述した引数（ポインタ）*outputbufおよび*sizeで指定されたアドレスに書き込む。この結果、GetElementValueＡＰＩをコールした処理モジュールに、指定要素名を持つ要素の内容を取得させることができる。
【００７６】
ＸＭＬデータアクセスモジュール１２４ａは、指定要素名を持つ要素の内容を、GetElementValueＡＰＩをコールした処理モジュールに返すと、ＸＭＬデータアクセス処理を終了する。以上のように、ＸＭＬデータアクセスモジュール１２４ａは、指定要素名を構成する文字とインデックスの各ノードに対応付けられた文字とを照合しながら、ツリー構造のノードをたどることで、指定要素名を持つ要素の内容をＸＭＬデータから検索して処理モジュールに渡す。
【００７７】
図２に戻って説明を続ける。ＸＭＬデータアクセス処理が終了すると、ＸＭＬデータアクセスモジュール１２４ａは、ＸＭＬデータへのアクセス要求、すなわち、GetElementValueＡＰＩのコールは、終了したか否かを判断する（ステップＳ１１０）。サービスプログラム１２２（の各処理モジュール）は、ＸＭＬデータにより表されるリクエストの処理を行い、リクエストの送信元であるクライアント３００にレスポンスを送信すれば、その後、当該ＸＭＬデータにアクセスする必要はなくなる。従って、例えば、サービスプログラム１２２は、ＸＭＬデータにより表されるリクエストに対するレスポンスを送信したら、ＸＭＬデータアクセスモジュール１２４ａにその旨を通知する。ＸＭＬデータアクセスモジュール１２４ａは、かかる通知を受けると、ＸＭＬデータへのアクセス要求は終了したと判断する。
【００７８】
ＸＭＬデータアクセスモジュール１２４ａは、ＸＭＬデータへのアクセス要求はまだ終了していないと判断すると（ステップＳ１１０：ＮＯ）、ステップＳ１０８に戻り、新たなアクセス要求（GetElementValueＡＰＩのコール）を受け付け、これに応じて上述したＸＭＬデータアクセス処理を実行する。ＭＬデータアクセスモジュール１２４ａは、ＸＭＬデータへのアクセス要求は終了したと判断すると（ステップＳ１１０：ＮＯ）、ＸＭＬデータ格納部１２４ｃに格納されたＸＭＬデータおよびインデックス格納部１２４ｄに格納されたインデックスを消去して処理を終了する。
【００７９】
以上説明した本実施例におけるプリントサーバ装置１００によれば、各処理モジュールからの要求に応じて、インデックスを用いてＸＭＬデータ内を検索して、必要な要素の内容を応答する。これにより、各処理モジュールは、高速に必要な要素の内容を取得することができる。例えば、従来のように、ＸＭＬデータを先頭から走査して必要な要素の内容を取得することとすると、要素の内容を取得しようとする度に、ＸＭＬデータを先頭から走査することになり、無駄が生じる。特に、処理モジュールが多く、各処理モジュールがそれぞれ必要な要素の内容を取得する必要がある場合には、何度もＸＭＬデータを先頭から走査し直すことになり、無駄が多い。本実施例では、インデックスを生成する際に、一度、ＸＭＬデータを走査するだけで良い。
【００８０】
また、本実施例におけるインデックスは、要素名を構成する文字単位で生成されたノードを、要素名を構成する順にリンクしたツリー構造を有するので、要素名の文字とノードに対応付けられた文字との照合を、要素名の文字数回行うだけで、ＸＭＬデータの中から必要な要素の内容を検索することができる。したがって、ＸＭＬデータが長大である場合であっても、ＸＭＬデータにおける検索対象の要素の位置に関わらず、高速に要素の内容を検索することができる。
【００８１】
また、ＸＭＬデータは、ＸＭＬデータ格納部１２４ｃに一つだけ格納されるだけであり、各処理モジュールがそれぞれＸＭＬデータを格納する必要がない。このため、各処理モジュールがそれぞれＸＭＬデータを格納するメモリを確保する必要がなく、プリントサーバ装置１００全体としてメモリ資源を節約することができる。
【００８２】
以上の説明から解るように、扱うＸＭＬデータが大きいほど、また、ＸＭＬデータから要素の内容を取得する回数や取得しようとする処理モジュールの数が多いほど、本実施例によるＸＭＬデータの高速化、効率化の効果が大きい。
【００８３】
Ｂ．変形例：
・第１変形例：
上記実施例では、ＸＭＬデータアクセスモジュール１２４ａが提供するＡＰＩとして、GetElementValueＡＰＩについて説明したが、ＸＭＬデータアクセスモジュール１２４ａは、これと共に、あるいは、これに代えて、他のＡＰＩを提供しても良い。例えば、ＸＭＬデータアクセスモジュール１２４ａは、指定要素名を持つ要素の内容の数、すなわち、ＸＭＬデータの中に指定要素名を持つ要素がいくつあるかを取得するためのＡＰＩを提供しても良い。このＡＰＩは、例えば、以下のような書式で表される。
GetElementValueCount( *name, *count)
ここで、引数*nameは、指定要素名をＸＭＬデータアクセスモジュール１２４ａに渡すためのポインタである。引数*countは、インデックス生成モジュール１２４ｂが指定要素名を持つ要素の内容の数を返すためのポインタである。
【００８４】
処理モジュールのいずれかにより、GetElementValueCountＡＰＩがコールされると、ＸＭＬデータアクセスモジュール１２４ａは、上述したＸＭＬデータアクセス処理（図９）と同様の処理を行う。ただし、ＸＭＬデータアクセスモジュール１２４ａは、上述したＸＭＬデータアクセス処理（図９）のステップＳ３１８において、着目ノードに対応付けられた要素の内容に代えて、着目ノードに対応付けられた要素の内容の数（着目ノードのm_ValueCountの値）を返す。
【００８５】
また、インデックス生成モジュール１２４ｂは、ＸＭＬデータ格納部１２４ｃに格納されたＸＭＬデータにおいて、指定要素名を持つ要素の内容を更新するためのＡＰＩを提供しても良い。このＡＰＩは、例えば、以下のような書式で表される。
SetElementValue( *name, index, *inputbuf, *size)
ここで、引数*nameは、指定要素名をＸＭＬデータアクセスモジュール１２４ａに渡すためのポインタである。引数*countは、インデックス生成モジュール１２４ｂが指定要素名を持つ要素の内容の数を返すためのポインタである。引数indexは、指定要素名の要素が複数ある場合に、これらの要素のうち何番目の要素の内容が変更したいかを指定する変数である。引数*inputbufおよび*sizeは、変更後の要素の内容およびサイズをＸＭＬデータアクセスモジュール１２４ａに渡すためのポインタである。
【００８６】
処理モジュールのいずれかにより、SetElementValueＡＰＩがコールされると、ＸＭＬデータアクセスモジュール１２４ａは、上述したＸＭＬデータアクセス処理（図９）と同様の処理を行う。ただし、ＸＭＬデータアクセスモジュール１２４ａは、上述したＸＭＬデータアクセス処理（図９）のステップＳ３１８において、着目ノードに対応付けられた要素の内容を返すことに代えて、着目ノードに対応付けられた要素の内容の変更を実行する。
【００８７】
・第２変形例：
上記実施例では、インデックスは、要素名を構成する文字単位で生成されたノードにより構成されるが、ノードは文字単位に限らず、要素名を構成する所定の構成要素単位で生成されれば良い。例えば、図３に示すＸＭＬデータでは、要素名”PaperSize”、”InputType”、”PrintMode”などが使われているが、これらの要素名を構成する”Paper”、”Size”、”Type”、”Print”、”Mode”などの単語単位で生成されても良い。
【００８８】
・第３変形例：
上記実施例では、ＸＭＬ情報庫ブロック１２４は、プリントサーバ装置１００に備えられているが、プリントサーバ装置に限らず、ＸＭＬデータを処理する種々のデータ処理装置に備えることができる。例えば、ＸＭＬデータを遣り取りして分散処理を行うコンピュータシステムを構成するコンピュータや、クライアント装置とＸＭＬデータを遣り取りするＷＥＢサーバに、ＸＭＬ情報庫ブロック１２４を備えても良い。
【００８９】
・第４変形例：
上記実施例では、ＸＭＬデータ内の検索を例に説明しているが、本発明は、ＸＭＬデータに限らず、他のデータ内の検索にも適用することができる。具体的には、ＨＴＭＬデータや、ＳＧＭＬデータなどの構造化文書内の検索にも適用することができる。一般的には、ＸＭＬデータにおける要素名のような識別情報と、ＸＭＬデータにおける要素の内容のような上記識別情報に関連付けられた情報本体からなるデータ構造を有するあらゆるデータ内の検索に本発明を適用することができる。
・第５変形例：
上記実施例では、プリントサーバ装置１００とプリンタ２００との間は、ＵＳＢケーブルＣＶにより接続され、ＵＳＢ規格に従った通信が行われるが、プリントサーバ装置１００とプリンタ２００との間は、他のインターフェースを用いて接続されていても良い。例えば、ＩＥＥＥ１３９４バス接続、などの有線接続や、ブルートゥース接続，赤外線接続などの無線接続で接続するようにしてもよい。
【００９０】
・第６変形例：
上記実施例では、プリンタ２００と接続されるプリントサーバ装置１００を例として用いているが、他の種類のデバイスと接続されるサーバ装置であっても良い。例えば、スキャナ、ファクシミリ、コピー機、プリンタ、スキャナなどの機能を複数備える複合機などに接続されるサーバ装置であっても良い。
【００９１】
・第７変形例：
上記実施例において、ハードウエアによって実現されていた構成の一部をソフトウエアに置き換えても良く、逆にソフトウエアによって実現されていた構成の一部をハードウエアに置き換えても良い。
【００９２】
以上、実施例、変形例に基づき本発明について説明してきたが、上記した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明は、その趣旨並びに特許請求の範囲を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物が含まれる。
【図面の簡単な説明】
【００９３】
【図１】ネットワークシステムの概略構成を示す説明図。
【図２】ＸＭＬ情報庫ブロック１２４の動作ステップを示すフローチャート。
【図３】ＸＭＬデータ格納部１２４ｃに格納されるＸＭＬデータの一例を示す図。
【図４】インデックス生成処理の処理ルーチンを示すフローチャート。
【図５】インデックス生成処理の説明のためのＸＭＬデータを示す第１の図。
【図６】インデックスを概念的に示す第１の図。
【図７】インデックス生成処理の説明のためのＸＭＬデータを示す第２の図。
【図８】インデックスを概念的に示す第２の図。
【図９】ＸＭＬデータアクセス処理の処理ルーチンを示すフローチャート。
【符号の説明】
【００９４】
１００…プリントサーバ装置
１１０…ＣＰＵ
１２０…メモリ
１２２…サービスプログラム
１２４…ＸＭＬ情報庫ブロック
１２４ａ…ＸＭＬデータアクセスモジュール
１２４ｂ…インデックス生成モジュール
１２４ｃ…ＸＭＬデータ格納部
１２４ｄ…インデックス格納部
１２６…通信プロトコルプログラム
１３０…ＵＳＢホストＩＦ部
１４０…ネットワークＩＦ部
２００…プリンタ
２１０…ＣＰＵ
２２０…メモリ
２２２…制御プログラム
２３０…ＵＳＢデバイスＩＦ部
２４０…プリンタエンジン
３００…クライアント計算機
Ｍ１〜Ｍ３…処理モジュール
ＣＶ…ＵＳＢケーブル
ＮＷ…ネットワーク
【図１】
2008102671.tif 000003
【図２】
2008102671.tif 000004
【図３】
2008102671.tif 000005
【図４】
2008102671.tif 000006
【図５】
2008102671.tif 000007
【図６】
2008102671.tif 000008
【図７】
2008102671.tif 000009
【図８】
2008102671.tif 000010
【図９】
2008102671.tif 000011