JP5228498B2 - 検索方法 - Google Patents

検索方法 Download PDF

Info

Publication number
JP5228498B2
JP5228498B2 JP2008011679A JP2008011679A JP5228498B2 JP 5228498 B2 JP5228498 B2 JP 5228498B2 JP 2008011679 A JP2008011679 A JP 2008011679A JP 2008011679 A JP2008011679 A JP 2008011679A JP 5228498 B2 JP5228498 B2 JP 5228498B2
Authority
JP
Japan
Prior art keywords
event
data
query
search
unit
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.)
Active
Application number
JP2008011679A
Other languages
English (en)
Other versions
JP2009175862A (ja
Inventor
達哉 浅井
真一郎 多湖
青史 岡本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2008011679A priority Critical patent/JP5228498B2/ja
Priority to US12/357,423 priority patent/US20090187562A1/en
Publication of JP2009175862A publication Critical patent/JP2009175862A/ja
Application granted granted Critical
Publication of JP5228498B2 publication Critical patent/JP5228498B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

この発明は、要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法などに関するものである。
近年、コンピュータで処理される文書データとして、XML(Extensible Markup Language)等のマークアップ言語が利用されている。このXMLは、異なる情報システムの間で、特にインターネットを介して、構造化された文書や構造化されたデータの共有を容易にすることが出来るため、コンピュータにおいてますます多用されてきている(以下、XMLに基づいて記述された階層構造をなす文書データをXMLデータと表記する)。
そして、XMLデータの特定の照合位置を指定するものとして、XPath(XML Path Language)クエリが用いられる(以下、クエリと表記する)。この、クエリは、XMLデータのための標準クエリ言語であり、XMLの複雑な木構造に対して検索式を記述する能力を持つ。かかるクエリに基づいてXMLデータからデータを検出する技術は、例えば下記に示す技術が存在する。
非特許文献1では、XMLデータをスキャンして、XPath(クエリ)を評価するための階層リストを構築し、構築した階層リスト構造をスキャンして、XMLデータ内のXPathの照合位置の組み合わせを求めることで、最終的な回答の位置を検出するという技術が公開されている。また、特許文献1では、XMLデータから逐次的に文書木を作成しつつ、クエリを評価するという技術が公開されている。
Lu.Qin,J.X.Yu,B.Ding,"TwigList:Make Twig Pattern Matching Fast",Proc.of DASFAA'07,850-862,LNCS 4443,Springer-Verlag. 特許第3832830号公報
しかしながら、上述した公知技術を利用して、XMLデータからクエリの照合位置を求める場合に、処理負荷の大きい階層管理を行う必要があるという問題があった。かかる階層管理は、XMLデータ中において、入力クエリで注目するノード間の階層を監視し、かつ、クエリに対応する照合位置の組合せを探すために、何度も同じ位置を繰り返し読み込まなければならないため装置にかかる負荷が大きくなってしまう。
すなわち、処理の重たい階層管理を出来るだけ行うことなく、XMLデータからクエリの照合位置を求めることが極めて重要な課題となっている。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、処理の重たい階層管理を出来るだけ行うことなく、XMLデータからクエリの照合位置を求めることが出来る検索方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、この検索方法は、要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法であって、前記検索装置は、前記検索式を取得した場合に、当該検索式を記憶装置に記憶する記憶ステップと、前記検索式に対応するデータを前記文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定する判定ステップと、前記判定ステップにより階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく前記検索式に対応するデータを前記文書データから検索する検索ステップと、を含んだことを要件とする。
また、検索方法は、上記の検索方法において、前記検索ステップは、前記判定ステップにより階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを要件とする。
また、検索方法は、上記の検索方法において、前記判定ステップは、前記検索式の木構造が末端ノードを1個有している場合に、階層管理が不要であると判定することを要件とする。
また、検索方法は、上記の検索方法において、前記判定ステップは、前記検索式の木構造が末端ノードを2個有しており、かつ第2ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定することを要件とする。
また、検索方法は、上記の検索方法において、前記判定ステップは、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定することを要件とする。
この検索方法によれば、検索装置が、検索式を取得した場合に、検索式を記憶装置に記憶し、検索式に対応するデータを文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定し、階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく検索式に対応するデータを前記文書データから検索するので、クエリに応じて、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
また、この検索方法によれば、階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと検索式との一致不一致の判定を実行することにより、検索式に対応するデータを文書データから検索するので、装置にかかる負荷を軽減させ、クエリの照合位置を高速に検出可能となる。
また、この検索方法によれば、検索式の木構造が末端ノードを1個有している場合に、階層管理が不要であると判定するので、階層管理が必要か否かを正確に判定することが出来る。
また、この検索方法によれば、検索式の木構造が末端ノードを2個有しており、かつ第2ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定するので、階層管理が必要か否かを正確に判定することが出来る。
また、この検索方法によれば、検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定するので、クエリが易クラスに属するか否かの判定を効率よく実行することができ、装置にかかる負担を軽減させることが出来る。
以下に添付図面を参照して、この発明に係る検索方法の好適な実施の形態を詳細に説明する。
(XMLデータについて)
まず、本実施例1で利用するXML(Extensible Markup Language)データについて説明する。図1は、XMLデータのデータ構造の一例を示す図である。同図に示すように、このXMLデータは、要素識別子「<」、「</」等により要素が区切られた階層構造を有している。そして、図1のXMLデータの木表現は、図2のように表すことができる。
図2は、XMLデータの木表現の一例を示す図である。同図に示すように、XMLデータの木表現では、XMLデータは、ノードID1,3,4,6,7,9,10,12,13,15,16,18,19,21,22,24,25,27,28の要素ノードと、ノードID2,5,8,11,14,17,20,23,26,29のテキストノードとを有し、それぞれの要素ノード、テキストノードをそれぞれ接続している。例えば、要素ノードのSyain1は、テキストノードの「シグマ戦隊中原ジャー」2、要素ノードのACT3,12,21に接続されている。
そして、XPath(XML Path Language)クエリ(以下、クエリと表記する)を指定することによって、上記のXMLデータからクエリの照合位置のデータを取得することが可能となる。なお、W3C(World Wide Web Consortium)によるクエリのサブセットは、下記のように定義される。
Path::="/"RPath
RPath::=Step("/"Step)*
Step::=Axis"::"Ntest("["Pred"]")? (?は、0回または1回の繰り返しを示す)
Axis::="child"
Ntest::=tagname|"*"|"text()"|"node()"
Pred::=Expr
Expr::=RPath
例えば、クエリが、
Q1=/Syain/ACT/chara/name
と指定された場合には、「/Syain/ACT/chara/name」で表される要素ノードname7,16,25のデータ(図3の回答A、C、E参照;図3は、クエリに対するデータを説明するための図である。)を取得することが出来る。
また、クエリが、
Q2=/Syain/ACT[chara/name]/cast
と指定された場合には、子供の要素ノードとなる「chara/name」を有するACT3,12,21に接続された要素ノードcast9,18,27のデータ(図3の回答B、D、F参照)を取得することが出来る。なお、本実施例1で利用するクエリは、子供軸のみを有し、兄弟方向の軸は含まないものとする。
(本実施例1にかかる検索装置について)
次に、本実施例1にかかる検索装置について説明する。本実施例1にかかる検索装置は、クエリに対応するデータをXMLデータから検索する場合に、階層管理が必要となるクエリか否かを、このクエリに基づいて判定し、階層管理が不要な検索式であると判定した場合に、階層管理を行うことなくクエリに対応するデータをXMLデータから検索する。このように、本実施例1にかかる検索装置は、クエリに応じて処理の重い階層管理を行うことなく、XMLデータからデータを検索するので、検索装置にかかる負担を軽減し、データの検索効率を向上させることが出来る。
図4は、本実施例1にかかる検索装置100の構成を示す機能ブロック図である。同図に示すように、この検索装置100は、入力部110と、出力部120と、通信制御IF部130と、入出力制御IF部140と、記憶部150と、制御部160とを備えて構成される。なお、この検索装置100は、ネットワークを介して端末装置(図示略)に接続されているものとする。
このうち、入力部110は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したXMLデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ(出力部120)も、マウスと協働してポインティングデバイス機能を実現する。
出力部120は、各種の情報を出力する出力手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成され、例えば、上述したXMLデータに関する各種の情報を出力する。
通信制御IF部130は、端末装置との間における通信を制御する手段である。入出力制御IF部140は、入力部110、出力部120、通信制御IF部130、記憶部150、制御部160によるデータの入出力を制御する手段である。
記憶部150は、制御部160による各種処理に必要なデータおよびプログラムを記憶する記憶手段(格納手段)であり、特に本発明に密接に関連するものとしては、図4に示すように、XMLデータ150a、パスIDテーブル150b、BINデータ150c、クエリ木150d、イベント定義表150e、イベントテーブル150fを備える。
このうち、XMLデータ150aは、上述したように要素識別子「<」、「</」等により要素が区切られた階層構造を有する文書データである(図1参照)。パスIDテーブル150bは、XMLデータ150aに含まれるパスとパスID(Identification)とを対応付けたデータである。
図5は、パスIDテーブル150bのデータ構造の一例を示す図である。同図に示すように、このパスIDテーブル150bでは、パスとパスIDとが対応付けられており、例えば、パス「/Syain」はパスID「1」に対応付けられている。
BINデータ150cは、XMLデータ150aに含まれる各要素をパスIDテーブル150bのパスIDに置き換えたデータである。図6は、BINデータのデータ構造の一例を示す図である。例えば、XMLデータ150a(図1参照)の1段目に位置する「<Syain>シグマ戦隊中原ジャー」の「<Syain>」は、パスIDテーブル(図5参照)のパス「/Syain」(パスID「1」)に対応するため、BINデータ150cの1段目のように「[1シグマ戦隊中原ジャー」と変換される。このように、XMLデータ150aをBINデータ150cに変換することにより、パス照合におけるタグ階層の管理を省くことが出来る。
クエリ木150dは、クエリから構築されるクエリ木を記憶するデータであり、かかるクエリ木は複数のステップ構造体から構成される。ここで、ステップは、(軸、タグ名、述部)の三項組で表される(本実施例1では、軸は子供軸のみを取り扱う)。そして、例えば、「/A[B]/C[D or E]/F」と表されるクエリは、「A[B]」と「C[D or E]」と「F」という3つのステップを持つ。
図7は、ステップ構造体のデータ構造を説明するための図である。同図に示すように、このステップ構造体は、パスID(イベントID)と、述部ポインタと、次ステップポインタとを有する。このうち、述部ポインタは、述部を示すステップ構造体のポインタであり、次ステップポインタは、次ステップとなるステップ構図体のポインタである。なお、クエリ木のルートとなるステップ構造体を、Rootと表記し、Rootの次ステップ構造体で示されるステップ構造体を、クエリ木の「第2ステップ」と表記する。
ここで、クエリに対するクエリ木の一例を示す。図8および図9は、クエリ木の一例を示す図である。図8のクエリ木は、クエリ「/Syain/ACT/[chara/name]cast」(パスID表記では「2[5]6」によって表される;パスIDに関しては図5参照)のクエリ木を示している。同図に示すように、このクエリ木は、パスID「2,5,6」のステップ構造体から構成され、パスID「2」のステップ構造体の述部ポインタは、パスID「2」のステップ構造体に接続され、パスID「2」のステップ構造体の次ステップポインタは、パスID「6」のステップ構造体に接続されている。
そして、パスID「5,6」の述部ポインタおよび次ステップポインタはNull(⊥)に設定される。ここで、Nullは、配下に接続されるステップ構造体が存在しない旨を示す。図8において、パスID「2」のステップ構造体が「Root」となり、パスID「6」のステップ構造体が「第2ステップ」となる。なお、図8の右側の図は、図8の左側に示したクエリ木の簡易表記である。
図9のクエリ木は、クエリ「/Syain/[ACT[id]/chara]/ACT/cast」(パスID表記では「1[2[3]4]6」によって表される;パスIDに関しては図5参照)のクエリ木を示している。同図に示すように、このクエリ木は、パスID「1,2,3,4,6」のステップ構造体から構成され、パスID「1」のステップ構造体の述部ポインタは、パスID「2」のステップ構造体に接続され、パスID「2」のステップ構造体の述部ポインタは、パスID「3」のステップ構造体に接続されている。
また、パスID「1」のステップ構造体の次ステップポインタは、パスID「6」のステップ構造体に接続され、パスID「2」のステップ構造体の次ステップポインタは、パスID4のステップ構造体に接続されている。そして、パスID3,4,6の述部ポインタおよび次ステップポインタはNullに設定される。図9において、パスID1のイベント構造体が「Root」となり、パスID6のステップ構造体が「第2ステップ」となる。なお、図9の右側の図は、図9の左側に示したクエリ木の簡易表記である。
イベント定義表150eは、クエリに含まれるイベント種類とパスIDとを対応付けたデータである。図10は、イベント定義表150eのデータ構造の一例を示す図である。同図に示すように、このイベント定義表150eは、定義IDと、パスIDと、イベント種類とを対応付けて記憶している。なお、定義IDは、パスIDとイベント種類との組み合わせを識別する情報である。
イベント種類となる集合ETYPE(Q)は、パスヒットイベントZ1、・・・、Zn、クエリ開始イベントS、文脈ノードイベントCを有する。ここで、パスヒットイベントは、該当パスにヒットした旨を示すイベントであり、クエリ開始イベントは、クエリの開始パスにヒットした旨を示すイベントであり、文脈ノードイベントは、クエリの終了パスにヒットした旨を示すイベントである。
例えば、クエリが、
Q=/Syain/ACT[chara/name]/cast(パス表記では、2[5]6)
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,Z2,Z3}
と指定されている場合には、図10に示したイベント定義表150eが生成される。
イベントテーブル150fは、BINデータ150cおよびイベント定義表150eを基にして生成されるデータであり、イベント定義表150eにヒットしたBINデータの各種情報を記憶する。図11は、イベントテーブル150fのデータ構造の一例を示す図である。同図に示すように、このイベントテーブル150fは、イベントIDと、イベント種類と、オフセットとを対応付けて記憶している。このうち、イベントIDは、イベントを識別する情報であり、オフセットは、イベントが発生した時点のデータ位置を示す。
制御部160は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図4に示すように、BINデータ生成部160a、クエリ受信部160b、クエリ木構築部160c、クエリクラス判定部160d、イベントテーブル生成部160e、イベントテーブル集計部160f、分岐クエリ評価部160g、回答発信部160hを備える。
このうち、BINデータ生成部160aは、XMLデータ150aとパスIDテーブル150bとを比較して、XMLデータ150aに含まれる各要素をパスIDに置き換えることによりBINデータを生成する手段である。図12は、BINデータ生成部160aの処理を説明するための図である。
例えば、BINデータ生成部160aは、図12において、XMLデータ150aの1段目に位置する「<Syain>シグマ戦隊中原ジャー」の「<Syain>」は、パスIDテーブル150bのパス「/Syain」(パスID「1」)に対応するため、BINデータ150cの1段目を「[1シグマ戦隊中原ジャー」とする。BINデータ生成部160aは、他の段も同様に、パスIDテーブル150bと比較して、各要素をパスIDに置き換えていくことで、BINデータ150cを生成する。
クエリ受信部160bは、ネットワークを介して端末装置からクエリの情報を受信する手段である。クエリ受信部160bは、受信したクエリの情報をクエリ木構築部160cに出力する。クエリ木構築部160cは、クエリを基にしてクエリ木150d(図8、図9参照)を構築する手段である。
クエリクラス判定部160dは、クエリ木に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する手段である。検索装置100は、クエリが易クラスに属する場合には、階層管理を行うことなく、クエリに対応するデータを検索する。一方、検索装置100は、クエリが難クラスに属する場合には、従来と同様にして、階層管理を行うことで、クエリに対応するデータを検索する。
具体的に、クエリクラス判定部160dの説明を行うと、まず、クエリクラス判定部160dは、クエリ木の葉の数を検出する。ここで、クエリ木の「葉の数」とは、クエリ木(図8、図9参照)を構成するステップ構造体のうち、「葉」であるものの数を示す。図13は、クエリ木の葉の数を説明するための図である。
図13の左側は、クエリ「/Syain/ACT/[chara/name]/cast」のクエリ木を示し、かかるクエリ木の末端ノード(葉)の数が2つであるため、葉の数は、2つとなる。図13の右側は、クエリ「/Syain[ACT[id]/chara]/ACT/cast」のクエリ木を示し、かかるクエリ木の末端ノード(葉)の数が3つであるため、葉の数は、3つとなる。
続いて、クエリクラス判定部160dは、第1の条件および第2の条件に基づいて、クエリクラスの判定を行う。ここで、第1の条件は、「クエリの葉が1つである」という条件であり、第2の条件は、「クエリの葉の数が2つであり、かつ第2ステップが存在し、かつ第2ステップの述部ポインタおよび次ステップポインタが共にNullである」という条件である。
クエリクラス判定部160dは、クエリが第1の条件または第2の条件のいずれか一方で成り立つ場合に、クエリを易クラスに属すると判定する。一方、クエリクラス判定部160dは、クエリが第1の条件または第2の条件で成り立たない場合には、クエリを難クラスに属すると判定する。
ここで、クエリクラス判定部160dの説明を、図13を用いて説明すると、図13の左側に示すクエリ木は、葉の数が「2」であり、第2ステップの述部ポインタおよび次ステップポインタが共にNullであるため、第2の条件が成立する。従って、クエリクラス判定部160dは、クエリ「/Syain/ACT/[chara/name]/cast」が易クラスに属すると判定する。
また、図13の右側に示すクエリ木は、葉の数が「3」であるため、第1の条件および第2の条件が成立しない。従って、クエリクラス判定部160dは、クエリ「/Syain[ACT[id]/chara]/ACT/cast」が難クラスに属すると判定する。
図14は、葉の数は「2」であるが難クラスに属するクエリの例を示す図である。図14の左側は、クエリ「/A[B]C[D]」のクエリ木を示す。かかるクエリ木は、葉の数が「2」であるが、第2ステップの述部ポインタがNullではないため、第1の条件および第2の条件が成立しない。従って、クエリクラス判定部160dは、クエリ「/A[B]C[D]」が難クラスに属すると判定する。
例えば、図14の右側に示すBINデータからクエリ「/A[B]C[D]」に対応するデータを検索する場合には、論理式評価のみで簡易に評価できない。なぜなら、BINデータ中のC1が解でないことを正しく計算するためには、文脈候補(C1とC2)ごとに、Dの存在の有無を管理しなければならない(階層管理する必要がある)。従って、クエリ「/A[B]C[D]」は、難クエリに属することとなる。
イベントテーブル生成部160eは、クエリクラス判定部160dから判定結果を取得し、クエリが易クラスに属していると判定されている場合に、クエリからイベント定義表150e(図10参照)を生成すると共に、BINデータ150cとイベント定義表150eとを比較することで、イベントテーブル150f(図11参照)を生成する手段である。
まず、イベントテーブル生成部160eがイベント定義表150eを生成する場合の処理について説明すると、イベントテーブル生成部160eは、例えば、クエリが、
Q=/Syain/ACT[chara/name]/cast(パスID表記では2[5]6)
と指定され、イベント種類の集合が
ETYPE(Q)={Z1,Z2,Z3}
と指定されている場合には、クエリのパスIDと、イベント種類の集合を対応させることにより、図10に示したイベント定義表150eを生成する。
上記の条件では、パスID「2」がイベント種類「Z1」に対応し、パスID「5」がイベント種類「Z2」に対応し、パスID「6」がイベント種類「Z3」に対応する。また、パスID「2」は、クエリの開始パスであるため、イベント種類に「S」を含ませる。パスID「6」は、クエリの終了パスであるため、イベント種類に「C」を含ませる。
続いて、イベントテーブル生成部160eがイベントテーブル150fを生成する場合の処理について説明する。図15は、イベントテーブル生成部160eの処理を説明するための図である。同図に示すように、イベントテーブル生成部160eは、BINデータ150cを1文字ずつスキャンして、タグ開始記号「[」を検出するたびに、オフセットの値を1だけ加算する。なお、本実施例1では、説明の便宜上、オフセットの値を、イベントが発生した際の、ノードのノードID(図2参照)をオフセットとする。
また、イベントテーブル生成部160eは、タグ開始記号「[」の後ろ(直後)に、イベント定義表150eに含まれるパスIDを検出した場合には、IDに1を加算して、イベントテーブルに現在のID、イベント種類、オフセットを登録する。下記において、イベントテーブル生成部160eの処理を、図15を用いて説明する。
まず、BINデータ150cの位置「1001」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1002」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「2」が検出されるので、イベント(1)が発生し、イベントテーブル生成部160eは、ID「1」、イベント種類「Z1、S」、オフセット「3」(図2のノードID「3」のACTに対応)をイベントテーブル150fに登録する。
BINデータ150cの位置「1003」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1004」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1005」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「5」が検出され、イベント(2)が発生し、イベントテーブル生成部160eは、ID「2」、イベント種類「Z2」、オフセット「7」(図2のノードID「7」のnameに対応)をイベントテーブル150fに登録する。
BINデータ150cの位置「1006」において、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1007」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「6」が検出されるので、イベント(3)が発生し、イベントテーブル生成部160eは、イベントID「3」、イベント種類「Z3、C」、オフセット「9」(図2のノードID「9」のcastに対応)をイベントテーブル150fに登録する。
BINデータ150cの位置「1008」において、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1009」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1010」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。
BINデータ150cの位置「1011」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「2」が検出されるので、イベント(1)が発生し、イベントテーブル生成部160eは、イベントID「4」、イベント種類「Z1、S」、オフセット「12」(図2のノードID「12」のACTに対応)をイベントテーブル150fに登録する。BINデータ150cの位置「1012」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。
BINデータ150cの位置「1013」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1014」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「5」が検出されるので、イベント(2)が発生し、イベントテーブル生成部160eは、イベントID「5」、イベント種類「Z2」、オフセット「16」(図2のノードID「16」のnameに対応)をイベントテーブル150fに登録する。
BINデータ150cの位置「1015」において、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1016」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「6」が検出されるので、イベント(3)が発生し、イベントテーブル生成部160eは、イベントID「6」、イベント種類「Z3、C」、オフセット「18」(図2のノードID「18」のcastに対応)をイベントテーブル150fに登録する。
BINデータ150cの位置「1017」において、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1018」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1019」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。
BINデータ150cの位置「1020」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「2」が検出されるので、イベント(1)が発生し、イベントテーブル生成部160eは、イベントID「7」、イベント種類「Z1、S」、オフセット「21」(図2のノードID「21」のACTに対応)をイベントテーブル150fに登録する。BINデータ150cの位置「1021」において、イベント定義表150eに含まれるパスIDは検出されない。
BINデータ150cの位置「1022」において、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1023」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「5」が検出されるので、イベント(2)が発生し、イベントテーブル生成部160eは、イベントID「8」、イベント種類「Z2」、オフセット「25」(図2のノードID「25」のnameに対応)をイベントテーブル150fに登録する。
BINデータ150cの位置「1024」において、イベント定義表150eに含まれるパスIDは検出されない。BINデータ150cの位置「1025」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスID「6」が検出されるので、イベント(3)が発生し、イベントテーブル生成部160eは、イベントID「9」、イベント種類「Z3、C」、オフセット「27」(図2のノードID「27」のcastに対応)をイベントテーブル150fに登録する。
なお、BINデータ150cの位置「1026」〜「1029」において、タグ開始記号「[」の後に、イベント定義表150eに含まれるパスIDは検出されない。このように、イベントテーブル生成部160eが、BINデータ150cの位置「1001」〜「1029」と、イベント定義表150eとを比較することで、イベントテーブル150fを生成する。
イベントテーブル集計部160fは、イベントテーブル150fの各種情報を集計することにより、クエリに対応するデータの位置(オフセット)を検出する手段である。そして、イベントテーブル集計部160fは、検出した情報を回答発信部160hに出力する。
図16は、イベントテーブル集計部160fの処理を説明するための図である。図4において、ビットベクトル(Tupleベクトル)は、所定のイベントが存在するか否かを管理するためのベクトルである。
本実施例1にかかるビットベクトルは、一例として、クエリ開始イベントS以外のイベント(2)、(3)が存在するか否かを管理する。従って、第1の要素と第2の要素からなる2次元のベクトルとなり、イベント(2)(Z2に対応)が存在する場合には、第1の要素にビットを立てる。一方、イベント(3)(Z3に対応)が存在する場合には、第2の要素にビットを立てる。
イベントテーブル集計部160fは、イベントテーブル150fを集計していく過程において、イベント種類「S」を検出し、ビットベクトルが(1,1)となっている場合(クエリの照合位置にヒットした場合)に、Ansリストに登録された値を出力し、ビットベクトルを初期化する。
また、イベントテーブル集計部160fは、イベント種類「C」を検出した場合には、かかるイベントに対応するオフセットの値をAnsリストに登録する。なお、Ansリストの初期値は「φ」に設定されている。以下において、イベントテーブル集計部160fの処理を、図16を用いて説明する。イベントテーブル集計部160fは、ID「1」から順に、イベントテーブル150fの集計を行う。
イベントテーブル集計部160fは、イベントテーブル150fのID「1」において、イベント種類「Z1」および「S」を検出する。しかし、ビットベクトルが(0,0)となっているため、Ansリストのオフセットを出力しない。
イベントテーブル集計部160fは、イベントテーブル150fのID「2」において、イベント種類「Z2」を検出する。従って、イベントテーブル集計部160fは、ビットベクトルを(1,0)に設定する。
イベントテーブル集計部160fは、イベントテーブル150fのID「3」において、イベント種類「Z3」および「C」を検出する。従って、イベントテーブル集計部160fは、ビットベクトルを(1,1)に設定し、オフセット「9」をAnsリストに登録する。
イベントテーブル集計部160fは、イベントテーブル150fのID「4」において、イベント種類「Z1」および「S」を検出し、かつビットベクトルが(1,1)に設定されているため、Ansリストの値「9」を出力する。そして、イベント集計部160fは、ビットベクトルおよびAnsリストを初期化する。
イベントテーブル集計部160fは、イベントテーブル150fのID「5」において、イベント種類「Z2」を検出する。従って、イベントテーブル集計部160fは、ビットベクトルを(0,1)に設定する。
イベントテーブル集計部160fは、イベントテーブル150fのID「6」において、イベント種類「Z3」および「C」を検出する。従って、イベントテーブル集計部160fは、ビットベクトルを(1,1)に設定し、オフセット「18」をAnsリストに登録する。
イベントテーブル集計部160fは、イベントテーブル150fのID「7」において、イベント種類「Z1」および「S」を検出し、かつビットベクトルが(1,1)に設定されているため、Ansリストの値「18」を出力する。そして、イベント集計部160fは、ビットベクトルおよびAnsリストを初期化する。
イベントテーブル集計部160fは、イベントテーブル150fのID「8」において、イベント種類「Z2」を検出する。従って、イベントテーブル集計部160fは、ビットベクトルを(0,1)に設定する。
イベントテーブル集計部160fは、イベントテーブル150fのID「9」において、イベント種類「Z3」および「C」を検出する。従って、イベントテーブル集計部160fは、ビットベクトルを(1,1)に設定し、オフセット「27」をAnsリストに登録する。
なお、ID「9」においてイベント列が終了するので、ビットベクトルのチェックおよびAnsリストの出力を実行する。図16に示す例では、ビットベクトルを(1,1)に設定されているので、イベントテーブル集計部160fは、Ansリストの値「27」が出力される。イベントテーブル集計部160fは、ビットベクトルが(0,0)、(1,0)、(0,1)に設定されている場合には、Ansリストの値を出力しない。
図4の説明に戻ると、分岐クエリ評価部160gは、クエリクラス判定部160dによって、クエリが難クラスに属すると判定された場合に、周知技術(例えば、非特許文献1)の手法を用いて、クエリに対応するデータをXMLデータ150aから検索する手段である。
すなわち、分岐クエリ評価部160gは、XMLデータ150aをスキャンして、クエリを評価するための階層リストを構築し、構築した階層リスト構造をスキャンして、XMLデータ150a内のクエリの照合位置の組み合わせを求めることで、最終的な回答の位置を検出し、検出結果を回答発信部160hに出力する。
回答発信部160hは、クエリに対応するデータを端末装置(クエリを送信した端末装置)に出力する手段である。具体的に、回答発信部160hは、イベントテーブル集計部160fから、集計結果となるオフセット(クエリの照合位置)の情報を取得した場合には、取得したオフセットと、BINデータ150cとを比較することによって、オフセットに対応するデータを検出し、検出結果を端末装置に出力する。また、回答発信部160hは、分岐クエリ評価部160gから検出結果を取得した場合には、取得した検出結果を端末装置に出力する。
次に、本実施例1にかかる検索装置100の処理手順について説明する。図17は、本実施例1にかかる検索装置100の処理手順を示すフローチャートである。同図に示すように、本実施例1にかかる検索装置100は、端末装置からクエリの情報を取得した場合に、クエリ木構築部160cがクエリ木150dを生成し(ステップS101)、クエリクラス判定部160dがクエリクラス判定処理を実行する(ステップS102)。
そして、クエリが易クラスに属すると判定された場合には(ステップS103,Yes)、イベントテーブル生成部160eがイベントテーブル生成処理を実行し(ステップS104)、イベントテーブル集計部160fがイベント集計処理を実行し(ステップS105)、回答発信部160hが、検出結果を端末装置に出力する(ステップS106)。
一方、クエリクラス判定部160dによって、クエリが難クラスに属すると判定された場合には(ステップS103,No)分岐クエリ評価部160gが階層リスト構造を構築し(ステップS107)、階層リスト構造をスキャンして、クエリの埋め込みを求めることにより文脈ノードを検出し(ステップS108)、ステップS106に移行する。
次に、図17のステップS102に示したクエリクラス判定処理について説明する。このクエリクラス判定処理は、主手続きと副手続きが存在する。図18は、クエリクラス判定処理の主手続きを示すフローチャートであり、図19は、クエリクラス判定処理の副手続きを示すフローチャートである。
図18に示すように、クエリクラス判定部160dは、S=Rootと初期化し、Numleaf=0と初期化し(ステップS201)、Sの次ステップポインタが存在するか否かを判定し(ステップS202)、次ステップポインタが存在しない場合には(ステップS203,No)、Sの述部ポインタが存在するか否かを判定する(ステップS204)。
そして、Sの述部ポインタが存在する場合には(ステップS205,Yes)、Sの述部ポインタに対応するステップ構造体を入力として、副手続きを実行し(ステップS206)、ステップS208に移行する。
一方、Sの述部ポインタが存在しない場合には(ステップS205,No)、Numleafに1を加算し(ステップS207)、Numleafの値が1以下か否かを判定する(ステップS208)。そして、Numleafの値が1以下となる場合には(ステップS209,Yes)、クエリクラス判定部160dは、クエリを易クラスと判定する(ステップS210)。一方、Numleafの値が1よりも大きい場合には(ステップS209,No)、クエリクラス判定部160dは、クエリを難クラスと判定する(ステップS211)。
ところで、ステップS203に戻ると、Sの次ステップポインタが存在する場合には(ステップS203,Yes)、Sの述部ポインタが存在するか否かを判定し(ステップS212)、Sの述部ポインタが存在しない場合には(ステップS213,No)、ステップS215に移行する。
一方、Sの述部ポインタが存在する場合には(ステップS213,Yes)、Sの述部ポインタに対応するステップ構造体を入力として、副手続きを実行し(ステップS214)、Sの次ステップポインタをSに代入する(ステップS215)。
そして、クエリクラス判定部160dは、Sに次ステップポインタまたは述部ポインタが存在するか否かを判定し(ステップS216)、存在しない場合には(ステップS217,No)、ステップS208に移行する。一方、Sに次ステップポインタまたは述部ポインタが存在する場合には(ステップS217,Yes)、ステップS211に移行する。
次に、ステップS206およびステップS214に示した副手続きについて説明する。図19に示すように、クエリクラス判定部160dは、副手続きにおいて、Sに部分木のルート構造体(ステップ構造体)を代入し(ステップS301)、Sの次ステップポインタが存在するか否かを判定する(ステップS302)。
Sの次ステップポインタが存在しない場合には(ステップS303,No)、Sの述部ポインタが存在するか否かを判定し(ステップS304)、Sの述部ポインタが存在する場合には(ステップS305,Yes)、Sの述部ポインタに対するステップ構造体を入力として、副手続きを実行し(ステップS306)、副手続きを終了する。一方、Sの述部ポインタが存在しない場合には(ステップS305,No)、Numleafに1を加算し(ステップS307)、副手続きを終了する。
ところで、ステップS303の説明に戻ると、Sの次ステップポインタが存在する場合に(ステップS303,Yes)、Sの述部ポインタが存在するか否かを判定し(ステップS308)、Sの述部ポインタが存在しない場合には(ステップS309,No)、ステップS311に移行する。
一方、Sの述部ポインタが存在する場合には(ステップS309,Yes)、Sの述部ポインタに対応するステップ構造体を入力として、副手続きを実行し(ステップS310)、Sの次ステップポインタをSに代入し(ステップS311)、ステップS302に移行する。なお、図19のステップS306およびステップS310に示した副手続きは、図19と同様の副手続きを再度実行する。
次に、図17のステップS104に示したイベントテーブル生成処理について説明する。図20は、イベントテーブル生成処理の処理手順を示すフローチャートである。同図に示すように、イベントテーブル生成部160eは、イベントテーブル150fを空テーブルとして初期化し、オフセットを初期化する(ステップS401)。
そして、イベントテーブル生成部160eは、BINデータ150cを1文字ずつスキャンし、タグ開始記号「[」を検出するたびに、オフセットに1を加算する。また、タグ開始記号「[」の直後に、イベント定義表150eに含まれるパスIDを検出した場合に、イベントテーブルのIDに1を加算し、イベントテーブルに(ID、イベント種類、オフセット)を登録し(ステップS402)、イベントテーブルを出力する(ステップS403)。
次に、図17のステップS105に示したイベント集計処理について説明する。図21は、イベント集計処理の処理手順を示すフローチャートである。同図に示すように、イベントテーブル集計部160fは、ビットベクトル(Tupleベクトル)および文脈ノードリスト(Ansリスト)を初期化し(ステップS501)、全イベントの処理が終了したか否かを判定する(ステップS502)。
そして、全イベントの処理が終了している場合には(ステップS503,Yes)、ビットベクトルの全要素が1か否かを判定し(ステップS504)、全要素が1の場合には(ステップS505,Yes)、文脈ノードリストを出力し(ステップS506)、イベント集計処理を終了する。一方、全要素が1ではない場合には(ステップS505,No)、そのままイベント集計処理を終了する。
ところで、ステップS503に戻ると、全イベントの処理が終了していない場合には(ステップS503,No)、イベントテーブル150fから次のイベントを取得し(ステップS507)、イベント種類がSか否かを判定する(ステップS508)。
イベント種類がSではない場合には(ステップS509,No)、ビットベクトルの該当要素を1に設定する。また、イベント種類がCの場合には、オフセットを文脈ノードリストに追加し(ステップS510)、ステップS502に移行する。
一方、イベント種類がSの場合には(ステップS509,Yes)、ビットベクトルの全要素が1か否かを判定し(ステップS511)、全要素が1ではない場合には(ステップS512,No)、ステップS514に移行する。
一方、ビットベクトルの全要素が1の場合には(ステップS512,Yes)、文脈ノードリストを出力し(ステップS513)、ビットベクトルおよび文脈ノードリストを初期化し(ステップS514)、ステップS502に移行する。
上述してきたように、本実施例1にかかる検索装置100は、クエリクラス判定部160dが、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部160dが易クラスに属すると判定した場合に、イベントテーブル生成部160eがイベント定義表150eおよびイベントテーブル150fを生成し、イベントテーブル集計部160fがイベントテーブル150fを集計することによりクエリに対応するデータを検索するので、クエリが易クラスに属する場合に、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
なお、実際に利用されるクエリの多くは、階層管理が不要な易クラスに属していることが現状であり、難クラスに属していることは稀であるため、本実施例1にかかる検索装置100の実用上の効果は大きいと考えられる。
次に、上述した実施例1にかかる検索装置に対する第1の拡張例(文字列の部分一致への拡張)を実施例2として説明する。本実施例2にかかる検索装置が利用するクエリは、文字列を含む。そして、実施例1で示したクエリの定義「Expr::=RPath」は、文字列の部分一致を扱えるように、下記のように拡張される。
Expr::=RPath|contains(RPath,string)
例えば、クエリが、
Q3=/Syain/ACT[contains(chara/name,"レッド")]/cast
と指定された場合には、図2に示した各ノードのうち、要素ノードcast9のデータ(図3の回答B)を取得することが出来る。上記のクエリQ3は、/Syain/ACT要素(要素ノードACT3,12,21)のうち、その要素ノードのchara要素が文字列「レッド」を含む要素ノード(要素ノードACT3)のcast要素(要素ノードcast9)を回答するクエリである。
次に、本実施例2にかかる検索装置の構成について説明する。図22は、本実施例2にかかる検索装置200の構成を示す機能ブロック図である。同図に示すように、この検索装置200は、入力部210と、出力部220と、通信制御IF部230と、入出力制御IF部240と、記憶部250と、制御部260とを備えて構成される。
このうち、入力部210は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したXMLデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ(出力部220)も、マウスと協働してポインティングデバイス機能を実現する。
出力部220は、各種の情報を出力する出力手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成され、例えば、上述したXMLデータに関する各種の情報を出力する。
通信制御IF部230は、端末装置との間における通信を制御する手段である。入出力制御IF部240は、入力部210、出力部220、通信制御IF部230、記憶部250、制御部260によるデータの入出力を制御する手段である。
記憶部250は、制御部260による各種処理に必要なデータおよびプログラムを記憶する記憶手段(格納手段)であり、特に本発明に密接に関連するものとしては、図22に示すように、XMLデータ250a、パスIDテーブル250b、BINデータ250c、クエリ木250d、イベント定義表250e、イベントテーブル250fを備える。
このうち、XMLデータ250a、パスIDテーブル250b、BINデータ250c、クエリ木250dは、実施例1に示したXMLデータ150a、パスIDテーブル150b、BINデータ150c、クエリ木150dと同様であるため、説明を省略する。
イベント定義表250eは、クエリに含まれるイベント種類とパスIDとを対応付けたデータである。図23は、本実施例2にかかるイベント定義表250eのデータ構造の一例を示す図である。同図に示すように、このイベント定義表250eは、定義IDと、パスIDと、イベント種類とを対応付けて記憶している。なお、定義IDは、パスIDとイベント種類との組み合わせを識別する情報である。
イベント種類となる集合ETYPE(Q)は、パスヒットイベントZ1、・・・、Zn(クエリに含まれるパスIDのうち、contains内のパスID以外の全てのパスIDに対応付ける)、パス+キーワードヒットイベントA1、・・・、Am、クエリ開始イベントS、文脈ノードイベントCを有する。ここで、パス+キーワードヒットイベントは、該当キーワードにヒットした旨を示すイベントである。
例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド")]/cast(パス表記では、/2[contains(5,レッド)]6)
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2}
と指定されている場合には、図23に示したイベント定義表が生成される。
イベントテーブル250fは、クエリから生成されるオートマトンにBINデータ250cを代入し、イベントが発生した場合に、かかるイベントの情報(イベントID、イベント種類、オフセット)を記憶するデータである。図24は、本実施例2にかかるイベントテーブル250fのデータ構造の一例を示す図である。同図に示すように、このイベントテーブル250fは、イベントID、イベント種類、オフセットを対応付けて記憶している。
制御部260は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図22に示すように、BINデータ生成部260a、クエリ受信部260b、クエリ木構築部260c、クエリクラス判定部260d、イベントテーブル生成部260e、イベントテーブル集計部260f、分岐クエリ評価部260g、回答発信部260hを備える。
このうち、BINデータ生成部260a、クエリ受信部260b、クエリ木構築部260c、クエリクラス判定部260d、分岐クエリ評価部260g、回答発信部260hは、図4に示した、BINデータ生成部160a、クエリ受信部160b、クエリ木構築部160c、クエリクラス判定部160d、分岐クエリ評価部160g、回答発信部160hと同様であるため、説明を省略する。
イベントテーブル生成部260eは、クエリクラス判定部260dから判定結果を取得し、クエリが易クラスに属していると判定されている場合に、クエリからイベント定義表250e(図23参照)を生成すると共に、クエリのオートマトンを利用してイベントテーブル250f(図24参照)を生成する手段である。
まず、イベントテーブル生成部260eがイベント定義表250eを生成する処理について説明すると、イベントテーブル生成部260eは、例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド")]/cast(パス表記では、/2[contains(5,レッド)]6)
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2}
と指定されている場合には、クエリのパスIDおよび文字列と、イベント種類の集合を対応させることにより、図23に示したイベント定義表250eを生成する。
上記の条件では、パスID「2」がイベント種類「Z1」に対応し、パスID、文字列「[contains(5,レッド)]」がイベント種類「A1」に対応し、パスID「6」がイベント種類「Z2」に対応する。また、パスID「2」は、クエリの開始パスであるため、イベント種類に「S」を含ませる。パスID「6」は、クエリの終了パスであるため、イベント種類に「C」を含ませる。
続いて、イベントテーブル生成部260eがイベントテーブル250fを生成する場合の処理について説明する。イベントテーブル生成部260eは、イベントテーブル250fを生成する前準備として、クエリのオートマトンを生成する。なお、イベントテーブル生成部260eがクエリからオートマトンを生成する場合には、例えば、特願2007−195081に記載された手法を用いれば良い。
図25は、本実施例2にかかるクエリのオートマトンのデータ構造の一例を示す図である。図25に示すオートマトンは、クエリ「/Syain/ACT[contains(chara/name,"レッド")]/cast(パス表記では、/2[contains(5,レッド)]6)」から生成されるオートマトンである。このオートマトンは、複数のノード構造体50〜55、イベント構造体60〜62を有する。なお、図25の「ε」は、無条件で矢印の方向に処理が移行することを示す。
イベントテーブル生成部260eは、図25に示したオートマトンにBINデータ250cを順次代入することで、イベントテーブル250fを生成する。以下において、イベントテーブル生成部260eが、イベントテーブル250fを生成する処理を、図26のBINデータ250cの位置「1001」〜「1029」に分けて説明する。図26は、本実施例2にかかるイベントテーブル生成部260eの処理を説明するための図である。なお、イベントテーブル生成部260eは、実施例1と同様にして、オフセットの値を、イベントが発生した際の、ノードのノードID(図2参照)をオフセットとする。
(BINデータ250cの位置「1001」)
イベントテーブル生成部260eは、BINデータ250cの位置「1001」に対応するデータ「[1シグマ戦隊中原ジャー」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1001」の検索を終了する。
(BINデータ250cの位置「1002」)
イベントテーブル生成部260eは、BINデータ250cの位置「1002」に対応するデータ「[2」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、イベント構造体60に到達する。イベント構造体60に到達した時点で、イベント(1)(イベント定義ID(1))が発生し、イベントテーブル生成部260eは、イベントID「1」、イベント種類「Z1、S」、オフセット「3」をイベントテーブル250fに登録する。なお、イベント種類は、イベント定義IDと、イベント定義表250e(図23参照)を比較することで特定される。
(BINデータ250cの位置「1003」)
イベントテーブル生成部260eは、BINデータ250cの位置「1003」に対応するデータ「[31]3」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1003」の検索を終了する。
(BINデータ250cの位置「1004」)
イベントテーブル生成部260eは、BINデータ250cの位置「1004」に対応するデータ「[4」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1004」の検索を終了する。
(BINデータ250cの位置「1005」)
イベントテーブル生成部260eは、BINデータ250cの位置「1005」に対応するデータ「[5シグマレッド]5」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、イベント構造体61に到達する。イベント構造体61に到達した時点で、イベント(2)が発生し、イベントテーブル生成部260eは、イベントID「2」、イベント種類「A1」、オフセット「8」をイベントテーブル250fに登録する。
(BINデータ250cの位置「1006」)
イベントテーブル生成部260eは、BINデータ250cの位置「1006」に対応するデータ「]4」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体51に移行した段階で、ノード構造体50に戻り、位置「1006」の検索を終了する。
(BINデータ250cの位置「1007」)
イベントテーブル生成部260eは、BINデータ250cの位置「1007」に対応するデータ「[6」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、イベント構造体62に到達する。イベント構造体62に到達した時点で、イベント(3)が発生し、イベントテーブル生成部260eは、イベントID「3」、イベント種類「Z2、C」、オフセット「9」をイベントテーブル250fに登録する。
(BINデータ250cの位置「1008」)
イベントテーブル生成部260eは、BINデータ250cの位置「1008」に対応するデータ「[7浅井達哉]7」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1008」の検索を終了する。
(BINデータ250cの位置「1009」)
イベントテーブル生成部260eは、BINデータ250cの位置「1009」に対応するデータ「]6」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体51に移行した段階で、ノード構造体50に戻り、位置「1009」の検索を終了する。
(BINデータ250cの位置「1010」)
イベントテーブル生成部260eは、BINデータ250cの位置「1010」に対応するデータ「]2」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体51に移行した段階で、ノード構造体50に戻り、位置「1010」の検索を終了する。
(BINデータ250cの位置「1011」)
イベントテーブル生成部260eは、BINデータ250cの位置「1011」に対応するデータ「[2」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、イベント構造体60に到達する。イベント構造体60に到達した時点で、イベント(1)が発生し、イベントテーブル生成部260eは、イベントID「4」、イベント種類「Z1、S」、オフセット「12」をイベントテーブル250fに登録する。
(BINデータ250cの位置「1012」)
イベントテーブル生成部260eは、BINデータ250cの位置「1012」に対応するデータ「[32]3」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体50に戻り、位置「1012」の検索を終了する。
(BINデータ250cの位置「1013」)
イベントテーブル生成部260eは、BINデータ250cの位置「1013」に対応するデータ「[4」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体50に戻り、位置「1013」の検索を終了する。
(BINデータ250cの位置「1014」)
イベントテーブル生成部260eは、BINデータ250cの位置「1014」に対応するデータ「[5シグマブルー]5」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体50に戻り、位置「1014」の検索を終了する。
(BINデータ250cの位置「1015」)
イベントテーブル生成部260eは、BINデータ250cの位置「1015」に対応するデータ「]4」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体51に移行した段階で、ノード構造体50に戻り、位置「1015」の検索を終了する。
(BINデータ250cの位置「1016」)
イベントテーブル生成部260eは、BINデータ250cの位置「1016」に対応するデータ「[6」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、イベント構造体62に到達する。イベント構造体62に到達した時点で、イベント(3)が発生し、イベントテーブル生成部260eは、イベントID「5」、イベント種類「Z2、C」、オフセット「18」をイベントテーブル250fに登録する。
(BINデータ250cの位置「1017」)
イベントテーブル生成部260eは、BINデータ250cの位置「1017」に対応するデータ「[7多湖真一郎]7」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1017」の検索を終了する。
(BINデータ250cの位置「1018」)
イベントテーブル生成部260eは、BINデータ250cの位置「1018」に対応するデータ「]6」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体51に移行した段階で、ノード構造体50に戻り、位置「1018」の検索を終了する。
(BINデータ250cの位置「1019」)
イベントテーブル生成部260eは、BINデータ250cの位置「1019」に対応するデータ「]2」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体51に移行した段階で、ノード構造体50に戻り、位置「1019」の検索を終了する。
(BINデータ250cの位置「1020」)
イベントテーブル生成部260eは、BINデータ250cの位置「1020」に対応するデータ「[2」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、イベント構造体60に到達する。イベント構造体60に到達した時点で、イベント(1)が発生し、イベントテーブル生成部260eは、イベントID「6」、イベント種類「Z1、S」、オフセット「21」をイベントテーブル250fに登録する。
(BINデータ250cの位置「1021」)
イベントテーブル生成部260eは、BINデータ250cの位置「1021」に対応するデータ「[33]3」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1021」の検索を終了する。
(BINデータ250cの位置「1022」)
イベントテーブル生成部260eは、BINデータ250cの位置「1022」に対応するデータ「[4」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1022」の検索を終了する。
(BINデータ250cの位置「1023」)
イベントテーブル生成部260eは、BINデータ250cの位置「1023」に対応するデータ「[5シグマピンク]5」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体52に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体50に戻り、位置「1023」の検索を終了する。
(BINデータ250cの位置「1024」)
イベントテーブル生成部260eは、BINデータ250cの位置「1024」に対応するデータ「]4」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、ノード構造体51に移行した段階で、ノード構造体50に戻り、位置「1024」の検索を終了する。
(BINデータ250cの位置「1025」)
イベントテーブル生成部260eは、BINデータ250cの位置「1025」に対応するデータ「[6」をオートマトンに代入する。すると、かかるデータは、ノード構造体50を始点とし、イベント構造体62に到達する。イベント構造体62に到達した時点で、イベント(3)が発生し、イベントテーブル生成部260eは、イベントID「7」、イベント種類「Z2、C」、オフセット「27」をイベントテーブル250fに登録する。
(BINデータ250cの位置「1026」〜「1029」)
なお、BINデータ250cの位置「1026」〜「1029」において、イベントは発生しない。このように、イベントテーブル生成部260eは、BINデータ250cの位置「1001」〜「1029」のデータを、オートマトンに代入することで、イベントテーブル250fを生成する。
イベントテーブル集計部260fは、イベントテーブル250fの各種情報を集計することにより、クエリに対応するデータの位置(オフセット)を検出する手段である。そして、イベントテーブル集計部260fは、検出した情報を回答発信部260hに出力する。
図27は、本実施例2にかかるイベントテーブル集計部260fの処理を説明するための図である。図27において、ビットベクトル(Tupleベクトル)は、所定のイベントが存在するか否かを管理するためのベクトルである。
本実施例2にかかるビットベクトルは、一例として、クエリ開始イベントS以外のイベント(2)、(3)が存在するか否かを管理する。従って、ビットベクトルは、第1の要素と第2の要素からなる2次元のベクトルとなり、イベント(2)(A1に対応)が存在する場合には、第1の要素にビットを立てる。一方、イベント(3)(Z2に対応)が存在する場合には、第2の要素にビットを立てる。
そして、イベントテーブル集計部260fは、イベントテーブル250fを集計していく過程において、イベント種類「S」を検出し、ビットベクトルが(1,1)となっている場合(クエリの照合位置にヒットした場合)に、Ansリストに登録された値を出力し、ビットベクトルを初期化する。
また、イベントテーブル集計部260fは、イベント種類「C」を検出した場合には、かかるイベントに対応するオフセットの値をAnsリストに登録する。なお、Ansリストの初期値は「φ」に設定されている。以下において、イベントテーブル集計部260fの処理を、図27を用いて説明する。イベントテーブル集計部260fは、ID「1」から順に、イベントテーブル250fの集計を行う。
イベントテーブル集計部260fは、イベントテーブル250fのID「1」において、イベント種類「Z1」および「S」を検出する。しかし、ビットベクトルが(0,0)となっているため、Ansリストを出力しない。
イベントテーブル集計部260fは、イベントテーブル250fのID「2」において、イベント種類「A1」を検出する。従って、イベントテーブル集計部260fは、ビットベクトルを(1,0)に設定する。
イベントテーブル集計部260fは、イベントテーブル250fのID「3」において、イベント種類「Z2」および「C」を検出する。従って、イベントテーブル集計部260fは、ビットベクトルを(1,1)に設定し、オフセット「9」をAnsリストに登録する。
イベントテーブル集計部260fは、イベントテーブル250fのID「4」において、イベント種類「Z1」および「S」を検出し、かつビットベクトルが(1,1)に設定されているため、Ansリストの値「9」を出力する。そして、イベント集計部260fは、ビットベクトルおよびAnsリストを初期化する。
イベントテーブル集計部260fは、イベントテーブル250fのID「5」において、イベント種類「Z2」および「C」を検出する。従って、イベントテーブル集計部260fは、ビットベクトルを(0,1)に設定し、オフセット「18」をAnsリストに登録する。
イベントテーブル集計部260fは、イベントテーブル250fのID「6」において、イベント種類「Z1」および「S」を検出する。しかし、ビットベクトルが(0,1)となっているため、Ansリストのオフセットを出力することなく、ビットベクトルおよびAnsリストを初期化する。
イベントテーブル集計部260fは、イベントテーブル250fのID「7」において、イベント種類「Z2」および「C」を検出する。従って、イベントテーブル集計部260fは、ビットベクトルを(0,1)に設定し、オフセット「27」をAnsリストに登録する。
なお、ID「7」においてイベント列が終了するので、ビットベクトルのチェックおよびAnsリストの出力を実行する。図27に示す例では、ビットベクトルを(0,1)に設定されているので、イベントテーブル集計部260fは、Ansリストの値を出力しない。
上述してきたように、本実施例2にかかる検索装置200は、クエリクラス判定部260dが、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部260dが易クラスに属すると判定した場合に、イベントテーブル生成部260eがクエリのオートマトンを作成して、BINデータ250cを代入することでイベントテーブル250fを生成し、イベントテーブル集計部260fがイベントテーブル250fを集計することによりクエリに対応するデータを検索するので、クエリに文字列が含まれる場合であっても、クエリが易クラスに属する場合に、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
次に、上述した実施例1にかかる検索装置に対する第2の拡張例(論理式への拡張)を実施例3として説明する。本実施例3にかかる検索装置が利用するクエリは、論理式を含む。そして、実施例1で示したクエリの定義「Pred::=Expr」は、論理式を扱えるように、下記のように拡張される。
Pred::=Expr|Expr "and" Expr|Expr "or" Expr|"not" Expr
Step::=Axis"::"Ntest("["Pred"]")*
ここで、Step行における「*」は、0回以上の繰り返しを表す。なお、Predの2回以上の繰り返しは、andと同じ意味になる。例えば、クエリ「/A[B][C]」と、クエリ「/A[B and C]」の意味は同じである。
例えば、クエリが、
Q4=/Syain/ACT[contains(chara/name,レッド)or cast]/id
と指定された場合には、図2に示した各ノードのうち、論理条件を満たす要素ノードid4、13、22のデータ(図3の回答G、回答H,回答I)を取得することが出来る。上記のクエリQ4は、/Syain/ACT要素(要素ノードACT3,12,21)のうち、その要素ノードのchara要素が文字列「レッド」を含む要素ノード(要素ノードACT3)あるいは要素ノードcastを含む要素ノード(要素ノードACT3,12,21)のid要素(要素ノードid4,13,22)を回答するクエリである。
次に、本実施例3にかかる検索装置の構成について説明する。図28は、本実施例3にかかる検索装置の構成を示す機能ブロック図である。同図に示すように、この検索装置300は、入力部310と、出力部320と、通信制御IF部330と、入出力制御IF部340と、記憶部350と、制御部360とを備えて構成される。
このうち、入力部310は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したXMLデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ(出力部320)も、マウスと協働してポインティングデバイス機能を実現する。
出力部320は、各種の情報を出力する出力手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成され、例えば、上述したXMLデータに関する各種の情報を出力する。
通信制御IF部330は、端末装置との間における通信を制御する手段である。入出力制御IF部340は、入力部310、出力部320、通信制御IF部330、記憶部350、制御部360によるデータの入出力を制御する手段である。
記憶部350は、制御部360による各種処理に必要なデータおよびプログラムを記憶する記憶手段(格納手段)であり、特に本発明に密接に関連するものとしては、図28に示すように、XMLデータ350a、パスIDテーブル350b、BINデータ350c、クエリ木350d、イベント定義表350e、イベントテーブル350fを備える。
このうち、XMLデータ350a、パスIDテーブル350b、BINデータ350cは、実施例1に示したXMLデータ150a、パスIDテーブル150b、BINデータ150cと同様であるため、説明を省略する。
クエリ木350dは、クエリから構築されるクエリ木を記憶するデータであり、かかるクエリ木は複数のステップ構造体から構成される。ここで、ステップは、(軸、タグ名、述部)の三項組で表される(本実施例3では、軸は子供軸のみを取り扱う)。
図29は、本実施例3にかかるステップ構造体のデータ構造を説明するための図である。同図に示すように、このステップ構造体は、パスID(イベントID)と、複数の述部ポインタ(クエリに論理式が含まれる場合には、ステップ構造体は、複数の述部ポインタを持てる)と、次ステップポインタとを有する。このうち、述部ポインタは、述部を示すステップ構造体のポインタであり、次ステップポインタは、次ステップとなるステップ構図体のポインタである。なお、クエリ木のルートとなるステップ構造体を、Rootと表記し、Rootの次ステップ構造体で示されるステップ構造体を、クエリ木の「第2ステップ」と表記する。
ここで、クエリに対するクエリ木の一例を示す。図30および図31は、本実施例3にかかるクエリ木の一例を示す図である。図30のクエリ木は、クエリ「/A[B or C[D]]E」のクエリ木を示している。
図30に示すように、このクエリ木は、パスID「A,B,C,D,E」のステップ構造体から構成され、パスID「A」のステップ構造体の述部ポインタは、パスID「A,B」のステップ構造体に接続され、パスID「C」のステップ構造体の述部ポインタは、パスID「C」のステップ構造体に接続されている。また、パスID「A」のステップ構造体の次ステップポインタは、パスID「E」のステップ構造体に接続されている。
そして、パスID「B,D,E」のステップ構造体の述部ポインタおよび次ステップポインタはNull(⊥)に設定され、パスID「C」のステップ構造体の次ステップポインタはNull(⊥)に設定されている。図30において、パスID「A」のステップ構造体が「Root」となり、パスID「E」のステップ構造体が「第2ステップ」となる。なお、図30の右側の図は、図30の左側に示したクエリ木の簡易表記である。
図31のクエリ木は、クエリ「/A[B and C[D] or E[F]G]」のクエリ木を示している。同図に示すように、このクエリ木は、パスID「A,B,C,D,E,F,G」のステップ構造体から構成され、パスID「A」のステップ構造体の述部ポインタは、パスID「B,C,E」のステップ構造体に接続されている。
また、パスID「C」のステップ構造体の述部ポインタは、パスID「D」のステップ構造体に接続され、パスID「E」のステップ構造体の述部ポインタは、パスID「F」のステップ構造体に接続されている。また、パスID「E」のステップ構造体の次ステップポインタは、パスID「G」のステップ構造体に接続されている。
そして、パスID「B,D,F,G」のステップ構造体の述部ポインタおよび次ステップポインタはNull(⊥)に設定され、パスID「A,C」のステップ構造体の次ステップポインタはNull(⊥)に設定されている。図31において、パスID「A」のステップ構造体が「Root」となり、第2ステップのステップ構造体は存在しない。なお、図31の下側の図は、図31の上側に示したクエリ木の簡易表記である。
イベント定義表350eは、クエリに含まれるイベント種類とパスIDとを対応付けたデータである。図32は、本実施例3にかかるイベント定義表350eのデータ構造の一例を示す図である。同図に示すように、このイベント定義表350eは、定義IDと、パスIDと、イベント種類とを組合せて記憶している。なお、定義IDは、パスIDとイベント種類との組み合わせを識別する情報である。
イベント種類となる集合ETYPE(Q)は、パスヒットイベントZ1、・・・、Zn(クエリに含まれるパスIDのうち、contains内のパスID以外の全てのパスIDに対応付ける)、パス+キーワードヒットイベントA1、・・・、Am、クエリ開始イベントS、文脈ノードイベントCを有する。ここで、パス+キーワードヒットイベントは、該当キーワードにヒットした旨を示すイベントである。
例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド") or cast]/id(パス表記では、/2[contains(5,レッド) or 6]3)
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2,Z3}
と指定されている場合には、図32に示したイベント定義表が生成される。
イベントテーブル350fは、クエリから生成されるオートマトンにBINデータ350cを代入し、イベントが発生した場合に、かかるイベントの情報(イベントID、イベント種類、オフセット)を記憶するデータである。図33は、本実施例3にかかるイベントテーブル350fのデータ構造の一例を示す図である。同図に示すように、このイベントテーブル350fは、イベントID、イベント種類、オフセットを対応付けて記憶している。
制御部360は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図28に示すように、BINデータ生成部360a、クエリ受信部360b、クエリ木構築部360c、クエリクラス判定部360d、イベントテーブル生成部360e、クエリ変換処理部360f、イベントテーブル集計部360g、分岐クエリ評価部360h、回答発信部360iを備える。
このうち、BINデータ生成部360a、クエリ受信部360b、分岐クエリ評価部360h、回答発信部360iは、図4に示した、BINデータ生成部160a、クエリ受信部160b、分岐クエリ評価部160g、回答発信部160hと同様であるため、説明を省略する。
クエリ木構築部360cは、クエリを基にして、クエリ木350d(図30、図31参照)を構築する手段である。
クエリクラス判定部360dは、クエリ木に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する手段である。検索装置300は、クエリが易クラスに属する場合には、階層管理を行うことなく、クエリに対応するデータを検索する。一方、検索装置300は、クエリが難クラスに属する場合には、従来と同様にして、階層管理を行うことで、クエリに対応するデータを検索する。
具体的に、クエリクラス判定部360dの説明を行うと、まず、クエリクラス判定部360dは、クエリ木の葉の数を検出する。クエリクラス判定部360dは、クエリ木の任意の部分木(ステップ構造体)Sに対して、Sの葉の数Numleaf(S)を、「葉のみで構成される部分木S」と「葉ではない部分木S」とにわけて下記のように定義する。
(葉のみで構成される部分木Sの葉の数;葉の条件1)
葉のみで構成される部分木S(部分木Sの次ステップポインタおよび述部ポインタがNull)に対しては、
NumLeaf(S)=1
と定義する。
(葉ではない部分木Sの葉の数;葉の条件2)
葉ではない部分木Sに対して、Sの部分木をそれぞれN、P1、・・・Pm(m≧0)とおく。ここで、部分木Nは、部分木Sの次ステップポインタをルートとする部分木であり、部分木P1、・・・Pmは、部分木Sの述部ポインタをルートとする部分木である。このとき、部分木Sの葉の数NumLeaf(S)は条件に応じて下記のように定義される。
具体的に、部分木Sの次ステップポインタが存在し、述部ポインタが1つも存在しない場合(葉の条件2−1)には、葉の数NumLeaf(S)は、
NumLeaf(S)=NumLeaf(N)
となる。また、部分木Sの述部ポインタが1つ以上存在し、次ステップポインタが存在しない場合(葉の条件2−2)には、葉の数NumLeaf(S)は、
NumLeaf(S)=Max{NumLeaf(P1),...,NumLeaf(Pm)}
となる。また、部分木Sの次ステップポインタが存在し、かつ述部ポインタが1つ以上存在する場合(葉の条件2−3)には、葉の数NumLeaf(S)は、
NumLeaf(S)=NumLeaf(N)+Max{NumLeaf(P1),...,NumLeaf(Pm)}
となる。
次に、部分木の葉の数の具体例について説明する。図34は、部分木の葉の数を説明するための図である。図34の左側は、クエリ「/A[B or C[D]E」の部分木(クエリ木)を示しており、図34の右側は、クエリ「/A[B and C[D] or E[F]G]」の部分木(クエリ木)を示している。
まず、クエリ「/A[B or C[D]E」の部分木の葉の数について説明する。図34の左側に示すように、かかるクエリの部分木は、上記の葉の条件2−3に対応するので、部分木Qの葉の数NumLeaf(Q)は、
NumLeaf(Q)=NumLeaf(N)+Max{NumLeaf(P1),NumLeaf(P2)}
となる。ここで、NumLeaf(N)は、部分木「N」の葉の数「1」となり、NumLeaf(P1)は、部分木「P1」の葉の数「1」となり、NumLeaf(P2)は、部分木「P2」の葉の数「1」となるので、結論として、部分木Qの葉の数NumLeaf(Q)は、
NumLeaf(Q)=1+Max{1,1}=2
となる。
次に、クエリ「/A[B and C[D] or E[F]G]」の部分木の葉の数について説明する。図34の右側に示すように、かかるクエリの部分木は、上記の葉の条件2−2に対応するので、部分木Qの葉の数NumLeaf(Q)は、
NumLeaf(Q)=Max{NumLeaf(P1),NumLeaf(P2),NumLeaf(P3)}
となる。ここで、NumLeaf(P1)は、部分木「P1」の葉の数「1」となり、NumLeaf(P2)は、部分木「P2」の葉の数「1」となり、NumLeaf(P3)は、部分木「P3」の葉の数「2」となるので、結論として、部分木Qの葉の数NumLeaf(Q)は、
NumLeaf(Q)=Max{1,1,2}=2
となる。
続いて、クエリクラス判定部360dは、第1の条件および第2の条件に基づいて、クエリクラスの判定を行う。ここで、第1の条件は、「クエリの葉が1つである」という条件であり、第2の条件は、「クエリの葉の数が2つであり、かつ第2ステップが存在し、かつ第2ステップの述部ポインタおよび次ステップポインタが共にNullである」という条件である。
クエリクラス判定部360dは、クエリが第1の条件または第2の条件のいずれか一方で成り立つ場合に、クエリを易クラスに属すると判定する。一方、クエリクラス判定部360dは、クエリが第1の条件または第2の条件で成り立たない場合には、クエリを難クラスに属すると判定する。
ここで、クエリクラス判定部360dの説明を、図34を用いて説明すると、図34の左側に示すクエリ木は、葉の数が「2」であり、第2ステップの述部ポインタおよび次ステップポインタが共にNullであるため、第2の条件が成立する。従って、クエリクラス判定部360dは、クエリ「/A[B or C[D]E」が易クラスに属すると判定する。
また、図34の右側に示すクエリ木は、葉の数が「2」であるが、第2ステップが存在しないため、第1の条件および第2の条件が成立しない。従って、クエリクラス判定部360dは、クエリ「/A[B and C[D] or E[F]G]」が難クラスに属すると判定する。
図28の説明に戻ると、イベントテーブル生成部360eは、クエリクラス判定部360dから判定結果を取得し、クエリが易クラスに属していると判定されている場合に、クエリからイベント定義表350e(図32参照)を生成すると共に、クエリのオートマトンを利用してイベントテーブル350f(図33参照)を生成する手段である。
まず、イベントテーブル生成部360eがイベント定義表350eを生成する処理について説明すると、イベントテーブル生成部360eは、例えば、クエリが、
Q=/Syain/ACT[contains(chara/name,"レッド") or cast]/id(パス表記では、/2[contains(5,レッド) or 6]3)
と指定され、イベント種類の集合が、
ETYPE(Q)={Z1,A1,Z2,Z3}
と指定されている場合には、クエリのパスIDおよび文字列と、イベント種類の集合を対応させることにより、図32に示したイベント定義表350eを生成する。
上記の条件では、パスID「2」がイベント種類「Z1」に対応し、パスID、文字列「[contains(5,レッド)]」がイベント種類「A1」に対応し、パスID「6」がイベント種類「Z2」に対応し、パスID「3」がイベント種類「Z3」に対応する。また、パスID「2」は、クエリの開始パスであるため、イベント種類に「S」を含ませる。パスID「3」は、クエリの終了パスであるため、イベント種類に「C」を含ませる。
続いて、イベントテーブル生成部360eがイベントテーブル350fを生成する場合の処理について説明する。イベントテーブル生成部360eは、イベントテーブル350fを生成する前準備として、クエリのオートマトンを生成する。
図35は、本実施例3にかかるクエリのオートマトンのデータ構造の一例を示す図である。図35に示すオートマトンは、クエリ「/Syain/ACT[contains(chara/name,"レッド") or cast]/id(パス表記では、/2[contains(5,レッド) or 6]3」から生成されるオートマトンである。このオートマトンは、複数のノード構造体70〜75、イベント構造体80〜83を有する。
イベントテーブル生成部360eは、図35に示したオートマトンにBINデータ350cを順次代入することで、イベントテーブル350fを生成する。以下において、イベントテーブル生成部360eが、イベントテーブル350fを生成する処理を、図36のBINデータ350cの位置「1001」〜「1029」に分けて説明する。図36は、本実施例3にかかるイベントテーブル生成部360eの処理を説明するための図である。なお、イベントテーブル生成部360eは、実施例1と同様にして、オフセットの値を、イベントが発生した際の、ノードのノードID(図2参照)をオフセットとする。
(BINデータ350cの位置「1001」)
イベントテーブル生成部360eは、BINデータ350cの位置「1001」に対応するデータ「[1シグマ戦隊中原ジャー」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体70に戻り、位置「1001」の検索を終了する。
(BINデータ350cの位置「1002」)
イベントテーブル生成部360eは、BINデータ350cの位置「1002」に対応するデータ「[2」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体80に到達する。イベント構造体80に到達した時点で、イベント(1)(イベント定義ID(1))が発生し、イベントテーブル生成部360eは、イベントID「1」、イベント種類「Z1、S」、オフセット「3」をイベントテーブル350fに登録する。なお、イベント種類は、イベント定義IDと、イベント定義表350e(図32参照)を比較することで特定される。
(BINデータ350cの位置「1003」)
イベントテーブル生成部360eは、BINデータ350cの位置「1003」に対応するデータ「[31]3」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点として、イベント構造体83に到達する。イベント構造体83に到達した時点で、イベント(4)が発生し、イベントテーブル生成部360eは、イベントID「2」、イベント種類「Z3,C」、オフセット「4」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1004」)
イベントテーブル生成部360eは、BINデータ350cの位置「1004」に対応するデータ「[4」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体70に戻り、位置「1004」の検索を終了する。
(BINデータ350cの位置「1005」)
イベントテーブル生成部360eは、BINデータ350cの位置「1005」に対応するデータ「[5シグマレッド]5」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体81に到達する。イベント構造体81に到達した時点で、イベント(2)が発生し、イベントテーブル生成部360eは、イベントID「3」、イベント種類「A1」、オフセット「8」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1006」)
イベントテーブル生成部360eは、BINデータ350cの位置「1006」に対応するデータ「]4」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体71に移行した段階で、ノード構造体70に戻り、位置「1006」の検索を終了する。
(BINデータ350cの位置「1007」)
イベントテーブル生成部360eは、BINデータ350cの位置「1007」に対応するデータ「[6」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体82に到達する。イベント構造体82に到達した時点で、イベント(3)が発生し、イベントテーブル生成部360eは、イベントID「4」、イベント種類「Z2」、オフセット「9」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1008」)
イベントテーブル生成部360eは、BINデータ350cの位置「1008」に対応するデータ「[7浅井達哉]7」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体70に戻り、位置「1008」の検索を終了する。
(BINデータ350cの位置「1009」)
イベントテーブル生成部360eは、BINデータ350cの位置「1009」に対応するデータ「]6」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体71に移行した段階で、ノード構造体70に戻り、位置「1009」の検索を終了する。
(BINデータ350cの位置「1010」)
イベントテーブル生成部360eは、BINデータ350cの位置「1010」に対応するデータ「]2」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体71に移行した段階で、ノード構造体70に戻り、位置「1010」の検索を終了する。
(BINデータ350cの位置「1011」)
イベントテーブル生成部360eは、BINデータ350cの位置「1011」に対応するデータ「[2」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体80に到達する。イベント構造体80に到達した時点で、イベント(1)が発生し、イベントテーブル生成部360eは、イベントID「5」、イベント種類「Z1、S」、オフセット「12」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1012」)
イベントテーブル生成部360eは、BINデータ350cの位置「1012」に対応するデータ「[32]3」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体83に到達する。イベント構造体83に到達した時点で、イベント(4)が発生し、イベントテーブル生成部360eは、イベントID「6」、イベント種類「Z3、C」、オフセット「13」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1013」)
イベントテーブル生成部360eは、BINデータ350cの位置「1013」に対応するデータ「[4」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体70に戻り、位置「1013」の検索を終了する。
(BINデータ350cの位置「1014」)
イベントテーブル生成部360eは、BINデータ350cの位置「1014」に対応するデータ「[5シグマブルー]5」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるので、ノード構造体70に戻り、位置「1014」の検索を終了する。
(BINデータ350cの位置「1015」)
イベントテーブル生成部360eは、BINデータ350cの位置「1015」に対応するデータ「]4」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体71に移行した段階で、ノード構造体70に戻り、位置「1015」の検索を終了する。
(BINデータ350cの位置「1016」)
イベントテーブル生成部360eは、BINデータ350cの位置「1016」に対応するデータ「[6」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体82に到達する。イベント構造体82に到達した時点で、イベント(3)が発生し、イベントテーブル生成部360eは、イベントID「7」、イベント種類「Z2」、オフセット「18」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1017」)
イベントテーブル生成部360eは、BINデータ350cの位置「1017」に対応するデータ「[7多湖真一郎]7」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体70に戻り、位置「1017」の検索を終了する。
(BINデータ350cの位置「1018」)
イベントテーブル生成部360eは、BINデータ350cの位置「1018」に対応するデータ「]6」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体71に移行した段階で、ノード構造体70に戻り、位置「1018」の検索を終了する。
(BINデータ350cの位置「1019」)
イベントテーブル生成部360eは、BINデータ350cの位置「1019」に対応するデータ「]2」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体71に移行した段階で、ノード構造体70に戻り、位置「1019」の検索を終了する。
(BINデータ350cの位置「1020」)
イベントテーブル生成部360eは、BINデータ350cの位置「1020」に対応するデータ「[2」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体80に到達する。イベント構造体80に到達した時点で、イベント(1)が発生し、イベントテーブル生成部360eは、イベントID「8」、イベント種類「Z1、S」、オフセット「21」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1021」)
イベントテーブル生成部360eは、BINデータ350cの位置「1021」に対応するデータ「[33]3」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体83に到達する。イベント構造体83に到達した時点で、イベント(4)が発生し、イベントテーブル生成部360eは、イベントID「9」、イベント種類「Z3、C」、オフセット「22」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1022」)
イベントテーブル生成部360eは、BINデータ350cの位置「1022」に対応するデータ「[4」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体70に戻り、位置「1022」の検索を終了する。
(BINデータ350cの位置「1023」)
イベントテーブル生成部360eは、BINデータ350cの位置「1023」に対応するデータ「[5シグマピンク]5」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体72に移行した段階で、次に対応する数字が存在しなくなるため、ノード構造体70に戻り、位置「1023」の検索を終了する。
(BINデータ350cの位置「1024」)
イベントテーブル生成部360eは、BINデータ350cの位置「1024」に対応するデータ「]4」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、ノード構造体71に移行した段階で、ノード構造体70に戻り、位置「1024」の検索を終了する。
(BINデータ350cの位置「1025」)
イベントテーブル生成部360eは、BINデータ350cの位置「1025」に対応するデータ「[6」をオートマトンに代入する。すると、かかるデータは、ノード構造体70を始点とし、イベント構造体82に到達する。イベント構造体82に到達した時点で、イベント(3)が発生し、イベントテーブル生成部360eは、イベントID「10」、イベント種類「Z2」、オフセット「27」をイベントテーブル350fに登録する。
(BINデータ350cの位置「1026」〜「1029」)
なお、BINデータ350cの位置「1026」〜「1029」において、イベントは発生しない。このように、イベントテーブル生成部360eは、BINデータ350cの位置「1001」〜「1029」のデータを、オートマトンに代入することで、イベントテーブル350fを生成する。
図28の説明に戻ると、クエリ変換処理部360fは、クエリの論理式を生成(階層構造を有し、易クラスに属するクエリを階層構造を持たないフラットな論理式として評価するためのクエリ変換処理を実行)する手段である。クエリ変換処理部360fがクエリから評価する論理式(以下、評価論理式)を生成する場合には、例えば、周知技術であるBDD(Binary Decision Diagram)等を利用すればよい。
図37は、クエリ変換処理部360fの処理を説明するための図である。なお、ここでは一例として、クエリ「2/[contains(5,"レッド") or 6]3」(パスID表記)の評価論理式を求める場合について説明する。同図に示すように、クエリ変換処理部360fは、クエリ「2/[contains(5,"レッド") or 6]3」のパスID(またはcontains関数全体)を、イベント列の定義IDに置き換える(ステップS10)。
そして、クエリ変換処理部360fは、述部の「[]」を、論理式の補助記号である「()」に置き換えてandで繋ぎ(ステップS11)、開始イベントに相当する定義ID(通常は(1))を除去することで、評価論理式「((2)or(3))and(4)」を生成する(ステップS12)。クエリ変換処理部360fは、評価論理式の情報をイベントテーブル集計部360gに出力する。
イベントテーブル集計部360gは、イベントテーブル350fの各種情報を集計すると共に、評価論理式に基づいて、クエリに対応するデータの位置(オフセット)を検出する手段である。そして、イベントテーブル集計部360gは、検出したオフセットの情報を回答発信部360iに出力する。
図38は、本実施例3にかかるイベントテーブル集計部360gの処理を説明するための図である。図38において、ビットベクトル(Tupleベクトル)は、所定のイベントが存在するか否かを管理するためのベクトルである。
本実施例3にかかるビットベクトルは、一例として、クエリ開始イベントS以外のイベント(2)、(3)、(4)が存在するか否かを管理する。従って、ビットベクトルは、第1の要素、第2の要素、第3の要素からなる3次元のベクトルとなり、イベント(2)(A1に対応)が存在する場合には、第1の要素にビットを立てる。また、イベント(3)(Z2に対応)が存在する場合には、第2の要素にビットを立てる。また、イベント(4)(Z3に対応)が存在する場合には、第3の要素にビットを立てる。
そして、イベントテーブル集計部360gは、イベントテーブル350fを集計していく過程において、イベント種類「S」を検出し、ビットベクトルが評価論理式を満たす場合、クエリの照合位置にヒットしたとして、Ansリストに登録された値を出力し、ビットベクトルを初期化する。
イベントテーブル集計部360gは、例えば、評価論理式が図37に示される評価論理式「((2)or(3))and(4)」である場合には、イベント種類「Z1」および「S」を検出した時点で、ビットベクトルが(1,1,1)、(1,0,1)あるいは(0,1,1)となっていれば、評価論理式を満たすので、Ansリストに登録された値を出力する。
図38の説明に移行すると、イベントテーブル集計部360gは、イベントテーブル350fのID「1」において、イベント種類「S」を検出する。しかし、ビットベクトルが(0,0,0)となっているため、評価論理式を満たさず、Ansリストを出力しない。
イベントテーブル集計部360gは、イベントテーブル350fのID「2」において、イベント種類「Z3」、「C」を検出する。従って、イベントテーブル集計部360gは、ビットベクトルを(0,0,1)に設定し、オフセット「4」をAnsリストに登録する。
イベントテーブル集計部360gは、イベントテーブル350fのID「3」において、イベント種類「A1」を検出する。従って、イベントテーブル集計部360gは、ビットベクトルを(1,0,1)に設定する。
イベントテーブル集計部360gは、イベントテーブル350fのID「4」において、イベント種類「Z2」を検出する。従って、イベントテーブル集計部360gは、ビットベクトルを(1,1,1)に設定する。
イベントテーブル集計部360gは、イベントテーブル350fのID「5」において、イベント種類「Z1」および「S」を検出し、かつビットベクトルが(1,1,1)に設定されている(評価論理式を満たす)ため、Ansリストの値「4」を出力する。そして、イベント集計部360gは、ビットベクトルおよびAnsリストを初期化する。
イベントテーブル集計部360gは、イベントテーブル350fのID「6」において、イベント種類「Z3」、「C」を検出する。従って、イベントテーブル集計部360gは、ビットベクトルを(0,0,1)に設定し、オフセット「13」をAnsリストに登録する。
イベントテーブル集計部360gは、イベントテーブル350fのID「7」において、イベント種類「Z2」を検出する。従って、イベントテーブル集計部360gは、ビットベクトルを(0,1,1)に設定する。
イベントテーブル集計部360gは、イベントテーブル350fのID「8」において、イベント種類「Z1」および「S」を検出し、かつビットベクトルが(0,1,1)に設定されている(評価論理式を満たす)ため、Ansリストの値「13」を出力する。そして、イベント集計部360gは、ビットベクトルおよびAnsリストを初期化する。
イベントテーブル集計部360gは、イベントテーブル350fのID「9」において、イベント種類「Z3」、「C」を検出する。従って、イベントテーブル集計部360gは、ビットベクトルを(0,0,1)に設定し、オフセット「22」をAnsリストに登録する。
イベントテーブル集計部360gは、イベントテーブル350fのID「10」において、イベント種類「Z2」を検出する。従って、イベントテーブル集計部360gは、ビットベクトルを(0,1,1)に設定する。
なお、ID「10」においてイベント列が終了するので、ビットベクトルのチェックおよびAnsリストの出力を実行する。図38に示す例では、ビットベクトルを(0,1,1)が評価論理式を満たすので、イベントテーブル集計部360gは、Ansリストの値を出力する。
上述してきたように、本実施例3にかかる検索装置300は、クエリクラス判定部360dが、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部360dが易クラスに属すると判定した場合に、イベントテーブル生成部360eがクエリのオートマトンを作成して、BINデータ350cを代入することでイベントテーブル350fを生成し、イベントテーブル集計部360gがイベントテーブルを集計し、評価論理式に基づいてクエリに対応するデータを検索するので、クエリに論理式が含まれる場合であっても、クエリが易クラスに属する場合に、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
次に、本実施例4にかかる検索装置について説明する。本実施例4にかかる検索装置は、「クエリ木の高さ」に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する。図39は、クエリ木の高さを説明するための図である。
クエリ木の高さとは、クエリ木の最長パスに含まれるノードの数で定義される。例えば、図39において、クエリA(Q=2[5]6)は、最長パスに含まれるノードの数が「2」となるので、クエリ木の高さが「2」となる。
また、クエリB(Q=1[2[3]4]6)は、最長パスに含まれるノードの数が「3」となるので、クエリ木の高さが「3」となる。また、クエリC(Q=A[B]C[D])は、最長パスに含まれるノードの数が「3」となるので、クエリ木の高さが「3」となる。
また、クエリD(Q=/A[B or C[D]]E)は、最長パスに含まれるノードの数が「3」となるので、クエリの高さが「3」となる。また、クエリE(Q=/A[B and C[D] or E[F]G])は、最長パスに含まれるノードの数が「4」となるので、クエリ木の高さが「4」となる。
本実施例4にかかる検索装置は、クエリ木の高さが「2以下」となるクエリを易クラスと判定し、それ以外のクエリを難クラスと判定する。従って、図39に示す例では、検索装置は、クエリAを易クラスと判定し、クエリB〜Eを難クラスと判定する(なお、クエリDは、本来ならば易クラスに属する)。
このように、本実施例4にかかる検索装置は、一部の易クラスを拾いきれない場合があるものの、葉の数に基づいた判定と比較して、単純な手法によってクエリが易クラスに属するか否かを判定するので、クエリによるデータ検索の効率をさらに向上させることが出来る。
次に、本実施例4にかかる検索装置400の構成について説明する。図40は、本実施例4にかかる検索装置400の構成を示す機能ブロック図である。同図に示すように、この検索装置400は、入力部410と、出力部420と、通信制御IF部430と、入出力制御IF部440と、記憶部450と、制御部460とを備えて構成される。
このうち、入力部410は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したXMLデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ(出力部420)も、マウスと協働してポインティングデバイス機能を実現する。
出力部420は、各種の情報を出力する出力手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成され、例えば、上述したXMLデータに関する各種の情報を出力する。
通信制御IF部430は、端末装置との間における通信を制御する手段である。入出力制御IF部440は、入力部410、出力部420、通信制御IF部430、記憶部450、制御部460によるデータの入出力を制御する手段である。
記憶部450は、制御部460による各種処理に必要なデータおよびプログラムを記憶する記憶手段(格納手段)であり、特に本発明に密接に関連するものとしては、図40に示すように、XMLデータ450a、パスIDテーブル450b、BINデータ450c、クエリ木450d、イベント定義表450e、イベントテーブル450fを備える。
ここで、XMLデータ450a、パスIDテーブル450b、BINデータ450c、クエリ木450d、イベント定義表450e、イベントテーブル450fに関する説明は、図4に示したXMLデータ150a、パスIDテーブル150b、BINデータ150c、クエリ木150d、イベント定義表150e、イベントテーブル150fに関する説明と同様であるため説明を省略する。
制御部460は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図40に示すように、BINデータ生成部460a、クエリ受信部460b、クエリ木構築部460c、クエリクラス判定部460d、イベントテーブル生成部460e、イベントテーブル集計部460f、分岐クエリ評価部460g、回答発信部460hを備える。
ここで、BINデータ生成部460a、クエリ受信部460b、クエリ木構築部460c、イベントテーブル生成部460e、イベントテーブル集計部460f、分岐クエリ評価部460g、回答発信部460hに関する説明は、図4に示したBINデータ生成部160a、クエリ受信部160b、クエリ木構築部160c、イベントテーブル生成部160e、イベントテーブル集計部160f、分岐クエリ評価部160g、回答発信部160hに関する説明と同様であるため説明を省略する。
クエリクラス判定部460dは、クエリ木の高さ(図39参照)に基づいて、クエリが易クラスに属するか難クラスに属するかを判定する手段である。具体的に、クエリクラス判定部460dは、クエリ木の高さが2以下となるクエリを易クラスと判定し、クエリ木の高さが2より大きいクエリを難クラスと判定する。
次に、本実施例4にかかる検索装置400の処理手順について説明する。なお、本実施例4にかかる検索装置400の処理手順は、図17に示した処理手順と同様であるため説明を省略する。但し、図17のステップS102に示したクエリクラス判定処理が、実施例1の処理と異なるので、以下において、本実施例4にかかるクエリクラス判定処理の処理手順について説明する。
本実施例4にかかるクエリクラス判定処理は、主手続きと副手続きが存在する。図41は、本実施例4にかかるクエリクラス判定処理の主手続きを示すフローチャートであり、図42は、本実施例4にかかるクエリクラス判定処理の副手続きを示すフローチャートである。
図41に示すように、クエリクラス判定部460dは、S=Rootと初期化し、MaxおよびCurを1に設定して初期化する(ステップS601)。ここで、Maxは大域変数であり、Curは局所変数である。
クエリクラス判定部460dは、Sの次ステップポインタが存在するか否かを判定し(ステップS602)、次ステップポインタが存在しない場合には(ステップS603,No)、Sの述部ポインタが存在するか否かを判定する(ステップS604)。
Sの述部ポインタが存在しない場合には(ステップS605,No)、ステップS609に移行する。一方、Sの述部ポインタが存在する場合には(ステップS605,Yes)、Sの述部ポインタを入力として、副手続きを実行する(ステップS606)。
そして、クエリクラス判定部460dは、Maxの値が2以下か否かを判定し(ステップS607)、Maxの値が2以下である場合には(ステップS608,Yes)、易クラスと判定する(ステップS609)。一方、Maxの値が2より大きい場合には(ステップS608,No)、難クラスと判定する(ステップS610)。
ところで、ステップS603に戻ると、Sの次ステップポインタが存在する場合には(ステップS603,Yes)、Sの述部ポインタが存在するか否かを判定し(ステップS611)、Sの述部ポインタが存在しない場合には(ステップS612,No)、ステップS614に移行する。
一方、Sの述部ポインタが存在する場合には(ステップS612,Yes)、Sの述部ポインタを入力として、副手続きを実行し(ステップS613)、Sの次ステップポインタをSに代入する(ステップS614)。
続いて、クエリクラス判定部460dは、Sに次ステップポインタあるいは述部ポインタが存在するか否かを判定し(ステップS615)、存在する場合には(ステップS616,Yes)、ステップS610に移行し、存在しない場合には(ステップS616,No)、ステップS607に移行する。
次に、図41のステップS606およびステップS613に示した副手続きについて説明する。図42に示すように、クエリクラス判定部460dは、副手続きにおいて、Sの次ステップポインタが存在するか否かを判定し(ステップS701)、Sの次ステップポインタが存在しない場合には(ステップS702,No)、Sの述部ポインタが存在するか否かを判定する(ステップS703)。
そして、Sの述部ポインタが存在する場合には(ステップS704,Yes)、Sの述部ポインタを入力として、副手続きを実行する(ステップS705)。一方、Sの述部ポインタが存在しない場合には(ステップS704,No)、Curの値がMaxの値よりも大きいか否かを判定する(ステップS706)。
続いて、Curの値がMaxの値よりも大きくない場合には(ステップS707,No)、そのまま副手続きを終了する。一方、Curの値がMaxの値よりも大きい場合には(ステップS707,Yes)、MaxにCurの値を代入し(ステップS708)、副手続きを終了する。
ところで、ステップS702の説明に戻ると、Sの次ステップポインタが存在する場合には(ステップS702,Yes)、Sの述部ポインタが存在するか否かを判定し(ステップS709)、Sの述部ポインタが存在しない場合には(ステップS710,No)、ステップS712に移行する。
一方、Sの述部ポインタが存在する場合には(ステップS710,Yes)、Sの述部ポインタを入力として、副手続きを実行し(ステップS711)、Curに1を加算した値をCurの値とし(ステップS712)、Sの次ステップポインタをSに代入し(ステップS713)、ステップS701に移行する。なお、図42のステップS705およびステップS711に示した副手続きは、図42と同様の副手続きを再度実行する。
このように、本実施例4にかかる検索装置400は、クエリクラス判定部460dがクエリ木の高さに基づいて、クエリが易クラスに属するか難クラスに属するかを判定し、クエリが易クラスに属すると判定された場合に、イベントテーブル生成部460eがイベント定義表450eおよびイベントテーブル450fを生成し、イベントテーブル集計部460fがイベントテーブル450fを集計することによりクエリに対応するデータを検索するので、クエリが易クラスに属するか否かの判定処理の処理負荷を軽減すると共に、データ検索の効率を向上させることが出来る。
次に、上記の実施例3において説明した第2の拡張例において、クエリが易クラスに属するか難クラスに属するかをクエリの高さ(最長パスに含まれるノードの数)によって判定する場合を、実施例5として説明する。本実施例5にかかる検索装置は、上記の実施例4と同様にして、クエリの高さが2以下となるクエリを易クラスと判定し、それ以外のクエリを難クラスと判定する。
次に、本実施例5にかかる検索装置500の構成について説明する。図43は、本実施例5にかかる検索装置500の構成を示す機能ブロック図である。同図に示すように、この検索装置500は、入力部510と、出力部520と、通信制御IF部530と、入出力制御IF部540と、記憶部550と、制御部560とを備えて構成される。
このうち、入力部510は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成され、例えば、上述したXMLデータに関する各種の情報を受け付けて入力する。なお、後述するモニタ(出力部520)も、マウスと協働してポインティングデバイス機能を実現する。
出力部520は、各種の情報を出力する出力手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成され、例えば、上述したXMLデータに関する各種の情報を出力する。
通信制御IF部530は、端末装置との間における通信を制御する手段である。入出力制御IF部540は、入力部510、出力部520、通信制御IF部530、記憶部550、制御部560によるデータの入出力を制御する手段である。
記憶部550は、制御部560による各種処理に必要なデータおよびプログラムを記憶する記憶手段(格納手段)であり、特に本発明に密接に関連するものとしては、図43に示すように、XMLデータ550a、パスIDテーブル550b、BINデータ550c、クエリ木550d、イベント定義表550e、イベントテーブル550fを備える。
ここで、XMLデータ550a、パスIDテーブル550b、BINデータ550c、クエリ木550d、イベント定義表550e、イベントテーブル550fに関する説明は、図28に示したXMLデータ350a、パスIDテーブル350b、BINデータ350c、クエリ木350d、イベント定義表350e、イベントテーブル350fに関する説明と同様であるため、説明を省略する。
制御部560は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図43に示すように、BINデータ生成部560a、クエリ受信部560b、クエリ木構築部560c、クエリクラス判定部560d、イベントテーブル生成部560e、クエリ変換処理部560f、イベントテーブル集計部560g、分岐クエリ評価部560h、回答発信部560iを備える。
ここで、BINデータ生成部560a、クエリ受信部560b、クエリ木構築部560c、イベントテーブル生成部560e、クエリ変換処理部560f、イベントテーブル集計部560g、分岐クエリ評価部560h、回答発信部560iに関する説明は、図28に示したBINデータ生成部360a、クエリ受信部360b、クエリ木構築部360c、イベントテーブル生成部360e、クエリ変換処理部360f、イベントテーブル集計部360g、分岐クエリ評価部360h、回答発信部360iに関する説明と同様であるため、説明を省略する。
クエリクラス判定部560dは、クエリ木の高さ(図39参照)に基づいて、クエリが易クラスに属するか何クラスに属するかを判定する手段である。具体的に、クエリクラス判定部560dは、クエリ木の高さが2以下となるクエリを易クラスと判定し、クエリ木の高さが2より大きいクエリを難クラスと判定する。なお、クエリ木の高さの算出方法は、下記のフローチャートにおいて説明する。
次に、クエリクラス判定部560dが実行するクエリクラス判定処理について説明する。なお、本実施例5にかかるクエリクラス判定処理は、主手続きと副手続きが存在する。図44および図45は、本実施例5にかかるクエリクラス判定処理の主手続きを示すフローチャートであり、図46は、本実施例5にかかるクエリクラス判定処理の副手続きを示すフローチャートである。
図44および図45に示すように、クエリクラス判定部560dは、Q=Rootと初期化し、Maxの値およびCurの値を1に設定して初期化する(ステップS801)。ここで、Maxは大域変数であり、Curは局所変数である。
そして、クエリクラス判定部560dは、Qの次ステップポインタが存在するか否かを判定し(ステップS802)、Qの次ステップポインタが存在しない場合には(ステップS803,No)、Qの述部ポインタが存在するか否かを判定する(ステップS804)。
Qの述部ポインタが存在しない場合には(ステップS805,No)、ステップS810に移行する。一方、Qの述部ポインタが存在する場合には(ステップS805,Yes)、Qの述部部分木をP1、・・・Pmに設定する(ステップS806)。
続いて、クエリクラス判定部560dは、P1、・・・Pmに対してそれぞれ副手続きを実行し(ステップS807)、Max(Q)=max{Max(P1)、・・・、Max(Pm)}と設定する(ステップS808)。
そして、クエリクラス判定部560dは、Maxの値が2以下である場合には(ステップS809,Yes)、易クラスと判定する(ステップS810)。一方、Maxの値が2より大きい場合には(ステップS809,No)、難クラスと判定する(ステップS811)。
ところで、ステップS803の説明に戻ると、Qのステップポインタが存在する場合には(ステップS803,Yes)、Qの述部ポインタが存在するか否かを判定し(ステップS812)、Qの述部ポインタが存在しない場合には(ステップS813,No)、ステップS816に移行する。
一方、Qの述部ポインタが存在する場合には(ステップS813,Yes)、Qの述部部分木をP1、・・・Pmに設定し(ステップS814)、P1、・・・Pmに対してそれぞれ副手続きを実行し(ステップS815)、次ステップポインタに述部ポインタまたは次ステップポインタが存在するか否かを判定する(ステップS816)。
そして、述部ポインタまたは次ステップポインタが存在する場合には(ステップS817,Yes)、ステップS822に移行する。一方、述部ポインタまたは次ステップポインタが存在しない場合には(ステップS817,No)、Max(Q)=max{Max(P1)、・・・、Max(Pm)}と設定する(ステップS818)。
クエリクラス判定部560dは、Max(Q)の値が2以下か否かを判定し(ステップS819)、Max(Q)の値が2以下である場合には(ステップS820,Yes)、易クラスと判定する(ステップS821)。一方、Max(Q)の値が2より大きい場合には(ステップS820,No)、難クラスと判定する(ステップS822)。
次に、図44のステップS807および図45のステップS815に示した副手続きについて説明する。図46に示すように、クエリクラス判定部560dは、Q(述部部分木)の次ステップポインタが存在するか否かを判定し(ステップS901)、Qの次ステップポインタが存在しない場合には(ステップS902,No)、Qの述部ポインタが存在するか否かを判定する(ステップS903)。
そして、Qの述部ポインタが存在しない場合には(ステップS904,No)、Max(P)の値をCurの値に設定し(ステップS905)、Max(P)を返す(ステップS906)。
一方、Qの述部ポインタが存在する場合には(ステップS904,Yes)、述部ポインタの述部部分木をP1、・・・Pmに設定し(ステップS907)、P1、・・・Pmに対してそれぞれ副手続きを実行し(ステップS908)、Max(P)=max{Max(P1)、・・・、Max(Pm)}と設定し(ステップS909)、ステップS906に移行する。
ところで、ステップS902の説明に戻ると、Qの次ステップポインタが存在する場合には(ステップS902,Yes)、次ステップポインタの構造体に対して副手続きを実行し(ステップS910)、Qの述部ポインタが存在するか否かを判定する(ステップS911)。
そして、Qの述部ポインタが存在しない場合には(ステップS912,No)、Max(P)の値にMax(N)(次ステップポインタの構造体にかかるMaxの値)の値を設定し(ステップS913)、ステップS906に移行する。
一方、Qの述部ポインタが存在する場合には(ステップS912,Yes)、述部ポインタの述部部分木をP1、・・・Pmに設定し(ステップS914)、P1、・・・Pmに対して、それぞれ副手続きを実行する(ステップS915)。
そして、クエリクラス判定部560dは、Max(P)=max{Max(N)、Max(P1)、・・・Max(Pm)}と設定し(ステップS916)、ステップS906に移行する。なお、図46のステップS908、ステップS910、ステップS915に示した副手続きは、図46と同様の副手続きを再度実行する。
このように、本実施例5にかかる検索装置500は、クエリクラス判定部560dがクエリ木の高さに基づいて、クエリが易クラスに属するか難クラスに属するかを判定し、クエリクラス判定部560dが易クラスに属すると判定した場合に、イベントテーブル生成部560eがクエリのオートマトンを作成して、BINデータ550cを代入することでイベントテーブル550fを生成し、イベントテーブル集計部560gがイベントテーブルを集計し、評価論理式に基づいてクエリに対応するデータを検索するので、クエリに論理式が含まれる場合であっても、クエリが易クラスに属するか否かを効率よく判定でき、装置にかかる負荷を軽減させ、データ検索の効率を向上させることが出来る。
なお、上述した実施例1〜5では、一例として、W3Cの定めたデータ記法(XML)とクエリ記法(XPath)に基づいて記述されたデータとクエリに対して、本願発明を適用する場合について説明したが、本発明はこれに限定されるものではなく、例えば、W3Cの仕様から外れた「階層構造を有する文書データ」や「階層構造を有するクエリ」に対しても適用することが出来る。
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図4、図22、図28に示した検索装置100,200,300の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がCPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
ここでは、一例として、実施例1にかかる検索装置100のコンピュータのハードウェア構成について説明する。図39は、実施例1にかかる検索装置100を構成するコンピュータのハードウェア構成を示す図である。図39に示すように、このコンピュータ(検索装置)600は、入力装置610、モニタ620、RAM(Random Access Memory)630、ROM(Read Only Memory)640、記憶媒体からデータを読み取る媒体読取装置650、他の装置(端末装置)との間でデータの送受信を行う通信装置660、CPU(Central Processing Unit)670、HDD(Hard Disk Drive)680をバス690で接続して構成される。
そして、HDD680には、上記した検索装置100の機能と同様の機能を発揮する検索プログラム680bが記憶されている。CPU670が検索プログラム680bを読み出して実行することにより、検索プロセス670aが起動される。ここで、検索プロセス670aは、図4のBINデータ生成部160a、クエリ受信部160b、クエリ木構築部160c、クエリクラス判定部160d、イベントテーブル生成部160e、イベントテーブル集計部160f、分岐クエリ評価部160g、回答発信部160hに対応する。
また、HDD680は、図4に示したXMLデータ150a、パスIDテーブル150b、BINデータ150c、クエリ木150d、イベント定義表150e、イベントテーブル150fに対応する各種データ680aを記憶する。CPU670は、HDD680に格納された各種データ680aを読み出して、RAM630に格納し、RAM630に格納された各種データ630aを用いて、クエリに対応するデータを検索する。
ところで、図47に示した検索プログラム680bは、必ずしも最初からHDD680に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ(HDD)などの「固定用の物理媒体」、さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータに接続される「他のコンピュータ(またはサーバ)」などに検索プログラム680bを記憶しておき、コンピュータがこれらから検索プログラム680bを読み出して実行するようにしてもよい。
上記の実施例を含む実施形態に関し、以下の付記を開示する。
(付記1)要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法であって、
前記検索装置は、
前記検索式を取得した場合に、当該検索式を記憶装置に記憶する記憶ステップと、
前記検索式に対応するデータを前記文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定する判定ステップと、
前記判定ステップにより階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく前記検索式に対応するデータを前記文書データから検索する検索ステップと、
を含んだことを特徴とする検索方法。
(付記2)前記検索ステップは、前記判定ステップにより階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする付記1に記載の検索方法。
(付記3)前記判定ステップは、前記検索式の木構造が末端ノードを1個有している場合に、階層管理が不要であると判定することを特徴とする付記1または2に記載の検索方法。
(付記4)前記判定ステップは、前記検索式の木構造が末端ノードを2個有しており、かつ第2ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定することを特徴とする付記1、2または3に記載の検索方法。
(付記5)前記判定ステップは、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定することを特徴とする付記1または2に記載の検索方法。
(付記6)前記検索ステップは、前記検索式に論理式条件が含まれる場合に、当該論理式条件を評価し、前記バイナリデータと前記検索式との一致不一致の判定結果および前記論理式条件の評価結果に基づいて前記検索式に対応するデータを前記文書データから検索することを特徴とする付記2、3または4に記載の検索方法。
(付記7)要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置であって、
前記検索式に対応するデータを前記文書データから検索する場合に、階層管理が必要となる検索式か否かを当該検索式に基づいて判定する判定手段と、
前記判定手段によって階層管理が不要な検索式であると判定された場合に、階層管理を行うことなく前記検索式に対応するデータを前記文書データから検索する検索手段と、
を有することを特徴とする検索装置。
(付記8)前記検索手段は、前記判定手段により階層管理が不要な検索式であると判定された場合に、文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする付記7に記載の検索装置。
(付記9)前記判定手段は、前記検索式の木構造が末端ノードを1個有している場合に、階層管理が不要であると判定することを特徴とする付記7または8に記載の検索装置。
(付記10)前記判定手段は、前記検索式の木構造が末端ノードを2個有しており、かつ第2ステップとなる末端ノードのポインタによって接続されるノードが存在しない場合に、階層管理が不要であると判定することを特徴とする付記7、8または9に記載の検索装置。
(付記11)前記判定手段は、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下の場合に、階層管理が不要であると判定することを特徴とする請求項7または8に記載の検索装置。
(付記12)前記検索手段は、前記検索式に論理式条件が含まれる場合に、当該論理式条件を評価し、前記バイナリデータと前記検索式との一致不一致の判定結果および前記論理式条件の評価結果に基づいて前記検索式に対応するデータを前記文書データから検索することを特徴とする付記8、9または10に記載の検索装置。
以上のように、本発明にかかる検索方法は、検索式によって文書データからデータを検索する検索システムなどに有用であり、特に、処理負荷の大きい階層管理を出来るだけ実行することなく、文書データから検索式に対応するデータを検索する必要がある場合に適している。
XMLデータのデータ構造の一例を示す図である。 XMLデータの木表現の一例を示す図である。 クエリに対するデータを説明するための図である。 本実施例1にかかる検索装置の構成を示す機能ブロック図である。 パスIDテーブルのデータ構造の一例を示す図である。 BINデータのデータ構造の一例を示す図である。 ステップ構造体のデータ構造を説明するための図である。 クエリ木の一例を示す図(1)である。 クエリ木の一例を示す図(2)である。 イベント定義表のデータ構造の一例を示す図である。 イベントテーブルのデータ構造の一例を示す図である。 BINデータ生成部の処理を説明するための図である。 クエリ木の葉の数を説明するための図である。 葉の数は「2」であるが難クラスに属するクエリの例を示す図である。 イベントテーブル生成部の処理を説明するための図である。 イベントテーブル集計部の処理を説明するための図である。 本実施例1にかかる検索装置の処理手順を示すフローチャートである。 クエリクラス判定処理の主手続きを示すフローチャートである。 クエリクラス判定処理の副手続きを示すフローチャートである。 イベントテーブル生成処理の処理手順を示すフローチャートである。 イベント集計処理の処理手順を示すフローチャートである。 本実施例2にかかる検索装置の構成を示す機能ブロック図である。 本実施例2にかかるイベント定義表のデータ構造の一例を示す図である。 本実施例2にかかるイベントテーブルのデータ構造の一例を示す図である。 本実施例2にかかるクエリのオートマトンのデータ構造の一例を示す図である。 本実施例2にかかるイベントテーブル生成部の処理を説明するための図である。 本実施例2にかかるイベントテーブル集計部の処理を説明するための図である。 本実施例3にかかる検索装置の構成を示す機能ブロック図である。 本実施例3にかかるステップ構造体のデータ構造を説明するための図である。 本実施例3にかかるクエリ木の一例を示す図(1)である。 本実施例3にかかるクエリ木の一例を示す図(2)である。 本実施例3にかかるイベント定義表のデータ構造の一例を示す図である。 本実施例3にかかるイベントテーブルのデータ構造の一例を示す図である。 部分木の葉の数を説明するための図である。 本実施例3にかかるクエリのオートマトンのデータ構造の一例を示す図である。 本実施例3にかかるイベントテーブル生成部の処理を説明するための図である。 クエリ変換処理部の処理を説明するための図である。 本実施例3にかかるイベントテーブル集計部の処理を説明するための図である。 クエリ木の高さを説明するための図である。 本実施例4にかかる検索装置の構成を示す機能ブロック図である。 本実施例4にかかるクエリクラス判定処理の主手続きを示すフローチャートである。 本実施例4にかかるクエリクラス判定処理の副手続きを示すフローチャートである。 本実施例5にかかる検索装置の構成を示す機能ブロック図である。 本実施例5にかかるクエリクラス判定処理の主手続きを示すフローチャート(1)である。 本実施例5にかかるクエリクラス判定処理の主手続きを示すフローチャート(2)である。 本実施例5にかかるクエリクラス判定処理の副手続きを示すフローチャートである。 実施例1にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
符号の説明
100,200,300,400,500 検索装置
110,210,310,410,510 入力部
120,220,320,420,520 出力部
130,230,330,430,530 通信制御IF部
140,240,340,440,540 入出力制御IF部
150,250,350,450,550 記憶部
150a,250a,350a,450a,550a XMLデータ
150b,250b,350b,450b,550b パスIDテーブル
150c,250c,350c,450c,550c BINデータ
150d,250d,350d,450d,550d クエリ木
150e,250e,350e,450e,550e イベント定義表
150f,250f,350f,450f,550f イベントテーブル
160,260,360,460,560 制御部
160a,260a,360a,460a,560a BINデータ生成部
160b,260b,360b,460b,560b クエリ受信部
160c,260c,360c,460c,560c クエリ木構築部
160d,260d,360d,460d,560d クエリクラス判定部
160e,260e,360e,460e,560e イベントテーブル生成部
160f,260f,360g,460f,560g イベントテーブル集計部
160g,260g,360h,460g,560h 分岐クエリ評価部
160h,260h,360i,460h,560i 回答発信部
360f,560f クエリ変換処理部

Claims (3)

  1. 要素識別子により要素が区切られた階層構造を有する文書データに対する検索式を取得した場合に、該検索式に対応するデータを前記文書データから検索する検索装置の検索方法であって、
    前記検索装置は、
    前記検索式を取得した場合に、当該検索式を記憶装置に記憶する記憶ステップと、
    前記検索式に対応するデータを前記文書データから検索する場合に、前記検索式の木構造が末端ノードを1個有している検索式であるか否かを当該検索式に基づいて判定する判定ステップと、
    前記判定ステップにより、前記検索式の木構造が末端ノードを1個有している検索式であると判定された場合に、前記文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索する検索ステップと、
    を含んだことを特徴とする検索方法。
  2. 前記判定ステップは、更に、前記検索式の木構造が末端ノードを2個有しており、かつ前記検索式の木構造のルートの次ステップポインタで示されるノードとなる第2ステップの末端ノードのポインタによって接続されるノードが存在しないか否かを判定し、
    前記検索ステップは、更に、前記検索式の木構造が末端ノードを2個有しており、かつ前記第2ステップの末端ノードのポインタによって接続されるノードが存在しない場合に、前記文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする請求項1に記載の検索方法。
  3. 前記判定ステップは、更に、前記検索式の最長パスに含まれるノードの数を判定し、当該ノードの数が所定値以下であるか否かを判定し、
    前記検索ステップは、更に、前記検索式の最長パスに含まれるノードの数が所定値以下である場合に、前記文書データに含まれる各要素識別子を固有の識別情報に変換したバイナリデータを生成し、当該バイナリデータと前記検索式との一致不一致の判定を実行することにより、当該検索式に対応するデータを前記文書データから検索することを特徴とする請求項1に記載の検索方法。
JP2008011679A 2008-01-22 2008-01-22 検索方法 Active JP5228498B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008011679A JP5228498B2 (ja) 2008-01-22 2008-01-22 検索方法
US12/357,423 US20090187562A1 (en) 2008-01-22 2009-01-22 Search method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008011679A JP5228498B2 (ja) 2008-01-22 2008-01-22 検索方法

Publications (2)

Publication Number Publication Date
JP2009175862A JP2009175862A (ja) 2009-08-06
JP5228498B2 true JP5228498B2 (ja) 2013-07-03

Family

ID=40877252

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008011679A Active JP5228498B2 (ja) 2008-01-22 2008-01-22 検索方法

Country Status (2)

Country Link
US (1) US20090187562A1 (ja)
JP (1) JP5228498B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8947350B2 (en) * 2009-09-14 2015-02-03 Broadcom Corporation System and method for generating screen pointing information in a television control device

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4039484B2 (ja) * 2002-02-28 2008-01-30 インターナショナル・ビジネス・マシーンズ・コーポレーション XPath評価方法、これを用いたXML文書処理システム及びプログラム
US7210136B2 (en) * 2002-05-24 2007-04-24 Avaya Inc. Parser generation based on example document
JP4036718B2 (ja) * 2002-10-02 2008-01-23 インターナショナル・ビジネス・マシーンズ・コーポレーション 文書検索システム、文書検索方法、文書検索を実行するためのプログラム
JP3832830B2 (ja) * 2003-04-25 2006-10-11 インターナショナル・ビジネス・マシーンズ・コーポレーション XPath評価方法、これを用いたXPath評価装置及び情報処理装置
JP2005135199A (ja) * 2003-10-30 2005-05-26 Nippon Telegr & Teleph Corp <Ntt> オートマトン作成方法、および、xmlデータ検索方法、ならびに、xmlデータ検索装置、xmlデータ検索プログラム、および、xmlデータ検索プログラムの記録媒体
US7185024B2 (en) * 2003-12-22 2007-02-27 International Business Machines Corporation Method, computer program product, and system of optimized data translation from relational data storage to hierarchical structure
US7512592B2 (en) * 2004-07-02 2009-03-31 Tarari, Inc. System and method of XML query processing
US8290977B2 (en) * 2004-10-21 2012-10-16 Sybase Inc. Database system providing methodology for execution of functions in XML queries
US7636735B2 (en) * 2005-08-19 2009-12-22 International Business Machines Corporation Method for estimating the cost of query processing
US7502802B2 (en) * 2006-06-27 2009-03-10 International Business Machines Corporation Optimizing cursor movement in holistic twig joins
US7747610B2 (en) * 2006-11-10 2010-06-29 Sybase, Inc. Database system and methodology for processing path based queries
US8078611B2 (en) * 2007-01-03 2011-12-13 Oracle International Corporation Query modes for translation-enabled XML documents
US7668802B2 (en) * 2007-07-30 2010-02-23 Alcatel Lucent Method and appliance for XML policy matching

Also Published As

Publication number Publication date
US20090187562A1 (en) 2009-07-23
JP2009175862A (ja) 2009-08-06

Similar Documents

Publication Publication Date Title
US10031973B2 (en) Method and system for identifying a sensor to be deployed in a physical environment
JP6000495B2 (ja) 攻撃検知装置、攻撃検知方法、及び攻撃検知プログラム
US9069840B2 (en) Matching data from disparate sources
US20190058609A1 (en) Method and apparatus for pushing information based on artificial intelligence
KR20070057599A (ko) 데이터 중복 처리 방지 기능을 가지는 스트림 데이터 처리시스템 및 그 방법
CN101246486A (zh) 用于改进的表达式处理的方法和装置
KR101739540B1 (ko) 통합 지식베이스 구축 시스템 및 방법
CN113761219A (zh) 基于知识图谱的检索方法、装置、电子设备及存储介质
JP2010044523A (ja) 真偽判定方法
CN103377088A (zh) 用于发现和分组有关计算资源的方法和系统
CN107368516B (zh) 一种基于层次聚类的日志审计方法及装置
US11947595B2 (en) Storing semi-structured data
CN114064117A (zh) 一种基于字节码和神经网络的代码克隆检测方法及系统
US20130179470A1 (en) Table processing apparatus and method
US10742772B2 (en) Method for transforming data for low volume transmission of meta model based protocol which monitors power amount data of new renewable energy, and system for transmitting data for low volume transmission of meta model based protocol which monitors power amount data of new renewable energy
JP5228498B2 (ja) 検索方法
JP2020042343A (ja) データ処理装置、データ処理方法及びデータ処理プログラム
JP4854542B2 (ja) 文書検索システム及び文書検索方法
CN102289456B (zh) Web爬行的差异检测
Shafi et al. [WiP] Web Services Classification Using an Improved Text Mining Technique
CN113393288B (zh) 订单处理信息生成方法、装置、设备和计算机可读介质
Kolias et al. RuleMR: Classification rule discovery with MapReduce
WO2022154906A1 (en) Graph neural network for signal processing
Kimmett et al. Fuzzy joins in mapreduce: Edit and jaccard distance
Alqaaidi et al. Knowledge Graph Completion Using Structural and Textual Embeddings

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100820

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120727

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120807

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121009

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: 20130219

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130304

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160329

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5228498

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150