(57)【要約】【課題】  複数の条件を有するＸＰａｔｈ式を用いたＸＭＬデータ検索システムを提案すること。【解決手段】  ＸＰａｔｈ式からＸＭＬスキーマを用いてオートマトンを作成するオートマトン作成方法は、ＸＭＬスキーマが、ＸＭＬデータに含まれるノードの出現順序を規定するものとし、ＸＭＬデータ検索装置１が、コンテキストノードに対応する開始状態を作成する手順と、ＸＭＬスキーマに規定されるノードの出現順序からプレディケイトの出現順序を特定する手順と、プレディケイトごとに状態を作成してプレディケイトの出現順序に従って状態の遷移を規定する手順と、出現順序の最後に相当する状態を受理状態としてＸＰａｔｈ式からオートマトンを作成する手順と、を実行することを特徴とする。【選択図】      図１
2005135199.tif 000002
【特許請求の範囲】
【請求項１】
ＸＰａｔｈ式からオートマトンを作成するオートマトン作成方法であって、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータが、
前記コンテキストノードに対応する開始状態を作成する手順と、前記プレディケイトを入力とする受理状態を前記プレディケイトごとに作成する手順と、前記開始状態と前記受理状態とをイプシロン遷移によって対応付けてＸＰａｔｈ式からオートマトンを作成する手順と、を実行することを特徴とするオートマトン作成方法。
【請求項２】
ＸＰａｔｈ式からＸＭＬスキーマを用いてオートマトンを作成するオートマトン作成方法であって、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記ＸＭＬスキーマは、ＸＭＬデータに含まれるノードの出現順序を規定するものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータが、
前記コンテキストノードに対応する開始状態を作成する手順と、前記ＸＭＬスキーマに規定される前記ノードの出現順序から前記プレディケイトの出現順序を特定する手順と、前記プレディケイトごとに状態を作成して前記プレディケイトの出現順序に従って状態の遷移を規定する手順と、前記出現順序の最後に相当する状態を受理状態としてＸＰａｔｈ式からオートマトンを作成する手順と、を実行することを特徴とするオートマトン作成方法。
【請求項３】
請求項１または請求項２に記載されたオートマトン作成方法によって作成されたオートマトンを用いてＸＭＬデータを検索するＸＭＬデータ検索方法であって、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータが、
検索対象となるＸＭＬデータの入力を受け付ける手順と、前記ＸＭＬデータを順に走査してＳＡＸイベントを発生させる手順と、前記作成されたオートマトンに対して前記ＳＡＸイベントを入力として前記オートマトンの状態を推移させる手順と、前記オートマトンの状態が前記オートマトンに含まれる全ての受理状態に到達するときに、前記ＸＭＬデータを検索結果として出力する手順と、を実行することを特徴とするＸＭＬデータ検索方法。
【請求項４】
検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索装置であって、前記ＸＭＬデータ検索装置は、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備え、前記メモリに格納される前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記メモリに格納される前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記ＸＭＬデータ検索装置は、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成部と、前記ＸＰａｔｈ式から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索部と、を含めて構成されることを特徴とするＸＭＬデータ検索装置。
【請求項５】
検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索装置であって、前記ＸＭＬデータ検索装置は、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備え、前記メモリに格納される前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記メモリに格納される前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記メモリに格納される前記ＸＭＬスキーマは、ＸＭＬデータに含まれるノードの出現順序を規定するものとし、前記ＸＭＬデータ検索装置は、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成部と、前記ＸＰａｔｈ式および前記ＸＭＬスキーマに規定されたノードの出現順序から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索部と、を含めて構成されることを特徴とするＸＭＬデータ検索装置。
【請求項６】
検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索プログラムであって、前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータを、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成手段と、前記ＸＰａｔｈ式から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索手段、として機能させるためのＸＭＬデータ検索プログラム。
【請求項７】
検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索プログラムであって、前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記ＸＭＬスキーマは、ＸＭＬデータに含まれるノードの出現順序を規定するものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータを、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成手段と、前記ＸＰａｔｈ式および前記ＸＭＬスキーマに規定されたノードの出現順序から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索手段、として機能させるためのＸＭＬデータ検索プログラム。
【請求項８】
請求項６または請求項７に記載されたプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オートマトン作成方法、および、ＸＭＬデータ検索方法、ならびに、ＸＭＬデータ検索装置、ＸＭＬデータ検索プログラム、および、ＸＭＬデータ検索プログラムの記録媒体に関する。
【背景技術】
【０００２】
ＸＭＬ（Extensible Markup Language）は、ネットワーク上で交換可能な標準的なデータ記述方式を提供する技術であり、タグを用いてデータ構造を表現する（非特許文献１など）。よって、ＸＭＬに従って作成されたデータは、コンピュータが処理可能な形で構造化されているため、現在ｎｅｗｓＭＬなどをはじめとして広く使われている。
【０００３】
なお、ＸＭＬ形式のデータを処理するための特定の言語も、ＸＭＬに合わせて広く利用されている。例えば、ＸＰａｔｈ（XML Path Language）は、ＸＭＬデータの一部を特定するための記述方式を提供する技術であり、ＸＭＬデータに対するクエリや変換など、ＸＭＬデータへのアクセスを効率的に行うための表現方法として、重要な役割を果たしている。例えば、ＸＭＬデータの集合から所定の条件に適合するＸＭＬデータを検索する場合には、所定の条件をＸＰａｔｈ式として記述することで、ＸＭＬデータへの検索を容易にする。
【０００４】
ＸＭＬデータを対象とした検索処理の一例として、例えば、ｎｅｗｓＭＬ形式に従ったデータを検索対象とする処理がある。ｎｅｗｓＭＬは、ニュース記事やそれに関連した画像、動画、音声などをウェッブ、携帯電話、テレビ(データ放送)など、さまざまな端末に送ることが出来る。よって、ｎｅｗｓＭＬの受け側（利用者）は、ＸＰａｔｈ式を配信サーバに登録しておくことで膨大な情報の中から、必要な情報のみを得ることが出来る。
【０００５】
そして、ＸＭＬデータを対象とした検索処理は、検索対象のＸＭＬデータをどのような順序でパーズ（走査）するかによって、大きく２種類に分類できる。
【０００６】
まず、第１のパーズ手法は、ＤＯＭ（Document Object Model）である。ＤＯＭは、ＸＭＬが木で表現できることに注目し処理を行う技術である。ＤＯＭ(ＸＭＬを内部木で表現したもの)に対して走査を行うことで、分岐処理に対応することが出来る`但し、ＤＯＭには巨大なＸＭＬ対しても内部木(以下、ＤＯＭ木)を作らなければならないために、メモリ使用量が膨大となる、また、ニュース配信や株価配信のように逐次的なデータ(時系列データなど)として送られてリアルタイム処理を必要とする場合には、ＤＯＭ木を用いたＸＰａｔｈ式処理は、適用が困難である。
【０００７】
一方、第２のパーズ手法は、ＳＡＸ（Simple API for XML）である。ＳＡＸは、前記のＤＯＭの弱点であるリアルタイム性とメモリ使用量削減を狙った技術である。ＤＯＭでは、ＸＭＬを木として表現することで、ＸＰａｔｈ式を与えられたときに走査することで検索及びフィルタリング処理を行った。一方ＳＡＸを用いた場合には、ＸＭＬデータをあくまでも上から下へ走査することしか出来ないためにＤＯＭのようにＸＰａｔｈ式処理を行うことが出来ない。
【０００８】
そこで、ＳＡＸを用いたＸＰａｔｈ式処理技術としては、非決定性オートマトンを利用した方法や決定性オートマトンを利用した方法がある。非決定性オートマトンと決定性オートマトンは完全に独立したものではなく、それぞれ一長一短がある。なお、非決定性オートマトンは、ＸＰａｔｈ式一つに対して一つのオートマトンを構築する。ちなみに、複数のＸＰａｔｈ式が与えられたときには、いくつものオートマトンを構築する必要がある。そのため、メモリ使用量は少なくて済むが、処理速度は低速となる。一方、決定性オートマトンは、非決定性オートマトンからサブセット生成法に従って構築される。よって、メモリ使用量は多くなるが、処理速度は高速となる。
【０００９】
非決定性オートマトンや決定性オートマトンが作成されると、入力されたＸＭＬの中でどの部分がＸＰａｔｈ式に一致するかを判断することが可能となる。非決定性オートマトンを利用した方法は、ＸＰａｔｈ式ひとつに対してひとつの非決定性オートマトンを作成する。この方法は、ＸＰａｔｈ式が多くなると処理速度が著しく劣化する特徴がある（非特許文献２参照）。決定性オートマトンを利用した方法は、前記非決定性オートマトンを変換することで実現できる。決定性オートマトンは、ＸＰａｔｈ式が多くなっても処理速度が一定のまま高速に維持できるという特徴がある。但し、変換の際にメモリ利用量が膨大になるという欠点も有する。
【００１０】
遅延型決定性有限オートマトンと呼ばれる手法は、非決定オートマトンから決定性オートマトンヘすぐに変換を行うことをせず、ＸＭＬが入力された際に利用されるオートマトンのみを決定性化することで高速かつ少ないメモリ使用量を実現している（非特許文献３参照）。
【非特許文献１】中山 幹敏、奥井 康弘 著、“改訂版 標準XML完全解説(上)”、ISBN4-7741-1186-4、初版 2001年4月発行、出版社“技術評論社”
【非特許文献２】Yanlei Diao, Peter M. Fischer, Michael J. Franklin, Raymond To著、“YFilter: Efficient and Scalable Filtering of XML Documents.”、In Proceedings of the ICDE(2002)
【非特許文献３】Todd J. Green, Gerome Miklau, Makoto Onizuka, Dan Suciu著、“Processing XML Streams with Deterministic Automata.”、ICDT（2003）
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかし、複数の述語（検索条件）に対する処理を実現するシステムは、提案されていなかった。これは、ＳＡＸべ一スのＸＰａｔｈ式処理システムが逐次的にＸＭＬを処理するため、ただ一つの検索条件のみしか扱わない検索システムを、そのまま複数の検索条件に適合することが出来なかったためである。
【００１２】
ここで、検索対象となるＸＭＬデータから検索条件に適合したＸＭＬデータを効率的に検索するためには、複数の条件を指定することは、必要となる。従来のただ一つの検索条件のみしか扱わない検索システムでは、利用者の必要としないＸＭＬデータまでも、ノイズとして検索結果に出力されてしまうために、効率的ではない。
【００１３】
なお、検索対象となるＸＭＬデータは、親子関係を有するノードの集合を含むものとする。また、検索条件となるＸＰａｔｈ式は、ＸＭＬデータのノードを指定するためのコンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含む。ここで、プレディケイト（predicate）は、個々の検索条件を示すもので、以降、“述語”や、“条件”と表記する。
【００１４】
そこで、本発明は、前記した問題を解決し、複数の条件を有するＸＰａｔｈ式を用いたＸＭＬデータ検索システムを提案することを、主な目的とする。
【課題を解決するための手段】
【００１５】
前記課題を解決するため、請求項１に記載のオートマトン作成方法は、ＸＰａｔｈ式からオートマトンを作成するオートマトン作成方法であって、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータが、
前記コンテキストノードに対応する開始状態を作成する手順と、前記プレディケイトを入力とする受理状態を前記プレディケイトごとに作成する手順と、前記開始状態と前記受理状態とをイプシロン遷移によって対応付けてＸＰａｔｈ式からオートマトンを作成する手順と、を実行することを特徴とする。
【００１６】
請求項２に記載のオートマトン作成方法は、ＸＰａｔｈ式からＸＭＬスキーマを用いてオートマトンを作成するオートマトン作成方法であって、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記ＸＭＬスキーマは、ＸＭＬデータに含まれるノードの出現順序を規定するものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータが、
前記コンテキストノードに対応する開始状態を作成する手順と、前記ＸＭＬスキーマに規定される前記ノードの出現順序から前記プレディケイトの出現順序を特定する手順と、前記プレディケイトごとに状態を作成して前記プレディケイトの出現順序に従って状態の遷移を規定する手順と、前記出現順序の最後に相当する状態を受理状態としてＸＰａｔｈ式からオートマトンを作成する手順と、を実行することを特徴とする。
【００１７】
請求項３に記載のＸＭＬデータ検索方法は、請求項１または請求項２に記載されたオートマトン作成方法によって作成されたオートマトンを用いてＸＭＬデータを検索するＸＭＬデータ検索方法であって、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータが、
検索対象となるＸＭＬデータの入力を受け付ける手順と、前記ＸＭＬデータを順に走査してＳＡＸイベントを発生させる手順と、前記作成されたオートマトンに対して前記ＳＡＸイベントを入力として前記オートマトンの状態を推移させる手順と、前記オートマトンの状態が前記オートマトンに含まれる全ての受理状態に到達するときに、前記ＸＭＬデータを検索結果として出力する手順と、を実行することを特徴とする。
【００１８】
請求項４に記載のＸＭＬデータ検索装置は、検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索装置であって、前記ＸＭＬデータ検索装置は、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備え、前記メモリに格納される前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記メモリに格納される前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記ＸＭＬデータ検索装置は、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成部と、前記ＸＰａｔｈ式から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索部と、を含めて構成されることを特徴とする。
【００１９】
請求項５に記載のＸＭＬデータ検索装置は、検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索装置であって、前記ＸＭＬデータ検索装置は、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備え、前記メモリに格納される前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記メモリに格納される前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記メモリに格納される前記ＸＭＬスキーマは、ＸＭＬデータに含まれるノードの出現順序を規定するものとし、前記ＸＭＬデータ検索装置は、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成部と、前記ＸＰａｔｈ式および前記ＸＭＬスキーマに規定されたノードの出現順序から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索部と、を含めて構成されることを特徴とする。
【００２０】
請求項６に記載のＸＭＬデータ検索プログラムは、検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索プログラムであって、前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータを、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成手段と、前記ＸＰａｔｈ式から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索手段、として機能させることを特徴とする。
【００２１】
請求項７に記載のＸＭＬデータ検索プログラムは、検索対象のＸＭＬデータから検索条件のＸＰａｔｈ式に適合するＸＭＬデータを検索するＸＭＬデータ検索プログラムであって、前記ＸＭＬデータは、親子関係を有するノードの集合を含むものとし、前記ＸＰａｔｈ式は、コンテキストノードと、そのコンテキストノードに対応する複数のプレディケイトとの対応関係の組を１つ以上含むものとし、前記ＸＭＬスキーマは、ＸＭＬデータに含まれるノードの出現順序を規定するものとし、演算処理を行う際に用いられる記憶領域としてのメモリと、前記演算処理を行う演算処理装置とを少なくとも備えるコンピュータを、
検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成手段と、前記ＸＰａｔｈ式および前記ＸＭＬスキーマに規定されたノードの出現順序から前記コンテキストノードごとにオートマトンを作成するオートマトン作成手段と、前記ＳＡＸイベントを入力として前記作成されたオートマトンの状態遷移によりＸＭＬデータを検索するＸＰａｔｈ検索手段、として機能させることを特徴とする。
【発明の効果】
【００２２】
前記のように、本発明によって、ＳＡＸベースのＸＭＬデータ検索装置において、ＸＰａｔｈ式が複数の条件を含んでいても検索処理を行うことが可能となる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施の形態について図面を用いて説明する。
【００２４】
図１には、本発明の一実施形態に関する全体構成が示されている。図１に示すＸＭＬデータ検索装置１は、検索対象のＸＭＬデータから検索条件に適合するＸＭＬデータを検索する機能を有する。このため、ＸＭＬデータ検索装置１は、検索対象のＸＭＬデータを格納するＸＭＬデータ格納部１０と、検索対象のＸＭＬデータをＸＭＬデータ格納部に登録するＸＭＬデータ登録部１１と、検索対象のＸＭＬデータが従うＸＭＬスキーマを格納するＸＭＬスキーマ格納部１２と、検索対象のＸＭＬデータを順に走査してＳＡＸイベントを発生させるＳＡＸイベント生成部１３と、検索条件であるＸＰａｔｈを格納するＸＰａｔｈ格納部２０と、検索条件であるＸＰａｔｈをＸＰａｔｈ格納部に登録するＸＰａｔｈ登録部２１と、ＸＰａｔｈから生成されたオートマトンの遷移を用いてＸＭＬデータを検索するＸＰａｔｈ検索部２２と、ＸＰａｔｈから生成されたオートマトンを格納するオートマトン格納部３０と、を含めて構成される。なお、図１に示す矢印は、データの流れを示すものである。
【００２５】
また、ＸＭＬデータ検索装置１は、オートマトンの作成手段として、ＸＭＬスキーマに規定されたＸＭＬデータのノードの出現順序を用いてＸＰａｔｈからオートマトンを作成する順序有オートマトン作成部３１と、ＸＭＬデータのノードの出現順序を利用せずにＸＰａｔｈからオートマトンを作成する順序無オートマトン作成部３２とのうち、少なくとも１つを備えるものとする。なお、順序有オートマトン作成部３１または順序無オートマトン作成部３２のいずれかをオートマトンの作成手段として利用するかの判断は、検索対象のＸＭＬデータが特定のＸＭＬスキーマに従って作成されたかどうかによって行われる。
【００２６】
なお、ＸＭＬスキーマは、ＸＭＬデータを構成するノード（タグによって表現される）のＸＭＬデータ内での出現順序を規定した文法である。まず、検索対象のＸＭＬデータがＸＭＬスキーマに従って作成されている場合には、ＸＭＬデータ検索装置１は、順序有オートマトン作成部３１または順序無オートマトン作成部３２のどちらかを用いて、検索条件であるＸＰａｔｈからオートマトンを作成する。一方、検索対象のＸＭＬデータがＸＭＬスキーマに従って作成されていない場合には、ＸＭＬデータ検索装置１は、順序無オートマトン作成部３２を用いて、検索条件であるＸＰａｔｈからオートマトンを作成する。なお、作成されたオートマトンは、オートマトン格納部３０に保存される。
【００２７】
ここで、順序有オートマトン作成部３１は、順序無オートマトン作成部３２よりも検索処理効率の良いオートマトンを作成する。これは、順序有オートマトン作成部３１が作成するオートマトンは、順序情報を活用しているので、順序無オートマトン作成部３２が作成するオートマトンよりも、検証する受理状態が少なくて済むためである。よって、検索対象のＸＭＬデータがＸＭＬスキーマに従って作成されている場合には、順序有オートマトン作成部３１が順序無オートマトン作成部３２よりも優先的に使用される。
【００２８】
そして、ＸＭＬデータ検索装置１は、作成されたオートマトンを用いて、検索処理を行う。具体的には、ＸＭＬデータ検索装置１は、ＳＡＸイベント生成部１３によって、ＸＭＬデータ格納部１０のＸＭＬデータを順次走査することによってＳＡＸイベントを発生させる。次に、ＸＭＬデータ検索装置１のＸＰａｔｈ検索部２２は、発生されたＳＡＸイベントを入力として、オートマトン格納部３０に格納されたオートマトンの状態遷移を検証する。そして、ＸＰａｔｈ検索部２２は、オートマトンの状態遷移が受理状態となる場合に、ＳＡＸイベントの生成元となったＸＭＬデータが、そのオートマトンの生成元となったＸＰａｔｈに適合したとして、そのＸＭＬデータを検索結果として出力する。以上、ＸＭＬデータ検索装置１の概要について説明した。次に、ＸＭＬデータ検索装置１の各構成要素について、具体的に説明する。
【００２９】
まず、ＸＭＬデータ格納部１０は、検索対象のＸＭＬデータを格納する。図１０（Ａ）は、格納されるＸＭＬデータの一例を示す図である。図１０（Ａ）のＸＭＬデータは、文献用のＸＭＬでありｂｉｂタグの下にｂｏｏｋタグがある。ｂｏｏｋタグの下には、ｔｉｔｌｅタグとａｕｔｈｏｒタグがある。このような、ＸＭＬに対して、発行年が１９９９年であり、題名にＸＭＬを含み、著者がＢｏｂであるような条件に一致したｂｏｏｋ要素を抽出するため、（式１）のＸＰａｔｈの検索式を用いる。この時、[]で囲まれた部分がＸＰａｔｈ式の条件を表すことになる。そして、ＸＭＬデータ検索装置１は、図１０（Ａ）のＸＭＬデータに対して、（式１）の検索式を用いて、図１０（Ｂ）の検索結果を得る。なお、本発明の主な特徴は、本発明は、（式１）の[]の部分が複数の場合でも処理できることである。
/bib/book[contains(title/text(),`XML`)][author=`Bob`][@year=1999]・・・（式１）
【００３０】
次に、ＳＡＸイベント生成部１３は、ＸＭＬデータを走査して、所定のノード（タグ）をＸＭＬデータから読み込んだ場合に、そのノードの種別に対応するコールバック関数を発生させる。これは、ＳＡＸが、前記のように、ＸＭＬを解析するときに木を構成しないためである。なお、図１１（Ｂ）は、コールバック関数の一例を列挙したものである。
【００３１】
また、図２は、ＳＡＸフィルタ（ＳＡＸイベント生成部１３）とユーザアプリケーションの関係を示している。図２のＳＡＸフィルタにＸＭＬデータが入力されると、上から順にＸＭＬデータが読み込まれる。ｂｉｂが認識されると、ＳＡＸフィルタはユーザアプリケーション上にあるｓｔａｒｔＥｌｅｍｅｎｔ関数を呼び出す。この際、ｓｔａｒｔＥｌｅｍｅｎｔ関数の引数には、ｂｉｂを入れておくことで、ユーザアプリケーション側ではｂｉｂという情報を取得することが出来る。このように、ＳＡＸイベント生成部１３がユーザアプリケーションの関数を呼び出すことをコールバックと呼ぶ。
【００３２】
そして、図１１（Ａ）は、ＸＭＬスキーマ格納部１２が格納するＸＭＬスキーマのＤＴＤ（Document Type Definition）を示す。ＸＭＬスキーマは、ＸＭＬのノードの出現順序を規定している。これによると、先にあげたＸＭＬ文書例である図１０（Ａ）は、図１１（Ａ）のＸＭＬスキーマを満たすことが分かる。なお、図１１（Ａ）の３行目に示される属性は、各要素に対して１つ以上付け加えることが出来るものであり、[属性名=`値']という形式で表現される。
【００３３】
なお、本実施形態では、“ＸＭＬスキーマ”という用語を、ＸＭＬデータにおけるノードの出現順序を規定する文法の総称という意味で用いている。よって、ノードの出現順序を規定する文法の記述方法の一例として、Ｗ３Ｃが規定するＤＴＤや、XML Schemaなどが挙げられるが、本実施形態では、これらの特定の一例に限定されることはなく、様々な文法の記述方法を用いてもよい。
【００３４】
さらに、図３は、順序無オートマトン作成部３２が、ＸＰａｔｈ式からオートマトンを作成する様子を示している。なお、オートマトンは、様々な記述方法があり、本実施形態では、オートマトンを状態遷移図として記述する。丸で示されているのは状態であり、矢印に付随して書いてあるのは状態が移るための入力である。なお、ＸＰａｔｈ検索部２２がオートマトンの検証を行う際には、状態が移るための入力は、ＳＡＸイベント生成部１３から与えられるＳＡＸイベントに相当する。
【００３５】
まず、順序無オートマトン作成部３２は、ＸＰａｔｈ式の［］印で囲まれた各条件を、それぞれ状態が移るための入力として抽出する。次に、順序無オートマトン作成部３２は、各条件の遷移後の状態を、それぞれオートマトンの受理状態とする。さらに、順序無オートマトン作成部３２は、各条件から生成されたオートマトンを、イプシロン遷移を用いて１つのオートマトンに統合する。なお、イプシロン遷移は、入力に依存せずに遷移する旨を示す。このようにして作成されたオートマトンは、イプシロン遷移から各条件のいずれかに分岐するので、分岐有オートマトンと表記する。
【００３６】
そして、図４は、順序有オートマトン作成部３１が、変換前のＸＰａｔｈ式から変換後のオートマトンを作成する様子を示している。なお、図４（Ａ）と図４（Ｂ）とでは、オートマトンの生成に使用されるＸＰａｔｈ式は等価なものであるが、［］印で囲まれた条件の出現順序が異なっているため、生成されるオートマトンも異なるものとなる。つまり、条件の順番が違えばオートマトンも変化することが、順序有オートマトン作成部３１によって生成されるオートマトンの特徴である。
【００３７】
図４（Ａ）を説明する。状態０は、初期状態を示している。状態０から状態１に移るためには、ｂｉｂ要素のあとにｂｏｏｋ要素がくることが必要である。状態１から状態２に移るためには、ｔｉｔｌｅ要素がはさんでいるデータ中に`ＸＭＬ'という文字を含んでいる必要がある。状態２から３へは、ａｕｔｈｏｒがＢｏｂで移る。最後に、ｂｏｏｋ要素がｙｅａｒ属性を持ちさらにその値が１９９９のとき、受理状態となり、ＸＭＬデータが検索結果として抽出される。
【００３８】
図５は、ＸＭＬデータの構造を示す文法を持つ場合において、文法を用いて条件の適用されるべき順序を抽出し、複数の子ノードに対する条件を持ったＸＰａｔｈ式を等価な非決定性オートマトンに変換する処理を示すフローチャートである。なお、図５は、順序有オートマトン作成部３１を主体とする動作のフローチャートを示している。非決定性オートマトンへの変換結果は、オートマトン格納部３０に登録される。これにより、複数条件を持ったＸＰａｔｈ式を処理することが可能となる。以下、図５の各処理を順に説明する。
【００３９】
まず、ＸＭＬデータ検索装置１は、検索条件であるＸＰａｔｈの入力を受け付ける（Ｓ１０１）。そして、入力されるＸＭＬがスキーマを持つ場合にこのフローチャートは動作するため、ＸＭＬデータ検索装置１は、入力されるＸＭＬがスキーマを持つかどうかを判定する（Ｓ１０２）。ここで、スキーマを持たないＸＭＬデータは、順序有オートマトン作成部３１の処理対象ではないので、処理を終了する（Ｓ１０３）。
【００４０】
次に、ＸＭＬデータ検索装置１は、文法（スキーマ）を解析し、要素の出現順序を得る（Ｓ１０４）。なお、ＤＴＤであれば、そのような出現順序は要素型宣言において表現されている。要素型宣言とは、〈！ＥＬＥＭＥＮＴ要素内容モデル〉という形をとっている。内容モデルの部分において、要素の順番を「要素名１、要素名２、要素名３、...」のようにカンマで区切って表現する。
【００４１】
そこで、ＸＭＬデータ検索装置１は、要素名１、要素名２、要素名３、...の順番を記憶しておく。例えば、図１１（Ａ）のような文法の場合であれば、必ずｙｅａｒ、ｔｉｔｌｅ、ａｕｔｈｏｒの順番で現れることを指定している。
【００４２】
なお、属性は、特殊な扱いとなっていて、図１１（Ａ）の順序３のように宣言される。属性は、ＸＭＬデータにおける出現位置が対象要素と同じであるために、属性に対する条件は一番最初に処理されなければならない。そこで、複数の条件があるときに属性に対する条件が存在すれば（Ｓ１０５、Ｙ）、そのような条件部分をまず一番最初に持ってくる（Ｓ１０６）。全ての属性に対する条件を前に持ってきたら、要素(ｔｉｔｌｅ、ａｕｔｈｏｒ)に対する順番を先ほどＤＴＤから得られた順序に移動する（Ｓ１０７）。このようにして得られたＸＰａｔｈ式を出力として、ＸＰａｔｈ登録部２１に出力する（Ｓ１０８）。
【００４３】
具体例を用いて説明する。ＸＰａｔｈ式（式２）が与えられると、まず属性に関する条件全てを条件群の前へ移動して、（式３）とする。次に、文法に従って（式３）の条件を整列させて（式４）とする。このようにして、文法に従った順番で条件を整列する。このＸＰａｔｈ式は、例で示したＤＴＤに関して、元のＸＰａｔｈ式と等価である。よって、この出力されたＸＰａｔｈ式を用いて、検索処理を行うことが出来る。
/bib/book[author=`Bob`][contains(title/text(),`XML`)][@year=1999]・・・（式２）
/bib/book[@year=1999][author=`Bob`][contains(title/text(),`XML`)]・・・（式３）
/bib/book[@year=1999][contains(title/text(),`XML`)][author=`Bob`]・・・（式４）
【００４４】
図６は、ＸＭＬデータの構造を示す文法（スキーマ）を持たない場合において、複数の子ノードに対する条件を持ったＸＰａｔｈ式でＸＭＬデータに対する検索処理を可能にするフローチャートである。つまり、図６は、複数の子ノードに対する条件を持ったＸＰａｔｈ式を分岐有り非決定性オートマトンに変換する処理を示すものである。なお、図６は、順序無オートマトン作成部３２を動作の主体とするものである。以下、図６の各手順を順に説明する。
【００４５】
まず、ＸＭＬデータ検索装置１は、複数のＸＰａｔｈ式が与えられたときには（Ｓ２０１）、各ＸＰａｔｈを１つ１つ順に処理する。よって、ＸＭＬデータ検索装置１は、全てのＸＰａｔｈ式が処理されたかどうかを判定し（Ｓ２０２）、全てのＸＰａｔｈ式が処理されたら、処理を終了する（Ｓ２０３）。
【００４６】
次に、ＸＭＬデータ検索装置１は、ＸＰａｔｈ式が入力されると（Ｓ２０４）、入力されたＸＰａｔｈ式を解析して（Ｓ２０５）、ＸＰａｔｈ式が条件（述語）を持つかどうかを判断する（Ｓ２０６）。つまり、ＸＰａｔｈ式の中から[]でくくられた条件の部分を探すことになる。よって、ＸＭＬデータ検索装置１は、それぞれの条件を分割して、スタックしておく。そして、ＸＭＬデータ検索装置１は、スタックした複数の条件の中からひとつの条件を取り出して連結し、ＸＰａｔｈプロセッサに登録する（Ｓ２０７）。連結した条件は、スタックから取り除き、選択された条件のみを削除してＸＰａｔｈを新しいＸＰａｔｈとして出力する（Ｓ２０８）。
【００４７】
さらに、ＸＭＬデータ検索装置１は、スタックから条件がなくなるまで繰り返すと（Ｓ２０６、Ｎ）、条件の数と同じだけのＸＰａｔｈ式集合が構築される。最後に、元のＸＰａｔｈ式から条件部分を取り除いたＸＰａｔｈ式−Ｐａｒｅｎｔを取得する（Ｓ２０９）。ＸＰａｔｈ式−ＰａｒｅｎｔとＸＰａｔｈ式集合の間に親子関係を表す情報を構築しておく（Ｓ２１０）。
【００４８】
例を用いて説明する。文法を持たないＸＭＬデータが、図１０（Ａ）のように与えられているとする。この時、ＸＰａｔｈ式である（式１）を考える。この時、前記の考察から単にオートマトンを構成してもフィルタリング処理することが出来ない、そこでまず、ＸＰａｔｈ式を、図１２（Ａ）のように分割する。これは、条件部を抜いた部分と複数条件をひとつの条件に分割している。
【００４９】
次に、各条件部分と、各条件部分に対応するコンテキストノードとを連結して、図１２（Ｂ）のようなＸＰａｔｈ式集合を得ることが出来る。なお、ここで得られたＸＰａｔｈ式群は、親子関係を持っている。前記の例に対する分岐有り非決定性オートマトンは、図３に示されているように構成される。
【００５０】
なお、本発明の一実施形態に関するＸＭＬデータ検索装置１は、順序無オートマトン作成部３２によって構築されたＸＰａｔｈ式群をＸＰａｔｈ格納部２０に登録しておく。例の中で＃Ｙ、＃Ｚ、＃Ｕ、＃Ｘなどを用いたが、これらは実際のＸＰａｔｈ式と同じ働きを行う。例えば、／ｂｉｂ／ｂｏｏｋがｓｔａｒｔＣｏｎｔｅｘｔから呼ばれると＃Ｙが呼ばれる。＃Ｚ、＃Ｕ、＃Ｘが＃Ｙを用いて定義されているのは、／／ｂｏｏｋに対応するためである。／／ｂｏｏｋのようなＸＰａｔｈ式は、ＸＭＬがｂｏｏｋ要素をネストして保持している場合にも対応しなければならない。#Ｙは、／／ｂｏｏｋが展開した後のＸＰａｔｈ式を表現しているので、＃Ｚ、＃Ｕ、＃Ｘをそれぞれ＃Ｙへの相対ＸＰａｔｈ式として定義することが出来る。
【００５１】
ここで、図８に示すＸＭＬデータの検索処理の概要について、図７に示す具体例を用いて説明する。なお、図７の灰色で示された状態が受理状態を示している。
【００５２】
まず、図１０（Ｂ）のようなＸＭＬデータが、検索対象となる。そして、（式５）のようなＸＰａｔｈ式が入力されて、図７（ａ）のようなオートマトンが作成されたとする。
/bib/book[author=`Bob`][@year=1999][contains(title/text(),`XML`)]・・・（式５）
【００５３】
この時、ｓｔａｒｔＥｌｅｍｅｎｔ関数が２回呼び出されて、＄Ｙに遷移が移る。すると、＄Ｙに対する子オートマトンがそれぞれ状態を持つ、ｅｎｄＥｅｌｍｅｎｔ関数の引数には、属性の情報`ｙｅａｒ=１９９９'も含まれているので、＄Ｘが受理状態となる（図７（ｂ）参照）。よって、親オートマトンである＄Ｙに対して自分自身を登録し、＄Ｘが受理状態であることを伝える。
【００５４】
同様にｅｎｄＥｌｅｍｅｎｔ関数が呼び出された後、ｃｏｎｔａｉｎｓ(ｔｉｔｌｅ/ｔｅｘｔ（）、`ＸＭＬ')とａｕｔｈｏｒ＝`Ｂｏｂ'という条件が満たされて、＄Ｚ、＄Ｕがそれぞれ受理状態となる（図７（ｃ）および図７（ｄ）参照）。次に、ｅｎｄＥｌｅｍｅｎｔ関数が＜／ｂｏｏｋ＞に関して呼び出されると、＄Ｙに対応するオートマトンは、全ての子オートマトンが受理状態であるかを検査し、受理状態であるので＄Ｙも受理する（図７（ｅ）参照）。
【００５５】
ここで、ｘｐａｔｈ＿ｖａｒｉａｂｌｅが持つスタックについて、図９を用いて説明する。図９には、＄Ｙ、＄Ｚ、＄Ｕ、＄Ｘの持つスタックを表している。スタックは、子オートマトンの受理状態を表すレジスタから構成されるので、＄Ｙは、レジスタ｛＄Ｚ、＄Ｕ、＄Ｘ｝をスタックしている。こうすることで、子オートマトンの受理状態を受け取ることが出来る。リーフオートマトンは、子オートマトンを持たないのでスタックの中は空である。
【００５６】
なお、スタックを利用している理由を述べる。今回紹介した例は、簡単のため＄Ｙが絶対パスで表現されている。実際には、／／ｂｏｏｋのようにｂｏｏｋ要素を再帰的に指定するＸＰａｔｈが存在する。この時、登録できるレジスタが一つだけであると、複数のｂｏｏｋ要素がｓｔａｒｔＥｌｅｍｅｎｔ関数からコールバックを受けたときに現時点で処理するべきｂｏｏｋ要素が判断できなくなる。そのため、レジスタを複数格納しかつ処理するべき要素を判断するために、スタックを用いている。
【００５７】
このようにして、受理されたときにＸＰａｔｈ式に受理されたＸＭＬデータを出力するために、ルートオートマトンにおいて遷移が起こったところからＸＭＬデータをレジスタに格納しておく。受理状態になったらレジストされているデータを全て出力する。受理状態にならなかったときには、受理状態にならなかったオートマトンがレジスタの開放作業を行う。以上により、文法（ＸＭＬスキーマ）が無い場合においても、複数条件をもったＸＰａｔｈ式の処理を行うことが出来る。
【００５８】
図８は、作成されたオートマトンを用いて、入力されたＸＭＬデータを検索する処理を示すフローチャートである。ここでは、作成されたオートマトンの一例として、順序無オートマトン作成部３２によって作成された分岐有り非決定性オートマトンを用いている。なお、図８は、ＸＰａｔｈ検索部２２が主体となる動作を示す。 以下、図８の処理を順に説明する。
【００５９】
ＸＭＬデータ検索装置１は、入力されたＸＭＬデータ（Ｓ３０１）に対するＳＡＸイベント生成部１３からのコールバック（Ｓ３０２）を、処理の契機とする。まず、コールバック関数であるｓｔａｒｔＣｏｎｔｅｘｔ関数とｅｎｄＣｏｎｔｅｘｔ関数は、対象となるＸＰａｔｈ式を示す変数ｘｐａｔｈ＿ｖａｒｉａｂｌｅを引数として持つ。
【００６０】
ここで、ｓｔａｒｔＣｏｎｔｅｘｔ関数がコールバックされたときには、ｘｐａｔｈ＿ｖａｒｉａｂｌｅに対応するスタックを用意する（Ｓ３０５）。スタックされるのは、ｘｐａｔｈ＿ｖａｒｉａｂｌｅが持つ全ての子オートマトンの受理状態をｔｒｕｅ／ｆａｌｓｅで格納することが出来るレジスタである。子オートマトンは、親オートマトンに対して受理状態であればｔｒｕｅを親オートマトンに通知する。レジスタは、ｆａｌｓｅに初期化される。
【００６１】
一方、ｅｎｄＣｏｎｔｅｘｔ関数がコールバックされたときには、分岐有りオートマトン上のリーフであるならば（Ｓ３０６、Ｙ）、ｘｐａｔｈ＿ｖａｒｉａｂｌｅの親に相当するｘｐａｔｈに対して、ｘｐａｔｈ＿ｖａｒｉａｂｌｅに関するレジスタを持っているので、そのレジスタをｔｒｕｅとする。ここで、リーフとは図３を木として捉えたときの葉となる部分のことをさす。ｘｐａｔｈ＿ｖａｒｉａｂｌｅがリーフでないときには（Ｓ３０６、Ｎ）、ｘｐａｔｈ＿ｖａｒｉａｂｌｅの子に対応する子オートマトンが全て受理状態かどうかをレジスタの状態によって判断する。
【００６２】
複数の子オートマトンで表現されている条件は、ａｎｄ／ｏｒを用いた論理式で表現される。よって、レジスタに含まれるそれぞれの子オートマトンに含まれるｔｒｕｅ／ｆａｌｓｅを条件群の論理式に代入演算し、論理式がｔｒｕｅであるかどうかを判断する。
【００６３】
もし、条件群の論理式がｔｒｕｅならば（Ｓ３０７、Ｙ）、子オートマトン群の表す条件は受理状態である。受理状態であれば、ｘｐａｔｈ＿ｖａｒｉａｂｌｅは受理される。一方、条件群の論理式がｆａｌｓｅならば（Ｓ３０７、Ｎ）、子オートマトン群の表す条件は受理状態でない。受理状態でなければ、ｘｐａｔｈ＿ｖａｒｉａｂｌｅも受理されない。そして、受理状態であっても無くてもｘｐａｔｈ＿ｖａｒｉａｂｌｅの持つスタックから現在のレジスタをポップする（Ｓ３０９、Ｓ３１０）。
【００６４】
また、受理状態の場合（Ｓ３０７、Ｙ）には、ｘｐａｔｈ＿ｖａｒｉａｂｌｅに対応するオートマトンがルートであるかどうかによって処理を分岐する（Ｓ３１１）。ルートである場合には（Ｓ３１１、Ｙ）、対象となる分岐オートマトンが受理されていることになるため、元のＸＰａｔｈ式が受理状態であることを示している。そこで、そのＸＰａｔｈ式をリストＡにプッシュする（Ｓ３１３）。ルートで無い場合には（Ｓ３１１、Ｎ）、ｘｐａｔｈ＿ｖａｒｉａｂｌｅの親に相当するＸＰａｔｈ式に対して、ｘｐａｔｈ＿ｖａｒｉａｂｌｅをプッシュする（Ｓ３１２）。どちらの場合にも、次のコールバック関数が呼ばれるまで待つ（Ｓ３０２）。
【００６５】
以上説明した本発明は、前記した実施例に限定されることなく、その技術思想の及ぶ範囲で様々な形態として実施することができる。
【図面の簡単な説明】
【００６６】
【図１】本発明の一実施形態に関するＸＭＬデータ検索装置の構成図である。
【図２】本発明の一実施形態に関するＳＡＸイベント生成部の説明図である。
【図３】本発明の一実施形態に関する順序無オートマトン作成部の説明図である。
【図４】本発明の一実施形態に関する順序有オートマトン作成部の説明図である。
【図５】本発明の一実施形態に関するノードの出現順序を用いたオートマトンの作成処理を示すフローチャートである。
【図６】本発明の一実施形態に関するノードの出現順序を用いずに作成したオートマトンの作成処理を示すフローチャートである。
【図７】本発明の一実施形態に関するＸＭＬデータの検索処理の動作を説明する図である。
【図８】本発明の一実施形態に関するＸＭＬデータの検索処理の動作を示すフローチャートである。
【図９】本発明の一実施形態に関するオートマトンの受理状態を管理する方法を説明する図である。
【図１０】本発明の一実施形態に関するＸＭＬデータの一例を示す図である。
【図１１】本発明の一実施形態に関するＸＭＬスキーマおよびＳＡＸイベントを示す図である。
【図１２】本発明の一実施形態に関するＸＰａｔｈ式の分割処理を示す図である。
【符号の説明】
【００６７】
１      ＸＭＬデータ検索装置
１０    ＸＭＬデータ格納部
１２    ＸＭＬスキーマ格納部
１３    ＳＡＸイベント生成部
２０    ＸＰａｔｈ格納部
２２    ＸＰａｔｈ検索部
３０    オートマトン格納部
３１    順序有オートマトン作成部（オートマトン作成手段）
３２    順序無オートマトン作成部（オートマトン作成手段）
【図１】
2005135199.tif 000003
【図２】
2005135199.tif 000004
【図３】
2005135199.tif 000005
【図４】
2005135199.tif 000006
【図５】
2005135199.tif 000007
【図６】
2005135199.tif 000008
【図７】
2005135199.tif 000009
【図８】
2005135199.tif 000010
【図９】
2005135199.tif 000011
【図１０】
2005135199.tif 000012
【図１１】
2005135199.tif 000013
【図１２】
2005135199.tif 000014