(57)【要約】【課題】ＤＴＤを用いることなく、且つ、要素値の位置情報はパス構造が分かる形で保持することができる高い圧縮効率を実現できるＸＭＬのタグ圧縮方法を提供する。【解決手段】ＸＭＬ文書を読み込む段階と、前記ＸＭＬ文書の読み込み中において新たな要素名あるいは属性名を発見すると要素番号を付して第１辞書に格納する段階と、前記ＸＭＬ文書の読み込み中において新たな値を発見すると利用可能なパス番号と前記第１辞書の要素番号を使用してパスを作成しパス番号を付して第２辞書に格納する段階と、前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む段階と、を有する。【選択図】  図１
2004302868.tif 000002
【特許請求の範囲】
【請求項１】
ＸＭＬ文書を読み込む段階と、
前記ＸＭＬ文書の読み込み中において新たな要素名あるいは属性名を発見すると要素番号を付して第１辞書に格納する段階と、
前記ＸＭＬ文書の読み込み中において新たな値を発見すると利用可能なパス番号と前記第１辞書の要素番号を使用してパスを作成しパス番号を付して第２辞書に格納する段階と、
前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む段階と、を有することを特徴とするＸＭＬのタグ圧縮方法。
【請求項２】
ＸＭＬ文書の要素名あるいは属性名を重複しないように登録してそれぞれに要素番号を付して格納した第１辞書を作成する段階と、
前記ＸＭＬ文書中の値のパスを、利用可能なパス番号と前記第１辞書の要素番号を使用して作成しパス番号を付して格納した第２辞書を作成する段階と、
前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む段階と、を有することを特徴とするＸＭＬのタグ圧縮方法。
【請求項３】
前記データ部をさらに汎用圧縮アルゴリズムによって圧縮することを特徴とする請求項１または２に記載のＸＭＬタグ圧縮方法。
【請求項４】
ノードを指定し、前記指定したノードについて請求項１または２に記載の方法により圧縮することを特徴とするＸＭＬのタグ圧縮方法。
【請求項５】
前記請求項１または２に記載の方法によって圧縮したノードのデータ部を、さらに汎用圧縮アルゴリズムによって圧縮することを特徴とする請求項４に記載のＸＭＬのタグ圧縮方法。
【請求項６】
ＸＭＬ文書を前記第１辞書と前記第２辞書と前記データ部に圧縮し、
ファイル属性定義と前記第１辞書と前記第２辞書と前記データ部からなるＸＭＬファイルを作成する段階、をさらに有することを特徴とする請求項１〜５のいずれかに記載のＸＭＬのタグ圧縮方法。
【請求項７】
ＸＭＬ文書を読み込み、前記ＸＭＬ文書の読み込み中において新たな要素名あるいは属性名を発見すると要素番号を付して第１辞書に格納し、前記ＸＭＬ文書の読み込み中において新たな値を発見すると利用可能なパス番号と前記第１辞書の要素番号を使用してパスを作成しパス番号を付して第２辞書に格納する段階と、値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む、ことを特徴とするＸＭＬのタグ圧縮装置。
【請求項８】
ＸＭＬ文書の要素名あるいは属性名を重複しないように登録してそれぞれに要素番号を付して格納した第１辞書と、前記ＸＭＬ文書中の値のパスを利用可能なパス番号と前記第１辞書の要素番号を使用して作成しパス番号を付して格納した第２辞書と、前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形で格納したデータ部と、からなるＸＭＬファイルを送受信する装置。
【請求項９】
ＸＭＬ文書の要素名あるいは属性名を重複しないように登録してそれぞれに要素番号を付して格納した第１辞書と、前記ＸＭＬ文書中の値のパスを利用可能なパス番号と前記第１辞書の要素番号を使用して作成しパス番号を付して格納した第２辞書と、前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形で格納したデータ部と、からなるＸＭＬファイルを読み込み、
前記データ部の各データのパス番号から、前記第２辞書からデータのツリー位置、前記第１辞書からデータの要素名あるいは属性名、前記データ種別文字列からノードパターンをそれぞれ取得して、圧縮前のＸＭＬ文書を復元することを特徴とするＸＭＬのタグ復元装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＸＭＬのタグの圧縮方法およびそれに関連する装置に関する。
【０００２】
特に、本発明はＸＭＬのタグ自体を簡略な数値に数値化して圧縮し、さらに、数値化することにより汎用圧縮アルゴリズムによって高い圧縮効率を得られるＸＭＬのタグ圧縮方法及びそれに関連する装置に関する。
【０００３】
【従来の技術】
一般にＸＭＬ文書の構造は、ＸＭＬ宣言、注釈、要素、属性とからなる。
このうち、ＸＭＬ宣言はＸＭＬ文書であることの宣言であり、注釈は当該ＸＭＬ文書についての注解である。
【０００４】
要素と属性については次のような構造をとる。
例：
＜要素＞
＜要素２  属性１＝”属性値”  属性２＝“属性値“＞要素値
＜要素３＞要素値＜／要素３＞
＜／要素２＞
＜要素２  属性１＝”属性値”  属性２＝“属性値“＞要素値
＜要素３＞要素値＜／要素３＞
＜／要素２＞
＜／要素＞
ＸＭＬ文書は繰り返し構造が任意にとれ、要素や属性の構造にも繰り返しが認められる。また、繰り返しの回数に制限もなく、出現ノードが異なる要素や属性値は同名であっても別のものと認識される。
【０００５】
上記“＜”と“＞”によって囲まれた部分はタグというものであって、通常は冗長な表現を有し、上記繰り返し構造もあって、重複するものも多い。ＸＭＬ文書はテキストファイルであり、データ全体をみるとかなり冗長なデータ構造になっている。ＥＤＩ（Ｅｌｅｃｔｒｏｎｉｃ  Ｄａｔａ  Ｉｎｔｅｒｃｈａｎｇｅ）などで利用する場合、ＸＭＬ文書の全データ長は実際に利用できるデータのデータ長の３倍以上の長さを有していることが多い。
【０００６】
以上の事情により、ＸＭＬ文書を圧縮する要求が高いが、ＸＭＬ文書の構造上タグが必ず入るので、汎用的な圧縮アルゴリズムによってＸＭＬ文書全体を圧縮すると、タグの存在によって圧縮効率が悪い。
【０００７】
これに対して、タグ構造を何らかの形でバイトデータに変換するアルゴリズムを採用し、汎用的な圧縮アルゴリズムを適用するときに圧縮効率を上げる方法が従来からいくつか提案されている。
【０００８】
一つはＸＭＩＬＬ（製品名）に見られるようにタグをバイナリ化するものである。この方法はデータをエレメント、属性、テキストに分割する。
例：
＜ｅｌｔ  ａｔｔ＝”ａｂｃｄ”＞ＸＹＺ＜／ｅｌｔ＞→［ｅｌｔ，ａｔｔ］；［ａｂｃｄ，ＸＹＺ］；［Ｓ０  Ｓ１  ＴＸＴＸ］
もう一つはＭＰＥＧ７（製品名）に見られるように、ＸＭＩＬＬと同様にタグをバイナリ化するものであるが、ＤＴＤ（Ｄｏｃｕｍｅｎｔ  Ｔｙｐｅ  Ｄｅｆｉｎｉｔｉｏｎ）を読み込み、ＤＴＤでノード情報を定義し、その定義でノード位置を数値化し、ノード位置と要素・属性値の関連を記述していく方法である。
【０００９】
さらにもう一つは、ＸｍｌＺｉｐ（製品名）に見られるように、圧縮のアルゴリズムに汎用圧縮アルゴリズムＺＩＰを使用し、ドキュメントノードはサブツリーごとに分割し、サブツリーにＩＤを付し、それぞれのツリーを圧縮して格納する方法があった。
【００１０】
【非特許文献１】
「ｈｔｔｐ：ｗｗｗ．ｌｎｔ．ｄｅ／￣ｋａｕｐ／ｐａｐｅｒ／ｉｃｍｅ−２００２．ｐｄｆ」
【００１１】
【発明が解決しようとする課題】
しかし、上記従来のＸＭＬ文書の圧縮方法は、ＸＭＬ文書の繰り返しのパス構造（ツリー構造）が圧縮後にも存在し、多数のパスが存在して圧縮効率が悪かった（ＸＭＩＬＬ等）。
【００１２】
ＭＰＥＧ７の方法によれば、煩雑なパス構造が圧縮できるが、ＤＴＤを用いるため適用の柔軟性に欠ける問題があった。
【００１３】
そこで、本発明が解決しようとする課題は、「文書型定義」（ＤＴＤ）を用いることなく、且つ、要素値の位置情報はパス構造が分かる形で保持することができる高い圧縮効率を実現できるＸＭＬのタグ圧縮方法を提供することにある。
【００１４】
【課題を解決するための手段】
本発明のＸＭＬのタグ圧縮方法は、
ＸＭＬ文書を読み込む段階と、
前記ＸＭＬ文書の読み込み中において新たな要素名あるいは属性名を発見すると要素番号を付して第１辞書に格納する段階と、
前記ＸＭＬ文書の読み込み中において新たな値を発見すると利用可能なパス番号と前記第１辞書の要素番号を使用してパスを作成しパス番号を付して第２辞書に格納する段階と、
前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む段階と、を有することを特徴とするものである。
【００１５】
また、本発明のＸＭＬのタグ圧縮方法は、
ＸＭＬ文書の要素名あるいは属性名を重複しないように登録してそれぞれに要素番号を付して格納した第１辞書を作成する段階と、
前記ＸＭＬ文書中の値のパスを、利用可能なパス番号と前記第１辞書の要素番号を使用して作成しパス番号を付して格納した第２辞書を作成する段階と、
前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む段階と、を有することを特徴とするものである。
【００１６】
前記データ部をさらに汎用圧縮アルゴリズムによって圧縮することができる。ノードを指定し、前記指定したノードについて前記方法により圧縮することができる。
【００１７】
前記方法によって圧縮したノードのデータ部を、さらに汎用圧縮アルゴリズムによって圧縮することができる。ＸＭＬ文書を前記第１辞書と前記第２辞書と前記データ部に圧縮し、ファイル属性定義と前記第１辞書と前記第２辞書と前記データ部からなるＸＭＬファイルを作成する段階、をさらに有することもできる。
【００１８】
本発明によるＸＭＬのタグ圧縮装置は、
ＸＭＬ文書を読み込み、前記ＸＭＬ文書の読み込み中において新たな要素名あるいは属性名を発見すると要素番号を付して第１辞書に格納し、前記ＸＭＬ文書の読み込み中において新たな値を発見すると利用可能なパス番号と前記第１辞書の要素番号を使用してパスを作成しパス番号を付して第２辞書に格納する段階と、値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む、ことを特徴とするものである。
【００１９】
本発明によるＸＭＬファイルを送受信する装置は、
ＸＭＬ文書の要素名あるいは属性名を重複しないように登録してそれぞれに要素番号を付して格納した第１辞書と、前記ＸＭＬ文書中の値のパスを利用可能なパス番号と前記第１辞書の要素番号を使用して作成しパス番号を付して格納した第２辞書と、前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形で格納したデータ部と、からなることを特徴とするものである。
【００２０】
本発明によるＸＭＬのタグ復元装置は、
ＸＭＬ文書の要素名あるいは属性名を重複しないように登録してそれぞれに要素番号を付して格納した第１辞書と、前記ＸＭＬ文書中の値のパスを利用可能なパス番号と前記第１辞書の要素番号を使用して作成しパス番号を付して格納した第２辞書と、前記ＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形で格納したデータ部と、からなるＸＭＬファイルを読み込み、
前記データ部の各データのパス番号から、前記第２辞書からデータのツリー位置、前記第１辞書からデータの要素名あるいは属性名、前記データ種別文字列からノードパターンをそれぞれ取得して、圧縮前のＸＭＬ文書を復元することを特徴とするものである。
【００２１】
【発明の実施の形態】
次に、本発明による「ＸＭＬのタグ圧縮方法」の好ましい実施形態について以下に説明する。
【００２２】
図１は本発明の一実施形態によるＸＭＬのタグ圧縮方法の全体の流れを簡明に示したフローチャートである。
【００２３】
図１に示すように、本実施形態によるＸＭＬのタグ圧縮方法は、処理が開始されると（ステップ１００）、まずＸＭＬ文書を読み込む（ステップ１１０）。本実施形態による圧縮は、ＸＭＬ文書を読み込みながら逐次以下の処理を行うのが好ましい。
【００２４】
ＸＭＬ文書の読み込みにおいて要素が読み込まれたら、スタックを生成し、要素名をスタックに格納しはじめる（ステップ１２０）。なお、スタックは要素名を格納するための場所あるいはひとまとまりのデータをいう。
【００２５】
以降のＸＭＬ文書の読み込みにおいては、新たな要素名あるいは属性名を発見することになるが、新たな要素名あるいは属性名を発見した場合にはそれらの要素名あるいは属性名を第１辞書に登録して第１辞書を作成し（ステップ１３０）、新たな値を発見した場合にはそのパス（ＸＭＬのツリー構造におけるツリー位置）を第２辞書に登録して第２辞書を作成し（ステップ１４０）、値を発見した場合には前記第２辞書に登録したパスを用いて位置を特定して具体的なデータをデータ部に追加することによりデータ部を生成する（ステップ１５０）。
【００２６】
ＸＭＬ文書の終了タグを発見するとそのスタックの格納を終了し、ファイル属性定義と前記第１辞書と前記第２辞書と前記データ部によって圧縮ＸＭＬファイルを構成する（ステップ１６０）。圧縮ＸＭＬファイルを生成したことで以上のＸＭＬのタグ圧縮を終了する（ステップ１７０）。
【００２７】
圧縮ＸＭＬファイルは下記の構造を有している。
［ファイル属性定義］［第１辞書］［第２辞書］［データ］［ＥＯＦ］
あるいは
［ファイル属性定義］［データ］［第１辞書］［第２辞書］［ＥＯＦ］
以上は本実施形態によるＸＭＬのタグ圧縮方法の全体の流れであるが、次に上記第１辞書と第２辞書とデータ部の生成、および圧縮ＸＭＬファイルの生成について詳細に説明する。
【００２８】
図２は第１辞書と第２辞書とデータ部の生成、および圧縮ＸＭＬファイルの生成の流れを示している。
【００２９】
図２において、要素名のスタックへの格納が開始されると（ステップ２００）、第１辞書のノードオブジェクトを生成し、名前を格納する（ステップ２１０）。ここで、ノードオブジェクトを生成するのは、ＸＭＬ文書がノード構造を有しているので、ノードごとにノードオブジェクトを生成するようにしたためである。
【００３０】
次に、ＸＭＬ文書の読み込みながら、要素名・属性名を取得する（ステップ２２０）。
【００３１】
ＸＭＬ文書の読み込み中において新たな要素名あるいは属性名を発見すると要素番号を付して第１辞書に格納する（ステップ２３０）。
【００３２】
図３は第１辞書と第２辞書とを生成するところを、前出のＸＭＬのデータの例を用いて概念的に示したものである。
【００３３】
ステップ２２０，２３０においては、図３に示すように、上のＸＭＬデータのはじめから読み込んでいくと、要素、要素２、属性１、属性２、属性３・・・というように、ＸＭＬデータの読み込み中において新たに要素名あるいは属性名を発見する。新たに要素名あるいは属性名を発見したときは、第１辞書の右欄にその名前（要素名）を書き込み、発見した順番に要素番号を付して登録する。
【００３４】
この場合に、すでに存在している要素名あるいは属性名を発見したときは、第１辞書への登録をしない。
【００３５】
ここで、第１辞書の構造を示す。第１辞書は下記の構造を有している。
［第１辞書のサイズ］｛［要素番号］［文字列長］文字列｝
次に、ＸＭＬ文書の読み込み中に、新たな値、すなわち、属性値や要素値を発見した場合には（ステップ２４０）、値のパス（ツリー位置）を生成する（ステップ２５０）。
【００３６】
値のパスの生成は、第２辞書にすでに登録されている利用可能なパス番号と第１辞書に登録されている要素番号を使用して生成し、生成したパスにパス番号を付して第２辞書に格納するようにする。
【００３７】
上記処理は図２においては、第１辞書からパスに該当する要素番号を抽出し（ステップ２６０）、第２辞書にパスの登録の有無を検索し、パスとパス番号を登録する（ステップ２７０）、と表現されている。
【００３８】
図３に第２辞書のパスの登録の具体例を示している。
【００３９】
図３に示すように、最初の最初の値である「属性１＝”属性値”  属性２＝”属性値”」を発見すると、「要素２」までは要素−要素２というパスになるので／００１／００２というパスを生成する。こごて「／」は要素であることを示している。「００１」「００２」は第１辞書を検索し登録された「要素」と「要素２」の要素番号を使用して数値化する。要素−要素２のパスはパス番号００１を付して第２辞書に登録する。
【００４０】
次に、「属性１」のパスを生成する。属性１のパスは「要素−要素２−属性１」であり、これは図３に示すように００１＠００３となっている。この「００１」は第２辞書にすでに登録されているパス番号００１である。パス番号００１を使用することにより、「要素−要素２」までのパスが代用されて表されている。このように、すでに第２辞書に登録されたパスのパス番号を使用することによりパスの記述が圧縮される。「＠００３」の「＠」は、属性であることを示している。「００３」は第１辞書に登録された属性１の要素番号である。
【００４１】
このように、属性１のパスは、「００１＠００３」と記述することができ、数値化されるとともに、圧縮される。属性１のパスは、パス番号００２を付され、第２辞書に登録される。
【００４２】
以降のパスの登録は同様に行われ、属性２のパスは「００１＠００４」と記述され、パス番号００３を付されて第２辞書に登録される。
【００４３】
要素３のパスは「／００１／００２／００５」と記述され、パス番号００４を付されて第２辞書に登録される。
【００４４】
ここで、第２辞書の構造を示す。第２辞書は下記の構造を有している。
［第２辞書のサイズ］｛［パス番号］［文字列長］文字列｝
ＸＭＬ文書の読み込み中において値を発見するとＸＭＬ文書中の値を前記第２辞書のパス番号とデータ種別文字列とデータの形でデータ部に書き込む（ステップ２８０）。
【００４５】
データ部のデータ構造は下記の通りである。
｛［連番］［データ種別文字列］［データ長］［データ文字列］｝［０ｘ００００］
ここで、データ種識別文字列は以下のものがある。
Ｂ：親ノードへ戻る。
Ｆ：子ノードへ戻る。
Ａ：属性値を表す。この文字が出現する場合には文字列の最後になる。
Ｅ：要素を表す。この文字が出現する場合には文字列の最後になる。
Ｚ：圧縮ノード。圧縮したノードを示す。単独で使用する。
【００４６】
これらデータ種別文字列とパス番号を使用することにより、「データ文字列」の位置が確定される。すなわち、データはパス構造が分かる形で保持される。
【００４７】
以上のようにしてＸＭＬ文書を読み込みながら、第１辞書と第２辞書とデータ部を作成し、要素値が残っているか否かを確認し（ステップ２９０）、あれば上記の処理を繰り返し、無ければ圧縮ＸＭＬファイルを作成する（ステップ３００）。
【００４８】
圧縮ＸＭＬファイルは、前述したように、
［ファイル属性定義］［第１辞書］［第２辞書］［データ］［ＥＯＦ］
あるいは
［ファイル属性定義］［データ］［第１辞書］［第２辞書］［ＥＯＦ］
の構造を有している。
【００４９】
以上の説明と上記圧縮ＸＭＬファイルの構造から分かるように、本発明によれば、圧縮ＸＭＬファイルは「文書型定義」（ＤＴＤ）を用いることなく要素値の位置情報はパス構造が分かる形で保持している。
【００５０】
また、ＸＭＬのタグが少ないデータ量の数値と文字に圧縮されている。これにより、タグ自体のデータ量が大幅に圧縮される。
【００５１】
また、タグが繰り返し現れる構造を有しているので、第１辞書と第２辞書にそれぞれ登録された要素番号とパス番号とを繰り返し使用することにより、全体としてコンパクトに圧縮することができる。
【００５２】
さらに、タグが数値と文字に置き換えられていることにより、汎用の圧縮アルゴリズムによって効率よく圧縮することができる。
【００５３】
この汎用圧縮アルゴリズムによる圧縮に関し、ＸＭＬ文書のデータ全体を上記方法で圧縮することができる。また、一部のノードについて上記方法で圧縮することもできる。さらに、データ部全体を上記方法で圧縮した後に汎用圧縮アルゴリズムによってさらに圧縮することができる。また、ノードを指定し、前記指定したノードについて、本発明の方法によって圧縮した後に汎用圧縮アルゴリズムによってさらに圧縮することができる。
【００５４】
いずれにしても、本発明によれば、本発明の圧縮によってタグが数値・文字のコンパクトな表現になっているので、高効率に圧縮できる。また汎用圧縮アルゴリズムを併用することでさらに圧縮できる。
【００５５】
さらに、本発明の方法によれば、データ部はＸＭＬ文書のデータ構造を保持している。すなわち、データ部の各データのパス番号から、第２辞書からデータのツリー位置、第１辞書からデータの要素名あるいは属性名、データ種別文字列からノードパターンをそれぞれ取得することにより、圧縮前のＸＭＬ文書を復元することができる。
【００５６】
【発明の効果】
以上の説明から明らかなように、本発明の「ＸＭＬのタグ圧縮方法」によれば、第１辞書に要素名と要素番号を登録し、第２辞書にパスとパス番号を登録し、ＸＭＬのタグを順次第１辞書と第２辞書の番号によって数値化するので、データの量が著しく圧縮される。
【００５７】
また、データ部を読み込んで、データ部の各データのパス番号から、第２辞書からデータのツリー位置、第１辞書からデータの要素名あるいは属性名、データ種別文字列からノードパターンをそれぞれ取得することにより、圧縮前のＸＭＬ文書を復元することができる。つまり、ＤＴＤを用いることなく圧縮ＸＭＬファイルはＸＭＬ文書の構造を保持することができる。
【００５８】
さらに、タグが数値化されるので、汎用圧縮アルゴリズムによってさらに高効率に圧縮することができるのである。
【図面の簡単な説明】
【図１】本発明の一実施形態によるＸＭＬのタグ圧縮方法の全体の処理の流れを示したフローチャート。
【図２】第１辞書の作成と第２辞書の作成とデータ部の登録の処理の流れを示したフローチャート。
【図３】第１辞書の作成と第２辞書の作成を具体例を用いて説明する図。
【符号の説明】
１１０  ＸＭＬ文書を読み込む処理
１３０  第１辞書を作成する処理
１４０  第２辞書を作成する処理
１５０  データ部を追加する処理
１６０  圧縮ＸＭＬファイルを作成する処理
【図１】
2004302868.tif 000003
【図２】
2004302868.tif 000004
【図３】
2004302868.tif 000005