(57)【特許請求の範囲】
【請求項１】
データ系列に対するウィンドウ処理を実行するウィンドウ処理装置であって，
データを格納するバッファと，
包含関係を持つ要素を含むデータ系列を取得するデータ取得部と，
前記データ系列から，ウィンドウ処理単位を定めるウィンドウ構成要素の位置および前記ウィンドウ構成要素に包含される演算対象要素の位置を前記ウィンドウ構成要素に関連付けて逐次的に検出し，前記ウィンドウ構成要素を検出する度に，直前に検出したウィンドウ構成要素と関連付けた演算対象要素に対応する演算対象要素値の集合を前記バッファに格納するデータストリーム解析部と，
前記バッファに格納された前記ウィンドウ構成要素に関連付けられた演算処理値の集合に対してウィンドウ処理を行うウィンドウ処理部とを備える
ことを特徴とするウィンドウ処理装置。
【請求項２】
前記データストリーム解析部は，前記検出した演算対象要素に対応する演算対象要素値の集合を保持し，前記ウィンドウ構成要素の開始位置を検出する度に，前記保持している演算対象要素値の集合と該検出したウィンドウ構成要素の開始位置記号とを前記バッファに格納し，
前記ウィンドウ処理部は，前記バッファに格納されたウィンドウ構成要素の開始位置記号にもとづいて前記ウィンドウ処理を行う
ことを特徴とする請求項１に記載のウィンドウ処理装置。
【請求項３】
コンピュータが実行する，データ系列に対するウィンドウ処理方法であって，
包含関係を持つ要素を含むデータ系列を取得する処理ステップと，
前記データ系列から，ウィンドウ処理単位を定めるウィンドウ構成要素の位置および前記ウィンドウ構成要素に包含される演算対象要素の位置を前記ウィンドウ構成要素に関連付けて逐次的に検出する処理ステップと，
前記ウィンドウ構成要素を検出する度に，直前に検出したウィンドウ構成要素と関連付けた演算対象要素に対応する演算対象要素値の集合をバッファに格納する処理ステップと，
前記バッファに格納された前記ウィンドウ構成要素に関連付けられた演算処理値の集合に対してウィンドウ処理を行う処理ステップとを備える
ことを特徴とするウィンドウ処理方法。
【請求項４】
コンピュータに，データ系列に対するウィンドウ処理を実行させるためのウィンドウ処理プログラムであって，
前記コンピュータに
包含関係を持つ要素を含むデータ系列を取得する処理と，
前記データ系列から，ウィンドウ処理単位を定めるウィンドウ構成要素の位置および前記ウィンドウ構成要素に包含される演算対象要素の位置を前記ウィンドウ構成要素に関連付けて逐次的に検出する処理と，
前記ウィンドウ構成要素を検出する度に，直前に検出したウィンドウ構成要素と関連付けた演算対象要素に対応する演算対象要素値の集合をバッファに格納する処理と，
前記バッファに格納された前記ウィンドウ構成要素に関連付けられた演算処理値の集合に対してウィンドウ処理を行う処理とを，実行させる
ことを特徴とするウィンドウ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，包含関係を持つ要素を含むデータのストリームに対するウィンドウ処理技術に関する。
【背景技術】
【０００２】
近年，センサデータ，ＰＯＳ（Ｐｏｉｎｔ  ｏｆ  Ｓａｌｅｓ）データ，ブログやツィッター（ｔｗｉｔｔｅｒ）などのウェブデータなど，時々刻々と発生し続ける大量データを，リアルタイムに処理することを目的としたストリーム処理（Ｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｉｎｇ）が注目を集めている。
【０００３】
ストリーム処理では，リアルタイム性が要求されるため，限られた計算領域を用いて，できるだけ少ない処理量で計算する技術が必須である。
【０００４】
これまでは，大量データの処理にはＤＢＭＳ（データベース管理システム）を用いるのが主流であった。しかし，ＤＢＭＳでは，データ格納や補助データ作成に膨大な処理時間が必要となるため，リアルタイム処理には不向きである。
【０００５】
なお，現在の商用またはオープンソースのストリーム処理エンジンは，データ種としてＣＳＶのような固定長のデータを想定しており，より柔軟なデータ表現が可能なＸＭＬ形式のデータを効率よく扱うことはできない。
【０００６】
ストリーム処理における最も基本的な処理の１つとして，ウィンドウ処理がある。ウィンドウ処理では，決められた処理期間内のデータのみを逐次的に処理することによって，無限長のデータストリームに対して，決められた計算領域だけを用いてリアルタイムで処理することができる。
【０００７】
上記のウィンドウ処理を，ＸＭＬデータのストリームに適用するために，Ｘｑｕｅｒｙ拡張言語およびその実行システムが提案されている（第1の既存技術）。
【０００８】
図１６は，ＸＭＬデータのストリームの例を説明するための図である。
【０００９】
図１６に示す例では，ある要素をルートにして包含関係を持つ構成要素を含むＸＭＬデータが次々と発生してストリームを構成しているとする。
【００１０】
図１６に示すＸＭＬデータのストリームは，ＰＯＳシステムで生成されたデータである。このＰＯＳ要素をルートとするＸＭＬデータ（以下，ＰＯＳ木と呼ぶ）は，ｃｕｓｔ要素とｓｈｏｐ要素とを持つ。また，レジ担当者（店員）が変わるまでは，新しいＰＯＳ木は発生しないものとする。
【００１１】
ｃｕｓｔ要素は，顧客の買い物データを表わす。ｃｕｓｔ要素は，必須要素として，購入品の価格を表すｐｒｉｃ要素を持ち，任意要素として，購入者名を表すｎａｍｅ要素を持つ。ｃｕｓｔ要素は，１つのＰＯＳ木に何回現れてもよい。
【００１２】
ｓｈｏｐ要素は，レジ担当の店員データを表わす。ｓｈｏｐ要素は，必須要素として，店員ＩＤを表すｉｄ要素を持つ。ｓｈｏｐ要素は，ＰＯＳ木に正確に１回だけ現れるものとする。
【００１３】
図１６に示すＰＯＳ木に対するウィンドウ処理として，以下のようなＸＭＬウィンドウ問い合わせが与えられたとする。
【００１４】
ｆｏｒ  ｗｉｎｄｏｗ  ＄ｗ  ｉｎ  ／ｐｏｓ／ｃｕｓｔ
ｒａｎｇｅ  ３
ｓｌｉｄｉｎｇ  １
ｒｅｔｕｒｎ  ＳＵＭ（＄ｗ／ｐｒｉｃ）
上記のＸＭＬウィンドウ問い合わせは，ウィンドウ処理として，ウィンドウサイズ（ｒａｎｇｅ）＝３，スライド幅（ｓｌｉｄｉｎｇ）＝１のスライディングウィンドウが設定されること，パス式“／ｐｏｓ／ｃｕｓｔ”で指定される部分木をウィンドウ構成要素とし，各ウィンドウ＄ｗに対して，パス式“＄ｗ／ｐｒｉｃ”で指定される演算対象要素（ｐｒｉｃ要素）に対応する演算対象要素値の総和を出力することを示す。
【００１５】
図１７は，ＸＭＬデータ系列に対するウィンドウ処理を説明するための図である。
【００１６】
図１７に示すように，ウィンドウ処理では，ＸＭＬデータのストリームから，１スキャン目の処理でウィンドウ構成要素（ｃｕｓｔ要素から始まる部分木）が１つ切り出され，ウィンドウバッファＢに格納される。そして，２スキャン目の処理で，ウィンドウバッファＢ内のウィンドウ構成要素から演算対象要素値が取得されて集計装置Ｍ内のバッファに格納される。その後，集計装置Ｍにより，バッファ内に格納された演算対象要素値が集計される。
【００１７】
また，別の既存技術として，ストリーム型のＸｐａｔｈ照合が提案されている（第２の既存技術）。
【００１８】
ストリーム型のＸｐａｔｈ照合は，ＸＭＬデータを１回スキャンしてＸｐａｔｈ問合せを照合する手法に基づいた，ストリーム型のＸｐａｔｈ照合エンジンにより実現される。
【００１９】
図１８は，ＸＭＬデータ系列に対するストリーム型のＸｐａｔｈ照合を説明するための図である。
【００２０】
ストリーム型のＸｐａｔｈ照合では，１スキャン目で，ウィンドウ構成要素を指定したパス（Ｘｐａｔｈ：／ｐｏｓ／ｃｕｓｔ）が照合され，さらに，２スキャン目で，演算対象要素を指定したパス（Ｘｐａｔｈ：／ｐｏｓ／ｃｕｓｔ／ｐｒｉｃ）が照合されて，演算対象要素に対応付けられた演算対象要素値が特定される。
【００２１】
ＸＭＬデータから単に演算対象要素（ｐｒｉｃ）を検出するだけであれば，Ｘｐａｔｈが指定するＸＭＬの部分木を１スキャンで取得することができる。しかし，ＸＭＬデータは，ウィンドウ構成要素に包含される演算対象要素が不特定であることなど，柔軟な表現が可能である。そのため，包含関係にある演算対象要素をウィンドウ構成要素による部分木と関連付けて取得するためには，２スキャンが必要であった。
【００２２】
具体的には，上記のＸＭＬウィンドウ問い合わせの場合のように演算を各ウィンドウ構成要素単位（ＸＰ１）で行いたい場合には，図１８に示すように，演算対象要素ＸＰ２＿２，ＸＰ２＿３が，包含関係にあるウィンドウ構成要素ＸＰ１＿２に関連付けられて取得されなければならなかった。すなわち，ＸＭＬデータからのウィンドウ構成要素の照合と各ウィンドウ構成要素からの演算対象要素の照合とのために，２スキャンが必要であった。
【先行技術文献】
【非特許文献】
【００２３】
【非特許文献１】Ａ．Ａｒａｓｕ，ｅｔ  ａｌ，  “Ｔｈｅ  ＣＱＬ  Ｃｏｎｔｉｎｕｏｕｓ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ：  Ｓｅｍａｎｔｉｃ  Ｆｏｕｎｄａｔｉｏｎｓ  ａｎｄ  Ｑｕｅｒｙ  Ｅｘｅｃｕｔｉｏｎ”，  ＶＬＤＢ  Ｊ．，  Ｖｏｌ．  １５（２），  ｐｐ．１２１−１４２，  ２００６年
【非特許文献２】Ｉ．  Ｂｏｔａｎ，  ｅｔ  ａｌ，  “Ｅｘｔｅｎｄｉｎｇ  ＸＱｕｅｒｙ  ｗｉｔｈ  Ｗｉｎｄｏｗ  Ｆｕｎｃｔｉｏｎｓ”，  Ｐｒｏｃ．  ＶＬＤＢ  ２００７，  ｐｐ．７５−８６，  ２００７年
【非特許文献３】Ｉ．  Ａｖｉｌａ−Ｃａｍｐｉｌｌｏ，  ｅｔ  ａｌ，  “ＸＭＬＴＫ：  Ａｎ  ＸＭＬ  Ｔｏｏｌｋｉｔ  ｆｏｒ  Ｓｃａｌａｂｌｅ  ＸＭＬ  Ｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｉｎｇ”，  Ｐｒｏｃ．  ＰＬＡＮＸ’０２，  ２００２年
【非特許文献４】Ｙ．  Ｄｉａｏ，  ｅｔ  ａｌ，  “Ｐａｔｈ  Ｓｈａｒｉｎｇ  ａｎｄ  Ｐｒｅｄｉｃａｔｅ  Ｅｖａｌｕａｔｉｏｎ  ｆｏｒ  Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  ＸＰａｔｈ  Ｆｉｌｔｅｒｉｎｇ”，  Ｐｒｏｃ．  ＡＣＭ  ＴＯＤＳ，  ２８（４），  ４６７−５１６，  ２００３年
【発明の概要】
【発明が解決しようとする課題】
【００２４】
上記で第１の既存技術として説明した，ＸＭＬデータ系列に対するウィンドウ処理では，ウィンドウ構成要素の取得に１スキャン，さらに演算対象要素値の取得に１スキャンの合計２回のスキャンの実行が必要であり，処理が非効率であるという問題があった。
【００２５】
また，第２の既存技術として説明した，ＸＭＬデータ系列に対するストリーム型Ｘｐａｔｈの照合処理では，互いに包含関係にある部分木を関連付けて取得するために，ウィンドウ構成要素と演算対象要素のそれぞれの照合に２スキャンの実行が必要であり，同様に，処理が非効率であるという問題があった。
【００２６】
本発明の目的は，例えばＸＭＬデータのように，包含関係を持つ要素を含むデータ系列に対するウィンドウ処理において，ウィンドウ構成要素と関連付けた演算対象要素を１回のスキャンで取得できる処理技術を提供することである。
【課題を解決するための手段】
【００２７】
本発明の一態様として開示されるウィンドウ処理装置は，１）データを格納するバッファと，２）包含関係を持つ要素を含むデータ系列を取得するデータ取得部と，３）前記データ系列から，ウィンドウ処理単位を定めるウィンドウ構成要素の位置および前記ウィンドウ構成要素に包含される演算対象要素の位置を前記ウィンドウ構成要素に関連付けて逐次的に検出し，前記ウィンドウ構成要素を検出する度に，直前に検出したウィンドウ構成要素と関連付けた演算対象要素に対応する演算対象要素値の集合を前記バッファに格納するデータストリーム解析部と，４）前記バッファに格納された前記ウィンドウ構成要素に関連付けられた演算処理値の集合に対してウィンドウ処理を行うウィンドウ処理部とを備える。
【００２８】
また，本発明の別の態様として開示されるウィンドウ処理方法は，コンピュータが，上記ウィンドウ処理装置の各処理部で実現される各処理に対応する処理ステップを実行するものである。
【００２９】
また，本発明の別の態様として開示されるウィンドウ処理プログラムは，コンピュータに，上記ウィンドウ処理装置の各処理部で実現される各処理に対応する処理ステップを実行させるものである。
【発明の効果】
【００３０】
上記した手段によれば，データ系列からウィンドウ構成要素と演算対象要素とを１回のスキャンで同時に行うことができ，ウィンドウ処理の計算時間と計算領域との効率化を実現することができる。
【図面の簡単な説明】
【００３１】
【図１】本発明の一態様として開示するウィンドウ処理装置の一実施例における構成例を示す図である。
【図２】データストリーム解析部の構成例を示す図である。
【図３】ＸＭＬストリームＸＳのデータ構造の表現例を示す図である。
【図４】ウィンドウクエリＱの例を示す図である。
【図５】ウィンドウ処理装置の処理フローを示す図である。
【図６】ウィンドウクエリ取得処理のより詳細な処理フロー例を示す図である。
【図７】データストリーム解析処理の処理フロー例を示す図である。
【図８】データＣＸの例を示す図である。
【図９】ステップＳ２２のストリーム解析のより詳細な処理フローを示す図である。
【図１０】ＸＭＬストリームのＸＭＬデータとパス照合によりバッファに出力されるデータとの関係例を示す図である。
【図１１】解出力処理の処理フロー例を示す図である。
【図１２】バッファのデータと，解出力処理により出力シーケンスＳｅｑに出力されるデータとの関係を模式的に示す図（その１）である。
【図１３】バッファのデータと，解出力処理により出力シーケンスＳｅｑに出力されるデータとの関係を模式的に示す図（その２）である。
【図１４】バッファのデータと，解出力処理により出力シーケンスＳｅｑに出力されるデータとの関係を模式的に示す図（その３）である。
【図１５】ＸＭＬストリームＸＳの各ＸＭＬデータと，バッファに出力されるデータとの関係を模式的に示す図である。
【図１６】ＸＭＬデータのストリームの例を説明するための図である。
【図１７】ＸＭＬデータ系列に対するウィンドウ処理を説明するための図である。
【図１８】ＸＭＬデータ系列に対するストリーム型のＸｐａｔｈ照合を説明するための図である。
【発明を実施するための形態】
【００３２】
本発明の一態様として開示するウィンドウ処理装置は，既知のストリーム型のＸＰａｔｈ照合機能に，ＸＭＬストリームからウィンドウ構成要素に関連付けられた演算対象要素を検出し，検出済みの演算対象要素に対応する演算対象要素値を取得して，ウィンドウ構成要素の開始位置を検出する度に，ウィンドウ構成要素開始を表わす記号と検出済みの演算対象要素に対応する演算対象値の集合とをバッファに送信する機能を有する。
【００３３】
図１は，本発明の一態様として開示するウィンドウ処理装置１の一実施例における構成例を示す図である。
【００３４】
ウィンドウ処理装置１は，包含関係を持つ要素を含むデータ系列，例えばＸＭＬデータのストリーム（以下，ＸＭＬストリーム）に対するウィンドウ処理を実行する。より詳しくは，ウィンドウ処理装置１は，ユーザが使用するクエリ装置２からＸＭＬストリームＸＳに対するウィンドウ問い合わせ（クエリ）Ｑを受け付け，データ送信装置３からネットワークＮを介して送信されたＸＭＬストリームＸＳに対するウィンドウ処理を実行する。ウィンドウ処理として，ウィンドウクエリＱで設定されたウィンドウサイズｗおよびスライド幅ｓをもとに，直近のウィンドウ集計値ａを，ウィンドウがスライドするたびに出力し，その出力をウィンドウクエリＱの解（集計値ａ）Ａとして送信する。
【００３５】
ウィンドウ処理装置１は，上記の機能を実現するため，ウィンドウクエリ受付部１１，データストリーム取得部１２，データストリーム解析部１３，バッファ１４，バッファ集計部１５，および解出力部１６を備える。
【００３６】
ウィンドウクエリ受付部１１は，ユーザのクエリ装置２から，ウィンドウ単位であるウィンドウ構成要素ＸＰ１，演算対象を示す演算対象要素ＸＰ２，ウィンドウサイズｗ（ｗ≧１）およびスライド幅ｓ（ｓ≧１）の指定を含むウィンドウクエリＱを受け付ける。
【００３７】
データストリーム取得部１２は，ＸＭＬデータの発生源であるデータ送信装置３から，ネットワークＮを解してＸＭＬストリームＸＳを受信する。
【００３８】
データストリーム解析部１３は，逐次的に，受信したＸＭＬストリームＸＳから，ウィンドウ構成要素ＸＰ１の位置を検出し，さらにウィンドウ構成要素ＸＰ１に包含される演算対象要素ＸＰ２の位置をウィンドウ構成要素ＸＰ１に関連付けて検出する。そして，データストリーム解析部１３は，検出した演算対象要素ＸＰ２に対応する演算対象要素値の集合を保持し，ウィンドウ構成要素ＸＰ１の開始位置を検出する度に，保持している演算対象要素値の集合，すなわち直前に検出した演算対象要素ＸＰ２に対応する演算対象要素値の集合をバッファ１４に格納する。
【００３９】
バッファ１４は，ウィンドウ構成要素ＸＰ１の検出，および検出したウィンドウ構成要素ＸＰ１に関連付けられた演算対象要素値の集合である値リストＶを保持する。
【００４０】
バッファ集計部１５は，ウィンドウサイズｗおよびスライド幅ｓにもとづいて，バッファ１４に格納されているウィンドウサイズｗ分の演算対象要素値の集合を集計してウィンドウ集計値ａを得る。バッファ集計部１５は，ウィンドウがスライドする度に，直近に得られたウィンドウ集計値ａを解出力部１６へ出力する。
【００４１】
解出力部１６は，出力されたウィンドウ集計値ａを，ウィンドウクエリの解Ａとしてクエリ装置２へ送る。
【００４２】
なお，上記バッファ集計部１５，解出力部１６およびウィンドウクエリ受付部１１は，ウィンドウ処理部の一実施例である。
【００４３】
図２は，データストリーム解析部１３の構成例を示す図である。
【００４４】
データストリーム解析部１３は，ストリーム型パス照合部１３１，ウィンドウ構成要素位置検出部１３２，演算対象要素位置検出部１３３，演算対象要素値検出部１３５，演算対象要素値取得部１３６，ウィンドウ構成要素開始記号送信部１３７，および演算対象要素値リスト送信部１３８を備える。
【００４５】
ストリーム型パス照合部１３１は，受け付けたＸＭＬストリームＸＳの各ＸＭＬデータに対してストリーム型のＸｐａｔｈ照合を行って，ＸＭＬデータから要素を検出する。
【００４６】
ウィンドウ構成要素位置検出部１３２は，ＸＭＬデータから，ウィンドウ構成要素ＸＰ１の開始位置または終了位置を検出する。ここで，ウィンドウ構成要素ＸＰ１の開始位置および終了位置は，ウィンドウ構成要素ＸＰ１の開始／終了を示すタグまたはイベントとする。
【００４７】
演算対象要素位置検出部１３３は，ＸＭＬデータから，演算対象要素ＸＰ２の開始位置または終了位置を検出する。ここで，演算対象要素ＸＰ２の開始位置および終了位置は，演算対象要素ＸＰ２を示す開始／終了を示すタグまたはイベントとする。
【００４８】
演算対象要素値検出部１３５は，検出した演算対象要素ＸＰ２に対応する演算対象要素値を検出する。
【００４９】
演算対象要素値取得部１３６は，ＸＭＬデータから，ウィンドウ構成要素に関連付けられて検出された演算対象要素ＸＰ２に対応する演算対象要素値を取得して，値リストＶに追加する。
【００５０】
ウィンドウ構成要素開始記号送信部１３７は，ウィンドウ構成要素ＸＰ１の開始位置が検出される度に，検出されたウィンドウ構成要素ＸＰ１の開始位置を示すフラグ（＄）をバッファ１４に書き出す。
【００５１】
演算対象要素値リスト送信部１３８は，ウィンドウ構成要素ＸＰ１の開始位置が検出された後に演算対象要素ＸＰ２の終了位置が検出された場合に，検出済みの演算対象要素値のリストＶをバッファ１４に書き出す。
【００５２】
図３（Ａ）〜（Ｃ）は，ＸＭＬストリームＸＳのデータ構造の表現例を示す図である。
【００５３】
データストリーム取得部１２が受信するＸＭＬストリームＸＳにおける各ＸＭＬデータは，ＰＯＳシステムで生成されたデータであり，ＰＯＳ要素をルートとして，包含関係を持つ要素を含む。ＸＭＬデータは，ｃｕｓｔ要素とｓｈｏｐ要素とを持ち，レジ担当者（店員）が変わるまでは，新しいＸＭＬデータ（ＰＯＳ要素）は発生しないものとする。
【００５４】
顧客の買い物データを示すｃｕｓｔ要素は，必須要素として，購入品の価格を表すｐｒｉｃ要素を持ち，任意要素として，購入者名を表すｎａｍｅ要素を持つ。ｃｕｓｔ要素は，１つのＸＭＬデータに何回出現してもよい。
【００５５】
レジ担当の店員データを示すｓｈｏｐ要素は，必須要素として，店員ＩＤを表すｉｄ要素を持ち，ＸＭＬデータ内に１回だけ出現するものとする。
【００５６】
図３（Ａ）〜（Ｃ）は，ＸＭＬストリームＸＳのデータ構造の表現例を示す図である。
【００５７】
図３（Ａ）は，上記したＸＭＬデータのデータ構造を木構造で表現したものである。図３（Ａ）に示すＸＭＬデータの木構造表現は，図３（Ｂ）に示すように，タグを用いたテキスト表現に変換することができる。さらに，図３（Ｂ）のＸＭＬデータのテキスト表現は，図３（Ｃ）に示すようなイベント列の表現として扱うことができる。ＸＭＬデータのイベント列表現の代表例として，Ｗ３Ｃ標準のＳＡＸがある。
【００５８】
本実施例において，データストリーム取得部１２は，ＸＭＬストリームＸＳとして，ＸＭＬデータのテキスト表現またはイベント表現のストリームを取得することができる。
【００５９】
また，本実施例において，データストリーム解析部１３は，ＸＭＬデータのイベント列表現に対して動作するが，ＸＭＬデータのテキスト表現を直接入力して，逐次的にイベントを検出しながら処理を行うように構成されてもよい。
【００６０】
図４は，ウィンドウクエリＱの例を示す図である。
【００６１】
図４に示すウィンドウクエリＱは，ウィンドウ構成要素ＸＰ１を指定するパス式“／ｐｏｓ／ｃｕｓｔ”，演算対象要素ＸＰ２を指定するパス式“／ｐｏｓ／ｃｕｓｔ／ｐｒｉｃ”，ウィンドウサイズｒａｎｇｅ＝３，およびスライド幅ｓｌｉｄｉｎｇ＝１の指定が含まれている。
【００６２】
以下，ウィンドウ処理装置１の処理の流れを説明する。
【００６３】
図５は，ウィンドウ処理装置１の処理フローを示す図である。
【００６４】
ステップＳ１：  ウィンドウクエリ取得処理
ウィンドウクエリ受付部１１がウィンドウクエリ取得処理を実行する。
【００６５】
図６は，ウィンドウクエリ取得処理のより詳細な処理フロー例を示す図である。
【００６６】
ウィンドウクエリ受付部１１は，ユーザのクエリ装置２からウィンドウクエリＱを受け取る（ステップＳ１１）。
【００６７】
ウィンドウクエリ受付部１１は，受信したウィンドウクエリＱから，ウィンドウ構成要素ＸＰ１および演算対象要素ＸＰ２のパス指定を抽出する。そして，ウィンドウクエリ受付部１１は，データストリーム解析部１３へＸｐａｔｈ照合で用いる指定パス，すなわち，ウィンドウ構成要素ＸＰ１を指定するＸｐａｔｈ  ＸＰ１＝／ｐｏｓ／ｃｕｓｔ，演算対象要素ＸＰ２を指定するＸｐａｔｈ  ＸＰ２＝／ｐｏｓ／ｃｕｓｔ／ｐｒｉｃを送信する（ステップＳ１２）。
【００６８】
ウィンドウクエリ受付部１１は，受信したウィンドウクエリＱから，ウィンドウサイズｗ（＝３），スライド幅ｓ（＝１）を抽出し，バッファ集計部１５へ送る（ステップＳ１３）。
【００６９】
ステップＳ２：  データストリーム解析処理
データストリーム解析部１３は，ＸＭＬストリームＸＳに対するＸｐａｔｈ照合を行って，ウィンドウ構成要素ＸＰ１，演算対象要素ＸＰ２を抽出する。
【００７０】
図７は，データストリーム解析処理の処理フロー例を示す図である。
【００７１】
データストリーム解析部１３は，ＸＭＬストリームＸＳを受け取る。データストリーム解析部１３は，ＸＭＬストリームＸＳでの処理対象とするＸＭＬデータを示すＣＸを用意し，初期化として，受け取ったＸＭＬストリームＸＳの最初のＸＭＬデータをデータＣＸとする（ステップＳ２１）。図８は，データＣＸの例を示す図である。データストリーム解析部１３は，ＸＭＬデータのイベント列表現を受け取る。
【００７２】
次に，データストリーム解析部１３は，データＣＸに対してパス照合処理を行う（ステップＳ２２）。
【００７３】
データストリーム解析部１３は，ＸＭＬストリームＸＳのデータＣＸの次にＸＭＬデータが存在するか判定する（ステップＳ２３）。データストリーム解析部１３は，ＸＭＬストリームＸＳのデータＣＸの次にＸＭＬデータが存在すれば（ステップＳ２３のＹ），次のＸＭＬデータをデータＣＸとし（ステップＳ２４），ＸＭＬストリームＸＳに次のＸＭＬデータが存在しなければ（ステップＳ２３のＮ），処理を終了する。
【００７４】
図９は，ステップＳ２２のパス照合処理のより詳細な処理フローを示す図である。
【００７５】
データストリーム解析部１３のストリーム型パス照合部１３１は，初期化として，スキャン位置を示すカーソルＣをデータＣＸ（イベント列）の最初のイベントに設定し，演算対象要素フラグＦＡ＝０，値リストＶを空リストとする（ステップＳ２２１）。そして，ストリーム型パス照合部１３１は，パス照合を行い，データＣＸのカーソルＣがあるイベントの種別を判定する（ステップＳ２２２）。
【００７６】
ステップＳ２２２の処理で，ウィンドウ構成要素位置検出部１３２により，そのイベントが「ウィンドウ構成要素ＸＰ１の開始」であると判定された場合に，ウィンドウ構成要素開始記号送信部１３７が，ウィンドウ構成要素開始記号“＄”をバッファ１４に出力する（ステップＳ２２３）。ウィンドウ構成要素位置検出部１３２により，イベントが「ウィンドウ構成要素ＸＰ１の終了」であると判定された場合に，演算対象要素値リスト送信部１３８が，値リストＶをバッファ１４に出力する（ステップＳ２２４）。
【００７７】
演算対象要素位置検出部１３３により，イベントが「演算対象要素ＸＰ２の開始」であると判定された場合に，演算対象要素位置検出部１３３が，演算対象要素フラグＦＡ＝１を設定する（ステップＳ２２５）。イベントが「演算対象要素ＸＰ２の終了」であると判定された場合に，演算対象要素位置検出部１３３が，演算対象要素フラグＦＡ＝０を設定する（ステップＳ２２６）。
【００７８】
また，演算対象要素値検出部１３５により，イベントが「テキスト」のノードであると判定された場合に，さらに，演算対象要素値取得部１３６が，演算対象要素フラグＦＡ＝１であるかを判定する（ステップＳ２２７）。そして，演算対象要素フラグＦＡ＝１であれば（ステップＳ２２７のＹ），演算対象要素値取得部１３６が，カーソルＣが位置するイベントのテキスト値をリストＶに追加する（ステップＳ２２８）。一方，演算対象要素フラグＦＡ＝１でなければ（ステップＳ２２７のＮ），ステップＳ２２９の処理へ進む。
【００７９】
ステップＳ２２３〜Ｓ２２６およびＳ２２８の処理後，または，ステップＳ２２２の処理においてカーソルＣが位置するイベントが上記のいずれの場合にも該当しない場合（それ以外），または，ステップＳ２２７の処理で演算対象要素フラグＦＡ＝１でない場合に，ストリーム型パス照合部１３１は，データＣＸで，カーソルＣが位置するイベントの次にイベントが存在するかを判定する（ステップＳ２２９）。カーソルＣが位置するイベントの次にイベントが存在する場合に（ステップＳ２２９のＹ），ストリーム型パス照合部１３１は，カーソルＣを次のイベントに移し（ステップＳ２２１０），ステップＳ２２２の処理へ戻す。
【００８０】
カーソルＣが位置するイベントの次にイベントが存在しない場合に（ステップＳ２２９のＮ），演算対象要素値リスト送信部１３８は，値リストＶをバッファ１４に出力する（ステップＳ２２１１）。
【００８１】
図１０は，ＸＭＬストリームのＸＭＬデータと，パス照合によりバッファ１４に出力されるデータとの関係例を示す図である。
【００８２】
図１０に示すＸＭＬストリームＸＳにおいて，データＣＸ１を破線矩形で示している。図１０のデータＣＸ１は，図８に示すイベント列に対応している。
【００８３】
データストリーム解析部１３により，データＣＸ１において，ＸＰ１＝／ｐｏｓ／ｃｕｓｔとの照合によりパス／ｐｏｓ／ｃｕｓｔが検出されると（図８（ａ）），ウィンドウ構成要素ＸＰ１“ｃｕｓｔ”の開始位置と判断されて，ウィンドウ構成要素開始記号“＄”がバッファ１４に出力される。
【００８４】
その後に，ＸＰ２＝／ｐｏｓ／ｃｕｓｔ／ｐｒｉｃとの照合によりパス／ｐｏｓ／ｃｕｓｔ／ｐｒｉｃが検出されると（図８（ｂ）），演算対象要素“ｐｒｉｃ”の開始位置と判断されて，ＦＡ＝１が設定され，対応する演算対象要素値（５００）が抽出されて値リストＶに格納される（図８（ｃ））。続いて，パス／ｐｏｓ／ｃｕｓｔ／ｐｒｉｃの終了が検出されると（図８（ｄ）），演算対象要素“ｐｒｉｃ”の終了位置と判断されて，ＦＡ＝０と変更される。
【００８５】
その後に，パス／ｐｏｓ／ｃｕｓｔの終了が検出されると（図８（ｅ）），ウィンドウ構成要素ＸＰ１“ｃｕｓｔ”の終了位置と判断されて，値リストＶ＝｛５００｝がバッファ１４に出力される。
【００８６】
図１０に示すＸＭＬストリームＸＳにおいて，データＣＸ２を破線矩形で示している。
【００８７】
データＣＸ１の場合と同様に，データストリーム解析部１３によって，ＸＰ１＝／ｐｏｓ／ｃｕｓｔとのパス照合によってウィンドウ構成要素ＸＰ１“ｃｕｓｔ”の開始位置が検出されると，ウィンドウ構成要素開始記号“＄”がバッファ１４に出力される。
【００８８】
その後に，ＸＰ２＝／ｐｏｓ／ｃｕｓｔ／ｐｒｉｃとのパス照合によって演算対象要素“ｐｒｉｃ”の開始位置が検出されると，ＦＡ＝１が設定され，対応する演算対象要素値（３００）がリストＶに格納される。演算対象要素“ｐｒｉｃ”の終了位置が検出されると，ＦＡ＝０と変更されるが，データＸ２では，続いて，演算対象要素“ｐｒｉｃ”の開始が検出されて，ＦＡ＝１が再設定され，対応する演算対象要素値（２００）がリストＶに追加される。
【００８９】
その後，データＣＸ１の場合と同様に，ウィンドウ構成要素ＸＰ１“ｃｕｓｔ”の終了が検出されると，リストＶ＝｛３００，２００｝がバッファ１４に出力される。
【００９０】
ステップＳ３：  解出力処理
図１１は，解出力処理の処理フロー例を示す図である。
【００９１】
バッファ集計部１５は，初期化として，バッファ１４でのデータの位置を示すカーソルＣＢを，バッファ１４の最初のデータに設定し，ウィンドウサイズカウンタＣＷ＝０を設定し，出力シーケンスＳｅｑを空列とする（ステップＳ３１）。
【００９２】
バッファ集計部１５は，バッファ１４で，カーソルＣＢが設定されたデータの種類を判定する（ステップＳ３２）。データの種類が，ウィンドウ構成要素開始記号“＄”であれば（ステップＳ３２の「記号＄」），バッファ集計部１５は，ウィンドウサイズカウンタＣＷを１増やして（ステップＳ３３），ステップＳ３９に進み，データの種類が，値リストＶであれば（ステップＳ３２の「値リスト」），ステップＳ３４に進む。ステップＳ３４の処理で，バッファ集計部１５は，ＣＷ≧０ならば，カーソルＣＢが設定された値リストＶを出力シーケンスＳｅｑの末尾に追加する。
【００９３】
続いて，バッファ集計部１５は，ウィンドウサイズカウンタＣＷがウィンドウサイズｗより小さいか（ＣＷ＜ｗ）を判定して（ステップＳ３５），ウィンドウサイズカウンタＣＷがウィンドウサイズｗより小さくなく，等しい（ＣＷ＝ｗ）場合に（ステップＳ３５のＮ），出力シーケンスＳｅｑ内のデータ（値リストＶ）の集計値ａを求めて，解出力部１６へ出力する（ステップＳ３６）。解出力部１６は，上記のステップＳ３６の処理により，集計値ａを逐次受け取り，ウィンドウクエリＱの解Ａとしてクエリ装置２へ送る。
【００９４】
さらに，バッファ集計部１５は，出力シーケンスＳｅｑに格納されたデータの先頭からｓ件のデータを削除する。なお，スライド幅ｓがウィンドウサイズｗより大きい（ｓ＞ｗ）場合は，出力シーケンスＳｅｑに格納されたデータを全件削除する。バッファ集計部１５は，ウィンドウサイズカウンタＣＷを，ＣＷ−ｓの値に置き換える（ステップＳ３７）。
【００９５】
その後，バッファ集計部１５は，バッファ１４内でカーソルＣＢが設定されたデータの次にデータが存在するかを判定する（ステップＳ３８）。バッファ１４内に次のデータが存在する場合に（ステップＳ３８のＹ），バッファ集計部１５は，カーソルＣＢを次のデータ（値リスト）に移し（ステップＳ３９），ステップＳ３２の処理へ戻る。バッファ１４内に次のデータが存在しない場合に（ステップＳ３８のＮ），処理を終了する。
【００９６】
図１２〜図１４は，バッファ１４のデータと，解出力処理により出力シーケンスＳｅｑに出力されるデータとの関係を模式的に示す図である。図１２〜図１４に示す処理は，ウィンドウサイズｗ＝３，スライド幅ｓ＝１の場合のものである。
【００９７】
バッファ集計部１５によって，バッファ１４内で，先頭のデータにカーソルＣＢが設定され，ウィンドウサイズカウンタＣＷ＝０に初期化される。
【００９８】
図１２（Ａ）に示すように，ＣＢが位置するデータがウィンドウ構成要素開始記号“＄”であり，ウィンドウサイズカウンタＣＷが１増加され（ＣＷ＝１），カーソルＣＢが次のデータに移される。そして，図１２（Ｂ）に示すように，ＣＢが移動したデータが，演算対象要素値の値リストＶであれば，値リストＶ＝｛５００｝が出力シーケンスＳｅｑに格納され，カーソルＣＢはさらに次のデータに移される。
【００９９】
そして，図１３（Ａ）に示すように，カーソルＣＢが移動したデータがウィンドウ構成要素開始記号“＄”であれば，ウィンドウサイズカウンタＣＷ＝２となり，カーソルＣＢが次のデータに移される。そして，図１３（Ｂ）に示すように，カーソルＣＢが移動したデータの値リストＶ＝｛３００，２００｝が出力シーケンスＳｅｑに格納され，さらにカーソルＣＢが次のデータに移される。
【０１００】
同様にして，カーソルＣＢが移動したデータがウィンドウ構成要素開始記号“＄”であれば，ＣＷ＝３となり，カーソルＣＢが次のデータに移される。
【０１０１】
その後，図１４（Ａ）に示すように，カーソルＣＢが移動したデータが値リストであれば，その値リストＶ＝｛１００｝が出力シーケンスＳｅｑに格納される。ここで，ウィンドウサイズカウンタＣＷがウィンドウサイズｗ（＝３）と等しくなるので，出力シーケンスＳｅｑに格納された値リストが集計されて，集計値ａ（１１００）が得られる。さらに，図１４（Ｂ）に示すように，出力シーケンスＳｅｑに格納されたデータ（値リスト）の先頭から，ｓ＝１件のデータ（値リスト）が削除され，ウィンドウサイズカウンタＣＷがＣＷ−ｓ（＝２）の値に変更される。なお，カーソルＣＢは，同様にして次のデータに移される。
【０１０２】
図１５は，ＸＭＬストリームＸＳの各ＸＭＬデータと，バッファに出力されるデータとの関係を模式的に示す図である。
【０１０３】
ウィンドウ処理装置１は，ウィンドウ構成要素ＸＰ１の開始位置を検出する度に，直前に検出された演算対象要素ＸＰ２に対応する演算対象要素値の集合とウィンドウ構成要素開始記号“＄”とをバッファ１４に格納する。
【０１０４】
ウィンドウ処理装置１は，１つのウィンドウ構成要素ＸＰ１に含まれる演算対象要素ＸＰ２が不特定数であっても，包含される演算対象要素ＸＰ２をすべてウィンドウ構成要素ＸＰ１に関連付けて検出し，演算対象要素ＸＰ２に対応する演算対象値をリストにまとめて保持する。
【０１０５】
したがって，バッファ１４には，１回のスキャンで，ウィンドウ構成要素ＸＰ１の開始位置を示すウィンドウ構成要素開始記号“＄”と，ウィンドウ構成要素ＸＰ１に含まれる演算対象要素ＸＰ２に対応する演算対象要素値の集合（値リストＶ）とが交互に格納される。そのため，解集計処理において，ウィンドウ構成要素を単位とした演算対象要素値の集計が可能となる。
【０１０６】
本実施例において，ウィンドウ処理装置１は，ステップＳ２のデータストリーム解析処理とステップＳ３の解出力処理を，ＸＭＬストリームＸＳのＸＭＬデータＸごとに実行し，ＸＭＬストリームＸＳのＸＭＬデータＸの取得に従ってループして実行する。しかし，ＸＭＬストリームＸＳが有限の系列であれば，ウィンドウ処理装置１は，ＸＭＬストリームＸＳについて，ステップＳ２のデータストリーム解析処理とステップＳ３の解出力処理をバッチ的に実行するように構成されてもよい。
【０１０７】
ウィンドウ処理装置１は，ＣＰＵおよびメモリ等を有するハードウェアと，ソフトウェアプログラムとを備えるコンピュータ・システム，または専用ハードウェアによって実現することができる。
【０１０８】
ウィンドウ処理装置１は，演算装置（ＣＰＵ），一時記憶装置（ＤＲＡＭ，フラッシュメモリ等）および永続性記憶装置（ＨＤＤ，フラッシュメモリ等）を有し，外部とデータの入出力をするコンピュータによって実施することができる。また，ウィンドウ処理装置１は，このコンピュータが実行可能なプログラムによっても実施することができる。この場合に，ウィンドウ処理装置１が有すべき機能の処理内容を記述したプログラムが提供される。提供されたプログラムを上記コンピュータが実行することによって，上記説明したウィンドウ処理装置１の処理機能がコンピュータ上で実現される。なお，上記コンピュータは，可搬型記録媒体から直接プログラムを読み取り，そのプログラムに従った処理を実行することもできる。さらに，上記プログラムは，コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【０１０９】
以上説明したように，開示したウィンドウ処理装置１によれば，次のような効果がある。
【０１１０】
すなわち，ウィンドウ処理装置１によれば，ウィンドウ構成要素に含まれる演算対象の要素が不特定数であるようなデータのストリームに対しても１回のスキャンによるウィンドウ処理が可能となり，処理時間および格納領域を軽減することができる。
【０１１１】
従来技術では，ウィンドウ構成要素の開始位置と演算対象要素位置を検出するために，ＸＭＬストリームにおける各ＸＭＬデータを，２回スキャンする必要があった。しかし，ウィンドウ処理装置１によれば，ウィンドウ構成要素の開始位置と演算対象要素位置を１回のスキャンで同時に検出するため，計算時間を削減できる。
【０１１２】
さらに，副次的効果として，ウィンドウ処理装置１では，ウィンドウ構成要素のすべてをバッファ１４に保持するタイプの従来技術とは異なり，集計処理に必要最低限のデータ（値リスト）を取得してバッファ１４に格納する。その結果として，ウィンドウ処理装置１によれば，バッファ１４に保持するデータ量を削減できるため，計算時間と計算領域とを削減できる。
【符号の説明】
【０１１３】
１  ウィンドウ処理装置
１１  ウィンドウクエリ受付部
１２  データストリーム取得部
１３  データストリーム解析部
１３１  ストリーム型パス照合部
１３２  ウィンドウ構成要素位置検出部
１３３  演算対象要素位置検出部
１３５  演算対象要素値検出部
１３６  演算対象要素値取得部
１３７  ウィンドウ構成要素開始記号送信部
１３８  演算対象要素値リスト送信部
１４  バッファ
１５  バッファ集計部
１６  解出力部
２  クエリ装置
３  データ送信装置
【図１】
0005637896.tif 000002
【図２】
0005637896.tif 000003
【図３】
0005637896.tif 000004
【図４】
0005637896.tif 000005
【図５】
0005637896.tif 000006
【図６】
0005637896.tif 000007
【図７】
0005637896.tif 000008
【図８】
0005637896.tif 000009
【図９】
0005637896.tif 000010
【図１０】
0005637896.tif 000011
【図１１】
0005637896.tif 000012
【図１２】
0005637896.tif 000013
【図１３】
0005637896.tif 000014
【図１４】
0005637896.tif 000015
【図１５】
0005637896.tif 000016
【図１６】
0005637896.tif 000017
【図１７】
0005637896.tif 000018
【図１８】
0005637896.tif 000019