(57)【特許請求の範囲】
【請求項１】
コンピュータに
要素識別子により要素が区切られた階層構造を有する文書データを記憶装置に記憶する文書記憶手順と、
前記記憶装置に記憶された文書データに含まれるデータを検索する検索式を取得し、前記検索式に兄弟軸が存在する場合に、前記検索式に対して軸変換を実行し、軸変換を行った検索式に親軸が含まれている場合には、軸変換を行った検索式に対して更に軸変換を実行することで、子供軸のみによって構成される検索式に変換する軸変換手順と、
前記軸変換手順によって変換された検索式に含まれる要素識別子の種類を識別して当該検索式に対応するオートマトンを作成するオートマトン作成手順と、
前記文書データに含まれるデータと前記オートマトンとを順に照合して前記検索式に該当するデータを出力する照合処理手順と、
を実行させるための照合処理プログラム。
【請求項２】
前記照合処理手順は、前記文書データに含まれるデータと前記オートマトンとを順に照合していく過程において検出されるデータを一時記憶テーブルに順次記憶し、照合が終了した時点において前記一時記憶テーブルに記憶されているデータを出力することを特徴とする請求項１に記載の照合処理プログラム。
【請求項３】
前記記憶装置に記憶された文書データおよび検索式に含まれる各要素識別子を数値に変換する数値変換手順を更にコンピュータに実行させることを特徴とする請求項１または２に記載の照合処理プログラム。
【請求項４】
要素識別子により要素が区切られた階層構造を有する文書データを記憶する文書記憶手段と、
前記文書記憶手段に記憶された文書データに含まれるデータを検索する検索式を取得し、前記検索式に兄弟軸が存在する場合に、前記検索式に対して軸変換を実行し、軸変換を行った検索式に親軸が含まれている場合には、軸変換を行った検索式に対して更に軸変換を実行することで、子供軸のみによって構成される検索式に変換する軸変換手段と、
前記軸変換手段によって変換された検索式に含まれる要素識別子の種類を識別して当該検索式に対応するオートマトンを作成するオートマトン作成手段と、
前記文書データに含まれるデータと前記オートマトンとを順に照合して前記検索式に該当するデータを出力する照合処理手段と、
を備えたことを特徴とする照合処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、要素識別子により要素が区切られた階層構造を有する文書データから検索式に該当するデータを検索する照合処理プログラムに関し、特に、検索式の構造によらず文書データから該当データを検索することができる照合処理プログラム等に関するものである。
【背景技術】
【０００２】
近年、コンピュータで処理される文書データとして、ＸＭＬ（Extensible  Markup  Language）などが利用されている。このＸＭＬは、タグとして参照される要素識別子「＜」や、「／＞」を使用した階層構造を含み、テキスト形式よりも多くの情報を含ませることが可能となっているため、コンピュータにおいてますます多用されてきている（以下、ＸＭＬに基づいて記述された階層構造をなす文書データをＸＭＬデータと表記する）。
【０００３】
そして、階層構造を含むＸＭＬデータを効率的に検索するため、一般的には、クエリ（Xpath式）などの検索式を使用し、そのクエリに該当する文書データおよびノードを検索する方法が知られている（例えば、特許文献１参照）。
【０００４】
【特許文献１】特開２００４−１２６９３３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＸＭＬデータのますますの巨大化にともない、ストリーム処理に基づいて、コンピュータに負荷をかけることなく、クエリに該当する文書およびノードを検索することが求められているが、クエリに逆行軸などが含まれている場合には、ストリーム処理によってＸＭＬデータを検索することが困難であるという問題があった。
【０００６】
図３４は、従来技術の問題点を説明するための図である。ストリーム処理によってＸＭＬデータを検索することが困難な理由を説明すると、ストリーム指向に基づいた処理では、すでに読んだデータを再度読むことができないが、クエリに逆行軸が含まれていると、現在のデータ位置（図３４のＤｎ）よりも過去のデータ（図３４のＤ１〜Ｄｎ−１）にアクセスする必要があるためである。
【０００７】
すなわち、クエリに分岐などが含まれているばあであっても、ＸＭＬデータからクエリに該当する文書データ等を高速かつ効率よく検索することが極めて重要な課題となっている。
【０００８】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、クエリの構成によらず、ＸＭＬデータからクエリに該当する文書データ等を高速かつ効率よく検索することができる照合処理プログラムおよび照合処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本発明は、コンピュータに、要素識別子により要素が区切られた階層構造を有する文書データを記憶装置に記憶する文書記憶手順と、前記記憶装置に記憶された文書データに含まれるデータを検索する検索式を取得した場合に、取得した検索式に対して軸変換を実行し、当該検索式を子供軸によって構成される検索式に変換する軸変換手順と、前記軸変換手順によって変換された検索式に含まれる要素識別子の種類を識別して当該検索式に対応するオートマトンを作成するオートマトン作成手順と、前記文書データに含まれるデータと前記オートマトンとを順に照合して前記検索式に該当するデータを出力する照合処理手順と、を実行させることを特徴とする。
【００１０】
また、本発明は、上記発明において、前記軸変換手順は、前記検索式に兄弟軸が存在しているか否かを判定し、兄弟軸が存在している場合に、当該兄弟軸を親軸と子供軸とに変換することを特徴とする。
【００１１】
上記発明において、前記軸変換手順は、前記検索式に親軸が存在しているか否かを判定し、親軸が存在している場合に、当該親軸を子供軸に変換する。すなわち、軸変換の一例として「親軸を子供軸に変換」を扱うことができ、実現方法として例えば、参考文献１（D.Olteanu  et  al.,“XPath:Looking  Forward”,Proc.XMLDM'02,2002.）がある。
【００１２】
また、上記発明において、前記検索式は、制約条件となる述語部を有し、前記軸変換手順は、変換前の検索式と変換後の検索式との関係を同値に保ったまま、前記検索式に含まれる述語部の位置を変更する。
【００１３】
また、本発明は、上記発明において、前記照合処理手順は、前記文書データに含まれるデータと前記オートマトンとを順に照合していく過程において検出されるデータを一時記憶テーブルに順次記憶し、照合が終了した時点において前記一時記憶テーブルに記憶されているデータを出力することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、要素識別子により要素が区切られた階層構造を有する文書データを記憶装置に記憶し、記憶装置に記憶された文書データに含まれるデータを検索する検索式を取得した場合に、取得した検索式に対して軸変換を実行し、当該検索式を子供軸によって構成される検索式に変換し、変換した検索式に含まれる要素識別子の種類を識別して当該検索式に対応するオートマトンを作成し、文書データに含まれるデータとオートマトンとを順に照合して検索式に該当するデータを出力するので、検索式の構成によらず、文書データから検索式に該当するデータを高速かつ効率よく検索することができる。
【００１５】
また、本発明によれば、検索式に兄弟軸が存在しているか否かを判定し、兄弟軸が存在している場合に、当該兄弟軸を親軸と子供軸とに変換するので、ストリーム処理によって、検索式に該当するデータを効率よく検索することができる。
【００１６】
また、本発明によれば、検索式に親軸が存在しているか否かを判定し、親軸が存在している場合に、当該親軸を子供軸に変換するので、ストリーム処理によって、検索式に該当するデータを効率よく検索することができる。軸変換の一例として「親軸を子供軸に変換」を扱うことができ、実現方法として例えば、参考文献１（D.Olteanu  et  al.,“XPath:Looking  Forward”,Proc.XMLDM'02,2002.）がある。
【００１７】
また、本発明によれば、変換前の検索式と変換後の検索式との関係を同値に保ったまま、検索式に含まれる述語部の位置を変更するので、検索式に該当するデータを効率よく検索することができる。
【００１８】
また、本発明によれば、文書データに含まれるデータとオートマトンとを順に照合していく過程において検出されるデータを一時記憶テーブルに順次記憶し、照合が終了した時点において一時記憶テーブルに記憶されているデータを出力するので、分岐を含む検索式に該当するデータを効率よく出力することができる。
【発明を実施するための最良の形態】
【００１９】
以下に添付図面を参照して、この発明に係る照合処理プログラムおよび照合処理装置の好適な実施の形態を詳細に説明する。
【実施例】
【００２０】
まず、ＸＭＬデータおよびクエリの逆行軸について説明する。図１は、ＸＭＬデータの木表現とＸＭＬデータのストリーム表現とを示す図であり、図２は、逆行軸を含むクエリ（検索式）の一例を示す図である。
【００２１】
図１に示すように、ＸＭＬデータの木表現では、ＸＭＬデータは、papers１０、paper１１，１２、author１３，１６、title１４，１５の各要素を有し、それぞれの要素を接続している。
【００２２】
具体的には、papers１０は、paper１１，１２に接続され、paper１１は、author１３およびtitle１４に接続され、paper１２は、title１５およびauthor１６に接続されている。また、author１３，１６は、文書データ「asai」に接続され、title１４は、文書データ「XML」に接続され、title１５は、文書データ「Data  Stream」に接続されている。
【００２３】
ここで、papers１０とpaper１１，１２との関係を、親と子と定義する。また、paper１１，１２との関係を兄弟とし、paper１１を兄、paper１２を弟と定義する。同様に、paper１１とauthor１３、title１４との関係を親と子と定義する。また、author１３とtitle１４との関係を兄弟とし、author１３を兄、title１４を弟と定義する。
【００２４】
また、paper１２とtitle１５、author１６との関係を親と子と定義する。そして、title１５とauthor１６との関係を兄弟とし、title１５を兄、author１６を弟と定義する。また、各要素の下側に接続された要素を子孫と定義する。例えば、papers１０の子孫は、paper１１，１２、author１３，１６、title１４，１５となる。
【００２５】
なお、ＸＭＬデータのストリーム表現では、各要素がＸＭＬデータの木表現の左側の軸から順に並べられている。このストリーム表現によるＸＭＬデータに対してクエリによるデータ検索を行う場合には、メモリ使用量が少なくて済みかつ、巨大データをあつかいやすいというメリットがあるが、すでに読んだデータを再度読むことができない。例えば、ストリーム表現されたＸＭＬデータにおいて、（open,title）（text,“XML”）を参照した後に、（open,author）（text,“asai”）を読むことができない。
【００２６】
続いて、図２の説明に移行すると、図２に示すクエリの意味は、[../author=“asai”]という制約条件のもとで、papers直下のpaper直下のtitle要素を検索するという意味である。なお、図２の場合の制約条件[../author=“asai”]の意味は、title要素の親（この場合はpaper）の直下に「asai」という文書データを持ったauthorが存在するという制約条件である。
【００２７】
図２のクエリによって検索される要素は、図１のtitle１４とtitle１５となり、図３に示すような検索結果が表示されることになる。図３は、図１のＸＭＬデータを図２に示すクエリで検索した場合の検索結果を示す図である。
【００２８】
しかしながら、図２に示すクエリは、一旦、titleを参照した後に、titleの親軸paperを参照する必要があるため（逆行軸を含んでいるため）、図１のＸＭＬデータをストリーム処理によってそのまま検索することが困難であるという問題がある。図２に示す例では、「../」が逆行軸を表している。
【００２９】
次に、本実施例にかかる照合処理装置について説明する。本実施例にかかる照合処理装置は、上述したような逆行軸や分岐などが含まれるクエリを軸変換アルゴリズムに基づいて軸変換し、軸変換したクエリを利用して、ストリーム処理によるＸＭＬデータの検索を実行する。このように、本実施例にかかる照合処理装置は、クエリの軸変換を行った後に、ストリーム処理によるＸＭＬデータの検索を実行するので、クエリの構成によらず、ＸＭＬデータからクエリに該当する文書データなどを高速かつ効率よく検索することができる。
【００３０】
図４は、本実施例にかかる照合処理装置の構成を示す機能ブロック図である。同図に示すように、この照合処理装置１００は、入力部１１０と、出力部１２０と、記憶部１３０と、前処理部１４０と、後処理部１５０とを備えて構成される。
【００３１】
このうち、入力部１１０は、各種の情報を入力する入力手段であり、キーボードやマウス、マイク、データ読取装置などによって構成され、例えば、上述したＸＭＬデータ、クエリ等を入力する。出力部１２０は、各種の情報（例えば、クエリに該当するデータ）を出力する手段であり、モニタ（若しくはディスプレイ、タッチパネル）等によって構成される。
【００３２】
記憶部１３０は、前処理部１４０および後処理部１５０による各種処理に必要なデータおよびプログラムを記憶する記憶手段（格納手段）であり、特に本発明に密接に関連するものとしては、ＸＭＬデータ１３１と、パストライ１３２と、ＢＩＮファイル１３３と、クエリデータ１３４と、兄弟対応テーブル１３５と、オートマトンデータ１３６と、ヒットテーブル１３７と、スタック１３８とを備える。
【００３３】
ＸＭＬデータ１３１は、タグとして参照される要素識別子「＜」や、「／＞」などを使用した階層構造をなす文書データである。図５は、ＸＭＬデータのデータ構造の一例を示す図である。図５に示すＸＭＬデータを木表現で表すと、図６のように示すことができる。図６は、図５に示すＸＭＬデータを木表現で表した場合の図である。図６に関する説明は、図１の木表現にかかる説明と同様であるため、説明を省略する。
【００３４】
パストライ１３２は、ＸＭＬデータの重複するパスを省略し、ＸＭＬデータの各要素に一意のＩＤを割り当てたデータである。図７は、パストライ１３２のデータ構造の一例を示す図である。同図に示すように、このパストライ１３２は、複数のタグ（papers、paper、author、title）を備え、各タグに一意のＩＤを割り当てている。
【００３５】
図７に示す例では、タグ「papers」にタグＩＤ（１）を割り当て、タグ「paper」にタグＩＤ（２）を割り当て、タグ「author」にタグＩＤ（３）を割り当て、タグ「title」にタグＩＤ（４）を割り当てている。
【００３６】
なお、図６に示したＸＭＬデータ（木表現）では、paperからauthorに至る軸およびpaperからtitleに至る軸がそれぞれ重複しているので、パストライ１３２は重複した軸を一つの軸にまとめている。
【００３７】
図８は、図７に示した各タグのデータ構造の一例を示す図である。同図に示すように、このタグは、タグ名と、タグＩＤと、子節へのポインタとを備える。ここで、図７に示した「papers」のタグを例にあげて説明すると、タグ名には「papers」が登録され、タグＩＤには、タグＩＤ（１）が登録され、子節へのポインタには、子節となる「paper」のポインタが登録される。
【００３８】
ＢＩＮファイル１３３は、ＸＭＬデータ１３１（図５参照）に含まれる各要素をパストライ１３２（図７参照）の各タグのＩＤで置き換えたデータである。図９は、ＢＩＮファイル１３３のデータ構造の一例を示す図である。同図に示すように、このＢＩＮファイル１３３は、各要素の位置を識別するための識別番号１００１〜１０１０と、タグＩＤで置き換えた要素とから構成される。
【００３９】
具体的に、図５と図９とを比較すると、＜papers＞は、[（１）に変換され、＜paper＞は、[（２）に変換され、＜author＞は、[（３）に変換され、＜title＞は、[（４）に変換されている。また、＜／papers＞は、／（１）に変換され、＜／paper＞は、／（２）に変換され、＜／author＞は、／（３）に変換され、＜／title＞は、／（４）に変換されている。
【００４０】
クエリデータ１３４は、入力部１１０から入力されるクエリを記憶したデータである。図１０は、クエリデータ１３４として記憶されるクエリの一例を示す図である。なお、図１０に示すクエリの意味は、図２において説明したクエリと同様の意味であるため説明を省略する。
【００４１】
兄弟対応テーブル１３５は、クエリに対して軸変換を実施した場合に、軸変換後の各要素の兄弟関係を記憶するためのテーブルである。図１１は、兄弟対応テーブル１３５のデータ構造の一例を示す図である。同図に示すように、この兄弟テーブル１３５には、各要素の兄弟関係が示されている。例えば、図１１では、「２＜３」と記録されているので、番号２，３番によって識別される各要素のうち、番号２の要素が兄となり、番号３の要素が弟となることを表している。
【００４２】
オートマトンデータ１３６は、軸変換されたクエリに基づいて生成されるオートマトンを記憶するデータである。オートマトンデータ１３６に関する詳しい説明は後述する。
【００４３】
ヒットテーブル１３７は、ＢＩＮファイル１３３と、オートマトンデータ１３６とを利用して、検索対象を検索する場合に利用するテーブルである。図１２は、ヒットテーブル１３７のデータ構造の一例を示す図である。同図に示すように、このヒットテーブル１３７は、文脈ノード検出イベントＣが発生したＢＩＮファイル１３３の位置および述語受理イベント（Ａｍ）が派生したＢＩＮファイル１３３の位置を格納するフィールドを複数有する。なお、文脈ノード検出イベントおよび述語受理イベントに関する説明は後述する。
【００４４】
スタック１３８は、ヒットテーブル１３７に格納するデータを一時的に記憶するデータである。図１３は、スタックのデータ構造の一例を示す図である。同図に示すように、スタック１３８は、文脈ノード検出イベントＣが発生したＢＩＮファイル１３３の位置および述語受理イベント（Ａｍ）が派生したＢＩＮファイル１３３の位置を格納するフィールドを１つ有する。
【００４５】
図４の説明に戻ると、前処理部１４０は、ＸＭＬデータ１３１に基づいて、パストライ１３２およびＢＩＮファイル１３３を生成する手段であり、パストライ作成部１４１およびＢＩＮファイル作成部１４２を備える。なお、前処理部１４０は、入力部１１０から、ＸＭＬデータを取得した場合には、取得したＸＭＬデータを記憶部１３０に記憶させる。
【００４６】
パストライ作成部１４１は、ＸＭＬデータ１３１（図５参照）に基づいて、パストライ１３２（図７参照）を作成する手段である。具体的に、パストライ作成部１４１は、ＸＭＬデータ１３１を解析し、ＸＭＬデータ１３１の重複するパスを検出する。そして、ＸＭＬデータ１３１に重複するパスが存在する場合には、重複するパスのうち、１つのパスを残した状態で、ＸＭＬデータ１３１の各要素に対応するタグを作成し、ＸＭＬデータ１３１の親子関係に則して、各タグを接続したパストライ１３２（図７参照）を作成する。また、パストライ作成部１４１は、各タグに一意のタグＩＤを割り当てる。
【００４７】
ＢＩＮファイル作成部１４２は、ＸＭＬデータ１３１（図５参照）およびパストライ１３２（図７参照）を基にして、ＢＩＮファイル１３３（図９参照）を作成する手段である。具体的に、ＢＩＮファイル作成部１３３は、ＸＭＬデータ１３１の各要素と、パストライ１３２のタグ名とを比較し、ＸＭＬデータ１３１の各要素の名称に対応するタグ名のタグＩＤを割り当て、ＢＩＮファイル１３３を作成する。
【００４８】
後処理部１５０は、照合処理を行い、クエリデータ１３４に該当するデータを検出する手段であり、軸変換処理部１５１と、オートマトン作成部１５２と、照合処理部１５３とを備える。なお、後処理部１５０は、入力部１１０から、クエリデータを取得した場合には、クエリデータ１３４として、記憶部１３０に記憶する。また、後処理部１５０は、検出したデータを出力部１２０に出力する。
【００４９】
軸変換処理部１５１は、クエリデータ１３４に対して軸変換を行う手段である。図１４は、軸変換処理部１５１の処理の概要を説明するための図である。同図に示すように、軸変換処理部１５１は、クエリ（逆行軸を含む）に対して軸変換を実行し、子供軸のみで構成されるクエリを生成する。そして、クエリの各要素名とパストライ１３２のタグ名とを比較して、各要素名に対応するタグ名のタグＩＤで各要素を変換する。
【００５０】
以下において、軸変換処理部１５１の処理を具体的に説明する。軸変換において、軸変換処理部１５１は、クエリデータ１３４に対して、兄弟軸変換処理を実行した後に、親軸変換処理を実行する。ここでは、まず、軸変換処理部１５１が行う兄弟軸変換について説明する。
【００５１】
（兄弟軸変換処理）
兄弟軸変換処理において、軸変換処理部１５１は、クエリデータ１３４から兄弟軸を検出する。例えば、兄弟軸は、クエリ上で、「following-sibling」、「preceding-sibling」によって示される。軸変換処理部１５１は、兄弟軸を検出した場合に、兄弟軸変換ルールを用いて、兄弟軸を親軸と子供軸に変換し、兄弟関係を兄弟対応テーブル１３５に登録する。
【００５２】
兄弟軸変換ルールは、
「/a/following-sibling::b⇒/a/../b」
「/a/preceding-sibling::b⇒/a/../b」
となる。
【００５３】
図１５は、兄弟軸変換処理を補足説明するための図である。同図において、ＸＭＬデータのノード「Ｃ」を検索するためのクエリは、「/a/b/following-sibling::c」となり、兄弟軸「following-sibling」を含んでいることがわかる。このクエリ「/a/b/following-sibling::c」に上記した兄弟軸変換ルールを適用すると、「/a/b/../c」に変換することができ、兄弟軸を、親軸と子供軸のみで表すことが可能となる。
【００５４】
また、軸変換処理部１５１は、兄弟軸を親軸と子供軸に変換した場合に、その兄弟関係を、兄弟対応テーブル１３５に登録する。図１５に示す例では、２番によって識別されるｂが兄、３番によって識別されるｃが弟であるため、兄弟対応テーブル１３５に登録される情報は、「２＜３」となる。
【００５５】
軸変換処理部１５１は、兄弟軸を親軸と子供軸に変換した後に、変換したクエリに対して同値性ルールを適用し、述語部（クエリの［]の部分）のネスト（[]の内部に更に[]が存在するものをネストと呼ぶ）を消す。また、連続する述語部では、親軸を含む述語部が先頭に来るように、同値性ルールを適用してクエリを並び替える。例えば、「π[a][../b][c/d]」に同値性ルールを適用して、「π[../b][a][c/d]」に並び替える。
【００５６】
同値性ルールは、下記のように、同値性ルール１〜７が存在する。なお、下記のπ１、π２は、任意のクエリのパス表現である。また、任意の子節ｘ∈Ｎに対してＳ[π１]（ｘ）＝Ｓ[π２]（ｘ）が成り立つとき、π１とπ２は同値であるといい、「π１≡π２」と表記する。
同値性ルール１：π１/π≡π２/π（π１≡π２の場合のみ適用）
同値性ルール２：π/π１≡π/π２（π１≡π２の場合のみ適用）
同値性ルール３：π[π１]≡π[π２]（π１≡π２の場合のみ適用）
同値性ルール４：π１[π]≡π２[π]（π１≡π２の場合のみ適用）
同値性ルール５：π[π１[π２]]≡π[π１/π２]
同値性ルール６：π[[π１]π２]≡π[π１][π２]
同値性ルール７：π[π１][π２]≡π[π２][π１]
【００５７】
（親軸変換処理）
親軸変換処理において、軸変換処理部１５１は、クエリデータ親軸を検出する。そして、軸変換処理部１５１は、親軸変換ルールを適用し、検出した親軸を子供軸に変換する。
なお、親軸を子供軸に変換する手法は、例えば、参考文献１（D.Olteanu  et  al.,“XPath:Looking  Forward”,Proc.XMLDM'02,2002.）に開示された手法を用いることができる。
親軸変換ルールは、
親軸変換ルール１：π/a/../≡π[a]
親軸変換ルール２：a/../≡./[π]/a
が存在する。
【００５８】
軸変換処理部１５１は、親軸を子供軸に変換した後に、変換したクエリに対して同値性ルールを適用し、述語部のネストを消す。また、連続する述語部では、親軸を含む述語部が先頭に来るように、同値性ルールを適用してクエリを並び替える。なお、同値性ルールは、上記した同値性ルール１〜７と同様であるため説明を省略する。
【００５９】
ここで、親軸変換ルールおよび同値性ルールを適用して、親軸を含むクエリのパスを変換する処理の具体例を示す。変換対象となるクエリのパスを
π＝/b1/b2[b3/b4/../../../b8]
とする。このパスπには、変換すべき親軸「../」が３つ含まれている。
【００６０】
πの一番左の親軸に対して親軸変換ルール１を適用したものをπ１とすると、
π１＝/b1/b2[b3[b4]../../b8]
となる。そして、π１の一番左の親軸に対して親軸変更ルール１を適用したものをπ２とすると、
π２＝/b1/b2[b3[b4]]../b8]
となる。
【００６１】
続いて、π２に同値性ルール５を適用すると、
π２＝/b1/b2[b3/b4]../b8]
となり、同値性ルール５を適用したπ２に同値性ルール６を適用すると、
π２＝/b1/b2[b3/b4][../b8]
となる。
【００６２】
また、同値性ルール６を適用したπ２に同値性ルール７を適用すると、
π２＝/b1/b2[../b8][b3/b4]
となる。そして、同値性ルール５〜７を適用したπ２に親軸変換ルール２を適用したものをπ３とすると、
π２＝/b1[b8]b2[b3/b4]
となる。
【００６３】
なお、軸変換処理部１５１は、クエリに対して親軸（あるいは先祖軸）変換処理を行う場合には、子孫軸をパストライで展開してから、親軸の変換を行う。例えば、
π＝/a//../d
に対して親軸変換処理を実行する場合には、
π＝/a/b/../d，a/b/c/d/../d
に展開した後に、親軸変換処理を行い、
π＝/a[b]d，a/b/c[b]d
に変換する。
【００６４】
軸変換処理部１５１は、クエリデータ１３４に記憶されたクエリに対して、兄弟軸変換処理および親軸変換処理を実行し、軸変換を実施したクエリをクエリデータ１３４に登録する（軸変換前のクエリを軸変換後のクエリによって更新する）。そして、軸変換処理部１５１は、変換後のクエリの各要素名と、パストライ１３２のタグ名とを比較して、クエリの各要素名をタグＩＤに変換する。タグＩＤに変換したクエリを変換クエリと表記する。
【００６５】
図４の説明に戻ると、オートマトン作成部１５２は、軸変換処理部１５１によって作成された変換クエリに対応するオートマトンデータを作成する手段である。オートマトン作成部１５２が作成したオートマトンデータは、オートマトンデータ１３６として記憶部１３０に記憶される。
【００６６】
ここで、オートマトン作成部１５２の処理について具体的に説明する。図１６は、オートマトン作成部１５２の処理を補足説明するための図である。なお、ここでは、説明の便宜上、クエリを
Q=/Syain/ACT/[contains(cast,"浅井")]chara[contains(name,"ブルー")]
とし、かかるクエリの各要素をタグＩＤに変換した変換クエリを
Q'=(2)[(5):e1](3)[(6):e2]
とし、オートマトン生成にかかる説明を行う。なお、かかる変換クエリＱ’において、「（２）」は「/Syain/ACT」に対応し、「（３）」は「chara」に対応し、「[（５）：ｅ１]」は、「[contains(cast,"浅井")]」に対応し、「[（６）：ｅ２]」は、「[contains(name,"ブルー")]」に対応する（変換クエリＱ’に対応するオートマトンが、図１６の下段に示すオートマトンとなる）。
【００６７】
図１６に示すオートマトンは、複数のノード構造体２０〜２７、イベント構造体３０〜３４を備えている。また、各ノード構造体２０〜２６、イベント構造体３０〜３１を結ぶ線は、かかる線に対応する条件を満たした場合に、矢印の方向に処理が移行することとなる。なお、図１６におけるεは、無条件で矢印の方向に処理が移行することを示し、Σ＼｛ｎ｝は、ｎ以外の場合に、矢印の方向に処理が移行することを示している。
【００６８】
まず、オートマトン作成部１５２は、変換クエリＱ’を解析して、
述語パスＩＤの集合：A=｛a1,...an｝（nは自然数）
分岐パスＩＤの集合：A=｛z1,...zn｝（nは自然数）
文脈パスＩＤ：c
評価パスＩＤ：ｄ
各ai∈Ａに対するキーワード集合key(ai)
を抽出する。
【００６９】
図１６に示す変換クエリＱ’では、オートマトン作成部１５２は、述語パスＩＤの集合として、「（５）、（６）」を抽出し、分岐パスＩＤの集合として、「（２）、（３）」を抽出する。また、文脈パスＩＤとして「（３）」を抽出する。文脈パスＩＤの抽出方法としては、変換クエリＱ’の最後の述語部[]の前に該当するものを抽出する。
【００７０】
また、オートマトン作成部１５２は、評価パスＩＤとして「（２）」を抽出する。評価パスＩＤは、例えば、変換クエリＱ’の最左のものが抽出される。そして、キーワード集合key(ai)として、「e1（浅井）」、「e2（ブルー）」を抽出する。
【００７１】
続いて、オートマトン作成部１５２は、オートマトンの初期状態Ini（図１６のノード構造体２０）、開始状態Open（開始記号”[”）を読んだ状態；ノード構造体２１）、終了状態Close（終了記号”/”；ノード構造体２７）を作成する。なお、Goto(Ini、”[”)＝OpenおよびGoto(Ini、”/”)＝Closeとする。
【００７２】
オートマトン作成部１５２は、任意のｉ＝１〜ｎに対して、以下の処理１−１〜１−６を行う。まず、処理１−１において、オートマトン作成部１５２は、述語パスＩＤ（ai∈A）に対応する状態State(ai)を作成する。図１６に示す例では、（５）に対応するState(a1)のノード構造体２２と（６）に対応するState（a2）のノード構造体２４とが生成される。
【００７３】
処理１−２において、オートマトン作成部１５２は、key(ai)を受理するキーワード参照オートマトンを作成し、各状態State（ai）のノード構造体からつなげる。図１６に示す例では、State(a1)のノード構造体２２からイベント構造体３０「Ａ１」に至るまでの各ノード構造体２２，２３とイベント構造体３０とを繋ぎ、State(a2)のノード構造体２４からイベント構造体３１「Ａ２」に至るまでのノード構造体２４，２５，２６とイベント構造体３１とを繋ぐ。
【００７４】
続いて、処理１−３において、オートマトン作成部１５２は、各状態State(ai)に対して、Goto(Open,ai)＝State(ai)となるように、State(a1)のノード構造体２２とノード構造体２１とを接続し、State(a2)のノード構造体２４とノード構造体２１とを接続する。
【００７５】
また、処理１−４では、オートマトン作成部１５２は、パストライ上におけるaiの任意の子供に対して、Goto(Close,b)＝State(ai)となるように、State(a2)のノード構造体２４とノード構造体２７とを接続する。図１６に示す例では、タグＩＤ（６）に該当するタグ（name）の子供がタグＩＤ（７）に該当するタグ（ID）となる。
【００７６】
処理１−５において、オートマトン作成部１５２は、分岐パスＩＤ（zi∈）に対応する状態State(zi)を作成する。図１６に示す例では、（２）に対応するState(z1)のイベント構造体３２「Ｚ１」と、（３）に対応するState(z2)のイベント構造体３３「Ｚ２」とが生成される。
【００７７】
処理１−６において、オートマトン作成部１５２は、各状態State(z1)に対して、Goto(close,zi)＝State(zi)となるように、State(z1)のイベント構造体３２とノード構造体２７とを接続し、State(z2)のイベント構造体３３とノード構造体２７とを接続する。
【００７８】
続いて、オートマトン作成部１５２は、文脈パスＩＤ「c」に対する状態State(c)を作成する。図１６に示す例では、イベント構造体３４「Ｃ」が作成される。そして、Goto(Open,c)＝State(c)となるように、ノード構造体２１とイベント構造体３４とを接続する。
【００７９】
また、オートマトン作成部１５２は、評価パスＩＤ「d」に対応する状態State(d)を作成する。図１６に示す例では、イベント構造体３２「Ｄ」が作成される（図１６では、「Ｚ１」と「Ｄ」とを一つのイベント構造体３２にまとめている）。そして、そして、Goto(close,d)＝State(d)となるように、ノード構造体３３とイベント構造体２７とを接続する。
【００８０】
上述したような各種の処理をオートマトン作成部１５２は実行し、変換クエリＱ’に対応するオートマトンデータを作成し、作成したオートマトンデータを記憶部１３０に記憶する。
【００８１】
ここで、上述したオートマトンデータに含まれるノード構造体のデータ構造およびイベント構造体のデータ構造について説明する。図１７は、ノード構造体のデータ構造の一例を示す図であり、図１８は、イベント構造体のデータ構造の一例を示す図である。
【００８２】
図１７に示すように、ノード構造体は、ノード構造体を識別するノードＩＤと、イベント構造体へのポインタと、他のノード構造体へのポインタを備える。例えば、図１６に示すノード構造体２１を例にあげると、イベント構造体へのポインタは、イベント構造体３４に該当するポインタが格納される。また、ノード構造体へのポインタは、ノード２０，２２，２４に該当するポインタが格納される。
【００８３】
また、図１８に示すように、イベント構造体は、イベント構造体を識別するイベントＩＤと、クエリを識別するクエリＩＤと、イベント型（文脈ノード検出イベント、述語受理イベント、述語評価イベント、クエリ評価イベント）を識別するイベント型と、イベント構造体のデータ位置と、他のイベント構造体へのポインタを備える。
【００８４】
図４の説明に戻ると、照合処理部１５３は、ＢＩＮファイル１３３とオートマトンデータ１３６と基にして、クエリデータ１３４に該当するデータを出力する手段である。ここで、照合処理部１５３の処理を具体的に説明する。なお、ここでは説明の便宜上、図１９に示すＢＩＮファイルと、図１６に示したオートマトンデータとを用いて説明する。図１９は、照合処理を説明するためのＢＩＮファイルのデータ構造の一例を示す図である。
【００８５】
なお、照合処理部１５３がＢＩＮファイルをオートマトンデータ代入して処理を遂行する過程において発生するイベントＥを、Ｅ＝（Ｑ，Ｔ，Ｐ）と定義する。ここで、イベントＥに含まれる「Ｑ」はクエリＩＤを示し、「Ｔ」はイベント型を示し、「Ｐ」はイベントが発生した瞬間のデータ位置を示す。
【００８６】
照合処理部１５３は、イベントＥの「Ｔ」が文脈ノード検出イベント（Ｃ）のとき、クエリＩＤ「Ｑ」のヒットテーブル１３７（図１２参照）に新規エントリを登録し、登録した新規エントリの内容に、現在のスタック１３８（図１３参照）の内容を登録する。
【００８７】
照合処理部１５３は、イベントＥの「Ｔ」が述語受理イベント（Ａｍ）のとき、クエリＩＤ「Ｑ」のヒットテーブル１３７、およびスタック１３８の第ｍ項目にイベントＥに含まれる「Ｐ」を登録する。
【００８８】
照合処理部１５３は、イベントＥの「Ｔ」が述語評価イベント（Ｚｍ）のとき、クエリＩＤ「Ｑ」のヒットテーブル１３７において、第ｍ目が空欄となっているエントリを削除し、スタック１３８の第ｍ項目を削除する。
【００８９】
照合処理部１５３は、イベントＥの「Ｔ」がクエリ評価イベント（Ｄ）のとき、クエリＩＤ「Ｑ」のヒットテーブルに生き残っているエントリを、正解として出力部１２０に出力する。
【００９０】
以上をふまえた上で、図１６に示すオートマトンと図１９に示すＢＩＮファイルと用いた照合処理部１５３の処理をＢＩＮファイルの位置「１００１」〜「１０１１」に分けて説明する。
【００９１】
（ＢＩＮファイルの位置「１００１」）
照合処理部１５３は、ＢＩＮファイルの位置「１００１」に対応するデータ「[(1)  シグマ戦隊中原ジャー」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点とし、ノード構造体２１に移行した段階で、次に対応する文字が存在しなくなるため、ノード構造体２０に戻り、位置「１００１」の検索は終了する。
【００９２】
（ＢＩＮファイルの位置「１００２」）
照合処理部１５３は、ＢＩＮファイルの位置「１００２」に対応するデータ「[(2)」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点とし、ノード構造体２１に移行した段階で、次に対応する文字が存在しなくなるため、ノード構造体２０に戻り、位置「１００２」の検索は終了する。
【００９３】
（ＢＩＮファイルの位置「１００３」）
照合処理部１５３は、ＢＩＮファイルの位置「１００３」に対応するデータ「[(3)  シグマブルー１」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点として、イベント構造体３４に到達する。イベント構造体３４に到達した時点で、照合処理部１５３は、イベントＥ１＝（Ｑ１、Ｃ、１００３）を発生させる。
【００９４】
図２０は、イベントＥ１＝（Ｑ１、Ｃ、１００３）が発生した時点での、ヒットテーブル１３７の状態を示す図である。なお、図２０に示すヒットテーブル１３７の「１００３」の行に対応する、Ａ１〜Ａｍには、スタック１３８の値がコピーされる（現段階において、スタック１３８には何も登録されていないので、ヒットテーブル１３７に現段階で何もコピーされない）。
【００９５】
（ＢＩＮファイルの位置「１００４」）
照合処理部１５３は、ＢＩＮファイルの位置「１００４」に対応するデータ「[(6)  ブルー  /(6)」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点として、イベント構造体３１に到達する。イベント構造体３１に到達した時点で、照合処理部１５３は、イベントＥ２＝（Ｑ１、Ａ２、１００４）を発生させる。
【００９６】
図２１は、イベントＥ２＝（Ｑ１、Ａ２、１００４）が発生した時点でのヒットテーブル１３７の状態を示す図であり、図２２は、イベントＥ２＝（Ｑ２、Ａ２、１００４）が発生した時点でのスタック１３８の状態を示す図である。図２１、図２２に示すように、「Ａ２」の該当位置に「１００４」が登録される。
【００９７】
（ＢＩＮファイルの位置「１００５」）
照合処理部１５３は、ＢＩＮファイルの位置「１００５」に対応するデータ「/(3)」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点として、イベント構造体３２に到達する。イベント構造体３２に到達した時点で、照合処理部１５３は、イベントＥ３＝（Ｑ１、Ｚ２、１００５）を発生させる。
【００９８】
イベントＥ３＝（Ｑ１、Ｚ２、１００５）が発生すると、照合処理部１５３は、ヒットテーブル１３７を参照し、「Ａ２」が未設定の行を削除する。なお、図２１に示すように、現段階で、ヒットテーブル１３７には、「Ａ２」に値が設定されているため、行の削除は実行されない。また、イベントＥ３＝（Ｑ１、Ｚ２、１００５）が発生すると、照合処理部１５３は、スタック１３８の「Ａ２」をクリアする。
【００９９】
（ＢＩＮファイルの位置「１００６」）
照合処理部１５３は、ＢＩＮファイルの位置「１００６」に対応するデータ「[(3)  シグマブルー２」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点として、イベント構造体３４に到達する。イベント構造体３４に到達した時点で、照合処理部１５３は、イベントＥ４＝（Ｑ１、Ｃ、１００６）を発生させる。
【０１００】
図２３は、イベントＥ４＝（Ｑ１、Ｃ、１００６）が発生した時点でのヒットテーブル１３７の状態を示す図である。同図に示すように、ヒットテーブル１３７の「Ｃ」の列に「１００６」が登録される。
【０１０１】
（ＢＩＮファイルの位置「１００７」）
照合処理部１５３は、ＢＩＮファイルの位置「１００７」に対応するデータ「[(6)  ブルー  /(6)」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点として、イベント構造体３１に到達する。イベント構造体３１に到達した時点で、照合処理部１５３は、イベントＥ５＝（Ｑ１、Ａ２、１００７）を発生させる。
【０１０２】
図２４は、イベントＥ５＝（Ｑ１、Ａ２、１００７）が発生した時点でのヒットテーブル１３７の状態を示す図であり、図２５は、イベントＥ５＝（Ｑ１、Ａ２、１００７）が発生した時点でのスタック１３８の状態を示す図である。図２４、図２５に示すように、「Ａ２」の該当位置に「１００７」が登録される。
【０１０３】
（ＢＩＮファイルの位置「１００８」）
照合処理部１５３は、ＢＩＮファイルの位置「１００８」に対するデータ「/(3)」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点として、イベント構造体３３に到達する。イベント構造体３３に到達した時点で、照合処理部１５３は、イベントＥ６＝（Ｑ１、Ｚ２、１００８）を発生させる。
【０１０４】
イベントＥ６＝（Ｑ１、Ｚ２、１００８）が発生すると、照合処理部１５３は、ヒットテーブル１３７を参照し、「Ａ２」が未設定の行を削除する。なお、図２４に示すように、現段階で、ヒットテーブル１３７には、「Ａ２」に値が設定されているため、行の削除は実行されない。また、イベントＥ６＝（Ｑ１、Ｚ２、１００８）が発生すると、照合処理部１５３は、スタック１３８の「Ａ２」をクリアする。
【０１０５】
（ＢＩＮファイルの位置「１００９」）
照合処理部１５３は、ＢＩＮファイルの位置「１００９」に対するデータ「[(5)  浅井達哉  /(5)」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点として、イベント構造体３０に到達する。イベント構造体３０に到達した時点で、照合処理部１５３は、イベントＥ７＝（Ｑ１、Ａ１、１００９）を発生させる。
【０１０６】
図２６は、イベントＥ７＝（Ｑ１、Ａ１、１００９）が発生した時点でのヒットテーブル１３７の状態を示す図であり、図２７は、イベントＥ７＝（Ｑ１、Ａ１、１００９）が発生した時点でのスタック１３８の状態を示す図である。図２６、図２７に示すように、「Ａ１」の該当位置「１００９」が登録される。
【０１０７】
（ＢＩＮファイルの位置「１０１０」）
照合処理部１５３は、ＢＩＮファイルの位置「１０１０」に対するデータ「/(2)」をオートマトンに代入する。するとかかるデータは、ノード構造体２０を始点として、イベント構造体３２に到達する。イベント構造体３２に到達した時点で、照合処理部１５３は、イベントＥ８＝（Ｑ１、Ｚ１、１０１０）、Ｅ９＝（Ｑ１、Ｄ、１０１０）を発生させる。
【０１０８】
イベントＥ８＝（Ｑ１、Ｚ１、１０１０）が発生すると、照合処理部１５３は、ヒットテーブル１３７を参照し、「Ａ１」が未設定の行を削除する。なお、図２６に示すように、現段階で、ヒットテーブル１３７には、「Ａ１」に値が設定されているため、行の削除は実行されない。また、イベントＥ８＝（Ｑ１、Ｚ１、１０１０）が発生すると、照合処理部１５３は、スタック１３８の「Ａ１」をクリアする。
【０１０９】
イベントＥ９＝（Ｑ１、Ｄ、１０１０）が発生すると、照合処理部１５３は、ヒットテーブル１３７を参照し、ヒットテーブル１３７の「Ｃ」列に登録された位置情報を出力部１２０に出力する。図２６に示す例では、ＢＩＮファイルの位置「１００３」、「１００６」が出力される。かかる位置データが、クエリデータ１３４に該当するデータとなる。なお、イベントＥ９＝（Ｑ１、Ｄ、１０１０）が発生すると、照合処理部１５３は、ヒットテーブル１３７に登録されたデータを削除する。
【０１１０】
（ＢＩＮファイル位置「１０１１」）
照合処理部１５３は、ＢＩＮファイルの位置「１０１１」に対応するデータ「/(1)」をオートマトンに代入する。すると、かかるデータは、ノード構造体２０を始点とし、ノード構造体２７に移行した段階で、次に対応する文字が存在しなくなるため、ノード構造体２０に戻り、位置「１０１１」の検索は終了する。
【０１１１】
次に、本実施例にかかる照合処理装置１００の処理について説明する。図２８は、本実施例にかかる照合処理装置１００の処理手順を示すフローチャートである。同図に示すように、照合処理装置１００は、ＸＭＬデータ１３１を取得し（ステップＳ１０１）、パストライ作成部１４１がＸＭＬデータ１３１を基にしてパストライ１３２を作成し（ステップＳ１０２）、ＢＩＮファイル作成部１４２がＸＭＬデータ１３１およびパストライ１３２を基にしてＢＩＮファイルを作成する（ステップＳ１０３）。
【０１１２】
そして、照合処理装置１００は、クエリデータ１３４を取得し（ステップＳ１０４）、クエリデータ１３４に逆行軸が存在するか（あるいは、軸変換が必要であるか）否かを判定する（ステップＳ１０５）。
【０１１３】
クエリデータ１３４に逆行軸が存在しない場合（あるいは、軸変換が不要な場合）には（ステップＳ１０６，Ｎｏ）、ステップＳ１０８に移行する。ステップＳ１０８に関する説明は後述する。
【０１１４】
一方、クエリデータ１３４に逆行軸が存在する場合（あるいは、軸変換が必要な場合）には（ステップＳ１０６，Ｙｅｓ）、軸変換処理部１５１がクエリデータ１３４の軸変換処理を実行し（ステップＳ１０７）、クエリデータ１３４の各要素をタグＩＤ（パスＩＤ）に変換する（ステップＳ１０８）。
【０１１５】
そして、照合処理装置１００は、オートマトン作成部１５２がクエリデータ１３４を基にしてオートマトンデータ１３６を作成し（ステップＳ１０９）、照合処理部１５３がオートマトンデータ１３６とＢＩＮファイル１３３に基づいて、照合処理を実行する（ステップＳ１１０）。
【０１１６】
次に、図２８のステップＳ１０７に示した軸変換処理について説明する。図２９は、本実施例にかかる軸変換処理を示すフローチャートである。同図に示すように、軸変換処理部１５１は、クエリデータのパス表現をπとし、兄弟対応テーブル１３５を初期化して（ステップＳ２０１）、πに兄弟軸が存在するか否かを判定する（ステップＳ２０２）。
【０１１７】
πに兄弟軸が存在しない場合には（ステップＳ２０３，Ｎｏ）、ステップＳ２０８に移行する。ステップＳ２０８に関する説明は後述する。一方、πに兄弟軸が存在する場合には（ステップＳ２０３，Ｙｅｓ）、πの一番左の兄弟軸に、兄弟軸変換ルールを適用し（ステップＳ２０４）、兄弟対応テーブル１３５に兄弟関係を登録する（ステップＳ２０５）。
【０１１８】
そして、軸変換処理部１５１は、同値性ルールが適用できる場合に、πに同値性ルールを適用し（ステップＳ２０６）、クエリデータ１３４のパス表現πを更新する（ステップＳ２０７）。
【０１１９】
続いて、軸変換処理部１５１は、πに親軸が存在するか否かを判定し（ステップＳ２０８）、πに親軸が存在しない場合には（ステップＳ２０９，Ｎｏ）、ステップＳ２１３に移行する。ステップＳ２１３に関する説明は後述する。
【０１２０】
一方、πに親軸が存在する場合には（ステップＳ２０９，Ｙｅｓ）、πの一番左の親軸に、親軸変換ルールを適用し（ステップＳ２１０）、同値性ルールが適用できる場合に、πに同値性ルールを適用し（ステップＳ２１１）、クエリデータ１３４のパス表現πを更新し（ステップＳ２１２）、クエリデータ１３４のパス表現πと兄弟対応テーブル１３５を出力する（ステップＳ２１３）。
【０１２１】
次に、図２８のステップＳ１０９に示したオートマトン作成処理について説明する。図３０は、本実施例にかかるオートマトン作成処理を示すフローチャートである。同図に示すように、オートマトン作成部１５２は、クエリデータ１３４を解析し、述語パスＩＤの集合、分岐パスＩＤの集合、文脈パスＩＤ、キーワード集合を抽出する（ステップＳ３０１）。
【０１２２】
そして、オートマトン作成部１５２は、オートマトンの初期状態Ini、開始状態Open、終了状態Closeを作成し（ステップＳ３０２）、述語パスＩＤに対応する状態State(ai)を作成し（ステップＳ３０３）、キーワード集合を受理する照合オートマトンを作成しState(ai)に接続する（ステップＳ３０４）。
【０１２３】
続いて、オートマトン作成部１５２は、Goto(Opne,ai)＝State(ai)に設定し（ステップＳ３０５）、パストライ上におけるaiの任意の子供bに対して、Goto(Close,d)＝State(ai)に設定し（ステップＳ３０６）、分岐パスＩＤに対する状態State（zi）を作成し（ステップＳ３０７）、Goto(Opne,zi)＝State(zi)に設定する（ステップＳ３０８）。
【０１２４】
そして、オートマトン作成部１５２は、文脈パスＩＤに対する状態State(c)を作成し（ステップＳ３０９）、Goto(Open,c)＝State(c)に設定し（ステップＳ３１０）、評価パスＩＤに対応する状態State(d)を作成し（ステップＳ３１１）、Goto(Open,d)＝State(d)に設定する（ステップＳ３１２）。
【０１２５】
次に、図２８のステップＳ１１０に示した照合処理について説明する。図３１は、本実施例にかかる照合処理を示すフローチャートである。同図に示すように、照合処理部１５３は、s＝Ini（初期状態）に設定し（ステップＳ４０１）、ＢＩＮファイル１３３に次の文字ａが存在するか否かを判定し（ステップＳ４０２）、存在しない場合には（ステップＳ４０３，Ｎｏ）、照合処理を終了する。
【０１２６】
一方、ＢＩＮファイル１３３に次の文字ａが存在する場合には（ステップＳ４０３，Ｙｅｓ）、ｓ＝Goto(s,a)とし（ステップＳ４０４）、ｓがイベント発生ノードか否か判定する（ステップＳ４０５）。
【０１２７】
そして、照合処理部１５３は、ｓがイベント発生ノードでない場合には（ステップＳ４０６，Ｎｏ）、ステップＳ４０２に移行する。一方、ｓがイベント発生ノードである場合には（ステップＳ４０６，Ｙｅｓ）、イベント評価処理を実行して（ステップＳ４０７）、ステップＳ４０２に移行する。
【０１２８】
次に、図３１のステップＳ４０７に示したイベント評価処理について説明する。図３２は、本実施例にかかるイベント評価処理を示すフローチャートである。同図に示すように、照合処理部１５３は、発生したイベントをＥ＝（Ｑ，Ｔ，Ｐ）とし、Ｑのヒットテーブル１３７をＨ（Ｑ）に設定し（ステップＳ５０１）、スタック１３８をStack＝φで初期化する（ステップＳ５０２）。
【０１２９】
そして、照合処理部１５３は、Ｔが文脈検出イベントか否かを判定し（ステップＳ５０３）、文脈検出イベントである場合には（ステップＳ５０４，Ｙｅｓ）、ヒットテーブルＨ（Ｑ）に新規エントリ（P、Stack）を追加し（ステップＳ５０５）、イベント評価処理を終了する。
【０１３０】
一方、Ｔが文脈検出イベントでない場合には（ステップＳ５０４，Ｎｏ）、Ｔが述語受理イベント（Ａｍ）であるか否かを判定し（ステップＳ５０６）、述語受理イベント（Ａｍ）である場合には（ステップＳ５０７，Ｙｅｓ）、ヒットテーブルＨ（Ｑ）の第ｍ項目にＰを記入し、スタックの第ｍ項目にＰを記入し（ステップＳ５０８）、イベント評価処理を終了する。
【０１３１】
一方、Ｔが述語受理イベント（Ａｍ）でない場合には（ステップＳ５０７，Ｎｏ）、Ｔが述語受理イベント（Ｚｍ）か否かを判定し（ステップＳ５０９）、述語受理イベント（Ｚｍ）である場合には（ステップＳ５１０，Ｙｅｓ）、ヒットテーブルＨ（Ｑ）の全エントリのうち、第ｍ項目が空欄であるものを削除し、スタック１３８の第ｍ項目を削除し（ステップＳ５１１）、イベント評価処理を終了する。
【０１３２】
一方、Ｔが述語受理イベント（Ｚｍ）でない場合には（ステップＳ５１０，Ｎｏ）、Ｔをクエリ評価イベントと判定し（ステップＳ５１２）、ヒットテーブルＨ（Ｑ）の全エントリを解として出力し（ステップＳ５１３）、ヒットテーブルＨ（Ｑ）をクリアする（ステップＳ５１４）。
【０１３３】
上述してきたように、本実施例にかかる照合処理装置１００は、パストライ作成部１４１がＸＭＬデータ１３１に基づいてパストライ１３２を作成し、ＢＩＮファイル作成部１４２がＸＭＬデータ１３１およびパストライ１３２に基づいてＢＩＮファイル１３３を作成する。そして、軸変換処理部１５１が軸変換アルゴリズムに基づいて、クエリデータ１３４の軸変換処理を行い、オートマトン作成部１５２が軸変換されたクエリデータ１３４に基づいてオートマトンデータ１３６を作成し、照合処理部１５３がオートマトンデータ１３６にＢＩＮファイル１３３を入力してクエリデータ１３４に該当するデータを出力するので、クエリデータの逆行軸など含まれていても、ストリーム処理によって、ＸＭＬデータ１３１からクエリデータに該当するデータを検索することができる。
【０１３４】
また、本実施例にかかる照合処理装置１００は、ＢＩＮファイル作成部１４２が、ＸＭＬデータ１３１の各要素をタグＩＤに変換したＢＩＮファイル１３３を作成し、照合処理部１５３が、タグＩＤに変換されたＢＩＮファイル１３３を用いて数値比較のみの照合処理を行うので、照合処理装置１００にかかる負担を軽減させることができる。
【０１３５】
また、本実施例にかかる照合処理装置１００は、軸変換処理部１５１が軸変換アルゴリズム（兄弟軸変換ルール、親軸変換ルール、同値性ルール）に基づいて、クエリデータ１３４の全ての軸を子供軸に変換するので、クエリデータ１３４の階層管理が不要になり、高速にクエリデータ１３４に該当するデータを検索することができる。
【０１３６】
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１３７】
また、図４に示した照合処理装置１００の構成は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がＣＰＵ（あるいは、ＭＣＵ、ＭＰＵ）および当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１３８】
図３３は、図４に示した照合処理装置１００が備えるコンピュータのハードウェア構成を示す図である。このコンピュータ６０は、ユーザからのデータの入力を受け付ける入力装置６１、モニタ６２、ＲＡＭ（Random  Access  Memory）６３、ＲＯＭ（Read  Only  Memory）６４、記憶媒体からデータを読み取る媒体読取装置６５、ＣＰＵ（Central  Processing  Unit）６６、およびＨＤＤ（Hard  Disk  Drive）６７をバス６８で接続して構成される。
【０１３９】
そして、ＨＤＤ６７には、上述した照合処理装置１００の機能と同様の機能を発揮する前処理プログラム６７ｂ、後処理プログラム６７ｃが記憶されている。そして、ＣＰＵ６６が前処理プログラム６７ｂ、後処理プログラム６７ｃをＨＤＤ６７から読み出して実行することにより、上述した照合処理装置１００の機能部の機能を実現する前処理プロセス６６ａ、後処理プロセス６６ｂが起動される。この前処理プロセス６６ａ、後処理プロセス６６ｂは、図４に示した前処理部１４０、後処理部１５０にそれぞれ対応する。
【０１４０】
また、ＨＤＤ６７には、上述した照合処理装置１００の記憶部１３０に記憶されるデータに対応する各種データ６７ａが記憶される。この各種データ６７ａは、図４に示したＸＭＬデータ１３１、パストライ１３２、ＢＩＮファイル１３３、クエリデータ１３４、兄弟対応テーブル１３５、オートマトンデータ１３６、ヒットテーブル１３７、スタック１３８に対応する。
【０１４１】
ＣＰＵ６６は、各種データ６７ａをＨＤＤ６７に記憶するとともに、各種データ６７ａをＨＤＤ６７から読み出してＲＡＭ６３に格納し、ＲＡＭ６３に格納された各種データ６３ａを利用して照合処理を行う。
【０１４２】
（付記１）コンピュータに
要素識別子により要素が区切られた階層構造を有する文書データを記憶装置に記憶する文書記憶手順と、
前記記憶装置に記憶された文書データに含まれるデータを検索する検索式を取得した場合に、取得した検索式に対して軸変換を実行し、当該検索式を子供軸によって構成される検索式に変換する軸変換手順と、
前記軸変換手順によって変換された検索式に含まれる要素識別子の種類を識別して当該検索式に対応するオートマトンを作成するオートマトン作成手順と、
前記文書データに含まれるデータと前記オートマトンとを順に照合して前記検索式に該当するデータを出力する照合処理手順と、
を実行させるための照合処理プログラム。
【０１４３】
（付記２）前記軸変換手順は、前記検索式に兄弟軸が存在しているか否かを判定し、兄弟軸が存在している場合に、当該兄弟軸を親軸と子供軸とに変換することを特徴とする付記１に記載の照合処理プログラム。
【０１４４】
（付記３）前記照合処理手順は、前記文書データに含まれるデータと前記オートマトンとを順に照合していく過程において検出されるデータを一時記憶テーブルに順次記憶し、照合が終了した時点において前記一時記憶テーブルに記憶されているデータを出力することを特徴とする付記１または２に記載の照合処理プログラム。
【０１４５】
（付記４）前記記憶装置に記憶された文書データおよび検索式に含まれる各要素識別子を数値に変換する数値変換手順を更にコンピュータに実行させることを特徴とする付記１〜３のいずれか一つに記載の照合処理プログラム。
【０１４６】
（付記５）要素識別子により要素が区切られた階層構造を有する文書データを記憶装置に記憶する文書記憶工程と、
前記記憶装置に記憶された文書データに含まれるデータを検索する検索式を取得した場合に、取得した検索式に対して軸変換を実行し、当該検索式を子供軸によって構成される検索式に変換する軸変換工程と、
前記軸変換工程によって変換された検索式に含まれる要素識別子の種類を識別して当該検索式に対応するオートマトンを作成するオートマトン作成工程と、
前記文書データに含まれるデータと前記オートマトンとを順に照合して前記検索式に該当するデータを出力する照合処理工程と、
を含んだことを特徴とする照合処理方法。
【０１４７】
（付記６）要素識別子により要素が区切られた階層構造を有する文書データを記憶する文書記憶手段と、
前記文書記憶手段に記憶された文書データに含まれるデータを検索する検索式を取得した場合に、取得した検索式に対して軸変換を実行し、当該検索式を子供軸によって構成される検索式に変換する軸変換手段と、
前記軸変換手段によって変換された検索式に含まれる要素識別子の種類を識別して当該検索式に対応するオートマトンを作成するオートマトン作成手段と、
前記文書データに含まれるデータと前記オートマトンとを順に照合して前記検索式に該当するデータを出力する照合処理手段と、
を備えたことを特徴とする照合処理装置。
【産業上の利用可能性】
【０１４８】
以上のように、本発明にかかる照合処理プログラムおよび照合処理装置は、要素識別子により要素が区切られた階層構造を有する文書データから検索式に該当するデータを検索する検索システムなどに有用であり、特に、検索式の構成によらず、高速に検索式に該当するデータを検索する必要がある場合に適している。
【図面の簡単な説明】
【０１４９】
【図１】ＸＭＬデータの木表現とＸＭＬデータのストリーム表現とを示す図である。
【図２】逆行軸を含むクエリの一例を示す図である。
【図３】図１のＸＭＬデータを図２に示すようなクエリで検索した場合の検索結果を示す図である。
【図４】本実施例にかかる照合処理装置の構成を示す機能ブロック図である。
【図５】ＸＭＬデータのデータ構造の一例を示す図である。
【図６】図５に示すＸＭＬデータを木表現で表した場合の図である。
【図７】パストライのデータ構造の一例を示す図である。
【図８】図７に示した各タグのデータ構造の一例を示す図である。
【図９】ＢＩＮファイルのデータ構造の一例を示す図である。
【図１０】クエリデータとして記憶されるクエリの一例を示す図である。
【図１１】兄弟対応テーブルのデータ構造の一例を示す図である。
【図１２】ヒットテーブルのデータ構造の一例を示す図である。
【図１３】スタックのデータ構造の一例を示す図である。
【図１４】軸変換処理部の処理の概要を説明するための図である。
【図１５】兄弟軸変換処理を補足説明するための図である。
【図１６】オートマトン作成部の処理を補足説明するための図である。
【図１７】ノード構造体のデータ構造の一例を示す図である。
【図１８】イベント構造体のデータ構造の一例を示す図である。
【図１９】照合処理を説明するためのＢＩＮファイルのデータ構造の一例を示す図である。
【図２０】イベントＥ１＝（Ｑ１、Ｃ、１００３）が発生した時点でのヒットテーブルの状態を示す図である。
【図２１】イベントＥ２＝（Ｑ２、Ａ２、１００４）が発生した時点でのヒットテーブルの状態を示す図である。
【図２２】イベントＥ２＝（Ｑ２、Ａ２、１００４）が発生した時点でのスタックの状態を示す図である。
【図２３】イベントＥ４＝（Ｑ１、Ｃ、１００６）が発生した時点でのヒットテーブルの状態を示す図である。
【図２４】イベントＥ５＝（Ｑ１、Ａ２、１００７）が発生した時点でのヒットテーブルの状態を示す図である。
【図２５】イベントＥ５＝（Ｑ１、Ａ２、１００７）が発生した時点でのスタックの状態を示す図である。
【図２６】イベントＥ７＝（Ｑ１、Ａ１、１００９）が発生した時点でのヒットテーブルの状態を示す図である。
【図２７】イベントＥ７＝（Ｑ１、Ａ１、１００９）が発生した時点でのスタックの状態を示す図である。
【図２８】本実施例にかかる照合処理装置の処理手順を示すフローチャートである。
【図２９】本実施例にかかる軸変換処理を示すフローチャートである。
【図３０】本実施例にかかるオートマトン作成処理を示すフローチャートである。
【図３１】本実施例にかかる照合処理を示すフローチャートである。
【図３２】本実施例にかかるイベント評価処理を示すフローチャートである。
【図３３】図４に示した照合処理装置が備えるコンピュータのハードウェア構成を示す図である。
【図３４】従来技術の問題点を説明するための図である。
【符号の説明】
【０１５０】
６０    コンピュータ
６１    入力装置
６２    モニタ
６３    ＲＡＭ
６３ａ，６７ａ  各種データ
６４    ＲＯＭ
６５    媒体読取装置
６６    ＣＰＵ
６６ａ  前処理プロセス
６６ｂ  後処理プロセス
６７    ＨＤＤ
６７ｂ  前処理プログラム
６７ｃ  後処理プログラム
６８    バス
１００    照合処理装置
１１０    入力部
１２０    出力部
１３０    記憶部
１３１    ＸＭＬデータ
１３２    パストライ
１３３    ＢＩＮファイル
１３４    クエリデータ
１３５    兄弟対応テーブル
１３６    オートマトンデータ
１３７    ヒットテーブル
１３８    スタック
１４０    前処理部
１４１    パストライ作成部
１４２    ＢＩＮファイル作成部
１５０    後処理部
１５１    軸変換処理部
１５２    オートマトン作成部
１５３    照合処理部
【図１】
0005320697.tif 000002
【図２】
0005320697.tif 000003
【図３】
0005320697.tif 000004
【図４】
0005320697.tif 000005
【図５】
0005320697.tif 000006
【図６】
0005320697.tif 000007
【図７】
0005320697.tif 000008
【図８】
0005320697.tif 000009
【図９】
0005320697.tif 000010
【図１０】
0005320697.tif 000011
【図１１】
0005320697.tif 000012
【図１２】
0005320697.tif 000013
【図１３】
0005320697.tif 000014
【図１４】
0005320697.tif 000015
【図１５】
0005320697.tif 000016
【図１６】
0005320697.tif 000017
【図１７】
0005320697.tif 000018
【図１８】
0005320697.tif 000019
【図１９】
0005320697.tif 000020
【図２０】
0005320697.tif 000021
【図２１】
0005320697.tif 000022
【図２２】
0005320697.tif 000023
【図２３】
0005320697.tif 000024
【図２４】
0005320697.tif 000025
【図２５】
0005320697.tif 000026
【図２６】
0005320697.tif 000027
【図２７】
0005320697.tif 000028
【図２８】
0005320697.tif 000029
【図２９】
0005320697.tif 000030
【図３０】
0005320697.tif 000031
【図３１】
0005320697.tif 000032
【図３２】
0005320697.tif 000033
【図３３】
0005320697.tif 000034
【図３４】
0005320697.tif 000035