JP3832830B2 - XPath評価方法、これを用いたXPath評価装置及び情報処理装置 - Google Patents
XPath評価方法、これを用いたXPath評価装置及び情報処理装置 Download PDFInfo
- Publication number
- JP3832830B2 JP3832830B2 JP2003122292A JP2003122292A JP3832830B2 JP 3832830 B2 JP3832830 B2 JP 3832830B2 JP 2003122292 A JP2003122292 A JP 2003122292A JP 2003122292 A JP2003122292 A JP 2003122292A JP 3832830 B2 JP3832830 B2 JP 3832830B2
- Authority
- JP
- Japan
- Prior art keywords
- xml
- xpath
- document
- evaluation
- stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
- G06F16/986—Document structures and storage, e.g. HTML extensions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/143—Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/221—Parsing markup language streams
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99942—Manipulating data structure, e.g. compression, compaction, compilation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
Description
【発明の属する技術分野】
本発明は、XML(Extensible Markup Language)文書の解析技術に関し、特にXPath(XML Path Language)の評価を行う解析システム及びその解析方法に関する。
【0002】
【従来の技術】
今日、インターネットに代表されるコンピュータネットワークのパケット交換に用いられる文書記述言語として、文書の論理構造や構成要素の意味を自由に定義できるXMLが広く普及している。XML文書をアプリケーションで利用する際に、処理対象であるXML文書を解析することが必要となるが、このときXPathが利用される。XPathは、XML文書の特定の部分を指し示す構文を規定する言語であり、W3C(World Wide Web Consortium)勧告の仕様である。XPathを利用することにより、所定のXML文書が特定の論理構造や構成要素を持つかどうかを解析することができる(例えば、非特許文献1参照)。
【0003】
また、XML文書の構造は、木構造で表現することができ、W3C勧告の仕様であるDOM(Document Object Model)等を用いて表現される。XPathを用いてXML文書を解析する場合、通常、DOM等で表現されたXML文書全体を対象として走査し、XPathにて記述された構造を当該XML文書が持つかどうかを調べる。したがって、XML文書の解析システムは、解析対象であるXML文書全体を所定のメモリに読み込んで処理を行う必要があった。
【0004】
【非特許文献1】
“XML Path Language (XPath) Version 1.0”、[online]、1999年11月16日、[2003年3月4日検索]、インターネット<http://www.w3.org/TR/xpath>
【0005】
【発明が解決しようとする課題】
上記のように、XPathを用いてXML文書の解析を行う場合、従来は、解析対象であるXML文書全体を、一旦メモリの作業領域に読み込む必要があった。しかし、解析対象であるXML文書のデータサイズが巨大である場合、これをDOM等の記述として読み込むのは、多大なメモリ使用量を要し、またDOMを作成、操作する処理に多大な時間を要するという問題があった。
【0006】
また、SAX(The Simple API for XML)やXNIのようなストリーミングベースのAPI(Application Program Interface)を用いる場合、APIはストリーミング形式で取得されるXML文書を順次処理できるにも関わらず、XPathによる解析を行うために、一旦XML文書全体を読み込んでからでなければ処理を開始できないのは効率が悪い。
【0007】
そこで本発明は、上記の問題に鑑み、XML文書をストリーミング処理しながらXPathの評価を行う解析システム及びその解析方法を実現することを目的とする。
【0008】
【課題を解決するための手段】
上記の目的を達成する本発明は、コンピュータを用いてXML文書に対するXPathの評価を行う、次のようなXPath評価方法として実現される。このXPath評価方法は、処理対象のXML文書を構成するXMLイベント列を順次入力する第1のステップと、入力された個々のXMLイベントに対してXPathを順次評価すると共に、所定のXMLイベントに対してこのXPathが部分的に成立した場合に、このXPathの部分的な評価の結果に関する情報を所定の記憶手段に保持する第2のステップと、XMLイベント列の入力に伴って、記憶手段に保持されている部分的な評価の結果を考慮してXPathの部分的な評価を繰り返し、XPathの最後の部分が成立した場合に、処理対象であるXML文書に対して、このXPathが成立したと評価する第3のステップとを含むことを特徴とする。
このように、入力したXMLイベントに対して個別にXPathの評価を行っていき、その部分的な評価結果を蓄積しながら、XPath全体が成立するかどうかを判断することにより、ストリーミング処理によるXPathの評価が可能となる。
【0009】
この第2のステップで行われるXPathの評価及び部分的な評価の結果を保持する具体的な手法として、本発明では、オートマトンを用いた手法、スタックを用いた手法、XMLイベント列の入力に伴って順次生成される文書木を用いた手法を提示する。
オートマトンを用いた手法では、評価対象であるXPathを表現するオートマトンを生成し、個々のXMLイベントに基づいて、このオートマトンの状態を遷移させることにより、XPathの評価を行う。この部分的な評価の結果は、オートマトンの状態として保持される。
【0010】
スタックを用いた手法では、評価対象であるXPathをスタック要素の列で表現した第1のスタックを生成し、個々のXMLイベントに基づいて処理対象のXML文書の入れ子構造を解析する第2のスタックを生成する。そして、第1のスタックと第2のスタックとを比較することにより、XPathの評価を行う。この部分的な評価の結果は、第2のスタックのスタック要素として保持される。
【0011】
XMLイベント列の入力に伴って順次生成される文書木を用いた手法では、入力された個々のXMLイベントの入力に基づいて処理対象のXML文書の文書構造を示す文書木を順次生成していき、この文書木の生成に伴い、生成された部分までの文書木を用いてXPathの評価を行う。この場合、XMLイベント列の入力に伴って文書木が作成されていくので、文書木において新たなノードが追加されるたびにXPathを評価していき、XPathが成立するかどうかを調べれば良い。しかし、XPathが成立するノードが複数存在する場合もあるので、部分的な評価の結果の情報を保持しておき、後続のXMLイベントに対する評価の際に用いることができる。
【0012】
また、上記の目的を達成する他の本発明は、次のように構成されたXPath評価装置としても実現される。このXPath評価装置は、ストリーミング処理によるXPathの評価を実行する評価実行部と、処理対象のXML文書を構成するXMLイベント列を入力し、評価実行部に順次転送するXMLイベント転送部とを備える。この評価実行部は、XMLイベント転送部から転送された個々のXMLイベントに対してXPathを順次評価すると共に、所定のXMLイベントに対して、このXPathが部分的に成立した場合に、このXPathの部分的な評価の結果に関する情報を保持していく。そして、このXPathの最後のステップが成立した場合に、XML文書に対して、このXPathが成立したと評価することを特徴とする。
【0013】
このXPath評価装置は、上述したXPathの評価及び部分的な評価の結果を保持する具体的な手法として、オートマトンを用いた手法を実現するため、XPathを表現するオートマトンを生成するオートマトン生成部をさらに備える構成とすることができる。同様に、スタックを用いた手法を実現するため、XPathをスタック要素の列で表現した第1のスタックを生成するスタック生成部をさらに備える構成とすることができる。
【0014】
また、本発明の他のXPath評価装置は、XML文書を構成するXMLイベント列を入力し、個々のXMLイベントの入力に伴い、入力されたXMLイベントに基づいてXML文書の文書構造を示す文書木を順次生成する文書木生成部と、処理対象のXML文書を構成するXMLイベント列を入力し、この文書木生成部に順次転送するXMLイベント転送部と、この文書木生成部による文書木の生成に伴い、生成された部分までの文書木を用いてXPathの評価を行う評価実行部とを備えることを特徴とする。
【0015】
さらに本発明は、XMLパーサと、上述したXPath評価装置の機能を備えたXPath評価部と、XMLパーサで生成されたXMLイベントを入力し、XPath評価部によるXPathの評価結果に応じて、入力したXMLイベントにて構成されるXML文書に対する処理を実行するアプリケーション実行部とを備える情報処理装置として実現することもできる。
【0016】
また本発明は、コンピュータを制御して上述したXPath方法の各ステップに対応する処理を実行させるプログラム、またはコンピュータを上記XPath評価装置あるいは情報処理装置として機能させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【0017】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
本発明は、ストリーミング形式で入力される処理対象のXML文書に対して、当該XML文書の入力に応じて順次XPathの評価を行う。このストリーミング処理によるXPathの評価を実現する実施の形態として、以下ではオートマトンを用いた実施の形態(実施の形態1)、スタックを用いた実施の形態(実施の形態2)、ツリーを用いた実施の形態(実施の形態3)を説明する。なお、これらの実施の形態は、パーソナルコンピュータやワークステーション、その他のコンピュータ装置、PDA(Personal Digital Assistant)、携帯電話等の種々の情報処理装置にて実現される。
【0018】
〔実施の形態1〕
実施の形態1では、オートマトンを用いることにより、XPathの評価のストリーミング処理を実現する。
図1は、本実施の形態を実現するのに好適な情報処理装置のハードウェア構成の例を模式的に示した図である。
図1に示す情報処理装置は、演算手段であるCPU(Central Processing Unit:中央処理装置)101と、M/B(マザーボード)チップセット102及びCPUバスを介してCPU101に接続されたメインメモリ103と、同じくM/Bチップセット102及びAGP(Accelerated Graphics Port)を介してCPU101に接続されたビデオカード104と、PCI(Peripheral Component Interconnect)バスを介してM/Bチップセット102に接続されたハードディスク105、ネットワークインターフェイス106及びUSBポート107と、さらにこのPCIバスからブリッジ回路108及びISA(Industry Standard Architecture)バスなどの低速なバスを介してM/Bチップセット102に接続されたフロッピーディスクドライブ109及びキーボード/マウス110とを備える。
なお、図1は本実施の形態を実現するコンピュータのハードウェア構成を例示するに過ぎず、本実施の形態を適用可能であれば、他の種々の構成を取ることができる。例えば、ビデオカード104を設ける代わりに、ビデオメモリのみを搭載し、CPU101にてイメージデータを処理する構成としても良いし、ATA(AT Attachment)などのインターフェイスを介してCD−ROM(Compact Disc Read Only Memory)やDVD−ROM(Digital Versatile Disc Read Only Memory)のドライブを設けても良い。
【0019】
図2は、本実施の形態におけるXPath評価手段(解析システム)の実装例を示す図である。
図2に示すように、本実施の形態による情報処理装置は、処理対象であるXML文書の構文解析(パース)を行うXMLパーサ10と、構文解析されたXML文書に対してXPathの評価を行うXPath評価部20と、XPathの評価を経たXML文書を用いて所定の情報処理を実行するアプリケーション実行部30とを備える。
図2に示すXMLパーサ10、XPath評価部20及びアプリケーション実行部30は、例えば、図1に示したメインメモリ103に展開されたプログラムにてCPU101を制御することにより実現される仮想的なソフトウェアブロックである。
【0020】
図2において、XMLパーサ10は、処理対象のXML文書を入力して構文解析を行い、解析結果を通知するXMLイベントを出力してXPath評価部20に送る。XMLイベントは、解析対象のXML文書の木構造(ドキュメントツリー)におけるノードごとに順次、XPath評価部20へ送られる。XMLパーサ10としては、XML文書を扱う情報処理装置で従来から用いられている既存のXMLパーサを用いることができる。なお、本実施の形態において、入力対象となるXML文書は整形式であることを前提とする。
【0021】
XPath評価部20は、XMLパーサ10からXMLイベントを受け取り、予め与えられたXPathの評価を行う。
図3は、XPath評価部20の機能構成を説明する図である。
図3に示すように、本実施の形態のXPath評価部20は、オートマトン生成部21と、XMLイベント転送部22と、評価実行部23とを備える。
【0022】
オートマトン生成部21は、予め与えられたXPathからオートマトン(状態遷移機械)を生成する。本実施の形態では、SAXやXNI等のストリーミング形式で実行されるAPIを用いたアプリケーションに対してXPathを評価する。したがって、ストリーミング処理を行うという制約上、評価対象となるXPathの機能は一部制限される。例えば、評価において既に通知されたXMLイベントを参照することが必要となる基準点(axis)や述語(predicate)は実現されない。しかし、実際の多くのアプリケーションにおける処理では、かかる制限が問題となることはない。
【0023】
ここで、本実施の形態におけるXPathの制限を具体的に提示する。
1.XPathは、ロケーションパスとする。ただし、絶対ロケーションパスは、対象であるXML文書の木構造のルートノードからXPathを評価するときに限る。
2.基準点は、フォワード基準点のみとする。すなわち、次のいずれかとする。
self
child
descendant
descendant−or−self
following
following−sibling
attribute
namespace
ただし、ある条件と特別な実装の上でリバース基準点も使用することができる。これについては後述する。
3.述語については次のように扱う。
(1)演算子は、次のいずれかとする。
or
and
=
!=
(2)プリミティブは、次のいずれかとする。
・ロケーションパス。ただし、その基準点は次のいずれかとする。
attribute
namespace
self
parent
ancestor
ancestor−or−self
・リテラル
・数
・関数呼び出し。ただし、次のものを除く。
last()
id(object)
ルートノード及び要素ノードに対するstring(object?)
【0024】
さて、XPathにおいて、省略記法を用いないロケーションパスは、基準点とノードテストと述語の連接(ステップと呼ばれる)を記号/で区切って並べたもので表される。オートマトン生成部21は、各ステップの評価状態をオートマトンで表現する。このオートマトンは、次のような状態遷移を行う。
図4は、オートマトン生成部21にて生成されるオートマトンを模式的に示す図である。
まず、各ステップ(個数をNとする)を左(先頭)から順番に番号付けし、所定のトークンが読み込まれた時点でステップKが成立している状態をステートKとする。ここで、ステップKが成立している状態とは、ステップKを満たすノードの開始タグトークンが読み込まれ、その終了タグがまだ読み込まれていない状態を表すものとする。また、初期状態はステート0で表すとする。
今、ステップKを満たすノードの開始タグトークンが読み込まれ、現在の状態がステートKになったとする。このステートKの状態でステップK+1を満たすノードが読み込まれた場合は、ステートK+1に状態が移る。一方、ステートKの状態でステップKの終了タグが読み込まれた場合は、ステートK−1に状態が移る。このような状態遷移を繰り返し、ステートNに到達すると、ロケーションパスが満たされたと判断される。
オートマトン生成部21によって生成された上記のようなオートマトンは、例えば図1のメインメモリ103の作業領域に保持され、後述する評価実行部23の処理において使用される。
【0025】
XMLイベント転送部22は、XMLパーサ10から出力されたXMLイベントを入力し、XML文書の木構造におけるノードごとに評価実行部23へ順次転送する。また、当該XMLイベントをアプリケーション実行部30へも順次転送する。
【0026】
評価実行部23は、オートマトン生成部21にて生成されたオートマトンを取得し、XMLイベント転送部22から転送されたXMLイベントを受け取って、XML文書のトークン列を順次読み込みながらオートマトンにおける状態間の遷移を行う。そして、ロケーションパスを満たすノードに対応するトークンが読み込まれた時点でそのロケーションパスが満たされたと評価する。この評価結果は、評価イベントとしてアプリケーション実行部30に送られる。評価実行部23による具体的な評価処理の手順については後述する。
【0027】
図2に示したアプリケーション実行部30は、XPath評価部20のXMLイベント転送部22から転送されるXMLイベントと評価実行部23から出力される評価イベントとを入力し、ストリーミング処理にてXML文書に対する処理を実行する。
【0028】
次に、本実施の形態のXPath評価部20による処理について、さらに詳細に説明する。
上述したように、本実施の形態では、まず評価対象であるXPathを表現するオートマトンを生成し保持しておく。そして、処理対象のXML文書を構成するXMLイベント列を順次入力し、このXMLイベントに基づいて、オートマトンの状態を遷移させることにより、XPathの部分的な評価を行う。XPathの部分的な評価の結果は、オートマトンの状態として保持される。
ここでは簡単のために、ロケーションパスは、述語が無いものとし、基準点ではchildとdescendantのみを考える。following−sibling、following、self、descendant−or−self、attribute、namespaceを基準点とするステップや述語が存在するステップの取り扱いについては後述する。
【0029】
図5は、本実施の形態による処理に用いられるロケーションパス、オートマトン及び処理対象のXML文書の例を示す図である。
図5(A)に示すロケーションパスが与えられ、このロケーションパスの各ステップを左からステップ1、ステップ2、ステップ3と呼ぶことにする。オートマトン生成部21により、このロケーションパスから生成されるオートマトンの状態は、図5(B)に示すようになる。
今、図5(C)に示すXML文書が入力されたとする。このXML文書は、XMLパーサ10にて構文解析され、ノードごとのXMLイベントとしてXPath評価部20に送られ、XMLイベント転送部22にて評価実行部23に順次転送される。なお、図5(C)において、<title></title>のように要素内容がない場合は<title/>と省略表記がなされている(以下、他のXML文書についても同様)。
【0030】
評価実行部23は、オートマトン生成部21にて生成された上記のオートマトンを用い、XMLイベント転送部22から転送されたXMLイベントに基づいて当該オートマトンの状態遷移を行って、当該オートマトンに対応するロケーションパスの評価を行う。なお、実際の処理において、オートマトンの状態の遷移及び評価は、XML文書の入れ子構造を解析するスタック(XMLイベント列用のスタック)を、例えば図1のメインメモリ103のメモリ空間に構築して行う。すなわち、評価実行部23は、XMLパーサ10から送られるXMLイベント列を、このXMLイベント列用スタックに順次保持していく。
このXMLイベント列用スタックは、開始タグが読み込まれたことを条件に、そのタグに対応するノードをプッシュし、終了タグが読み込まれたことを条件に、当該ノードをポップする。また、スタックのボトム(bottom)はルートノードを表すものとする。
【0031】
したがって、評価実行部23は、XMLイベント列の入力に応じて、XMLイベント列用スタックへのプッシュとポップを順次行っていく。この操作は、ロケーションパスが相対であるか絶対であるかに関わらず、XML文書の開始から終了まで一貫して行われる。この操作中、所定の開始タグが読み込まれ、そのタグに対応するノードがXMLイベント列用スタックにプッシュされた場合はいつでも、当該ノードが(現在の状態をステートKとして)ステートK+1に対応するステップ(すなわちステップK+1)を満たしているかどうかを判定する。この判定結果が真であった場合、現在の状態をステートK+1とする。このとき、スタック要素とステートの対応付けをしておく。つまり、プッシュされたノードとそのノードによって成立したステートとのマッピングを構成する。ここで、ステート0に対しては、ロケーションパスが相対パスである場合にはコンテクストノードに対応したスタック要素が対応付けられる。またロケーションパスが絶対パスである場合はスタックのボトム(すなわちルートノード)が対応付けられるものとする。一方、XMLイベント列用スタックからのポップが行われた場合、ポップされたエレメントがステートに対応付けされているかどうかを検出し、対応付けされていたならば、状態を1つ前に戻す。
【0032】
以下、図5を参照し、順を追って説明する。
まず、初期状態はステート0であり、トークン<document>が読み込まれ、ノードdocumentがプッシュされる。このときのXMLイベント列用スタックの状態は、
bottom | document
となる。このノードdocumentは、ステップ1を満たすので、ステート0からステート1へ状態遷移が行われる。
【0033】
次に、トークン<title>が読み込まれ、ノードtitleがプッシュされる。このときのXMLイベント列用スタックの状態は、
bottom | document | title
となる。このノードtitleは、ステート1に対応付けられたノードdocumentのchild::chapterという条件を満たさない。すなわち、ステップ2を満たさないので、状態遷移は行われず、そのままトークンの読み込みが続けられる。
【0034】
ノードtitleの終了タグであるトークン</title>が読み込まれてノードtitleがポップされた後、続いてトークン<chapter>が読み込まれ、ノードchapterがプッシュされる。このノードはステップ2を満たすので、ステート1からステート2へ状態遷移が行われる。このときのXMLイベント列用スタックは、
bottom | document | chapter
となる。次に、トークン</chapter>が読み込まれ、ノードchapterのポップが行われる。このとき、ポップされるスタック要素には、ステート2が対応付けられている。したがってこの場合は、ポップと共に、オートマトンの状態が、ステート2からその1つ前の状態であるステート1へ遷移される。
【0035】
この後、再びトークン<chapter>が読み込まれ、ノードchapterがプッシュされて、ステート1からステート2へ状態遷移が行われる。そしてさらに、トークン<section>が読み込まれ、ノードsectionがプッシュされると、このノードはステップ3を満たすので、ステート2からステート3へ状態遷移が行われる。この時点で評価実行部23は、ロケーションパスが成立したと判断し、評価結果を示す評価イベントをアプリケーション実行部30へ送信する。
なお、以上の説明では、評価実行部23はロケーションパスが成立した場合に評価イベントを出力することとしたが、XMLイベントを1つ処理する度に成立または不成立を示す評価イベントを出力するようにしても良い。
【0036】
次に、他のフォワード基準点(axis)の取り扱いについて説明する。
1.attribute、namespaceの取り扱い。
基準点がattributeであるステップが含まれるロケーションパスを評価するには、状態遷移した際に、遷移後の状態の1つ先の状態に対応するステップを検出する。そして、そのステップがattributeであれば、最後に入力されたトークンの属性を用いて、当該ステップの評価を行う。この評価でノードがステップを満足した場合は、状態を1つ進める。一方、ノードがステップを満足しなかった場合は、元々の状態遷移をキャンセルする。
namespaceに関しては、現在のコンテクストにおけるnamespaceを管理しておき、ステップの評価をattributeの場合と同様に実行する。
なお、attribute及びnamespaceに関しては、これらが成立する過程では、XMLイベント列用スタックの操作は行われない。したがって、それらの状態と対応付けられるノードは何もないことを表すNULLノードとしておく。
【0037】
2.selfの取り扱い。
基準点がselfであるステップが含まれるロケーションパスを評価するには、状態遷移した際に、遷移後の状態の1つ先の状態に対応するステップを検出する。そして、そのステップがselfであれば、当該ステップの評価を行う。この評価でノードがステップを満足した場合は、状態を1つ進め、その先の状態に対して同じ操作を繰り返す。一方、ノードがステップを満足しなかった場合は、元々の状態遷移をキャンセルする。selfが成立する過程では、XMLイベント列用スタックの操作は行われない。したがって、それらの状態と対応付けられるノードは何もないことを表すNULLノードとしておく。
【0038】
3.descendant−or−selfの取り扱い。
基準点がdescendant−or−selfであるステップが含まれるロケーションパスを評価するには、まず、そのステップの基準点がselfであるとみなして、上記2.の操作を行う。この操作においてステップを満足しないと判断された場合、その基準点がdescendantであるとみなして評価を続行する。
【0039】
4.following−siblingの取り扱い。
基準点がfollowing−siblingであるステップが含まれるロケーションパスを評価するには、以下の操作を行う。
まず、ある基準点がfollowing−siblingであるステップをステップKとし、それに対応した状態をステートKとする。基本的には、ステップK−1の成立時にプッシュされたノードがポップされたときのスタックトップノードに対し、そのノードに続いてプッシュされるノードがステップKで選択するべきノードとなる。ただし、ここで注意しなければならないのは、このステップKを満足したノードは、ステップKで選択されるノードの候補であると同時にステップK−1で選択されるノードの候補でもあるということである。例えば、ロケーションパスが、
/child::document/child::chapter/following-sibling::chapter
であった場合、以下の2番目のchapterは、2番目のステップと、3番目のステップの両方で選択される可能性がある。
<document>
<chapter>−−1
</chapter>
<chapter>−−2
</chapter>
<chapter>−−3
</chapter>
</document>
このような両義性は、positionに依存したノード選択を行うときは厳密な解釈が必要である。例えば、以下のロケーションパス
/child::document/child::chapter/following-sibling::chapter[1]
では、2番目と3番目のchapterを共に選択しなければならない。また、以下のロケーションパス
/child::document/child::chapter[2]/following-sibling::chapter
では、3番目のchapterを選択しなければならない。
【0040】
そこで、本実施の形態では、ノードがステップK−1を満足すると判断された時点でプロセスを2つに分割し、それぞれのプロセスが2通りのロケーションパスの解釈に対応した状態遷移を続行するように処理を行う。1つのプロセスは、この時点で当該ノードと対応付けられた状態の1つ前の状態に遷移し(通常はステートK−2、selfが含まれる場合はさらにその前の状態)、以降の評価を続行する。
もう1つのプロセスでは、次の操作を行う。まず、状態はステートK−1のままとする。ステートK−1の状態において、ノードがステップK−1を満足すると判断されてプッシュされたノードがポップされたときのスタックトップノードがスタックトップである間に何らかのノードがプッシュされた場合は、当該ノードがステップKステップKを満足するかどうかを判定する。満足するならば、状態をステートKに遷移し、プッシュされたノードとステートKとを対応付けて、これ以降の評価を続行する。また、ステートKに対応付けられたノードがポップされたときは、状態をステートK−1に戻す。ステートK−1の状態において、ステップK−1を満足したノードの終了タグトークンが入力された場合、すなわちノードがステップK−1を満足すると判断されてプッシュされたノードがポップされたときのスタックトップノードがポップされた場合は、このプロセスにおいてステップKで選択されるノードがこれ以上存在しないので操作を終了する。
【0041】
5.followingの取り扱い。
基準点がfollowingであるステップが含まれるロケーションパスを評価するには、以下の操作を行う。
この場合もロケーションパスに曖昧さが生じる可能性があるため、following−siblingの場合と同じ様なプロセスの分割が必要となる。まず、ある基準点がfollowingであるステップをステップKとし、それに対応した状態をステートKとする。上記4.の処理と同様に、ノードがステップK−1を満足すると判断された時点でプロセスを2つに分割する。1つのプロセスは、この時点で当該ノードと対応付けられた状態の1つ前の状態に遷移し、以降の評価を続行する。
もう1つのプロセスでは、次の操作を行う。まず、状態はステートK−1のままとする。ステートK−1の状態において、何らかのノードがプッシュされた場合は、ステップKを満足するかどうかを判定する。満足するならば、状態をステートKに遷移し、プッシュされたノードとステートKとを対応付けて、これ以降の評価を続行する。followingの場合は、ステートK−1の状態において、ステップK−1を満足したノードの終了タグトークンが入力されても、状態をステートKのままにする。
【0042】
次に、述語(predicate)の取り扱いについて説明する。
述語は、基本的には、状態遷移の瞬間にスタックに蓄積された情報から構成できるものについて取り扱うことができる。つまり、ステップKを満たす開始タグトークンが読み込まれた場合、その状態で構成できる当該ノードについての情報、及びスタックに残っている当該ノードのancestorについての情報を述語に記述することができる。また、各ステートについてカウンタを設けることで、ポジション関数を取り扱うことが可能となる。これまで説明してきたようなステップの成立状態において、そのステップに対応したステートのカウンタを1つ増やす。このカウンタの値に基づいてポジション関数を含む述語を評価し、最終的にノードがステップを満足するか否かを判定する。
【0043】
次に、リバース基準点の取り扱いについて説明する。
本実施の形態では、非常に限定されたロケーションパスにおいて、parent、ancestor、ancestor−or−selfといったリバース基準点を使用することができる。上記述語の取り扱いで述べたように、現在のノードのancestorについての情報はオートマトンの状態として蓄積されている。したがって、ロケーションパスのある地点から右側のステップが全て、parent、ancestor、ancestor−or−self、あるいはselfである場合は、その地点でスタックの操作を一旦停止し、スタックを遡りながら、それらのステップを評価していけば良い。
【0044】
図6は、本実施の形態によるXML文書のストリーミング処理を説明するフローチャートである。
図6に示すように、XPath評価部20は、初期動作として、オートマトン生成部21により、予め与えられたXPathのロケーションパスからオートマトンを生成しておく(Step601)。処理対象であるXML文書が入力され、XMLパーサ10からXMLイベントが送られると(Step602)、XPath評価部20の評価実行部23により、上記のようにして、当該XMLイベントに対する先のオートマトンにおける状態遷移が順次判断される(Step603)。この状態遷移が当該オートマトンに対応するロケーションパス(XPath)の部分的な評価を意味している。この部分的な評価の結果は、オートマトンの現在の状態として保持される。
そして、このオートマトンの最後の状態に達するまでXMLイベントの入力及び状態遷移の判断を繰り返し、最後の状態に達したならば、このXML文書に対してロケーションパスが成立したと評価され、評価イベントがアプリケーション実行部30へ送られる(Step604、605)。
アプリケーション実行部30は、XMLパーサ10から出力されたXMLイベントと、XPath評価部20の評価実行部23から出力された評価イベントとを取得し、当該評価イベントに応じて当該XMLイベントを順次処理していく。処理対象のXML文書についてXMLパーサ10から送られる全てのXMLイベントに対して、Step602〜605の処理を実行した後、本実施の形態によるXML文書のストリーミング処理を終了する(Step606)。
【0045】
〔実施の形態2〕
実施の形態2では、実施の形態1で説明したオートマトンの状態遷移を用いた処理に相当するXPathの評価を、XML文書の入れ子構造を解析するスタックを用いて実現する。すなわち本実施の形態は、XPath及びXMLイベント列を共にスタックで表現し、XMLイベントが通知される度にそれらを比較するという方法で実装される。
【0046】
本実施の形態は、実施の形態1と同様に、例えば図1に示した情報処理装置にて実現される。
図7は、本実施の形態におけるXPath評価手段(解析システム)の実装例を示す図である。
図7に示すように、本実施の形態による情報処理装置は、処理対象であるXML文書の構文解析(パース)を行うXMLパーサ10と、構文解析されたXML文書に対してXPathの評価を行うXPath評価部40と、XPathの評価を経たXML文書を用いて所定の情報処理を実行するアプリケーション実行部30とを備える。
図7に示すXMLパーサ10、XPath評価部40及びアプリケーション実行部30は、例えば、図1に示したメインメモリ103に展開されたプログラムにてCPU101を制御することにより実現される仮想的なソフトウェアブロックである。なお、XMLパーサ10及びアプリケーション実行部30は、実施の形態1における対応する構成要素と同様であるため、同一の符号を付して説明を省略する。
【0047】
XPath評価部40は、XMLパーサ10からXMLイベントを受け取り、予め与えられたXPathの評価を行う。
図8は、XPath評価部40の機能構成を説明する図である。
図8に示すように、本実施の形態のXPath評価部40は、スタック生成部41と、XMLイベント転送部42と、評価実行部43とを備える。
【0048】
スタック生成部41は、予め与えられたXPathから、当該XPathのステップを表現するデータ構造であるスタックを生成する。XPathからのスタックの生成は、次のようにして行われる。
すなわち、スタック生成部41は、XPathの各ステップに対して、ノードテストと述語とをスタック要素で表現し、基準点に応じてスタックにプッシュする。例えば、child::paraに対してはparaをスタック要素で表現し、既存のスタックにプッシュする。ここで、ノードテストと述語とは、XMLイベント列に対してそれらを適切に評価できる限り、どのようなスタック要素で表現してもよい。ただし、述語position()を含むときは、スタックが一致した回数を保持するためのカウンタを用意する。
【0049】
図9は、基準点の種類と作成されるスタックとの関係を例示する図である。
また図9において、矢印(直線矢印と波線矢印)は共に、まず元のスタックを比較し、一致すれば先のスタックを比較することを表す。具体的には、直線矢印は、まず元のスタックを比較し、一致したならば、続けて先のスタックを比較することを表す。一方、波線矢印は、まず元のスタックを比較し、一致したならば、その後に特定のXMLイベントが通知された場合に限り、先のスタックを比較することを表す。この場合の特定のXMLイベントとは、基準点の種類(following−siblingかfollowingかの別)に応じて異なる。
・following−siblingの場合
元のスタックにおける先頭のスタック要素と一致したノード以降の兄弟ノードとその子孫ノードに対応するXMLイベント。兄弟ノードに対応するXMLイベントに対応するスタック要素を基準として、先のスタックを比較する。
・followingの場合
元のスタックの先頭のスタック要素と一致したノード以降のノードに対応するXMLイベント。ただし、その子孫ノードに対応するXMLイベントを除く。そのようなノードの各々に対応するXMLイベントに対応するスタック要素を基準として、先のスタックを比較する。
【0050】
図10は、図9に示した関係に基づいて、XPathから生成されるスタックを示す図である。
(1)chapter/para、
(2)chapter/para[@type=”warning”]、
(3)chapter/para[2]、
(4) .//para
の各XPathから図10に示したスタックがそれぞれ生成される。なお、上記及び図10において、child基準点はXPathの表記規則に基づいて既述が省略されている。
スタック生成部41によって、以上のようにして生成されたスタックは、例えば図1のメインメモリ103の作業領域に保持され、後述する評価実行部43の処理において使用される。
なお、本実施の形態では、XPathの機能に対して、実施の形態1の場合と同様の制限が課される。
【0051】
XMLイベント転送部42は、XMLパーサ10から出力されたXMLイベントを入力し、XML文書の木構造におけるノードごとに評価実行部43へ順次転送する。また、当該XMLイベントをアプリケーション実行部30へも順次転送する。
【0052】
評価実行部43は、スタック生成部41にて生成されたスタックを取得し、XMLイベント転送部42から転送されたXMLイベントを受け取って、XML文書のトークン列を順次読み込みながらスタックを操作する。そして、XPathを満たすノードに対応するトークンが読み込まれた時点でそのXPathが満たされたと評価する。この評価結果は、評価イベントとしてアプリケーション実行部30に送られる。
【0053】
本実施の形態では、上記のスタックを用いたXPathの評価を実現するためのデータ構造として、実施の形態1の場合と同様に、XML文書の入れ子構造を解析するスタック(XMLイベント列用のスタック)を導入する。すなわち、評価実行部43は、スタック生成部41で作成される上記のXPath用のスタックとは別に、XMLイベント列用のスタックを用意し、XMLパーサ10から送られるXMLイベント列を保持する。このXMLイベント列用のスタックに関しては、原則として、開始タグに対応するXMLイベントを入力したならば、それをスタック要素で表現し、スタックにプッシュする。そして、終了タグに対応するXMLイベントを入力したならば、スタックをポップする。また、テキスト等に対応するXMLイベントを入力したならば、このXMLイベントもスタック要素で表現しスタックにプッシュするが、スタックの比較が終了した後、即座に当該スタックをポップする。ここで、XMLイベントは、そのイベントが保持する情報を保持する限り、どのようなスタック要素で表現しても良い。
【0054】
さらに評価実行部43は、XMLイベント転送部42からXMLイベントが転送される度に、XML文書中の着目しているノードのXMLイベントに対応するスタック要素を基準として、XMLイベント列用のスタックとXPath用のスタックとを比較することにより、XPathの評価を行う。ここで、スタックを比較するとは、対応するスタック要素を比較することである。また、スタック要素を比較するとは、対応するXMLイベント(及びそれ以前に通知されたXMLイベント)に対して、対応するノードテストと述語とを評価することである。
【0055】
スタックの比較は、原則として、最後のスタック要素から行う。一致しないスタック要素を検出したならば、直ちに比較処理を終了する。また、毎回全てのスタック要素を比較しても良いし、比較において一致しなかったスタック要素の位置を保持しておき、次回の比較処理では当該一致しなかったスタック要素から後を比較するようにしても良い。
スタックが一致したならば、これは、最後に通知されたイベントに対応するノードに対してXPathがマッチしたことを意味する。ただし、XPath用のスタックにカウンタが用意されているときは、スタックが一致する度にXMLイベント列用のスタックにおける対応スタック要素のカウント値をインクリメントし、XPath用のスタックのカウント値と一致したときに限り、XPathがマッチしたと判断する。
【0056】
以上のように、本実施の形態では、評価対象であるXPathをスタック要素の列で表現したXPath用スタック(第1のスタック)を生成し、さらに処理対象であるXML文書を構成するXMLイベント列を入力して入力された個々のXMLイベントに基づいて処理対象のXML文書の入れ子構造を解析するXMLイベント列用スタック(第2のスタック)を生成する。そして、第1のスタックと当該第2のスタックとを比較することにより、XPathの部分的な評価を行う。XPathの部分的な評価の結果は、XMLイベント列用スタックのスタック要素として保持される。
また、上述したように、XMLイベント列用スタックの操作は、実施の形態1で説明したXMLイベント列用スタックの操作と同様である。したがって、このXMLイベント列用スタックの操作及び比較が実施の形態1で説明したオートマトンの状態遷移に相当している。ただし、実施の形態2では、スタックに蓄積されたデータのマッチングのみでXPathの評価が実行されるので、実装が容易である。
【0057】
次に、本実施の形態のXPath評価部40による処理について、さらに詳細に説明する。
図11は、処理対象であるXML文書の例を示す図、図12乃至図14は、図11のXML文書に対するスタックを用いた評価処理の様子を示す図である。なお、図11では、各タグに関して、documentをdocとするなど、適宜、省略表記がなされている(以下、他のXML文書についても同様)。
XPathとして図10の(3)に示した
chapter/para[2]
が与えられたものとする。すなわち、所定のXML文書のイベント列に対して、ノードchapterの下位に位置する2つ目のノードparaが検出されたときに、このXPathの成立という評価がなされる。このXPathに対してスタック生成部41にて生成されるスタックは図10に示したとおりである。
【0058】
図12乃至図14には、図11のXML文書に対するSAXイベント列(XMLイベント列)と、各SAXイベント列を入力した際の評価実行部43による比較の様子が順番に示されている。
最初に、ドキュメント開始を示すSAXイベントstartDocumentが入力され、スタックの比較が開始される(図12(A))。この時点では、XMLイベント列用スタックのスタック要素は空(NULL)である。次に、要素(ノード)の開始を示すSAXイベントstartElement: docが入力され(図12(B))、さらにトークン(SAXイベント)の読み込みが続けられる。
【0059】
次に、要素の開始を示すSAXイベントstartElement: chapterが入力され、XMLイベント列用スタックがプッシュされてXPath用スタックと比較される(図12(C))。このスタック要素は一致するが、この時点ではスタック要素paraが一致していないので、トークン(SAXイベント)の読み込みが続けられる。続いて、SAXイベントstartElement: paraが入力され、XMLイベント列用スタックがプッシュされてXPath用スタックと比較される(図13(A))。このスタック要素は一致するが、図11のXML文書で最初に現れたノードparaであるので、ポジション関数(pos=2)を扱うためのカウンタの値(current_pos)が1インクリメントされ、トークン(SAXイベント)の読み込みが続けられる。
【0060】
以後、要素の終了を示すSAXイベントendElement: para、endElement: chapterが入力されてXMLイベント列用スタックの対応するスタック要素がそれぞれポップされ(図13(B)(C))、次に再びSAXイベントstartElement: chapterが入力されてXMLイベント列用スタックがプッシュされ、XPath用スタックと比較される(図14(A))。このスタック要素は一致し、続いてSAXイベントstartElement: paraが入力され、XMLイベント列用スタックがプッシュされてXPath用スタックと比較される(図14(B))。このスタック要素は一致し、カウンタの値が1インクリメントされると、current_pos=2となって、ポジション関数の要求を満たすので、図11のXML文書に対してXPath“chapter/para[2]”が成立したと評価される。
【0061】
さて、上記の説明で、following−sibling及びfollowingに関しては、ノードはステップKで選択されるノードの候補であると同時にステップK−1で選択されるノードの候補でもあるため、本実施の形態では、ステップK−1が成立したときにプッシュされたノードがポップされた時点でプロセスを2つに分割し、それぞれのプロセスが2通りのロケーションパスの解釈に対応したスタック操作を続行することとした。この動作について、具体例を挙げて詳細に説明する。
図15は、処理対象であるXML文書の例を示す図、図16は評価対象であるXPathとこのXPathから生成されるスタックとを示す図、図17乃至図19は、図15のXML文書に対するスタックを用いた評価処理の様子を示す図である。
【0062】
図16に示すように、XPathとして
chap/para[@num=“2”]/following−sibling::para
が与えられたものとする。すなわち、所定のXML文書のイベント列に対して、ノードchapterの下位に位置するノードpara num=“2”に後続する兄弟ノードparaが検出されたときに、このXPathの成立という評価がなされる。
【0063】
図17乃至図19には、図15のXML文書に対するSAXイベント列(XMLイベント列)と、各SAXイベント列を入力した際の評価実行部43による比較の様子が順番に示されている。
まずドキュメント開始を示すSAXイベントstartDocument、続いて要素の開始を示すSAXイベントstartElement: docが入力され(図17(A)(B))、さらにトークン(SAXイベント)の読み込みが続けられる。次に、要素の開始を示すSAXイベントstartElement: chapterが入力され、XMLイベント列用スタックがプッシュされてXPath用スタックと比較されるが(図17(C))、スタック要素paraが一致していないので、トークン(SAXイベント)の読み込みが続けられる。
【0064】
次に、SAXイベントstartElement: para,@num=1が入力され、XMLイベント列用スタックがプッシュされてXPath用スタックと比較される(図18(A))。このスタック要素はXPath用スタックの対応するスタック要素(para@num=2)とは一致せず、引き続きトークン(SAXイベント)の読み込みが行われる。続いて、要素の終了を示すSAXイベントendElement: paraが入力され、XMLイベント列用スタックの対応するスタック要素がそれぞれポップされた後(図18(B))、SAXイベントstartElement: para,@num=2が入力され、XMLイベント列用スタックがプッシュされてXPath用スタックと比較される(図18(C))。このスタック要素はXPath用スタックの対応するスタック要素と一致する。したがって、これ以降は図16に示したXPath用スタックの後半(スタック要素para)との比較を行う。
【0065】
次に、SAXイベントendElement: paraが入力され、XMLイベント列用スタックの対応するスタック要素がそれぞれポップされた後(図19(A))、SAXイベントstartElement: para,@num=3が入力され、XMLイベント列用スタックがプッシュされてXPath用スタックと比較される(図19(B))。このスタック要素はXPath用スタックの後半(スタック要素para)に一致するので、図15のXML文書に対してXPath“chap/para[@num=“2”]/following−sibling::para”が成立したと評価される。
【0066】
図20は、本実施の形態によるXML文書のストリーミング処理を説明するフローチャートである。
図6に示すように、XPath評価部40は、初期動作として、スタック生成部41により、予め与えられたXPathのロケーションパスからXPath用スタックを生成しておく(Step2001)。処理対象であるXML文書が入力され、XMLパーサ10からXMLイベントが送られると(Step2002)、XPath評価部40の評価実行部43により、上記のようにして、当該XMLイベント用スタックが生成され、XPath用スタックとの比較が順次判断される(Step2003)。この比較結果が当該XPath用スタックにて表現されたXPathの部分的な評価を意味している。
そして、このXMLイベント列用スタックとXPath用スタックとが全て一致するまでXMLイベントの入力及びスタックの比較を繰り返し、完全に一致したならば、このXML文書に対してロケーションパスが成立したと評価され、評価イベントがアプリケーション実行部30へ送られる(Step2004、2005)。
アプリケーション実行部30は、XMLパーサ10から出力されたXMLイベントと、XPath評価部40の評価実行部43から出力された評価イベントとを取得し、当該評価イベントに応じて当該XMLイベントを順次処理していく。
処理対象のXML文書についてXMLパーサ10から送られる全てのXMLイベントに対して、Step2002〜2005の処理を実行した後、本実施の形態によるXML文書のストリーミング処理を終了する(Step2006)。
【0067】
〔実施の形態3〕
実施の形態3では、ストリーミング形式でXMLイベント列を入力しながら当該XML文書に対する木(文書木:ドキュメントツリー)を順次作成していき、この文書木の作成に伴って逐次的にXPathの評価を行う。
上述したように、実施の形態1では、評価対象であるXPathからオートマトンを生成し、ストリーミング形式で入力されるXMLイベント列によって当該オートマトンの状態遷移を順次行うことによってXPathの評価を行った。また実施の形態2では、XPathのステップを第1のスタックで表現し、ストリーミング形式で入力されるXML文書の入れ子構造を第2のスタックで表現し、これらのスタックの内容を比較することによってXPathの評価を行った。これらの手法は、いずれもXMLイベント列のうち評価の済んだ部分については情報を喪失してしまうため、リバース基準点に関しては、非常に限定された条件下でのみ評価が可能であった。
これに対し、本実施の形態では、XMLイベント列の入力に伴って文書木を生成していくので、所定のXMLイベントを入力した際に、それ以前のXMLイベント列に関する情報が全て木構造として保持される。したがって、リバース基準点のステップが含まれるXPathに対しても何ら問題なく評価を行うことができる。
【0068】
本実施の形態は、実施の形態1と同様に、例えば図1に示した情報処理装置にて実現される。
図21は、本実施の形態におけるXPath評価手段(解析システム)の実装例を示す図である。
図21に示すように、本実施の形態による情報処理装置は、処理対象であるXML文書の構文解析(パース)を行うXMLパーサ10と、構文解析されたXML文書に対してXPathの評価を行うXPath評価部50と、XPathの評価を経たXML文書を用いて所定の情報処理を実行するアプリケーション実行部30とを備える。
図21に示すXMLパーサ10、XPath評価部50及びアプリケーション実行部30は、例えば、図1に示したメインメモリ103に展開されたプログラムにてCPU101を制御することにより実現される仮想的なソフトウェアブロックである。なお、XMLパーサ10及びアプリケーション実行部30は、実施の形態1における対応する構成要素と同様であるため、同一の符号を付して説明を省略する。
【0069】
XPath評価部50は、XMLパーサ10からXMLイベントを受け取り、予め与えられたXPathの評価を行う。
図22は、XPath評価部50の機能構成を説明する図である。
図22に示すように、本実施の形態のXPath評価部50は、XPath格納部51と、XMLイベント転送部52と、文書木生成部53と、評価実行部54とを備える。
【0070】
XPath格納部51は、例えば図1に示したコンピュータ装置のメインメモリ103で実現され、予め与えられたXPathを保持する。XMLイベント転送部52は、XMLパーサ10から出力されたXMLイベントを入力し、XML文書の木構造におけるノードごとに文書木生成部53へ順次転送する。また、当該XMLイベントをアプリケーション実行部30へも順次転送する。
【0071】
文書木生成部53は、XMLイベント転送部52から転送されたXMLイベントを受け取って、そのXMLイベントまでの文書木を生成する。この文書木は、取得したXMLイベントまでの構造を反映しているので、処理対象であるXML文書全体の構造を表す文書木に対する部分木となる。また、XMLイベント列を最後まで取得した際に生成される文書木は、当該XML文書全体の文書木と同一となる。
文書木の生成は、XMLイベントとして当該XML文書の要素に対する開始タグトークンが入力されたときに新たにノードを追加することにより行われる。そして、開始タグトークンの入力によりノードを追加した場合、それ以降の挿入位置を当該ノードとする。また、当該要素に対する終了タグトークンが入力された場合、当該ノードの親ノードをそれ以降の挿入位置とする。したがって、この文書木は、文書木生成部53がXMLイベントを入力する度に更新されることとなる。
文書木生成部53により生成(更新)された文書木は、例えば図1のメインメモリ103の作業領域に保持され、後述する評価実行部54の処理において使用される。
【0072】
評価実行部54は、文書木生成部53により上記の文書木が更新されると、当該文書木を用いて、XPath格納部51に保持されているXPathの評価を行う。本実施の形態の評価実行部54は、XPathを評価して成立したステップに関して、当該ステップにおいて選択された文書木のノードの情報、すなわちXPathにおける部分的な評価結果の情報を保存する。この情報は、各ステップのステップIDとノードIDとの組(タプル)の集合{<sid1,nid1>,<sid1,nid2>,・・・}として表される。これを保存集合と呼ぶ。生成された保存集合は、例えば図1のメインメモリ103の作業領域に保持される。
保存集合において各ステップは、1番から順に番号付けされているとする。ここで、0番目のステップは特別なステップとし、このステップに対応させてルートノードを常に保存しておく。評価実行部54の評価により選択された各ノードは、当該ノードをコンテクストノードとして、それ以降の各ステップによって選択されるノード集合が空とならない限り保存される。
【0073】
図23乃至図25は、評価実行部54による文書木及び保存集合を用いたXPathの評価手順を示すフローチャートであり、図23、24はXMLイベントとして開始タグトークンが入力された場合の動作、図25はXMLイベントとして終了タグトークンが入力された場合の動作を示す。なお、説明の簡単のため、図示の動作では述語(predicate)を考慮していない。述語への対応については後述する。
図23に示すように、評価実行部54は、XMLイベントとして開始タグトークンが入力されると(Step2301)、この要素に対応するノードNをそれまでに生成されている文書木に挿入する(Step2302)。初期的にはルートノードに対してノードNが挿入される。そして、保存集合の各要素<S,nid>に対し、ステップSの次の番号がつけられたステップS’を参照し、以下の動作を行う(Step2303)。
【0074】
評価実行部54は、まずステップS’がロケーションパス(XPath)の最後かどうかを調べ(Step2304)、最後ならば、さらにステップS’の評価が成立するかどうかを調べる(Step2305)。評価が成立したならば、最後に挿入されたノードNがXPathにてアドレッシングされたノードであるので、このノードNを評価イベントとして出力する(Step2306)。
ステップS’がロケーションパスの最後でない場合、次に評価実行部54は、ステップS’の評価が成立するかどうかを調べる(Step2307)。評価が成立したならば、さらにステップS’の次のステップS”における基準点に応じて、次の処理を行う。
なお、上記のStep2305、2307の判断で、ステップS’の評価が成立しない場合、当該XMLイベントに対する処理を終了して、次のXMLイベントの入力を待つ。
【0075】
図24に示すように、ステップS”の基準点がself基準点である場合、ステップS”を新たにステップS’として、評価実行部54の処理がStep2304の判断へ戻る(Step2308、2309)。
【0076】
ステップS”の基準点がchild、descendant等のフォワード基準点である場合、まず、ノードNをコンテクストノードとして、ステップS”の基準点が指定する関係を満たす入力が、この後にあり得るかどうかを判定する(Step2308、2310)。そのような入力の可能性があるならば、タプル(ステップIDとノードIDとの組)<S’,N>を保存集合に追加する(Step2311)。そして、既に構築された文書木におけるノードNに対してドキュメント順で後に位置するノード集合(selfを含む基準点(descendant−or−self等)の場合はノードN自身を含む)の各要素を新しいノードNとし、ステップS”を新たにステップS’として、評価実行部54の処理がStep2304の判断へ戻る(Step2312)。
ステップS”の基準点が指定する関係を満たす入力の可能性がないならば、タプル<S’,N>を保存集合に追加することなく、当該ノードNに対してドキュメント順で後に位置するノード集合(selfを含む基準点(descendant−or−self等)の場合はノードN自身を含む)の各要素を新しいノードNとし、ステップS”を新たにステップS’として、評価実行部54の処理がStep2304の判断へ戻る(Step2310、2312)。
【0077】
ステップS”の基準点がparent、ancestor等のリバース基準点である場合、既に構築された文書木におけるノードNに対してドキュメント順で後に位置するノード集合(selfを含む基準点(ancestor−or−self等)の場合はノードN自身を含む)の各要素を新しいノードNとし、ステップS”を新たにステップS’として、評価実行部54の処理がStep2304の判断へ戻る(Step2308、2312)。
なお、以上の説明では、評価実行部54はXPathが成立した場合に評価イベントを出力する(ステップ2306参照)こととしたが、XMLイベントを1つ処理する度に成立または不成立を示す評価イベントを出力するようにしても良いことは、実施の形態1、2の場合と同様である。
【0078】
一方、図25に示すように、評価実行部54は、XMLイベントとして終了タグトークンが入力されると(Step2501)、そのトークンに対応したノードを含むタプル<S,N>を保存集合の中から検出する(Step2502)。
次に、検出されたタプルに対して、ノードNをコンテクストノードとして、ステップSの次の番号が付されたステップS’の基準点が指定する関係を満たす入力が、この後にあり得るかどうかを判定する(Step2503)。そして、そのような入力の可能性のないタプルを保存集合から除去する(Step2504)。
この後、処理対象であるトークンの子ノードを含むタプル<S',N'>を保存集合の中から検出する(Step2505)。次に、検出されたタプルに対して、ノードN'をコンテクストノードとして、ステップS'の次の番号が付されたステップS”の基準点が指定する関係を満たす入力が、この後にあり得るかどうかを判定する(Step2506)。そして、そのような入力の可能性のないタプルを同様に保存集合から除去する(Step2507)。
【0079】
次に、上記の動作説明で省いた述語への対応について説明する。上述した動作におけるノードの評価において、述語を評価するために必要な条件がそろっている場合は、述語の評価を行う。述語の評価を行っていない場合は、述語が未評価であることを意味する付加情報をノードや保存集合に付しておき、述語の評価が仮に成功したとみなして、上記の動作を継続する。ただし、述語が未評価のノードに依存するノードの出力は保留する。述語が未評価の保存集合内の要素に対しする評価は、その後の入力によって述語の評価条件がそろった時点で行う。述語にロケーションパスが使われている場合は、評価の目的を述語を評価することに変更して図23乃至図25の処理を適用する。
最終的に述語の評価が成功した場合は、その評価の成功に依存していたノードを評価イベントとして出力する。一方、評価が失敗した場合は、保存集合から当該ノードを取り除き、さらに当該ノードの評価の成功を仮定して行われた全ての操作を取り消す。
【0080】
次に、具体例を挙げて本実施の形態によるXPathの評価を説明する。
図26は、処理対象であるXML文書、そのSAXイベント列および文書木を示す図である。
XPath評価部50に、次のXPath
/a/b/preceding−sibling::c/following−sibling::d
が与えられたものとする。すなわち、ノードaの子供であるノードbに先行する兄弟ノードcに後続する兄弟ノードdが検出されたときに、このXPathの成立という評価がなされる。
【0081】
図27乃至図36には、図26のXML文書に対するSAXイベント列と、これに対応する文書木、及び当該文書木を用いたXPathの評価によって得られる保存集合の遷移の様子が順番に示されている。
最初に、ドキュメント開始を示すSAXイベントstartDocumentが入力され、対応する文書木としてルートノードdocが生成される(図27)。また、タプル(ステップIDとノードIDとの組)<0,doc>が保存集合に入れられる。続いて、要素(ノード)の開始を示すSAXイベントstartElement: "a"が入力され、ルートノードdocに子ノード“a”が付加される(図28)。また、XPathのステップ1までが成立するので、タプル<1,“a”>が保存集合に入れられる。
【0082】
次に、SAXイベントstartElement: "c"が入力され、ノード“a”に子ノード“c”が付加され(図29)、続いて、要素の終了を示すSAXイベントendElement: "c"が入力される(図30)。次に、SAXイベントstartElement: "b"が入力されると、ノード“a”に子ノード“b”が付加される(図31)。このとき、ノード“b”の生成によりXPathのステップ2が成立すると共に、リバース基準点(preceding−sibling)のステップ3も直ちに成立する。したがって、ステップ2に関するタプルは保存集合に保持されず、ステップ3に関するタプル<3,“c”>が保存集合に入れられる。
【0083】
この後、SAXイベントendElement: "b"が入力され(図32)、引き続き、SAXイベントstartElement: "d"が入力されると、ノード“a”に子ノード“d”が付加される(図33)。このとき、ノード“d”の生成によりXPathのステップ4(最後のステップ)まで成立するので、当該XPathが成立したと評価される。したがって、XPath評価部50の評価実行部54からアプリケーション実行部30へ、評価イベントとしてノード“d”が出力される(図23、Step2306参照)。
【0084】
この後、SAXイベントendElement: "d"が入力され(図34)、続いてSAXイベントendElement: "a"が入力されて、ノード“a”に新たな子ノードが付加される可能性がなくなったので、保存集合からステップ1のタプル<1,“a”>が除去される(図35、図25のStep2503、2504参照)。そしてさらに、ドキュメント終了を示すSAXイベントendDocumentが入力されて、処理対象であるXML文書のイベント列の入力が終了する(図36)。
【0085】
図37は、本実施の形態によるXML文書のストリーミング処理を説明するフローチャートである。
図37に示すように、XPath評価部50は、処理対象であるXML文書が入力され、XMLパーサ10からXMLイベントが送られると(Step3701)、まず取得したXMLイベントに基づいて文書木が生成される(Step3702)。この文書木は、XMLイベントが順次入力されるに伴って更新され、最終的に処理対象のXML文書の文書構造に対応する文書木となる。そして、XPath評価部50の評価実行部54により、この文書木を用いてXPathの評価が行われ、部分的に成立した箇所(ステップ)に関する情報が必要に応じて保存集合に蓄積される(Step3703)。そして、XPath全体が成立するまでXMLイベントの入力、文書木の生成およびXPathの評価が繰り返され、XPath全体が成立すると評価されたならば、評価イベントがアプリケーション実行部30へ送られる(Step3704、3705)。
アプリケーション実行部30は、XMLパーサ10から出力されたXMLイベントと、XPath評価部50の評価実行部54から出力された評価イベントとを取得し、当該評価イベントに応じて当該XMLイベントを順次処理していく。処理対象のXML文書についてXMLパーサ10から送られる全てのXMLイベントに対して、Step3701〜3705の処理を実行した後、本実施の形態によるXML文書のストリーミング処理を終了する(Step3706)。
【0086】
以上、3つの実施の形態によって、本発明を説明した。これらの実施の形態は、ストリーミング形式で入力されるXMLイベント列に対してXPathの部分的な評価を順次行っていき、かかる部分的な評価に関する情報を蓄積していって、最終的にXPath全体の評価結果を得る。
実施の形態1、2は、XMLイベント列のストリーミング形式による入力に応じて部分的に評価していくことが可能なデータ構造にXPathを変換しておき、個々のXMLイベントの入力に応じて順次評価を行った。一方、実施の形態3は、XMLイベント列をストリーミング形式で入力しながらXML文書の文書木を作成していき、この文書木を用いて逐次的にXPathの評価を行った。
【0087】
実施の形態1、2は、評価の済んだXMLイベントに関する情報が失われるので、リバース基準点のステップに関しては、極めて限定された条件下以外では評価できない。これに対し、実施の形態3は、評価を行ったXMLイベントの情報は、文書木として残っているので、リバース基準点のステップに関する評価に対する制限はない。
【0088】
また、実施の形態1、2、3のいずれも、全てのXMLイベント列を入力していない段階でXPathが成立すると判断された場合には、その段階でアプリケーション実行部30による処理を開始することが可能である(ストリーミング処理)。しかしながら、実施の形態3は、XPathがリバース基準点のステップを含む場合に、XMLイベントの通知と評価イベントのそれに時間差が生じることがあり、また評価イベントの通知が必ずしもドキュメント順(ドキュメントのXML表現において各ノードのXML表現の最初の文字が現われる順序)で行われるとは限らないため、アプリケーション実行部30による処理が評価イベントによってXMLイベントの処理を切り替えるようなものである場合は注意が必要である。実施の形態1、2にはかかる制限はない。
【0089】
したがって、XPathがリバース基準点のステップを含まない場合には、実施の形態1、2を用いる。そして、XPathがリバース基準点のステップを含む場合であっても、アプリケーション実行部30による処理が評価イベントによってXMLイベントの処理を切り替えるようなものでない場合や、そのようなものであっても処理の遅延が許されるような場合には、実施の形態3を用いるといった使い分けが可能である。
実施の形態2は、入力したXMLイベント列をスタックに列の情報のまま格納し、XPathを表現するスタックの記憶内容と比較するだけなので、メモリの使用量が非常に少なく、かつ処理に要する時間も短い。また、比較的容易に実装可能である。したがって、いずれの実施の形態も実施可能である場合、実施の形態2を用いることが好ましい。
なお、本発明の技術的範囲は、上記3つの実施の形態に限るものではなく、技術的思想において同一である種々の変形を含むことは言うまでもない。
【0090】
【発明の効果】
以上説明したように、本発明によれば、XML文書をストリーミング処理しながらXPathの評価を行う解析システム及びその解析方法を実現することができる。
【図面の簡単な説明】
【図1】 実施の形態1を実現するのに好適な情報処理装置のハードウェア構成の例を模式的に示した図である。
【図2】 実施の形態1におけるXPath評価手段(解析システム)の実装例を示す図である。
【図3】 実施の形態1におけるXPath評価部の機能構成を説明する図である。
【図4】 実施の形態1におけるオートマトン生成部にて生成されるオートマトンを模式的に示す図である。
【図5】 実施の形態1による処理に用いられるロケーションパス、オートマトン及び処理対象のXML文書の例を示す図である。
【図6】 実施の形態1によるXML文書のストリーミング処理を説明するフローチャートである。
【図7】 実施の形態2におけるXPath評価手段(解析システム)の実装例を示す図である。
【図8】 実施の形態2におけるXPath評価部の機能構成を説明する図である。
【図9】 基準点の種類と本実施の形態にて作成されるスタックとの関係を例示する図である。
【図10】 図9に示した関係に基づいて、XPathから生成されるスタックを示す図である。
【図11】 処理対象であるXML文書の例を示す図である。
【図12】 図11のXML文書に対するスタックを用いた評価処理の様子を示す図である。
【図13】 図11のXML文書に対するスタックを用いた評価処理の様子を示す図である。
【図14】 図11のXML文書に対するスタックを用いた評価処理の様子を示す図である。
【図15】 処理対象であるXML文書の他の例を示す図である。
【図16】 評価対象であるXPathとこのXPathから生成されるスタックとを示す図である。
【図17】 図15のXML文書に対するスタックを用いた評価処理の様子を示す図である。
【図18】 図15のXML文書に対するスタックを用いた評価処理の様子を示す図である。
【図19】 図15のXML文書に対するスタックを用いた評価処理の様子を示す図である。
【図20】 実施の形態2によるXML文書のストリーミング処理を説明するフローチャートである。
【図21】 実施の形態3におけるXPath評価手段(解析システム)の実装例を示す図である。
【図22】 実施の形態3におけるXPath評価部の機能構成を説明する図である。
【図23】 実施の形態3の評価実行部による文書木及び保存集合を用いたXPathの評価手順を示すフローチャートであり、XMLイベントとして開始タグトークンが入力された場合の動作を示す図である。
【図24】 実施の形態3の評価実行部による文書木及び保存集合を用いたXPathの評価手順を示すフローチャートであり、XMLイベントとして開始タグトークンが入力された場合の動作を示す図である。
【図25】 実施の形態3の評価実行部による文書木及び保存集合を用いたXPathの評価手順を示すフローチャートであり、XMLイベントとして終了タグトークンが入力された場合の動作を示す図である。
【図26】 処理対象であるXML文書、そのSAXイベント列および本実施の形態で生成される文書木を示す図である。
【図27】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントstartDocumentが入力されたときの様子を示す図である。
【図28】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントstartElement: "a"が入力されたときの様子を示す図である。
【図29】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントstartElement: "c"が入力されたときの様子を示す図である。
【図30】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントendElement: "c"が入力されたときの様子を示す図である。
【図31】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントstartElement: "b"が入力されたときの様子を示す図である。
【図32】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントendElement: "b"が入力されたときの様子を示す図である。
【図33】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントstartElement: "d"が入力されたときの様子を示す図である。
【図34】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントendElement: "d"が入力されたときの様子を示す図である。
【図35】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントendElement: "a"が入力されたときの様子を示す図である。
【図36】 XML文書に対するSAXイベント列、文書木、保存集合の遷移の様子を示す図であり、SAXイベントendDocumentが入力されたときの様子を示す図である。
【図37】 実施の形態3によるXML文書のストリーミング処理を説明するフローチャートである。
【符号の説明】
10…XMLパーサ、20、40、50…XPath評価部、21…オートマトン生成部、22、42、52…XMLイベント転送部、23、43、54…評価実行部、30…アプリケーション実行部、41…スタック生成部、51…XPath格納部、53…文書木生成部、101…CPU、103…メインメモリ
Claims (13)
- コンピュータによりXML文書に対するXPathの評価を行うXPath評価方法であって、
前記コンピュータにおけるXPath評価部のXMLイベント転送部が、処理対象の前記XML文書を構成するXMLイベント列を順次入力する第1のステップと、
前記XPath評価部のオートマトン生成部が、評価対象であるXPathのステップに対応する状態を有し前記XMLイベント列が当該ステップを満たす場合に状態遷移するオートマトンを生成し、記憶手段に格納する第2のステップと、
前記XPath評価部の評価実行部が、前記XMLイベント転送部に入力された前記XMLイベント列が前記XPathのステップを満たすか否かを判断し、判断結果に応じて前記記憶手段に格納されている前記オートマトンの状態を遷移させ、当該オートマトンの状態に応じて、最後に入力された当該XMLイベント列までに対する当該XPathの評価を行う第3のステップと、
前記評価実行部が、前記XMLイベント転送部による前記XMLイベント列の入力に伴って、入力された当該XMLイベント列までの評価を繰り返し、前記オートマトンの状態の遷移により当該オートマトンの最後の状態に達したならば、前記処理対象のXML文書は前記XPathにて記述された構造を持つと評価する第4のステップと
を含むことを特徴とするXPath評価方法。 - コンピュータによりXML文書に対するXPathの評価を行うXPath評価方法であって、
前記コンピュータにおけるXPath評価部のXMLイベント転送部が、処理対象の前記XML文書を構成するXMLイベント列を順次入力する第1のステップと、
前記XPath評価部のスタック生成部が、評価対象であるXPathのステップをスタック要素の列で表現した第1のスタックを生成し、記憶手段に格納する第2のステップと、
前記XPath評価部の評価実行部が、前記XMLイベント転送部に入力された前記XMLイベント列に基づいて前記処理対象のXML文書の入れ子構造を解析するための第2のスタックを生成し、当該第2のスタックと前記記憶手段に格納されている前記第1のスタックとを比較し、比較結果に応じて、最後に入力された当該XMLイベント列までに対する前記XPathの評価を行う第3のステップと、
前記評価実行部が、前記XMLイベント転送部による前記XMLイベント列の入力に伴って、入力された当該XMLイベント列までの評価を繰り返し、前記第1のスタックと前記第2のスタックとが一致したならば、前記処理対象のXML文書は前記XPathにて記述された構造を持つと評価する第4のステップと
を含むことを特徴とするXPath評価方法。 - コンピュータによりXML文書に対するXPathの評価を行うXPath評価方法であって、
前記コンピュータにおけるXPath評価部のXMLイベント転送部が、処理対象の前記XML文書を構成するXMLイベント列を順次入力する第1のステップと、
前記XPath評価部の文書木生成部が、前記XMLイベント転送部による前記XMLイベント列の入力に応じて、最後に入力された当該XMLイベント列までの文書構造を示す文書木を生成する第2のステップと、
前記XPath評価部の評価実行部が、前記XMLイベント転送部による前記XMLイベント列の入力に伴って、前記文書木生成部により生成された前記文書木に基づいて、当該最後に入力されたXMLイベント列までに対する前記XPathの評価を行う第3のステップと
を含むことを特徴とするXPath評価方法。 - 評価対象であるXPathのステップに対応する状態を有しXMLイベント列が当該ステップを満たす場合に状態遷移するオートマトンを生成するオートマトン生成部と、
前記オートマトンを用いてXML文書が前記XPathにて記述された構造を持つか否かを評価する評価実行部と、
処理対象のXML文書を構成するXMLイベント列を入力し、前記評価実行部に順次転送するXMLイベント転送部とを備え、
前記評価実行部は、
前記XMLイベント転送部からの前記XMLイベント列の入力に伴って、入力された当該XMLイベント列が前記XPathのステップを満たすか否かを判断し、判断結果に応じて前記オートマトンの状態を遷移させ、当該オートマトンの状態に応じて、最後に入力された当該XMLイベント列までに対するXPathの評価を行い、当該オートマトンの状態の遷移により当該オートマトンの最後の状態に達したならば、当該処理対象のXML文書は前記XPathにて記述された構造を持つと評価することを特徴とするXPath評価装置。 - 評価対象であるXPathのステップをスタック要素の列で表現した第1のスタックを生成するスタック生成部と、
前記第1のスタックを用いてXML文書が前記XPathにて記述された構造を持つか否かを評価する評価実行部と、
処理対象のXML文書を構成するXMLイベント列を入力し、前記評価実行部に順次転送するXMLイベント転送部とを備え、
前記評価実行部は、
前記XMLイベント転送部からの前記XMLイベント列の入力に伴って、入力された当該XMLイベント列に基づいて前記処理対象のXML文書の入れ子構造を解析するための第2のスタックを生成し、当該第2のスタックと前記第1のスタックとを比較し、比較結果に応じて、最後に入力された当該XMLイベント列までに対する前記XPathの評価を行い、当該第1のスタックと当該第2のスタックとが一致したならば、当該処理対象のXML文書は前記XPathにて記述された構造を持つと評価することを特徴とするXPath評価装置。 - 処理対象のXML文書の文書構造を示す文書木を生成する文書木生成部と、
前記文書木を用いてXML文書がXPathにて記述された構造を持つか否かを評価する評価実行部とを備え、
前記文書木生成部は、前記処理対象のXML文書を構成するXMLイベント列を順次入力し、入力した当該XMLイベント列までの文書構造を示す文書木を順次生成し、
前記評価実行部は、前記文書木生成部により生成された前記文書木に基づいて、最後に入力された前記XMLイベント列までに対する前記XPathの評価を行うことを特徴とするXPath評価装置。 - 処理対象のXML文書を解析してXMLイベント列を生成するXMLパーサと、
前記XMLパーサにて生成された前記XMLイベント列を順次入力し、入力した個々のXMLイベントに対してストリーミング処理にてXPathの評価を行うXPath評価部と、
前記XMLパーサで生成された前記XMLイベントを入力し、前記XPath評価部によるXPathの評価結果に応じて、当該XMLイベントにて構成される前記XML文書に対する処理を実行するアプリケーション実行部とを備え、
前記XPath評価部は、
評価対象であるXPathのステップに対応する状態を有し前記XMLイベント列が当該ステップを満たす場合に状態遷移するオートマトンを生成するオートマトン生成部と、
前記オートマトンを用いてXML文書が前記XPathにて記述された構造を持つか否かを評価する評価実行部と、
前記XMLパーサから前記XMLイベント列を順次入力し、前記評価実行部に転送するXMLイベント転送部とを備え、
前記評価実行部は、
前記XMLイベント転送部からの前記XMLイベント列の入力に伴って、入力された当該XMLイベント列が前記XPathのステップを満たすか否かを判断し、判断結果に応じて前記オートマトンの状態を遷移させ、当該オートマトンの状態に応じて、最後に入力された当該XMLイベント列までに対するXPathの評価を行い、当該オートマトンの状態の遷移により当該オートマトンの最後の状態に達したならば、当該処理対象のXML文書は前記XPathにて記述された構造を持つと評価することを特徴とする情報処理装置。 - 処理対象のXML文書を解析してXMLイベント列を生成するXMLパーサと、
前記XMLパーサにて生成された前記XMLイベント列を順次入力し、入力した個々のXMLイベントに対してストリーミング処理にてXPathの評価を行うXPath評価部と、
前記XMLパーサで生成された前記XMLイベントを入力し、前記XPath評価部によるXPathの評価結果に応じて、当該XMLイベントにて構成される前記XML文書に対する処理を実行するアプリケーション実行部とを備え、
前記XPath評価部は、
評価対象であるXPathのステップをスタック要素の列で表現した第1のスタックを生成するスタック生成部と、
前記第1のスタックを用いてXML文書が前記XPathにて記述された構造を持つか否かを評価する評価実行部と、
前記XMLパーサから前記XMLイベント列を順次入力し、前記評価実行部に転送するXMLイベント転送部とを備え、
前記評価実行部は、
前記XMLイベント転送部からの前記XMLイベント列の入力に伴って、入力された当該XMLイベント列に基づいて前記処理対象のXML文書の入れ子構造を解析するための第2のスタックを生成し、当該第2のスタックと前記第1のスタックとを比較し、比較結果に応じて、最後に入力された当該XMLイベント列までに対する前記XPathの評価を行い、当該第1のスタックと当該第2のスタックとが一致したならば、当該処理対象のXML文書は前記XPathにて記述された構造を持つと評価することを特徴とする情報処理装置。 - 処理対象のXML文書を解析してXMLイベント列を生成するXMLパーサと、
前記XMLパーサにて生成された前記XMLイベント列を順次入力し、入力した個々のXMLイベントに対してストリーミング処理にてXPathの評価を行うXPath評価部と、
前記XMLパーサで生成された前記XMLイベントを入力し、前記XPath評価部によるXPathの評価結果に応じて、当該XMLイベントにて構成される前記XML文書に対する処理を実行するアプリケーション実行部とを備え、
前記XPath評価部は、
処理対象のXML文書の文書構造を示す文書木を生成する文書木生成部と、
前記文書木を用いてXML文書が前記XPathにて記述された構造を持つか否かを評価する評価実行部とを備え、
前記文書木生成部は、前記XMLパーサから前記XMLイベント列を順次入力し、入力した当該XMLイベント列までの文書構造を示す文書木を順次生成し、
前記評価実行部は、前記文書木生成部により生成された前記文書木に基づいて、最後に入力された前記XMLイベント列までに対する前記XPathの評価を行うことを特徴とする情報処理装置。 - コンピュータを制御して、XML文書に対するXPathの評価を行うプログラムであって、
処理対象の前記XML文書を構成するXMLイベント列を順次入力する第1の処理と、
評価対象であるXPathのステップに対応する状態を有し前記XMLイベント列が当該ステップを満たす場合に状態遷移するオートマトンを生成し、記憶手段に格納する第2の処理と、
入力された前記XMLイベント列が前記XPathのステップを満たすか否かを判断し、判断結果に応じて前記記憶手段に格納されている前記オートマトンの状態を遷移させ、当該オートマトンの状態に応じて、最後に入力された当該XMLイベント列までに対する当該XPathの評価を行う第3の処理と、
入力された当該XMLイベント列までの評価を繰り返し、前記オートマトンの状態の遷移により当該オートマトンの最後の状態に達したならば、前記処理対象のXML文書は前記XPathにて記述された構造を持つと評価する第4の処理と
を前記コンピュータに実行させることを特徴とするプログラム。 - コンピュータを制御して、XML文書に対するXPathの評価を行うプログラムであって、
処理対象の前記XML文書を構成するXMLイベント列を順次入力する第1の処理と、
評価対象であるXPathのステップをスタック要素の列で表現した第1のスタックを生成し、記憶手段に格納する第2の処理と、
入力された前記XMLイベント列に基づいて前記処理対象のXML文書の入れ子構造を解析するための第2のスタックを生成し、当該第2のスタックと前記記憶手段に格納されている前記第1のスタックとを比較し、比較結果に応じて、最後に入力された当該XMLイベント列までに対する前記XPathの評価を行う第3の処理と、
前記XMLイベント列の入力に伴って、入力された当該XMLイベント列までの評価を繰り返し、前記第1のスタックと前記第2のスタックとが一致したならば、前記処理対象のXML文書は前記XPathにて記述された構造を持つと評価する第4の処理と
を前記コンピュータに実行させることを特徴とするプログラム。 - コンピュータを制御して、XML文書に対するXPathの評価を行うプログラムであって、
処理対象の前記XML文書を構成するXMLイベント列を順次入力する第1のステップと、
前記XMLイベント列の入力に応じて、最後に入力された当該XMLイベント列までの文書構造を示す文書木を生成する第2のステップと、
前記XMLイベント列の入力に伴って、生成された前記文書木に基づいて、当該最後に入力されたXMLイベント列までに対する前記XPathの評価を行う第3のステップとを前記コンピュータに実行させることを特徴とするプログラム。 - 請求項10から請求項12のいずれかに記載のプログラムを、コンピュータが読み取り可能に記録した記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003122292A JP3832830B2 (ja) | 2003-04-25 | 2003-04-25 | XPath評価方法、これを用いたXPath評価装置及び情報処理装置 |
US10/815,423 US7523119B2 (en) | 2003-04-25 | 2004-04-01 | XPath evaluation and information processing |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003122292A JP3832830B2 (ja) | 2003-04-25 | 2003-04-25 | XPath評価方法、これを用いたXPath評価装置及び情報処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004326578A JP2004326578A (ja) | 2004-11-18 |
JP3832830B2 true JP3832830B2 (ja) | 2006-10-11 |
Family
ID=33500571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003122292A Expired - Fee Related JP3832830B2 (ja) | 2003-04-25 | 2003-04-25 | XPath評価方法、これを用いたXPath評価装置及び情報処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7523119B2 (ja) |
JP (1) | JP3832830B2 (ja) |
Families Citing this family (71)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US7000230B1 (en) | 2000-06-21 | 2006-02-14 | Microsoft Corporation | Network-based software extensions |
US7191394B1 (en) | 2000-06-21 | 2007-03-13 | Microsoft Corporation | Authoring arbitrary XML documents using DHTML and XSLT |
US7624356B1 (en) | 2000-06-21 | 2009-11-24 | Microsoft Corporation | Task-sensitive methods and systems for displaying command sets |
US7155667B1 (en) | 2000-06-21 | 2006-12-26 | Microsoft Corporation | User interface for integrated spreadsheets and word processing tables |
US6948135B1 (en) | 2000-06-21 | 2005-09-20 | Microsoft Corporation | Method and systems of providing information to computer users |
US7058644B2 (en) * | 2002-10-07 | 2006-06-06 | Click Commerce, Inc. | Parallel tree searches for matching multiple, hierarchical data structures |
US7415672B1 (en) | 2003-03-24 | 2008-08-19 | Microsoft Corporation | System and method for designing electronic forms |
US7370066B1 (en) | 2003-03-24 | 2008-05-06 | Microsoft Corporation | System and method for offline editing of data files |
US7275216B2 (en) | 2003-03-24 | 2007-09-25 | Microsoft Corporation | System and method for designing electronic forms and hierarchical schemas |
US7913159B2 (en) | 2003-03-28 | 2011-03-22 | Microsoft Corporation | System and method for real-time validation of structured data files |
US7296017B2 (en) | 2003-03-28 | 2007-11-13 | Microsoft Corporation | Validation of XML data files |
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 |
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 |
US9171100B2 (en) | 2004-09-22 | 2015-10-27 | Primo M. Pettovello | MTree an XPath multi-axis structure threaded index |
US7692636B2 (en) | 2004-09-30 | 2010-04-06 | Microsoft Corporation | Systems and methods for handwriting to a screen |
US7516399B2 (en) * | 2004-09-30 | 2009-04-07 | Microsoft Corporation | Structured-document path-language expression methods and systems |
US8918710B2 (en) * | 2004-10-05 | 2014-12-23 | Oracle International Corporation | Reducing programming complexity in applications interfacing with parsers for data elements represented according to a markup language |
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 |
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 |
US8996991B2 (en) * | 2005-02-11 | 2015-03-31 | Fujitsu Limited | System and method for displaying an acceptance status |
US7500184B2 (en) * | 2005-02-11 | 2009-03-03 | Fujitsu Limited | Determining an acceptance status during document parsing |
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 |
US20060271850A1 (en) * | 2005-05-06 | 2006-11-30 | Didier Gombert | Method and apparatus for transforming a printer into an XML printer |
US8200975B2 (en) | 2005-06-29 | 2012-06-12 | Microsoft Corporation | Digital signatures for network forms |
US7548926B2 (en) * | 2005-10-05 | 2009-06-16 | Microsoft Corporation | High performance navigator for parsing inputs of a message |
US7899817B2 (en) | 2005-10-05 | 2011-03-01 | Microsoft Corporation | Safe mode for inverse query evaluations |
US7664742B2 (en) | 2005-11-14 | 2010-02-16 | Pettovello Primo M | Index data structure for a peer-to-peer network |
US8001459B2 (en) | 2005-12-05 | 2011-08-16 | Microsoft Corporation | Enabling electronic documents for limited-capability computing devices |
US7933928B2 (en) | 2005-12-22 | 2011-04-26 | Oracle International Corporation | Method and mechanism for loading XML documents into memory |
US20070174309A1 (en) * | 2006-01-18 | 2007-07-26 | Pettovello Primo M | Mtreeini: intermediate nodes and indexes |
JP2007200097A (ja) * | 2006-01-27 | 2007-08-09 | Seiko Epson Corp | レイアウト方法 |
US8082493B2 (en) * | 2006-04-10 | 2011-12-20 | Oracle International Corporation | Streaming XML patch |
US8429526B2 (en) * | 2006-04-10 | 2013-04-23 | Oracle International Corporation | Efficient evaluation for diff of XML documents |
JP4539613B2 (ja) * | 2006-06-28 | 2010-09-08 | 富士ゼロックス株式会社 | 画像形成装置、画像生成方法およびプログラム |
US8010889B2 (en) * | 2006-10-20 | 2011-08-30 | Oracle International Corporation | Techniques for efficient loading of binary XML data |
KR100845234B1 (ko) * | 2006-11-14 | 2008-07-09 | 한국전자통신연구원 | 통신 소프트웨어 구조에서의 도메인 프로파일 파싱 장치 및그 방법 |
FR2909198B1 (fr) * | 2006-11-24 | 2010-11-26 | Canon Kk | Procede et dispositif de filtrage d'elements d'un document structure a partir d'une expression. |
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 |
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 |
US20080235260A1 (en) * | 2007-03-23 | 2008-09-25 | International Business Machines Corporation | Scalable algorithms for mapping-based xml transformation |
FR2914452B1 (fr) * | 2007-03-27 | 2010-08-13 | Canon Kk | Procede et un dispositif d'evaluation d'au moins un predicat d'une expression sur des elements d'un document structure. |
US20080244380A1 (en) * | 2007-03-27 | 2008-10-02 | Canon Kabushiki Kaisha | Method and device for evaluating an expression on elements of a structured document |
US8086597B2 (en) * | 2007-06-28 | 2011-12-27 | International Business Machines Corporation | Between matching |
US7895189B2 (en) * | 2007-06-28 | 2011-02-22 | International Business Machines Corporation | Index exploitation |
US8250062B2 (en) * | 2007-11-09 | 2012-08-21 | Oracle International Corporation | Optimized streaming evaluation of XML queries |
US8543898B2 (en) | 2007-11-09 | 2013-09-24 | Oracle International Corporation | Techniques for more efficient generation of XML events from XML data sources |
US9842090B2 (en) * | 2007-12-05 | 2017-12-12 | Oracle International Corporation | Efficient streaming evaluation of XPaths on binary-encoded XML schema-based documents |
US7475338B1 (en) * | 2007-12-20 | 2009-01-06 | International Business Machines Corporation | Method for dual operational mode parsing of a xml document |
JP5228498B2 (ja) * | 2008-01-22 | 2013-07-03 | 富士通株式会社 | 検索方法 |
JP5125662B2 (ja) * | 2008-03-24 | 2013-01-23 | 富士通株式会社 | クエリ変換方法および検索装置 |
US7882138B1 (en) | 2008-03-27 | 2011-02-01 | Sonoa Networks India (PVT) Ltd. | Progressive evaluation of predicate expressions in streaming XPath processor |
US8117188B1 (en) | 2008-03-27 | 2012-02-14 | Sonoa Networks India (PVT) Ltd. | Evaluation of multiple Xpath queries in a streaming XPath processor |
US8397158B1 (en) * | 2008-03-31 | 2013-03-12 | Sonoa Networks India (PVT) Ltd | System and method for partial parsing of XML documents and modification thereof |
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 |
US8429196B2 (en) | 2008-06-06 | 2013-04-23 | Oracle International Corporation | Fast extraction of scalar values from binary encoded XML |
US8024325B2 (en) * | 2008-06-25 | 2011-09-20 | Oracle International Corporation | Estimating the cost of XML operators for binary XML storage |
US8286074B2 (en) * | 2008-09-30 | 2012-10-09 | International Business Machines Corporation | XML streaming parsing with DOM instances |
US8630997B1 (en) * | 2009-03-05 | 2014-01-14 | Cisco Technology, Inc. | Streaming event procesing |
TWI390443B (zh) * | 2009-08-04 | 2013-03-21 | Univ Nat Taiwan Science Tech | 使用在可擴展性標示語言之串流路徑查詢機制系統與方法 |
US8631028B1 (en) | 2009-10-29 | 2014-01-14 | Primo M. Pettovello | XPath query processing improvements |
JP5998942B2 (ja) * | 2013-01-08 | 2016-09-28 | 富士通株式会社 | 更新方法、更新プログラム、および照合処理装置 |
CN108614808B (zh) * | 2016-12-12 | 2020-09-04 | 北大方正集团有限公司 | Xml文档的排版方法及排版装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003084987A (ja) * | 2001-09-11 | 2003-03-20 | Internatl Business Mach Corp <Ibm> | Xml文書の妥当性を検証するためのオートマトンの生成方法、xml文書の妥当性検証方法、xml文書の妥当性を検証するためのオートマトンの生成システム、xml文書の妥当性検証システムおよびプログラム |
US20040010752A1 (en) * | 2002-07-09 | 2004-01-15 | Lucent Technologies Inc. | System and method for filtering XML documents with XPath expressions |
US7171407B2 (en) * | 2002-10-03 | 2007-01-30 | International Business Machines Corporation | Method for streaming XPath processing with forward and backward axes |
-
2003
- 2003-04-25 JP JP2003122292A patent/JP3832830B2/ja not_active Expired - Fee Related
-
2004
- 2004-04-01 US US10/815,423 patent/US7523119B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7523119B2 (en) | 2009-04-21 |
JP2004326578A (ja) | 2004-11-18 |
US20040261019A1 (en) | 2004-12-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3832830B2 (ja) | XPath評価方法、これを用いたXPath評価装置及び情報処理装置 | |
US11693839B2 (en) | Parser for schema-free data exchange format | |
Carroll | Signing RDF graphs | |
JP4656868B2 (ja) | 構造化文書作成装置 | |
US7975220B2 (en) | Apparatus, program product and method for structured document management | |
US7941417B2 (en) | Processing structured electronic document streams using look-ahead automata | |
JP4236055B2 (ja) | 構造化文書処理装置、方法、プログラム | |
US8838642B2 (en) | Generating and navigating binary XML data | |
JP4740060B2 (ja) | 重複データ検出プログラム、重複データ検出方法および重複データ検出装置 | |
US7822788B2 (en) | Method, apparatus, and computer program product for searching structured document | |
US8260790B2 (en) | System and method for using indexes to parse static XML documents | |
JP2005070911A (ja) | 構造化文書のデータを検索する装置および方法 | |
US8065283B2 (en) | Term synonym generation | |
KR101221306B1 (ko) | 데이터 구조를 항해하기 위한 방법 및 시스템 | |
US10754859B2 (en) | Encoding edges in graph databases | |
JP2010250449A (ja) | 情報処理装置、情報処理方法 | |
Bai et al. | Para-g: Path pattern query processing on large graphs | |
JP2010186412A (ja) | 文書管理方法及び管理装置 | |
JP4649339B2 (ja) | XPath処理装置、XPath処理方法、XPath処理プログラム、および、記憶媒体 | |
JP2008243075A (ja) | 構造化文書管理装置及び方法 | |
JP6753190B2 (ja) | 文書検索装置及びプログラム | |
Saeedan et al. | dsJSON: A Distributed SQL JSON Processor | |
JP2008209996A (ja) | 検索索引作成装置・検索索引作成方法及び検索索引作成プログラム | |
JP2005215950A (ja) | 符号化された文書データの検索方法及びそのプログラム | |
JP2005011215A (ja) | 情報処理装置、情報処理方法、及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050901 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051004 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051226 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060131 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060425 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20060428 |
|
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: 20060704 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20060706 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060714 |
|
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: 20100728 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |