JP4039484B2 - XPath評価方法、これを用いたXML文書処理システム及びプログラム - Google Patents

XPath評価方法、これを用いたXML文書処理システム及びプログラム Download PDF

Info

Publication number
JP4039484B2
JP4039484B2 JP2002267625A JP2002267625A JP4039484B2 JP 4039484 B2 JP4039484 B2 JP 4039484B2 JP 2002267625 A JP2002267625 A JP 2002267625A JP 2002267625 A JP2002267625 A JP 2002267625A JP 4039484 B2 JP4039484 B2 JP 4039484B2
Authority
JP
Japan
Prior art keywords
xpath
expression
expressions
data structure
evaluation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2002267625A
Other languages
English (en)
Other versions
JP2003323332A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2002267625A priority Critical patent/JP4039484B2/ja
Priority to US10/375,970 priority patent/US7315981B2/en
Publication of JP2003323332A publication Critical patent/JP2003323332A/ja
Application granted granted Critical
Publication of JP4039484B2 publication Critical patent/JP4039484B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/81Indexing, e.g. XML tags; Data structures therefor; Storage structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (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

【0001】
【発明の属する技術分野】
本発明は、XPath(XML Path Language)を用いてXML文書やHTML文書における特定部分を指し示す場合に、XPath式を効率よく評価する技術に関する。
【0002】
【従来の技術】
XML文書の特定部分を指し示すためのパス言語として、W3C(World Wide Web Consortium)から勧告として公開されているXPathがある。XPathは、例えば、XPointer、XSLT、XQueryなどの構成要素として使用され、また所定のアプリケーション・プログラムの中でXML文書のDOM(Document Object Model)ツリーをアクセスするのにも使用される。
【0003】
ところで、XML文書を用いた実際の情報処理においては、1つのXML文書に対して複数のXPath式を評価することがよく行われる。例えば、XSLTスタイルシートでは、テンプレート・ルールごとにXPath式がパターンとして指定される。したがって、複雑なXSLTスタイルシートには多くのXPath式が含まれ、処理対象であるXML文書に対して、かかる複数のXPath式を評価することが必要となる。
【0004】
また、インターネット上でのデータ交換等に用いられるウェブページに対してアノテーションを付加することにより、所定のウェブページを様々な形に再利用することが可能であり、新たなアプリケーションを開発可能であることが広く知られている。ウェブページの記述に用いられるHTML文書は、XML文書と同様にXPath式にて所定の部分を指し示すことができるため、アノテーションをウェブページ中のエレメントに対応付けるためにもXPathが用いられる。ところで、ウェブページに対するアノテーションの付加を効率的に行うために、特定のアノテーションを多数のウェブページに対して適用し、使い回すことが考えられる。この場合、所定のアノテーションが所定のウェブページに対して適用可能かどうかを判断するために、アノテーション内の複数のXPath式が対象のウェブページにおける所定のエレメントを正しく指しているかどうかを評価することが必要となる。
【0005】
XPathによるXML文書の特定部分を指し示す機能は、対象となるXML文書がXPathにて指定される特定の部分を持つかどうかをチェックする条件とみなすことができる。例えば、米国BEA社のサーバシステムであるWebLogic Collaborate(http://www.bea.com/index.html)は、XMLで表現されるメッセージのルーティングとフィルタリングの条件を記述するためにXPathを用いる。このような用途では、1つのXML文書が到着するたび多数のXPath式を評価することとなる。
【0006】
このように、1つのXML文書に対して複数のXPath式を評価する必要がある場合、XPath式の評価を効率的に行うことが要求される。従来、この種の技術としては、XMLで記述された文書に対する各利用者の購読条件をXPathで記述しておき、XML文書が到着するたびにXPath式とのマッチングを検査して、検査を通過する文書を、当該XPathを購読条件とする利用者に配信するものがある(例えば、非特許文献1参照。)。このXPath式の評価方法は、ロケーション・パスの各ステップの評価をテーブルの検索を使って行うことにより、XPath式1つあたりの実行時間を改善している。
【0007】
【非特許文献1】
Altinel M., Franklin, M., "Efficient Filtering of XML Documents for Selective Dissemination of Information", International Conference on Very Large Data Bases, 2000.
【0008】
【発明が解決しようとする課題】
上述したように、XML文書やHTML文書に対する処理において、1つのデータファイル(文書)に対して複数のXPath式を評価する場合、効率的にXPath式の評価を行うことが要求される。
しかし、上記文献に開示された方法のように、XPath式1つあたりの評価の実行時間を改善する方法は知られているが、XPath式の数の増加に比例して、全体の評価に要する時間が直線的に増加してしまうため、全体的な実行時間の短縮には限界があった。
これは、従来のXPathの評価方法が、複数のXPath式を評価する場合に、各XPath式を互いに独立なものとして扱っていることに起因する。
【0009】
ところが、1つのデータファイルに対して評価されることが想定されているXPath式が複数ある場合、それらのXPath式は対象となるデータファイルの構造や要素の値のバリエーションなどから制約を受けるので、複数のXPath式の中に類似なものが含まれる。したがって、類似するXPath式から共通の部分を取り出して評価し、類似するXPath式の間で共通部分の評価結果を共用することにより、複数のXPath式を個別に評価するよりも高速に実行できると考えられる。
【0010】
また、評価されるべき複数のXPath式の間に依存関係がある場合、この依存関係を利用して、XPath式の評価に要する処理を簡単化することができると考えられる。ここで、XPath式の間の依存関係とは、例えば、所定のXPath式が指し示すウェブページ中に2つのテーブルコンテンツ(テーブル[1]、テーブル[2])がある場合、テーブル[1]が存在しなければテーブル[2]は存在し得ないというような関係、すなわち、複数のXPathの1つまたはその一部を評価することにより、他のXPathの評価結果が自明となる関係である。
【0011】
そこで、本発明は、XML文書やHTML文書等のデータファイルに対して複数のXPath式を評価する場合に、かかるXPath式の間の類似性や依存関係を利用して、効率よく複数のXPath式の評価結果を求める方法を提供することを目的とする。
【0012】
【課題を解決するための手段】
上記の目的を達成する本発明は、コンピュータを用いて所定のデータファイル(XML文書やHTML文書)を対象として複数のXPathを評価する、次のようなXPath評価方法として実現される。すなわち、このXPath評価方法は、評価を行うべき複数のXPath式における共通部分を木構造における共通のノードとして持つデータ構造を生成するステップと、処理対象のデータファイルに対し、生成されたデータ構造のノードごとに評価を行うステップと、このノードごとの評価結果を結合して個々のXPath式の評価結果を得るステップとを含むことを特徴とする。
【0013】
ここで、このデータ構造を生成するステップは、詳しくは、個々のXPath式をステップごとに分解するステップと、分解して得られた各ステップにノードを対応させ、複数のXPath式に共通するステップを1つのノードに対応させたデータ構造を生成するステップとを含む。
さらに好ましくは、このデータ構造を生成するステップは、XPath式の複数のステップが共通の特定の形で記述されている場合、具体的には、「[(式) (比較演算子) (定数)]」の形になる述部が存在する場合に、特殊なデータ構造を用いることができる。例えば、比較演算子が「=」や「!=」の場合、ステップにおける述部の式の評価結果をキーとしてXPathにおける残りのステップを検索するためのハッシュテーブルを生成し、生成されたハッシュテーブルを用いた検索により得られたXPathの残りのステップを評価することができる。また、比較演算子が「>」や「>=」、「<」、「<=」の場合、ステップにおける述部の式の評価結果をキーとしてXPathにおける残りのステップを検索するための二分探索木を生成し、生成された二分探索木を用いた検索により得られたXPathの残りのステップを評価することができる。
【0014】
また、このデータ構造を生成するステップは、複数のXPath式が演算式または関数を含む場合に、この演算式または関数を部分式に分解するステップと、分解して得られた部分式のうち、共通する部分式を1つにまとめて有向非循環グラフを生成するステップとを含み、XPath式の評価を行うステップは、生成された有向非循環グラフを用い、複数のXPath式に共通する部分式については評価結果を複数のXPath式で共用して、各XPath式を評価するステップを含む。
このとき、個々の部分式については、上述したように共通部分を木構造における共通ノードとして持つデータ構造を生成することができ、これを用いた評価を行うことができる。
【0015】
本発明による他のXPath評価方法は、評価を行うべき複数のXPath式の中から共通部分を抽出するステップと、処理対象であるデータファイルに対して、XPath式における共通部分と他の部分とを分けて評価し、評価結果を結合して個々のXPath式に対する評価結果を得るステップとを含み、このXPath式の評価を得るステップは、所定のXPath式を評価する際、共通部分に関して、他のXPathを評価した際に得られた評価結果がある場合に、この評価結果を当該所定のXPath式における共通部分の評価結果として用いるステップを含むことを特徴とする。
【0016】
本発明による、さらに他のXPath評価方法は、コンピュータを用いて、所定のデータファイルを対象として複数のXPathを評価するXPath評価方法において、メモリから評価を行うべき複数のXPath式を含むXPathセットを読み出し、このXPathセットに含まれるXPath式の冗長な要素を省略したデータ構造を生成するステップと、処理対象のデータファイルを入力し、当該データファイルに対し、このデータ構造を用いてXPathセットの評価を行い、得られた評価結果をメモリに格納するステップとを含むことを特徴とする。
【0017】
より詳しくは、このデータ構造を生成するステップでは、複数のXPathセットに共通して含まれるXPath式と所定のXPathセットに固有のXPath式とを分類し、XPathセットの評価を行う際の評価対象となるXPath式を絞り込む。また、XPathセットに含まれる連結XPath式に関して、この連結XPath式を構成する各XPath式の間の依存関係に基づき、評価が不要なXPath式を評価対象から除くことにより、当該連結XPath式を簡略化する。さらに、複数のXPath式の間の依存関係に基づき、評価が不要なXPath式を評価対象から除く。さらにまた、複数のXPath式の間で共通する部分と各XPath式に固有の部分とを分割し、各部分を個別のXPath式として評価対象とする。
また、XPathセットの評価は、まず、各XPathセットに固有のXPath式を評価し、固有のXPath式が全て処理対象のデータファイルにマッチする場合に、このXPathセット中の他のXPathセットと共通するXPath式を評価する。
【0018】
また、上記の目的を達成する本発明は、次のように構成された文書処理システムとしても実現される。すなわち、この文書処理システムは、複数のXPath式を格納したXPath格納部と、このXPath格納部に格納されている複数のXPath式の冗長な要素を省略したデータ構造を生成するデータ構造生成部と、このデータ構造生成部にて生成されたデータ構造を用いて、処理対象であるデータファイルに対し、複数のXPath式の評価を行う評価実行部とを備えることを特徴とする。
さらに、この文書処理システムは、データ構造生成部にて生成されたデータ構造を格納し保存するデータ構造格納部を備える構成とすることができる。この場合、評価実行部は、このデータ構造格納部に格納されているデータ構造を繰り返し用いて複数のデータファイルに対してXPath式の評価を行うことができる。
【0019】
ここで、このデータ構造生成部は、詳しくは、個々のXPath式をステップごとに分解するステップ分解手段と、分解して得られた各ステップにノードを対応させ、複数のXPath式に共通するステップを1つのノードに対応させたデータ構造を生成する木生成手段とを備える。
また、このデータ構造生成部は、XPath格納部に格納されているXPath式が変更された場合に、新たに追加されたXPath式のうちでデータ構造に対応するノードがない部分について新たなノードを生成して既存のデータ構造に加える。一方、削除されたXPath式の部分に対応するノードのうちでXPath式に固有の部分に対応するノードのみを除去することにより、データ構造を更新する。
さらに、このデータ構造生成部は、他のXPath式と重複するXPath式または評価結果が他のXPath式に依存するXPath式を評価対象から除く。
さらにまた、この評価実行部は、データ構造におけるノードごとに対応する部分の評価を行い、この部分的な評価結果を結合して個々のXPath式全体の評価結果を得ると共に、複数のXPath式間で共通するノードに対応する部分の評価結果を、複数のXPath式の評価において共用する。
【0020】
また、上記の目的を達成する本発明は、上述したXPath評価方法の各ステップに対応する処理をコンピュータに実行させ、またはコンピュータを制御して上述した文書処理システムとしての各機能を実現するプログラムとしても実現することができる。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
【0021】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
なお、本実施の形態では、XML文書やウェブページの記述に用いられるHTML文書など、XPath式で所定の部分を指し示すことができるデータファイルを対象とする。したがって、以下の説明においてXML文書を対象として記載している部分をHTML文書に対して適用することも、反対にHTML文書を対象として記載している部分をXML文書に対して適用することも可能である。
〔第1の実施の形態〕
図1は、第1の実施の形態によるXML文書処理システムを実現するのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。
図1に示すコンピュータ装置は、演算手段であるCPU(Central Processing Unit:中央処理装置)101と、M/B(マザーボード)チップセット102及びCPUバスを介してCPU101に接続されたメインメモリ103と、同じくM/Bチップセット102及びAGP(Accelerated Graphics Port)を介してCPU101に接続されたビデオカード104と、ビデオカード104にて生成されたグラフィックデータを表示する表示装置110と、PCI(Peripheral Component Interconnect)バスを介してM/Bチップセット102に接続されたハードディスク105及びネットワークインターフェイス106と、さらにこのPCIバスからブリッジ回路107及びISA(Industry Standard Architecture)バスなどの低速なバスを介してM/Bチップセット102に接続されたフロッピーディスクドライブ108及びキーボード/マウス109とを備える。表示装置110としては、例えば液晶ディスプレイ(LCD)やCRTディスプレイを用いることができる。
なお、図1は本実施の形態を実現するコンピュータ装置のハードウェア構成を例示するに過ぎず、本実施の形態を適用可能であれば、他の種々の構成を取ることができる。例えば、ビデオカード104を設ける代わりに、ビデオメモリのみを搭載し、CPU101にてイメージデータを処理する構成としても良いし、音声による入出力を行うためのサウンド機構を設けたり、ATA(AT Attachment)などのインターフェイスを介してCD−ROM(Compact Disc Read Only Memory)やDVD−ROM(Digital Versatile Disc Read Only Memory)のドライブを設けたりしても良い。
【0022】
図2は、第1の実施の形態によるXML文書処理システムの機能を説明するブロック図である。
図2を参照すると、本実施の形態は、処理対象であるXML文書の特定部分を指し示す複数のXPath式を格納したXPath格納部10と、XPath格納部10に格納されているXPath式から本実施の形態による効率的な評価を行うためのデータ構造を生成するデータ構造生成部20と、データ構造生成部20にて生成されたデータ構造を格納するデータ構造格納部30と、データ構造格納部30に格納されているデータ構造を用いて処理対象であるXML文書に対してXPath式の評価を行う評価実行部40とを備え、また処理対象であるXML文書を格納するXML文書格納部50と、評価実行部40による評価を経たXML文書を対象として所定の情報処理を実行するXML文書処理部60とを備える。
【0023】
図2に示したシステム構成において、データ構造生成部20、評価実行部40及びXML文書処理部60は、図1に示したプログラム制御されたCPU101にて実現される仮想的なソフトウェアブロックである。CPU101を制御してこれらの機能を実現するプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供され、メインメモリ103に読み込まれる。また、XPath格納部10、データ構造格納部30及びXML文書格納部50は、メインメモリ103にて実現される。なお、メインメモリ103に保持されるデータやプログラムは、必要に応じてハードディスク105などの記憶装置に退避させることができる。
【0024】
図2に示したシステム構成において、XPath格納部10には、XML文書に対して評価を行うべき、予め用意された複数のXPath式が格納されている。データ構造格納部30には、データ構造生成部20にて生成され、評価実行部40にて用いられるデータ構造が格納される。XML文書格納部50には、図1に示したネットワークインターフェイス106や、キーボード/マウス109等の入力デバイス、処理対象であるXML文書を格納した記録媒体から当該XML文書を読み出すドライブ装置などを介して入力されたXML文書が格納されている。
【0025】
データ構造生成部20は、XPath格納部10に格納されているXPath式から、評価実行部40による評価に用いるデータ構造を生成する。また、XPath格納部10に格納されているXPathが変更(追加または削除)されたならば、この変更に応じてデータ構造を更新する。このデータ構造を用いることにより、XML文書に対してXPath格納部10に格納されている複数のXPath式を個別に評価する場合に比べて効率の良い評価を行うことが可能となる。このデータ構造についての詳細、このデータ構造を用いた評価方法及びこのデータ構造の生成方法については後述する。
【0026】
評価実行部40は、XML文書格納部50に格納されているXML文書に対して、データ構造生成部20にて生成されたデータ構造を用いてXPath式の評価(マッチング)を行う。これにより、当該入力文書がXPath格納部10に格納されているXPath式にて指定される特定部分を持つかどうかを、効率よく評価することができる。評価実行部40による評価結果はメインメモリ103の所定の領域に格納される。
XML文書処理部60は、メインメモリ103の所定領域から評価実行部40の評価結果を読み出し、当該評価結果に基づいて、XML文書格納部50に格納されているXML文書がXPath格納部10に格納されているXPath式にて指定される特定部分を持つならば、XML文書格納部50から当該XML文書を処理対象として読み出し、目的とする所定の情報処理、すなわちアプリケーションとして用意された情報処理を実行する。
【0027】
次に、本実施の形態におけるXPath式の評価を効率化する方法を詳細に説明する。
本実施の形態では、複数のXPath式における共通部分を共用するためのデータ構造を生成し、このデータ構造を用いてXML文書に対する評価を行うことにより、評価処理の高速化を実現する。これを実現する方策として、本実施の形態では、次の3つの手法を提示する。
方法1.複数のロケーション・パスの間でのステップの評価の共有。
方法2.複数の演算式や関数の間での部分式や引数の評価の共有。
方法3.ロケーション・パスの述部の高速化。
【0028】
以下、各手法について説明する。
方法1.複数のロケーション・パスの間でのステップの評価の共有
XPath格納部10に、次の3つのXPath式P1、P2、P3が格納されており、XML文書に対してこれらのXPath式を評価する場合を例として説明する。
P1:/profile/demographics/age[text() < 20]
P2:/profile/interests/sport[text() = 'Soccer']
P3:/profile/demographics/age[text() >= 40 and text() < 50]
【0029】
まず、データ構造生成部20により、上記XPath式P1、P2、P3をまとめたデータ構造が生成される。
データ構造生成部20は、このデータ構造を生成するため、上記のXPath式をステップごとに分解する。ステップが軸指定子(axis)とノードテストの組と述部からなるときには、さらにこれらも分解する。すなわち、XPath式P1は次のP1’に、P2はP2’に、P3はP3’に、それぞれ分解される。
P1’:profile + demographics + age + [text() < 20]
P2’:profile + interests + sport + [text() = 'Soccer']
P3’:profile + demographics + age + [text() >= 40 and text() < 50]
P1’、P2’、P3’を比較すると、これら3つのXPath式は「profile」を共通ステップとして持つ。また、P1’とP3’とは、さらに続くステップの「demographics」を共通に持つ。そこで、共通のステップをまとめることによって、これらのXPath式を木構造で表現することができる。
すなわち、かかる処理においてデータ構造生成部20は、XPath式をステップごとに分解するステップ分解手段と、各ステップに対応するノードを持つ木構造(データ構造)を生成する木生成手段として機能する。
図3は、データ構造生成部20にて生成されるデータ構造(木構造)を示す図である。
【0030】
次に、評価実行部40により、上記のように生成された木データ構造を用いて、XML文書に対するXPath式P1、P2、P3の評価が行われる。
ここでは、図4に示すXML文書に対し、XPath式P1、P2、P3を評価する例を考える。
(1)XPath式P1の評価
最初に図4に示したXML文書D1に対し、XPath式P1の先頭のステップ「profile」を評価する。評価結果は、次の4要素を持つノードセットになる。
N1:
{<name>Alan</name>,
<demographics><age>35</age></demographics>,
<location><city>Osaka</city></location>,
<interests><sport>Soccer</sport><music>Classical</music><book>History</book></interests>}
【0031】
ノードセットN1の4つの要素それぞれに、XPath式P1の次のステップ「demographics」を適用すると、結果は
{},{<age>35</age>},{},{}
となる。この4つのノードセットを結合して、このステップのノードセットを作ると、次のようになる。
N2:
{<age>35</age>}
このノードセットN2の要素に「age」を適用すると、次のようになる。
N3:
{35}
さらに、このノードセットN3に「[text() < 20]」適用すると、結果は空のノードセットになり、これがXPath式P1の評価結果として得られる。
【0032】
(2)XPath式P2の評価
次に、XPath式P2を評価する。このとき、XML文書D1に対するXPath式P2の先頭のステップ「profile」の評価結果は、すでにノードセットN1として得られている。したがって、この評価のための処理は実際には行わず、すでに得られている評価結果を使用する。ノードセットN1の各要素に「interests」を適用すると、結果はそれぞれ
{},{},{},{<sport>Soccer</sport>, <music>Classical</music>, <book>History</book>}
となる。この4つのノードセットを結合して、このステップのノードセットを作ると、次のようになる。
N4:
{<sport>Soccer</sport>, <music>Classical</music>, <book>History</book>}
【0033】
さらに、このノードセットN4の3つの要素に対して、XPath式P2の残りの表現である「sport」を適用し、その結果に「[text() = 'Soccer']」を適用すると、結果は
{Soccer},{},{}
となる。これを結合すると
{Soccer}
となり、これがXPath式P2の評価結果として得られる。
【0034】
(3)XPath式P3の評価
最後にXPath式P3を評価する。このとき、XML文書D1に対するXPath式P3のロケーション・パスのうち、「/profile/demographics/age」の部分の評価値は、すでにノードセットN3として得られている。したがって、この部分に対する評価のための処理は実際には行わず、すでに得られている評価結果を使用する。ノードセットN3の各要素に対して、XPath式P3の最後の述部「[text() >= 40 and text() < 50]」を適用すると、結果は空のノードセットになり、これがXPath式P3の評価結果として得られる。
【0035】
以上のようにして、図3に示したデータ構造を用い、複数のXPath式に共通するステップについては1度だけ実際の計算を行い、評価結果を共有することによって、複数のXPath式の計算時間を短縮することができる。
上記の例では、任意の順番でXPath式を評価するように記述したが、図3のデータ構造から導かれる深さ優先または幅優先の順番で評価することにより、評価を行う際に必要なメモリの記憶領域を減らすことができる。例えば、深さ優先で評価した場合、所定のノードを保持するために必要な記憶領域は、当該ノードに対して全ての部分木の評価が終わったならば回収できる。一方、幅優先で評価した場合、上位ノードの評価結果を保持するために必要な記憶領域は、当該評価結果が下位ノードの評価に使用された後に回収できる。
【0036】
図5は、幅優先で複数のXPath式を評価する場合の評価実行部40による処理手順を説明するフローチャートである。
図5を参照すると、評価実行部40は、まず、XML文書全体を1つの要素とする集合を、現在のノードセットにする(ステップ501)。そして、全てのロケーション・パスの先頭ステップを、ステップ集合の要素にする(ステップ502)。次に、全てのステップ集合の要素に対し、次の処理を行う。すなわち、まず、現在のノードセットの各要素に対して、ステップをそれぞれ評価する(ステップ504)。そして、全ての評価結果を結合する。これを現在のノードセットとする(ステップ505)。
【0037】
ステップ504、505の処理を、全てのステップ集合の要素に対して行ったならば、次に、全てのステップ集合の要素に対して、次のステップの集合を求める。そして、評価結果を結合し、現在のステップ集合と置き換える(ステップ503、506)。
この後、ステップ集合に要素が残っていればステップ503〜506の処理を繰り返し、要素が空になったならば処理を終了する。
すなわち、かかる処理で評価実行部40は、各XPath式の評価において、データ構造のノードに対応するステップごとに評価を行う部分評価手段と、ステップごとの評価結果を結合してXPath式全体の評価結果を得る評価結果結合手段として機能する。そして、他のXPath式の共通するステップの評価において、当該ステップに関して他のXPath式を評価した際の評価結果が存在するならば、この評価結果を着目中のXPath式の該当ステップの評価結果として用いることにより、当該ステップに対する評価処理を省略する。
【0038】
この方法の基礎になるXPathの性質は、ロケーション・パスの途中までの表現を評価して得たノードセットに対して、そのノードセットの各要素をコンテクストノードとしてパスの残りを評価し、最後に結果を結合すると、パス全体を評価したものと同じものが得られることである。すなわち、上記の手順では、各XPath式のロケーション・パスのうちで共通部分を抽出し、当該共通部分と他の部分とを分けて評価した上で評価結果を結合する。この過程で、評価結果を共有できる部分(ロケーション・パスの共通部分)に対する評価結果が既に存在するならば、かかる部分に対する評価処理を省略して、その既存の評価結果を使用する。したがって、この性質を満たすようにパスが分解できる場合には、この方法が適用できることとなる。
上記の説明では、軸指定子(axis)を省略してデフォルトの「child」が選択される場合を例として用いたが、軸指定子が「decsendant::age」などのように「child」以外を明示的に書いてある場合も方法1で扱うことができる。また、ステップの区切りとして「/」だけでなく「//」の場合も扱うことができる。さらに、ノードテストとして要素名だけでなく、「.」「..」「*」「comment()」などを記述することもできる。例えば、次に示すような表現で記述されたXPath式などが、方法1で扱うことができる。
/*//interest/../demographics/decsendant::age[text() < 20]
【0039】
方法2.複数の演算式や関数の間での部分式や引数の評価の共有
上記の方法1では、ロケーション・パスの評価を高速化する手法を説明した。
XPathにおいては、ロケーション・パス式が主要な式であるが、パスの述部の条件を記述したり、他のプログラムが使うためのデータを生成したりするために、四則演算式、比較演算式、論理演算式などの演算式や関数も使用される。そこで、以下に説明するロケーション・パス以外の式を高速化する手法を用いる。
【0040】
XPath格納部10に、次の3つのXPath式P7、P8、P9が格納されており、XML文書に対してこれらのXPath式を評価する場合を例として説明する。
P7:
(/CPEXMLv1/person/partyActivities/food[favoriteFood='Hamburger'] or
(not(/CPEXMLv1/person/partyActivities/hobby[typeName='SPORT']) and
/CPEXMLv1/person/personDemographics/birthDate[year<1960])) and
/CPEXMLv1/person/partyActivities/hobby/startDate[year=1986]
P8:
(/CPEXMLv1/person/partyDemographics[gender ='MALE'] or
(not(/CPEXMLv1/person/partyActivities/hobby[typeName='SPORT']) and
/CPEXMLv1/person/personDemographics/birthDate[year<1960])) and
/CPEXMLv1/person/partyActivities/hobby/startDate[year>1990]
P9:
/CPEXMLv1/person/partyActivities/food[favoriteFood ='Hamburger'] and
/CPEXMLv1/person/partyActivities/hobby/startDate[year>1990]
【0041】
データ構造生成部20は、まず、上記のXPath式P7、P8、P9をロケーション・パスからなる部分式に分解する。すなわち、XPath式P7はP71〜P74に、P8はP81〜P84に、P9はP91、P92に、それぞれ分解される。
P71:/CPEXMLv1/person/partyActivities/food[favoriteFood ='Hamburger']
P72:/CPEXMLv1/person/partyActivities/hobby[typeName='SPORT']
P73:/CPEXMLv1/person/personDemographics/birthDate[year<1960]
P74:/CPEXMLv1/person/partyActivities/hobby/startDate[year=1986]
P81:/CPEXMLv1/person/partyDemographics[gender ='MALE']
P82:/CPEXMLv1/person/partyActivities/hobby[typeName='SPORT']
P83:/CPEXMLv1/person/personDemographics/birthDate[year<1960]
P84:/CPEXMLv1/person/partyActivities/hobby/startDate[year>1990]
P91:/CPEXMLv1/person/partyActivities/food[favoriteFood ='Hamburger']
P92:/CPEXMLv1/person/partyActivities/hobby/startDate[year>1990]
【0042】
上記の部分式のうちで、P71とP91、P72とP82、P73とP83、P84とP92は、それぞれ同じ式である。したがって、XPath式P7、P8、P9は、有向非循環グラフ(DAG)にて表現することができる。
図6は、XPath式P7、P8、P9を表す有向非循環グラフを示す図である。
図6における左側の6個のロケーション・パスについては、上述した方法1によるステップの評価を共有する手法を用いることができるので、この部分を図3に示したような木構造のデータ構造に変換する。生成された有向非循環グラフのデータ構造は、方法1で生成された木構造のデータ構造と共にデータ構造格納部30に格納される。
【0043】
評価実行部40は、以上のようにして得られたデータ構造を用いて、XPath式P7、P8、P9を評価する。まず、ロケーション・パス部分を、方法1を用いて評価する。次に、図6の有向非循環グラフを使って各XPath式を評価する。このとき、共通の部分式を持つものについては、当該部分式を1度だけ評価し、共通箇所に対して当該評価結果を再使用するようにする。
上記の例では、引数がノードセットで、評価した値が真理値になる論理演算式を例として取り上げたが、四則演算式など他のデータ型の演算式でも同様の最適化が可能である。
【0044】
方法3.ロケーション・パスの述部の高速化
上述した方法1では、述部が異なるステップは独立のステップとして処理を行うものとして説明した。しかしながら、類似する述部の共通性を利用して述部の実行を高速化することが可能である。
例えば「[age < 20]」などのように、「[(式) (比較演算子) (定数)]」の形になる述部が高速化される。表面的にはこの形になっていなくても、置き換えや部分計算によってこの形に変形できればこの手法が適用できる。例えば、ノードの位置による指定「[2]」は、「[position() = 2]」に置き換えられるので、この手法が適用できる。
【0045】
ここでは、(1)比較演算子が「=」の場合、(2)比較演算子が「!=」の場合、(3)比較演算子が「>」の場合について、具体的について説明する。
(1)比較演算子が「=」の場合の高速化
ステップにおける述部の式の評価結果をキーとして、残りのロケーション・パスを検索するためのハッシュテーブルを作る。例えば、次に示すXPath式P41、P42、P43、P44のように、/CPEXMLv1/person/partyActivities/hobby[typeName = 'XYZ']/...の「XYZ」部分が様々な値を取るようなXPath式がある場合を考える。
P41:
/CPEXMLv1/person/partyActivities/hobby[typeName = 'SPORT']/startDate/year
P42:
/CPEXMLv1/person/partyActivities/hobby[typeName = 'MUSIC']/composer
P43:
/CPEXMLv1/person/partyActivities/hobby[typeName = 'SPORT']/hobbyName
P44:
/CPEXMLv1/person/partyActivities/hobby[typeName = 'COMPUTER']/software
【0046】
データ構造生成部20は、上記のXPath式P41、P42、P43、P44に対して、次のようなハッシュテーブルを生成する。
・キーが'SPORT'のときに検索される組が{startDate/year, hobbyName}
・キーが'MUSIC'のときに検索される組が{composer}
・キーが'COMPUTER'のときに検索される組が{software}
また、/CPEXMLv1/person/partyActivities/hobbyまでの部分に関しては、方法1によりステップ評価の共有が可能であるので、この部分に対するデータ構造を生成する(ただし、この部分についてはXPath式P41、P42、P43、P44が全て同一であるので、木構造としての分岐はない)。生成されたハッシュテーブルは、方法1で生成された木構造のデータ構造と共にデータ構造格納部30に格納される。
【0047】
評価実行部40は、まず上述した方法1により、/CPEXMLv1/person/partyActivity/hobbyステップの評価を行い、ノードセットを得ておく。そして、ノードセットの各ノードに対して上記のハッシュテーブルを用いた処理を行う。
図7は、ハッシュテーブルを用いた評価処理の流れを説明するフローチャートである。
図7を参照すると、まず、述部の左辺式(この例の場合は「typeName」)を評価する(ステップ701)。次に、左辺式の値をキーとしてハッシュテーブルを検索し(ステップ702)、検索結果が得られた場合は、得られたロケーション・パスを当該ノードに対して評価し、評価結果を返す(ステップ703、704)。一方、検索結果が得られない場合は、空のノードセットを返す(ステップ703、705)。
【0048】
以上説明した方法3を用いることにより、1つのノードに対してXPathの個数と同じ回数の述部を評価する必要が無くなり、1回のテーブル検索で1つのノードに対して全ての述部を評価したのと同じ結果が得られることとなる。例えば、typeNameが'MUSIC'の場合、XPath式P42の述部が真になり、P41、P43、P44の述部が偽になることが1回のテーブル検索で判断される。
XPath式の数がnで、ノードセットに含まれるノード数がmとすると、方法3を用いない場合、全てのノードに対して全てのXPathを評価するためには、述部のチェックにO(n×m)の時間を要する(O(n×m)は、n×mの定数倍以内の時間で計算が可能であることを意味する)。一方、方法3を用いた場合、ほぼ定数時間で実行できるハッシュテーブルの検索がm回行なわれる。したがって、nが十分大きい場合、方法3を用いることにより、評価処理の大幅な高速化を図ることができる。
【0049】
(2)比較演算子が「!=」の場合の高速化
上記の比較演算子が「=」の場合に、キーがKiのときに検索される残りのロケーション・パスの集合がPiであるとすると、比較演算子が「!=」の場合には、キーがKjのときに検索される残りのロケーション・パスの集合が∪ijPiになるようにハッシュテーブルを構成する。XPath式P41、P42、P43、P44の場合、次のような検索結果を返すハッシュテーブルを構成する。
・キーが'SPORT'のとき、{composer, software}
・キーが'MUSIC'のとき、{startDate/year, hobbyName, software}
・キーが'COMPUTER'のとき、{startDate/year, composer, hobbyName}
以上のハッシュテーブルを用いる他、全体の処理については(1)比較演算子が「=」の場合と同様であるため、説明を省略する。
【0050】
(3)比較演算子が「>」の場合の高速化
比較演算子が「>」の場合、データ構造生成部20は、ステップの述部の定数をキーとして検索を行う二分探索木を作る。例えば、次の2つのXPath式P5、P6がある場合、
P5:/CPEXMLv1/person/personDemographics/birthDate[year>1990]/gender
P6:/CPEXMLv1/person/personDemographics/birthDate[year>1976]/birthPlace
次のような計算を行なう二分探索木を構成する。
Figure 0004039484
生成された二分探索木は、方法1で生成された木構造のデータ構造と共にデータ構造格納部30に格納される。
【0051】
評価実行部40は、まず上述した方法1により、/CPEXMLv1/person/personDemographics/birthDateまでのステップの評価を行う。次に、述部の左辺式(この例の場合はyear)を評価し、その値をキーとして二分探索木の検索を行う。この探索の結果、キーが1990よりも大きい値の場合は、「gender」と「birthPlace」の両方が返される。キーが1990以下で1976よりも大きい値の場合には「birthPlace」が返される。そして、どの条件も満たさない場合には空集合が返される。
XPath式の数がnで、ノードセットに含まれるノード数がmとすると、方法3を用いない場合、全てのノードに対して全てのXPathを評価するためには、述部のチェックにO(n×m)の時間を要する。一方、方法3を用いた場合、O(log n)の時間を要する二分探索がm回行なわれる。したがって、nが十分大きい場合、方法3を用いることにより、評価処理の大幅な高速化を図ることができる。
なお、ここでは比較演算子が「>」の場合について説明したが、比較演算子が「>=」、「<」、「<=」の場合も同様に扱うことができるのは言うまでもない。
【0052】
次に、データ構造生成部20が、XPath格納部10に格納されているXPath式から評価実行部40に用いられるデータ構造(図3参照)を生成する方法について説明する。
本実施の形態で用いられるデータ構造の生成には、原則的には木構造を生成する一般的な種々の方法を用いることができ、特にその生成方法は限定されない。しかしながら、本実施の形態では、XPath格納部10に格納されているXPathが変更(追加または削除)された場合に、効率的にかかる変更をデータ構造に反映させることのできる生成方法を提案し、これについて説明する。
【0053】
XML文書に対してXPath式を評価する処理に要する時間を短縮するためには、処理を行うたびに毎回上述したようなデータ構造を生成するのではなく、生成されたデータ構造をデータ構造格納部30に保存しておき、複数のXML文書に対する処理において使い回すことが考えられる。
さらに、XPath格納部10に格納されているXPathの集合が変化した場合に、データ構造を最初から生成し直すのではなく、追加されたXPath式と削除されたXPath式とを、保存してあるデータ構造に反映するようにすれば、効率的に所望のXPath集合のためのデータ構造を得ることができる。
すなわち、XPath式が新たに追加された場合には、そのXPath式のうちで、既存のデータ構造に対応するノードがないステップについて新たなノードを生成し、このデータ構造に加える。一方、所定のXPath式が削除された場合には、そのXPath式のステップに対応するノードのうちでこのXPath式に固有の部分に対応するノードのみを除去する。これにより、データ構造を効率よく更新する。
【0054】
図8は、データ構造生成部20によるデータ構造の生成方法を説明するフローチャートである。
本実施の形態では、XPath式を1つずつ順次追加していくことにより、所望のデータ構造を得ることとする。したがって、最初にデータ構造を生成する際には、XPath格納部10に格納されているXPath集合の中から所定のXPath式を選択し、他のXPath式を順次加えていくこととなり、XPath集合の変更により新たなXPath式が追加された場合には、既に生成されたデータ構造格納部30に格納されているデータ構造に、新たに追加されたXPath式のステップを加えていくこととなる。
【0055】
図8を参照すると、データ構造生成部20は、まず追加するXPath式Pをステップs1、s2、・・・、skに分解する(ステップ801)。次に、パラメータi及びパラメータSを初期化、すなわちi=1、S=「トップレベルのステップの集合」とし(ステップ802)、ステップの集合Sからステップsiを探す(ステップ803)。
ステップの集合Sにステップsiが含まれていれば、次に、i+1をパラメータiの新しい値とし(ステップ804、805)、当該新たなiがXPath式Pにおけるステップの数kに達していないか調べる(ステップ806)。そして、iの値がkに達していなければ、パラメータSをS=「データ構造中でステップsiの次のレベルにおけるステップの集合」とし、ステップ803から処理を繰り返す(ステップ807)。
【0056】
一方、ステップ804で、ステップの集合Sにステップsiが含まれていないと判断されたならば、si、・・・、skに対応するステップをデータ構造に追加し(ステップ808)、XPath式Pを当該データ構造の該当ステップに登録して処理を終了する(ステップ809)。
また、ステップ806で、新しいiの値がXPath式Pにおけるステップの数kに達した場合も、XPath式Pを当該データ構造の該当ステップに登録して処理を終了する(ステップ809)。
【0057】
ここで、図3に示したデータ構造に、次のXPath式P4を追加する場合を例として、処理を具体的に説明する。
P4:/profile/location/city[text() = 'Tokyo']
まず、ステップ801で、XPath式P4が、ステップごとに次のように分解される
s1 = profile
s2 = location
s3 = city
s4 = [text() = 'Tokyo']
なお、ロケーション・パスが省略形を使って表現してある場合には、省略形を使わない表現に変換してから分解する。例えば、ステップの区切り「//」は「decendant-or-self::node()」に、「.」は「self::node()」に変換しておく。
【0058】
次に、ステップ802で、i=1、S={profile}に初期化される。
ステップs1がステップの集合Sに含まれ、かつ残りのステップが存在するので(ステップ803〜806)、ステップ807に進み、データ構造中で「profile」の次のレベルのステップ「{demographics, interests}」がSに代入される。
すると、今度はステップ804の判断において、ステップs2の値「location」はステップの集合Sに含まれないので、ステップ808に進み、s2、s3、s4に対応するステップがデータ構造に追加される。そして、ステップ809で、XPath式P4がデータ構造に登録される。
図9は、図3のデータ構造にXPath式P4が追加された状態のデータ構造を示す図である。
【0059】
以上で、上述した方法1のステップ評価の高速化を実現するためのデータ構造が生成(更新)された。次に、方法2による演算式評価の高速化を実現するためのデータ構造の生成(更新)について説明する。
まず、新たに加える演算式からロケーション・パスを抽出し、その中から既存のデータ構造に登録されていないロケーション・パスだけをデータ構造に追加する。ロケーション・パスの追加は、図8のフローチャートに示した手順にて行われる。
ロケーション・パス以外の部分式に対しては、共通部分式として既に現れているかどうかを検索する。そして、既に共通部分式として現れている場合には、その共通部分式を評価するデータ構造を再使用するようにする。共通部分式として現れていな場合は、その部分式を評価するためのデータ構造を新たに作り、既存のデータ構造に追加する。
【0060】
次に、方法3による述部評価の高速化を実現するためのデータ構造の生成(更新)について説明する。
図8のステップ808において、ステップsiの述部が、[<式> = <定数>]、[<式> != <定数>]、[<式> < <定数>]、[<式> <= <定数>]、[<式> > <定数>]、[<式> >= <定数>]のいずれかである場合、まず、式に対応するハッシュテーブル(または二分木)があるかどうかを調べる。対応するハッシュテーブル(または二分木)がない場合は、これらを生成する。すなわち、定数をキーとした検索項目を既存のハッシュテーブル(または二分木)に追加する。そして、残りのステップ列(si+1、・・・、sk)を、木構造にして既存のデータ構造に追加する。データ構造への追加は、図8のフローチャートに示した手順にて行われる。
【0061】
図10は、データ構造から所定のXPath式を除去する際のデータ構造生成部20の処理を説明するフローチャートである。
図10を参照すると、データ構造生成部20は、まずパラメータsをs=「データ構造上でXPath式Pが登録されているステップ」とし(ステップ1001)、ステップsからXPath式Pを取り除く(ステップ1002)。
次に、ステップsに登録されているXPath式の数が0かどうかを調べ、0でないならば処理を終了する(ステップ1003)。
一方、ステップsに登録されているXPath式の数が0になった場合、次に、パラメータspをsp=「データ構造中でステップsの1つ上位のステップ」とし(ステップ1004)、ステップspからステップsを取り除く(ステップ1005)。そして、ステップspの1つ下位のステップ数が0かどうかを調べ、0でないならば処理を終了する(ステップ1006)。
これに対し、ステップspの1つ下位のステップ数が0になった場合、s=spとしてステップ1004に戻り(ステップ1007)、新たなステップsに関して処理を繰り返す。
【0062】
ここで、図9に示したデータ構造からXPath式P3を除去する場合を例として、処理を具体的に説明する。
まず、ステップ1001で、パラメータsに、データ構造上の「[text() >= 40 and text < 50]」のステップが割り当てられる。ここからXPath式P3を取り除くと、ステップsに登録されているXPath式の数が0になるので、ステップ1004に進む。そして、ステップ1005で、ステップsの上位ステップ「demographics」からステップsを取り除く。この場合、ステップ1006の判断において、「demographics」の下位ステップ数が0ではないので、ここで処理が終了する。
図11は、図9のデータ構造からXPath式P3を除去した状態のデータ構造を示す図である。
【0063】
以上で、上述した方法1のステップ評価の高速化を実現するためのデータ構造が更新された。次に、方法2による演算式評価の高速化を実現するためのデータ構造の更新について説明する。
まず、取り除こうとする演算式からロケーション・パスを抽出し、その中からこの演算式だけが使っているロケーション・パスを求め、当該ロケーション・パスをデータ構造から取り除く。また、所定のロケーション・パスが取り除こうとする演算式だけから使われているかどうかの検査は、ロケーション・パスの参照数を管理するなどの手法を用いて行うことができる。
さらに、ロケーション・パス以外の部分式に対しても同様に、この演算式だけが使っている部分式を求めて、データ構造から取り除く。
【0064】
次に、方法3による述部評価の高速化を実現するためのデータ構造の更新について説明する。
まず、述部の定数に対応する項目をハッシュテーブル(二分木)から取り除く。そして、この項目から検索されるロケーション・パスをデータ構造から削除する。ロケーション・パスの削除は、図10のフローチャートに示した手順にて行われる。
【0065】
次に、XPath式及びXML文書の具体例を挙げて、本実施の形態の動作についてさらに説明する。
XPath格納部10に、次の4つのXPath式が格納されているものとする。
P11:/profile/interests[sport/@type = 'Soccer']/music
P12:/profile/interests[sport/@type = 'Baseball']/book
P13:/profile/demographics/age
P14:count(/profile/interests[sport/@type = 'Soccer']) > 1
【0066】
データ構造生成部20は、図8に示した手順で上記4つのXPath式P11、P12、P13、P14に対するデータ構造を生成する。なお、以下では、空の木構造(初期状態)に対して、XPath式P11、P12、P13、P14を順次追加するものとして説明する。
P11の追加:
(1)ロケーション・パスを3つのステップ「profile」、「interests[sport/@type = 'Soccer']」、「music」に分解する(ステップ801)。
(2)ステップ「profile」はデータ構造に登録されていないので、追加し登録する(ステップ804、808、809)。
(3)ステップ「interests[sport/@type = 'Soccer']」を「interests」と「[sport/@type = 'Soccer']」とに分解する。
(4)ステップ「interests」はデータ構造に登録されていないので、追加し登録する(ステップ804、808、809)。
(5)述語のためのハッシュテーブルがないので生成する。
(6)述語の左辺式であるロケーション・パス「sport/@type」を表現するデータ構造を作り、ハッシュテーブルに付加する。
(7)キーが'Soccer'で値が残りのステップ「music」となるエントリをハッシュテーブルに追加する。
【0067】
P12の追加:
(1)ロケーション・パスを3つのステップ「profile」、「interests[sport/@type = 'Baseball']」、「book」に分解する(ステップ801)。
(2)ステップ「profile」と「interests」とは、既にデータ構造に登録されており、また対応するハッシュテーブルに「sport/@type」のためのデータ構造も付加されているので、データ構造への追加は行わず、XPath式P12の登録のみを行う(ステップ809)。
(3)キーが'Baseball'で、値が残りのステップ「book」となるエントリをハッシュテーブルに追加する。
【0068】
P13の追加:
(1)ロケーション・パスを3つのステップ「profile」、「demographics」、「age」に分解する(ステップ801)。
(2)ステップ「profile」は登録されているが、「demographics」と「age」は登録されていないので、「demographics」と「age」とをステップとしてデータ構造に追加し、XPath式P13を登録する(ステップ804、808、809)。
【0069】
P14の追加:
(1)式を部分式に分解して、ロケーション・パス「/profile/interests[sport/@type = 'Baseball']/」を抽出する。
(2)ロケーション・パス「/profile/interests[sport/@type = 'Baseball']」は、既に登録されているので、その結果を関数countに渡し、さらに関数countの結果を比較演算式に渡すようにデータ構造を生成する。
【0070】
以上の結果、4つのXPath式P11、P12、P13、P14を表現するデータ構造が生成される。
図12は、生成されたデータ構造を示す図である。
生成されたデータ構造はデータ構造格納部30に格納され、保存される。
【0071】
次に、図13に示すXML文書が入力され、XML文書格納部50に格納されたものとする。評価実行部40は、XML文書格納部50からこのXML文書を読み出し、データ構造格納部30に格納されているデータ構造を用いて、XPath式P11、P12、P13、P14を評価する。
まず、最初のステップ「profile」を実行し、2つの要素からなるノードセットN1を得る。
Figure 0004039484
【0072】
次に、ノードセットN1の各要素にステップ「interests」を適用し、次の2つのノードセットを得る。
{}
{<sport type@='Baseball'/>, <book>History<book/>}
そして、この2つの併合し、「interests」の結果であるノードセットN2を得る。
N2:
{<sport type@='Baseball'/>, <book>History<book/>}
【0073】
次に、ノードセットN2の2つの要素に対して、左辺式「sport/@type」を評価すると、それぞれ、{}と{'Baseball'}とが得られる。
そして、'Baseball'をキーとしてハッシュテーブルを検索すると、ステップ「book」と関数countが得られる。「book」をノードセットN2の2つの要素に対して評価すると、{}と{History}とが得られる。この2つを併合して
XPath式P2の評価値:{History}
を得る。
【0074】
次に、{<sport type@='Baseball'/>,を引数として関数countを評価すると値は1となり、この値1との比較演算を評価するとfalseになるので
XPath式P4の評価値:false
を得る。
そして、ノードセットN1の各要素にステップ「demographics」を適用し、結果を併合すると「{<age>19</age>}」になり、さらにこの要素にステップ「age」を適用して、
XPath式P3の評価値:{19}
を得る。
さらに、データ構造を訪問し終わってもXPath式P1にたどり着くノードがないので、
XPath式P1の評価値:空のノードセット
を得る。
【0075】
次に、本実施の形態によるXML文書処理システムによるXPath式の評価処理の実施例を示す。
本実施の形態では、上述したようにXPath式をステップごとに細分化し、細分化によってできたXPathの断片の実行に関して、実行順序を代えたり実行回数を減らしたりすることにより、全体の実行時間を短縮している。
XPath式の断片もまたXPath式であり、この断片の実行には、Apache XML Projectにて提供されるXSLTプロセッサXalan-Java 2(以下、単にXalanと記す)に含まれるXPathプロセッサのパッケージorg.apache.xpathを使用した。例えば、ロケーション・パスの1つのステップの実行や算術式の評価のためにXalanの機能をそのまま使っている。このため、Xalanのみを使用して実行した場合と、本実施の形態によるXML文書処理システムでXalanを使用し実行したものの差分によって、本実施の形態によるXPathの評価における効率化の度合いを直接知ることができる。
【0076】
本実施例では、CPExchange(IDEAlliance, CPExchange Specification Version 1.0, 2000.(http://www.cpexchange.org/))で定義されるXML文書に対して、多くのXPath式が用意されており、それらのXPath式の中から与えられたXML文書に適合するものを選ぶことを行なう。XPath式としては、次のようなパターンでXYZが異なるものを生成してシステムに登録する。
/CPEXMLv1/person/partyActivities/hobby[typeName='XYZ']
/CPEXMLv1/person/partyActivities/hobby[hobbyName='XYZ']
/CPEXMLv1/person/partyActivities/food[favoriteFood='XYZ']
/CPEXMLv1/person/personDemographics/gender[@enumtype='XYZ']
/CPEXMLv1/personName[firstName='XYZ']
/CPEXMLv1/person/partyActivities/hobby/startDate[year!='XYZ']
/CPEXMLv1/person/personDemographics/birthDate[year='XYZ']
/CPEXMLv1/person/partyActivities/newspaper/startDate[year='XYZ']
/CPEXMLv1/person/partyActivities/hobby/startDate[year='XYZ']
/CPEXMLv1/person/partyActivities/magazine/startDate[year='XYZ']
また、システムの動作環境としては、CPU101に米国Intel社のモバイル Pentium IIIの800MHzを用い、メインメモリ103を128MBのRAM(Random Access Memory)、オペレーティングシステムを米国Microsoft社のWindows 2000とした。
【0077】
図14は、上記の条件で、本実施例によるXPath式の評価に要した実行時間を示す図である。図14には、(1)XalanだけでXPath式を評価するシステムと(2)本発明の手法とXalanの組合わせで評価するシステムの2つの実行時間を測定した結果が示されている。
図14を参照すると、Xalanだけを使用したシステムでは、XPath式の数の増加に対して直線的に実行時間が増大している。一方、本実施の形態においてXalanを使用したシステムでは、XPath式の数の増加量に対して実行時間の増大がほとんど見られない。したがって、XPath式の数が増加するにしたがって両社の性能の違いが大きくなっている。
【0078】
〔第2の実施の形態〕
上記第1の実施の形態では、評価されるべき複数のXPath式に関し、その共通部分を共用するデータ構造を用いてXML文書に対する評価を行うことにより、評価結果を共用し、評価処理の高速化を実現した。これに対し、第2の実施の形態では、評価されるべき複数のXPath式の間の依存関係を解析し、得られた依存関係に基づいて当該複数のXPath式の冗長部分を省略したデータ構造を用いて評価を行うことにより、評価処理を簡単化し、評価処理の高速化を実現する。なお、本実施の形態では、ウェブページにアノテーションを付加する目的で、アノテーション内のXPath式が対象のウェブページの所定のエレメントを正しく指しているかどうかを評価する場合を例として説明する。
第2の実施の形態によるウェブページ処理システムは、第1の実施の形態と同様に、例えば図1に示すようなハードウェア構成を有するコンピュータ装置にて実現される。
【0079】
図15は、第2の実施の形態によるウェブページ処理システムの機能を説明するブロック図である。
図15を参照すると、本実施の形態は、処理対象であるウェブページ(HTML文書)の特定部分を指し示す複数のXPath式を格納したXPath格納部1510と、XPath格納部1510に格納されているXPath式から本実施の形態による効率的な評価を行うためのデータ構造を生成するデータ構造生成部1520と、データ構造生成部1520にて生成されたデータ構造を格納するデータ構造格納部1530と、データ構造格納部1530に格納されているデータ構造を用いて処理対象であるウェブページに対してXPath式の評価を行う評価実行部1540とを備え、また処理対象であるウェブページを格納する文書格納部1550と、評価実行部1540による評価を経たウェブページを対象として所定の情報処理を実行する文書処理部1560とを備える。
【0080】
図15に示したシステム構成において、データ構造生成部1520、評価実行部1540及び文書処理部1560は、図1に示したプログラム制御されたCPU101にて実現される仮想的なソフトウェアブロックである。CPU101を制御してこれらの機能を実現するプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供され、メインメモリ103に読み込まれる。また、XPath格納部1510、データ構造格納部1530及び文書格納部1550は、メインメモリ103にて実現される。なお、メインメモリ103に保持されるデータやプログラムは、必要に応じてハードディスク105などの記憶装置に退避させることができる。
【0081】
図15に示したシステム構成において、XPath格納部1510には、ウェブページに対して評価を行うべき、予め用意された複数のXPath式が格納されている。データ構造格納部1530には、データ構造生成部1520にて生成され、評価実行部1540にて用いられるデータ構造が格納される。文書格納部1550には、図1に示したネットワークインターフェイス106や、キーボード/マウス109等の入力デバイス、処理対象であるウェブページを格納した記録媒体から当該ウェブページを読み出すドライブ装置などを介して入力されたウェブページが格納されている。
【0082】
データ構造生成部1520は、XPath格納部1510に格納されているXPath式から、評価実行部1540による評価に用いるデータ構造を生成する。このデータ構造を用いることにより、ウェブページに対してXPath格納部1510に格納されている複数のXPath式を個別に評価する場合に比べて効率の良い評価を行うことが可能となる。このデータ構造についての詳細、このデータ構造を用いた評価方法及びこのデータ構造の生成方法については後述する。
【0083】
評価実行部1540は、XPathエンジンであり、文書格納部1550に格納されているウェブページに対して、データ構造生成部1520にて生成されたデータ構造を用いてXPath式の評価(マッチング)を行う。これにより、当該入力文書がXPath格納部1510に格納されているXPath式にて指定される特定部分を持つかどうかを、効率よく評価することができる。評価実行部1540による評価結果はメインメモリ103の所定の領域に格納される。
文書処理部1560は、メインメモリ103の所定領域から評価実行部1540の評価結果を読み出し、当該評価結果に基づいて、文書格納部1550に格納されているウェブページがXPath格納部1510に格納されているXPath式にて指定される特定部分を持つならば、文書格納部1550から当該ウェブページを処理対象として読み出し、目的とする所定の情報処理、すなわちウェブページにアノテーションを付加する処理を実行する。
【0084】
次に、本実施の形態におけるXPath式の評価を効率化する方法を詳細に説明する。
ウェブページにアノテーションを付加する作業において、所定のアノテーションが所定のウェブページに対して適用可能かどうかを判断するには、当該アノテーション内の複数のXPath式が対象のウェブページの所定のエレメントを正しく指しているかどうかを評価することが必要である。これは、複数のXPath式の集合(以下、XPathセットと称す)が当該ウェブページにマッチしているかどうかを評価する問題と言い換えることができる。XPathセットがウェブページにマッチするとは、XPathセットに含まれる全てのXPath式が当該ウェブページの構造にマッチすることを意味する。本実施の形態では、特に、複数のアノテーションの中で所定のウェブページに適用できるものを探索する場合のように、複数のXPathセットのうちでウェブページにマッチするものを判定する場合の評価処理の効率化を対象とする。
【0085】
本実施の形態は、複数のXPath式の間の依存関係に基づいてXPath式の評価を簡単化するためのデータ構造を生成し、このデータ構造を用いてウェブページに対する評価を行うことにより、上記のような場合の評価処理の高速化を実現する。本実施の形態では、評価実行部1540の種類(下記のタイプ1、タイプ2)に応じて異なるアルゴリズムが適用される。
タイプ1:XPath評価関数の呼び出しオーバーヘッドが大きく、XPath式の評価の回数が少ない方がシステム全体のパフォーマンス(処理効率)を向上させることができる。
タイプ2:XPath評価関数の呼び出しオーバーヘッドが小さく、XPath式を分割して評価を行ってもシステム全体のパフォーマンス(処理効率)は大きく低下しない。
【0086】
まず、評価実行部1540の種類がタイプ1である場合について説明する。
この場合、XPath式の評価回数が少ない方がシステムのパフォーマンスを向上させられるため、データ構造生成部1520は、生成するデータ構造においてXPath式の分割を行わない。具体的には、
1.XPath式の共通性に基づくXPath式の絞込み
2.XPath式の依存関係に基づく連結XPath式の簡略化
3.XPath式の依存関係に基づくXPath式の省略
4.XPath式の統合
5.XPath式のツリー長とDOMツリー上での位置に基づく評価処理の優先順位付け
6.実行時判断のためのデータ構造の構築
という処理が行われる。各処理について、以下に説明する。なお、以下の説明において、「XPath式が成立する」「XPath式が真になる」とは、「評価対象であるウェブページ中に、XPath式に対応するエレメントが存在している」ことを意味する。
【0087】
1.XPath式の共通性に基づくXPath式の絞込み
複数のXPathセットが共通に含んでいるXPath式は、ウェブページにマッチするXPathセットの判定に関与しない。このようなXPath式の評価結果は、各XPathセットにおいて共通となる(差別化されない)ためである。したがって、複数のXPathセットに含まれないXPath(specific XPath)に対する評価を先に行う。
図16は、XPathセットとこれに含まれるXPath式とを一覧表示した図表である。図16に示す例では、4種類のXPathセット(A、B、C、D)にそれぞれ複数のXPath式が含まれている。図16に示すXPath式には、重複するものが多く含まれている。例えば、番号5(XPathセットA)のXPath式と番号14(XPathセットB)のXPath式とは、全く同一のXPathである。
図17は、図16に示したXPath式のうち重複するものを整理して識別情報(XPathID)を割り当てた様子を示す図である。図17に示す例では、図16に示した31個のXPath式が18個に整理されている。
【0088】
図18は、図17のように整理されたXPath式をさらに解析し、複数のXPathセットに共通するXPath式を抽出した様子をグラフ構造で示した図である。
図17を参照すると、XPath式X7はXPathセットC、Dに共通して含まれ、またXPath式X1、X2、X3、X18は全てのXPathセットに共通して含まれる。図18の例では、これら複数のXPathセットに共通して含まれるXPath式を表すノードから個々のXPathセットを分岐させて、各XPathセットに固有のXPath式を記述している。したがって、図18の例において、評価対象は、各XPathセットを表すノードに付加されている13種類のXPath式(X4〜X6、X8〜X17)に絞込まれることとなる。
【0089】
2.XPath式の依存関係に基づく連結XPath式の簡略化
連結XPath式は、複数のXPath式をOR記号(|)で結合したものである。例えば、所定のウェブページ(html[1])の所定の位置(body[1])に配置された2つのテーブルコンテンツ(table[1]、table[2])のいずれかを指す連結XPath式、
/html[1]/body[1]/table[1]|/html[1]/body[1]/table[2]
を考える。これは、所定のウェブページに、/html[1]/body[1]/table[1]または/html[1]/body[1]/table[2]のいずれか一方が存在すれば当該XPath式が成立することを示している。このとき、XPath式の表記規則から、table[1]が存在しなければ、table[2]も存在しないことは自明である。したがって、この連結XPath式に関しては、前半の
/html[1]/body[1]/table[1]
のみを評価すれば良いことになる。このように所定のXPath式(XPath1)が成立するとき、別のXPath式(XPath2)も成立する場合、XPath2はXPath1に依存していると定義する。この性質を利用して連結XPathを簡略化する。
【0090】
XPath式の間の依存関係には、主として次の2種類がある。
・同一タグ兄弟(sibling)関係
XPath1 /html[1]/body[1]/table[2]
XPath2 /html[1]/body[1]/table[1]
であるとき、XPath1とXPath2とは兄弟の関係にあり、
XPath1が成立すればXPath2も成立し、
XPath2が不成立ならばXPath1も不成立である。
したがって、「XPath1はXPath2に依存」する。
・親ノード関係
XPath1 /html[1]/body[1]/table[1]/tr[1]/td[1]
XPath2 /html[1]/body[1]/table[1]
であるとき、XPath1はXPath2の子孫であり、
XPath1が成立すればXPath2も成立し、
XPath2が不成立ならばXPath1も不成立である。
したがって、「XPath1はXPath2に依存」する。
【0091】
連結XPath式の簡略化は、以下の手順で行う。
まず、連結XPath式を展開して新たにXPathIDを割り当てる。例えば図17に示したXPath式X1は、
/html[1]/body[1]/table[1]/tbody[1]/tr[1]|/html[1]/body[1]/table[1]/tbody[1]/tr[2]
であるから、次の2つのXPath式に展開することができる。
X1−1:/html[1]/body[1]/table[1]/tbody[1]/tr[1]
X1−2:/html[1]/body[1]/table[1]/tbody[1]/tr[2]
同様に、図18において評価対象とした13種類のXPath式を解析し展開する。そして、展開された各XPath式の依存関係を調べる。
【0092】
図19は、得られた展開後のXPath式の依存関係をツリー構造で示す図である。なお、図中、円で囲まれたXPath式X6−5とXPath式X7とは、同一のXPath式である。
図19を参照すると、X11−3、X11−2、X11−1のように、で本来1つの連結XPath式(X11)に含まれている複数のXPath式が依存関係を持つ場合がある。この場合、次の理由により、下位のXPath式であるX11−2、X11−3は評価が不要となる。
すなわち、X11−1が成立した場合、元の連結XPath式X11も成立する。これは結合関係にあるXPath式が1つでも成立すれば、かかるXPath式を含む連結XPath式は成立するという性質を持つからである。一方、依存関係により、X11−1が不成立の場合、X11−2、X11−3も不成立となる。したがって、X11−2、X11−3はXPath式X11の評価結果に影響を与えない。
以上のように、他のXPath式に依存するXPath式を削除することによって、連結XPath式が簡略化される。
図20は、図19に示したXPath式の依存関係に基づいて連結XPath式を簡略化した様子を示す図である。
【0093】
3.XPath式の依存関係に基づくXPath式の省略
複数のXPath式において、ウェブページの構造やエレメントのバリエーションなどから受ける制約のために、1つのXPath式について評価結果が得られた場合に、他のXPath式の評価結果が自明となる場合がある。例えば、XPathセット中に所定のウェブページ(html[1])の所定の位置(body[1])に配置された2つのテーブルコンテンツ(table[1]、table[2])を指す2つのXPath式、
XPath1 /html[1]/body[1]/table[2]
XPath2 /html[1]/body[1]/table[1]
がある場合を考える。この場合、table[2]を指すXPath1が存在するならば、table[1]を指すXPath2も必ず存在する。したがって、XPath2は評価しなくても良いこととなる。この性質を利用して評価するXPath式を削減する。
【0094】
これらXPathの依存関係についてさらに詳しく説明する。
所定のXPathセットが成立するためには、当該XPathセットに「含まれる全てのXPath式の成立」が条件となる。上記のXPath1、XPath2は、どちらか一方でも不成立の場合、XPathセット全体が成立しない。すなわち、以下のような関係が成り立つ。
XPath1が成立すればXPath2も成立する。
XPath1が不成立ならばXPathセット全体が成立しない。
これにより、XPath2の成立不成立を無視することができる。言い換えると、次のようになる。
「所定のXPath式(上の例でXPath2)が含まれる全てのXPathセットが依存関係ツリー(図19、20に示したようなツリー構造)の末端側に出現するとき、そのXPath式(上の例でXPath2)は成立不成立に関与しないため、省略できる。」
図21は、図20に示したXPath式の依存関係に基づいてXPath式を省略した様子を示す図である。図21(A)は、省略されるXPath式(X2、X7、X9)をマークした状態、図21(B)は、図21(A)でマークされたXPath式を依存関係ツリーから消去した状態を示す。図中のXPath式に付された「A」、「B」、「ABCD」等の符号は、当該XPath式が含まれるXPathセットを示す。なお、図21中では、X11及びX1の添え字表記(X1−1、X11−1の「−1」)をはずしてある。これは、2.の処理によって、これらのXPath式が連結XPath式から単独XPath式に変わったためである。
【0095】
4.XPath式の統合
XPath評価関数の呼び出しオーバーヘッドが大きいタイプ1の評価実行部1540を用いる場合、データ構造生成部1520は、評価を行うべきXPath式の本数を減らすため、2.の処理においてXPath式の依存関係を解析した際にばらばらにした連結XPath式を、再び結合する。
図22は、図21に示したXPath式の依存関係ツリー中のXPath式に対して再結合可能なものを再結合する様子を示す図である。
結合処理は、次の規則に基づいて行う。
(1)結合後のXPath式の位置は、所属するXPath式の全てが共有する親ノードの直下とする。
(2)共有する親ノードがない場合、結合後のXPath式自体がルートノードとなる。
図21、22に示す例では、例えば、X5−*というXPath式は、X5−4、X5−1、X5−2の3つが存在する(図21(B)参照)。これらのXPath式を、それぞれルートに向かって辿っていくと、X4で合流する。そこで、X5−*の各XPath式をX4の直下のノードとして1つにまとめ(図22(A)参照)、再結合してXPath式X5とする(図22(B)参照)。同様にして、X6、X17が再結合される。
ここで、仮にX5−2がX18の子ノードであったとする。この場合、共有する親ノードは存在しないため、X5−*は1つのルートノードとして、X1、X3、X4、X18と同じレベルのノードとして結合されることとなる。
【0096】
5.XPath式のツリー長とDOMツリー上での位置に基づく評価処理の優先順位付け
評価対象であるウェブページにマッチしないXPathセットを効率よく決定しふるい落とすためには、「存在しにくいエレメント」を対象にしたXPath式を先に処理することが好ましい。そこで、次のような基準を用いて評価するXPath式の順番(優先順位)を決定する。
(1)XPath式のツリー長が長いXPath式
(2)評価対象であるウェブページのDOMツリー上で、より後ろに位置するXPath式
(3)XPath式の依存関係に基づき、成立したときにより多くのXPath式に影響を与えるものを優先する。
を先に評価する。例えば、/table[1]よりもより末端まで含んだ/table[1]/tr[1]/td[1]の評価を先に行う(規則(1))。また、/table[1]と/table[2]とでは、DOMツリー上を巡回したときに、より「後ろに」出現する、言い換えればHTMLのタグ順序で後ろに出現するエレメントを指しているので、/table[2]の評価を先に行う(規則(2))。これは、DOMツリー上で後ろに位置するXPath式(/table[2])の出現率は前に位置するXPath式(/table[1])の出現確率以下だからである。
【0097】
図23は、図22に示した依存関係ツリーの各ノード(XPath式)に、上記の規則に従って優先順位(丸数字)を付加した様子を示す図、図24は、図23に示した優先順位に従ってXPath式を並べた図表である。図24には、さらに各XPath式が依存している他のXPath式(依存XPath)、依存レベル、XPath式のツリー長が記載されている。ここで、依存レベルはルートノードを0としたときのツリーの深さを意味する。また、ツリー長は、XPath式自身のツリーの長さである。連結XPath式のツリー長は、当該連結XPath式を構成するXPath式のうちでツリー長が最も長いXPath式のツリー長となっている。
図23において、例えばXPath式X10、X11は、共に依存レベルが3であり、依存レベルが最も深い。すなわち成立した場合に、より多くのXPath式に影響を与える。X10とX11とでは、X10の方がツリー長が長い。そのため、X10の優先順位が1、X11の優先順位が2となっている。また、依存レベル及びツリー長がいずれも等しいXPath式X12、X13では、/td[2]/table[1]を指すX13の方が評価対象のウェブページのDOMツリー上で後方に位置するので、X13の方が優先順位が高くなっている。
【0098】
6.実行時判断のためのデータ構造の構築
以上のようにしてXPath式の依存関係に基づいて整理されたXPathセットを、ウェブページとのマッチングの処理において参照可能なデータ構造(例えば有効グラフ構造)に変換し、所定の記憶装置(例えば図1に示したメインメモリ103)に保存する。
【0099】
以上のようにして、XPathセットの評価を効率的に行うためのデータ構造が生成された後、評価実行部1540が、このデータ構造を用いて、文書格納部1550に格納されているウェブページに対する評価を行う。
上述したように、この評価実行部1540は、XPath式の評価の回数が少ない方がシステム全体のパフォーマンスを向上させることができるタイプ(タイプ1)であるため、優先順位の高いXPath式から順に、次の手順で評価を行う。
1.未処理のXPath式の中で優先順位の最も高いXPath式を選択し、ウェブページに対する評価を行う。
2.評価対象のXPath式がマッチした場合、当該XPath式に依存している他のXPath式(優先順位の低いXPath式)はマッチすることが保証されるため評価から除外する。
一方、評価対象のXPath式がマッチしなかった場合、当該XPath式を含むXPathセットは、当該ウェブページにマッチしないため、当該XPathセットに含まれる全てのXPath式を評価対象から除外する。
3.各XPathセットに固有のXPath式(specific XPath)の全てについて処理がおわった段階で、全てのXPath式のマッチしているXPathセットは、当該ウェブページに完全にマッチする可能性がある。そこで、そのようなXPathセットが存在するかどうかを調べる。
4.そのようなXPathセットが存在するならば、当該XPathセットに関して、他のXPathセットと共有するXPath式の評価を行う。
一方、そのようなXPathセットが存在しない場合は、当該ウェブページに完全にマッチするXPathセットは存在しないため、他のXPathセットと共有するXPath式の評価を行わずに処理を終了する。
本実施の形態によるXPathセットの評価処理を、複数のアノテーションの中からウェブページに付加するアノテーションを決定する処理に用いる場合、上記の手順で全てのXPath式がマッチすると判断されたXPathセットを持つアノテーションが、ウェブページに付加できるアノテーションとして決定されることとなる。
【0100】
次に、評価実行部1540の種類がタイプ2である場合について説明する。
この場合、XPath式を分割して評価を行ってもシステム全体のパフォーマンスが大きく低下しないため、データ構造生成部1520は、生成するデータ構造においてXPath式を分割し、個々のXPath式を簡単化する。具体的には、
1.XPath式の共通性に基づくXPath式の絞込み
2.XPath式の依存関係に基づく連結XPath式の簡略化
3.XPath式の依存関係に基づくXPath式の省略
4.XPath式の分割
5.XPath式のツリー長とDOMツリー上での位置に基づく評価処理の優先順位付け
6.実行時判断のためのデータ構造の構築
という処理が行われる。上記の処理のうち、1〜3の処理は、評価実行部1540の種類がタイプ1の場合と同様であるので、説明を省略する。
【0101】
4.XPath式の分割
XPath評価関数の呼び出しオーバーヘッドが小さいタイプ2の評価実行部1540を用いる場合、データ構造生成部1520は、複数のXPath式で共通する部分と固有の部分とを細分化してそれぞれを評価することにより、処理の高速化を図ることができる。
例えば、次の2つのXPath式(XPath1、XPath2)は、/html[1]/body[1]/table[1]/tr[1]/td[1]の部分(ノード)を共有している。
XPath1 /html[1]/body[1]/table[1]/tr[1]/td[1]/font[1]
XPath2 /html[1]/body[1]/table[1]/tr[1]/td[1]/b[1]
したがって、この共通ノードの評価を行い、そのノードから相対パスをfont[1]及びb[1]だけ評価することにより、高速な処理を実現できる。ここで、/html[1]/body[1]/table[1]/tr[1]/td[1]と/html[1]/body[1]/table[1]/tr[1]/td[1]/font[1]との間の関係を「包含関係」と呼び、「/html[1]/body[1]/table[1]/tr[1]/td[1]/font[1]が/html[1]/body[1]/table[1]/tr[1]/td[1]を包含している」とする。この包含関係に基づいて、XPath式を共通部分と固有の部分とに分割し、それぞれを部分XPath式とする。
図25は、依存関係に基づく簡略化、省略の後、この分割処理を経て得られたXPath式のリストを示す図表である。図中のXPath式PX1、PX2、PX3が、分割処理に伴って追加された部分XPath式である。この3つのXPath式を分割処理することにより、各XPath式が、図17等に列挙したXPath式に比して非常に簡潔になっていることがわかる。また、PX1、PX2、PX3を含めた依存関係ツリーを図26に示す。
【0102】
5.XPath式のツリー長とDOMツリー上での位置に基づく評価処理の優先順位付け
評価対象であるウェブページにマッチしないXPathセットを効率よく決定しふるい落とすためには、「存在しにくいエレメント」を対象にしたXPath式を先に処理することが好ましい。そこで、次のような基準を用いて評価するXPath式の順番(優先順位)を決定する。
優先順位を決定する処理は、上述した評価実行部1540の種類がタイプ1である場合の処理と同様であるが、ここでは3.の処理で新たに追加されたXPath式PX1、PX2、PX3を含めて優先順位が決定される。
図27は、図26に示した依存関係ツリーの各ノード(XPath式)に、上記の規則に従って優先順位を付加した様子を示す図、図28は、図27に示した優先順位にしたがってXPath式を並べた図表である。なお、上の4.の処理で複数のXPath式における共通部分が分割されて個別のXPath式とされていることから、XPath式自身のツリー長は優先順位を決定するために参酌しない。
【0103】
6.実行時判断のためのデータ構造の構築
以上のようにしてXPath式の依存関係に基づいて整理されたXPathセットを、ウェブページとのマッチングの処理において参照可能なデータ構造(例えば有効グラフ構造)に変換し、所定の記憶装置(例えば図1に示したメインメモリ103)に保存する。この処理は、上述した評価実行部1540の種類がタイプ1である場合の処理と同様である。
【0104】
以上のようにして、XPathセットの評価を効率的に行うためのデータ構造が生成された後、評価実行部1540が、このデータ構造を用いて、文書格納部1550に格納されているウェブページに対する評価を行う。
上述したように、この評価実行部1540は、XPath式の評価の回数が多くてもシステム全体のパフォーマンスが大きく低下しないタイプ(タイプ2)であるため、優先順位の高いXPath式から順に、次の手順で評価を行う。
1.未処理のXPath式の中で優先順位の最も高いXPath式を選択し、ウェブページに対する評価を行う。このとき、評価対象のXPath式が包含しているXPath式の評価も行う。なお、包含しているXPath式の評価が既になされている場合(より優先順位の高いXPath式の評価に伴って評価されている場合)、その評価結果を利用する。
2.1.で評価したXPath式がマッチした場合、当該XPath式に依存している他のXPath式(優先順位の低いXPath式)はマッチすることが保証されるため評価から除外する。
一方、評価対象のXPath式がマッチしなかった場合、当該XPath式を含むXPathセットは、当該ウェブページにマッチしないため、当該XPathセットに含まれる全てのXPath式を評価対象から除外する。
また、評価対象のXPath式が包含しているXPath式がマッチしなかった場合、当該XPath式を包含する他の全てのXPath式を原則として評価対象から除外する。ただし、連結XPath式については、当該連結XPath式を構成する全てのXPath式が評価されるまでは、当該連結XPath式がマッチするかどうかを判断できないので、評価対象からは除外しない。
3.各XPathセットに固有のXPath式(specific XPath)の全てについて処理がおわった段階で、全てのXPath式のマッチしているXPathセットは、当該ウェブページに完全にマッチする可能性がある。そこで、そのようなXPathセットが存在するかどうかを調べる。
4.そのようなXPathセットが存在するならば、当該XPathセットに関して、他のXPathセットと共有するXPath式の評価を行う。
一方、そのようなXPathセットが存在しない場合は、当該ウェブページに完全にマッチするXPathセットは存在しないため、他のXPathセットと共有するXPath式の評価を行わずに処理を終了する。
本実施の形態によるXPathセットの評価処理を、複数のアノテーションの中からウェブページに付加するアノテーションを決定する処理に用いる場合、上記の手順で全てのXPath式がマッチすると判断されたXPathセットを持つアノテーションが、ウェブページに付加できるアノテーションとして決定されることとなる。
【0105】
以上説明した本実施の形態は、XPath式の全機能に対して効率的な評価を行うためのデータ構造を生成(最適化)するものではなく、頻繁に利用される一部の機能について最適化する。
図29は、本実施の形態による最適化が可能なXPath式の構造を説明する図である。
図29に示すXPath式において、Exはx番目のエレメントである。また、Cxはx番目のsibling内でのポジションを示す数値であり、predicateで表現すると、[position() = Cx]と等しい。すなわち、XPath式を2つの部分に分けることができ、前半部分(図29のパート1)が次の条件に当てはまる場合に、本実施の形態の最適化を行うことができる。
・n段目まで子孫方向に1段ずつツリーを移動している。
・軸(axis)は子(child)のみであり、他の軸(axis)は使用されていてはならない。また、descendant-or-self::node()の省略である「//」指定も使用されていてはならない。
・predicateは[position() = 番号] (省略形は[番号])のみが使用可能。
・predicateの省略(/tag/)は無し。
後半部分(図29のパート2)には、どのようなXPath式が出現してもかまわないが、これらの部分は最適化されない。
言い換えれば、本実施の形態は、ウェブページを記述したHTMLドキュメントのようにツリー長深くかつ不定形であるツリーのノードを指すXPath式には、上記のような構造(パート1、パート2に分けることができるという構造)を持ったものが多いという性質を利用している。
【0106】
なお、本実施の形態では、XPathセット内の全てのXPath式が成立することをXPathセット成立の条件として説明した。しかし、このような厳密なマッチングだけではなく、「最もマッチするものを必ず1つ」選択するという課題も存在する。例えば、ウェブページにアノテーションを付加するシステムにおいて所定のウェブページに付加すべきアノテーションを選択する場合、何らかの評価基準を用いてXPath式の適合度を算出し、最も適しているものを選択することによって、全くトランスコードできないという状況を回避することができると考えられる。このような用途のために、本実施の形態を拡張し、XPathセットの成立を判断する際に曖昧性を許容するアルゴリズムを導入することができる。
【0107】
このアルゴリズムの具体的な手順について説明する。
1.評価実行部1540によるマッチングの実行時に、所定のXPath式がマッチしなかった場合、そのXPath式に対してマッチしなかったことを示すフラグ(UNMATCHフラグ)を立てる。
2.マッチしないXPath式と同じXPathセットに含まれることによって評価されなかったXPath式に対して、評価が行われていないこと示すフラグ(UNEVALUATEDフラグ)を立てる。
3.全てのXPathセットがマッチしないと評価された段階で、UNEVALUATEDフラグのたっている全てのXPath式を評価する。(ただし、既に依存関係や包含関係によって評価結果の判明しているものは除外する)マッチしなかったXPath式にはUNMATCHフラグを立てる。
【0108】
XPathセットの成立を判断する際に曖昧性を許容するアルゴリズムを導入する場合、適合度の評価手法に関わらず、ここまでの処理は共通である。しかし、これ以降の処理は、適合度の評価手法に応じて異なる処理が行われる。ここでは一例として、「最もマッチしないXPath式の数の少ないXPathセット」であり、かつ「DOMツリー上の距離で定義されるXPath式の適合度が最も大きいもの」を選択するアルゴリズムを示す。
4.UNMATCHフラグの立っているXPath式の最も少ないXPathセットを選択する。
5.UNMATCHフラグの立っているXPath式の数が同数であるXPathセットが複数存在する場合、各XPathセットに含まれているXPath式の適合度を全て算出する。例えば、適合度Aは次のように算出することができる
AXPath=k1*P+k2*S−k3*L
ここで、各パラメータは以下の通りである。
k1、k2、k3:定数係数
P:着目中のXPath式の親シーケンス(parent sequence)を辿ったときに、存在するノードに至るまでのステップ数。最悪でもbodyノードは共通であるため、必ず値を持つ。
S:着目中のXPath式の兄弟シーケンス(sibling sequence)の距離。(親ノード)/tr[4]が存在せず(親ノード)/tr[3]が存在する場合距離を1、(親ノード)/tr[2]が存在する場合2と定義する。兄弟ノードが存在しない場合、Pの対象となる存在する親方向のノードにおける子ノード内での兄弟ノードを算出。対象となるノードが元々ファーストノード(/タグ[1])である場合、この値には一定のデフォルト値を割り当てる。
L:着目中のXPath式が指しているノードのツリー長。この距離が長い場合、Pの値などで不利になることが考えられるため、負の係数によって相殺する。
以上のような計算によって各XPath式の適合度が算出され、最終的に得られた各XPath式の適合度の総和をXPathセットの適合度とする。
AXPathセット=ΣAXpath
最後に得られたAの値が最も小さいXPathセットを選択することで最も適合するXPathセットを選択することができる。
【0109】
ただし、このような拡張を行った場合、XPathセットが成立する場合の計算量に変化はないが、成立するXPathセットが存在しなかった場合の計算量が大幅に増加する可能性がある。そのため、全体のパフォーマンスは、成立するXPathセットが存在しない入力の割合に応じて低下してしまう。このような事態を防ぐためには、適合度算出のアルゴリズムを単純化し、高速に算出可能な「曖昧性」にとどめることが必要と考えられる。
【0110】
以上のように、第1、第2の実施の形態(以下、本実施の形態)では、多数のXPath式の評価結果を効率よく求めることによって、XML文書に対する処理の速度を向上させることができる。例えば、XSLTプロセッサに本実施の形態を組み込むことによって、スタイルシートに多数のXPath式が含まれる場合の処理速度の向上が可能になる。
また、XPathを、XML文書に対して特定の部分を持つかどうかのチェックをするために使うことによって、利用者毎に指定した配信条件でのニュース送信や、コンテンツ毎に指定した条件でのコンテンツと利用者とのマッチングを、XMLをベースとして行うことができる。この場合、従来はXPath式の数の増加に伴って処理時間が増大するので、大規模なサービスを行うことができなかったが、本実施の形態によって、処理時間の増大を抑えることができるため、かかるサービスを実現することが可能になる。
【0111】
さらにまた、ネットワーク上のウェブページ(HTML文書)を所定のアノテーションに基づいてトランスコーディングするシステムにおいて、予め用意された多くのアノテーションパターンの中からトランスコーディングしようとするウェブページに適用可能なアノテーション(当該ウェブページ中のエレメントを正しく指すXPathセットを持ったアノテーション)を検索する場合に、本実施の形態を用いることにより、XPathセットの評価に要する時間を短縮し、高速にアノテーションの検索処理を実行することが可能となる。
【0112】
なお、本実施の形態によるXML文書処理システムは、複数のXPath式があるときに、それらの中に類似なものや重複するもの、あるいは依存関係によって他のXPath式の評価結果によっては評価を要しないものといった冗長な部分が含まれることを利用して効率を向上させている。したがって、そのような冗長な部分がない場合には効率が向上しないこととなる。
しかし、この場合でも、ロケーション・パスの計算はノードセットから別のノードセットを再帰的に求めることで実現されるのでXalanなどをそのまま使った従来の方式と同じ手続きで処理されることになる。また、1つの比較演算子はエントリ数1のテーブル検索で実現されるが、両者ともにノードセットの再構成に比べると無視できるぐらいに高速に実行できる。さらに、述部が決められたパターンでない場合には最適化の対象にならないが、その場合のテストはXalanなどをそのまま使った従来の方式と同じ手続きで計算を行えばよい。
したがって、冗長な部分がなく最適化できないXPath式の集合でも、従来の方式とほぼ同等の効率でXPath式の評価を行うことができる。そして、最適化可能なもの(相互に類似するXPath式)が増えるにしたがって処理の実行効率が向上することとなる。
【0113】
【発明の効果】
以上説明したように、本発明によれば、XML文書に対して複数のXPath式を評価する場合の実行効率を向上させることができるという効果がある。この効果は、当該複数のXPath式の中に冗長な部分が増えれば増えるほど顕著となる。
【図面の簡単な説明】
【図1】 第1の実施の形態によるXML文書処理システムを実現するのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。
【図2】 第1の実施の形態によるXML文書処理システムの機能を説明する図である。
【図3】 第1の実施の形態のデータ構造生成部にて生成されるデータ構造を示す図である。
【図4】 第1の実施の形態の処理対象であるXML文書の例を示す図である。
【図5】 幅優先で複数のXPath式を評価する場合の評価実行部による処理手順を説明するフローチャートである。
【図6】 第1の実施の形態で評価されるXPath式P7、P8、P9を示す有向非循環グラフを示す図である。
【図7】 第1の実施の形態においてハッシュテーブルを用いた評価処理の流れを説明するフローチャートである。
【図8】 第1の実施の形態のデータ構造生成部によるデータ構造の生成方法を説明するフローチャートである。
【図9】 図3のデータ構造にXPath式P4が追加された状態のデータ構造を示す図である。
【図10】 データ構造から所定のXPath式を除去する際のデータ構造生成部の処理を説明するフローチャートである。
【図11】 図9のデータ構造からXPath式P3を除去した状態のデータ構造を示す図である。
【図12】 XPath式P11、P12、P13、P14を表現するデータ構造を示す図である。
【図13】 処理対象であるXML文書を示す図である。
【図14】 実施例におけるXPath式の評価に要した実行時間を示す図である。
【図15】 第2の実施の形態によるウェブページ処理システムの機能を説明するブロック図である。
【図16】 XPathセットとこれに含まれるXPath式とを一覧表示した図表である。
【図17】 図16に示したXPath式のうち重複するものを整理して識別情報(XPathID)を割り当てた様子を示す図である。
【図18】 図17に示したXPath式のうち複数のXPathセットに共通するXPath式を抽出した様子をグラフ構造で示した図である。
【図19】 連結XPath式を展開後のXPath式の依存関係をツリー構造で示す図である。
【図20】 図19に示したXPath式の依存関係に基づいて連結XPath式を簡略化した様子を示す図である。
【図21】 図20に示したXPath式の依存関係に基づいてXPath式を省略した様子を示す図である。
【図22】 図21に示したXPath式の依存関係ツリー中のXPath式に対して再結合可能なものを再結合する様子を示す図である。
【図23】 図22に示した依存関係ツリーの各ノード(XPath式)に優先順位を付加した様子を示す図である。
【図24】 図23に示した優先順位に従ってXPath式を並べた図表である。
【図25】 依存関係に基づく簡略化、省略の後、この分割処理を経て得られたXPath式のリストを示す図表である。
【図26】 図25に示したPX1、PX2、PX3を含めた依存関係ツリーを示す図である。
【図27】 図26に示した依存関係ツリーの各ノード(XPath式)に、上記の規則に従って優先順位を付加した様子を示す図である。
【図28】 図27に示した優先順位にしたがってXPath式を並べた図表である。
【図29】 第2の実施の形態による最適化が可能なXPath式の構造を説明する図である。
【符号の説明】
10、1510…XPath格納部、20、1520…データ構造生成部、30、1530…データ構造格納部、40、1540…評価実行部、50…XML文書格納部、60…XML文書処理部、101…CPU、103…メインメモリ、105…ハードディスク、106…ネットワークインターフェイス、109…キーボード/マウス、1550…文書格納部、1560…文書処理部

Claims (24)

  1. コンピュータを用いて、所定のデータファイルを対象として当該データファイルがXPathで指定される特定部分を持つか否かを評価するXPath評価方法において、
    メモリから評価を行うべき複数のXPath式を読み出し、当該複数のXPath式から、当該複数のXPath式の共通部分を共通のノードとし、当該複数のXPath式の他の部分を個別のノードとする木構造のデータ構造を生成する工程と、
    メモリから処理対象のデータファイルを入力し、前記データ構造のノードごとに、当該ノードに対応する前記XPath式の部分で指定される前記特定部分を当該処理対象のデータファイルが持つか否かを評価し、評価結果として得られた当該特定部分を結合する工程と、
    前記複数のXPath式の各XPath式に関して、個々の当該XPath式を構成する部分に対応する前記ノードごとの評価結果に基づいて各XPath式の評価結果を得、得られた評価結果をメモリに格納する工程と
    を含むことを特徴とするXPath評価方法。
  2. 前記データ構造を生成する工程は、
    個々の前記XPath式をロケーションステップごとに分解する工程と、
    分解して得られた各ロケーションステップにノードを対応させ、複数のXPath式に共通するロケーションステップを1つのノードに対応させたデータ構造を生成する工程と
    を含むことを特徴とする請求項1に記載のXPath評価方法。
  3. 前記データ構造を生成する工程では、
    複数の前記ロケーションステップが共通の特定の形で記述されている場合に、当該ロケーションステップにおける述部の式の評価結果をキーとして、XPathにおける残りのロケーションステップを検索するためのハッシュテーブルまたは二分探索木を生成し、
    前記ノードごとの評価結果を結合して各XPath式の評価結果を得る工程では、
    前記ハッシュテーブルまたは前記二分探索木を用いた検索により得られたXPathの前記残りのロケーションステップに関して、当該残りのロケーションステップで指定される前記特定部分を前記処理対象のデータファイルが持つか否かを評価し、その評価結果と前記ノードごとの評価結果とに基づいて各XPath式の評価結果を得ることを特徴とする請求項2に記載のXPath評価方法。
  4. 前記データ構造を生成する工程は、
    前記複数のXPath式が演算式または関数を含む場合に、当該演算式または関数を部分式に分解する工程と、
    分解して得られた前記部分式のうち、共通する部分式を1つにまとめて有向非循環グラフを生成する工程とを含み、
    前記ノードごとの評価結果に基づいて各XPath式の評価結果を得る工程では、
    前記有向非循環グラフを用い、複数のXPath式に共通する部分式については評価結果を当該複数のXPath式で共用して各XPath式を評価し、その評価結果と前記ノードごとの評価結果とに基づいて各XPath式の評価結果を得ることを特徴とする請求項1に記載のXPath評価方法。
  5. コンピュータを用いて、所定のデータファイルを対象として当該データファイルがXPathで指定される特定部分を持つか否かを評価するXPath評価方法において、
    メモリから評価を行うべき複数のXPath式を含むXPathセットを読み出し、当該複数のXPathセットに共通して含まれるXPath式と所定のXPathセットに固有のXPath式とを分類し、当該XPath式の冗長な要素を省略したデータ構造を生成する工程と、
    前記XPathセットに固有のXPath式について評価する工程と、
    処理対象のデータファイルが前記固有のXPath式で指定される特定部分を持つと評価される場合に、当該XPathセット中の他のXPathセットと共通するXPath式について評価する工程と
    を含むことを特徴とするXPath評価方法。
  6. 前記データ構造を生成する工程では、前記XPathセットに含まれる連結XPath式に関して、当該連結XPath式を構成する各XPath式の間の依存関係に基づき、評価が不要なXPath式を評価対象から除くことにより、当該連結XPath式を簡略化することを特徴とする請求項5に記載のXPath評価方法。
  7. 前記データ構造を生成する工程では、複数のXPath式の間の依存関係に基づき、評価結果が他のXPath式に依存するXPath式を評価対象から除くことを特徴とする請求項5に記載のXPath評価方法。
  8. 前記データ構造を生成する工程では、複数のXPath式の間で共通する部分と各XPath式に固有の部分とを分割し、各部分を個別のXPath式として評価対象とすることを特徴とする請求項5に記載のXPath評価方法。
  9. 複数のXPath式を格納したXPath格納部と、
    前記XPath格納部に格納されている前記複数のXPath式を読み出し、当該複数のXPath式から、当該複数のXPath式の共通部分を共通のノードとし、当該複数のXPath式の他の部分を個別のノードとする木構造のデータ構造を生成するデータ構造生成部と、
    処理対象のデータファイルを入力し、前記データ構造のノードごとに、当該ノードに対応する前記XPath式の部分で指定される特定部分を当該処理対象のデータファイルが持つか否かを評価し、当該ノードごとの評価結果として得られた当該特定部分を結合し、前記複数のXPath式の各XPath式に関して、個々の当該XPath式を構成する部分に対応する前記ノードごとの評価結果に基づいて各XPath式の評価結果を得る評価実行部と
    を備えることを特徴とする文書処理システム。
  10. 前記データ構造生成部は、
    個々の前記XPath式をロケーションステップごとに分解するステップ分解手段と、
    分解して得られた各ロケーションステップにノードを対応させ、複数のXPath式に共通するロケーションステップを1つのノードに対応させたデータ構造を生成する木生成手段と
    を備えることを特徴とする請求項9に記載の文書処理システム。
  11. 前記データ構造生成部は、前記XPath格納部に格納されているXPath式が変更された場合に、新たに追加されたXPath式のうちで前記データ構造に対応するノードがない部分について新たなノードを生成して当該データ構造に加え、削除されたXPath式の部分に対応する前記データ構造のノードのうちで当該XPath式に固有の部分に対応するノードのみを除去することにより、当該データ構造を更新することを特徴とする請求項9記載の文書処理システム。
  12. 前記データ構造生成部は、他のXPath式と重複するXPath式または評価結果が他のXPath式に依存するXPath式を評価対象から除くことを特徴とする請求項9に記載の文書処理システム。
  13. 前記データ構造生成部にて生成されたデータ構造を格納し保存するデータ構造格納部をさらに備え、
    前記評価実行部は、前記データ構造格納部に格納されている前記データ構造を用いて前記複数のXPath式の評価を行うことを特徴とする請求項9に記載の文書処理システム。
  14. 前記評価実行部は、前記データ構造におけるノードごとに対応する部分の評価を行い、この部分的な評価結果を結合して個々のXPath式全体の評価結果を得ると共に、複数のXPath式間で共通するノードに対応する部分の評価結果を当該複数のXPath式の評価において共用することを特徴とする請求項9に記載の文書処理システム。
  15. 複数のXPath式にて構成されるXPathセットを格納したXPath格納部と、
    前記XPath格納部から評価を行うべき複数のXPath式を含むXPathセットを読み出し、当該複数のXPathセットに共通して含まれるXPath式と所定のXPathセットに固有のXPath式とを分類し、当該XPath式の冗長な要素を省略したデータ構造を生成するデータ構造生成部と、
    処理対象のデータファイルを入力し、前記XPathセットに固有のXPath式について当該データファイルが当該XPathで指定される特定部分を持つか否かを評価し、当該処理対象のデータファイルが当該固有のXPath式で指定される特定部分を持つと評価される場合に、当該XPathセット中の他のXPathセットと共通するXPath式について当該データファイルが当該XPathで指定される特定部分を持つか否かを評価し、得られた各XPath式の評価結果に基づいて前記データファイルに対するXPathセットの評価結果を得る評価実行部と
    を備えることを特徴とする文書処理システム。
  16. コンピュータを制御して、所定のデータファイルを対象として当該データファイルがXPathで指定される特定部分を持つか否かを評価するプログラムであって、
    評価を行うべき複数のXPath式から、当該複数のXPath式の共通部分を共通のノードとし、当該複数のXPath式の他の部分を個別のノードとする木構造のデータ構造を生成する処理と、
    前記データ構造のノードごとに、当該ノードに対応する前記XPath式の部分で指定される前記特定部分を処理対象のデータファイルが持つか否かを評価し、評価結果を結合する処理と、
    前記複数のXPath式の各XPath式に関して、個々の当該XPath式を構成する部分に対応する前記ノードごとの評価結果に基づいて各XPath式の評価結果を得る処理とを
    前記コンピュータに実行させることを特徴とするプログラム。
  17. 前記プログラムによる前記データ構造を生成する処理は、
    個々の前記XPath式をロケーションステップごとに分解する処理と、
    分解して得られた各ロケーションステップにノードを対応させ、複数のXPath式に共通するロケーションステップを1つのノードに対応させたデータ構造を生成する処理と
    を含むことを特徴とする請求項16に記載のプログラム。
  18. 前記プログラムによる前記データ構造を生成する処理では、
    複数の前記ロケーションステップが共通の特定の形で記述されている場合に、当該ロケーションステップにおける述部の式の評価結果をキーとして、XPathにおける残りのロケーションステップを検索するためのハッシュテーブルまたは二分探索木を生成し、
    前記ノードごとの評価結果に基づいて各XPath式の評価結果を得る処理では、
    前記ハッシュテーブルまたは前記二分探索木を用いた検索により得られたXPathの前記残りのロケーションステップに関して、当該残りのロケーションステップで指定される前記特定部分を前記処理対象のデータファイルが持つか否かを評価し、その評価結果と前記ノードごとの評価結果とに基づいて各XPath式の評価結果を得ることを特徴とする請求項17に記載のプログラム。
  19. 前記プログラムによる前記データ構造を生成する処理は、
    前記複数のXPath式が演算式または関数を含む場合に、当該演算式または関数を部分式に分解する処理と、
    分解して得られた前記部分式のうち、共通する部分式を1つにまとめて有向非循環グラフを生成する処理とを含み、
    前記ノードごとの評価結果に基づいて各XPath式の評価結果を得る処理では、
    前記有向非循環グラフを用い、複数のXPath式に共通する部分式については評価結果を当該複数のXPath式で共用して各XPath式を評価し、その評価結果と前記ノードごとの評価結果とに基づいて各XPath式の評価結果を得ることを特徴とする請求項16に記載のプログラム。
  20. 前記プログラムは、評価を行うべき複数のXPath式が変更された場合に、新たに追加されたXPath式のうちで前記データ構造に対応するノードがない部分について新たなノードを生成して当該データ構造に加え、削除されたXPath式の部分に対応する前記データ構造のノードのうちで当該XPath式に固有の部分に対応するノードのみを除去することにより、当該データ構造を更新する処理を、前記コンピュータにさらに実行させることを特徴とする請求項16に記載のプログラム。
  21. コンピュータを制御して、所定のデータファイルを対象として当該データファイルがXPathで指定される特定部分を持つか否かを評価するプログラムであって、
    複数のXPath式を含んで構成された評価を行うべきXPathセットから当該複数のXPathセットに共通して含まれるXPath式と所定のXPathセットに固有のXPath式とを分類し、当該XPath式の冗長な要素を省略したデータ構造を生成する処理と、
    前記XPathセットに固有のXPath式について評価する処理と、
    処理対象のデータファイルが前記固有のXPath式で指定される特定部分を持つと評価される場合に、当該XPathセット中の他のXPathセットと共通するXPath式について評価する処理と
    を前記コンピュータに実行させることを特徴とするプログラム。
  22. 前記プログラムによる前記データ構造を生成する処理では、前記XPathセットに含まれる連結XPath式に関して、当該連結XPath式を構成する各XPath式の間の依存関係に基づき、評価が不要なXPath式を評価対象から除くことにより、当該連結XPath式を簡略化することを特徴とする請求項21に記載のプログラム。
  23. 前記プログラムによる前記データ構造を生成する処理では、複数のXPath式の間の依存関係に基づき、評価結果が他のXPath式に依存するXPath式を評価対象から除くことを特徴とする請求項21に記載のプログラム。
  24. 前記プログラムによる前記データ構造を生成する処理では、複数のXPath式の間で共通する部分と各XPath式に固有の部分とを分割し、各部分を個別のXPath式として評価対象とすることを特徴とする請求項21に記載のプログラム。
JP2002267625A 2002-02-28 2002-09-13 XPath評価方法、これを用いたXML文書処理システム及びプログラム Expired - Fee Related JP4039484B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2002267625A JP4039484B2 (ja) 2002-02-28 2002-09-13 XPath評価方法、これを用いたXML文書処理システム及びプログラム
US10/375,970 US7315981B2 (en) 2002-02-28 2003-02-28 XPath evaluation method, XML document processing system and program using the same

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2002-53265 2002-02-28
JP2002053265 2002-02-28
JP2002267625A JP4039484B2 (ja) 2002-02-28 2002-09-13 XPath評価方法、これを用いたXML文書処理システム及びプログラム

Publications (2)

Publication Number Publication Date
JP2003323332A JP2003323332A (ja) 2003-11-14
JP4039484B2 true JP4039484B2 (ja) 2008-01-30

Family

ID=27759713

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002267625A Expired - Fee Related JP4039484B2 (ja) 2002-02-28 2002-09-13 XPath評価方法、これを用いたXML文書処理システム及びプログラム

Country Status (2)

Country Link
US (1) US7315981B2 (ja)
JP (1) JP4039484B2 (ja)

Families Citing this family (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7000230B1 (en) 2000-06-21 2006-02-14 Microsoft Corporation Network-based software extensions
US7155667B1 (en) 2000-06-21 2006-12-26 Microsoft Corporation User interface for integrated spreadsheets and word processing tables
US7346848B1 (en) 2000-06-21 2008-03-18 Microsoft Corporation Single window navigation methods and systems
US6883168B1 (en) 2000-06-21 2005-04-19 Microsoft Corporation Methods, systems, architectures and data structures for delivering software via a network
US6948135B1 (en) 2000-06-21 2005-09-20 Microsoft Corporation Method and systems of providing information to computer users
US7624356B1 (en) 2000-06-21 2009-11-24 Microsoft Corporation Task-sensitive methods and systems for displaying command sets
US7191394B1 (en) 2000-06-21 2007-03-13 Microsoft Corporation Authoring arbitrary XML documents using DHTML and XSLT
US7213200B2 (en) * 2002-04-23 2007-05-01 International Business Machines Corporation Selectable methods for generating robust XPath expressions
CA2484355A1 (en) * 2002-05-02 2003-11-13 Sarvega, Inc. System and method for transformation of xml documents using stylesheets
JP3880504B2 (ja) * 2002-10-28 2007-02-14 インターナショナル・ビジネス・マシーンズ・コーポレーション 構造化・階層化コンテンツ用処理装置、構造化・階層化コンテンツ用処理方法、及びプログラム
US7415672B1 (en) 2003-03-24 2008-08-19 Microsoft Corporation System and method for designing electronic forms
US7275216B2 (en) 2003-03-24 2007-09-25 Microsoft Corporation System and method for designing electronic forms and hierarchical schemas
US7370066B1 (en) 2003-03-24 2008-05-06 Microsoft Corporation System and method for offline editing of data files
US7296017B2 (en) 2003-03-28 2007-11-13 Microsoft Corporation Validation of XML data files
US7913159B2 (en) 2003-03-28 2011-03-22 Microsoft Corporation System and method for real-time validation of structured data files
EP1619587A4 (en) * 2003-04-30 2008-01-02 Ibm CONTENT CREATION SYSTEM, CONTENT CREATION METHOD, COMPUTER EXECUTABLE PROGRAM FOR EXECUTING THE CONTENT CREATION METHOD, COMPUTER READABLE RECORDING MEDIUM CONTAINING THE PROGRAM, GRAPHICAL USER INTERFACE SYSTEM, AND AFFICHA CONTROL METHOD
US7451392B1 (en) 2003-06-30 2008-11-11 Microsoft Corporation Rendering an HTML electronic form by applying XSLT to XML using a solution
US7406660B1 (en) 2003-08-01 2008-07-29 Microsoft Corporation Mapping between structured data and a visual surface
US7334187B1 (en) 2003-08-06 2008-02-19 Microsoft Corporation Electronic form aggregation
US7437666B2 (en) * 2003-10-22 2008-10-14 Intel Corporation Expression grouping and evaluation
US7409400B2 (en) * 2003-10-22 2008-08-05 Intel Corporation Applications of an appliance in a data center
US7328403B2 (en) 2003-10-22 2008-02-05 Intel Corporation Device for structured data transformation
US7458022B2 (en) * 2003-10-22 2008-11-25 Intel Corporation Hardware/software partition for high performance structured data transformation
US8819072B1 (en) 2004-02-02 2014-08-26 Microsoft Corporation Promoting data from structured data files
US7496837B1 (en) * 2004-04-29 2009-02-24 Microsoft Corporation Structural editing with schema awareness
US7774620B1 (en) 2004-05-27 2010-08-10 Microsoft Corporation Executing applications at appropriate trust levels
US7512592B2 (en) * 2004-07-02 2009-03-31 Tarari, Inc. System and method of XML query processing
US7516399B2 (en) * 2004-09-30 2009-04-07 Microsoft Corporation Structured-document path-language expression methods and systems
US7692636B2 (en) 2004-09-30 2010-04-06 Microsoft Corporation Systems and methods for handwriting to a screen
JP4065546B2 (ja) * 2004-10-14 2008-03-26 キヤノン株式会社 文書処理装置及びその方法
US20060098673A1 (en) * 2004-11-09 2006-05-11 Alcatel Input queue packet switch architecture and queue service discipline
US7712022B2 (en) 2004-11-15 2010-05-04 Microsoft Corporation Mutually exclusive options in electronic forms
US7721190B2 (en) 2004-11-16 2010-05-18 Microsoft Corporation Methods and systems for server side form processing
US7346609B2 (en) * 2004-11-16 2008-03-18 International Business Machines Corporation Streaming XPath algorithm for XPath value index key generation
US7904801B2 (en) 2004-12-15 2011-03-08 Microsoft Corporation Recursive sections in electronic forms
US7937651B2 (en) 2005-01-14 2011-05-03 Microsoft Corporation Structural editing operations for network forms
US7725834B2 (en) 2005-03-04 2010-05-25 Microsoft Corporation Designer-created aspect for an electronic form template
US8010515B2 (en) 2005-04-15 2011-08-30 Microsoft Corporation Query to an electronic form
US7499931B2 (en) * 2005-05-09 2009-03-03 International Business Machines Corporation Method and apparatus for approximate projection of XML documents
US7703006B2 (en) 2005-06-02 2010-04-20 Lsi Corporation System and method of accelerating document processing
US8200975B2 (en) 2005-06-29 2012-06-12 Microsoft Corporation Digital signatures for network forms
US7882089B1 (en) * 2005-07-13 2011-02-01 Adobe Systems Incorporated Caching database information
US7899817B2 (en) 2005-10-05 2011-03-01 Microsoft Corporation Safe mode for inverse query evaluations
US7548926B2 (en) * 2005-10-05 2009-06-16 Microsoft Corporation High performance navigator for parsing inputs of a message
US8001459B2 (en) 2005-12-05 2011-08-16 Microsoft Corporation Enabling electronic documents for limited-capability computing devices
US7761786B2 (en) * 2005-12-06 2010-07-20 International Business Machines Corporation Reusable XPath validation expressions
US7596548B2 (en) 2006-01-20 2009-09-29 International Business Machines Corporation Query evaluation using ancestor information
US20070174241A1 (en) * 2006-01-20 2007-07-26 Beyer Kevin S Match graphs for query evaluation
US20070198479A1 (en) * 2006-02-16 2007-08-23 International Business Machines Corporation Streaming XPath algorithm for XPath expressions with predicates
JP4523561B2 (ja) * 2006-03-17 2010-08-11 日本電信電話株式会社 XPath式処理装置
US7707136B2 (en) 2006-03-31 2010-04-27 Amazon Technologies, Inc. System and method for providing high availability data
US7925624B2 (en) * 2006-03-31 2011-04-12 Amazon Technologies, Inc. System and method for providing high availability data
JP4539613B2 (ja) * 2006-06-28 2010-09-08 富士ゼロックス株式会社 画像形成装置、画像生成方法およびプログラム
US7681135B2 (en) * 2006-08-10 2010-03-16 Kabushiki Kaisha Toshiba System and method for generating a composite source user interface
US8635242B2 (en) * 2006-10-11 2014-01-21 International Business Machines Corporation Processing queries on hierarchical markup data using shared hierarchical markup trees
US8108765B2 (en) * 2006-10-11 2012-01-31 International Business Machines Corporation Identifying and annotating shared hierarchical markup document trees
US8321845B2 (en) * 2006-10-13 2012-11-27 International Business Machines Corporation Extensible markup language (XML) path (XPATH) debugging framework
US7552119B2 (en) * 2006-12-20 2009-06-23 International Business Machines Corporation Apparatus and method for skipping XML index scans with common ancestors of a previously failed predicate
US7716210B2 (en) 2006-12-20 2010-05-11 International Business Machines Corporation Method and apparatus for XML query evaluation using early-outs and multiple passes
US20080165281A1 (en) * 2007-01-05 2008-07-10 Microsoft Corporation Optimizing Execution of HD-DVD Timing Markup
US20080244380A1 (en) * 2007-03-27 2008-10-02 Canon Kabushiki Kaisha Method and device for evaluating an expression on elements of a structured document
US8117182B2 (en) * 2007-04-23 2012-02-14 International Business Machines Corporation Apparatus and method for optimizing descendant path evaluation in xpath/xquery
US20080320031A1 (en) * 2007-06-19 2008-12-25 C/O Canon Kabushiki Kaisha Method and device for analyzing an expression to evaluate
FR2917865B1 (fr) * 2007-06-19 2013-03-15 Canon Kk Procede et dispositif d'analyse d'une expression a evaluer
US7979793B2 (en) * 2007-09-28 2011-07-12 Microsoft Corporation Graphical creation of a document conversion template
WO2009057382A1 (ja) * 2007-10-31 2009-05-07 Nec Corporation 候補パステーブル構築装置、候補パステーブル構築方法、候補パステーブル構築プログラム
FR2925721B1 (fr) * 2007-12-21 2016-07-01 Canon Kk Procede et dispositif de compilation et d'evaluation d'une pluralite d'expressions a evaluer sur un document structure
JP5228498B2 (ja) * 2008-01-22 2013-07-03 富士通株式会社 検索方法
US8850309B2 (en) 2008-03-27 2014-09-30 Canon Kabushiki Kaisha Optimized methods and devices for the analysis, processing and evaluation of expressions of the XPath type on data of the binary XML type
US7865502B2 (en) * 2008-04-10 2011-01-04 International Business Machines Corporation Optimization of extensible markup language path language (XPATH) expressions in a database management system configured to accept extensible markup language (XML) queries
JP2009295013A (ja) * 2008-06-06 2009-12-17 Hitachi Ltd データベース管理方法、データベース管理装置およびプログラム
US20110087698A1 (en) * 2008-06-18 2011-04-14 Keiichi Iguchi Search expression creating system, search expression creating method, search expression creating program, and recording medium
FR2933793B1 (fr) * 2008-07-11 2013-07-05 Canon Kk Procedes de codage et de decodage, par referencement, de valeurs dans un document structure, et systemes associes.
US8336021B2 (en) * 2008-12-15 2012-12-18 Microsoft Corporation Managing set membership
US9298761B2 (en) * 2009-04-30 2016-03-29 Hewlett Packard Enterprise Development Lp Adaptive merging in database indexes
CN102033885B (zh) * 2009-09-29 2013-10-02 国际商业机器公司 用于XML数据存储库中的XPath执行的方法和系统
US9141727B2 (en) * 2010-05-14 2015-09-22 Nec Corporation Information search device, information search method, computer program, and data structure
US9658997B2 (en) * 2010-08-03 2017-05-23 Adobe Systems Incorporated Portable page template
US20120101721A1 (en) * 2010-10-21 2012-04-26 Telenav, Inc. Navigation system with xpath repetition based field alignment mechanism and method of operation thereof
US9195711B2 (en) * 2013-03-11 2015-11-24 International Business Machines Corporation Persisting and retrieving arbitrary slices of nested structures using a column-oriented data store
US11175914B2 (en) * 2019-06-28 2021-11-16 Aras Corporation Calculation engine for performing calculations based on dependencies in a self-describing data system

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2002334721B2 (en) * 2001-09-28 2008-10-23 Oracle International Corporation An index structure to access hierarchical data in a relational database system
CA2484355A1 (en) * 2002-05-02 2003-11-13 Sarvega, Inc. System and method for transformation of xml documents using stylesheets
US7162485B2 (en) * 2002-06-19 2007-01-09 Georg Gottlob Efficient processing of XPath queries
US20040010752A1 (en) * 2002-07-09 2004-01-15 Lucent Technologies Inc. System and method for filtering XML documents with XPath expressions

Also Published As

Publication number Publication date
US20030163285A1 (en) 2003-08-28
US7315981B2 (en) 2008-01-01
JP2003323332A (ja) 2003-11-14

Similar Documents

Publication Publication Date Title
JP4039484B2 (ja) XPath評価方法、これを用いたXML文書処理システム及びプログラム
JP3982623B2 (ja) 情報処理装置、データベース検索システム及びプログラム
US10423881B2 (en) Systems and methods for semantic inference and reasoning
Kumar et al. Implementation of web usage mining using APRIORI and FP growth algorithms
US20040088652A1 (en) Data processing and difference computation for generating addressing information
US20040068487A1 (en) Method for streaming XPath processing with forward and backward axes
US20140114994A1 (en) Apparatus and Method for Securing Preliminary Information About Database Fragments for Utilization in Mapreduce Processing
JP2004326578A (ja) XPath評価方法、これを用いたXPath評価装置及び情報処理装置
JP2010503932A (ja) モジュール式有限状態トランスデューサの変換
JP5480034B2 (ja) 構造化文書の木構造を分割するための方法、プログラムおよびシステム
US8595215B2 (en) Apparatus, method, and computer program product for processing query
US8549009B2 (en) XML data processing system, data processing method and XML data processing control program used for the system
Kuijpers et al. An experimental study of context-free path query evaluation methods
Radoev et al. A language adaptive method for question answering on French and English
Huynh et al. Multi-core parallel algorithms for hiding high-utility sequential patterns
Che et al. Holistic boolean-twig pattern matching for efficient XML query processing
JP2007041683A (ja) 系列パターン抽出装置、系列パターン抽出方法、および系列パターン抽出プログラム
Sangers et al. Event-driven ontology updating
Bai et al. Para-g: Path pattern query processing on large graphs
Ramesh et al. Granite: A distributed engine for scalable path queries over temporal property graphs
JP4649339B2 (ja) XPath処理装置、XPath処理方法、XPath処理プログラム、および、記憶媒体
Tomaszuk et al. Reducing vertices in property graphs
US20100153438A1 (en) Method and apparatus for searching for hierarchical structure document
Wang et al. Inferring deterministic regular expression with counting
Barbosa et al. Declarative generation of synthetic XML data

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070220

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070320

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070710

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070816

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20070914

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20071023

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20071024

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071030

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

Free format text: PAYMENT UNTIL: 20101116

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20101116

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20111116

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20111116

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20121116

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20121116

Year of fee payment: 5

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

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

Free format text: PAYMENT UNTIL: 20121116

Year of fee payment: 5

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S202 Request for registration of non-exclusive licence

Free format text: JAPANESE INTERMEDIATE CODE: R315201

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

Free format text: PAYMENT UNTIL: 20121116

Year of fee payment: 5

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20121116

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20131116

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees