(57)【要約】【課題】  複数条件を含んだＸＰａｔｈ式によるＸＭＬデータの検索を、メモリ使用量を増やさずに高速化すること目的とする。【解決手段】  入力された複数条件を含むＸＰａｔｈ式をＸＰａｔｈ式クラスタ化部３０で絶対パスごとに条件をクラスタ化し、これに基づいて区間インデックス構築部４０でＸＰａｔｈ式のノードに含まれる形で複数条件を高速に検索するための木構造データを用いた区間インデックスを構築する。区間インデックス構築部４０によって構築された前記の区間インデックスを、区間インデックス検索部５０が検索する。そして、区間インデックス検索部５０の検索機能を利用して複数条件ＸＰａｔｈ式フィルタリング処理部６０が入力されたＸＭＬデータからＸＰａｔｈ式の指定に従って、高速にフィルタ済みＸＭＬデータを出力する。【選択図】      図１
2006189951.tif 000002
【特許請求の範囲】
【請求項１】
複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行うＸＰａｔｈ式処理方法であって、
ＸＰａｔｈ式の記憶及び構文解析を行うためのメモリと前記構文解析及び前記ＸＰａｔｈ式に従った検索を行うための中央演算処理装置を少なくとも備えた計算機が、
前記複数条件のＸＰａｔｈ式の条件を検索対象ノードごとの条件集合にクラスタ化する手段と、
前記検索対象ノードごとに当該ノードに対する条件集合から指定された区間に応じてノードを検索するための区間インデックスを構築する手段と、
前記検索対象ノードに対する前記区間インデックスを用いて前記検索対象ノードに関する条件を検索する手段と、
前記区間インデックスを用いて条件を一括処理してＸＭＬデータをフィルタリングする手段を備え、
前記ＸＰａｔｈ式の構文解析によって特定された前記ＸＰａｔｈ式に含まれる複数条件を検索対象ノードごとの条件集合にクラスタ化し、
クラスタ化された前記検索対象ノードごとの条件集合から前記区間インデックスを構築し、
検索対象ノードに含まれる前記区間インデックスを検索し、
前記区間インデックスを用いてＸＰａｔｈ式の条件を一括処理してＸＭＬデータをフィルタリングすること
を特徴とするＸＰａｔｈ式処理方法。
【請求項２】
複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１に記載のＸＰａｔｈ式処理方法であって、
前記複数条件のＸＰａｔｈ式の条件を検索対象ノードごとの条件集合にクラスタ化する手段が、ＸＰａｔｈ式において相対パスで表現されている検索対象ノードを絶対パスによる表現に変換し、
前記検索対象ノードの絶対パスを相互に比較することで検索対象ノードごとに条件をクラスタ化して条件集合を作成すること
を特徴とするＸＰａｔｈ式処理方法。
【請求項３】
複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１に記載のＸＰａｔｈ式処理方法であって、
前記複数条件のＸＰａｔｈ式の条件を検索対象ノードごとの条件集合にクラスタ化する手段が、ＸＰａｔｈ式において相対パスで表現されている検索対象ノードを絶対パスによる表現に変換し、
前記絶対パスと入力されるＸＭＬデータの対応を調べて、前記絶対パスに含まれるワイルドカード表現を前記ＸＭＬデータに対して対応が取れるようにマッチングさせて展開することにより、前記絶対パスによる表現を展開パスによる表現に変換し、
前記検索対象ノードの前記展開パスを比較する事で検索対象ノードごとに条件集合にクラスタ化すること
を特徴とするＸＰａｔｈ式処理方法。
【請求項４】
複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項３のいずれか１項に記載のＸＰａｔｈ式処理方法であって、
前記区間インデックスを構築する手段が、前記クラスタ化された条件集合を元に既存の区間を分割し、
前記分割後の区間群に対して木構造を持つインデックスを構築すること
を特徴とするＸＰａｔｈ式処理方法。
【請求項５】
複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項４のいずれか１項に記載のＸＰａｔｈ式処理方法であって、
前記検索対象ノードに対する前記区間インデックスを用いて前記検索対象ノードに関する条件を検索する手段が、構文解析によって得られた検索対象ノードに関連する値を検索対象ノードの区間インデックスに入力し、
検索対象ノードに対応する複数の条件を一括して検索すること
を特徴とするＸＰａｔｈ式処理方法。
【請求項６】
複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項５のいずれか１項に記載のＸＰａｔｈ式処理方法であって、
前記区間インデックスを用いて条件を一括処理してＸＭＬデータをフィルタリングする手段が、前記検索対象ノードに対する前記区間インデックスを用いて前記検索対象ノードに関する条件を検索する手段による検索結果を用いて、ＸＭＬデータをフィルタリングすること
を特徴とするＸＰａｔｈ式処理方法。
【請求項７】
複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項６のいずれか１項に記載のＸＰａｔｈ式処理方法であって、
前記区間インデックスを用いて条件を一括処理してＸＭＬデータをフィルタリングする手段が、複数条件のＸＰａｔｈ式を複数の単一条件のＸＰａｔｈ式に展開して構文解析処理を行い、
前記構文解析処理の結果に対応して検索のための複数の非決定性有限オートマトンを構築し、
前記複数の非決定性有限オートマトンを１つの決定性有限オートマトンに統合し、
前記決定性有限オートマトンを用いてＸＭＬデータをフィルタリングすること
を特徴とするＸＰａｔｈ式処理方法。
【請求項８】
請求項１ないし請求項７のいずれか1項に記載のＸＰａｔｈ式処理方法を、少なくともメモリと中央演算処理装置を備えた計算機を用いて実現することを特徴とするＸＰａｔｈ式処理装置。
【請求項９】
請求項１ないし請求項７のいずれか1項に記載のＸＰａｔｈ式処理方法を、少なくともメモリと中央演算処理装置を備えた計算機に実行させることを特徴とするＸＰａｔｈ式処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＸＭＬデータに対するＸＰａｔｈ式の処理方法、ＸＰａｔｈ式の処理装置及びそのプログラムに関する。特に、複数の条件を持つＸＰａｔｈ式の処理に関する。
【背景技術】
【０００２】
ＸＭＬ（eXtensible Markup Language）は、ネットワーク上で交換可能な標準的なデータ記述方式を提供する技術であり、タグを用いて情報を構造化する特徴を活かして、ｎｅｗｓＭＬ（Ｎｅｗｓ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）をはじめとして広く使われている。ＸＰａｔｈ式は、ＸＭＬデータの一部を特定するための記述方式を提供する技術であり、ＸＭＬデータに対する質問や変換などにおいて重要な役割を果たしている。
【０００３】
中でも注目されているのが、ＸＭＬデータとＸＰａｔｈ式を入力したときに、ＸＰａｔｈ式に指定された部分を抽出する技術である。例えば、前記のｎｅｗｓＭＬは、ニュース記事やそれに関連した画像、動画、音声などをウェブ、携帯電話、テレビ（データ放送）など、様々な端末に送ることができる。このとき、ｎｅｗｓＭＬの受け側（利用者）は、ＸＰａｔｈ式を配信サーバに登録しておくことで、膨大な情報の中から、必要な情報のみを得ることができる。
【０００４】
ＸＰａｔｈ式を構文解析処理するための技術として典型的なものに、ＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）とＳＡＸ（Ｓｉｍｐｌｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ  ｆｏｒ  ＸＭＬ）がある。ＤＯＭは、ＸＭＬのデータが木で表現できることに注目し、処理を行う技術である。この技術によれば、複数条件に起因する分岐処理にも対応できるが、メモリの使用量が大きいという側面を持つ。また、リアルタイム処理を要求される場合には、ＤＯＭを用いたＸＰａｔｈ式のフィルタ処理（構文解析処理）は非常に困難である。
【０００５】
ＳＡＸは、前記のＤＯＭのリアルタイム性の問題の克服とメモリ使用量削減を狙った技術である。ＳＡＸでは、木を作らずに、ＸＭＬ文書を上から下へと走査して構文解析処理を行うため、少ないメモリ使用量でリアルタイムに処理ができるが、そのままでは、ＸＰａｔｈ式の処理に対応できない。特許文献１及び非特許文献１は、この問題に対処するために、ＸＰａｔｈ式に対応して、オートマトンを構築する方法を導入している。特許文献１及び非特許文献１では、図１５に示すように、ＸＰａｔｈ式に対応して非決定性有限オートマトン（Non-deterministic Finite Automaton：以後、ＮＦＡとも記述）を決定性有限オートマトン（Deterministic Finite Automaton：以後、ＤＦＡとも記述）に変換することで、高速な処理を行うことを基本としている。なお、ＳＡＸにおいてＸＰａｔｈ式への対応する場合には、非決定性有限オートマトンを用いるときと決定性有限オートマトンを用いるときでは、一般に、一長一短があるので、これを表１にまとめて示す。
【表１】
2006189951.tif 000003
表１に示すように、通常はメモリ使用量と処理速度は相反する関係にあるが、特許文献１及び非特許文献１に示されている方法では、遅延型決定性有限オートマトン（lazy DFA）を導入して、決定性有限オートマトンを利用する場合に問題となるメモリ使用量の問題を回避し、高速な処理と少ないメモリ使用量を共に実現している。この他に非特許文献２に示すＳＡＸに対する分岐ＸＰａｔｈ式処理システムもあるが、このシステムでは、複数の検索条件（分岐）を一つずつ処理しているので、条件数の増加に従い、線形に（比例的に）処理時間が増加する。
【０００６】
なお、複数の条件から決定される区間を利用した一般的な計算方法として、後記する区間インデックスとしてＢＲ−ｔｒｅｅと呼ばれる平衡木を構築する方法も知られている（非特許文献３参照）。
【特許文献１】特開２００３−３２３４２９号公報（請求項１、請求項６など、図３）
【非特許文献１】Ｔ．Ｊ．Ｇｒｅｅｎ，Ｇ．Ｍｉｋｌａｕ，Ｍ．Ｏｎｉｚｕｋａ，Ｄ．Ｓｕｃｉｕ著、“Ｐｒｏｃｅｓｓｉｎｇ  ＸＭＬ  Ｓｔｒｅａｍｓ  ｗｉｔｈ  Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ａｕｔｏｍａｔａ”、Ｐｒｏｃｅｅｄｉｎｇ  ｏｆ  ＩＣＤＴ、２００３年
【非特許文献２】Ｍ．Ｏｎｉｚｕｋａ著、“Ｌｉｇｈｔ−ｗｅｉｇｈｔ  ＸＰａｔｈ  ｐｒｏｃｅｓｓｉｎｇ  ｏｆ  ＸＭＬ  ｓｔｒｅａｍ  ｗｉｔｈ  ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ａｕｔｏｍａｔａ”、Ｐｒｏｃｅｅｄｉｎｇ  ｏｆ  ＣＩＫＭ、２００３年
【非特許文献３】Ｔ．Ｈ．Ｃｏｒｍｅｎ，Ｃ．Ｅ．Ｌｅｉｓｅｒｓｏｎ，Ｒ．Ｌ．Ｒｉｖｅｓｔ，Ｃ．Ｓｔｅｉｎ著、“Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ａｌｇｏｒｉｔｈｍｓ  ｓｅｃｏｎｄ  ｅｄｉｔｉｏｎ”、ｐｐ．３１１−３１６、ＭＩＴ  Ｐｒｅｓｓ刊、２００１年
【発明の開示】
【発明が解決しようとする課題】
【０００７】
前記したように、分岐ＸＰａｔｈ式処理システムでは、ＸＰａｔｈ式の複数条件を処理する場合に、登録されるＸＰａｔｈ式が増加するに従って、性能が著しく劣化するという問題がある。しかしながら、実際的な応用においては、複数条件を指定する必要性が高く、しかも、高速に検索処理できなければならない。本発明における課題は、メモリ使用量を増やさずにＸＰａｔｈ式の複数条件に基づく検索処理を高速に行う方法、装置及びプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
前記課題を解決するために、本発明（請求項１）では、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行うＸＰａｔｈ式処理方法であって、ＸＰａｔｈ式の記憶及び構文解析を行うためのメモリと前記構文解析及び前記ＸＰａｔｈ式に従った検索を行うための中央演算処理装置を少なくとも備えた計算機が、前記複数条件のＸＰａｔｈ式の条件を検索対象ノードごとの条件集合にクラスタ化する手段と、前記検索対象ノードごとに当該ノードに対する条件集合から指定された区間に応じてノードを検索するための区間インデックスを構築する手段と、前記検索対象ノードに対する前記区間インデックスを用いて前記検索対象ノードに関する条件を検索する手段と、前記区間インデックスを用いて条件を一括処理してＸＭＬデータをフィルタリングする手段を備え、前記ＸＰａｔｈ式の構文解析によって特定された前記ＸＰａｔｈ式に含まれる複数条件を検索対象ノードごとの条件集合にクラスタ化し、クラスタ化された前記検索対象ノードごとの条件集合から前記区間インデックスを構築し、検索対象ノードに含まれる前記区間インデックスを検索し、前記区間インデックスを用いてＸＰａｔｈ式の条件を一括処理してＸＭＬデータをフィルタリングするＸＰａｔｈ式処理方法を備える。
【０００９】
この方法によれば、複数条件のＸＰａｔｈ式に基づいてＸＭＬデータを効率よくフィルタリングすることが可能になる。
【００１０】
また、本発明（請求項２）では、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１に記載のＸＰａｔｈ式処理方法であって、前記複数条件のＸＰａｔｈ式の条件を検索対象ノードごとの条件集合にクラスタ化する手段が、ＸＰａｔｈ式において相対パスで表現されている検索対象ノードを絶対パスによる表現に変換し、前記検索対象ノードの絶対パスを相互に比較することで検索対象ノードごとに条件をクラスタ化して条件集合を作成するＸＰａｔｈ式処理方法を備える。
【００１１】
この方法によれば、区間インデックスを構築すべき検索対象ノードを特定し、区間インデックス構築のための条件集合を作成することができる。
【００１２】
さらに、本発明（請求項３）では、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１に記載のＸＰａｔｈ式処理方法であって、前記複数条件のＸＰａｔｈ式の条件を検索対象ノードごとの条件集合にクラスタ化する手段が、ＸＰａｔｈ式において相対パスで表現されている検索対象ノードを絶対パスによる表現に変換し、前記絶対パスと入力されるＸＭＬデータの対応を調べて、前記絶対パスに含まれるワイルドカード表現を前記ＸＭＬデータに対して対応が取れるようにマッチングさせて展開することにより、前記絶対パスによる表現を展開パスによる表現に変換し、前記検索対象ノードの前記展開パスを比較する事で検索対象ノードごとに条件集合にクラスタ化するＸＰａｔｈ式処理方法を備える。
【００１３】
この方法によれば、区間インデックスを構築すべき検索対象ノードを見落とすことなく特定し、区間インデックス構築のための条件集合を作成することができる。
【００１４】
また、本発明（請求項４）では、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項３のいずれか１項に記載のＸＰａｔｈ式処理方法であって、前記区間インデックスを構築する手段が、前記クラスタ化された条件集合を元に既存の区間を分割し、前記分割後の区間群に対して木構造を持つインデックスを構築するＸＰａｔｈ式処理方法を備える。
【００１５】
この方法によれば、複数条件によって規定される区間に関する検索を効率的に行うことができる。
【００１６】
また、本発明（請求項５）では、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項４のいずれか１項に記載のＸＰａｔｈ式処理方法であって、前記検索対象ノードに対する前記区間インデックスを用いて前記検索対象ノードに関する条件を検索する手段が、構文解析によって得られた検索対象ノードに関連する値を検索対象ノードの区間インデックスに入力し、検索対象ノードに対応する複数の条件を一括して検索するＸＰａｔｈ式処理方法を備える。
【００１７】
この方法によれば、前記区間インデックスを利用して、高速に検索を行うことができる。
【００１８】
また、本発明（請求項６）では、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項５のいずれか１項に記載のＸＰａｔｈ式処理方法であって、前記区間インデックスを用いて条件を一括処理してＸＭＬデータをフィルタリングする手段が、前記検索対象ノードに対する前記区間インデックスを用いて前記検索対象ノードに関する条件を検索する手段による検索結果を用いて、ＸＭＬデータをフィルタリングするＸＰａｔｈ式処理方法を備える。
【００１９】
この方法によれば、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングできる。
【００２０】
また、本発明（請求項７）では、複数条件のＸＰａｔｈ式に従ってＸＭＬデータをフィルタリングする処理を行う請求項１ないし請求項６のいずれか１項に記載のＸＰａｔｈ式処理方法であって、前記区間インデックスを用いて条件を一括処理してＸＭＬデータをフィルタリングする手段が、複数条件のＸＰａｔｈ式を複数の単一条件のＸＰａｔｈ式に展開して構文解析処理を行い、前記構文解析処理の結果に対応して検索のための複数の非決定性有限オートマトンを構築し、前記複数の非決定性有限オートマトンを１つの決定性有限オートマトンに統合し、前記決定性有限オートマトンを用いてＸＭＬデータをフィルタリングするＸＰａｔｈ式処理方法を備える。
【００２１】
この方法によれば、複数条件のＸＰａｔｈ式を検索用の決定性有限オートマトンに変換して、前記決定性有限オートマトンを用いてＸＭＬデータを効率よくフィルタリングできる。
【発明の効果】
【００２２】
本発明によれば、実際的な応用において重要な複数条件のＸＰａｔｈ式の指定によるＸＭＬデータのフィルタリングを行うことができる。しかも、ＸＰａｔｈ式の検索対象ノードに対応して区間インデックスを構築することにより、ＸＰａｔｈ式の複数条件に対応してＸＭＬデータのフィルタリングを効率よく処理できる。
【発明を実施するための最良の形態】
【００２３】
以下、図を参照して２つの実施形態を説明する。
【００２４】
<<第１の実施形態>>
まず、最初に本発明にかかる基本的な実施形態について説明する。
【００２５】
［装置の構成］
図１は、本発明の第１の実施形態の構成を説明する図である。ＸＰａｔｈ式処理装置１は、ＸＰａｔｈ式登録部１０、ＸＰａｔｈ式格納部２０、ＸＰａｔｈ式クラスタ化部３０、区間インデックス構築部４０、区間インデックス検索部５０及び複数条件ＸＰａｔｈ式フィルタリング処理部６０を少なくとも含む計算機である。
また、ＸＰａｔｈ式処理装置１は、図示しないＣＰＵ（Central Processing Unit）及び図示しないメモリを少なくとも含み、図示しないハードディスク装置を含むことが望ましい。
【００２６】
ＸＰａｔｈ式登録部１０は、利用者からの複数条件のＸＰａｔｈ式の登録を受け付ける。なお、ＸＰａｔｈ式が単一の条件しか持たないものでも同様に受け付ける。この登録の際に、単純なコマンドラインからの入力による登録を行うことも可能であるが、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を用いて利用者とのやり取りを行う表示装置の画面を出してもよい。
【００２７】
ＸＰａｔｈ式格納部２０は、前記のＸＰａｔｈ式登録部１０によって入力したＸＰａｔｈ式の情報を格納する。ＸＰａｔｈ式格納部２０に格納した情報は、ＸＰａｔｈ式処理装置１が立ち上がるたびに繰り返し使う情報であるので、ハードディスク装置に格納することが望ましいが、メモリに格納することもできる。
【００２８】
ＸＰａｔｈ式クラスタ化部３０は、前記ＸＰａｔｈ式格納部２０に格納されているＸＰａｔｈ式のデータを受け取って、ＸＰａｔｈ式を解析し、後記の区間インデックス構築部４０での区間インデックス構築のために必要な条件のクラスタ化を行う。ＸＰａｔｈ式クラスタ化部３０の動作については、図５を用いた説明において後記する。
【００２９】
区間インデックス構築部４０は、前記ＸＰａｔｈ式クラスタ化部３０においてクラスタ化されたＸＰａｔｈ式を受け取って、クラスタ化が行われている部分について区間インデックスを構築する。区間インデックス構築部４０の動作については、図９を用いた説明において後記する。
【００３０】
区間インデックス検索部５０は、区間インデックス構築部４０が構築した区間インデックスを含むノードに対しての検索を行う機能を持つ。区間インデックス検索部５０は、後記する複数条件ＸＰａｔｈ式フィルタリング処理部６０において区間インデックスを伴う検索処理が必要になったときには、呼び出されて区間インデックスを検索処理する。区間インデックス検索部５０における処理は、図１１を用いた説明において後記する。
【００３１】
複数条件ＸＰａｔｈ式フィルタリング処理部６０は、区間インデックス検索部５０からの検索結果に基づいて、入力されるＸＭＬデータ６１に対するフィルタリングを行い、フィルタ済みＸＭＬデータ６２を出力する。この出力されたフィルタ済みＸＭＬデータ６２は、例えばＸＭＬデータを処理する能力を持つ端末に配信されて利用者に提供される。複数条件ＸＰａｔｈ式フィルタリング処理部６０の処理については、図１２を用いた説明において後記する。
【００３２】
なお、ＸＰａｔｈ式登録部１０、ＸＰａｔｈ式クラスタ化部３０、区間インデックス構築部４０、区間インデックス検索部５０及び複数条件ＸＰａｔｈ式フィルタリング処理部６０は、ＣＰＵによるプログラム実行処理によって実現される。
【００３３】
［ＸＰａｔｈ式処理における動作］
これより、ＸＰａｔｈ式処理装置１がＸＰａｔｈ式を処理してＸＭＬデータをフィルタリングするまでの動作について説明する。まず、本実施形態の基本となるＸＭＬの基本的なフィルタリング処理について説明した後に、図１に示した構成に対応して、各構成要素の動作を説明する。
【００３４】
（ＸＭＬの処理例）
まず、ＸＭＬのデータの例を以下に示す。この例は、文献用のＸＭＬのデータであり、ｂｉｂ（文献）タグの下にｂｏｏｋ（書籍）タグがあり、その下に、ｔｉｔｌｅ（書名）タグ、ａｕｔｈｏｒ（著者）タグ、ｐｕｂｌｉｃａｔｉｏｎ（発行年）タグ及びｐｒｉｃｅ（価格）タグがある構成になっている。
【００３５】
<bib>
<book>
<title>Effective XML&XPath</title>
<author>Bob</author>
<publication>1999</publication>
<price>2100</price>
</book>
<book>
<title>詳解  XPath式</title>
<author>佐藤</author>
<author>鈴木</author>
<publication>2000</publication>
<price>3000</price>
</book>
</bib>
【００３６】
前記のＸＭＬデータに対して、発行年が１９９９年以前であり、題名にＸＭＬを含み、著者がＢｏｂであるような条件に一致したｂｏｏｋの要素を抽出するＸＰａｔｈ式は、次のように記述することができる。
【００３７】
/bib/book[contains(title/text(),'XML')][author='Bob'][publication<=1999]     ・・・（式１）
【００３８】
このとき、[ ]で囲まれた部分がＸＰａｔｈ式の１つの条件を表す。前記のＸＰａｔｈ式の例は複数（３つ）の条件を持っている。このＸＰａｔｈ式を前記のＸＭＬデータに適用した場合に得られる出力は以下に示すようなものになる。
【００３９】
<book>
<title>Effective XML</title>
<author>Bob</author>
<publication>1999</publication>
<price>2100</price>
</book>
【００４０】
（基本的なＸＭＬのＳＡＸフィルタリング処理における動作）
図２は、ＳＡＸフィルタとユーザアプリケーションとの関係を示す図である。ＳＡＸの構文解析では、ＸＭＬデータを解析するときに木を構成しない。その代わりに、コールバック関数を用いる手法をとっている。図２に示されているＳＡＸフィルタ側にＸＭＬデータが入力されると、上から順に読み込まれる。最初にbib(ＸＭＬデータの中では<bib>)が認識されると、ＳＡＸフィルタはユーザアプリケーション上にあるstartElement関数を呼び出す。この際、startElement関数の引数にはbibを入れておく（startElement(bib)という形をとる）ことで、ユーザアプリケーション側ではbibという情報を取得することができる。このように、ＳＡＸフィルタがユーザアプリケーション側を呼び出すことをコールバックと呼ぶ。表２にコールバック関数を示す。
【表２】
2006189951.tif 000004
表２に示したコールバック関数の引数には、前記の例と同様にＳＡＸフィルタ側からユーザアプリケーション側に引き渡すべき情報を入れておく。
【００４１】
図３は、以下に示す複数条件のＸＰａｔｈ式である（式２）に対応してＸＰａｔｈフィルタリング装置が生成する（非決定性の）オートマトンの例である。
/bib/book[contains(title/text(),'XML')][publication>=1999 and publication<=
2000]     ・・・（式２）
オートマトンとは、状態遷移図に対応する処理を行うような仮想的な計算機のモデルであり、初期状態、受理状態の集合、その仮想的な計算機の内部状態として取りうる状態の集合、状態遷移の集合及びその仮想的な計算機（オートマトン）のその時点での内部状態を用いて表現されたものと考えることができる。
【００４２】
図３においては、内部状態として取りうる状態は円で、状態遷移は矢印で示されており、矢印に付随して示されているのがその状態遷移が起きるための条件である。状態０は、オートマトンの初期状態を示している。この状態０から状態１への遷移が起きるためには、オートマトンにbib要素が与えられることが必要である。同様に状態１から状態２への遷移が起きるためには、book要素が与えられることが必要である。状態２においては、ε（イプシロン）遷移と呼ばれる遷移が行われる。このε遷移では、無条件に次の状態への遷移が起きる。図３の例においては、状態２への遷移が起きると、自動的に次の状態である状態３，５，７への遷移が起きることに対応することを示している。
【００４３】
状態３から状態４への遷移は、ＸＰａｔｈ式である（式２）の最初の条件[contains(title/text(),'XML')]に対応している。この状態３から状態４への遷移が起きるのは、タイトルタグにはさまれたテキストの中に“ＸＭＬ”という文字列が含まれている場合である。同様に、状態５から状態６への遷移は、[publication>=1999]に対応し、状態７から状態８への遷移は、[publication<=2000]に対応している。最終的に状態４、状態６、状態８の全ての受理状態への到達という条件が満たされている場合には、与えられたＸＭＬデータは、ＸＰａｔｈ式（式２）を満たしているデータであるといえる。なお、この際に、従来技術ではpublicationという同一の検索対象のノードに対して２回の条件判断処理を行っており、このような同一検索対象に関する条件の数が増えれば増えるほど無駄な処理が増えて効率が低下するという問題を抱えていた。本実施形態では、このようなＳＡＸによるＸＰａｔｈ式の評価を、lazy DFAを用いて行うことを基本とし、前記の効率の問題を解決する。
【００４４】
図４は、その他の例を用いて、前記の効率が低下する問題の発生を説明する図である。図４には、Ｆ４０からＦ６０までの３つのＸＰａｔｈ式の検索条件が示されていて、これらに対応するＡ４０からＡ６０までの３つのＮＦＡが示されている。それぞれ、Ｆ４０はＡ４０に、Ｆ５０はＡ５０に、Ｆ６０はＡ６０に変換される。変換されて生成したＡ４０からＡ６０は、それぞれ非効率の原因となる同一の要素に対する複数の状態遷移を含んでいる。Ａ４０の例では、[1999<=publication]と[publication<=2002]という２つの条件は、publicationという同一の要素に対する別個の条件判断を行っているが、図４ではこのような部分を楕円で囲んで示している。後記する図５を参照したＸＰａｔｈ式クラスタ化部３０の処理においては、このような重複する条件判断の部分をクラスタ化の対象とする。
【００４５】
（ＸＰａｔｈ式クラスタ化部の処理）
図５は、ＸＰａｔｈ式クラスタ化部３０における処理を説明する図である。適宜、図４の例も参照しつつ、クラスタ化の処理について説明する。
【００４６】
まず、ＸＰａｔｈ式格納部２０が、対象となる複数の（全ての）ＸＰａｔｈ式をＸＰａｔｈ式クラスタ化部３０に入力し、これらのＸＰａｔｈ式の検索対象ノードの絶対パスを格納できる集合Ｓを用意する（Ｓ１１０）。なお、集合Ｓは、最初は空集合であり、この時点ではまだいずれのパスも登録されていない。
【００４７】
次に、Ｓ１１０で入力されたＸＰａｔｈ式から１つずつＸＰａｔｈ式を取り出して、順次処理を行っていく。まず、その時点で全てのＸＰａｔｈ式を処理したか否かを調べる（Ｓ１２０）。全てのＸＰａｔｈ式を処理し終わっている場合は（Ｓ１２０→Ｙｅｓ）、そこで処理を終了する。未処理のＸＰａｔｈ式が残っている場合には（Ｓ１２０→Ｎｏ）、ＸＰａｔｈ式クラスタ化部３０に対して取り出したＸＰａｔｈ式の入力を行い（Ｓ１３０）、ＸＰａｔｈ式の解析処理を行う（Ｓ１４０）。以下、ＸＰａｔｈ式に含まれる条件を順次処理する。
【００４８】
まず、対象となるＸＰａｔｈ式について、全ての条件を処理したか否かを調べる（Ｓ１５０）。全ての条件の処理が終わっている場合には（Ｓ１５０→Ｙｅｓ）、ステップＳ１２０に戻って、次のＸＰａｔｈ式の処理を続行する。未処理の条件が残っている場合には（Ｓ１５０→Ｎｏ）、まず、選択されている検索対象ノードの絶対パスを取得する（Ｓ１６０）。この絶対パスの取得については、補足説明を後記する。
【００４９】
そして、検索対象ノードの絶対パスが集合Ｓに登録されているか否かを調べる（Ｓ１７０）。既に検索対象ノードの絶対パスが集合Ｓに登録されている場合は（Ｓ１７０→Ｙｅｓ）、特別な処理を施さずに、後記するステップＳ１９０に進む。未だ検索対象ノードの絶対パスが集合Ｓに登録されていない場合は（Ｓ１７０→Ｎｏ）、まず、その絶対パスを集合Ｓに登録し、検索対象ノードに対する条件を格納できる集合Ｒを作成する（Ｓ１８０）。この時点では、集合Ｒは空集合である。そして、引き続き実行されるステップＳ１９０では、検索対象ノードに対する条件を検索対象ノードが持つ集合Ｒに追加する（Ｓ１９０）。この後、ステップＳ１５０から処理を繰り返す。
【００５０】
なお、図４に示したＸＰａｔｈ式全体の例を対象に前記のクラスタ化を行った場合、集合Ｓに含まれる検索対象ノードの絶対パスは以下の２つが得られる。
【００５１】
S1:/bib/book/price
S2:/bib/book/publication
【００５２】
また、検索対象ノードへ分割して、検索対象ノードに対する条件を集合Ｒに蓄積した結果は下記のようになる。
【００５３】
R1:price>=2000, price<2000, price>=3000
R2:publication>=1999, publication<=2002, publication>=2000, publication<=2003, publication<=2004
【００５４】
なお、R1は検索ノードの絶対パスS1に対する条件集合であり、R2は検索ノードの絶対パスS2に対する条件集合である。明示していないが、R1及びR2に含まれるそれぞれの条件がどのＸＰａｔｈ式に含まれるかの情報が保存されており、それらの情報は、後記する区間インデックス構築部４０に引き渡される。
【００５５】
ここで、前記した絶対パスの取得について、補足説明を加える。図６は、パスの与え方（書式）が異なるが、意味としては等価なＸＰａｔｈ式の例を示す。図６に示したＦ７０からＦ９０のＸＰａｔｈ式は、パスの与え方は異なるが、意味としては等価である。Ｆ７０からＦ９０に対して、そのまま絶対パスを考慮せずにＮＦＡを作成するとそれぞれＡ７０からＡ９０のようになる。これらは、本来、クラスタ化を行って、後記する区間インデックスの生成の対象とすべきものであるが、このままでは、本来の意味に沿ったクラスタ化や区間インデックス化は困難である。そこで、絶対パスを用いて、クラスタ化の対象を正確に調べる。
【００５６】
図６に示したＦ７０からＦ９０の例においては、以下のように絶対パスを取得すれば、３つとも/bib/type/book/publicationを絶対パスとして取得することになり、同一の扱いができることが判明する。
F70:/bib/type/bookとpublicationを解析し、/で接続してパスを作成する。
F80:/bib/typeとpublication/bookを解析し、/で接続してパスを作成する。
F90:/bibとtype/book/publicationを解析し、/で接続してパスを作成する。
【００５７】
前記した通常のパスの場合と同様に「//」と「*」を含むＸＰａｔｈ式についての絶対パスも取得できる。なお、「//」は、ルート（ノード）とその全ての子孫ノードの要素（すなわちノード）にマッチするために用いられる。例えば、「/bib//book」と書いた場合には、/bib以下の子孫ノードの中でbookという名を持つノード全てにマッチする。「*」は一般的なファイルシステムにおけるワイルドカードと同様のもので、例えば、「/bib/*」と書くと、/bib以下の子ノード全てにマッチする。また、「/*」と書くと、ルートノードの子ノード全てにマッチする。
【００５８】
以下に「//」と「*」を含むＸＰａｔｈ式についての例を示す。
F101://book[1999<=publication and publication<=2002]
に対しては、//bookとpublicationを解析し、/で接続してパスを作成する。
その結果、絶対パスとして、//book/publicationを取得する。
F102:./bib//book[1999<=publication and publication<=2002]
に対しては、/bib//bookとpublicationを解析し、/で接続してパスを作成する。
その結果、絶対パスとして、/bib//book/publicationを取得する。
F103:/*/*/*[1999<=publication and publication<=2002]
に対しては、/*/*/*とpublicationを解析し、/で接続してパスを作成する。
その結果、絶対パスとして、/*/*/*/publicationを取得する。
F104:/*/*[1999<=*/publication and */publication<=2002]
に対しては、/*/*と*/publicationを解析し、/で接続してパスを作成する。
その結果、絶対パスとして、/*/*/*/publicationを取得する。
F105:/*//book[1999<=publication and publication<=2002]
に対しては、/*//bookとpublicationを解析し、/で接続してパスを作成する。
その結果、絶対パスとして、/*//book/publicationを取得する。
F106:/*/*//book[1999<=publication and publication<=2002]
に対しては、/*/*//bookとpublicationを解析し、/で接続してパスを作成する。
その結果、絶対パスとして、/*/*//book/publicationを取得する。
【００５９】
このように「//」と「*」という特殊な表現を利用したとしても、通常のパスの場合と同様に絶対パスを取得することが可能であり、こうして得られた絶対パスの等価性により、後記する区間インデックスを構築するためのクラスタ化が可能である。
【００６０】
（区間インデックス構築部の処理）
図７及び図８は区間インデックスを説明するための図である。図７は、図４に示したＦ４０からＦ６０までのＸＰａｔｈ式を例にとって、区間インデックスとの対応関係を説明する図である。図７に示した例では、検索対象ノードがpublicationであった場合の区間インデックスを上側に記載し、対応するＮＦＡの一部を下側に示している。なお、下側に記載したＡ４０からＡ６０の３つのＮＦＡは図４に記載したＡ４０からＡ６０と同一である。
【００６１】
図７の例においては、publicationについての区間インデックスに次の区間が存在する。
[-∞,1999), [1999,2000), [2000,2001), [2001,2002), [2002,2003), [2003,2004), [2004,+∞]
但し、[a,b)は、ａ以上ｂ未満を示している。図７の中央部の破線矢印はpublicationの値がある区間に含まれるときに、どのＮＦＡの条件を満たしているかを表している。例えば、publicationのテキストノードの値が2001である場合には、[2001,2002)に含まれることになり、その区間と対応する条件は、以下のようになる。
1999<publication, publication<=2002, 2000<=publication, publication<=2003, 2001<= publication, publication<=2004
なお、図７においては、該当する区間から破線の矢印が、対応するＮＦＡの中の条件（を満たしたノード）へと結ばれている。（図７の破線の矢印は一部省略されている。）
このように、図７の上側に示されている２分木（区間インデックス）を用いると、publicationのテキストノードがどの区間に含まれるかを１回で検索することが可能になる。
【００６２】
図４に示された例のpriceについては、price>=2000という条件とprice<=2000という２つの条件において、値が2000の部分で重複している。このような場合には、[2000,2000]という区間を導入することで、重複のない区間群へと分割することが可能である。こうすれば、これらの区間群は、切れ目も重複もなく、全ての区間の間に順序関係がある。こうして得られた区間を次に示す。
[-∞,2000), [2000,2000], (2000,3000), [3000,+∞]
但し、(a,b)はａより大きく、ｂ未満を表し、[c,d]はｃ以上ｄ以下を表す。また、publicationの例と同様に、Ｆ４０の条件を満たす区間は[2000,2000], (2000,3000), [3000,+∞]であり、Ｆ５０の条件を満たす区間は[-∞,2000), [2000,2000]であり、Ｆ６０を満たす区間は[3000,+∞]であることを１回で検索できる。
【００６３】
図８はＸＰａｔｈ式と区間インデックスの関係の例を示す図である。木構造を持ったインデックスを用いて検索を行うには、区間群は、切れ目も重複もなく、全ての区間の間に順序関係があることが必要である。図８に示した例では、上部に示されている任意の２つの区間を選択したときに、細分化されてできた区間において、交差する部分がない状態で、それぞれの対照関係が明確になっている場合がこのような検索が可能な条件に該当する。そして、区間インデックスによって検索をかけた結果、図８の下部に示す検索にヒットした条件群が得られる。
【００６４】
図９は、区間インデックス構築部４０における処理を説明する図である。この処理によって、区間インデックスを構築する。まず、ＸＰａｔｈ式クラスタ化部３０でクラスタ化された検索対照ノードを取り出して（Ｓ２１０）、それら全てを区間インデックス構築の対象とする。すなわち、それぞれの検索対象ノードに対して１つずつ区間インデックスを構築する。
【００６５】
次に、ステップＳ２１０で取り出した全ての検索対象ノードを処理したか否かを調べる（Ｓ２２０）。全ての処理が終わっている場合（Ｓ２２０→Ｙｅｓ）、処理を終了する。未処理の検索対象ノードが残っている場合（Ｓ２２０→Ｎｏ）、まず、そのノードにおいて、選択された検索対象ノードの全ての条件を処理したか否かを調べる（Ｓ２３０）。そのノードの全ての条件を処理し終わっている場合は（Ｓ２３０→Ｙｅｓ）、ステップＳ２２０に戻って、次のノードの処理に移る。未処理の条件が残っている場合には（Ｓ２３０→Ｎｏ）、条件の処理を続行し、検索対象のノードの区間インデックスが存在するか否かを調べる（Ｓ２４０）。
【００６６】
まだ、区間インデックスが存在しない場合（Ｓ２４０→Ｎｏ）、まず、検索対象に対する区間インデックスを構築し、これに[-∞,+∞]の区間を登録し（Ｓ２７０）、ステップＳ２３０から処理を繰り返す。既に区間インデックスが存在する場合（Ｓ２４０→Ｙｅｓ）、選択された条件の示す区間に含まれる、区間インデックスに登録された区間Ａが存在するか否かを調べる（Ｓ２５０）。前記の条件に該当する登録区間が存在する場合（Ｓ２５０→Ｙｅｓ）、存在した全ての区間Ａに対して、選択された条件を登録して（Ｓ２８０）、ステップＳ２３０から処理を繰り返す。前記の条件に該当する登録区間がない場合（Ｓ２５０→Ｎｏ）、選択された条件の示す区間の境界が既存区間に含まれるか否かを調べる（Ｓ２６０）。前記の境界が既存区間に含まれる場合（Ｓ２６０→Ｙｅｓ）、その既存区間を削除し、前記の境界によってその既存区間を二つに分けた結果できる二つの区間を区間インデックスに登録し、前記二つの区間に対して、選択された条件を登録し（Ｓ２９０）、ステップＳ２３０から処理を繰り返す。前記の境界が既存区間に含まれていない場合には（Ｓ２６０→Ｎｏ）、ステップＳ２３０から処理を繰り返す。
【００６７】
図１０は、既存の区間が区間インデックスに登録されている場合に新規のＸＰａｔｈ式が登録される際にどのように区間インデックスを構築するかを示す例を説明する図である。この例では、（１）の[1999<=publication<=2002]という条件（区間）と（２）の[2000<=publication<=2003]という条件（区間）が既に登録されている場合に、新規の条件（区間）が新たに登録される際の処理の例を示している。
【００６８】
図１０（Ａ）は、（１）の[1999<=publication<=2002]という条件（区間）と（２）の[2000<=publication<=2003]という条件（区間）が既に登録されている状態を示している。ここでの区間インデックスをより詳細に説明すると、1999以上2000未満の値が検索されると条件（区間）（１）が満たされ、2000以上2002以下の値が検索されると条件（区間）（１）及び（２）が満たされ、2002以上2003以下の値が検索されると条件（区間）（２）が満たされる状態になっている。
【００６９】
図１０（Ｂ）は、図１０（Ａ）のような区間インデックスに対して（３）の[2001<=publication<=2004]という新規の条件（区間）が登録される場合を示す図である。このとき、図１０（Ｂ）にあるように、追加する条件（区間）が既存の区間を含む場合（図１０（Ｄ））と追加された区間の境界が既存の区間に含まれる場合（図１０（Ｃ））がある。ここでは、既存の[2000<=publication<=2002]という区間と[2003<publication<=+∞]という区間において、2001及び2004が新しく追加された区間の境界として加えられることが示されている。
【００７０】
追加された区間の境界が既存の区間に含まれる場合は、図１０（Ｃ）に示されているが、この場合には、まず、追加された区間の境界を含むような区間を区間インデックスから削除する。そして、次に追加された区間により分割された２つの区間を区間インデックスに追加する。この例では、[2000<=publication<=2002]が削除されて、新たに[2000<=publication<2001]という区間と[2001<=publication<=2002]という区間が登録されていることを示している。
【００７１】
図１０（Ｄ）は、追加する区間が既存の区間を含む場合を説明する図である。新しく追加された区間に対応する全ての分割された区間に対して、条件（区間）（３）を追加する。具体的には、[2001<=publication<=2004]に含まれる区間に対応する[2001<=publication<=2002]と[2002<publication<=2003]と[2003<publication<=2004]の３つの区間が区間（３）と対応する区間である。
【００７２】
図１０（Ｅ）は、ここまでの処理を行った結果得られた区間インデックスを示している。なお、この例には、該当する区間がないが、[2002<=publication<=2002]あるいは[2002,2002]というような一価値（１つの点になる区間）も検索できる。
【００７３】
（区間インデックス検索部の処理）
図１１は区間インデックス検索部５０における処理を説明する図である。この処理では、前記の区間インデックス構築部４０が構築した区間インデックスを検索する。まず、区間インデックス検索部５０に検索対象ノードと検索値としての区間が入力される（Ｓ３１０）。そして、検索対象ノードの絶対パスから検索対象ノードを特定して、特定された検索対象ノードに対する区間インデックスへ前記の検索値すなわち区間が入力される（Ｓ３２０）。その値に対して、区間インデックスの検索の結果からマッチした条件のリストを返し（Ｓ３３０）、処理を終了する。この条件のリストの出力は、後記する複数条件ＸＰａｔｈ式フィルタリング処理部６０に入力される。
【００７４】
（複数条件ＸＰａｔｈ式フィルタリング処理部の処理）
図１２は、複数条件ＸＰａｔｈ式フィルタリング処理部６０の処理を説明する図である。ここで説明する処理は、基本的にＸＭＬデータの構造を示す文法であるスキーマを持たない前提で複数条件ＸＰａｔｈ式に対応するための処理である。
【００７５】
まず、複数条件ＸＰａｔｈ式フィルタリング処理部６０は、複数のＸＰａｔｈ式の入力が行われると（Ｓ４１０）、これらを順次処理するために、全てのＸＰａｔｈ式を処理したか否かを調べる（Ｓ４２０）。そして、全てのＸＰａｔｈ式の処理が終わっている場合には（Ｓ４２０→Ｙｅｓ）、ここで処理を終了する。未処理のＸＰａｔｈ式が残っている場合には（Ｓ４２０→Ｎｏ）、１つのＸＰａｔｈ式を入力して（Ｓ４３０）、ＸＰａｔｈ式の解析を行う（Ｓ４４０）。そして、この解析の結果に基づいて、ＸＰａｔｈ式が条件を含むか否かを調べる（Ｓ４５０）。この処理は、具体的には、ＸＰａｔｈ式の中に[]で囲まれた部分があるか否かを構文解析して調べている処理である。
【００７６】
そして、条件が存在する場合（Ｓ４５０→Ｙｅｓ）、複数の条件の中から選択されている条件のみをＸＰａｔｈ式のプロセッサ（複数条件ＸＰａｔｈ式フィルタリング処理部の一部となっている単一条件のＸＰａｔｈ式フィルタリング処理を行うプロセッサ）へ登録する（Ｓ４６０）。その際、複数の条件の中から選択されている条件のみを削除したＸＰａｔｈ式を新しいＸＰａｔｈ式として出力し（Ｓ４７０）、これをステップＳ４４０から処理を繰り返すことによって、最終的には全ての条件を処理する。なお、このような処理になっているのは、複数条件ＸＰａｔｈ式フィルタリング処理部６０が従来の単一条件のＸＰａｔｈ式のフィルタリング処理部から拡張して構成されたものであるため、ＸＰａｔｈ式の条件を１つ１つ処理していかねばならないからである。
【００７７】
条件が存在しない場合には（Ｓ４５０→Ｎｏ）、ここまでの処理で条件の数と同じだけのＸＰａｔｈ式の集合が構築された状態になっているが、ここで入力したＸＰａｔｈ式から条件を取り除いた情報を登録し（Ｓ４８０）、ＸＰａｔｈ式の親とする。そして、このＸＰａｔｈ式の親にあたるものとそれ以外に登録したＸＰａｔｈ式（すなわち、前記のＸＰａｔｈ式の集合に含まれるＸＰａｔｈ式）の間に親子関係をつけておき（Ｓ４９０）、それぞれの条件がどのように使われるものであるかを再現できるようにしておく。ここまでの処理が終了すると、１つのＸＰａｔｈ式が処理し終えたことになるので、ステップＳ４２０から処理を繰り返して次のＸＰａｔｈ式を処理する。
【００７８】
このようなＸＰａｔｈの処理が終わった後には、複数条件ＸＰａｔｈ式フィルタリング処理部６０は、ＸＭＬのデータ６１の入力に対して、ＸＰａｔｈ式に従ったフィルタリングを行えるようになる（図１参照）。この処理の結果、複数条件ＸＰａｔｈ式フィルタリング処理部６０は、フィルタ済みＸＭＬデータ６２を出力するが、この出力には、利用者がほしいと思う情報がフィルタリングされており、これを例えばＸＭＬデータを構文解析して表示できるような端末に送れば、利用者に応じてカスタマイズした情報流通などの応用が可能になる。
【００７９】
ここまで、本発明の第１の実施形態について説明をしてきたが、本実施形態によれば、従来は効率の低下を否めなかった複数条件のＸＰａｔｈ式の処理を少ないメモリ使用量で高速に行うことができる。これは、数値を伴う条件の場合に効果が顕著である。このような効果は、ｎｅｗｓＭＬを用いた文字放送に代表されるＸＭＬデータを用いたストリーム系の情報サービスを行う際の処理効率を向上させる。
【００８０】
<<第２の実施形態>>
【００８１】
本発明の第１の実施形態では、区間インデックスを構築できるノードにだけ配置した。これだけでも効率的な処理を行えるが、区間インデックスの有効活用の余地はまだ残っている。そこで、本発明の第２の実施形態では、第１の実施形態では見落としていたノードにも区間インデックスを配置するようにする。第２の実施形態では、区間インデックスを構築（配置）する処理の一部だけが、第１の実施形態と異なっているので、ここでは、その異なっている部分だけを説明し、その他の共通の部分は説明を省略する。
【００８２】
第２の実施形態では、第１の実施形態において、絶対パスを用いてクラスタ化を行っていたのとは異なり、絶対パスだけではなく、展開パスを考慮する。つまり、「//」や「*」というワイルドカード的な表現を含む絶対パスについては、字面だけの同一性の判断では具体的な絶対パスを決定できないのである。
【００８３】
例えば、次に示す２つのＸＰａｔｈ式Ｆ１１０とＦ１２０は、第１の実施形態では、同一のパスになるとは判断されなかった。
F110://book[publication<2000]
F120:/bib//book[publication<2000]
【００８４】
これは、Ｆ１１０のＸＰａｔｈ式の絶対パスが//book/publicationであり、Ｆ１２０のＸＰａｔｈ式の絶対パスが/bib//book/publicationだから、字面が同一でないためである。その結果、クラスタ化やそれに続く区間インデックスの構築も行われなかった。
【００８５】
しかしながら、以下に示すようなＸＭＬのデータを与えた場合は、Ｆ１１０でもＦ１２０でも、検索の対象になる。
【００８６】
<bib>
<book>
<title>Effective XML&Xpath</title>
<author>Bob</author>
<publication>1999</publication>
<price>2100</price>
</book>
</bib>
【００８７】
このＸＭＬデータに含まれる「<publication>1999</publication>」のタグは、Ｆ１１０においてもＦ１２０においても検索の際に評価される必要がある。ここでの問題は、この２つのＸＰａｔｈ式にかかわる区間インデックスが生成されないので、高速化を図ることができないということである。
【００８８】
図１３は、ＸＰａｔｈ式（１１０及びＦ１２０）からＮＦＡ（Ａ１３０）へ変換し、最終的にＤＦＡ（Ａ１４０）が構築される様子を説明する図である。ＤＦＡ（Ａ１４０）の各状態は、変換される前のＮＦＡの状態に関する情報を持っている。たとえば、図１３のＡ１４０の最初の状態であるＮ１１には、Ａ１３０のＮ１とＮ４の状態を持っているのである。よって、ＤＦＡに含まれるＮＦＡの状態で、同じ要素名を持っている場合には、区間インデックスを構築することが可能となる。このことは、ＸＰａｔｈ式を展開した上で区間インデックスを構築することに該当するので、パスの展開を考慮していない第１の実施形態に比べて、見落としがない分だけ、より高速な処理を行うことが可能となる。
【００８９】
図１４は、展開パスに対応して区間インデックスを構築する方法を説明する図である。まず、ＸＭＬデータが入力されると（Ｓ５１０）、必要に応じて遅延型決定性有限オートマトン（lazy DFA）が構築され、それと共に状態Ａが構築される（Ｓ５２０）。
【００９０】
そして、前記の状態Ａに含まれる全ての非決定性有限オートマトンの状態Ｂに対して処理を行ったか否かを調べる（Ｓ５３０）。なお、ここでの状態Ａとは、図１３における決定性有限オートマトンＡ１４０の状態Ｎ１１，Ｎ１２，Ｎ１３，Ｎ１４に該当し、状態Ｂとは、図１３における非決定性有限オートマトンＡ１３０の状態Ｎ１，Ｎ２，Ｎ３，Ｎ４，Ｎ５，Ｎ６，Ｎ７に該当する。
【００９１】
既に全ての処理が行われている場合には（Ｓ５３０→Ｙｅｓ）、処理を終了する。未処理の状態Ｂが残っている場合には（Ｓ５３０→Ｎｏ）、状態Ｂの要素名に対する区間インデックスが存在するか否かを調べる（Ｓ５４０）。区間インデックスが存在する場合（Ｓ５４０→Ｙｅｓ）、その要素名に対する区間インデックスへ状態Ｂに対応する条件を追加し、（Ｓ５５０）、ステップＳ５３０から処理を繰り返す。区間インデックスが存在しない場合（Ｓ５４０→Ｎｏ）、その要素名に対する区間インデックスを構築し、その区間インデックスへ状態Ｂに対応する条件を追加し（Ｓ５６０）、ステップＳ５３０から処理を繰り返す。なお、ステップＳ５５０及びＳ５６０において「区間インデックスに状態Ｂに対応する条件を追加する」という説明が出てきているが、これは、図１３の例でいえば、状態Ｎ３に対応する条件である「publication<2000」という条件を、構築した区間インデックスのより詳細な区間のうちの条件に該当する区間に対して登録を行うということに該当する。そして、このときの要素名は「publication」である。
【００９２】
第２の実施形態においても、第１の実施形態と同様に複数条件のＸＰａｔｈ式の処理を少ないメモリ使用量で高速に行うことが出来る。これは、数値を伴う条件の場合に効果が顕著である。しかも、第２の実施形態は、展開パスにおいて同一のパスが出現する場合には、第１の実施形態よりもさらに高速化が期待できる。
【００９３】
ここまで、本発明にかかる２つの実施形態を説明してきたが、本発明はこれらの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で変更が可能である。例えば、ここまでに説明した実施例では区間インデックスをクラスタ化ができたノードに対してだけ配置していたが、実際にクラスタ化が出来なくてもクラスタ化される可能性があるところにあらかじめ区間インデックスを配置しておくようにしてもよい。なお、本発明にかかる実施形態は、それぞれ計算機に計算機プログラムを読み込むことにより、演算手段（中央演算処理装置）を用いて実現される。
【図面の簡単な説明】
【００９４】
【図１】第１の実施形態の構成を説明する図である。
【図２】ＳＡＸフィルタとユーザアプリケーションの関係を示す図である。
【図３】複数条件ＸＰａｔｈ式であるに対応してＸＰａｔｈフィルタリング装置が生成するオートマトンの例を説明する図である。
【図４】効率が低下する問題の発生を説明する図である。
【図５】ＸＰａｔｈ式クラスタ化部における処理を説明する図である。
【図６】パスの与え方が異なるが、意味としては等価なＸＰａｔｈ式の例を示す図である。
【図７】ＸＰａｔｈ式と区間インデックスとの対応関係を説明する図である。
【図８】ＸＰａｔｈ式と区間インデックスの関係の例を示す図である。
【図９】区間インデックス構築部における処理を説明する図である。
【図１０】既存の区間が区間インデックスに登録されている場合に新規のＸＰａｔｈ式が登録される際にどのように区間インデックスを構築するかを示す例を説明する図である。
【図１１】区間インデックス検索部における処理を説明する図である。
【図１２】複数条件ＸＰａｔｈ式フィルタリング処理部の処理を説明する図である。
【図１３】第２の実施形態において、ＸＰａｔｈ式からＮＦＡへ変換し、最終的にＤＦＡが構築される様子を説明する図である。
【図１４】第２の実施形態において、展開パスに対応して区間インデックスを構築する方法を説明する図である。
【図１５】ＸＰａｔｈ式処理に関する従来技術を説明するための図である。
【符号の説明】
【００９５】
１      ＸＰａｔｈ式処理装置
１０    ＸＰａｔｈ式登録部
２０    ＸＰａｔｈ式格納部
３０    ＸＰａｔｈ式クラスタ化部
４０    区間インデックス構築部
５０    区間インデックス検索部
６０    複数条件ＸＰａｔｈ式フィルタリング処理部
【図１】
2006189951.tif 000005
【図２】
2006189951.tif 000006
【図３】
2006189951.tif 000007
【図４】
2006189951.tif 000008
【図５】
2006189951.tif 000009
【図６】
2006189951.tif 000010
【図７】
2006189951.tif 000011
【図８】
2006189951.tif 000012
【図９】
2006189951.tif 000013
【図１０】
2006189951.tif 000014
【図１１】
2006189951.tif 000015
【図１２】
2006189951.tif 000016
【図１３】
2006189951.tif 000017
【図１４】
2006189951.tif 000018
【図１５】
2006189951.tif 000019