JP4036718B2 - 文書検索システム、文書検索方法、文書検索を実行するためのプログラム - Google Patents
文書検索システム、文書検索方法、文書検索を実行するためのプログラム Download PDFInfo
- Publication number
- JP4036718B2 JP4036718B2 JP2002290050A JP2002290050A JP4036718B2 JP 4036718 B2 JP4036718 B2 JP 4036718B2 JP 2002290050 A JP2002290050 A JP 2002290050A JP 2002290050 A JP2002290050 A JP 2002290050A JP 4036718 B2 JP4036718 B2 JP 4036718B2
- Authority
- JP
- Japan
- Prior art keywords
- search
- state
- node
- automaton
- document
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 82
- 230000007704 transition Effects 0.000 claims description 140
- 230000014509 gene expression Effects 0.000 claims description 130
- 238000011156 evaluation Methods 0.000 claims description 108
- 230000004044 response Effects 0.000 claims description 4
- 238000004458 analytical method Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 69
- 238000010586 diagram Methods 0.000 description 31
- 230000008569 process Effects 0.000 description 30
- 238000012545 processing Methods 0.000 description 24
- 238000004422 calculation algorithm Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 7
- 238000012795 verification Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000007562 laser obscuration time method Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
Description
【発明の属する技術分野】
本発明は、概ね文書検索に関し、より詳細には、式で指定された検索する文書の要素(ノード)を検索オートマトンを使用してストリームベースで検索を実行させる、文書検索システム、文書検索方法、該文書検索方法をコンピュータに対して実行させるためのプログラム、および該文書検索方法をコンピュータに対して実行させるプログラムが記憶されたコンピュータ可読な記憶媒体に関する。また、本発明は、上述した文書検索システムにおいて検索オートマトンを生成するためのコンパイル装置、コンパイル方法、該コンパイル方法をコンピュータに対して実行させるためのプログラム、および該プログラムを記憶したコンピュータ可読な記憶媒体に関する。さらに本発明は、上述した文書検索に使用される検索オートマトン評価装置に関する。
【0002】
【従来の技術】
コンピュータなどにおいて処理される文書としては、テキスト形式、ハイパーテキスト・マークアップ・ランゲージ(Hypertext Markup Language:HTML)、SGML(Standard Generalized Markup Language)、次世代HTMLとして注目されているXML(Extensible Markup Language)などが知られている。これらの文書のうち、HTML、SGML、XMLといった文書は、タグとして参照される要素識別子<や、/>を使用した階層構造を含み、テキスト形式よりも多くの情報を含ませることが可能となっているため、コンピュータにおいてますます多用されてきている。これらの階層構造を含む文書を効率的に検索するため、一般的には検索式を使用し、その検索式に該当する要素を含む文書およびノードを検索する方法が知られている。例えば検索式としては、特にXML文書を対象とするXpath式が知られている。
【0003】
XPath式とは、"/"(スラッシュ,slash)で区切られた、要素、属性に対する条件(正確には位置ステップ;location step)の列からなる文字列を含んで構成される。たとえば/html/body/pは、html、body、pという3つの条件からなる XPath式である。この場合、html、body、pは、それぞれ要素の名前(タグ名, tag name) に関する条件となる。このXPath式 /html/body/pをあるHTML文書に対して評価すると、html要素の直下のbody要素の直下に存在するp要素が検索される。一般には、このようなp要素は、木の中に複数存在する。一般にひとつのXPath式は、XML文書の複数のノードの集合を検索する。
【0004】
XPath式には、タグ名に関する条件のほかに軸(axis)を指定することができる。例えば、もし/htmlのように軸が何も指定されていない場合、軸はchild、すなわちノードの木構造において直下の(子供の)要素を指し示すことになる。XPath式において軸を指定する場合、/decendant::p のような構文によって指定することができる。このdescendantは、子孫要素を示す。軸を/descendant::pとして定める場合には、直下の要素に限らず、木構造の子孫にあたるすべてのpが検索できる。この軸descendantに関しては、より簡易に//pのように、省略形で記述することができる。
【0005】
XPath式にはタグ名に関する条件、軸に加えてさらに、述語(predicate)を指定することができる。述語は、XML木のノードを検索する際に、そのノードにおいて満たされるべき条件を記述する。述語は、and、or、not などによって論理的に連結することができる。
【0006】
上述したXPathの仕様は、W3C仕様がこれまで提案されている。W3C仕様のXPathに忠実なXPath評価システムとしては、これまでXalanなどが知られており、この評価システムは、XPathの軸、述語などをすべて評価することができる。これらのXpath評価システムは、DOM、またはそれに類似するデータ構造を用い、XML文書をすべてメモリに展開することによりコンピュータなどにおいて実装されている。DOMは、XML文書の木構造をメモリの中にすべて展開するXML操作インタフェースとして知られている。またこれとは別にSAXとして参照されるシステムおよび方法も知られている。SAXは、XML文書を文書の先頭から順にイベントの形で読出すインタフェース(API)である。以後、本発明においては、SAXのように文書の先頭から順にXML文書を読み出すアプリケーション・インタフェイス(API)を総称して、ストリームベースAPIとして参照する。
【0007】
上述したストリームベースAPIを使用して文書の先頭から順に読み出しを実行させる文書検索システムについて考察すると、XMLを木構造として表現すれば多くの場合、(1)深さの優先順、(2)ノードの並びについては、左から右の順で読出しが実行される。SAXベースのXPath評価システムとしては、http://XML.coverpages.org/ni2002-08-26-d.htmlに開示されたXMLTKなどが提案されている。しかしながら、従来知られたストリームベースの評価システムは、Xpathにおいて許容されている論理仕様を完全に満たす範囲を処理することができないといった不都合がある。上述した不都合を改善するための試みは種々行われており、例えばD. Olteanuらは、XPath: Looking Forward, http://www.cis.uni-muenchen.de/people/Meuss/Pub/XMLDM02.pdfにおいて、逆方向の軸をXPathから取り除くことを検討しているものの、XPathの仕様を完全に満たす範囲の論理を処理する点では不充分であった。
【0008】
一方で、記号を保持した記憶手段と、記憶手段に記述された記号を読み取る装置と状態制御装置とから構成されるオートマトンという技術的概念も知られている。オートマトンは、記憶手段に書き込まれた記号を読み込み、状態制御装置の前の状態と読み込んだ記号とによって、内部の状態を遷移させ、状態制御装置が保持する最終状態と遷移状態とが一致した場合に処理を終了させるものとされている。オートマトンのコンピュータにおける実装を考えた場合、オートマトンは、いくつかの状態遷移からなるテーブル構造を含んで実装されることになる。上述したオートマトンの基礎については、例えば代表的な文献、J. ホップクロフト・J. ウルマン(野崎・高橋・町田・山崎訳)「オートマトン 言語理論 計算論I、II」,サイエンス社,1986年に詳細な説明がなされている。
【0009】
また、検索オートマトンの用語は、本発明においてオートマトンのある状態を検索状態として他の状態から識別させ、他の状態とは異なる状態制御を実行させるオートマトンのことを意味する。このような検索オートマトンについては、これまでNeven(F. Neven, Design and Analysis of Query Languages for Structured Documents, PhD Thesis, Limburgs Universitair Centrum, 1999)などにより提案されている。しかしながらNevenの方法は、検索オートマトンの性質などを調べたものであり、検索オートマトンのストリームベースでの文書検索システムへの適用性およびその具体的構成については何ら示唆するものではない。
【0010】
上述した従来の評価装置において、W3C仕様に忠実なXalanなどの評価装置は、主にDOMを用いて構成されており、この理由としては下記の理由を挙げることができる。
1.XPath式//a/ancestor::bは、蓄積された文書のどこかにあるa要素のさらにその祖先のb要素を指し示すXPath式である(上記式中、//aは、/descendant::a の略記である。)。このようなXPath式は、一般に木構造を下りてから上る動作で評価されるため、先頭から順にXML文書を読み出す方式では評価できない。
2.XPath式//a/preceeding-sibling::bは、蓄積されたXML文書のどこかにあるa要素のその弟要素のb要素を指し示すXPath式である。このXPath式では、木構造を右に動いてから左に戻る動作で評価を実行するため、文書の先頭から順にXML文書を読み出す方式では評価できない。
3.XPath式//a[.//b]は、a要素であって、その子孫にb要素が存在するXML文書をすべて選択する。このようなXPath式は、(i)a要素を探した後、その子孫の中で(2)b要素の存在を調べに行く、という手順で評価される。この評価は、順序としては文書の先頭から順に調べてゆく順で可能である。しかしながら、結果として選択されるのはa要素であるため、a要素がどこに存在したかという情報を記憶しておかなくてはならない。
4.XPath式//a[.//b and .//c]は、a要素であって、その子孫にb要素およびa要素が存在するものを選択する。このようなXPath式は、(i)a要素を探した後、その子孫の中で(ii)b要素の存在を調べにゆき、 最後に(iii)c要素の存在を調べにゆくという手順で評価が行われる。この評価も文書の先頭から順にXML文書を調べるという順では実行できない。
【0011】
上記理由4の条件は、連言的(conjunctive)な条件として参照される。一方、XPath式 //a[.//b or .//c]は、a要素であってその子孫にb要素またはc要素が存在するものを選択する。このXPath式は、選言的(disjunctive)な条件として参照される。選言しか含まないXPath式は、即座に.//a[.//*[name() = "b" or name() = "c"]] のように書き換えることができる。このため、(i)a要素を探した後、その子孫の中で(ii)名前がbまたはcであるノードにであうまで検索をする、という手法で評価が実行できる。
【0012】
従って従来のストリームベースの文書検索は、式が特殊な軸(理由1および2として参照した)や、特殊な述語(理由3および4と関連する)を含まない場合には、XPath式を文書の先頭から順に評価することは容易である。
【0013】
ところで上述したように従来のDOMを使用する文書評価システムが知られているものの、DOMは、与えられたXML文書をすべてメモリ上に展開することを必要とするので、ストリームベースのSAXに比較してメモリ効率が低く、また実行効率が悪いという不都合がある。また、DOMを使用した評価システムについて、ノードを見ようとしたときにはじめて文書の必要な部分を読み込む処理を実行させる手法を利用する評価システムも想定できる。しかしながら、このような評価装置でもDOMは、いったん読み込んで構築したXML文書の木構造を捨て去ることはしない。XML文書の中には、数ギガバイトのメモリに入りきらないようなものも存在し、このようなXML文書に対してDOM木をメモリ上に作成して保存させておくことは、ハードウエア・リソースの点から現実的なものではなく、文書検索システムの適用性を制限する要因となっていた。
【0014】
さらに、DOM木を用いるようなナイーブなアルゴリズムでは、上述のように、文書の同じ場所を何回も繰り返し調べることになる。これは、XPathの評価アルゴリズムとしては効率が悪く、たとえば//a[.//b]の評価において、あるa要素の子孫ノードにbがあるかどうかを調べると同時に、そのノードが検索されるべきもうひとつのa要素であるかを調べることができれば文書検索の効率化を達成することが可能となる。
【0015】
一方で、XPath式が特殊な軸や、述語を持たない場合には、XPath式を、SAXなどのイベント駆動処理系による評価が容易に実行できることは上述した通りである。しかしながら、上述した理由1〜4に挙げたように、従来のストリーム検索の技術の手法は、軸や述語の表現のすべてを解釈できず、(ア)述語の中に子供に関する条件しか書けない点(例: XPath 式 //a[.//b]が記述できない)、(イ)XMLTKでは、現在のところ述語の評価を避けている点、(ハ)SGMLに対する有名な文書変換装置としてhttp://www.tas.co.jp/XML/tools/omni/omnimarkに開示されたomnimarkが知られているものの、omnimarkであっても、2つの条件のandを記述してパス評価を行うことができない点(例: //a[.//b and .//c] は記述できない。)などの不都合がある。
【0016】
また、上述した不都合を改善するために、OlteanuらによるようにXPath式から逆方向の軸を取り除く手法を使用し、例えばXPath式である//a[ancestor::b]からancestor軸を取り除くことにより等価なXPath式として、//b//aを得ることもできる。しかしながら上述した方法は汎用的な方法ではなく、例えばXPath式 //a[not(ancestor::b)]から逆方向の軸ancestor軸を取り除くと、まったく別の結果を与えることになってしまう。上述した点で、現状ではこれらをすべてサポートしたW3Cの仕様に忠実な評価装置をストリームベースAPIによって評価する文書検索システムおよび文書検索方法は知られていない。
【0017】
さらに、DOMを用いる検索システムでもSAXを使用する検索システムでも、二つの条件をandにより結合させてパス評価を行うことができないといった不都合があった。また、これまでの検索システムでは、兄弟要素に対する軸(following-sibling, preceeding-sibling, etc.)含めたパス評価を行うことができないといった不都合があった。加えてこれまでの評価手法は、述語を満たすノードが存在しないことを示す否定“not”を取り扱うことができないといった不都合があった。
【0018】
【発明が解決しようとする課題】
本発明は、上記従来技術が含む不都合に鑑みてなされたものであり、本発明は、これまで軸や述語の表現をすべて解釈でき入力される検索式に対して高い汎用性を有し、かつ高い効率で評価を実行することを可能とし、さらには省ハードウエア資源を達成することが可能なストリームベースAPIに基づいた文書検索を可能とすることを目的とする。以下、本発明においてはストリームベース検索を単に、ストリーム検索として参照する。
【0019】
【課題を解決するための手段】
本発明は、文書検索システムをオートマトンを用いて構成し、検索を文書検索システムの状態遷移のうち、要素識別子の種類を判断して複数の異なる木構造を特定し、複数の異なる木構造の複数の結果を入力とし、初期状態、終了状態の他、検索状態の間の3つの状態間で状態遷移を可能とする検索オートマトンを構成すれば、従来の文書検索システムの不都合を改善することができる、という新規な着想の下になされたものである。本発明の文書検索システムは、検索状態を識別し、検索状態において初期状態および終了状態とは異なる処理を実行させる。検索オートマトンは、入力された検索式をコンパイルして、初期状態、終了状態および検索状態を状態集合を含んで構成されるテーブル構造によって表現される。本発明においては、要素識別子の種類を判断して前方ノードおよび後方ノードを定義する。さらに後方ノードを複数の木構造に識別し、状態遷移を木構造の複数の後方ノードの状態を入力することにより生じさせるものとする。
【0020】
本発明では、検索オートマトンは、入力のストリームを解釈し、各ノードに対してノードを解釈しながらオートマトンを実行し、ノードを解釈した際のオートマトンの内部状態を記憶する。この記憶を、本発明においては、ノードに対する状態割当てとして参照する。上述した記述の下では、所定のノードに対する状態割り当てが検索状態の場合に、ノードが検索されたものとされる。本発明で使用する検索オートマトンは、特殊な軸や述語をもった検索式でも判断し、処理を実行することができる。
【0021】
本発明の文書検索システムが含む検索オートマトン評価装置は、木のいくつかの後方ノードから得た状態の組に対して、遷移後の状態を計算するという動作を実行する。検索オートマトン評価装置は、遷移と同時に、検索される可能性のあるノードをメモリに保持させる。検索オートマトンは、所与のノードに検索状態とされることが確定すれば、そのノードをメモリから検索出力として出力させ、出力されたノードを削除することができる。
【0022】
一方、検索オートマトン評価装置は、検索されないことが確定した時点でそのノードの情報をメモリから削除しても、すでに検索状態に遷移したノードは記憶されているので文書検索には不都合を生じない。これは、本発明においては終了状態として検索結果を出力させるのではなく、検索状態を含ませた検索オートマトンを構成させることにより、検索結果を与えることを可能とする機能が与えられるためである。本発明の文書検索システムを採用することによって、メモリ効率が改善されると同時に、木の同じ部分を一回しかたどる必要しかなく、同時に任意の数の論理的に結合された検索式を評価することが可能となる。
【0023】
本発明の上述した機能は、コンピュータに対して検索オートマトンを生成させるコンパイル装置により実現され、本発明における検索オートマトンへのコンパイル装置は、特殊な軸を判断し、読み取られた述語を検索オートマトンの各状態遷移に置換することにより、検索オートマトンを生成する。
【0024】
すなわち、本発明によれば、要素識別子により要素が区切られた階層構造を有する文書を検索する文書検索システムであって、前記文書検索システムは、
入力される検索式を記憶して構文解析を実行し、入力された前記検索式と等価な検索オートマトンであって、2状態の入力を使用する遷移状態テーブルとして前記検索オートマトンを生成し、記憶装置に格納するコンパイル装置と、
前記コンパイル装置により生成された検索オートマトンを記憶する記憶装置と、
前記記憶装置から前記検索オートマトンを読み出して記憶すると共に前記文書を読み込み、前記文書に含まれる前記要素識別子の種類の異なる複数のノードの前記文書の先頭にある前記要素識別子からみて後方のノードの2状態を前記要素識別子に対応して直近の後方ノードを左ノードとして順次状態付け、前記左ノードの後方ノードを下ノードとして状態づけて記憶させ、前記検索オートマトンを使用してストリーム検索を実行し、検索されたノードを出力する検索オートマトン評価装置とを含む文書検索システムが提供される。
【0025】
また、本発明においては、前記検索オートマトン評価装置は、前記左ノードおよび前記下ノードの検索結果を前記状態遷移テーブルを使用して前記検索オートマトンを評価することにより、その時点で判断しているノードの状態遷移を判断することが好ましい。
【0026】
さらに、本発明における前記コンパイル装置は、初期状態と終了状態と検索状態とに対応した状態遷移が登録された検索オートマトンを生成することができる。
【0027】
さらに、本発明によれば、コンピュータに対して要素識別子により要素が区切られた階層構造を有する文書を検索させる文書検索方法であって、前記文書検索方法は、前記コンピュータに対し、
入力される検索式を記憶して構文解析を実行し、入力された前記検索式と等価な検索オートマトンであって、前記検索オートマトンを2状態の入力を使用する遷移状態テーブルとして生成し、記憶装置に格納するステップと、
前記コンパイル装置により生成された検索オートマトンを記憶装置に記憶させるステップと、
前記記憶装置から前記検索オートマトンを読み出して記憶すると共に前記文書を読み込み、前記文書に含まれる前記要素識別子の種類の異なる複数のノードの前記文書の先頭にある前記要素識別子からみて後方のノードの2状態を、前記識別された要素識別子に対応して生成された木構造の左ノードおよび下ノードとして順次状態付けする前記検索オートマトンを使用してストリーム検索を実行するステップと
を実行させる、文書検索方法が提供される。
【0028】
さらに、本発明によれば、前記ストリーム検索を実行するステップは、前記左ノードの後方ノードを下ノードとして状態づけて記憶させ、前記左ノードおよび前記下ノードの検索結果を前記状態遷移テーブルを使用して前記検索オートマトンを評価することにより、その時点で判断しているノードの状態遷移を判断するステップを含むことができる。
【0029】
さらに本発明によれば、前記検索オートマトンを生成するステップは、初期状態と終了状態と検索状態とに対応した状態遷移が登録された検索オートマトンを生成するステップを含むことができる。
【0030】
さらに、本発明によれば、上記いずれか1項に記載の文書検索方法をコンピュータに対して実行させる、コンピュータ実行可能なプログラムが提供される。
【0031】
さらに、本発明によれば、要素識別子により要素が区切られた階層構造を有する文書を検索する文書検索システムであって、前記文書検索システムは、
入力される検索式を記憶して構文解析を実行し、前記要素識別子の種類の異なるノードに対して割り当てられる少なくとも2状態を読み込んで状態遷移を可能とし、前記検索式に等価な状態遷移テーブルとして2状態入力オートマトンを生成するコンパイル装置と、
前記2状態入力オートマトンを記憶する記憶装置と、
前記記憶装置から2状態入力オートマトンを読み出して記憶すると共に前記文書を読み込み、前記要素識別子の種類の異なるノードに対して割り当てられ、かつ前記文書の先頭にある前記要素識別子からみて後方のノードに対する状態を左ノードまたは下ノードとして入力される少なくとも2状態を順次識別して状態遷移を可能とするオートマトン評価装置と
を含む文書検索システムが提供される。
【0032】
さらに、本発明によれば、前記2状態は、前記左ノードが識別された前記要素識別子の直近の後方ノードであり、前記左ノードの後方ノードを下ノードとして状態づけて記憶させ、前記2状態入力オートマトンは前記オートマトン評価装置の3つの状態を遷移させることが好ましい。
【0038】
【発明の実施の形態】
以下本発明を図面に示した実施の形態をもって説明するが、本発明は図面に示した実施の形態に限定されるものではない。また、本発明の理解をより確実に行うために、以下の実施の形態においてはXML文書を、XPath式を使用して検索を実行するXML文書検索システムを用いて説明を行うが、本発明は、要素識別子を含むいかなる階層化文書に対しても適用することができる。
【0039】
A:文書検索システムの概略
図1には、本発明の文書検索システムの概略的な構成を示す。本発明の文書検索システム10は、アプリケーション12によって使用されるAPIとして機能し、アプリケーション12からXPath式などにより記述される検索式を読み出して、検索式を検索オートマトンへとコンパイルするためのコンパイ装置14と、コンパイルされて生成された検索オートマトンを保存しておくための記憶装置16とを含んで構成されている。さらに、本発明の文書検索システム10は、検索オートマトン評価装置18を含んで実装されており、検索オートマトン評価装置18は、アプリケーション12が管理する文書と、記憶装置16に保持された検索オートマトンとを読み出して文書の検索を実行して検索結果を生成し、生成された検索結果を記憶装置20へと記憶させている。記憶された検索結果は、アプリケーション12が読み出しを行うか、検索オートマトン評価装置18が、アプリケーション12へと出力することにより、アプリケーション12において検索結果の利用が可能とされている。
【0040】
本発明の文書検索システムにおいて使用される各装置手段について、XML文書を検索する場合を使用して具体的に説明する。コンパイル装置14は、アプリケーション12が指定したXPath式を読み込んで、例えば図示しないパーサを使用して入力XPath式の構文解析を実行し、XPath式に含まれる軸、述語、各述語の論理積、論理和、論理否定をオートマトンとして登録するべき状態遷移へと変換する。検索オートマトンは、変換された各ノードの状態、遷移条件、遷移の種類、到達状態からテーブルとして構成され、生成された検索オートマトンは、ハードディスクといった記憶装置16へと記録される。
【0041】
記憶装置16は、ハードディスク、フラッシュメモリなどの書き換え可能な記憶媒体を含んで構成されていて、生成された検索オートマトンを保持している。この記憶装置16に保持された検索オートマトンは、後述する検索オートマトン評価装置へと渡されて、検索オートマトン評価装置による文書の検索が可能とされている。
【0042】
本発明の検索オートマトン評価装置18は、状態機械として機能し、検索オートマトンと検索を実行するためのXML文書とを読み込み、構文解析を実行し、XML文書の評価を実行する。検索オートマトン評価装置18は、記憶装置16に保持された検索オートマトンを使用して、XML文書を検索し、検索されたXML文書のノードを記憶装置20へと格納し、アプリケーション12へと渡している。検索オートマトン評価装置18は、XPath式で指定されるXML文書においてXpath式で指定されるノードが検索されると検索状態へと遷移する。遷移が生じた時点で評価を行っているノードは、記憶装置20へと記録され、出力されるまで保持される。
【0043】
図2は、本発明の文書検索システムにおける状態遷移を示した図である。同時に図2においては、検索状態および終了状態において文書検索システムが実行する処理を示している。図2に示されるように、本発明の文書検索システムは、初期状態I、終了状態F、および検索状態「*」の3つの状態の間で状態遷移を行う。XPath式が入力され、検索が開始すると、初期状態Iは、終了状態Fまたは検索状態*へと遷移し、その状態を変化させる。検索状態*では、検索状態Fへの遷移を生じさせたノードを記憶手段へと記憶させ、本発明の特定の実施の形態では、終了状態Fへと遷移するまでの間に検出されたノードを記憶手段に蓄積させる。終了状態Fでは、蓄積された検索されたノードをアプリケーションへと渡し、アプリケーションからの検索要求に対する出力処理を実行する。
【0044】
B:文書検索システムを構成する装置・ソフトウエア手段
以下、本発明の文書検索システムを構成する図1において説明した各構成装置についてより詳細に説明する。
1.検索オートマトン
本発明においては、検索オートマトンは、アプリケーションにより入力されたXPath式をコンパイルして、各ノードの状態、遷移条件、遷移の種類、到達状態からテーブル構造として構成され、状態遷移を表現するエントリ(以下、状態遷移)の集まりから構成される。状態遷移は、後方ノードに関する複数の状態の組から前方ノードに関する状態への遷移を表現する。通常XML文書のような木構造のノードに対しては、「親」、「子」などの用語を使用してその階層構造を表現するのが通常である。本発明においては木構造をストリーム(ノードの列)としてとらえるので「前方」、「後方」という概念で記述する。本発明において後方ノードとは、XML文書を先頭から見たときに閉じタグで閉じられたノードを意味し、それ以前のノードを前方ノードとして定義する。
【0045】
図3には、本発明において使用することができるXML文書の具体的な実施の形態を示す。図3に示されるように、通常のXML文書は、開きタグと閉じタグとから構成される。本発明において開きタグとは<html>で示されるタグを、閉じタグとは、具体的には</html>のようなタグを意味する。開きタグと閉じタグはその間にある内容を子供とする木構造を作るものとして捉えることができる。
【0046】
本発明において図3に示すbodyタグが閉じられた場合、titleノード、headノード, div ノード、二つのpノードは、すべてbodyノードの後方ノードとして定義される。図4は、図3に示したXML文書を木構造として示した図である。
【0047】
本発明の定義によれば、図4では、bodyノードの後方ノードは、(1)body ノードの弟であるheadノードおよびその後方ノード、(2)bodyノードの下にあるdivとp、および図示しないその後方ノードとなる。divノードは、pノードの後方ノードとして定義される。本発明の定義に基づき、bodyノードにとって直近の後方ノードとは、headノードと、二つ目のpノードとされる。これらのノードを、さらに本発明においては、それぞれbodyノードの左ノードおよび下ノードとして参照する。
【0048】
図5には、本発明の実施の形態として、本発明により生成される左ノード、下ノードから、現在判断しているノードへの状態遷移の集まりからなる検索オートマトンの実施の形態を示す。図5に示した検索オートマトンは、//pで与えられるXPath式についてコンパイル装置により生成される検索オートマトンを示しているにすぎず、本発明者らは、後述するコンパイル方法により生成することができるいかなる検索オートマトンであっても発明の範囲に含まれるものと考えている。図5に示すように、本発明において生成される検索オートマトンは、到達状態と、遷移の種類と、遷移条件と上述した左ノードおよび下ノードの状態とが対として登録されている。なお、.//pで与えられるXPath式の意味は、「どこかに存在するpノードをすべて検索しろ」という指令である。また、図5に示した検索オートマトンは、pが成立しないノード、すなわちタグ名がpではないノードに対して検索状態ではない状態0を割り当てる構成とされている。また、図4および以下に説明する検索オートマトンでは、Iが付された0、1は初期状態であり、Fが付された0、1は、終了状態を示し、「*」が検索状態を表す。
【0049】
図5で示した本発明において生成される検索オートマトンは、一つの状態遷移が上側の行に対応して生成される。この遷移は、左ノードの状態と、下ノードの状態とが入力として与えられた場合の到達状態として示されている。図5を使用してさらに本発明により生成される検索オートマトンの状態遷移を説明すると、図5のテーブルの上側の行では、左ノードと、下ノードの状態として0,1という状態が指定されている。これは、左ノードが0または1であり、下ノードが0または1という状態を取り得る場合に、その時点で評価を行っているノードへの到達状態が0になりうることを意味している。なお、¬pは、左ノードまたは下ノードまたはその時点で判断しているノードの状態がpではないときに状態遷移を生じさせる演算子である。すなわち、図5に示した上側の行で指定される状態遷移では、左ノードおよび下ノードの両方がpではない場合に状態遷移が生じることを意味する。さらに、図5に示した検索オートマトンは、左ノードおよび下ノードの状態を使用して、その時点で判断しているノードの状態遷移を生じさせることを意味している。
【0050】
また、図5の検索オートマトンにおける下側の行で特定される状態遷移は、左ノードおよび下ノードがpまたはpでないかの状態を取り得、遷移条件anyは、どのようなノードの名前に対しても遷移が生じることを示す演算子である。したがって、下ノードの状態または左ノードの状態がpを含むか否か、またその時点で評価しているノードがpであるかに応じて検索状態「*」、初期状態I、終了状態Fという状態が生成される。
【0051】
図6は、本発明による検索オートマトンの他の実施の形態を示した図である。図6(a)に示した検索オートマトンの実施の形態は、//p[not(ancestor::div)]で与えられるXPath式、すなわち従来の表現では「pノードであって上流側にdivノードがないもの」を検索する検索式を受けて、コンパイル装置により生成されるストリーム検索のための検索オートマトンである。図6(a)に示した検索オートマトンは、pが成立しない、タグ名がpでないノードに対しては検索状態でない状態0を割り当て、かつdivの子孫ノード(divから見てdescendant軸に対応するノード)にもやはり検索状態ではない状態2を割り当てるような動作を実行するオートマトンである。すなわち、タグ名がpでないか、またはdivの子孫ノードではない(=divを祖先に持つ)ノードは検索されず、//p[not(ancestor::div)]に対応するノードのみが検索される。本発明において、検索オートマトンがXPath式、//p[not(ancestor::div)]の評価を可能とするのは、本発明が左ノードからの情報と、下ノードからの情報とを同時に状態遷移に使用することにある。すなわち、本発明では、横方向の情報と上下方向の情報とを同時に状態遷移に使用することにより、ノードの兄弟関係に関する軸を検索条件に含めることを可能とする。したがって、従来のXPath式の検索を実行するためのストリーム検索においては評価することができなかったfollowing-sibling、preceding-siblingなどを充分に取り扱うことが可能となる。
【0052】
検索オートマトンについては、これまでNeven(F. Neven, Design and Analysis of Query Languages for Structured Documents, PhD Thesis, Limburgs Universitair Centrum, 1999)などにより提案されているものの、Nevenの方法は、検索オートマトンの性質などを調べたものであり、検索オートマトンのストリームベースでの文書検索システムへの適用性およびその具体的構成については何ら示唆するものではなく、本発明の2状態の入力を同時に状態遷移に含ませ、検索状態を定義する構成については何ら示唆するものではない。
【0053】
さらに、本発明の検索オートマトンを採用することにより、従来技術では不可能だった連言的な、XPath式、例えば//d[.//div and .//p]、を検索式として使用することが可能となる。図6(b)に示した検索オートマトンは、子孫および自分自身がdivでない、または子孫および自分自身がpではないようなすべてのノードに検索状態ではない0を割り当てるような動作をするオートマトンである。すなわち、子孫にdivを持たないノードおよび子孫のpを持たないノードは検索されず、//d[.//div and .//p]に対応するノードのみが検索される。いずれの場合でも本発明は、上述した検索オートマトンに対して後方ノードの種類を判断し、その状態を検索オートマトンによる状態遷移に含ませることにより、新たな検索状態「*」を定義することを可能とする。すなわち、本発明は開きタグと、閉じタグとの間の関係を評価に含ませることで、(1)現在のノードの開きタグの直前の状態、(2)現在のノードの下側ノードの状態の組を状態遷移に使用することが可能となるためである。さらに一般的に言えば、「複数の後方ノードの位置づけを判断し、後方ノードに関連する複数の状態を使用して、現在のノードの状態を計算する」という本発明の本質的な構成に基づくものである。
【0054】
図7は、上述した本発明の本質的原理を、連言的なXPath式、//d[.//div and .//p])の評価に適用した場合の検索パスを示すことにより説明した図である。図7に示すように、とあるdノードの下にdivノードとpノードとが両方存在することを検索したい場合について考察する。図7では、divノードとpノードとは、それぞれ別の部分木A、Bに属しているものとする。図7に示した実施の形態において、dノードの下にdivノードとpノードとが両方存在するという情報を得るためには、木A、木Bのどちらかで[.//div]が成立し、かつ他方の木では、[.//p] が成立する、いわゆる連言(and)を調べる必要がある。木Aと木Bとから得た情報を組み合わせてdノードに伝播するということは、XPathのストリーム検索に関する従来技術でも実行されていたが、その場合であってもストリーム検索において、木構造に即して評価を実行するために、[.//div]が存在するかまたは[.//p]が存在する(選言:or)というような2つの条件のどちらかが成立することが独立して伝播されるものでしかない。本発明では、複数の後方ノードの状態のを組み合わせ、その組み合わせが状態遷移のエントリにマッチしていた場合に遷移を生じさせる構成を採用するので、いずれかの後方ノードで成立すべき条件(選言的条件:disjucntive condition)の評価結果もすべての後方ノードで成立すべき条件(連言的条件:conjunctive condition)の評価結果でも、区別せずともに前方ノードに渡すことが可能となる。
【0055】
2.検索オートマトン評価装置
上述したように、検索オートマトンとは、本発明においては検索オートマトン評価装置の状態を検索状態とする。検索オートマトン評価装置は、入力ストリームを使用して検索オートマトンの評価を実行しながら、入力ストリームを解釈して得られた各ノードの状態に応答して、入力ストリームを解釈した際の検索オートマトン評価装置の内部状態を一時的に記憶する。検索オートマトン評価装置は、記憶された内部状態を左ノードおよび下ノードとに分類して判断を実行・記憶し、遷移先の内部状態が検索状態としてラベルし、XPath式に適合するノードが検索された場合に、当該ノードを記憶装置20へと記憶させる構成とされている。
【0056】
図8には、上述した機能を実現する本発明の検索オートマトン評価装置18の詳細な機能ブロック図を示す。本発明の検索オートマトン評価装置18は、概ね検索オートマトン保持部22と、入力ストリームを一時的に格納するためのストリーム格納部24と、ストリーム格納部24に格納された入力ストリームを読み出して構文解析を行うパーサ26と、検索オートマトン保持部22に保持されたテーブルと、パーサ26により得られた各タグとを使用して、検索オートマトンの評価を実行する評価部28とを含んで構成されている。
【0057】
評価部28は、入力ストリームから閉じタグか開きタグかの要素識別子を識別して、後方ノードを特定し、特定された後方ノードの状態を検索オートマトンを使用して判断し、その結果を使用して検索状態「*」を含む状態遷移を生じさせる。評価部28は、検索状態へと遷移したことを判断した場合には、一時的にその状態および状態遷移を生じさせたノードをメモリ30へと記憶させ、遅延なく入力ストリームから得られる次のタグの評価を実行する。メモリ30に出力された検索ノードは、記憶装置20へと出力され、入力ストリームのすべての評価が終了するまで、検索状態とされたノードを蓄積する構成とされている。また、本発明における他の態様では記憶装置20を検索オートマトン評価装置18に設けるのではなく、図1に示したアプリケーション12に配置することもできる。しかしながら本発明は、アプリケーション12自体を要旨とするものではないので、上述した他の態様については、詳細な説明を行わない。入力ストリームの評価が終了した時点で、蓄積されたノード集合のデータは、アプリケーション12へと、アプリケーション12が入力したXPath式に対する検索結果として渡される。
【0058】
すなわち、本発明の検索オートマトン評価装置は、1.入力ストリームと、2.検索オートマトンとを入力として受け取る構成とされている。従来技術においても同種の評価装置が提案されているものの、本発明で採用する2入力を使用し、検索状態を含んで構成される検索オートマトンを評価する構成を採用するものではない。
【0059】
図9には、本発明の検索オートマトン評価装置が実行する検索オートマトン評価方法の概略的なフローチャートを示す。図9に示すように、本発明の検索オートマトン評価装置が実行する方法は、ステップS10において、入力ストリームからタグを読み出し、タグのうちの閉じタグおよび開きタグとを判断する。ステップS12においては、得られたタグデータから前方ノードおよび後方ノードを判断する。ステップS14では、左ノードおよび下ノードをさらに判断し、ステップS16においては、左ノードおよび下ノードを使用して検索オートマトンにより評価を実行し、それぞれ対応する状態遷移を生じさせる。具体的には、その時点で評価を行っている開きタグの直前の状態と、その時点で評価を行っている下ノードの状態を読み出してその時点で評価しているノードの状態遷移を算出する。
【0060】
ステップS18では、状態遷移が検索状態であれば、その時点で評価を行っているノードが検索されたものとして、メモリにノードを検索状態と共に登録し、評価部28からそれまでのノードデータを消去する。ステップS20では、検索状態へと遷移したソードが見出される毎にメモリに登録する。ステップS22では、入力ストリームをすべて処理したか否かを、例えば、</html>タグを検出することなどにより判断する。入力ストリームをすべて判断した場合(yes)には、ステップS24へと進んで、検索されたノードを、出力して処理を終了する。この場合、対として登録した検索状態を、ノードの木構造における相対または絶対的な位置情報と共に出力することもできる。入力ストリームをすべて評価していない場合(no)には、ステップS12へと戻って評価を繰り返す。図10には、本発明の評価方法において検索結果を逐次出力を実行する実施の形態を示す。図10に示した本発明の他の実施の形態では、メモリに検索状態に遷移したノードを蓄積するのではなく、検索状態に遷移したノードを、ステップS40で逐次出力する構成を採用する。
【0061】
本発明の方法では、左ノードおよび下ノードといった複数の状態の組を使用して前方ノードにおける遷移を生じさせる。本発明において入力状態として使用することができる複数の状態の組は、特に制限はなく、従来のXPath式の評価方法においては困難であった、たとえば、.//divが成立し、しかも.//pが成立するというような、ふたつの条件の組み合わせを判断することができる。以下、より具体的に本発明の検索オートマトン評価装置の動作について、もっとも単純な、.//pの検索についての処理ステップを具体的に説明する。以下に説明する実施の形態では、入力ストリームを<html>aa</html>とし、.//pに対応する検索オートマトン(図5)を用いて、ストリーム検索を行う。検索オートマトン評価装置における実行ステップは以下のようになる。<html>の左には何のタグもないので、開きタグの直前の状態は初期状態0、1である。の左にも、後方ノードは存在しなかったので、開きタグの直前の状態は初期状態0、1である。一方で、開きタグの下には、テキストaaが存在し、この状態では、テキストノードの状態は、まだ初期状態0、1である。
【0062】
が検索オートマトン評価装置により検出されると、検索オートマトン評価装置は、それまで評価を実行した開きタグの状態を記憶しているので、pノードの左ノードの状態、すなわち開きタグの直前の状態も、下ノードの状態も0、1となりうる状態であることがわかる。このときには、遷移条件¬pは満たされないが、遷移条件anyは満たされるので、図5の検索オートマトンの2行目の状態遷移を適用して、到達状態1に遷移する。このときの到達状態1は、検索状態「*」なので、pノードが検索されたことをメモリへと出力する。
【0063】
さらに、</html>が検索オートマトン評価装置に入力された時点でhtmlノードの左ノードの状態が0、1であること、および下ノードの状態が1であることをメモリから読み出し、htmlノードは、遷移条件¬pと遷移条件anyのどちらも満たし、状態0と1という到達状態に遷移する。一方、このhtmlノードは、到達状態1となっても検索状態に遷移させず、単に終了状態なので、到達したすべての状態で検索されているノードのみが出力される。上述した処理によりpノードのみが出力される。
【0064】
なお、上述した説明における特定の実施の形態においては、検索オートマトンが「到達したすべての状態で検索されているノードのみを出力する」が、本発明では、後述するように「到達した状態のどれかのノードで検索されているノードのみを出力する」という検索オートマトンも可能である。
【0065】
3.検索オートマトン生成のためのコンパイル装置
本発明における検索オートマトンへのコンパイル装置は、入力されたXPath式と等価な検索オートマトン(query automaton)を表現する、遷移状態テーブルを生成し、記憶装置16に記憶させる機能を有する。図11には、本発明の検索オートマトンを生成するためのコンパイル装置の詳細な機能ブロック図を示す。図11に示された検索オートマトン生成のためのコンパイル装置は、パーサ32と、パーサ32において生成された構文および各種の論理とを保持するメモリ34と、メモリ34に記憶されたデータを読み出して、検索オートマトンに含ませる状態の組み合わせを生成するための検索オートマトン生成部36とを含んで構成されている。検索オートマトン生成部36は、生成された検索オートマトンを適切な形式で、記憶装置16へと出力させている。
【0066】
本発明の検索オートマトンへのコンパイル装置は、入力されたXPath式に対して、以下に記載する置換を、意味の等価性を保ちつつ実行し、最終的に検索オートマトンの遷移と見なせる形式となった場合に、オートマトンの遷移として記憶手段に記憶させる。
(1)XPathにおける、軸であるchild, descendantで例示されるような順方向の軸の状態遷移への置換。
(2)XPathにおける、軸であるparent, ancestorで例示されるような逆方向の軸の状態遷移への置換。
(3)XPathの兄弟方向(following-sibling, preceding-sibling)の軸の状態遷移への置換。
(4)XPathの述語の状態遷移への置換。
(5)XPathの述語の論理積(and)の状態遷移への置換。
(6)XPathの述語の論理和(or)の状態遷移への置換。
(7)XPathの述語の論理否定(not)の状態遷移への置換。
【0067】
以下、さらに詳細に本発明のコンパイル装置が実行する処理プロセスを説明する。図12には、本発明のコンパイル装置が実行するコンパイル方法のフローチャートを示す。本発明のコンパイル方法は、ステップS50においてXPath式またはそれに若干の拡張を加えた検索式(以下、一般的に式として参照する。)を、オートマトンにおける状態として登録する。ステップS52において、式をコンパイル装置が処理しやすい形式、例えばBTLP式へと書き換えを行い、登録する。ステップS54において、書き換えの結果、オートマトンの遷移とみなせる形式が生成されたか否かを判断し、遷移と見なせる形式が生成された場合(yes)には、ステップS56でXPath式における遷移に対応させて記憶させる。ステップS58では、式のすべてを変換したか否かを判断する。ステップS58における判断において、すべての式が判断された場合(yes)には、式のすべての要素がオートマトンの遷移に対応するように翻訳されているので、ステップS58において処理を終了させる。また、すべての式が判断されていない場合(no)には、ステップS52へと戻って、再度書き換えを実行させ、式のすべての要素がオートマトンの遷移に対応して翻訳されるまで反復して変換を実行させる。
【0068】
本発明においていわゆる「式(expression)」は、計算機の中では木構造を用いて表現することができる。式の書き換えをくりかえし、オートマトンを構築する手法は、たとえば、Gerth, D. Peled, M. Y. Vardi, and P. Wolper、“ Simple on-the-fly automatic verification of linear temporal logic.”、Protocol Specification Testing and Verification, pages 3 -18, 1995に開示されたアルゴリズムなどが知られている。上述した検索オートマトン評価装置および検索オートマトンを生成するためのコンパイル装置は、コンピュータにおいてプログラムとして実装されることにより、それぞれの機能を実現するようにコンピュータを機能させる。以下、擬似コードを使用して、コンピュータに実装された場合の本発明のオートマトン評価装置、およびコンパイル装置の処理を詳細に説明する。
【0069】
C:検索オートマトン評価装置、検索オートマトンおよびコンパイル装置の実装以下、本発明の検索オートマトン評価装置の実装について、擬似コードと、その擬似コードにより実行される処理を用いて説明する。本発明は、XPath式などを含む一般的な「検索式」としてBTLP式を用いて表現し、かつ以下の実施の形態の説明においては、記法・用語について、以下に示した定義を使用するものとする。
【0070】
値: 以下で説明する擬似コードおよび値は、下記の定義に従う。
<XML/XMLストリーム>
BTLP式その他BNF構文で定義された「検索式」および文書を意味する。なお、BTLP式については、後述するBNF構文によって定義する。
【0071】
BTLP式を含め、BNF構文で定義された式は、すべて計算機の中で木構造を用いて表現することができる。ふたつの式が等しい(=)とは、式が構文的に等しいか、または木構造が構造として等しいということを意味する。
【0072】
<整数型の値>
オートマトンの状態は、対応する状態に識別符号、例えば図5に示した1〜3などの符号を付し、符号として数字を使用する場合には整数値の集まりとして計算機上に実現される。また、それ以外の式などの値にその構文的な等価性に応じて、ハッシュテーブルを用いて識別番号を与え、これを整数値で代表させて計算機上に記録することもできる。これらは、いかなる組み合わせで登録して使用することができる。
【0073】
擬似コード:疑似コードにおける演算、命令の定義:
<集合演算 ∪ ∩ \ >
それぞれ集合の和、積、差分を意味する。また、本発明における集合は、有限であるものとする。計算機において有限集合を表現し, 集合演算を実施する方法は、順序つきリスト、ハッシュテーブル、 ビット集合などさまざまの構成を使用することができることが知られており、本発明においては、これまで知られたいかなる実装方法でも使用することができる。
【0074】
述語論理: ∀, ∃, ⇒, ∧, ∨, ¬
本実施例の擬似コードでは、集合の内延的記法の条件記述および if文の条件記述のために述語論理を使用する。
【0075】
全称限量子 (unversal quantifier) ∀ は、∀x. P(x) のように用いられ、xは束縛変数であり、Pは任意の述語を意味する。コンピュータでこれを評価するためには、ループによってxがとりうる値の範囲をすべて調べ、P(x) がすべてのxで成立するかどうかを調べる処理に対応する。
【0076】
存在束縛子 (existential quantifier) ∃ は、∃ x. P(x) のように用いられ、xとPとは、全称限量子と同じ意味を有する。コンピュータでこれを評価するためには、ループによってxがとりうる値の範囲をすべて調べ、P(x) がいずれかのxで成立するかどうかを調べる処理に対応する。また、本発明においては、全称限量子 ∀ および存在限量子 ∃ で束縛される変数のとりうる値の範囲は有限であるものとする。
【0077】
∧, ∨, ¬, ⇒ は、それぞれ連言、選言、否定、含意を意味する。P∧Qは、PとQとがともに成立するか否かを判断する。P∨Qは、PとQのどちらかが成立するかを判断する。¬Pは、Pが成立しないか否かを判断する。P⇒Qは、Pが成立しないか、またはQが成立するか否かを判断する。
【0078】
外延的記法 { x1,..., xn}および内包的記法 { f(x1,..., xn) | P(x1,...,xn)}:
外延的記法は、束縛変数の集合を羅列的に記述するものであり、内包的記法は、まず束縛変数 x1,..., xnのとりうるすべてての値の組を多重ループを用いて判断し、各組に対して P(x1, ..., xn) が成立するかどうか判定する。成立するならば、f(x1, ..., xn) を評価して値を得、得た値を結果集合に加える。という手順で有限集合の内部表現として記憶させることが可能となる。
【0079】
組 <>:
組とは、いくつかの要素からなる集まりを意味する。要素の型は異なっていてよく、<1, "string">や<2, "abc"> は、組を意味する。組は、CのstructやJava(登録商標)のクラスといった構造で実現することができる。
【0080】
直積×:
直積とは、 集合の間の演算を意味し、{1, 2}x{"string", "abc"}={<1, "string">, <1, "abc">, <2, "string">, <2, "abc">} などように両方の集合から読み出した値の組すべてからなる集合をかえす演算である。直積A×Bは、2重のループ構造によってAとBとの各要素を並べ上げ、各要素の組を生成して、登録し、それを結果集合に加えることにより生成することができる。
【0081】
proc宣言とreturn文:
以下に説明する本発明の実施の形態では、擬似コードはすべて再帰呼び出しを持つ手続きの定義を使用する。proc宣言は、手続きの宣言と引数の定義を行う。return文は、返り値を返す。これらの機構は、既存のCやJava(登録商標)などのプログラミング言語を用いることで実現することができる。
【0082】
case文:case文は、BNF構文などで定義された式に対するパターンマッチを行う。例えば、nを整数値として、
で表現される式aは、0, (0-2)+1など、多数挙げることができる。case文によるパターンマッチとは、式aを受け取り、
などのように、式の形によって分岐処理を実行する。上述した場合には、aがb + cの形式、例えば(0-2)+1などであれば、b = (0-2), c = 1 というような代入を行い、その後 .... の部分を実行する。aが(b)の形をした(0-2)である場合には、b = 0-2として ... の部分を実行する。マッチするものがない場合には、otherwiseの部分を実行する。case文のような機構は、例えばSML/NJ(http://cmcell-labs.com.cm/cs/what/smlnj/)などに開示のMLといった関数型言語にはすでに存在するが、他の言語を使って、同様の機能を実現することができる。
【0083】
for 文:
通常のプログラム言語の for 文である。
if 文:
通常のプログラム言語の if 文である。
代入文=:
通常のプログラム言語の代入文である。
【0084】
不動点計算:本発明において後述する実施の形態における「検索オートマトンへのコンパイル」の方法は、不動点計算アルゴリズムである。不動点計算とは、集合を監視しながらループ計算を行い、集合の要素がこれ以上ふえなくなった時点で計算が終了するアルゴリズムを意味する。集合の内容に変化がなくなったことを知るためには、ひとつの集合のなかに等価な2つの要素が入っていてはならない。このことは値が式である場合は特に重要である。計算機は、式の集合よりも整数値の集合の方が取り扱いやすいので、ハッシュテーブルを用いて式に対して一意に識別番号を付し、式の集合を直接計算機で表現せずに識別番号の集合を用いて式の集合とみなす手法も用いることができる。
【0085】
上述した定義を用いて、本発明の検索オートマトン評価装置としてコンピュータにおいて実装できる擬似コードを、図13に示す。図13の擬似コードにより示されるように、検索オートマトン評価装置は、再帰呼び出し関数evalを使用して実現することができる。関数evalは、XMLストリームvを入力として受け取り、処理を行う。また検索オートマトンは、図13の擬似コードにおいては、<Q,δ, I, F, Θ>として与えられ、検索オートマトンは、大域変数として使用される。
【0086】
1.検索オートマトン評価装置の実装
以下、図9のフローチャートに示した処理に沿って、擬似コードをもって本発明の検索オートマトン評価装置の処理を説明する。
(a)「ストリームからタグを読み込む」および「ストリームをすべて読み終えるまで反復する」処理:これらの処理が擬似コードによってどのように実現されるかについて説明する。以下に説明する検索オートマトン評価装置には、図14に示されるXML文書が入力され、入力されたXML文書が、パターンマッチによって解析される。検索オートマトン評価装置が図14に示された入力ストリームを読み込む場合について検討する。この場合パターン、
【0087】
u <σ> v </σ>
に合致する。このパターンにおいて、u、v、σは、変数である。上記のパターンに入力ストリームが合致する場合には、
【0088】
u = <head><title>Sample</title></head>
v = A paragraph
<div>A paragraph in div
</div>
σ= html
各変数に対応する部分ストリームとして処理を実行する。上記式中、変数uは、htmlノードから見たときの左ノードであり、変数vは、下ノードに対応する。
また例えば、
【0089】
<head><title>Sample</title></head>
を上記のパターンにマッチさせることもできる。 この場合は、
【0090】
u = ""
v = <title>Sample</title>
σ= head
となる。上記式中、""は、空文字列を示す。空白文字を使用する理由は、headタグの前に要素が存在しないためである。
【0091】
擬似コードにおける2〜6行目では、パターンマッチの繰り返しによって入力ストリームを分解し、読み込んでゆく動作を実行する。具体的には、関数 eval に与えられたストリームvは、3行目のパターンマッチによってuとwとに分解され、その後さらに再帰的にevalによっる評価が実行される。一方で、入力ストリームが文字列s(たとえば""あるいは"Sample")にまで分解された場合には、擬似コード4行目のパターンにマッチするものとしている。
【0092】
擬似コードの3行目の評価において、eval(u)を計算する場合には、入力ストリームから、下ノードwの部分は読み込まれていなくてよい。また、eval(w)を計算する場合には、左ノードuの情報を捨ててしまうこともできる。上述した処理により、関数evalは、入力ストリームを一度左から右へと評価して行くだけで、メモリ効率よく処理を終了することができる。
【0093】
(b)「開きタグあるいは閉じタグの情報を使って状態遷移を行う」処理:この処理が擬似コードによってどのように実現されるかを以下に具体的に説明する。
関数evalは、検索オートマトン<Q, δ, I, F, Θ>を大域変数として利用する。集合Qは、状態集合であり、集合Iは、初期状態集合であり、集合Fは、終了状態集合であり、集合Θは、検索状態集合であり、δは、遷移関数である。
例えば、図5に示したXPath式、.//p[not(ancestor::div)]に対応する検索オートマトンは、擬似コード上では、下記式の大域変数として表現される。まず各状態集合は下記式で与えられる。
【0094】
Q = {0, 1, 2, 3}
I = {0, 1, 2}
F = {0, 1, 3}
Θ= {1,3}
上記式中、Qは、すべての状態集合であり、I、F、Θは、それぞれ、I、F、「*」の種類の状態からなる集合である。遷移関数δは、タグ名σ、左ノードの状態q1、 下ノードの状態q2を引数として受け取り、検索オートマトンのテーブルを検索し、遷移先の状態の集合を返す関数である。関数δは、たとえば
【0095】
δ(body, 0, 0) = { 0, 1 }
δ(p, 0, 1) = { 1 }
などとして、評価を行い、評価の値を返す。すなわち、bodyタグを遷移条件が許し、左ノードも下ノードも状態0というテーブルのエントリは、検索オートマトンの1行目と2行目にあり、その到達状態の値に対して、それぞれ0と1と返している。また、pタグを遷移条件が許し、左ノードが状態0、右ノードが状態1であるというテーブルのエントリは、 検索オートマトンの2行目にあることを検索し、到達状態1の値を返している。
【0096】
上述した検索オートマトン評価のステップは、関数evalの3、4行目における状態遷移δ(σ, q’, q”)の計算に対応する。ここで、q’は、左ノードuに対するeval(u)の実行結果を示し、q”は、下ノードwに対するeval(w)の実行結果である。タグ名σは、上述したパターンマッチによって取り出されたその時点で評価をしているノードのタグ名である。
【0097】
(c)「遷移した状態が検索状態であれば, その状態が現在のノードを検索したことを記憶しておく」処理および「遷移に際して, それまでに検索されたことが記憶されているノードは遷移先の状態に記憶しておく」処理:これらの処理は、関数evalの6、7、8行目に対応する。以下、上述した両方の処理をまとめて説明する。
【0098】
疑似コードにあらわれる変数Ξは、関数evalの結果を格納する変数である。関数evalの結果は、各状態に対し、その状態によって選択されたノードを記憶させておくために用いられる。まず、これは6行目のfor文によって、現在の結果変数Ξを読み出し、7行目のif文でそこに検索状態q(∈Θ)が含まれている場合には、現在のノードvを加えた{<q, V ∪ {v}>}を新たに結果変数Ξに追加登録することにより実現される。たとえば、関数evalが入力の部分ストリームとしてv= A paragraph
を読み込んだとする。このとき、結果変数Ξが<1, {}>という状態と、検索ノードの組を含んでいたとする。すなわち、それまで状態1では何のノードも検索されていなかったが、1は検索状態である(1∈Θ)ので7行目を実行することにより新たに< 1, {A paragraph
}>という組が結果変数Ξに加えられる。
【0099】
次に擬似コードの処理においては説明が前後するものの、以下に「遷移に際して、それまでに検索されたことが記憶されているノードは遷移先の状態に記憶しておく」処理を説明する。擬似コードの3、4行目の動作、すなわちある状態qが与えられたとき、左ノードuおよび下ノードwに対し、各<q’, x> ∈ eval(u) と <q”, x> ∈ eval(w) に出現するq’、q”で、δ(σ, q’, q”) = q であるような、すべてのq’とq”とについて、下記式の条件を満たすノードxの集合を求めるという操作である。
【0100】
(条件) ∃V. x ∈V ∧ (<q', V> ∈eval(u) ∨ <q'', V> ∈eval(w))
上記式は、qに至るどの遷移元においても検索されるノードxの集合を返す処理を意味する。得られたxの集合と状態qとの組は、結果集合Ξに加えられる。さらに5行目では、vがεの場合には、各初期状態と空集合の組をΞに加える。より具体的に説明すると、入力ストリームとして、
【0101】
v = A paragraph
<div>A paragraph in div
</div>
を読み込んだ場合、σ= divであり、左ノードu=A paragraph
のまた下ノードw=A paragraph in div
に対する評価結果がそれぞれ、下記式
【0102】
eval(u) = {<1, {A paragraph
}>, <2, {}>}
eval(w) = {<1, {A paragraph in div
}, <2, {}>}
であったとする。このとき、δによる遷移には下記式の3つの組みあわせが考えられる。
【0103】
δ(div, 1, 1) = {0, 1}
δ(div, 1, 2) = {0}
δ(div, 2, 2) = {2}
ここで、q=1に遷移するためには、図5に示した上側の行の遷移を使うしかないことになる。すなわちq’=1、q”=1の場合しかありえない。このとき、q=1に対して、 ∃V. x ∈V ∧ (<q’, V> ∈eval(u) ∨ <q”, V> ∈eval(w))を満たすxとは、 A paragraph
あるいは A paragraph in div
の双方となる。また、q=2に遷移するためには、q’=2、q”=2の場合しかありえないものの、条件 ∃V. x ∈V ∧ (<q’, V> ∈eval(u) ∨ <q”, V> ∈eval(w))を満たすxは存在しない。
【0104】
一方、q=0に遷移するためには、1行目と2行目の両方を使うことができる。
すなわち、 ∀q’, q”. <q’, x> ∈eval(u) ∨ <q”, x> ∈eval(w)を満たすxは、A paragraph
のみである。なぜならばq’=1、q”=2の場合にx=A paragraph in div
は、条件を満たさないためである。 より詳細に言えば、<2, {}> ∈ eval(w)
から得られる V = {}が、xを含んでいないためである。結果として、
【0105】
Ξ = {<0, {A paragraph
}>, <1, {A paragraph
, A paragraph in div
}>, <2, {}>}
が得られる。
【0106】
本発明では、上述したように、たとえば状態0に至る遷移元すなわち、q’=1、 qq”=1、またはq”=1、q”= 2のどちらを用いても選択されるノードのみを選択する検索オートマトンを用いている。上述したように、関数evalが結果集合Ξに対して、それぞれ状態と検索されたノード集合との組の集合が求められることが示される。なお、「各状態に記憶された検索されたノードを出力する」処理は、下記式の擬似コードにより得られるノード集合を出力することで実行することができる。
【0107】
{ x | ∀q. q ∈ F ∧ <q, V> ∈ eval(v) ⇒ x ∈ V }
上記式で示される処理は、終了状態と組とされたどのノード集合にも検索されているxのみを、検索されたとして出力する動作である。
【0108】
以下に、本発明の理解を容易にするべく、図6(a)で示した検索オートマトンを、図14に示した入力ストリームを使用して評価を行う場合の関数evalの返り値の実施の形態を図示することにより、関数evalの機能を説明する。
(i)まず文字列 "Sample" (あるいは "A paragraph", "A paragraph in div", ""など)を関数evalに入力した場合、eval(ε) = {<0, {}>, <2,{}>}が得られる。図15には、関数evalの上述した機能により生成される返り値の実施の形態を示す。図15は、"Sample"を関数evalが読み込んで、状態0、2に遷移したものの、何も検索されなかったことを示す。
【0109】
(ii)次に <title>Sample</title> に対する関数evalの処理を図16に示す。図16は、状態0、1、2に遷移し、状態1でtitleノードが検索されたことを示している。このため図16は、<0, {}>, <1,{<title>Sample</title>}>, <2, {}> という3つの組からなる結果を示すものである。図16の結果が返されるのは、左ノード""からの入力状態0と、下ノード"Sample"からの入力状態0とから、検索状態1への遷移が生じたためである。<head><title>Sample</title></head>に対しては、図17に示した結果が返される。
【0110】
(iii)図18は、さらに右のbody木に移り、計算を続行した場合のA paragraph、またはA paragraph in div
)に対して生成される結果を示す。図18に示した結果は、<1, {A paragraph}>, <2, {}> という組からなり、状態0に対しては、¬pという遷移条件のために遷移することができない。しかしながら、A paragraph
<div>A paragraph in div
</div>に対しては、図19に示されるように、{<0, {A paragraph
}>, <1, {A paragraph
, A paragraph in div
}>, <2, {}>}という結果が返される。
【0111】
(iv)図21には、bodyノードとhtmlノードとについて得られる結果を示す。終了状態は、F= {0, 1} である。このため、最終的には、
{ x | ∀q.q ∈ F ∧ <q, V> ∈ eval(v)⇒ x ∈ V }により、0と1の両方で検索される図19に示したノードで0、1が割り当てられているノードである1つめのpノードが検索されることになる。
【0112】
以上説明したアルゴリズムは、 ストリームによってXPathを評価し、ストリームを読み終えた後、検索結果をまとめて出力する。しかしながら、関数evalの評価の途中の段階で、到達状態は {0, 1, 2} であることと、あるノードが状態1で検索されているが状態0では検索されていない場合であって、現在の状態0から終了状態に到達する遷移が必ず存在するということが判断できる場合には、状態1でしか検索されないノードは、必ず検索されないということの判定が可能である。本発明においては、上述した判断を含ませてストリームを読みながら検索結果を出力することも可能であるし、検索されないノード情報をより早く消去して、ハードウエア資源の効率的利用を達成することが可能となる。
【0113】
2.コンパイル装置の実装
本発明のコンパイル装置は、XPath式あるいはそれに若干の拡張を加えた検索式(以下、単に式として参照する。)をオートマトンの状態とみなし、式の書き換えの結果、検索オートマトンの遷移とみなせる形になった場合にそれをオートマトンの遷移に翻訳し、すべてのての様相論理式が書き換えをへてオートマトンの遷移に翻訳されるまで翻訳を繰り返す処理を実行する。以下に説明する本発明のコンパイル装置のコンピュータへの実装の実施の形態においては、式としてXPath式を拡張したBTLP式を用いて説明を行う。本セクションでは、XPathを内部表現であるBTLP式で擬似コードを記述する。BTLP式φは、以下のBNF文法で表現できる。
【0114】
b ::= -1 | -2
m ::= b | 1;2 | -1;-2
φ::= a | (b) | bφ | ¬φ | φ∧φ | φ∨φ | [m]φ| <m>φ
BNF文法にのっとった式φを計算機の内部で表現するデータ構造は、これまで知られているいかなる方法を使用することができる。基本の様相b(= 1,2,-1,-2)は、以下のようにXML木を二分木として取り扱うことに対応する。上述した二分木構造を図22に示す。ここで、1を、「左隣の要素で」、2を、「末子の要素で」、−1を、「末子である場合に親要素で」、−2を、「右隣の要素で」という様相に対応させる。
【0115】
一方[m],<m>は、mで指示されるノード集合について「そのどこでも」、または「そのどこかで」を示す様相を意味する。[m], <m> の説明の前に、それ以外に使用する構文の意味を以下に説明する。
・文字aは、name()="table"や、@titile="xxx"などのXPathの基本的な述語を表すものとする。
・位置判定(b)は、bが示す場所にノードが存在することを示す。あるノードが(1)であるとは、「左隣の要素を持つ」ことを意味し、(2)であるとは、「子要素を持つ」ことを意味し、(−1)とは、「右隣の要素を持つ」ことを意味し、$({-2})$は、「末子でありルートではない」ということを意味する。たとえば図22(a)で、◎の場所では (-1) が成立する。
・bφは、b(= 1, 2, -1, -2) が示す場所で、φが成立することを示す。bが示す場所にノードが存在しない場合(つまり、¬(b)が成立する場合)は、bφは必ず成立するものとする。
・φ∧ψは、φとψの双方が成立することを示す。
・φ∨ψは、φとψのどちらかが成立することを示す。
【0116】
上述した各演算子の意味づけにおいて、[m]φ,<m>φのmについて考察すると、[m]φ,<m>φのmには、基本の様相b(= 1, 2, -1, -2) が入力できる。まずこの場合を説明する。
・[b]φとはb方向に進み続けるようなパスのどこでもφが成立することを示す。例えば図22の◎の場所で[-1]aが成立するとは、◎ノードとその兄弟の二つの○ノードとが、すべて基本の述語aを満たすことを意味する。
・<b>φは、b方向に進み続けるようなパスのどこかひとつでφが成立することを意味する。例えば、上の◎ノードの場所で<-1>aが成立するとは、◎ノードとその兄弟の二つの○ノードのうち一つが基本の述語aを満たすことを意味する。また、さらに m = 1;2 または m = -1;-2 の場合も考えられる。これを図21に示す。図22(a)において1;2は、XPathのdescendant-or-selfに近い様相であるが、子孫だけではなく弟要素もすべて指し示す意味を有する。また、-1;-2は、図22(b)に示すように、ancestor-or-selfに近い意味を含むが、ルートに至るまでに通る親要素列だけでなく、途中のノードのすべての兄要素も指し示すような様相である。
【0117】
より具体的に、XPathの検索オートマトンへの変換を説明するため、P. Gerth, D. Peled, M. Y. Vardi, and P. Wolper,“Simple on-the-fly automatic verification of linear temporal logic.”、In Protocol Specification Testing and Verification, pages 3 -18, 1995に開示の既存アルゴリズムを使用するものとする。例えば、/descendant::pというXPath式を考える。これはBTLP式において、[1;2](p⇒*)と表現することができる。ただし、「*」は、ノードが選択されることを示すシンボルを意味する。φ⇒ψは、¬φ∨ψの省略標記なので、[1;2](p⇒*)は、[1;2](¬a∨*)と同等である。
【0118】
既存アルゴリズムは、「[1;2]φが成立する」ことと「φが成立し、同時に左隣、および末子ノードにおいて[1;2]φが成立すること」とが同値であるという様相論理の性質を利用する点にある。書き下すと下記式で示される等式が成立する。
【0119】
[1;2](φ) = φ ∧ 1[1;2](φ))∧ 2[1;2]φ
この性質を用いて既存アルゴリズムは以下のように動作する。
1.まず式[1;2](¬a∨*) に対応する状態を上の同値関係および(φ∨φ')∧ψ とφ∧ψ∨φ'∧ψとが同値であることを使用して、展開する。
【0120】
[1;2](¬a∨*) = (¬a ∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*)) ∨
(*∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*))
得られた∨の両辺に対応する、下記式の2つの状態0、1を生成する。
【0121】
¬a ∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*),
*∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*)
【0122】
2.次に各状態に対する状態遷移δを生成する。ここで、状態¬a ∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*)は、1方向(左ノード方向)の状態[1;2](¬a∨*)および2方向の状態(下ノード方向)[1;2](¬a∨*)から到達した状態であると考えることができる。同様に、*∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*)も状態遷移に変換できる。このようにして生成されたオートマトンを図23に示す。
【0123】
図23に示したテーブルに4つあらわれる[1;2](¬a∨*)は、展開前の当初の式である。つまりこれをふたたび展開すると再度、
【0124】
¬a ∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*),
*∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*)
が得られる。上記式で示されるそれぞれの状態に0,1という符号を割り当てることにより、図24に示したオートマトンが生成される。
3.初期状態Iを{0, 1}、終了状態Fを{0, 1}および検索状態Θを{ 1 }で指定する。本発明における終了状態とは、当初の式 [1;2](¬a∨*)から展開された状態0、1を意味する。各状態は様相(b)の条件を含んでいないかぎり初期状態であるため、0、1は、また初期状態ともなる。一方、検索状態は、下記式
【0125】
*∧ 1[1;2](¬a∨*) ∧ 2[1;2](¬a∨*)
で示され、すなわち1である。したがって、図25に示される検索オートマトンが生成される。
【0126】
また、本発明においては、さらに過去の様相である-1、-2を取り扱う変更例を提供する。より詳細に説明すると、本発明の変更例では、変数qを「状態」と定義し、この状態を、下記式のBNF記法で表現されるデータ構造(リスト構造)とする。
【0127】
q ::= <Ψ, q> | T | ε
ここでΨは、bφ またはσの形をした様相論理式からなる集合である。ここで、q=<Ψ, q’> であるときΨをq.termで、q’をq.base であらわす(特にq1.term = q2.term、かつq1.base=q2.baseならば、q1=q2とする。)。また、q.succ1、q.succ2、q.prec1、q.prec2などは状態qに(補助的に)付随する値であるが、これらはq1=q2の判定には関わらない。q.subは、qをbaseとする状態の集合、つまりq.sub=
{q’|q’.base = q}と定義することができる。
【0128】
最後に大域的に有効である変数は「状態の集合」Q, P, S, Resolvedおよび「状態の3つ組の集合」AD, AU, BD, BU, CU, CD である。状態の3つ組の集合は、オートマトンにおける左ノード状態、下ノード状態および到達状態の組に相当する。本発明において説明するコンパイル装置のアルゴリズムは、main, expand, extendの3つの関数で定義される。
【0129】
図26には、本発明における検索オートマトンを生成する関数mainが実行する処理のフローチャートを示す。本発明の検索オートマトンを生成する関数mainの処理においては、ステップS70において状態集合を初期化し、ステップS72で、これから計算しなくてはならない3つ組の集合であるCD(S-extendにより計算される)およびCU(P-extendで計算される)が、nullかどうかを判断する。nullである場合(yes)は、ステップS82でAD、AUから検索オートマトンを生成し、ステップS82において処理を終了する。ステップS72の判断において、nullでない場合(no)には、ステップS74においてCDがnullが否かを判断し、nullでない場合(no)には、CDがnullとなるまでステップS78において各CDからAD、BD、CUを計算する。CDがnullとなった場合(yes)には、ステップS76においてCU=nullか否かを判断し、nullでない場合(no)にはステップS80に進んで、CU=nullとなる(計算するべく状態の3つ組がなくなる)まで各CUからAU、BU、CDを計算し、最終的な検索オートマトンの生成を実行する。
【0130】
図27には、「書き換えの結果,、オートマトンの遷移とみなせる形になったときに、それをオートマトンの遷移に翻訳する。」処理を実行する関数mainの疑似コードを示す。関数mainは、関数S-extendとP-extendとを呼び出し、新しい状態を構築しながら検索オートマトンを構築する。関数mainの返り値は、オートマトンの状態の集合、終了状態と遷移の集合の組を与える。検索オートマトンの検索状態は、Θ = {q | * ∈ q.term}として定義される。
最初の関数expandは、「式の書き換えをおこなう」処理を実行する。図28には、関数expandの疑似コードを示す。
【0131】
図28に示した疑似コードにおいては、b ⊆ mは、1 ⊆ 1;2 のように定義される。また、∪_{b ⊆ m} ... とは例えば m = 1;2である場合には、下記式、
【0132】
expand(Φ ∪ Ψ ∪ {1<1;2>ψ, (2)}) ∪
expand(Φ ∪ Ψ ∪ {2<1;2>ψ, (2)})
で記述される集合の和であるとする。
【0133】
また、図28の疑似コードにおいてσは以下のように定義される。
【0134】
すなわち様相を含まないBTLP式がσである。この実施の形態のアルゴリズムは、上述したσから遷移条件を取り出す処理を実行する。
【0135】
関数の評価の手法は、用語および擬似コードの解釈の手法にあるとおりである。expand関数は式の集合を受け取り、これを等価な書き換えを通じてbφ、σのどれかの形になるまで変形してゆく。図28に示した疑似コードに沿って処理を説明すると、3行目のfor文で式をひとつずつ読み出し、5〜12行目のcase文によるパターンマッチで、式をその形に応じて書き換えてゆく動作を実行させる。σの形のものは、6行目でこれ以上書き換えられずに15行目でreturnされる。また、bφの形のものは 11行目のotherwiseでこれ以上書き換えられずに16行目でreturnされる。
【0136】
図29には、関数S-extendおよびP-extendの疑似コードを示す。図29に示された疑似コード(以下では両方をとりまとめてd-extendとして定義している(dは、変数である。)。d-extendは、「XPath式あるいはそれに若干の拡張を加えた式を、オートマトンの状態とみなす」の部分、および「書き換えの結果、オートマトンの遷移とみなせる形になったときにそれをオートマトンの遷移に翻訳する。」)の部分を実行する。
【0137】
関数の評価の手法は用語および擬似コードの解釈の手法にあるとおりである. 関数が何を行うのかの意味を簡単に説明するとextend関数は、式の集合を受け取り、これから状態の集合を生成する。そしてそれと同時に、検索オートマトンの状態遷移を生成する。具体的な処理を説明すると、1行目の引数(q, Φ)は、それぞれ、ベースとなる状態であり、状態に変換される式の集合である。4行目でexpand関数を呼び出し、Φを等価な書き換えを通じてbφ、σのどれかの形になるまで変形してゆく。6行目のforは、expand関数の結果それぞれを並べあげ、7〜10行目で状態q’を構築する。状態q’がそれまでに生成された状態にないものであれば、13〜37行目までの処理を実行する。14〜17行目では、それ以後の計算のために必要なデータを生成する。18〜24行目は、もし新しい状態q’がS-expandによって作られたものである場合に追加すべき状態遷移を追加する部分である。図29に示された疑似コードの27〜36行目では、もし新しい状態q’が、P-expandによって作られたものである場合に追加すべき状態遷移を追加する部分である。
【0138】
本発明において説明した各手段は、中央処理装置(CPU)、RAM、ROMなどのメモリ、ハードディスクといった記憶手段などを含むコンピュータまたは情報処理装置において、ソフトウエア的に構成されるソフトウエア・モジュールから構成することができる。また、上述したソフトウエア・モジュールは、本発明において説明した機能を有する限り、図面に示した機能ブロックに対応する構成として含まれるものではなく、異なった機能ブロック構成として構成することができる。さらに、本発明の方法をコンピュータに対して実行させるためのプログラムは、種々のプログラミング言語、例えばアセンブラ言語、C言語、C++言語、Java(登録商標)などを使用して記述することができ、本発明のプログラムを記述したコードは、RAM、ROM、フラッシュ・メモリなどにおけるファームウエアとして含ませることができるし、磁気テープ、フレキシブル・ディスク、ハード・ディスク、コンパクト・ディスク、光磁気ディスク、ディジタル・バーサタイル・ディスク(DVD)といったコンピュータ可読な記録媒体に保持させることができる。
【0139】
これまで本発明を図面に記載した具体的な実施の形態をもって説明してきたが、本発明は、上述した特定の実施の形態に制限されるものではなく、種々の変更例および他の実施の形態であっても、本発明の効果を奏する範囲において、これまで知られたいかなる構成要素であっても用いることができる。
【図面の簡単な説明】
【図1】 本発明の文書検索システムの概略的な構成を示した図。
【図2】 本発明の文書検索システムにおける状態遷移を示した図。
【図3】 本発明において使用することができるXML文書の具体的な実施の形態を示した図。
【図4】 図3に示したXML文書を木構造として示した図。
【図5】 本発明の実施の形態として、本発明により生成される左ノード、下ノードから、現在判断しているノードへの状態遷移の集まりからなる検索オートマトンの実施の形態を示した図。
【図6】 本発明による検索オートマトンの他の実施の形態を示した図。
【図7】 本発明の本質的原理を、連言的なXPath式、//d[.//div and .//p])の評価に適用した場合の検索パスを示すことにより説明した図。
【図8】 本発明の検索オートマトン評価装置18の詳細な機能ブロック図。
【図9】 本発明の検索オートマトン評価装置が実行する検索オートマトン評価方法の概略的なフローチャート。
【図10】 本発明の評価方法において検索結果を逐次出力を実行する実施の形態を示した図。
【図11】 本発明の検索オートマトンを生成するためのコンパイル装置の詳細な機能ブロック図。
【図12】 本発明のコンパイル装置が実行するコンパイル方法のフローチャートを示した図。
【図13】 本発明の検索オートマトン評価装置としてコンピュータにおいて実装できる擬似コードを示した図。
【図14】 検索オートマトン評価装置に入力されるXML文書の実施の形態を示した図。
【図15】 関数evalの上述した機能により生成される返り値の実施の形態を示した図。
【図16】 関数evalの上述した機能により生成される返り値の実施の形態を示した図。
【図17】 関数evalの上述した機能により生成される返り値の実施の形態を示した図。
【図18】 関数evalの上述した機能により生成される返り値の実施の形態を示した図。
【図19】 関数evalの上述した機能により生成される返り値の実施の形態を示した図。
【図20】 関数evalの上述した機能により生成される返り値の実施の形態を示した図。
【図21】 関数evalの上述した機能により生成される返り値の実施の形態を示した図。
【図22】 基本の様相b(= 1,2,-1,-2)を取り扱う際のXML木を二分木としての取り扱いを示した図。
【図23】 本発明のコンパイル方法により生成されたオートマトンを示した図。
【図24】 本発明のコンパイル方法により生成されたさらに処理が進行したオートマトンを示した図。
【図25】 本発明のコンパイル方法により最終的に生成された検索オートマトンを示した図。
【図26】 本発明における検索オートマトンを生成する関数mainが実行する処理のフローチャートを示した図。
【図27】 本発明における関数mainの疑似コードを示した図。
【図28】 式の書き換えをおこなう処理を実行する関数expandの疑似コードを示した図。
【図29】 関数S-extendおよびP-extendの疑似コード(まとめてd-extendとして示す。)を示した図。
【符号の説明】
10…文書検索システム
12…アプリケーション
14…コンパイル装置
16…記憶装置(検索オートマトン)
18…検索オートマトン評価装置
20…記憶装置(検索結果)
22…オートマトン保持部
24…ストリーム格納部
26…パーサ
28…評価部
30…メモリ
32…パーサ
34…メモリ
36…オートマトン生成部
Claims (7)
- タグにより要素が区切られた階層構造を有するXML文書を検索する文書検索システムであって、前記文書検索システムは、
入力される検索式を記憶して構文解析を実行し、入力された前記検索式と等価な検索オートマトンであって、2状態の入力を使用する遷移状態テーブルとして前記検索オートマトンを生成し、記憶装置に格納するコンパイル装置と、
前記コンパイル装置により生成された検索オートマトンを記憶する記憶装置と、
前記記憶装置から前記検索オートマトンを読み出して記憶すると共に前記XML文書を読み込み、前記XML文書から前記タグを読み出し、前記XML文書を先頭から見たときに先頭にある開始タグに対応する閉じタグで閉じられた、前記タグの種類の異なる複数のノードからなる後方ノードの2状態を、前記タグに対応して生成された木構造の左ノードの状態および下ノードの状態として記憶させ、前記検索オートマトンを使用してストリーム検索を実行して前記左ノードおよび前記下ノードの状態に状態遷移を生じさせ、前記左ノードおよび前記下ノードの検索結果を前記状態遷移テーブルを使用して前記検索オートマトンを評価することにより、その時点で判断しているノードの状態遷移を判断し、前記状態遷移が前記検索式に適合することを示すノードを出力する検索オートマトン評価装置とを含む文書検索システム。 - 前記コンパイル装置は、初期状態と終了状態と検索状態とに対応した状態遷移が登録された検索オートマトンを生成する、請求項1に記載の文書検索システム。
- コンピュータに対してタグにより要素が区切られた階層構造を有するXML文書を検索させる文書検索方法であって、前記文書検索方法は、前記コンピュータに対し、
入力される検索式を記憶して構文解析を実行し、入力された前記検索式と等価な検索オートマトンであって、前記検索オートマトンを2状態の入力を使用する遷移状態テーブルとして生成し、記憶装置に格納するステップと、
前記コンパイル装置により生成された検索オートマトンを記憶装置に記憶させるステップと、
前記記憶装置から前記検索オートマトンを読み出して記憶すると共に前記XML文書を読み込み、前記XML文書から前記タグを読み出し、前記XML文書を先頭から見たときに先頭にある開始タグに対応する閉じタグで閉じられた、前記タグの種類の異なる複数のノードからなる後方ノードの2状態を、前記タグに対応して生成された木構造の左ノードの状態および下ノードの状態として記憶させ、前記検索オートマトンを使用してストリーム検索を実行して前記左ノードおよび前記下ノードの状態に状態遷移を生じさせ、前記左ノードおよび前記下ノードの検索結果を前記状態遷移テーブルを使用して前記検索オートマトンを評価することにより、その時点で判断しているノードの状態遷移を判断し、前記状態遷移が前記検索式に適合することを示すノードを出力するステップを含む、文書検索方法。 - 前記検索オートマトンを生成するステップは、初期状態と終了状態と検索状態とに対応した状態遷移が登録された検索オートマトンを生成するステップを含む、請求項3に記載の文書検索方法。
- 請求項3または4に記載の文書検索方法をコンピュータに対して実行させる、コンピュータ実行可能なプログラム。
- タグにより要素が区切られた階層構造を有するXML文書を検索する文書検索システムであって、前記文書検索システムは、
入力される検索式を記憶して構文解析を実行し、前記タグの種類の異なるノードに対して割り当てられる少なくとも2状態を読み込んで状態遷移を可能とし、前記検索式に等価な状態遷移テーブルとして2状態入力オートマトンを生成するコンパイル装置と、
前記2状態入力オートマトンを記憶する記憶装置と、
前記記憶装置から2状態入力オートマトンを読み出して記憶すると共に前記XML文書を読み込み、前記タグの種類の異なるノードに対して割り当てられ、かつ前記XML文書 を先頭から見たときに先頭にある開始タグに対応する閉じタグで閉じられた、前記タグの種類の異なる複数のノードからなる後方ノードに対する状態を、前記タグに対応して生成された木構造の左ノードの状態および下ノードの状態として記憶させ、前記2状態入力オートマトンを使用してストリーム検索を実行して前記左ノードおよび前記下ノードの状態に状態遷移を生じさせ、前記左ノードおよび前記下ノードの検索結果を前記状態遷移テーブルを使用して前記2状態入力オートマトンを評価することにより、その時点で判断しているノードの状態遷移を判断し、前記状態遷移が前記検索式に適合することを示すノードを出力するオートマトン評価装置と
を含む文書検索システム。 - 前記2状態入力オートマトンは前記オートマトン評価装置の3つの状態を遷移させる、請求項6に記載の文書検索システム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002290050A JP4036718B2 (ja) | 2002-10-02 | 2002-10-02 | 文書検索システム、文書検索方法、文書検索を実行するためのプログラム |
US10/670,068 US7509305B2 (en) | 2002-10-02 | 2003-09-23 | Method for document-searching |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002290050A JP4036718B2 (ja) | 2002-10-02 | 2002-10-02 | 文書検索システム、文書検索方法、文書検索を実行するためのプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004126933A JP2004126933A (ja) | 2004-04-22 |
JP4036718B2 true JP4036718B2 (ja) | 2008-01-23 |
Family
ID=32040652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002290050A Expired - Fee Related JP4036718B2 (ja) | 2002-10-02 | 2002-10-02 | 文書検索システム、文書検索方法、文書検索を実行するためのプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US7509305B2 (ja) |
JP (1) | JP4036718B2 (ja) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7499915B2 (en) * | 2004-04-09 | 2009-03-03 | Oracle International Corporation | Index for accessing XML data |
US7493305B2 (en) * | 2004-04-09 | 2009-02-17 | Oracle International Corporation | Efficient queribility and manageability of an XML index with path subsetting |
US8566300B2 (en) | 2004-07-02 | 2013-10-22 | Oracle International Corporation | Mechanism for efficient maintenance of XML index structures in a database system |
US7885980B2 (en) * | 2004-07-02 | 2011-02-08 | Oracle International Corporation | Mechanism for improving performance on XML over XML data using path subsetting |
JP2006053735A (ja) | 2004-08-11 | 2006-02-23 | Seiko Epson Corp | ネットワーク機器およびこれに用いるプログラム並びにこの制御方法 |
US9171100B2 (en) * | 2004-09-22 | 2015-10-27 | Primo M. Pettovello | MTree an XPath multi-axis structure threaded index |
US7707498B2 (en) * | 2004-09-30 | 2010-04-27 | Microsoft Corporation | Specific type content manager in an electronic document |
US8060856B2 (en) * | 2004-11-18 | 2011-11-15 | Aol Inc. | Native objects accessible by platform neutral API |
US7617234B2 (en) * | 2005-01-06 | 2009-11-10 | Microsoft Corporation | XML schema for binding data |
US7730394B2 (en) * | 2005-01-06 | 2010-06-01 | Microsoft Corporation | Data binding in a word-processing application |
US7945590B2 (en) * | 2005-01-06 | 2011-05-17 | Microsoft Corporation | Programmability for binding data |
US7668873B2 (en) * | 2005-02-25 | 2010-02-23 | Microsoft Corporation | Data store for software application documents |
US7752224B2 (en) * | 2005-02-25 | 2010-07-06 | Microsoft Corporation | Programmability for XML data store for documents |
US7707152B1 (en) * | 2005-07-29 | 2010-04-27 | Adobe Systems Incorporated | Exposing rich internet application content to search engines |
US7949991B1 (en) * | 2005-07-29 | 2011-05-24 | Adobe Systems Incorporated | Systems and methods for specifying states within imperative code |
US7953696B2 (en) * | 2005-09-09 | 2011-05-31 | Microsoft Corporation | Real-time synchronization of XML data between applications |
US7664742B2 (en) * | 2005-11-14 | 2010-02-16 | Pettovello Primo M | Index data structure for a peer-to-peer network |
US20070174309A1 (en) * | 2006-01-18 | 2007-07-26 | Pettovello Primo M | Mtreeini: intermediate nodes and indexes |
US20070198479A1 (en) * | 2006-02-16 | 2007-08-23 | International Business Machines Corporation | Streaming XPath algorithm for XPath expressions with predicates |
US8510292B2 (en) * | 2006-05-25 | 2013-08-13 | Oracle International Coporation | Isolation for applications working on shared XML data |
JP2010504572A (ja) * | 2006-09-20 | 2010-02-12 | ナショナル アイシーティー オーストラリア リミテッド | モデル検査で用いられる遷移システムの生成 |
US7836098B2 (en) * | 2007-07-13 | 2010-11-16 | Oracle International Corporation | Accelerating value-based lookup of XML document in XQuery |
JP5320697B2 (ja) * | 2007-07-26 | 2013-10-23 | 富士通株式会社 | 照合処理プログラムおよび照合処理装置 |
US7840609B2 (en) * | 2007-07-31 | 2010-11-23 | Oracle International Corporation | Using sibling-count in XML indexes to optimize single-path queries |
US7991768B2 (en) | 2007-11-08 | 2011-08-02 | Oracle International Corporation | Global query normalization to improve XML index based rewrites for path subsetted index |
JP5228498B2 (ja) * | 2008-01-22 | 2013-07-03 | 富士通株式会社 | 検索方法 |
JP5125662B2 (ja) * | 2008-03-24 | 2013-01-23 | 富士通株式会社 | クエリ変換方法および検索装置 |
CN101551803A (zh) * | 2008-03-31 | 2009-10-07 | 华为技术有限公司 | 一种建立模式匹配状态机、模式识别的方法和装置 |
US20110087698A1 (en) * | 2008-06-18 | 2011-04-14 | Keiichi Iguchi | Search expression creating system, search expression creating method, search expression creating program, and recording medium |
US8126932B2 (en) * | 2008-12-30 | 2012-02-28 | Oracle International Corporation | Indexing strategy with improved DML performance and space usage for node-aware full-text search over XML |
US8219563B2 (en) * | 2008-12-30 | 2012-07-10 | Oracle International Corporation | Indexing mechanism for efficient node-aware full-text search over XML |
US8630997B1 (en) * | 2009-03-05 | 2014-01-14 | Cisco Technology, Inc. | Streaming event procesing |
WO2010147114A1 (ja) * | 2009-06-15 | 2010-12-23 | 日本電気株式会社 | 検索式生成システム |
US8244755B2 (en) | 2009-06-29 | 2012-08-14 | International Business Machines Corporation | Search engine optimization using page anchors |
US8255787B2 (en) * | 2009-06-29 | 2012-08-28 | International Business Machines Corporation | Automated configuration of location-specific page anchors |
US8631028B1 (en) | 2009-10-29 | 2014-01-14 | Primo M. Pettovello | XPath query processing improvements |
CN102143148B (zh) * | 2010-11-29 | 2014-04-02 | 华为技术有限公司 | 用于通用协议解析的参数获取和通用协议解析方法及装置 |
JP6028392B2 (ja) * | 2012-05-24 | 2016-11-16 | 富士通株式会社 | 生成プログラム、生成方法、生成装置、検索プログラム、検索方法および検索装置 |
JP6028393B2 (ja) * | 2012-05-24 | 2016-11-16 | 富士通株式会社 | 照合プログラム、照合方法および照合装置 |
US10042620B1 (en) * | 2016-11-03 | 2018-08-07 | Palantir Technologies Inc. | Approaches for amalgamating disparate software tools |
US10671670B2 (en) * | 2017-04-03 | 2020-06-02 | Disney Enterprises, Inc. | Graph based content browsing and discovery |
US11281687B2 (en) * | 2020-01-17 | 2022-03-22 | Sigma Computing, Inc. | Compiling a database query |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6052686A (en) * | 1997-07-11 | 2000-04-18 | At&T Corporation | Database processing using schemas |
AU2001290646A1 (en) * | 2000-09-08 | 2002-03-22 | The Regents Of The University Of California | Data source integration system and method |
US7127467B2 (en) * | 2002-05-10 | 2006-10-24 | Oracle International Corporation | Managing expressions in a database system |
US7240279B1 (en) * | 2002-06-19 | 2007-07-03 | Microsoft Corporation | XML patterns language |
-
2002
- 2002-10-02 JP JP2002290050A patent/JP4036718B2/ja not_active Expired - Fee Related
-
2003
- 2003-09-23 US US10/670,068 patent/US7509305B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7509305B2 (en) | 2009-03-24 |
JP2004126933A (ja) | 2004-04-22 |
US20040068494A1 (en) | 2004-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4036718B2 (ja) | 文書検索システム、文書検索方法、文書検索を実行するためのプログラム | |
US7146352B2 (en) | Query optimizer system and method | |
Marx | XPath with conditional axis relations | |
US7958493B2 (en) | Type inference system and method | |
JPH1078959A (ja) | エッジデータ構造を統一する方法 | |
JP4365162B2 (ja) | 構造化文書のデータを検索する装置および方法 | |
US7499931B2 (en) | Method and apparatus for approximate projection of XML documents | |
US6499132B1 (en) | System and method for analyzing temporal expressions | |
US20140245259A1 (en) | Method for securing a program | |
US20100153430A1 (en) | Method of and Apparatus for Extraction and Analysis of Macro Operations within Query Language Statement | |
US6920583B1 (en) | System and method for compiling temporal expressions | |
KR101221306B1 (ko) | 데이터 구조를 항해하기 위한 방법 및 시스템 | |
Scott et al. | Generalized bottom up parsers with reduced stack activity | |
Beedkar et al. | A unified framework for frequent sequence mining with subsequence constraints | |
Abate et al. | The tableau workbench | |
Levin et al. | Verification of message sequence charts via template matching | |
Wood | Rewriting XQL queries on XML repositories | |
Van Steenbergen et al. | Generic selections of subexpressions | |
Zinn et al. | X-CSR: Dataflow optimization for distributed XML process pipelines | |
VÍT | Grammar-Based Translation Framework | |
Panella et al. | Operator precedence ω-languages | |
Hündling et al. | NaXDB-Realizing Pipelined XQuery Processing in a Native XML Database System. | |
Rose et al. | Phantom XML | |
MARZI | Parallel XPath query evaluator | |
Höfig | Template Matching on XML Streams. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060912 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061211 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070529 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070827 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20071023 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20071023 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071030 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101109 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |