(57)【要約】  本発明は、それぞれネストされた要素を有するツリー状構造を備える構造化文書(DOC)の圧縮方法に関する。前記構造化要素のそれぞれは、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素(Val)を区切る構造化要素を具備し、前記方法は、前記構造化文書(DOC)を、構造化文書の構造化要素に対応するイベントを有するイベントストリーム(EVST)に変換するステップと、前記イベントストリームで発生する、１つのイベントまたは連続したイベントの少なくとも２度目の発生のシーケンスをエンコードするそれぞれのバイト単位コードを有するバイナリストリーム(BST)を生成することにより、前記イベントストリームをエンコーディングするステップと、を具備する。前記文書のXMLスキーマを使用せずにXML文書を圧縮する本発明のアプリケーション。
2009543243.tif 000002
【特許請求の範囲】
【請求項１】
それぞれネストされた構造化要素(4)を具備し、
それぞれの前記構造化要素は、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素(Val)を区切る構造化要素を具備する、ツリー状構造を有する構造化文書(DOC)を圧縮するための圧縮方法において、
前記構造化文書(DOC)を、前記構造化文書の構造化要素に対応するイベントを有するイベントストリーム(EVST)に変換するステップと、
前記イベントストリームで発生する、１つのイベントまたは連続したイベントの少なくとも２度目の発生のシーケンスをエンコードするそれぞれのバイト単位コードを有するバイナリストリーム(BST)を生成することにより前記イベントストリームをエンコーディングするステップと、
を具備することを特徴とする圧縮方法。
【請求項２】
圧縮されたバイナリストリーム(BDOC)を得るために圧縮アルゴリズム(ZIP)を前記バイナリストリーム(BST)に適用するステップを有することを特徴とする請求項１に記載の圧縮方法。
【請求項３】
前記圧縮アルゴリズム(ZIP)は、ZLIBであることを特徴とする請求項２に記載の圧縮方法。
【請求項４】
前記イベントストリーム(EVST)のイベントのための前記エンコーディングステップは、
１バイト単位コードを、前記イベントストリームで発生した少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを前記イベントに属性付けるステップと、
を具備することを特徴とする請求項１から３のいずれか１項に記載の圧縮方法。
【請求項５】
前記イベントストリーム(EVST)のイベントのための前記エンコーディングステップは、
１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントに属性付けるステップと、
を具備することを特徴とする請求項１から４のいずれか１項に記載の圧縮方法。
【請求項６】
対応テーブル(SCM1)は、前記バイナリストリーム(BST)のそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとのリンクを確立し、
前記対応テーブルは、限定されたサイズであることを特徴とする請求項１から５のいずれか１項に記載の圧縮方法。
【請求項７】
前記対応テーブル(SCM1)がフルの場合、最も古いイベントまたはイベントシーケンスのバイト単位コードを、前記新たなイベントまたはイベントシーケンスに属性付けられるように、前記最も古いイベントまたはイベントシーケンスを前記新たなイベントまたはイベントシーケンスと置き換えることで、前記新たなイベントまたはイベントシーケンスが対応テーブルに挿入されることを特徴とする請求項６に記載の圧縮方法。
【請求項８】
前記バイト単位コードは、１バイト長であることを特徴とする請求項１から７のいずれか１項に記載の圧縮方法。
【請求項９】
オリジナル構造化文書(DOC)は、それぞれネストされた構造化要素(4)を具備し、
それぞれの前記構造化要素は、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素(Val)を区切る構造化要素を具備する、ツリー状構造を有するオリジナル構造化文書(DOC)の圧縮によるバイナリストリーム(BST)を解凍する解凍方法において、
前記バイナリストリーム(BST)は、
イベントストリーム(EVST)のイベントをエンコーディングする連続したバイト単位コードと、
前記構造化文書の構造化要素と対応する前記イベントと、
を具備し、
前記解凍方法は、
バイナリストリームのそれぞれのバイト単位コードに対し、１つのイベントまたは連続したイベントの少なくとも２度目の発生のイベントシーケンスを有する前記イベントストリームを生成することにより、前記バイナリストリーム(BST)をデコーディングするステップと、
オリジナル構造化文書(DOC)を提供するために、前記イベントストリームのそれぞれのイベントを構造化要素に変換するステップと、
を具備することを特徴とする解凍方法。
【請求項１０】
前記バイナリストリーム(BST)を得るために解凍アルゴリズム(DZIP)を圧縮されたバイナリストリーム(BDOC)に適用する先行ステップを有することを特徴とする請求項９に記載の解凍方法。
【請求項１１】
前記解凍アルゴリズム(DZIP)は、ZLIBであることを特徴とする請求項１０に記載の解凍方法。
【請求項１２】
前記イベントストリーム(EVST)のイベントのための前記デコーディングステップは、
１バイト単位コードを、前記イベントストリームの少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントに属性付けるステップと、
を具備することを特徴とする請求項９から１１のいずれか１項に記載の解凍方法。
【請求項１３】
前記イベントストリーム(EVST)のイベントのための前記デコーディングステップは、
１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントに属性付けるステップと、
を具備することを特徴とする請求項９から１２のいずれか１項に記載の解凍方法。
【請求項１４】
対応テーブル(SCM2)は、前記バイナリストリーム(BST)のそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとのリンクを確立し、
前記対応テーブルは限定されたサイズであることを特徴とする請求項９から１３のいずれか１項に記載の解凍方法。
【請求項１５】
対応テーブル(SCM2)がフルな場合、最も古いイベントまたはイベントシーケンスのバイト単位コードを新たなイベントまたはイベントシーケンスに属性付けるために、新たなイベントまたはイベントシーケンスは、最も古いイベントまたはイベントシーケンスを新たなイベントまたはイベントシーケンスと置き換えることで対応テーブルに挿入されることを特徴とする請求項１４に記載の解凍方法。
【請求項１６】
前記バイト単位コードは、１バイト長であることを特徴とする請求項９から１５のいずれか１項に記載の解凍方法。
【請求項１７】
それぞれネストされた構造化要素(4)を具備し、
それぞれの前記構造化要素は、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素(Val)を区切る構造化要素を具備する、ツリー状構造を有する構造化文書(DOC)を圧縮するための圧縮装置において、
前記構造化文書(DOC)を、前記構造化文書の構造化要素に対応するイベントを有するイベントストリーム(EVST)に変換するためのコンバータ(XSXP)と、
前記イベントストリームで発生する１つのイベントまたは少なくとも２度目の発生の連続したイベントのシーケンスをエンコードする、それぞれのバイト単位コードを有するバイナリストリーム(BST)を生成することにより、前記イベントストリームをエンコードするためのエンコーダー(BCD)と、
を具備することを特徴とする圧縮装置。
【請求項１８】
圧縮されたバイナリストリーム(BDOC)を得るために、圧縮アルゴリズムを前記バイナリストリーム(BST)に適用するための圧縮モジュール(ZIP)を具備することを特徴とする請求項１７に記載の圧縮装置。
【請求項１９】
前記圧縮アルゴリズムは、ZLIBであることを特徴とする請求項１８に記載の圧縮装置。
【請求項２０】
前記エンコーダー(BCD)は、
１バイト単位コードを、前記イベントストリームの少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントに属性付けるステップと、
により前記イベントストリーム(EVST)のイベントを処理するように設定されることを特徴とする請求項１７から１９のいずれか１項に記載の圧縮装置。
【請求項２１】
前記エンコーダ(BCD)は、
１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントに属性付けるステップと、
により前記イベントストリーム(EVST)のイベントを処理するように設定されることを特徴とする請求項１７から２０のいずれか１項に記載の圧縮装置。
【請求項２２】
対応テーブル(SCM1)は、前記バイナリストリーム(BST)のそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとの間のリンクを確立し、
前記対応テーブルは限定されたサイズであることを特徴とする請求項１７から２１のいずれか１項に記載の圧縮装置。
【請求項２３】
前記エンコーダ(BCD)は、対応テーブル(SCM1)がフルな場合、最も古いイベントまたはイベントシーケンスのバイト単位コードが新たなイベントまたはイベントシーケンスに属性付けられるように、最も古いイベントまたはイベントシーケンスを新しいイベントまたはイベントシーケンスで置き換えることで、新たなイベントまたはイベントシーケンスを対応テーブル(SCM1)に挿入するように設定されることを特徴とする請求項２２に記載の圧縮装置。
【請求項２４】
前記バイト単位コードは、１バイト長であることを特徴とする請求項１７から２３のいずれか１項に記載の圧縮装置。
【請求項２５】
前記オリジナル構造化文書(DOC)は、それぞれネストされた情報要素(4)を具備し、
それぞれの前記構造化要素は、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素(Val)を区切る構造化要素を具備する、ツリー状構造を有するオリジナル構造化文書(DOC)の圧縮によるバイナリストリーム(BST)を解凍する解凍装置において、
前記バイナリストリーム(BST)は、
イベントストリーム(EVST)のイベントをエンコーディングする連続したバイト単位コードを有し、
前記構造化文書の構造化要素と対応する前記イベントと、
を具備し、
前記解凍装置は、
バイナリストリームのそれぞれのバイト単位コードに対し、１つのイベントまたは連続したイベントの少なくとも２度目の発生のイベントシーケンスを有する前記イベントストリームを生成することにより、前記バイナリストリーム(BST)をデコーディングするためのデコーダー(BDCD)と、
オリジナル構造化文書(DOC)を提供するために、前記イベントストリームのそれぞれのイベントを構造化要素に変換するためのコンバータ(SXXP)と、
を具備することを特徴とする解凍装置。
【請求項２６】
前記バイナリストリーム(BST)を得るために、解凍アルゴリズム(DZIP)を圧縮されたバイナリストリーム(BDOC)に適用するための解凍モジュール(DZIP)を有することを特徴とする請求項２５に記載の解凍装置。
【請求項２７】
前記解凍アルゴリズム(DZIP)は、ZLIBであることを特徴とする請求項２６に記載の解凍装置。
【請求項２８】
前記デコーダー(BDCD)は、
１バイト単位コードを、前記イベントストリームの少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントに属性付けるステップと、
により前記イベントストリーム(EVST)のイベントを処理するように設定されることを特徴とする請求項２５から２７のいずれか１項に記載の解凍装置。
【請求項２９】
前記デコーダー(BDCD)は、
１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、
１バイト単位コードを、前記イベントに属性付けるステップと、
により前記イベントストリーム(EVST)のイベントを処理するように設定されることを特徴とする請求項２５から２８のいずれか１項に記載の解凍装置。
【請求項３０】
対応テーブル(SCM2)は、前記バイナリストリーム(BST)のそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとの間のリンクを確立し、
前記対応テーブルは限定されたサイズであることを特徴とする請求項２９に記載の解凍装置。
【請求項３１】
前記デコーダー(BDCD)は、対応テーブル(SCM2)がフルな場合、最も古いイベントまたはイベントシーケンスの前記バイト単位コードが新たなイベントまたはイベントシーケンスに属性付けられるように、最も古いイベントまたはイベントシーケンスを新しいイベントまたはイベントシーケンスで置き換えることで、新たなイベントまたはイベントシーケンスを対応テーブル(SCM2)に挿入するように設定されることを特徴とする請求項３０に記載の解凍装置。
【請求項３２】
前記バイト単位コードは、１バイト長であることを特徴とする請求項２５から２１のいずれか１項に記載の解凍装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してデータを転送，保存，読み出し，および表示するためのコンピュータシステムの分野に関する。さらに詳しくは、あまり知られていない構造を有する構造化文書の圧縮および解凍のための方法およびシステムに関する。
【０００２】
限定はされないが、構造化マルチメディア文書，デジタル画像もしくは画像シーケンスまたはビデオ画像もしくは画像シーケンス，映画またはビデオプログラムを処理，転送，保存，そして読み出すことに、さらに一般的には、データ転送ネットワークにより相互接続されたプロセッサ装置間、またはプロセッサ装置と記憶装置間、またはもし前記文書がデジタル又はビデオ画像を含む場合にはプロセッサ装置とテレビ受像機のような再生装置間の前記文書のいろいろな転送に特にあてはまる。
【背景技術】
【０００３】
ますます頻繁に,このような方法で処理されるとともに転送される文書は、構造に組み込まれた複数の異なるデータ型を含むようになっている。構造化文書は、それぞれ型と属性に関連付けられている一連の情報要素であり、関連により主に階層的に相互に連結されている。そのような文書は、汎用マークアップ言語規約(SGML)，ハイパーテキストマークアップ言語(HTML)，または拡張マークアップ言語(XML)といった、特に文書を構成する多種の情報要素間を識別するために供されるマークアップ言語を使用している。その一方で、"リニア"な文書では、前記文書の内容情報は、レイアウト情報および型情報が入り混じっている。
【０００４】
構造化文書は、文書内の異なる情報要素を分離するための"タグ"と呼ばれるマーカーを有する。SGML，XMLまたはHTMLフォーマットでは、これらのタグは、"<XXXX>"および"</XXXX>"といったフォームをとり、前記第１タグ"XXXX"は、情報要素の開始のマーキングであり、前記第２タグ"</XXXX>"は、前記要素の終わりを示すマーキングである。情報要素は、それ自身が複数の属性および"下位要素"と呼ばれる低レベル情報要素で構成されている。このように、構造化文書は、ツリー状構造または階層構造を呈しており、それぞれのノードは情報要素を表すとともに、前記低レベル情報要素を含む情報要素である高階層レベルのノードと接続されている。そのようなツリー状構造の分岐の最後にあるノードは、情報部分要素に分けられない所定の非構造型のデータを含む情報要素を意味する。
【０００５】
このように、構造化文書は、通常テキスト形式で表される分離マーカーまたはタグを具備する。情報要素または下位要素で定義されている前記タグは、タグにより分離されている他の情報部分要素をそれ自身に含んでもよい。
【０００６】
しかし、XMLのようなマークアップ言語は、冗長な言語であるため、処理を行なうには非効率的であるとともに転送または格納するのにコストがかかる。加えて、多くのソフトウェアアプリケーションでは、構造化文書が非常に大きくなりがちである。特にHTML文書および情景記述，アート，図面，図表などのようなデジタルグラフィカル文書を作成するソフトウェアアプリケーションのケースなどである。グラフィカルアプリケーションで作成された前記文書は、多数の点，線，曲線で記述されたグラフィカルデータを含む。これらのグラフィカル文書やグラフィカルオブジェクトは、二次元ベクターおよびベクター/ラスターグラフィック混合オブジェクトを記述するSVG(Scalable Vector Graphics)のような言語を使用したグラフィカル構造化要素により記述されている。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
構造化文書は、デジタルネットワークを通じて格納または転送ことを目的とするので、構造化文書のサイズを減少させる必要性がある。
【０００８】
構造化文書のサイズを減少させるための既知の解決法は、前記文書に対して圧縮処理を行なうことである。この点において、ISO/IEC 15938-1 (MPEG-7 - Moving Picture Expert Group)または、つい最近のISO/IEC 23001-1が、XML構造化文書の符号化(圧縮)およびそのようなバイナリ形式の復号化のための方法およびバイナリーフォーマットを提案している。この規格は、特に１つまたは複数のスキーマで定義された既知の構造を有するマルチメディアのメタデータのような高度に構造化されたデータを処理するために設計された。
【０００９】
しかし、ISO/IEC 15938-1またはISO/IEC 23001-1による前記圧縮方法は、バイト単位ではないバイナリストリームを提供する。このように、ZLIB(圧縮ライブラリ)のような従来の圧縮アルゴリズムは、これらの圧縮方法により提供される前記バイナリストリームをさらに圧縮するのには効果的ではない。
【００１０】
さらに、ISO/IEC 15938-1またはISO/IEC 23001-1による前記圧縮または解凍方法は、圧縮または解凍するために前記文書の構造を定義する効果的なスキーマを必要とする。しかし、そのようなスキーマは、前記符号化または復号化に必ずしも利用可能ではない。
【課題を解決するための手段】
【００１１】
一実施構成では、前記文書の構造を定義するスキーマを使用することなく、構造化文書を符号化および復号化すること可能にする。
【００１２】
一実施構成では、ZLIBのような従来の圧縮アルゴリズムによる更なる処理を可能とするバイト単位のバイナリストリームを提供するための圧縮方法を提供する。
【００１３】
このように、一実施構成は、ツリー状構造を有する構造化文書を圧縮するための圧縮方法を提供する。前記ツリー状構造は、それぞれネストされた構造化要素を具備する。前記構造化要素のそれぞれは、要素の構造を定めるとともに、少なくともひとつの構造化要素または非構造化要素のセットである少なくとも１つの値要素を区切る構造化要素を具備する。
【００１４】
一実施構成によれば、前記方法は、前記構造化文書を、前記構造化文書の構造化要素と対応するイベントを有するイベントストリームに変換するステップと、前記イベントストリームで発生する、１つのイベントまたは連続したイベントの少なくとも２度目の発生のシーケンスをエンコードするそれぞれのバイト単位コードを有するバイナリストリーム(BST)を生成することにより前記イベントストリームをエンコーディングするステップと、を具備する。
【００１５】
一実施構成によれば、前記方法は、圧縮されたバイナリストリームを得るために圧縮アルゴリズムをバイナリストリームに適用するステップを具備する。
【００１６】
一実施構成によれば、前記圧縮アルゴリズムは、ZLIBである。
【００１７】
一実施構成によれば、前記イベントストリーム(EVST)のイベントのための前記エンコーディングステップは、１バイト単位コードを、前記イベントストリームで発生した少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを前記イベントに属性付けるステップと、を具備する。
【００１８】
一実施構成によれば、前記イベントストリームのイベントのための前記エンコーディングステップは、１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントに属性付けるステップと、を具備する。
【００１９】
一実施構成によれば、対応テーブルは、前記バイナリストリームのそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとのリンクを確立し、前記対応テーブルは、限定されたサイズである。
【００２０】
一実施構成によれば、前記対応テーブルがフルの場合、最も古いイベントまたはイベントシーケンスのバイト単位コードを、前記新たなイベントまたはイベントシーケンスに属性付けられるように、前記最も古いイベントまたはイベントシーケンスを前記新たなイベントまたはイベントシーケンスと置き換えることで、前記新たなイベントまたはイベントシーケンスが対応テーブルに挿入される。
【００２１】
一実施構成によれば、前記バイト単位コードは、１バイト長である。
【００２２】
本発明の他の実施構成によれば、オリジナル構造化文書は、それぞれネストされた構造化要素を具備し、それぞれの前記構造化要素は、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素を区切る構造化要素を具備する、ツリー状構造を有するオリジナル構造化文書の圧縮によるバイナリストリームを解凍する解凍方法を提供する。
【００２３】
一実施構成によれば、前記バイナリストリーム(BST)は、イベントストリーム(EVST)のイベントをエンコーディングする連続したバイト単位コードと、前記構造化文書の構造化要素と対応する前記イベントと、を具備し、前記解凍方法は、バイナリストリームのそれぞれのバイト単位コードに対し、１つのイベントまたは連続したイベントの少なくとも２度目の発生のイベントシーケンスを有する前記イベントストリームを生成することにより、前記バイナリストリーム(BST)をデコーディングするステップと、オリジナル構造化文書(DOC)を提供するために、前記イベントストリームのそれぞれのイベントを構造化要素に変換するステップと、を具備する。
【００２４】
一実施構成によれば、前記解凍方法は、前記バイナリストリームを得るために解凍アルゴリズムを圧縮されたバイナリストリームに適用する先行ステップを有する。
【００２５】
一実施構成では、前記解凍アルゴリズムは、ZLIBである。
【００２６】
一実施構成によれば、前記イベントストリームのイベントのための前記デコーディングステップは、１バイト単位コードを、前記イベントストリームの少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントに属性付けるステップと、を具備する。
【００２７】
一実施構成において、前記イベントストリームのイベントのための前記デコーディングステップは、１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントに属性付けるステップと、を具備する。
【００２８】
一実施構成において、対応テーブルは、前記バイナリストリームのそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとのリンクを確立し、前記対応テーブルは限定されたサイズである。
【００２９】
一実施構成において、対応テーブルがフルな場合、最も古いイベントまたはイベントシーケンスのバイト単位コードを新たなイベントまたはイベントシーケンスに属性付けるために、新たなイベントまたはイベントシーケンスは、最も古いイベントまたはイベントシーケンスを新たなイベントまたはイベントシーケンスと置き換えることで対応テーブルに挿入される。
【００３０】
一実施構成において、前記バイト単位コードは、１バイト長である。
【００３１】
本発明の他の実施構成において、それぞれネストされた構造化要素を具備し、それぞれの前記構造化要素は、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素を区切る構造化要素を具備する、ツリー状構造を有する構造化文書を圧縮するための圧縮装置提供することを特徴とする。一実施構成において、前記圧縮装置は、前記構造化文書を、前記構造化文書の構造化要素に対応するイベントを有するイベントストリームに変換するためのコンバータと、前記イベントストリームで発生する１つのイベントまたは少なくとも２度目の発生の連続したイベントのシーケンスをエンコードする、それぞれのバイト単位コードを有するバイナリストリームを生成することにより、前記イベントストリームをエンコードするためのエンコーダと、を具備する。
【００３２】
一実施構成において、圧縮装置は、圧縮されたバイナリストリームを得るために、圧縮アルゴリズムを前記バイナリストリームに適用するための圧縮モジュールを具備する。
【００３３】
一実施構成において、前記圧縮アルゴリズムは、ZLIBである。
【００３４】
一実施構成において、前記エンコーダは、１バイト単位コードを、前記イベントストリームの少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントに属性付けるステップと、により前記イベントストリームのイベントを処理するように設定される。
【００３５】
一実施構成において、前記エンコーダは、１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントに属性付けるステップと、により前記イベントストリームのイベントを処理するように設定される。
【００３６】
一実施構成において、対応テーブルは、前記バイナリストリームのそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとの間のリンクを確立し、前記対応テーブルは限定されたサイズである。
【００３７】
一実施構成において、前記エンコーダは、対応テーブルがフルな場合、最も古いイベントまたはイベントシーケンスのバイト単位コードが新たなイベントまたはイベントシーケンスに属性付けられるように、最も古いイベントまたはイベントシーケンスを新しいイベントまたはイベントシーケンスで置き換えることで、新たなイベントまたはイベントシーケンスを対応テーブルに挿入するように設定される。
【００３８】
一実施構成によれば、前記バイト単位コードは、１バイト長である。
【００３９】
本発明の他の実施構成において、前記オリジナル構造化文書は、それぞれネストされた情報要素を具備し、それぞれの前記構造化要素は、要素の構造を定めるとともに、少なくとも１つの構造化要素または非構造化要素のセットである少なくとも１つの値要素を区切る構造化要素を具備する、ツリー状構造を有するオリジナル構造化文書の圧縮によるバイナリストリームを解凍する解凍装置を提供する。
【００４０】
一実施構成において、前記バイナリストリームは、イベントストリームのイベントをエンコーディングする連続したバイト単位コードを有し、前記構造化文書の構造化要素と対応する前記イベントと、を具備し、前記解凍装置は、バイナリストリームのそれぞれのバイト単位コードに対し、１つのイベントまたは連続したイベントの少なくとも２度目の発生のイベントシーケンスを有する前記イベントストリームを生成することにより、前記バイナリストリームをデコーディングするためのデコーダーと、オリジナル構造化文書を提供するために、前記イベントストリームのそれぞれのイベントを構造化要素に変換するためのコンバータと、を具備する。
【００４１】
一実施構成において、前記解凍装置は、前記バイナリストリームを得るために、解凍アルゴリズムを圧縮されたバイナリストリームに適用するための解凍モジュールを有する。
【００４２】
一実施構成において、解凍アルゴリズムは、ZLIBである。
【００４３】
一実施構成において、前記デコーダーは、１バイト単位コードを、前記イベントストリームの少なくとも２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントに属性付けるステップと、により前記イベントストリームのイベントを処理するように設定される。
【００４４】
一実施構成において、前記デコーダーは、１バイト単位コードを、前記イベントストリームで発生する３つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントストリームで発生する２つの連続したイベントを有するとともに前記イベントで終了するイベントシーケンスに属性付けるステップと、１バイト単位コードを、前記イベントに属性付けるステップと、により前記イベントストリームのイベントを処理するように設定される。
【００４５】
一実施構成において、対応テーブルは、前記バイナリストリームのそれぞれのバイト単位コードと、イベントまたはイベントシーケンスとの間のリンクを確立し、前記対応テーブルは限定されたサイズである。
【００４６】
一実施構成において、前記デコーダーは、対応テーブルがフルな場合、最も古いイベントまたはイベントシーケンスの前記バイト単位コードが新たなイベントまたはイベントシーケンスに属性付けられるように、最も古いイベントまたはイベントシーケンスを新しいイベントまたはイベントシーケンスで置き換えることで、新たなイベントまたはイベントシーケンスを対応テーブルに挿入するように設定される。
【図面の簡単な説明】
【００４７】
本発明のこれらおよび他の利点および機能は、以下の本発明に関する記載により今まで以上に詳しく示される。しかし、以下の添付の図面に限定されるわけではない。
【００４８】
【図１】構造化文書をブロック形式で示した図である。
【図２】本発明の一実施形態における構造化文書圧縮装置をブロック形式で示した図である。
【図３】本発明の一実施形態における構造化文書解凍装置をブロック形式で示した図である。
【図４】図２の圧縮装置により実行される処理手順のフローチャートである。
【図５】図２の圧縮装置により実行される処理手順のフローチャートである。
【図６】図２の圧縮装置により実行される処理手順のフローチャートである。
【図７】図３の解凍装置により実行される処理手順のフローチャートである。
【発明を実施するための形態】
【００４９】
図１は、ヘッダHDおよび主要要素を具備する構造化文書１を図示している。前記主要要素MELは、型識別子Typeと、一連の属性 Att.1, Att.2, ... Attnと、値 Valと、を具備する。前記主要要素MELの前記値は、"主要要素の下位要素"である１つまたは複数の構造化要素４を有してもよく、それぞれ型識別子Typeと、一連の属性 Att.1-Attnと、値 Valと、を具備する。それぞれの要素４の前記値は、それ自身が１つまたは複数の構造化または非構造化部分要素を備えてもよい。前記非構造化要素は、文字列，整数，浮動小数点数などといった既知のフォーマットを有する。それぞれの要素または部分要素は、前記要素の構造を定義する型と関連付けられている。構造化文書の要素のそれぞれの型は、スキーマ(例えばXML言語おけるXMLスキーマ)によって定められる。
【００５０】
構造化文書の構造化要素は、XMLまたはHTMLやSVGなどのXMLにより生成された言語により以下のフォームを有する。
【００５１】
<type att1-name="att1-value" att2-name="att2-value" ... 
attn-name ="attb-value">value</type>
【００５２】
ここで、"<type ...>"は、前記文書内の前記要素の開始を定める開始タグであり、
"type"は、型識別子であり、
"</type>"は、前記文書内の前記要素の終わりを定める終了タグであり、
"atti-name=atti-value"は、前記要素の属性"i"の名前であり、
"value"は、構造化または非構造化部分要素を有する前記要素の値である。
【００５３】
図２は、本発明の実施形態における圧縮装置を示している。前記圧縮装置は、圧縮される構造化文書(DOC)を受信するパーサーXSXPと、バイナリエンコーダーBCDと、好適には圧縮されたバイナリストリームBDOCを提供するZLIBのような圧縮モジュールZIPと、を具備する。
【００５４】
前記パーサーは、英数字による文書形式の前記構造化文書(DOC)を分析し、前記文書の構造化要素、すなわち、タグを定義する英数字の文字列、属性、および前記文書を構成する要素の値、を識別するとともに、これらの構造化要素をイベントストリームEVSTに変換する。イベントストリームEVSTの生成は、前記文書DOCの構造化される要素それぞれのための、SAXイベント(SAX: Simple API - Application Program Interface - for XML)のような少なくとも１つのイベントを有する。SAXは、http://www.saxproject.org/. において詳細に定義されている。例えば、XML文書内のXML開始タグまたは終了タグの出現は、SAXイベントである。
【００５５】
前記バイナリエンコーダーBCDは、前記イベントストリームEVSTをバイナリストリーム(BST)に変換する。前記バイナリストリームは、それぞれのイベント若しくは２つまたは３つの連続したイベントのイベントシーケンスのための１バイトコードを有する。前記イベントストリーム内の２つまたは３つの連続したイベントの新たなイベントシーケンスの発生(occurrence)すべてが記録されるとともに、１バイトコードが前記イベントシーケンスに属性付けられる。記録されているイベントシーケンスが他にも発生し前記イベントストリームにおいて検出された場合、前記シーケンスはそれに属性付けられたバイトコードを使用してエンコードされる。
【００５６】
前記バイナリエンコーダーBCDは、シンボルテーブルST1およびシンボルコードマップテーブルSCM1を使用する。これらのテーブルは、コンバータXSXPにより提供されるイベントを含んでいる。これらのテーブルは、テーブルINEVTにより初期化される。前記テーブルINEVTは、コンバータXSXPにより提供される起こりうるイベント、または最も頻繁なイベントを含む。前記テーブルSCM1は、前記テーブルST1内のそれぞれのイベントまたはイベントシーケンスと、１バイトコードとの間の対応を確立する。前記１バイトコードは、イベントまたはイベントシーケンスをエンコードするために前記エンコーダBCDにより使用される。前記バイナリエンコーダーBCDにより実行されるエンコーディング処理の間、前記テーブルST1は、前記エンコーダによりエンコードされた最終イベントまたはイベントシーケンスを有する。
【００５７】
前記バイナリエンコーダーBCDにより提供されるバイナリストリームは、バイト単位である。すなわち、それぞれのバイトまたはバイナリストリームの連続したバイトシーケンスは、整数バイトを使用してエンコードされる前記構造化文書DOCの一部に対応する。したがって、前記バイナリエンコーダーBCDにより提供される前記バイナリストリーム(BST)に、ZLIBのような圧縮アルゴリズムが効果的に適用可能となる。
【００５８】
本発明における一実施形態によると、前記バイナリストリーム(BST)は、圧縮されたバイナリストリームBDOCを提供する圧縮モジュールZIPによりさらに圧縮される。前記モジュールZIPは、ZLIBのような従来の圧縮アルゴリズムを実装する。
【００５９】
図３は、本発明の一実施形態における解凍装置を図示している。前記解凍装置は、バイナリデコーダーBDCDと、圧縮装置に適用された前記文書である構造化文書DOCを提供するコンバータSXXPと、を具備する。
【００６０】
本発明における一実施形態によると、前記解凍装置は、バイナリストリームBDOCに適用される解凍モジュールDZIPを、さらに具備する。前記解凍モジュールDZIPは、実施されているZLIBのような従来の解凍アルゴリズムによるイニシャル解凍処理を行なうとともに、前記デコーダーBDCDにより処理されるバイナリストリームBSTを提供する。
【００６１】
前記バイナリデコーダーBDCDは、解凍装置に適用された前記バイナリストリーム(BST)または、解凍モジュールDZIPにより提供されたバイナリストリーム(BST)をイベントストリームEVSTに変換する。前記コンバータSXXPは、前記バイナリデコーダーBDCDにより提供された前記イベントストリームEVSTを、前記構造化文書(DOC)を構成しているタグに変換する。
【００６２】
前記バイナリデコーダーBDCDは、前記エンコーダBCDで使用された前記テーブルST1およびSCM1と同様のシンボルテーブルST2およびシンボルコードマップテーブルSCM2を使用する。これらのテーブルは、同じテーブルINEVTにより初期化される。前記テーブルINEVTは、コンバータXSXPから提供される、起こりうるイベントまたは最も頻繁なイベントを含む。前記テーブルSCM2は、それぞれのイベントまたは前記テーブルST2のイベントシーケンスと、前記バイナリストリーム(BST)に現れる１バイトコード間との対応を確立する。前記バイナリデコーダーBDCDにより実行されるデコーディング処理の間、前記テーブルST2は、前記デコーダーBDCDにより提供された前記イベントストリームEVSTに現れる最後のイベントまたはイベントシーケンスを有する。
【００６３】
XMLおよびSAXの場合の、SAXイベントを以下の表１にリストする。
【００６４】
【表１】
2009543243.tif 000003
【００６５】
要素の開始をリポートするイベントSTART_ELTという一般的な開始要素はない。代わりに、SAX START_ELTイベントは、特定の属性イベントATTR_#attおよび特定のSTART_ELT_#eltイベントに分かれる。従って、無限のATTR_#attイベントおよびSTART_ELT_#eltが、以下の表２にリストされるように仮想的(virtually)にイベントテーブルに属する。
【００６６】
【表２】
2009543243.tif 000004
【００６７】
名前空間、要素の名前、属性の名前というXMLの構造的なアイテムネームを格納するために３つの動的辞書(dynamic dictionaries))が使用される。これらの文字列辞書は動的であるとともにエンコーディング処理の間にADD_NS，ADD_ENAMEおよびADD-ANAMEの特別イベントの助けを得て成長する。初期設定では、これらの辞書は空に初期化されている。
【００６８】
現在分かっているイベントは、表１に記載されている。すべてのSAXイベントは、対応するSAXイベントコールバックにより定められる。３つの特別なイベントであるADD_NS，ADD_ENAMEおよびADD_ANAMEは、名前空間，要素の名前または、属性の名前を対応する辞書に動的に追加するために使用される。
【００６９】
UID番号は、イベントを明白に定められる固定数値IDである。しかし、これは以下に説明するようにイベントのエンコードに使用される値ではない。イベントは、０，１つまたはいくつかのパラメータを持っている(carry)。前記パラメータは対応する動的文字列辞書を指し示す文字列または数値である。文字列は、０で終端される(terminating)とともに、UTF-8フォーマットでエンコードされる。
【００７０】
図４は、前記バイナリエンコーダーBCDにより実行される処理を示している。図４における前記処理は、ステップS1からS17を具備する。この処理には、前記シンボルテーブルST1および前記シンボルコードマップテーブルSCM1を使用する。前記テーブルST1は、表１および表２上にリストされたすべてのイベントが含まれるようにテーブルINEVTにより事前に初期化されている。テーブルST1およびSCM1は、例えば127個など限定された数のイベントを有する。
【００７１】
ステップS1において、前記イベントストリームEVSTは、前記ドキュメントから前記コンバータXSXPにより提供される前記ストリームEVSTすべてのイベントが処理されるまで(ステップS2)、イベント毎にリード(read)される。このステップにおいて、３つのイベントがFIFOバッファ(First-In First-Out) Bevtにロードされる。テーブルSCM1は、前記テーブルST1内のそれぞれのイベントとコード(code)間との対応を確立する。前記コードは、前記エンコーダBCDにより生成される前記バイナリストリーム(BST)のイベントをエンコードするために使用される。前記テーブルST1およびSCM1内のそれぞれのイベントに対応する前記コードは、例えば、テーブルSCM1内のイベントの位置に相当する。
【００７２】
ステップS2において、前記イベントストリームEVSTが終了に達した場合に、前記エンコーダBCDにより実行される処理は終了する。ステップ S3，S4，S5において、前記バッファBevtのそれぞれの記憶域(memory location)のコンテンツは、ヌル(null)と比較される。もし、バッファBevt内の３番イベントBevt[0]だけがヌルでないなら、前記イベントBevt[0]を含むシンボルsymが、ステップS6で生成される。ステップS7において、前記イベントBevt[0]に対応する前記コードは、テーブルSCM1から決定される。このコードおよびイベントに関係するパラメータは、前記エンコーダBCDにより生成された前記バイナリストリーム(BST)に挿入される。
【００７３】
ステップS8において、前記シンボルsymは、シンボルテーブルST1およびシンボルコードマップテーブルSCM1を更新するために使用される。図５および図６を参照しながら以下で説明されるテーブルST1およびSCM1の更新処理は、もしまだこれらのテーブルに前記シンボルがないならば、前記シンボルを前記テーブルに挿入するステップと、前記テーブルST1の先頭に前記シンボルを置くステップと、で構成される。このようにテーブルST1は、最も新しいシンボルが前記テーブルの先頭にリストされるように配置される。
【００７４】
その後、ステップS9において最も古いイベントBevt[0]は、前記バッファBevtの外にプッシュされる。そして、新たなイベントが前記イベントストリームEVSTからリードされるとともに前記バッファBevtのBevt[2]の領域(location)にロードされるステップであるステップS1を新たに繰り返す(new interactioin)処理を続ける。
【００７５】
もし、ステップS4においてBevt[1]がヌルでなかったならば、ステップS10において、Bevt[0]およびBevt[1]の結合(concantenation)によるシンボルsymである sym = Bevt[0]//Bevt[1] が生成される。もし、ステップS11において前記シンボルsymがテーブルST1にまだないならば、ステップ S6-S9が実行される。そうでないならば、ステップS12において前記バッファBevtは、１イベント(Bevt[0]のコンテンツ)をバッファBevtの外にプッシュするためにシフトされる。ステップS13において、前記シンボルsym=Bevt[0]//Bevt[1]に対応する前記コードは、テーブルSCM1から決定される。このコードおよび前記イベントBevt[0]およびBevt[1]に関係するパラメータは、前記エンコーダBCDにより生成された前記バイナリストリーム(BST)に挿入される。前記処理は、前記シンボルsymに含まれるイベントによりテーブルST1およびSCM1を更新するステップS8と、バッファBevtをもう一度シフトするステップS9と、を続ける。注目すべきは、ステップS12およびステップS9の実行により、２つのイベントBevt[0]およびBevt[1]が処理されているので、２つのイベントがバッファBevtの外にプッシュされることである。そして、２つの新しいイベントがイベントストリームEVSTからリードされるとともに、前記バッファBevtのBevt[1]およびBevt[2]の領域にロードするステップS1を新たに繰り返す処理を続ける。
【００７６】
もし、ステップS3においてBevt[2]がヌルでなかったならば、ステップS14において、Bevt[0]，Bevt[1]およびBevt[2]の結合によるシンボルsymであるsym = Bevt[0]//Bevt[1]//Bevt[2]が生成される。もし、ステップS15において前記シンボルsymがテーブルST1にまだないならば、ステップS10の処理を続ける。そうでないならば、ステップS16において前記バッファBevtは１つのイベントをバッファの外にプッシュするためにシフトする。ステップS17において、前記シンボルsym = Bevt[0]//Bevt[1]//Bevt[1]に対応する前記コードは、テーブルSCM1から決定される。このコード並びにイベントBevt[0]，Bevt[1]およびBevt[2]に関係するパラメータは、前記エンコーダBCDにより生成された前記バイナリストリーム(BST)に挿入される。そして、前記シンボルsymに含まれる３つのイベントによりテーブルST1およびSCM1を更新するステップS8およびバッファBevtがもう一度シフトされるステップS9の前記処理を続ける。前記バッファBevtは、このようにステップS16、S12およびS9により３回シフトされる。したがって、前記バッファBevtは、３つのイベント処理後において新たな繰り返しによりステップS1を再び実行したときには空である。
【００７７】
図５は、ステップS8において実行される処理20を示している。ステップS21からS28を有する前記処理20は、前記テーブルST1およびSCM1を１つのシンボルsymにより更新する。前記シンボルは３つまでのイベントを含んでいる。第１ステップS21において、カウンターiが初期化される。ステップS22において、もしシンボルsymのi番目のイベントがヌルならば、前記処理は終了する。そうでないならば、変数evt-2およびevt-1に記憶された、以前に処理された２つのイベントがヌルかそうでないかをテストするためにステップS23およびS24が実行される。ステップS25において、もし前記以前に処理された２つのイベントがヌルである場合には、前記イベントevtと同等なシンボルをテーブルST1およびSCM1に挿入する処理が実行される。ステップS26において、変数evt-2は、変数evt-1の値に、変数evt-1は、変数evtの値に更新されるとともにカウンターiに1が加算される。その後、２つまたは３つのイベントによりシンボルsymを処理するステップS22を新たに繰り返す処理を続ける。
【００７８】
もしステップS24において、変数evt-1に記憶された以前に処理されたイベントがヌルでなかった場合、evt-1およびevtの結合したイベントと同等なシンボルをテーブルST1およびSCM1への挿入する処理がステップS27において実行される。そして処理はステップS25を続ける。このように、もし変数evt-1がヌルでないならば、前記シンボルevt-1//evtおよびevtは、連続的にテーブルST1およびSCM1に挿入される。
【００７９】
もしステップS23において、変数evt-2に記憶された以前に処理されたイベントがヌルでなかった場合、evt-2，evt-1，およびevtの結合したイベントと同等なシンボルをテーブルST1およびSCM1に挿入する処理がステップS28において実行される。そして前記処理はステップS27を続ける。このように、もし変数evt-1およびevt-2がヌルでないならば、前記シンボルevt-2//evt-l//evt，evt-1//evtおよびevtは、連続的にテーブルST1およびSCM1に挿入される。
【００８０】
図６は、シンボルsymのシンボルテーブルST1およびシンボルコードマップテーブルSCM1への挿入処理30を示している。ステップS31からS35を有する前記処理30は、前記処理20のステップS25，S27，およびS28において実行される。最初のステップS31において、テーブルST1から前記シンボルsymがサーチされる。ステップS32において、もしテーブルST1においてシンボルsymが見つかったならば、前記シンボルsymはテーブルST1から取り除かれるとともにこのテーブルの先頭に挿入される。そうでないならば、ステップS33においてもしテーブルST1がフル(full)でないならば、前記シンボルsymがテーブルST1の先頭に挿入されるとともに、テーブルST1のサイズと等しいコードに対応するテーブルSCM1の位置に挿入される(ステップS34)。前記シンボルは、このようにテーブルSCM1の最後に挿入される。ステップS33において、もしテーブルST1がフルであったならば、ステップS35が実行される。このステップにおいて、最も古いシンボルがテーブルST1から取り除かれる。前記シンボルsymは、ST1の先頭に挿入されるとともに後者のコードに対応するように、テーブルSCM1の取り除かれたシンボルの位置に挿入される。
【００８１】
テーブルST1およびSCM1は、直近の127のイベントを有しているので、前記イベントストリームEVSTでの新たなイベントの発生により、これらのテーブルから外部へのプッシュがなされる。この場合、そのようなイベントの第１発生は、テーブルINEVTにより提供されるイベントコードを使用した２バイトを使用してエンコードされる。イベントをエンコードするそれぞれのコードの第１ビット(最上位ビット)は、イベントのエンコードが１バイトでなされたか２バイトでなされたかどうかを示しており、7または15の他のビットは、テーブルSCM1またはINEVTにより提供されたイベントコードである。このようにステップS7(図４)において、もし前記イベントがテーブルSCM1に属していない場合、前記イベントは、テーブルINEVTにより指定された２バイトによりエンコードされる。前記コードの第１ビットが１である場合はイベントは２バイトによりエンコードされることを示している。
【００８２】
処理される新たなイベントがSTART_ELEMENT_eltidまたはATTRIBUTE_attid(表２を参照)の場合、そのようなイベントは、特別イベントADD_NS，ADD_ENAME，およびADD_ANAMEを使用して定められる。
【００８３】
前記エンコーダBCD(図４)により実行される処理は、今から例を用いて説明される。以下のXMLタグシーケンスがエンコードされるものであると想定する。
【００８４】
<a><b><b/><b><b/>...                       (1)
【００８５】
このXMSシーケンスは、前記パーサーXSXPにより処理され、以下のイベントストリームを生成する。
【００８６】
START_ELT_1, START_ELT_2, END_ELT, START_ELT_2, END_ELT    (2)
【００８７】
さらに、初期化後の前記シンボルテーブルST1は、以下のコンテンツを有する。
【００８８】
【表３】
2009543243.tif 000005
【００８９】
前記テーブルST1の前記イベントは、直近のイベントがテーブルの先頭に記憶されるように配置される。前記テーブルの先頭のイベントIDLEは、存在するイベントではないが、前記テーブルの初期化中および初期化後に挿入されたイベントを分けるために使用される。"code"欄は、テーブルSCM1により提供されるように、テーブルST1のそれぞれのシンボルに対応するコードを示す。
【００９０】
エンコーディング処理の第１繰り返し(iteration)において、イベントSTART_ELT_1，START_ELT_2およびEND_ELTは、ステップS1においてバッファBevtにロードされる。前記ステップ S2，S3，S14，S15，S10，S11，S6-S9が、前記エンコーダBCDにより連続して実行される。ステップS7において、バイト25によりエンコードされた第１イベントSTART_ELT_1は、前記エンコーダBCDにより提供されるバイナリストリームに挿入される。ステップS8において、イベントSTART_ELT_1は、以下のようにテーブルST1の先頭に移動させられる。
【００９１】
【表４】
2009543243.tif 000006
【００９２】
処理20の変数evt-1およびevt-2がヌルであった場合、処理20(ステップS8)の実行中に、シンボルSTART_ELT_1だけが、テーブルST1の先頭に挿入される。
【００９３】
エンコーディング処理の第２繰り返しにおいて、前記バッファBevtには、ステップS1において前記イベントストリームの次のイベントSTART_ELT_2がロードされるため、前記バッファは、イベントSTART_ELT_2，END_ELTおよびSTART_ELT_2を有する。前記エンコーダBCDは、その後ステップS2，S3，S14，S15，S10，S11，S6-S9 を再び実行する。ステップS7において、バイト27によりエンコードされた第２イベントSTART_ELT_2が、前記エンコーダBCDにより提供されるバイナリストリームに挿入される。処理20(ステップS8)の実行中、シンボルSTART_ELT_1//START_ELT_2およびSTART_ELT_2は、以下の表に示すように、テーブルST1(変数 evt-2はヌル)の先頭に連続的に挿入される。
【００９４】
【表５】
2009543243.tif 000007
【００９５】
シンボルSTART_ELT_1//START_ELT_2を挿入する前には、テーブルST1はフルである。従って、このシンボルを挿入する場合に、テーブルST1の終わりのシンボルATTR_52は取り除かれるとともにコード127が新たなシンボルSTART_ELT_1//START_ELT_2に属性づけられる。その後、前記シンボルSTART_ELT_2は、テーブルST1の先頭に移動させられる。
【００９６】
エンコーディング処理の第３繰り返しにおいて、前記バッファBevtには、ステップS1において前記イベントストリームの次のイベントEND_ELTがロードされるため、前記バッファは、イベントEND_ELT，START_ELT_2およびEND_ELTを有する。前記エンコーダBCDは、その後ステップS2，S3，S14，S15，S10，S11，S6-S9を再び実行する。ステップS7において、バイト4によりエンコードされた第３イベントEND_ELTが、前記エンコーダBCDにより提供される前記バイナリストリーム(BST)に挿入される。処理20(ステップS8)の実行中、前記シンボルSTART_ELT_1//START_ELT_2//END_ELT，START_ELT_2//END_ELTおよびEND_ELTは、以下の表６に示すように、テーブルST1の先頭に連続的に挿入される。
【００９７】
【表６】
2009543243.tif 000008
【００９８】
前記シンボルSTART_ELT_1//START_ELT_2//END_ELTを挿入する前に、テーブルST1はフルである。したがって、このシンボルを挿入する場合に、テーブルST1の最後のシンボルSTART_ELT_51は取り除かれるとともに、前記コード126が、新しいシンボルSTART_ELT_1//START_ELT_2//END_ELTに属性付けられる。その後、前記シンボルSTART_ELT_2//END_ELTは、テーブルST1の先頭に挿入されるとともに、テーブルから取り除かれる最後のシンボルであるコード125が与えられる(receives)。その後、シンボルEND_ELTは、テーブルST1の先頭に移動させられる。
【００９９】
エンコーディング処理の第４繰り返しにおいて、前記バッファBevtには、ステップS1において前記イベントストリームの次のイベントがロードされるため、前記バッファは、イベントSTART_ELT_2およびEND_ELTを、バッファの第１および第２位置に有する。前記エンコーダBCDはその後ステップS2，S3，S14，S15およびS10，S11を再び実行する。前記シンボルSTART_ELT_2//END_ELTが、テーブルST1に属しているので、前記エンコーダBCDは、ステップS12，S13およびS8，S9をさらに実行する。その結果、２つの連続したイベントSTART_ELT_2およびEND_ELTのシーケンスが、１バイトコード125でエンコードされる。前記１バイトコード125はステップS13において前記エンコーダBCDにより提供されるバイナリストリームに挿入される。ステップS8において、シンボルSTART_ELT_2およびEND_ELTは、テーブルST1の先頭に連続的に移動させられるとともに、２つおよび３つの対応する連続したイベントシーケンスがテーブルST1およびテーブルSCM1に挿入される。つまり、以下の表７に示すように、前記シンボルSTART_ELT_2//END_ELT//START_ELT_2，END_ELT//START_ELT_2，START_ELT_2, END_ELT//STARTJELT_2//END_ELT，START_ELT_2//END_ELTおよびEND_ELTは、連続的に挿入されるかテーブルST1の先頭に移動させられ、必要であればテーブルSCM1にも挿入される。
【０１００】
【表７】
2009543243.tif 000009
【０１０１】
前記XMLシーケンス<a><b><b/><b><b/>は以下のバイトコードのシーケンスによりエンコードされることになる。
【０１０２】
25/27/4/125                                (3)
【０１０３】
図７は、前記バイナリデコーダーBDCDにより実行される処理を示している。図７の前記処理は、ステップS41-S45を具備する。この処理においてもシンボルテーブルST2およびシンボルコードマップテーブルSCM2を使用する。前記テーブルST2は、事前に初期化され、前記の表１および表２にリストされているすべてのイベントを含んでいる。テーブルST2およびSCM2は、例えば128など限定された数のイベントを有する。
【０１０４】
ステップ41において、前記デコーダーBDCDは、デコードするために前記バイナリストリーム(BST)の次のコードをリードする。もし、ステップS42において前記バイナリストリーム(BST)の最後に達しなかった場合には、前記デコーダーはステップS43を実行する。前記ステップS43では、リードされたコードが、テーブルシンボルコードマップSCM2を使用してシンボル、すなわち１つまたは複数の連続したイベントに変換される。ステップS44において、前記シンボルはイベントに変換される。ステップ45において、テーブルSCM2およびST2は、ステップS44の実行後に得られるそれぞれのイベントにより処理20が実行されることにより更新される。
【０１０５】
前記デコーダーBDCDにより実行されるデコーディング処理を、今からエンコーディング処理のために図解された上記の例を使用して説明する。この例において、デコーダーはバイトコードシーケンス(2)をデコードする。
【０１０６】
第１繰り返しにおいて、前記デコーダーはバイナリストリーム内のコード25をリードする。表３に示すような初期テーブルST2に対応するテーブルSCM2内において、コード25は、１つのイベントを有するシンボルSTART_ELT_1に対応する。その後、前記デコーダーは、このように得られた前記イベントを、提供するイベントストリームに挿入する。前記テーブルST2は、イベントSTART_ELT_1を前記テーブルの先頭に移動させることにより更新する。第１繰り返しの最後において、テーブルST2には表４のシンボルが含まれている。
【０１０７】
第２繰り返しにおいて、前記デコーダーBDCDはバイナリストリームの次のコード27をリードする。テーブルSCM2において、コード27は、１つのイベントを有するシンボルSTART_ELT_2に対応する。その後前記デコーダーは、このように得られた前記イベントを、提供する前記イベントストリームに挿入する。前記テーブルST2およびSCM2は、コード127と関連付けられているシンボルSTART_ELT_1//START_ELT_2が追加されることにより更新される。テーブルST2の先頭にこのシンボルは置かれている(put)。テーブルST2は、イベントSTART_ELT_2を前記テーブルの先頭に移動させることによりさらに更新される。第２繰り返しの最後において、テーブルST2には、表５のシンボルが含まれている。
【０１０８】
第３繰り返しにおいて、前記デコーダーBDCDはバイナリストリームの次のコード4をリードする。テーブルSCM2において、コード4は、１つのイベントを有するシンボルEND_ELTに対応する。その後前記デコーダーは、このように得られた前記イベントを、提供する前記イベントストリームEVSTに挿入する。前記テーブルST2およびSCM2は、コード126と関連付けられているシンボルSTART_ELT_1//START_ELT_2//END_ELT、およびコード125と関連付けられているシンボルSTART_ELT_2//END_ELTが追加されることにより更新される。これらのシンボルはテーブルST2の先頭に置かれている。テーブルST2は、イベントEND_ELTを前記テーブルの先頭に移動させることによりさらに更新される。第３繰り返しの最後において、テーブルST2には、表６のシンボルが含まれている。
【０１０９】
第４繰り返しにおいて、前記デコーダーBDCDは、バイナリストリームの次のコート125をリードする。テーブルSCM2において、コード125は、２つのイベントを有するシンボルSTART_ELT_2//END_ELTに対応する。その後前記デコーダーは、このように得られた前記イベントを、提供する前記イベントストリームEVSTに挿入する。前記テーブルST2およびSCM2は、イベントSTART_ELT_2およびEND_ELTが連続してテーブルST2の先頭に移動させられるとともにテーブルST2およびSCM2に２つおよび３つの連続したイベントシーケンスが挿入されることで、更新される。第４繰り返しの最後において、テーブルST2には、表７のシンボルが含まれている。
【０１１０】
このように前記デコーダーBDCDは、前記イベントストリーム(2)を提供し、その後コンバータSXXPによりXMLタグシーケンス(1)に変換される。
【０１１１】
３つの異なる設定(setup)において、MPEG-7およびMPEG-21の228のテストファイルのコレクション(collection)のシミュレーションが行なわれている。
【０１１２】
これらのシミュレーションで扱われた名前空間、要素の名前および属性の名前を含んでいる外部のタグ名前テーブルは、使用するか、または使用しない。ブートストラップ辞書のように前記タグ名前テーブルを使用しているZLIBのポスト圧縮は、イベントストリームEVSTの出力に対して行なわれる。さらに、コメント、要素間の余白、およびプレフィックスマッピングは、転送さるか、または転送しない。
【０１１３】
第１設定においては、タグ名前テーブルが使用され、コメント、余白およびプレフィックスマッピングは、削除されている。入力されるXMLファイルそのまま(raw)では、平均圧縮比19.15が観測され、ZLIB圧縮されたXML入力ファイルと比較すると圧縮比6.58が観測される。
【０１１４】
第２設定において、タグ名前テーブルが使用され、コメント、余白およびプレフィックスマッピングは、保持されている。入力されるXMLファイルそのままでは、平均圧縮比4.01が観測され、ZLIB圧縮されたXML入力ファイルと比較すると圧縮比1.30が観測される。
【０１１５】
第３設定において、タグ名前テーブルは使用されず、余白およびプレフィックスマッピングは、削除されている。入力されるXMLファイルそのまま(raw)では、平均圧縮比4が観測され、ZLIB圧縮されたXML入力ファイルと比較すると圧縮比1.30が観測される。
【０１１６】
上述の例に照らして、本発明における方法および装置は、いろいろなバリエーションの実装またはアプリケーションに影響しやすいことは当業者にとり明らかである。特に、本発明は、XML言語またはHTMLまたはSVGといったXML言語により生成されたものに限定されない。本発明はさらに一般的にすべての構造言語文書に適用される。
【０１１７】
StAX (Streaming API for XML)およびDOM (Document Object Model)といったSAX以外の他のアプリケーションプログラムインターフェース(API)は、イベントストリームを生成するのに使用される。DOMの場合には、前記文書の構造は、ノードを有するツリー状構造を示す。前記イベントストリームの前記イベントはツリー状構造内のノードに対応しており、ツリー状構造の定義済みの経路に従って連続的に考えられている。
【０１１８】
本発明は上述した、同じコードに関連付けられた１から３つのイベントのシーケンスを生成するためのアルゴリズムに限定するものではない。２つまたは３つ以上のイベントのシーケンスがこのように生成されることで、１バイトコードがいくつかのイベントをエンコードできる。さらにイベントを集めシーケンスにグルーピングするための他のアルゴリズムを使用してもよい。例えば、前記イベントストリームEVST内で一度しか発生しないイベントシーケンスを前記テーブルへ挿入することを防ぐために、イベントシーケンスの２度目の発生後のみ、連続したイベントのシーケンスをテーブルSTおよびSCMに挿入する、ということを提供してもよい。このように前記イベントは、テーブルSTおよびSCM内でそれほど早く変更されない。いくつかのイベントは、構造化文書から生成されるイベントストリーム中にたまにしか現れない。したがって、そのようなイベントを含むイベントシーケンスの生成を防ぐことを提供してもよい。
【符号の説明】
【０１１９】
４      要素、構造化要素
【図１】
2009543243.tif 000010
【図２】
2009543243.tif 000011
【図３】
2009543243.tif 000012
【図４】
2009543243.tif 000013
【図５】
2009543243.tif 000014
【図６】
2009543243.tif 000015
【図７】
2009543243.tif 000016
【国際調査報告】
2009543243.tif 000017
2009543243.tif 000018