JP5125662B2 - クエリ変換方法および検索装置 - Google Patents

クエリ変換方法および検索装置 Download PDF

Info

Publication number
JP5125662B2
JP5125662B2 JP2008076560A JP2008076560A JP5125662B2 JP 5125662 B2 JP5125662 B2 JP 5125662B2 JP 2008076560 A JP2008076560 A JP 2008076560A JP 2008076560 A JP2008076560 A JP 2008076560A JP 5125662 B2 JP5125662 B2 JP 5125662B2
Authority
JP
Japan
Prior art keywords
query
node
axis
operator
search
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
JP2008076560A
Other languages
English (en)
Other versions
JP2009230569A (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 JP2008076560A priority Critical patent/JP5125662B2/ja
Priority to US12/409,675 priority patent/US20090240675A1/en
Publication of JP2009230569A publication Critical patent/JP2009230569A/ja
Application granted granted Critical
Publication of JP5125662B2 publication Critical patent/JP5125662B2/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/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/3332Query translation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (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データに対するデータ検索時には、クエリ(XPath式)などの検索式を利用して、クエリに該当する文書データおよびノード等を検索する方法が用いられている(例えば、特許文献1参照)。
その一方で、XMLデータはますます巨大化しているため、コンピュータにかかる負荷を軽減するべく、ストリーム処理に基づいてクエリに該当する文書データおよびノードを検索すること(XMLデータを順次参照し、後戻りすることなく、クエリに該当する文書データおよびノードを検索すること)が求められているが、クエリに逆行軸などが含まれている場合には、ストリーム処理によってXMLデータを検索することが困難であるという問題があった。
図32は、クエリに逆行軸が含まれる場合の問題点を説明するための図である。同図に示すように、ストリーム指向に基づいた処理では、既に読んだデータを再度読むことが出来ないが、クエリに逆行軸が含まれていると、現在のデータ位置(図32のDn)よりも過去のデータ位置(図32のD1〜Dn−1)にアクセスする必要があり、メモリを節約すべく、一度読んだデータを破棄するストリーム指向に基づいた処理を実行できない(クエリに逆行軸が含まれている場合には、過去に読んだデータをメモリに残しておく必要がある)。
したがって、逆行軸を含むクエリは、順行軸のみを含むクエリ(検索時に、一度読んだデータにアクセスする必要がないクエリ、換言すれば、上位階層ノードへの逆戻りが生じないクエリ)に変換するほうが計算コストを少なく出来る。
そこで、従来では、クエリの逆行軸を順行軸に変換する各種の技術が考案されている。例えば、非特許文献1では、検索式内にあるOR条件を全て分解してサブクエリに分解した上で、そのサブクエリ内の逆行軸を順行軸に変換している。
特開2003−323332号公報 D.Olteanu,Forward node-selecting queries over trees,ACM Transactions on Database System(TODS),Volume 32 Issue 1,ACM,March 2007 ISSN:0362-5915
しかしながら、上述した従来の技術(例えば、非特許文献1)では、分解する必要のないor条件まで分解しているため、不要なサブクエリを作成してしまい、計算コストの削減に悪影響を与えてしまうという問題があった。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、分割するサブクエリの数を減らし、計算コストを削減することができるクエリ変換方法および検索装置を提供することを目的とする。
上述した課題を解決し、目的を達成するため、このクエリ変換方法は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置のクエリ変換方法であって、前記検索装置は、前記検索クエリに逆行軸が含まれるか否かを判定する逆行軸判定ステップと、前記検索クエリに逆行軸が含まれている場合に、当該検索クエリ中にor演算子が含まれるor条件部分を特定し、特定したor条件部分のor演算子の中で、前記検索クエリをサブクエリに分解するための分割ポイントとなるor演算子を判定する分割判定ステップと、前記分割ポイントとなるor演算子に基づいて、前記検索クエリをサブクエリに分割した上で、サブクエリに含まれる逆行軸を順行軸に変換する変換ステップと、を含んだことを要件とする。
また、このクエリ変換方法は、上記のクエリ変換方法において、前記分割判定ステップは、前記or条件部分にor演算子および逆行軸が含まれている場合に、当該or条件部分に含まれるor演算子を分割ポイントとして判定することを要件とする。
また、このクエリ変換方法は、上記のクエリ変換方法において、前記逆行軸判定ステップは、前記検索クエリの木構造でor条件以降の階層で、親軸を含む場合に、逆行軸が含まれていると判定することを要件とする。
また、この検索装置は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、前記検索クエリに逆行軸が含まれるか否かを判定する逆行軸判定手段と、前記検索クエリに逆行軸が含まれている場合に、当該検索クエリ中にor演算子が含まれるor条件部分を特定し、特定したor条件部分のor演算子の中で、前記検索クエリをサブクエリに分解するための分割ポイントとなるor演算子を判定する分割判定手段と、前記分割ポイントとなるor演算子に基づいて、前記検索クエリをサブクエリに分割した上で、サブクエリに含まれる逆行軸を順行軸に変換する変換手段と、を備えたことを要件とする。
また、この検索装置は、上記の検索装置において、前記分割判定手段は、前記or条件部分にor演算子および逆行軸が含まれている場合に、当該or条件部分に含まれるor演算子を分割ポイントとして判定することを要件とする。
このクエリ変換方法によれば、逆行軸が含まれる場合に、or演算子が含まれるor条件部分を特定し、特定したor条件部分の中で分割ポイントとなるor演算子を判定し、分割ポイントに基づいてクエリをサブクエリに分割した上で、逆行軸を順行軸に変換するので、評価対象となるサブクエリの数を減らすことが出来、計算コストを削減することができる。
また、このクエリ変換方法によれば、or条件部分にor演算子および逆行軸が含まれている場合に、かかるor条件部分のor演算子を分割ポイントとして判定するので、分割すべきクエリを効率よく分割することが出来る。
また、このクエリ変換方法によれば、検索クエリの木構造でor条件以降の階層で、親軸を含む場合に、逆行軸が含まれていると判定するので、分割ポイントを正確に判定することが出来る。
また、この検索装置によれば、逆行軸が含まれる場合に、or演算子が含まれるor条件部分を特定し、特定したor条件部分の中で分割ポイントとなるor演算子を判定し、分割ポイントに基づいてクエリをサブクエリに分割した上で、逆行軸を順行軸に変換するので、評価対象となるサブクエリの数を減らすことが出来、計算コストを削減することができる。
また、この検索装置によれば、or条件部分にor演算子および逆行軸が含まれている場合に、かかるor条件部分のor演算子を分割ポイントとして判定するので、分割すべきクエリを効率よく分割することが出来る。
以下に添付図面を参照して、この発明に係るクエリ変換方法および検索装置の好適な実施の形態を詳細に説明する。
(XMLデータおよびクエリについて)
まず、本実施例1で利用するXML(Extensible Markup Language)データについて説明する。図1は、XMLデータのデータ構造およびXMLデータの木表現の一例を示す図である。同図の左側に示すように、このXMLデータは、要素識別子「<」、「</」等により要素が区切られた階層構造を有している。そして、XMLデータの木表現は、図1の右側のように表すことができる。
このXMLデータの木構造では、XMLデータは、ノードID1,2,4,5,7,8,10,11,13,14,16,17,19,20,22,23,25,26の要素ノードと、ノードID3,6,9,12,15,18,21,24,27のテキストノードとを有し、各要素ノード、各テキストノードをそれぞれ接続している。例えば、ノードID「1」の要素ノード「Syain」は、ノードID「2」の要素ノード「title」、ノードID「4」の要素ノード「ACT」、ノードID「13」の要素ノード「ACT」、ノードID「22」の要素ノード「ACT」に接続されている。
また、クエリ(XPathクエリ)には、親(親軸)、子(子供軸)、兄(兄軸)、弟(弟軸)等の概念が存在し、XMLデータには親(親ノード)、子(子供ノード)、兄(兄ノード)、弟(弟ノード)等の概念が存在する。図1を用いて説明すると、例えば、ノードID「1」のSyainと、ノードID「2」のtitle、ノードID「4」のACT、ノードID「13」のACT、ノードID「22」のACTとの関係は親と子と定義される。
また、ノードID「2」のtitleと、ノードID「4」のACTと、ノードID「13」のACTと、ノードID「22」のACTとの関係は兄弟と定義され、ノードID「2」のtitleは、ノードID「4」のACTの兄となり、ノードID「4」のACTは、ノードID「13」のACTの兄となり、ノードID「13」のACTは、ノードID「22」のACTの兄となる。
ところで、クエリ(XPathクエリ)を指定することによって、上記のXMLデータからクエリの照合位置のデータを取得することが可能となる。なお、W3C(World Wide Web Consortium)によるクエリのサブセットは、例えば、下記のように定義される。
Query::=Path("|"Path) (クエリ同士のorの意味)
Path::="/"RPath
RPath::=Step("/"Step)*
Step::=Axis"::"Nodetest Pred*
Axis::=ForwardAxis|ReverseAxis
ForwardAxis::="child"
ReverseAxis::="parent"
NodeTest::=Tagname|"*"|"text()"|"node()"
Pred::="["Expr"]"
Expr::=RPath|Expr"and"Expr|Expr"or"Expr|"not"Expr
上記のサブセットにおいて、軸名がない場合は、子供軸(child)が省略されているものとする。また、後述するクエリの「../」は、親軸(parent)の省略形である。また、AND演算子およびor演算子は、AND演算子を優先する。なお、演算子の優先度は()で決定する記法も許すものとする。
続いて、XMLデータからデータを検索するクエリを具体的に説明する。図2〜図5は、クエリの具体例を説明するための図である。まず、図2に示すクエリ「Q1=/Syain/ACT/id/../cast/name」について説明すると、このクエリは、Syain、ACT、idを順に辿った後に、idの親ノードとなる「ACT」に一旦逆戻りし、ACT、cast、nameを辿って参照位置を特定する。
したがって、クエリ「Q1=/Syain/ACT/id/../cast/name」によって参照されるノードは、ノードID「11」の「name」、ノードID「20」の「name」、ノードID「26」の「name」となり、図2のXMLデータの内、矩形で囲まれた情報が検索結果として出力される。
しかしながら、このクエリ「Q1=/Syain/ACT/id/../cast/name」は、逆行軸(親軸;以下同様)「../」が存在しているため、要素ノード「id」まで辿った後に、「id」の親ノードとなる「ACT」に逆戻りする必要があるため、ストリーム処理に基づいてクエリの該当ノードを検索することが出来ない(逆行軸がクエリに含まれているという前提では、親ノードに相当する<あるいは、親ノードとなり得る>データを残しておく必要があり、ストリーム処理のように、一度読んだデータを順次廃棄していく手法をとることができない)。
次に、図3に示すクエリ「Q2=/Syain/ACT[id]/cast/name」について説明すると、このクエリは、Syainを辿った後に、配下に「id」を有するACTを特定し、特定したACTからcast、nameを辿ることにより、参照位置を特定する。
したがって、クエリ「Q2=/Syain/ACT[id]/cast/name」によって参照されるノードは、図1に示したクエリの参照位置と同じ(クエリQ1とクエリQ2とは、同値なクエリ)ノードID「11」の「name」、ノードID「20」の「name」、ノードID「26」の「name」となり、図3のXMLデータの内、矩形で囲まれた情報が検索結果として出力される。
ここで、このクエリ「Q2=/Syain/ACT[id]/cast/name」は、逆行軸(親軸)が存在していないため、一度読んだデータに再度アクセスする必要がなく、ストリーム処理に基づいてクエリの該当ノードを検索することが出来る。例えば、図3に示す例では、述部に「id」を有する「ACT」を特定した時点で、ACT以前のデータが不要になるので、ストリーム処理のように、一度読んだデータを順次廃棄していく手法をとることが出来る。
次に、図4に示すクエリ「Q3=/Syain/ACT/id[../cast/name]」について説明すると、このクエリは、Syain、ACT、idを辿った後に、idの制約条件を満たすか否かを確認すべく、idの親ノードとなる「ACT」に一旦逆戻りし、ACTの配下にcast、nameが存在する場合に、初めて該当idが参照位置であると特定する。
したがって、クエリ「Q3=/Syain/ACT/id[../cast/name]によって参照されるノードは、ノードID「5」の「id」、ノードID「14」の「id」、ノードID「23」の「id」となり、図4のXMLデータの内、矩形で囲まれた情報が検索結果として出力される。
しかしながら、このクエリは、図2に示したクエリと同様にして、逆行軸(親軸)「../」が存在しているため、要素ノード「id」まで辿った後に、「id」の親ノードとなる「ACT」に逆戻りする必要があるため、ストリーム処理に基づいてクエリの該当ノードを検索することが出来ない。
次に、図5に示すクエリ「Q4=/Syain/ACT[cast/name」/id」について説明すると、このクエリは、Syainを辿った後に、配下に「cast/name」を有するACTを特定し(制約条件を満たすACTを特定し)、特定したACTからidを辿ることにより、参照位置を特定する。
したがって、クエリ「Q4=/Syain/ACT[cast/name」/id」によって参照されるノードは、図4に示したクエリの参照位置と同じ(クエリQ3とクエリQ4とは、同値なクエリ)ノードID「5」の「id」、ノードID「14」の「id」、ノードID「23」の「id」となり、図5のXMLデータの内、矩形で囲まれた情報が検索結果として出力される。
上述したように、ストリーム処理に基づいて、XMLデータからデータを検索する場合に、クエリに逆行軸が含まれている場合には、クエリに逆行軸が含まれないようにクエリを変換する必要がある(例えば、クエリQ1(Q3)をクエリQ2(Q4)に変換する必要がある)。
(親軸変換規則について)
従来では、逆行軸を含むクエリを、逆行軸を含まないクエリに変換する場合に、親軸変換ルールを適用する。親軸変換規則は、例えば、
(ルール1)π/a/../≡π[a]
(ルール2)a[../π]≡.[π]/a
が存在する。
例えば、クエリ「Q1=/Syain/ACT/id/../cast/name」に親軸変換規則(ルール1)を適用することにより、「Q1'=/Syain/ACT[id]/cast/name」にクエリが変換され、逆行軸が含まれないクエリとなるので、データ検索時に逆戻りが発生せず、ストリーム処理に基づいてクエリの該当ノードを検索することが出来るようになる。
また、クエリ「Q3=/Syain/ACT/id[../cast/name]」に親軸変換規則(ルール2)を適用することにより、「Q3'=/Syain/ACT[cast/name」/id」にクエリが変換され、逆行軸が含まれないクエリとなるので、データ検索時に逆戻りが発生せず、ストリーム処理に基づいてクエリの該当ノードを検索することが出来るようになる。
ところで、上記のクエリQ1、Q3に対しては、親軸変換規則をそのまま利用することで、逆行軸を含まないクエリに変換することが可能であったが、例えば、クエリ中にor演算子および逆行軸が混在している場合には、親軸変換規則をそのまま利用することができない。例えば、クエリ「Q5=/Syain/ACT[(id or ../title)and(chara or cast)]」に対して、親軸変換規則(ルール1、ルール2)をそのまま適用することが出来ない。
(従来の手法について)
そこで、非特許文献1では、クエリに含まれるor演算子を特定し、特定したor演算子を分割ポイントとして、クエリを複数のサブクエリに分割した上で、親軸変換規則を利用し、逆行軸を含むクエリを変換していた。
例えば、Q5=/Syain/ACT[(id or ../title)and(chara or cast)]に含まれるor演算子を特定し、特定したor演算子を分割ポイントとして、クエリQ5をサブクエリに分割すると、
q1=/Syain/ACT[id and chara]
q2=/Syain/ACT[id and cast]
q3=/Syain/ACT[../title and chara]
q4=/Syain/ACT[../title and cast]
の各サブクエリq1〜q4に分割される。但し、Q5=q1|q2|q3|q4とする。
そして、各サブクエリq1〜q4の内、逆行軸を含むq3、q4に対して、親軸変換規則を適用することにより、最終的にサブクエリq1〜q4は、
q1=/Syain/ACT[id and chara]
q2=/Syain/ACT[id and cast]
q3=/Syain[title]/ACT[chara]
q4=/Syain[title]/ACT[cast]
に変換される。なお、サブクエリq1、q2には、逆行軸が存在しないため、そのままのクエリとなる。
クエリQ5の参照位置は、サブクエリq1の参照位置、または、サブクエリq2の参照位置、または、サブクエリq3の参照位置、または、サブクエリq4の参照位置となる。例えば、クエリQ5によって、図1に示すXMLデータを検索すると、ノードID「4」の「ACT」、ノードID「13」の「ACT」、ノードID「22」の「ACT」が参照されるので、図1に示すXMLデータの内、破線で囲まれた情報が検索結果として出力される。
しかしながら、非特許文献1の手法にしたがってクエリをサブクエリに分割すると、分割する必要のないクエリまで分割してしまうため、不要なサブクエリを作成し、計算コストの削減に悪影響を与えてしまう。
そもそも、クエリの分割が必要なのは、or条件部分内の逆行軸に、親軸変換規則を適用できないためである。例えば、クエリ「Q5=/Syain/ACT[(id or ../title)and(chara or cast)]」におけるor条件部分は、「id or ../title」と、「chara or cast」となる。そして、or条件部分「id or ../title」に対しては、親軸変換規則を適用できないが、or条件部分「chara or cast」に対しては、親軸変換規則をそのまま適用できるため、「chara or cast」のor演算子を分割ポイントとしてサブクエリに分割する必要がない。
すなわち、or条件部分に基づいて、分割するか否かを判定することで、or演算子を含むクエリの同値変換において発生するサブクエリの数を減らすことができ、クエリによるデータ検索の計算コストを削減することが可能となる。
(本実施例1にかかる検索装置について)
次に、本実施例1にかかる検索装置の概要および特徴について説明する。本実施例1にかかる検索装置は、従来技術のように、クエリ中の全てのor演算子を分割ポイントとしてサブクエリに分割するのではなく、分割が必要となるor演算子を特定し、特定したor演算子のみを分割ポイントとしてサブクエリに分割する。
この検索装置は、クエリからor演算子が含まれるor条件部分を特定し、特定したor条件部分に逆行軸およびor演算子が含まれている場合に、かかるor条件部分に含まれるor演算子を分割ポイントとしてサブクエリに分割する。
例えば、クエリ「Q5=/Syain/ACT[(id or ../title)and(chara or cast)]」のうち、or条件部分は、「id or ../title」と、「chara or cast」となる。そして、かかるor条件部分のうち、逆行軸およびor演算子を含むor条件部分は、「id or ../title」となるので、「id or ../title」に含まれるor演算子を分割ポイントとしてサブクエリに分解する。
具体的に、本実施例1の手法によって、クエリ「Q5=/Syain/ACT[(id or ../title)and(chara or cast)]」をサブクエリに分割すると、
q1=/Syain/ACT[id and (chara or cast)]
q2=/Syain/ACT[../title and (chara or cast)]
となる。但し、Q5=q1|q2とする。
そして、各サブクエリq1、q2のうち逆行軸を含むq2に対して、親軸変換規則を適用することにより、最終的にサブクエリq1、q2は、
q1=/Syain/ACT[id and (chara or cast)]
q2=/Syain[title]ACT[chara or cast]
に変換される。なお、サブクエリq1には、逆行軸が存在しないため、そのままのクエリとなる。
クエリQ5の参照位置は、サブクエリq1の参照位置、または、サブクエリq2の参照位置となる。例えば、クエリQ5によって、図1に示すXMLデータを検索すると、ノードID「4」の「ACT」、ノードID「13」の「ACT」、ノードID「22」の「ACT」が参照されるので、図1に示すXMLデータの内、破線で囲まれた情報が検索結果として出力される。
ここで、従来の技術によって分割されるサブクエリの数と、本実施例1の手法によって分割されるサブクエリの数を比較すると、本実施例1の手法によって分割されるサブクエリの数のほうが少なくなるので、検索装置は、クエリによる検索回数を削減することができ、計算コストを減らすことが出来る。例えば、上記のクエリQ5に関していえば、従来の手法では、4つのサブクエリが作成されるのに対して、本実施例1の手法では、2つのサブクエリしか作成されないので、クエリQ5に関しては、検索回数を2回削減することができる。
次に、本実施例1の検索装置が含まれる検索システムについて説明する(一例)。図6は、本実施例1にかかる検索システムの構成を示す図である。同図に示すように、この検索システムは、端末装置50および検索装置100を備え、端末装置50および検索装置100は、ネットワーク60によって接続されている。
このうち、端末装置50は、入力装置(図示略)を介してユーザからクエリを受け付けた場合に、受け付けたクエリの情報を検索装置100に送信し、検索装置100からの検索結果を出力装置(図示略)に出力する装置である。図7は、端末装置50の出力装置に出力される検索結果の一例を示す図である。
検索装置100は、端末装置50からクエリの情報を受信した場合に、XMLデータからクエリに対応するデータを検索し、検索結果を端末装置50に送信する装置である。図8は、本実施例1にかかる検索装置100の構成を示す機能ブロック図である。
同図に示すように、この検索装置100は、通信制御IF部110と、入力部120と、出力部130と、入出力制御IF部140と、記憶部150と、制御部160とを備えて構成される。
このうち、通信制御IF部110は、主に端末装置50との間における通信を制御する手段である。入力部120は、各種の情報を入力する入力手段であり、キーボードやマウス、マイクなどによって構成される。
出力部130は、各種の情報を出力する出力手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカによって構成される。入出力制御IF部140は、通信制御IF部110、入力部120、出力部130、記憶部150、制御部160によるデータの入出力を制御する手段である。
記憶部150は、制御部160による各種処理に必要なデータおよびプログラムを記憶する記憶手段であり、特に本発明に密接に関連するものとしては、図8に示すように、XMLデータ150aと、クエリデータ150bと、クエリ木データ150cと、分割管理テーブル150dと、スタック150eと、変換クエリデータ150fとを備える。
このうち、XMLデータ150aは、要素識別子「<」、「</」等により要素が区切られた階層構造を有する文書データである(図1の左側参照)。クエリデータ150bは、端末装置50から送信されるクエリのデータである。例えば、クエリデータ150bは、「Q=/Syain/ACT[(id or ../title)and(chara or cast)]」となる。
クエリ木データ150cは、クエリデータ150bに基づいて作成されるクエリ木のデータである。このクエリ木データ150cは、ステップノードと論理記号ノードを有する。図9は、ステップノードおよび論理記号ノードのデータ構造の一例を示す図である。
ステップノードは、図9の上側に示すように、ID(ノードID)と、軸名(Axis)と、タグ名(Tag)と、次ステップポインタ(NextPT;ステップノードを指す)と、述部ポインタ(ParPT;ステップノードまたは論理記号ノードを指す)と、親ポインタ(ParPT;ステップノードまたは論理記号ノードを指す)とを有する。
また、論理記号ノードは、図9の下側に示すように、ID(ノードID)と、記号名(Symbl)と、左クエリポインタ(LeftPT;ステップノードまたは論理記号ノードを指す)と、右クエリポインタ(RightPT;ステップノードまたは論理記号ノードを指す)と、親ポインタ(ParPT;ステップノードまたは論理記号ノードを指す)とを有する。
なお、クエリにおけるステップは、
Step::=Axis"::"Nodetest ([Predicate])*
と定義されている。すなわち、ステップとは、(軸、タグ名、述部)の三項組となる。例えば、/A[B]C[DorE]Fというクエリは、A[B]とC[D or E]とFという3つのステップを持つ。
図10は、クエリ木データ150cのデータ構造の一例を示す図である。図10に示すクエリ木データ150cは、クエリ「Q=/Syain/ACT[(id or ../title)and(chara or cast)]」のクエリ木を示す。
同図に示すように、このクエリ木データ150cは、ノードID「1」、軸名「子供」、タグ名「Syain」のステップノードと、ノードID「2」、軸名「子供」、タグ名「ACT」のステップノードと、ノードID「3」、記号名「∧;論理積」の論理記号ノードと、ノードID「4」、記号名「∨;論理積」の論理記号ノードと、ノードID「5」、軸名「子供」、タグ名「id」のステップノードと、ノードID「6」、軸名「親」、タグ名「title」のステップノードと、ノードID「7」、記号名「∨;論理積」の論理記号ノードと、ノードID「8」、軸名「子供」、タグ名「chara」のステップノードと、ノードID「9」、軸名「子供」、タグ名「cast」のステップノードとを有する。
そして、ノードID「1」のステップノードの次ステップポインタは、ノードID「2」のステップノードを指している。また、ノードID「2」のステップノードの述部ポインタは、ノードID「3」の論理記号ノードを示し、親ポインタは、ノードID「1」のステップノードを指している。
ノードID「3」の論理記号ノードの左クエリポインタは、ノードID「4」の論理記号ノードを指し、右クエリポインタは、ノードID「7」の論理記号ノードを指し、親ポインタは、ノードID「2」のステップノードを指す。
ノードID「4」の論理記号ノードの左クエリポインタは、ノードID「5」のステップノードを指し、右クエリポインタは、ノードID「6」のステップノードを指し、親ポインタは、ノードID「3」の論理記号ノードを指す。
ノードID「5」のステップノードの親ポインタは、ノードID「4」の論理記号ノードを指し、ノードID「6」のステップノードの親ポインタは、ノードID「4」の論理記号ノードを指す。
ノードID「7」の論理記号ノードの左クエリポインタは、ノードID「8」のステップノードを指し、右クエリポインタは、ノードID「9」のステップノードを指し、親ポインタは、ノードID「3」の論理記号ノードを指す。
ノードID「8」のステップノードの親ポインタは、ノードID「7」の論理記号ノードを指し、ノードID「9」のステップノードの親ポインタは、ノードID「7」の論理記号ノードを指す。なお、図10中における「⊥」はヌル(空)を示す。以下の説明において、図10に示すクエリ木データ150cは、図11に示すような略図にて説明する。図11は、クエリ木データ150cの略図である。
分割管理テーブル150dは、クエリと分割したサブクエリとの関係を管理するためのデータである。図12は、分割管理テーブルのデータ構造の一例を示す図である。同図に示すように、この分割管理テーブル150dは、クエリと、各サブクエリとを有する。図12に示す例では、クエリ「Q」がサブクエリ「q1」、「q2」に分割されている旨が記憶されている。
スタック150eは、分割ポイントの候補となる論理記号ノードのノードIDを管理するデータである。図13は、スタック150eのデータ構造の一例を示す図である。同図に示すように、このスタック150eは、ノード深さと、ノードIDとを備える。ここで、ノード深さは、論理記号ノードの深さを示す。なお、論理記号ノードの深さはどのように定義しても構わないが、例えば、ルートから該当論理記号ノードまでに含まれる論理記号ノードの数と定義できる。
例えば、ノードID「4」の論理記号ノードをスタック150eに登録する場合には、ルートから該当論理記号ノードまでに含まれる論理記号ノードが1つなので、ノード深さは「1」となる。
変換クエリデータ150fは、逆行軸が含まれないように変換されたクエリデータである。例えば、クエリデータ「Q=/Syain/ACT[(id or ../title)and(chara or cast)]」に対応する変換クエリデータ150fは、「q1=/Syain/ACT[id and (chara or cast)]」および「q2=/Syain/ACT[../title and (chara or cast)]」となる。
制御部160は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図8に示すように、クエリ受信部160aと、逆行軸検出部160bと、分割ポイント判定部160cと、軸変換実行部160dと、クエリ評価部160eと、検出結果送信部160fとを備える。
クエリ受信部160aは、端末装置50からクエリの情報を受信した場合に、受信したクエリの情報をクエリデータ150bとして記憶部150に記憶する手段である。
逆行軸検出部160bは、クエリデータ150bに逆行軸(親軸「../」)が含まれるか否かを判定する手段である。逆行軸検出部160bは、逆行軸が含まれると判定した場合には、逆行軸が含まれる旨の情報を分割ポイント判定部160cに出力する。なお、逆行軸が含まれない場合には、クエリデータ150bをサブクエリに分割する処理を実行しないで、クエリ評価部160e(後述する)がそのままクエリデータ150bを評価して、XMLデータ150aから該当データを検出する。
分割ポイント判定部160cは、クエリデータ150bに逆行軸が含まれている場合に、クエリデータ150bの分割ポイントを判定し、分割ポイントに基づいてクエリデータ150bを分割する手段である。
具体的に、分割ポイント判定部160cは、クエリデータ150bにor演算子が含まれるor条件部分を特定し、特定したor条件部分にor演算子および逆行軸が含まれている場合に、当該or条件部分に含まれるor演算子を分割ポイントとして判定する。
例えば、分割ポイント判定部160cは、クエリ「Q5=/Syain/ACT[(id or ../title)and(chara or cast)]」のうち、or条件部分は、「id or ../title」と、「chara or cast」となり、かかるor条件部分のうち、逆行軸およびor演算子を含むor条件部分は、「id or ../title」となるので、「id or ../title」に含まれるor演算子を分割ポイントとして判定する。
以下において、分割ポイント判定部160cが、分割ポイントを判定する具体的な処理について説明する。分割ポイント判定部160cは、分割ポイントを判定する場合に、周知の手法を用いて、クエリデータ150bからクエリ木データ150cを生成する。そして、クエリ木データ150cのルート「r」からステップノード「a」のパス「P」と定義し、ステップノード「a」の軸名が「逆行軸」である場合に、パス「P」上の論理記号ノードのうち、最下のorノード(∨ノード)を分割ポイントとして判定する。
分割ポイント判定部160cは、クエリ木データ150cをプリオーダ巡回し、現在のパスに出現しているorノードの深さをスタック150eで管理する。そして、ステップノードで逆行軸のものを見つけたら、スタック150eにアクセスして、分割ポイントを判定する。本手法では、クエリ木データ150cの分割は、下から順に(ボトムアップに)行う。したがって、分割ポイントはor条件部分内に逆行軸を含むorノードのうちで、最下のものと定義される。
図14〜図17は、分割ポイント判定部160cの処理を説明するための図である(図14〜図17のノードID「1」〜「9」の詳細は、図10参照)。まず、分割ポイント判定部160cは、述部ツリーを深さ優先検索して、orノード(∨ノード)を検出したら、スタック150eにノード深さとノードIDとを対応付けて登録する。図14に示す例では、ノードID「4」の論理記号ノードが該当するので、ノード深さ「1」とノードID「4」とを対応付けてスタック150eに登録する。
続いて、分割ポイント判定部160cは、深さ優先検索時に、逆行軸を検出した場合に、スタック150eが空でなければ、最も深い位置に登録されているノードを分割ポイントとして判定する。図15に示す例では、ノードID「6」のステップノードにおいて逆行軸が検出されるので、スタック150e上で最下のorノード(図15に示す例では、ノードID「4」の論理記号ノード)を分割ポイントとして判定する。
分割ポイント判定部160cは、分割ポイントを判定した後に、分割ポイントに基づいて、クエリ木データを分割する。図16に示す例では、図16の左側に示すクエリQが、ノードID「4」の論理記号ノードを分割ポイントとして、サブクエリq1,q2に分割される。なお、分割前のクエリ木において、古い述部ツリーを新しい述部ツリーに置き換える(置き換えるクエリ木は、分解された数だけコピーを増やす)。分割ポイント判定部160cは、分割する前のクエリQと、分割後のサブクエリq1,q2とを対応付けて、分割管理テーブル150dに登録する。
分割ポイント判定部160cは、分割後のクエリ木に対しても上述した処理を繰り返し、クエリ木が分割できなくなるまで処理を継続する。なお、図17に示す例では、どちらのクエリ木にも分割ポイントは存在しないので、クエリ木の分割を終了する。
分割ポイント判定部160cは、クエリ木データ150cを分割した後に、分割した各クエリ木に対して、同値性ルール
π[π1[π2]]≡π[π1/π2]
π[[π1[π2]≡π[π1][π2]
を適用することにより、分割後のクエリ木を正規化する。
図18は、正規化を説明するための図である。ここでは、分割後のクエリq2に同値性ルールを適用する例を示している。クエリq2に同値性ルールを適用すると、ノードID「2」のステップノードの述部ポインタにノードID「6」のステップノードおよびノードID「7」の論理記号ノードが指定され、ノードID「3」の論理記号ノードが削除される。
分割ポイント判定部160cは、分割後のクエリデータを軸変換実行部160dに出力する。なお、クエリデータ「Q=/Syain/ACT[(id or ../title)and(chara or cast)]」は、分割ポイント判定部160cによって、サブクエリ「q1=/Syain/ACT[id and (chara or cast)]」および「q2=/Syain/ACT[../title and (chara or cast)]」に分割され、かかるデータが軸変換実行部160dに出力される。
軸変換実行部160dは、親軸変換規則を適用することにより、クエリを逆行軸を含まないクエリに変換する手段である。例えば、分割ポインタ判定部から、サブクエリ「q1=/Syain/ACT[id and (chara or cast)]」および「q2=/Syain/ACT[../title and (chara or cast)]」を取得した場合には、逆行軸を含むサブクエリq2に対して親軸変換規則を適用し、
q2=/Syain/ACT[../title and (chara or cast)]を
q2=/Syain[title]ACT[chara or cast]に変換する。なお、サブクエリq1は、逆行軸を含まないため、そのままのクエリとなる。
図19は、親軸変換規則を適用した場合のクエリq2のクエリ木を説明するための図である。同図に示すように、クエリq2に親軸変換規則を適用すると、ノードID「1」のステップノードの述部ポインタにノードID「6」のステップノードが指定され、ノードID「6」のステップノードの軸名が「子供」に変換される。なお、ノードID「2」の述部ポインタに指定されていたノードID「6」のステップノードの情報はヌルに変更される。
軸変換実行部160dは、変換後のクエリデータを変換クエリデータ150fとして、記憶部150に記憶する。例えば、クエリ「Q=/Syain/ACT[(id or ../title)and(chara or cast)]」に対応する変換クエリデータ150fは、
q1=/Syain/ACT[id and (chara or cast)]
q2=/Syain/ACT[../title and (chara or cast)]
となる。
クエリ評価部160eは、変換クエリデータ150fを評価して、XMLデータ150aから該当データを検索し、検索結果を検索結果送信部160fに出力する。例えば、クエリ評価部160eが
q1=/Syain/ACT[id and (chara or cast)]
q2=/Syain/ACT[../title and (chara or cast)]
を評価すると、該当するノードがノードID「4」のACT、ノードID「13」のACT、ノードID「22」のACTとなるので、図1のXMLデータの破線部の情報が、検索結果として検出される。
検索結果送信部160fは、検索結果をクエリ評価部160eから取得した場合に、取得した検索結果を端末装置50に出力する手段である。
次に、本実施例1にかかる検索装置100の処理手順について説明する。図20は、本実施例1にかかる検索装置100の処理手順を示すフローチャートである。同図に示すように、この検索装置100は、クエリを取得し(ステップS101)、クエリに逆行軸が含まれているか否かを判定する(ステップS102)。
クエリに逆行軸が含まれていない場合には(ステップS103,No)、ステップS108に移行する。一方、クエリに逆行軸が含まれている場合には(ステップS103,Yes)、クエリ木生成処理を実行し(ステップS104)、クエリ木分割処理を実行し(ステップS105)、分割後のクエリ木をT(q1)、…、T(qn)とおき(ステップS106)、親軸変換処理を実行する(ステップS107)。
続いて、検索装置100は、クエリを評価し(ステップS108)、検索結果を出力する(ステップS109)。
次に、図20のステップS104に示したクエリ木生成処理について説明する。図21は、クエリ木生成処理を示すフローチャートである。なお、図21のフローチャートにおいて、入力はクエリQとなり、出力がクエリ木Tとなる。また、Curstep、Stepnode、Nextstep、Nextnodeは局所変数であり、Curstepは、現在のステップ、Stepnodeは、Curstepに対応するステップ構造体であり、Nextstepは、次のステップであり、Nextnodeは、Nextstepに対応するステップノード構造体である。
図21に示すように、クエリQの最初の段(ステップ)をCurstepとおき(ステップS201)、Curstepに対応するステップ節点(ステップノード)を作成し、Stepnodeとおく(ステップS202)。
そして、(Nextstep、Nextnode)=Step(Q、Curstep、Stepnode)とし(ステップS203)、(Nextstep、Nextnode)=Step(Q、Curstep、Stepnode)を入力として、ステップ部対応処理を実行する(ステップS204)。
続いて、検索装置100は、Nextnodeが空節点か否かを判定し(ステップS205)、空節点の場合には(ステップS206,Yes)、完成したクエリ木を出力し(ステップS207)、クエリ木生成処理を終了する。
一方、Nextnodeが空節点ではない場合には(ステップS206,No)、Curstepの次ステップポインタにNextnodeを指定し(ステップS208)、CurstepにNextstepを代入し(ステップS209)、StepnodeにNextnodeを代入し(ステップS210)、ステップS204に移行する。
次に、図21のステップS204に示したステップ部対応処理について説明する。図22は、ステップ部対応処理を示すフローチャートである。図22において、入力は、Q(クエリ)、Curstep(現在のステップ)、Stepnode(Curstepに対応するステップノード構造体)となり、出力はNextstep(次のステップ)、Nextnode(Nextstepに対応するステップノード構造体)となる。
図22に示すように、Curstepに述部が存在するか否かを判定し(ステップS301)、述部が存在する場合には(ステップS302,Yes)、Pred(Q、Curstep、Stepnode)を入力として、述部部分対応処理を実行し(ステップS303)、ステップS304に移行する。
一方、Curstepに述部が存在しない場合には(ステップS302,No)、Curstepの次ステップが存在するか否かを判定し(ステップS304)、存在しない場合には(ステップS305,No)、(Nextstep<空ステップ>、Nextnode<空節点>)を出力し(ステップS306)、ステップ部対応処理を終了する。
一方、Curstepの次ステップが存在する場合には(ステップS305,Yes)、次ステップをNextstepとおき(ステップS307)、Nextstepに対応するステップ節点を作成し、Nextnodeとし(ステップS308)、(Nextstep、Nextnode)を出力し(ステップS309)、ステップ部対応処理を終了する。
次に、図22のステップS303に示した述部部分対応処理について説明する。図23は、述部部分対応処理を示すフローチャートである。図23において、入力はQ(クエリ)、Curstep(現在のステップ)、Stepnode(Curstepに対応するステップノード構造体)となる。
図23に示すように、Curstepの述部に論理演算子が存在するか否かを判定し(ステップS401)、存在しない場合には(ステップS402,No)、T=Tree(Curstep)を作成し(ステップS403)、Stepnodeの述部ポインタにTのルート節点を指定し(ステップS404)、クエリ木生成処理を実行し(ステップS405)、述部部分対応処理を終了する。
一方、Curstepの述部に論理演算子が存在する場合には(ステップS402,Yes)、Curstepの述部中、一番外側で作用する論理演算子をEとする(ステップS406)。ステップS406において、述部を「(id or ../title)and(chara or cast)」とすると、演算子は1つの論理積「and」と、2つの論理和「or」が含まれるが、この場合、一番外側で作用する論理演算子は、論理積「and」となる。
続いて、Eの左側のクエリをLF、右側のクエリをRFとし(ステップS407)、Eに対応する論理記号ノードEnodeを指定する(ステップS408)。そして、Lefttree(LF,Enode)を入力として左木対応処理を実行し(ステップS409)、Righttree(RF,Enode)を入力として、右木対応処理を実行し(ステップS410)、述部部分対応処理を終了する。
次に、図23のステップS409に示した左木対応処理について説明する。図24は、左木対応処理を示すフローチャートである。図24において、入力はLF(クエリ)、Enode(論理記号ノード)となる。
図24に示すように、LFに論理演算子が存在するか否かを判定し(ステップS501)、論理演算子が存在しない場合には(ステップS502,No)、T=Tree(LF)を作成し(ステップS503)、Enodeの左クエリポインタにTのルート節点を指定し(ステップS504)、クエリ木生成処理を実行し(ステップS505)、左木作成処理を終了する。
一方、LFに論理演算子が存在する場合には(ステップS502,Yes)、LFの述部中、一番外側で作用する論理演算子をE2とし(ステップS506)、E2の左側のクエリをLF2、右側のクエリをRF2とし(ステップS507)、E2に対応する論理記号ノードEnode2を指定する(ステップS508)。
そして、Lefttree(LF2,Enode2)を入力として左木対応処理を実行し(ステップS509)、Righttree(RF2,Enode2)を入力として、右木対応処理を実行し(ステップS510)、左木対応処理を終了する。なお、ステップS509に示した左木対応処理は、図24に示した左木対応処理と同様である。
次に、図23のステップS410に示した右木対応処理について説明する。図25は、右木対応処理を示すフローチャートである。図25において、入力はRF(クエリ)、Enode(論理記号ノード)となる。
図25に示すように、RFに論理演算子が存在するか否かを判定し(ステップS601)、論理演算子が存在しない場合には(ステップS602,No)、T=Tree(RF)を作成し(ステップS603)、Enodeの左クエリポインタにTのルート節点を指定し(ステップS604)、クエリ木生成処理を実行し(ステップS605)、右木作成処理を終了する。
一方、RFに論理演算子が存在する場合には(ステップS602,Yes)、RFの述部中、一番外側で作用する論理演算子をE2とし(ステップS606)、E2の左側のクエリをLF2、右側のクエリをRF2とし(ステップS607)、E2に対応する論理記号ノードEnode2を指定する(ステップS608)。
そして、Lefttree(LF2,Enode2)を入力として左木対応処理を実行し(ステップS609)、Righttree(RF2,Enode2)を入力として、右木対応処理を実行し(ステップS610)、左木対応処理を終了する。なお、ステップS609に示した左木対応処理は、図24に示した左木対応処理と同様であり、ステップS610に示した右木対応処理は、図25に示した右木対応処理と同様である。
次に、図20のステップS105に示したクエリ木分割処理について説明する。図26、図27は、クエリ木分割処理の処理手順を示すフローチャートである。図26、図27において、入力は、クエリ木T、クエリ木集合E、分割管理テーブルTab、ノードN(深さ優先で巡回されるTの各ノード)となる。
図26に示すように、Nをクエリ木Tのルートに設定し、E=EU{T}とし(ステップS701)、Nに次の節点(Next)が存在するか否かを判定し(ステップS702)、存在しない場合には(ステップS703,No)、クエリ木分割処理を終了する。
一方、Nに次の節点(Next)が存在する場合には(ステップS703,Yes)、depth(N)≧depth(Next)の場合に、スタック150eのdepth(Next)番目以降をクリアし、N=Nextとする(ステップS704)。
そして、Nが論理記号ノードで、かつor記号か否かを判定し(ステップS705)、Nが論理記号ノードで、かつor記号の場合には(ステップS706,Yes)、スタック150eのdepth(N)番目にNを登録し(ステップS707)、ステップS703に移行する。
一方、Nが論理記号ノードで、かつor記号ではない場合に(ステップS706,No)、Nがステップノードで、かつ親軸か否かを判定し(ステップS708)、Nがステップノードで、かつ親軸ではない場合には(ステップS709,No)、ステップS703に移行する。
一方、Nがステップノードで、かつ親軸の場合には(ステップS709,Yes)、スタック150eに1つでも節点が登録されているか否かを判定し(ステップS710)、登録されていない場合には(ステップS711,No)、ステップS703に移行する。
一方、スタック150eに1つでも節点が登録されている場合には(ステップS711,Yes)、スタックに登録されている節点のうち、最も深い位置に登録されているもの(論理記号ノード)を分割点(DP)とする(ステップS712)。
そして、(T1,T2)=Treesep(T,DP)とし(ステップS713)、(T1,T2)=Treesep(T,DP)を入力として、Treesep処理を実行する(ステップS714)。続いて、分割管理テーブル150dのレコードTの項目に、T1およびT2を登録し(ステップS715)、分割管理テーブル150dに新レコードT1およびT2を登録し、E=\{T}とし(ステップS716)、T1、T2を入力として、クエリ木分割処理を実行し(ステップS717)、クエリ木分割処理を終了する。なお、ステップS717に示したクエリ木分割処理は、図26,27に示したクエリ木分割処理に対応する。
次に、図27のステップS714に示したTreesep処理について説明する。図28は、Treesep処理の処理手順を示すフローチャートである。図28において、入力は、T(クエリ木)、DP(分割点ノード<分割ポイントのノード>)となり、出力は、クエリ木Tの分割後のクエリ木T1、T2となる。なお、図28中の各局所変数について説明すると、Sub1、Sub2は、最初はTの部分木、後に、それぞれT1とT2の部分木を示し、Curは、現在の節点を示し、Parは、Curの親節点を示し、TreeSPは、DPの先祖のステップ節点(Sub1とSub2の頂点)を示す。
図28に示すように、Cur(現在の節点)にDP(分割点ノード)を代入し(ステップS801)、Curの親節点をParとおき(ステップS802)、Parがステップ節点で、かつParの述部ポインタの行き先がCurか否かを判定する(ステップS803)。
Parがステップ節点で、かつParの述部ポインタの行き先がCurではない場合には(ステップS804,No)、CurにParを代入し(ステップS805)、Curの親節点をParとし(ステップS806)、ステップS802に移行する。
一方、Parがステップ節点で、かつParの述部ポインタの行き先がCurの場合には(ステップS804,Yes)、TreeSP=Parとおき(ステップS807)、TからTreeSP以下の部分木を切り出したものを2つ生成し、それぞれSub1、Sub2とする(ステップS808)。
そして、(T1,T2)=Predsep(T,Sub1,Sub2,DP,TreeSP)とし(ステップS809)、(T1,T2)=Predsep(T,Sub1,Sub2,DP,TreeSP)を入力として、Predsep処理を実行する(ステップS810)。
次に、図28のステップS810に示した、Predsep処理について説明する。図29は、Predsep処理の処理手順を示すフローチャートである。図29において、入力は、T(クエリ木)、Sub1、Sub2(Tの部分木)、DP(Tの分割点ノード)、TreeSP(Sub1、Sub2の頂点)となり、出力は、Tの分割後のクエリ木T1、T2となる。なお、Parは、DPの親ノードを示す。
図29に示すように、DPの親節点をParとおき(ステップS901)、Tのコピーを2つ作成し、それぞれT1、T2とし(ステップS902)、Parのノードの種類がステップ節点か否かを判定する(ステップS903)。
Parのノードの種類がステップ節点の場合には(ステップS904,Yes)、Sub1中のParの述部ポインタ指定先を、DPの右ポインタの指定先に変更し(ステップS905)、Sub2中のParの述部ポインタ指定先をDPの左ポインタの指定先に変更し(ステップS906)、ステップS913に移行する。
一方、Parのノードの種類が論理記号節点の場合には(ステップS904,No)、Parの左ポインタがDPを指すか否かを判定し(ステップS907)、左ポインタがDPを指す場合には(ステップS908,Yes)、Sub1中のParの左ポインタ指定先をDPの右ポインタの指定先に変更し(ステップS909)、Sub2中の左ポインタ指定先をDPの左ポインタの指定先に変更し(ステップS910)、ステップS913に移行する。
一方、Parの右ポインタがDPを指す場合には(ステップS908,No)、Sub1中のParの右ポインタの指定先を、DPの右ポインタの指定先に変更し(ステップS911)、Sub2中のParの右ポインタの指定先を、DPの左ポインタの指定先に変更する(ステップS912)。
そして、T1のTreeSP以下の部分木をSub1に置き換え(ステップS913)、T2のTreeSP以下の部分木をSub2に置き換え(ステップS914)、T1およびT2を出力し(ステップS915)、Predsep処理を終了する。
次に、図20のステップS107に示した親軸変換処理について説明する。図30は、親軸変換処理の処理手順を示すフローチャートである。図30において、入力は、クエリ木Tとなる。また、図30における各局所変数について説明すると、Nは、Tのノードをを示し、Parは、Nの親ノードを示す。
図30に示すように、Tの正規化を行い(ステップS1001)、NをTのルートにし(ステップS1002)、Nがステップ節点で、かつNの軸が親軸か否かを判定する(ステップS1003)。
Nがステップ節点で、かつNの軸が親軸ではない場合に(ステップS1004,No)、次の節点をNとし(ステップS1005)、ステップS1003に移行する。一方、Nがステップ節点で、かつNの軸が親軸の場合には(ステップS1004,Yes)、Nの親節点をParとし(ステップS1006)、Parの述部ポインタの指定先がNか否かを判定する(ステップS1007)。
Parの述部ポインタの指定先がNの場合には(ステップS1008,Yes)、Parの述部ポインタのうち、その指定先がNであるものを、空ポインタに変更し(ステップS1009)、Parの親節点に述部ポインタを新設し、その指定先をNとし(ステップS1010)、ステップS1013に移行する。
一方、Parの述部ポインタの指定先がNでない場合には(ステップS1008,No)、Parの親節点に述部ポインタを新設し、その指定先をParとし(ステップS1011)、Parの親節点のステップポインタの指定先をParからNに変更する(ステップS1012)。
そして、Nの軸名を、親軸から子供軸に変更し(ステップS1013)、Tを出力し(ステップS1014)、親軸変換処理を終了する。
上述してきたように、本実施例1にかかる検索装置100は、従来技術のように、クエリ中の全てのor演算子を分割ポイントとしてサブクエリに分割するのではなく、分割が必要となるor演算子(逆行軸およびor演算子が含まれているor条件部分のor演算子)を特定し、特定したor演算子のみを分割ポイントとしてサブクエリに分割するので、or演算子を含むクエリの同値変換において発生するサブクエリの数を減らすことができ、クエリによるデータ検索の計算コストを削減することが可能となる。
具体的に、本実施例1の手法によって、例えば、クエリ「Q5=/Syain/ACT[(id or ../title)and(chara or cast)]」をサブクエリに分割すると、
q1=/Syain/ACT[id and (chara or cast)]
q2=/Syain/ACT[../title and (chara or cast)]
となる。
一方、従来技術に基づいて、クエリ「Q5=/Syain/ACT[(id or ../title)and(chara or cast)]」をサブクエリに分割すると、
q1=/Syain/ACT[id and chara]
q2=/Syain/ACT[id and cast]
q3=/Syain/ACT[../title and chara]
q4=/Syain/ACT[../title and cast]
となる。
したがって、従来の技術によって分割されるサブクエリの数と、本実施例1の手法によって分割されるサブクエリの数を比較すると、本実施例1の手法によって分割されるサブクエリの数のほうが少なくなるので、検索装置は、クエリによる検索回数を削減することができ、計算コストを減らすことが出来る。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例1以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例について説明する。
(1)逆行軸について
例えば、上記の実施例1では、順行軸として子供軸を考察し、逆行軸として親軸を考察したが、これに限定されるものではない。順行軸には、子供軸の他に、子孫軸、子孫または自身軸、弟軸、先行軸が含まれ、逆行軸には、親軸の他に、先祖軸、先祖または自身軸、兄軸、後行軸が含まれる。
そして、本実施例1にかかる検索装置100は、順行軸が子供軸以外(例えば、子孫軸、子孫または自身軸、弟軸、先行軸)、逆行軸が親軸以外(例えば、先祖軸、先祖または自身軸、兄軸、後行軸)であっても、実施例1の手法を用いて同様にサブクエリの分割数を削減することができる。
(2)システムの構成等
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図8に示した検索装置100の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がCPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
図31は、実施例1にかかる検索装置100を構成するコンピュータ200のハードウェア構成を示す図である。図31に示すように、このコンピュータ(検索装置)200は、入力装置201、モニタ202、RAM(Random Access Memory)203、ROM(Read Only Memory)204、記憶媒体からデータを読み取る媒体読取装置205、他の装置(例えば、端末装置50)との間でデータの送受信を行う通信装置206、CPU(Central Processing Unit)207、HDD(Hard Disk Drive)208をバス209で接続して構成される。
そして、HDD208には、上記した検索装置100の機能と同様の機能を発揮する検索プログラム208b、が記憶されている。CPU207が、検索プログラム208bを読み出して実行することにより、検索プロセス207aが起動される。ここで、検索プロセス207aは、図8に示した、クエリ受信部160a、逆行軸検出部160b、分割ポイント判定部160c、軸変換実行部160d、クエリ評価部160e、検索結果送信部160fに対応する。
また、HDD208は、XMLデータ150a、クエリデータ150b、クエリ木データ150c、分割管理テーブル150d、スタック150e、変換クエリデータ150fに対応する各種データ208aを記憶する。CPU207は、HDD208に格納された各種データ208aを読み出して、RAM203に格納し、RAM203に格納された各種データ203aを利用して、クエリを分割した後に、各サブクラスを評価してデータ検索を行う。
ところで、図31に示した検索プログラム208bは、必ずしも最初からHDD208に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ(HDD)などの「固定用の物理媒体」、さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータに接続される「他のコンピュータ(またはサーバ)」などに検索プログラム208bを記憶しておき、コンピュータがこれらから検索プログラム208bを読み出して実行するようにしてもよい。
以上の実施例1,2を含む実施形態に関し、更に以下の付記を開示する。
(付記1)論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置のクエリ変換方法であって、
前記検索装置は、
前記検索クエリに逆行軸が含まれるか否かを判定する逆行軸判定ステップと、
前記検索クエリに逆行軸が含まれている場合に、当該検索クエリ中にor演算子が含まれるor条件部分を特定し、特定したor条件部分のor演算子の中で、前記検索クエリをサブクエリに分解するための分割ポイントとなるor演算子を判定する分割判定ステップと、
前記分割ポイントとなるor演算子に基づいて、前記検索クエリをサブクエリに分割した上で、サブクエリに含まれる逆行軸を順行軸に変換する変換ステップと、
を含んだことを特徴とするクエリ変換方法。
(付記2)前記分割判定ステップは、前記or条件部分にor演算子および逆行軸が含まれている場合に、当該or条件部分に含まれるor演算子を分割ポイントとして判定することを特徴とする付記1に記載のクエリ変換方法。
(付記3)前記逆行軸判定ステップは、前記検索クエリの木構造でor条件以降の階層で、親軸を含む場合に、逆行軸が含まれていると判定することを特徴とする付記1または2に記載のクエリ変換方法。
(付記4)論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、
前記検索クエリに逆行軸が含まれるか否かを判定する逆行軸判定手段と、
前記検索クエリに逆行軸が含まれている場合に、当該検索クエリ中にor演算子が含まれるor条件部分を特定し、特定したor条件部分のor演算子の中で、前記検索クエリをサブクエリに分解するための分割ポイントとなるor演算子を判定する分割判定手段と、
前記分割ポイントとなるor演算子に基づいて、前記検索クエリをサブクエリに分割した上で、サブクエリに含まれる逆行軸を順行軸に変換する変換手段と、
を備えたことを特徴とする検索装置。
(付記5)前記分割判定手段は、前記or条件部分にor演算子および逆行軸が含まれている場合に、当該or条件部分に含まれるor演算子を分割ポイントとして判定することを特徴とする付記4に記載の検索装置。
(付記6)前記逆行軸判定手段は、前記検索クエリの木構造でor条件以降の階層で、親軸を含む場合に、逆行軸が含まれていると判定することを特徴とする付記4または5に記載の検索装置。
(付記7)コンピュータに、
論理式を含む検索クエリに逆行軸が含まれるか否かを判定する逆行軸判定手順と、
前記検索クエリに逆行軸が含まれている場合に、当該検索クエリ中にor演算子が含まれるor条件部分を特定し、特定したor条件部分のor演算子の中で、前記検索クエリをサブクエリに分解するための分割ポイントとなるor演算子を判定する分割判定手順と、
前記分割ポイントとなるor演算子に基づいて、前記検索クエリをサブクエリに分割した上で、サブクエリに含まれる逆行軸を順行軸に変換する変換手順と、
を実行させることを特徴とするクエリ変換プログラム。
XMLデータのデータ構造およびXMLデータの木表現の一例を示す図である。 クエリの具体例を説明するための図(1)である。 クエリの具体例を説明するための図(2)である。 クエリの具体例を説明するための図(3)である。 クエリの具体例を説明するための図(4)である。 本実施例1にかかる検索システムの構成を示す図である。 端末装置の出力装置に出力される検索結果の一例を示す図である。 本実施例1にかかる検索装置の構成を示す機能ブロック図である。 ステップノードおよび論理記号ノードのデータ構造の一例を示す図である。 クエリ木データのデータ構造の一例を示す図である。 クエリ木データの略図である。 分割管理テーブルのデータ構造の一例を示す図である。 スタックのデータ構造の一例を示す図である。 分割ポイント判定部の処理を説明するための図(1)である。 分割ポイント判定部の処理を説明するための図(2)である。 分割ポイント判定部の処理を説明するための図(3)である。 分割ポイント判定部の処理を説明するための図(4)である。 正規化を説明するための図である。 親軸変換規則を適用した場合のクエリq2のクエリ木を説明するための図である。 本実施例1にかかる検索装置の処理手順を示すフローチャートである。 クエリ木生成処理を示すフローチャートである。 ステップ部対応処理を示すフローチャートである。 述部部分対応処理を示すフローチャートである。 左木対応処理を示すフローチャートである。 右木対応処理を示すフローチャートである。 クエリ木分割処理の処理手順を示すフローチャート(1)である。 クエリ木分割処理の処理手順を示すフローチャート(2)である。 Treesep処理の処理手順を示すフローチャートである。 Predsep処理の処理手順を示すフローチャートである。 親軸変換処理の処理手順を示すフローチャートである。 実施例1にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。 クエリに逆行軸が含まれる場合の問題点を説明するための図である。
符号の説明
50 端末装置
60 ネットワーク
100 検索装置
110 通信制御IF部
120 入力部
130 出力部
140 入出力制御IF部
150 記憶部
150a XMLデータ
150b クエリデータ
150c クエリ木データ
150d 分割管理テーブル
150e スタック
150f 変換クエリデータ
160 制御部
160a クエリ受信部
160b 逆行軸検出部
160c 分割ポイント判定部
160d 軸変換実行部
160e クエリ評価部
160f 検索結果送信部
200 コンピュータ
201 入力装置
202 モニタ
203 RAM
203a 各種データ
204 ROM
205 媒体読取装置
206 通信装置
207 CPU
207a 検索プロセス
208 HDD
208a 各種データ
208b 検索プログラム
209 バス

Claims (5)

  1. 論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置のクエリ変換方法であって、
    前記検索装置は、
    前記検索クエリに逆行軸が含まれるか否かを判定する逆行軸判定ステップと、
    前記検索クエリに逆行軸が含まれている場合に、当該検索クエリ中にor演算子が含まれるor条件部分を特定し、特定したor条件部分のor演算子の中で、前記検索クエリをサブクエリに分解するための分割ポイントとなるor演算子を判定する分割判定ステップと、
    前記分割ポイントとなるor演算子に基づいて、前記検索クエリをサブクエリに分割した上で、サブクエリに含まれる逆行軸を順行軸に変換する変換ステップと、
    を含んだことを特徴とするクエリ変換方法。
  2. 前記分割判定ステップは、前記or条件部分にor演算子および逆行軸が含まれている場合に、当該or条件部分に含まれるor演算子を分割ポイントとして判定することを特徴とする請求項1に記載のクエリ変換方法。
  3. 前記逆行軸判定ステップは、前記検索クエリの木構造でor条件以降の階層で、親軸を含む場合に、逆行軸が含まれていると判定することを特徴とする請求項1または2に記載のクエリ変換方法。
  4. 論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、
    前記検索クエリに逆行軸が含まれるか否かを判定する逆行軸判定手段と、
    前記検索クエリに逆行軸が含まれている場合に、当該検索クエリ中にor演算子が含まれるor条件部分を特定し、特定したor条件部分のor演算子の中で、前記検索クエリをサブクエリに分解するための分割ポイントとなるor演算子を判定する分割判定手段と、
    前記分割ポイントとなるor演算子に基づいて、前記検索クエリをサブクエリに分割した上で、サブクエリに含まれる逆行軸を順行軸に変換する変換手段と、
    を備えたことを特徴とする検索装置。
  5. 前記分割判定手段は、前記or条件部分にor演算子および逆行軸が含まれている場合に、当該or条件部分に含まれるor演算子を分割ポイントとして判定することを特徴とする請求項4に記載の検索装置。
JP2008076560A 2008-03-24 2008-03-24 クエリ変換方法および検索装置 Active JP5125662B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008076560A JP5125662B2 (ja) 2008-03-24 2008-03-24 クエリ変換方法および検索装置
US12/409,675 US20090240675A1 (en) 2008-03-24 2009-03-24 Query translation method and search device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008076560A JP5125662B2 (ja) 2008-03-24 2008-03-24 クエリ変換方法および検索装置

Publications (2)

Publication Number Publication Date
JP2009230569A JP2009230569A (ja) 2009-10-08
JP5125662B2 true JP5125662B2 (ja) 2013-01-23

Family

ID=41089879

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008076560A Active JP5125662B2 (ja) 2008-03-24 2008-03-24 クエリ変換方法および検索装置

Country Status (2)

Country Link
US (1) US20090240675A1 (ja)
JP (1) JP5125662B2 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8326821B2 (en) 2010-08-25 2012-12-04 International Business Machines Corporation Transforming relational queries into stream processing
US9646164B2 (en) * 2010-12-30 2017-05-09 Aziomatics Ab System and method for evaluating a reverse query
JP5296128B2 (ja) * 2011-03-18 2013-09-25 株式会社東芝 構造化文書管理装置、方法およびプログラム
WO2014038069A1 (ja) * 2012-09-07 2014-03-13 株式会社東芝 構造化文書管理装置、方法およびプログラム
US9146957B2 (en) * 2012-12-20 2015-09-29 Business Objects Software Ltd. Method and system for generating optimal membership-check queries
US9779136B2 (en) * 2014-09-30 2017-10-03 Linkedin Corporation Rearranging search operators
EP3214510B1 (en) * 2016-03-03 2021-06-30 Magazino GmbH Controlling process of robots having a behavior tree architecture
US20200334315A1 (en) * 2017-11-10 2020-10-22 Yijun Du Enhanced document searching system and method
CN109753520B (zh) * 2019-01-28 2021-01-26 上海达梦数据库有限公司 半连接查询方法、装置、服务器及存储介质
WO2021174329A1 (en) * 2020-03-04 2021-09-10 Yijun Du System and method for utilizing search trees and tagging data items for data collection managing tasks

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4036718B2 (ja) * 2002-10-02 2008-01-23 インターナショナル・ビジネス・マシーンズ・コーポレーション 文書検索システム、文書検索方法、文書検索を実行するためのプログラム
US7653636B2 (en) * 2003-02-28 2010-01-26 Bea Systems, Inc. Systems and methods for streaming XPath query
JP3832830B2 (ja) * 2003-04-25 2006-10-11 インターナショナル・ビジネス・マシーンズ・コーポレーション XPath評価方法、これを用いたXPath評価装置及び情報処理装置
US20050257201A1 (en) * 2004-05-17 2005-11-17 International Business Machines Corporation Optimization of XPath expressions for evaluation upon streaming XML data

Also Published As

Publication number Publication date
JP2009230569A (ja) 2009-10-08
US20090240675A1 (en) 2009-09-24

Similar Documents

Publication Publication Date Title
JP5125662B2 (ja) クエリ変換方法および検索装置
US7181680B2 (en) Method and mechanism for processing queries for XML documents using an index
US7519903B2 (en) Converting a structured document using a hash value, and generating a new text element for a tree structure
KR100638695B1 (ko) 구조화 문서의 데이터를 검색하는 장치 및 방법
US8732127B1 (en) Method and system for managing versioned structured documents in a database
JP2006024179A (ja) 構造化文書処理装置、構造化文書処理方法、及びプログラム
US8566343B2 (en) Searching backward to speed up query
US9250864B2 (en) Relationship management for data modeling in an integrated development environment
US10062030B2 (en) Tree structured data transform, by determining whether a predicate of a rule matches a given node in a set and applying a function responsive to the match
JP2004086782A (ja) 異種データベース統合支援装置
US10489493B2 (en) Metadata reuse for validation against decentralized schemas
JP4860416B2 (ja) 文書検索装置、文書検索方法および文書検索プログラム
US8527480B1 (en) Method and system for managing versioned structured documents in a database
CN106664224A (zh) 通信系统的元数据增强型库存管理的方法和系统
JP2009518718A (ja) Xmlのための簡素インデックス構造
US20130339368A1 (en) Method and system for handling non-presence of elements or attributes in semi-structured data
Van den Brand et al. Fine-grained metamodel-assisted model comparison
JP4854542B2 (ja) 文書検索システム及び文書検索方法
JP2008084028A (ja) データベース検索システムおよびデータベース検索方法
US20090043785A1 (en) Managing structured content stored as a binary large object (blob)
KR20230060320A (ko) 지식 그래프의 통합 방법 및 이를 이용한 기계 학습 장치
US8898122B1 (en) Method and system for managing versioned structured documents in a database
US9002810B1 (en) Method and system for managing versioned structured documents in a database
JP2008243075A (ja) 構造化文書管理装置及び方法
Chiu et al. Enabling ad hoc queries over low-level scientific data sets

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120919

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121015

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5125662

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20151109

Year of fee payment: 3