(57)【特許請求の範囲】
【請求項１】
所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力手段と、
前記所定の形式のデータ列に含まれる１以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定手段と、
前記階層情報設定手段で設定された１以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成手段と、
前記ファイル入力手段により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定手段と、
前記指定手段により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記階層情報設定手段は、さらに、前記区切り文字に関連するデータのデータ型を設定するデータ型設定手段を備え、
前記符号化手段は、前記データ型設定手段により設定されたデータ型に基づいて前記領域のデータ列に含まれるデータを符号化することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記構造情報生成手段は、前記構造情報をＮ（Ｎは自然数）次元配列構造として生成することを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記構造情報は、予め設定された構造化記述言語に基づいて記述されており、
前記符号化手段は、前記構造情報を記述した構造化記述言語で、前記領域のデータ列に含まれるデータを符号化することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記構造情報生成手段は、さらに、前記構造情報を生成する際に同一構造が繰り返し現われる場合、該同一構造を１つの情報に集約する情報集約手段を備えることを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記予め設定された構造化記述言語は、バイナリＸＭＬであることを特徴とする請求項１に記載の情報処理装置。
【請求項７】
所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力工程と、
前記所定の形式のデータ列に含まれる１以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定工程と、
前記階層情報設定工程で設定された１以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成工程と、
前記ファイル入力工程により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定工程と、
前記指定工程により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化工程と、
を備えることを特徴とする符号化方法。
【請求項８】
コンピュータに請求項７に記載の符号化方法を実行させる為のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書データの符号化技術に関するものである。
【背景技術】
【０００２】
従来、Ｗ３Ｃで策定されたＸＭＬ（eXtensible Markup Language）言語仕様では、データをＸＭＬ形式でエンコーディングする場合、ＵＴＦ−８、ＵＴＦ−１６などの方式で符号化（テキストエンコーディング）するのが一般的である。
【０００３】
一方、携帯電話、デジタルカメラ、プリンタなどハードウェアリソースの少ない機器では、ＸＭＬデータのサイズ縮小や、パース処理の高速化が求められている。このような要求を満たすため、バイナリＸＭＬという符号化技術も近年用いられてきている。バイナリＸＭＬでは、ＸＭＬの要素や属性などの構造をバイナリデータに符号化し、要素や属性の値を整数や小数などの本来のデータ型で符号化する。バイナリデータとすることで、ＵＴＦ−８やＵＴＦ−１６などのテキスト符号化よりも、データサイズが小さくなり、パース処理が高速化される。
【０００４】
さらに、ＩＳＯで策定されたＦａｓｔ  Ｉｎｆｏｓｅｔ（非特許文献１）では、ＸＭＬデータ内の属性値や要素内容を、整数や小数など本来のデータ型に適したバイナリ形式で符号化することができる。そのため、さらに、データサイズの圧縮やデータ処理時間の短縮を行なうことができる。
【非特許文献１】Ｆａｓｔ  Ｉｎｆｏｓｅｔ（ＩＳＯ／ＩＥＣ  ２４８２４−１）仕様書、ＩＳＯ、２００７年
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述のデータ符号化技術には以下のような問題点があった。例えば、属性値や要素の内容（値）として、整数や小数など単純なデータ型だけではなく、複雑なデータ構造の値が記述される場合もある。例えば、ＳＶＧ（Scalable Vector Graphics）形式の文書データにおいては、属性値として描画コマンドや座標情報が組み合わさった複雑な値が記述される。このような場合、汎用的にデータ構造を認識して符号化するのは困難である。データ構造を符号化するのみであれば、例えばＳＯＡＰエンコーディングを使ってテキスト形式のＸＭＬにエンコーディングすることもできる。しかしこの方法では、元のデータよりデータサイズが大きく、文字列解析処理が必要であるので、本来の目的であるデータサイズの縮小や処理の効率化は達成されないことになる。そのため、テキストＸＭＬのように一連の文字列としてエンコーディングするのが一般的であった
つまり、テキストエンコーディングする場合、属性値や要素内容として記述するデータが、整数や小数など文字以外のデータであっても、文字としてエンコーディングしなければならなかった。数値を文字でエンコーディングした場合、バイナリ表現でエンコーディングするよりもデータサイズが大きくなり、処理にも時間を要する。そのため、上述のＳＶＧのように、こうした独自の構造が文書データの大部分を占める場合には、サイズ縮小やパースの高速化などを実現することが困難であった。
【０００６】
本発明は、上述の問題点に鑑みなされたものであり、複雑な属性値を持つ要素含まれるデータに対しても、データサイズの縮小や解析処理速度の向上の効果が得られる符号化技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の問題を解決するために、本発明の情報処理装置は以下の構成を備える。すなわち、所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力手段と、前記所定の形式のデータ列に含まれる１以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定手段と、前記階層情報設定手段で設定された１以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成手段と、前記ファイル入力手段により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定手段と、前記指定手段により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化手段と、を備える。
【０００８】
上述の問題を解決するために、本発明の符号化方法は以下の構成を備える。すなわち、所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力工程と、前記所定の形式のデータ列に含まれる１以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定工程と、前記階層情報設定工程で設定された１以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成工程と、前記ファイル入力工程により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定工程と、前記指定工程により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化工程と、を備える。
【発明の効果】
【０００９】
本発明によれば、複雑な属性値を持つ要素含まれるデータに対しても、データサイズの縮小や解析処理速度の向上の効果が得られる符号化技術を提供することができる。
【発明を実施するための最良の形態】
【００１０】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１１】
（第１実施形態）
本発明に係る情報処理装置の第１実施形態として、ＳＶＧ形式のデータを処理するデータ符号化装置を例に以下に説明する。
【００１２】
＜装置構成＞
図１は、第１実施形態のデータ符号化装置を構成するコンピュータ装置のブロック図である。なお、データ符号化装置はそれぞれ単一のコンピュータ装置で実現してもよいし、必要に応じた複数のコンピュータ装置に各機能を分散して実現するようにしてもよい。複数のコンピュータ装置で構成される場合は、互いに通信可能なようにＬＡＮなどを介して接続される。
【００１３】
１０１は、データ符号化装置１００全体を制御する中央演算処理装置（ＣＰＵ）である。１０２はプログラムやパラメータを格納するＲＯＭである。１０３は外部装置などから供給されるプログラムやデータを一時記憶するＲＡＭである。
【００１４】
１０４は、データ符号化装置１００に接続されるハードディスクやメモリカードなどの外部記憶装置である。外部記憶装置１０４として、着脱可能な磁気ディスクや光ディスクなどを使用しても良い。１０５は、ユーザの操作を受け付けデータを入力するための入力デバイスと接続するための入力インタフェースである。入力デバイスとしては、キーボード１０９ａなどのほかマウス１０９ｂなどのポインティングデバイスがある。
【００１５】
１０６は、データ符号化装置１００の保持するデータや供給されたデータを表示するためのモニタ１１０と接続するためのモニタインタフェースである。１０７は、インタフェース１１１などのネットワークに接続するためのネットワークインタフェースである。１０８は上述の各部を相互に接続するシステムバスである。
【００１６】
＜装置の動作＞
・全体動作
図２は、ＳＶＧ（Scalable Vector Graphics）形式のデータの一例を示す図である。ＳＶＧ形式のデータにおいては、属性値に”Ｍ”や”ｃ”といった描画コマンドや、”４３４．２２８”や”２２８．５６２”といった座標情報の組み合わせが記述される。
【００１７】
図３は、第１実施形態に係る情報処理装置の動作フローチャートである。ここでは、図２のＳＶＧデータを符号化する方法について説明する。なお、以下の各ステップは、データ符号化装置１００のＣＰＵ１０１がプログラムを実行することにより実現される。
【００１８】
ステップＳ３０１では、ＳＶＧデータ（ファイル）を読み込み（ファイル入力手段）、当該ＳＶＧデータに含まれる処理対象部分（構造部分）を指定する。つまり、以降の処理の対処となる所定の形式のデータ列の領域を指定する。ここでは、図２に示したＳＶＧデータのｐａｔｈ要素のｄ属性の値の部分の指定を受け付ける。この処理は、データ符号化装置１００が、予め指定された条件に基づいて自動的に指定するよう構成してもよいし、入力デバイスを介してユーザからの指定を受け付けるよう構成してもよい。なお、予め指定された条件として、要素および属性の名称を指定してもよいし、要素および属性の内容（値）のデータ長の閾値を設定しても良い。
【００１９】
ステップＳ３０２では、ステップＳ３０１で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、処理の効率化を考えて、図２の下段に示すような描画命令単位の配列構造を指定する。
【００２０】
ステップＳ３０３では、ステップＳ３０２で決定したデータ構造にしたがって、ステップＳ３０１で指定した処理対象部分のデータ列に対し階層情報を設定する（階層情報設定手段）。具体的には、ステップＳ３０１で指定した処理対象部分に含まれる区切り文字に対し、当該区切り文字に関連するデータの表す階層（階層位置）および識別子を指定する。
図４は、階層情報の指定を例示的に示す図である。階層情報は、各区切り文字に対する階層および識別子名から構成される。区切り文字は、データの境目となる文字で、ユーザが任意に指定可能である。ここでは、”Ｍ”、”ｃ”、”，”を区切り文字とする。
【００２１】
階層は、区切り文字で区切られた文字列同士の包含関係を示すためのものである。ここでは、配列の単位である描画命令文字”Ｍ”，”ｃ”が最上位階層となる。そして、小数値の区切り文字”，”が２番目の階層となる。
【００２２】
識別子名は、同じ階層の文字を区別するためのものであり、ここでは配列を区別するために描画命令文字”Ｍ”，”ｃ”を指定する。区別する必要がなければ指定しなくてもよい。
【００２３】
なお、階層情報には、データ型指定を行うこともできる（データ型設定手段）。データ型を指定することにより、後述する符号化（Ｓ９０７）の際に、当該指定されたデータ型に従って区切り文字で区切られた個々の値を効率的に符号化することができる。ここでは、座標情報の文字列に対しｆｌｏａｔ型を指定している。
【００２４】
ステップＳ３０４では、ステップＳ３０３で指定された階層情報を構造情報に変換する（構造情報生成手段）。具体的には、ステップＳ３０３で指定された階層構造に基づいて、各階層情報の相互の関係を定義する構造情報を生成する。
【００２５】
図６は、図４に示した”ルール２”に対する階層情報を構造情報に変換した結果を例示的に示す図である。構造情報は、１以上の管理構造体から構成されている。また、それぞれの管理構造体には、階層（ｌａｙｅｒ）、識別子名（ｎａｍｅ）、データ型（ｖａｌｕｅ＿ｔｙｐｅ）が記述される。また、下位階層の管理構造体のリスト（ｌｏｗｅｒ＿ｌｉｓｔ）、上位階層の管理構造体へのリンク（ｕｐｐｅｒ＿ｌｉｎｋ）も併せて記述される。管理構造体同士の関係は、ｌｏｗｅｒ＿ｌｉｎｋ、ｕｐｐｅｒ＿ｌｉｎｋに記述され、複数の下位階層を持つ場合は文書内の出現順にｌｏｗｅｒ＿ｌｉｓｔにリンクされる。この管理構造体は、特定のプログラミング言語に依存するものではない。なお、階層情報を構造情報に変換する処理の詳細については図５〜図８を参照して後述する。
【００２６】
ステップＳ３０５では、ステップＳ３０１で入力したＳＶＧデータを、ステップＳ３０３で指定された階層識別子とステップＳ３０４で変換した構造情報とを使って符号化する。具体的には、テキストＸＭＬあるいはバイナリＸＭＬのような構造化記述言語に基づき符号化を行う。なお、当該符号化の処理の詳細については図９〜図１２を参照して後述する。
【００２７】
・階層情報を構造情報に変換する処理動作の詳細（ステップＳ３０４）
図５は、図３のルール２の階層情報を構造情報に変換する詳細動作フローチャートである。
【００２８】
ステップＳ５０１では、最初に指定されている階層情報に対し管理構造体を生成する。ルール２では、”ｃ”という区切り文字に対し［１］｛ｃ｝［２］｛｝（ｆ）という階層情報が指定されている。そこで［１］｛ｃ｝という階層情報に対し管理構造体ａｄｄｒＡを生成し、ｌｅｖｅｌ＝１、ｎａｍｅ＝”ｃ”を記述する。
【００２９】
ステップＳ５０２では、ａｄｄｒＡのポインタをカレントポインタへ代入する。カレントポインタは、現在処理中である管理構造体を示すためのものであり、後述の処理で使われる。
【００３０】
ステップＳ５０３では、ルール内に未処理の階層情報があるかどうかを確認する。ある場合はステップＳ５０４に進み、ない場合はステップＳ５０８に進む。
【００３１】
ステップＳ５０４では、未処理の階層情報の一つに対し管理構造体を生成する。ルール２では、［１］｛ｃ｝という階層の次に［２］｛｝（ｆ）という階層があるので、管理構造体ａｄｄｒＢを生成し、ｌｅｖｅｌ＝２、ｖａｌｕｅ＿ｔｙｐｅ＝”ｆｌｏａｔ”を記述する。
【００３２】
なお、新しく生成した管理構造体は、上位階層の管理構造体のｌｏｗｅｒ＿ｌｉｓｔにリンクしなければならない。この処理は、カレントポインタを利用して行われる。
【００３３】
ステップＳ５０５では、ステップＳ５０４で生成した管理構造体が、カレントポインタの指す管理構造体の階層より下位であるかどうかを確認する。下位階層であればステップＳ５０７へ進む。下位階層でなければステップＳ５０６に進む。
【００３４】
ステップＳ５０６では、カレントポインタが指す管理構造体の一つ上位の管理構造体をカレントポインタに代入する。その後、ステップＳ５０５に戻る。
【００３５】
ステップＳ５０７では、カレントポインタが指す管理構造体のｌｏｗｅｒ＿ｌｉｓｔを検出し、生成した管理構造体をリンクする。リンク後、ステップＳ５０２に戻る。
【００３６】
例えば、新しく生成した管理構造体がａｄｄｒＢの場合、カレントポインタはａｄｄｒＡを指している。ａｄｄｒＢのｌｅｖｅｌはａｄｄｒＡのｌｅｖｅｌより下位であるので、ａｄｄｒＡのｌｏｗｅｒ＿ｌｉｓｔにａｄｄｒＢがリンクされる。一方、新しく生成した管理構造体がａｄｄｒＣの場合は、カレントポインタはａｄｄｒＢを指している。ａｄｄｒＢのｌｅｖｅｌはａｄｄｒＣと同じであるので、上位階層を辿る。上位階層はａｄｄｒＡであるので、ａｄｄｒＡのポインタがカレントポインタへ代入される。ａｄｄｒＡのｌｅｖｅｌはａｄｄｒＣのｌｅｖｅｌより下位であるので、ａｄｄｒＡのｌｏｗｅｒ＿ｌｉｓｔにａｄｄｒＣがリンクされる。ａｄｄｒＤ以降も同様にして処理し、また、ルール１に対しても同様の処理を行う。
【００３７】
ステップＳ５０８では、カレントポインタを１階層ずつ上位の階層に更新し、最上位まで到達したら終了する。
【００３８】
図６は、図５の処理により生成される構造情報を例示的に示す図である。図６に示すように、構造情報の中には、同一構造の管理構造体が繰り返し現われる場合がある。ここでは、ｌｅｖｅｌ＝２の管理構造体に同一構造の管理構造体ものが現われる。そのため、これらをまとめて表記することで、符号化したときのサイズを小さくすることができる。この処理もカレントポインタを利用して行うとよい。
【００３９】
また、構造情報は入れ子構造である。カレントポインタは、上位階層に更新された時点で、更新前の管理構造体に戻ることはない。つまり、更新前の管理構造体に対し新しい情報が付け加わることは無い。そこで、カレントポインタが上位階層へ更新された時点で、更新前の管理構造体の集約処理を行う（情報集約手段）。ここでは、このときの管理構造体をｃｌｏｓｅｄ＿ｓｔｒｕｃｔｕｒｅと呼ぶ。
【００４０】
図７は、管理構造体の集約処理の動作フローチャートである。
【００４１】
ステップＳ７０１では、ｃｌｏｓｅｄ＿ｓｔｒｕｃｔｕｒｅのｕｐｐｅｒ＿ｌｉｎｋを辿り、ｃｌｏｓｅｄ＿ｓｔｒｕｃｔｕｒｅをリンクしている上位階層のｌｏｗｅｒ＿ｌｉｓｔを特定する。
【００４２】
ステップＳ７０２では、ステップＳ７０１で特定したｌｏｗｅｒ＿ｌｉｓｔの中に、ｃｌｏｓｅｄ＿ｓｔｒｕｃｔｕｒｅの一つ前にリンクされている管理構造体があるかどうかを確認する。なければ集約処理を終了し、あればステップＳ７０３に進む。
【００４３】
ステップＳ７０３では、管理構造体のメンバと、ｃｌｏｓｅｄ＿ｓｔｒｕｃｔｕｒｅのメンバとが一致しているかどうかを確認する。一致していなければ集約処理を終了する。一致していればステップＳ７０４に進む。
【００４４】
ステップＳ７０４では、値ｉｔｅｒａｔｅ＿ｎｕｍをインクリメントしｃｌｏｓｅｄ＿ｓｔｒｕｃｔｕｒｅをｌｏｗｅｒ＿ｌｉｓｔから削除する。
【００４５】
図８は、図６に示した構造情報に対し集約処理をした際の構造情報を例示的に示す図である。図６における６個の同一の管理構造体（ａｄｄｒＢ〜ａｄｄｒＧ）がａｄｄｒＢとして集約されていることが分かる。ただし、ｉｔｅｒａｔｅ＿ｎｕｍ＝６を設定することにより、当該管理構造体が６回繰り返して現れることが表現されている。
【００４６】
・符号化の処理動作の詳細（ステップＳ３０５）
図９は、符号化処理の詳細動作フローチャートである。
【００４７】
ステップＳ９０１では、入力されたＳＶＧデータの構造化文書部分を読み込む。なければ処理を終了する。
【００４８】
ステップＳ９０２では、ステップＳ９０１で読み込んだ構造化文書部分が、ステップＳ３０１で指定された構造化文書部分であるか否かを判定する。つまり、ここでは、ｐａｔｈ要素のｄ属性であるかどうかを確認する。
【００４９】
指定された部分でなければ、通常のバイナリＸＭＬ符号化を行い、ステップＳ９０１に戻る。指定された部分であれば、ステップＳ９０３に進む。
【００５０】
ステップＳ９０３では、構造化文書部分内にデータがあるかどうかを確認する。ない場合は符号化処理の必要は無いためステップＳ９０１に戻る。あれば、ステップＳ９０４において、当該構造化文書部分内のデータを読み込む。
【００５１】
ステップＳ９０５では、ステップＳ９０４で読み込んだデータがステップＳ３０３で指定されたどのルールと一致するかを判別する。なお、このとき、一意に決定できない場合はステップＳ９０４に戻って次の文字を読み込み、再度判別を行う。そして、一意に決定できた場合はステップＳ９０６に進む。
【００５２】
ステップＳ９０６では、ステップＳ３０４で生成した対応する構造情報を取得しバイナリ符号化する。
【００５３】
図１０は、図２の属性値文字列の描画コマンド”ｃ”の部分に対しバイナリ符号化を実行した結果を示す図である。つまり、図２の属性値文字列の描画コマンド”ｃ”の部分に対して、図８のルール２に対する構造情報を取得し、バイナリエンコーディングを実行した結果である。
【００５４】
管理構造体の各々は、その種類とメンバの値で符号化される。具体的には
最上位階層の場合は”００”、
中間階層の管理構造体は”０１”、
リーフの管理構造体は”１０”
にそれぞれ符号化される。続けて、
最上位階層の管理構造体は識別子名（ｎａｍｅ）、
中間階層の管理構造体は繰り返し数（ｉｔｅｒａｔｅ＿ｎｕｍ）、
リーフの管理構造体はｉｔｅｒａｔｅ＿ｎｕｍとデータ型（ｖａｌｕｅ＿ｔｙｐｅ）
が符号化される。
【００５５】
図１１は、変換テーブルの例を示す図である。上述の、ｎａｍｅとｖａｌｕｅ＿ｔｙｐｅは、図１１に示すような変換テーブルを使って符号化される。ｉｔｅｒａｔｅ＿ｎｕｍは可変長整数で符号化される。先頭ビットが整数のデータ長を示し、続くビットが値を示す。
【００５６】
それぞれの管理構造体は、最上位階層の管理構造体から深さ優先で順に符号化される。例えば、図８に示した構造情報は、最上位階層の管理構造体とリーフの管理構造体からなる。そのため、順に、
最上位階層に対して”００”、
ｎａｍｅ＝”ｃ”に対して”００１１”、
リーフの階層に対して”１０”、
ｉｔｅｒａｔｅ＿ｎｕｍ＝６に対して”０１１０”、
ｖａｌｕｅ＿ｔｙｐｅ＝”ｆｌｏａｔ”に対して”００００”
に符号化される。
【００５７】
ステップＳ９０７では、区切り文字で区切られた文字列を順に符号化する。符号化する際は、対応する管理構造体のｖａｌｕｅ＿ｔｙｐｅを参照して符号化する。符号化後、ステップＳ９０３に戻って、構造化文書部分の次の文字データを処理する。その結果、図１０に示すように、図２に示す属性値文字列の”ｃ”の部分に対しては、６個のｆｌｏａｔ型のデータに符号化される。
【００５８】
なお、ステップＳ３０４において指定された階層識別子のルールは、符号化の際、繰り返し使われることがある。毎回符号化するのは冗長であるので、ステップＳ３０５において、変換した構造情報のトークンを用いるようにするとよい。トークンの符号化データは、先頭に２ビットの”１１”をつけ、管理構造体の符号化データと区別する。トークンは、変換テーブルを用意し適当に値を割り振っても良いが、識別子名自体をトークンとし図１２に示す変換テーブルを用いることもできる。
【００５９】
以上説明したとおり第１実施形態のデータ符号化装置によれば、複雑な属性値を持つ要素含まれるデータに対しても、効率的にバイナリ符号化を実行することが可能となる。つまり、図２に示すＳＶＧデータにおいて従来はテキストとして符号化されていたｐａｔｈ要素のｄ属性に対して、データ構造を考慮したバイナリ符号化を行うことが可能となる。その結果、データサイズの縮小や解析処理速度の向上の効果が得られる。
【００６０】
なお、デコーダ（復号）側では、符号化手順と逆の処理を行い、符号化データを読み取る。このとき、デコーダは、先頭の構造情報を読むことでデータ構造を認識し、必要な領域を確保して順次値を読み込む。
【００６１】
（第２実施形態）
第２実施形態では、属性値が２次元配列を示す場合の符号化について説明する。装置構成については第１実施形態と同様であるので説明は省略する。
【００６２】
＜ＳＶＧデータにおけるアニメーション処理の記述＞
ＳＶＧには、図１３に示すようなアニメーション処理の記述がある。ｔｙｐｅ属性は、アニメーション処理のタイプを示しており、ｔｒａｎｓｌａｔｅの場合は移動処理であることを示す。このとき、移動する距離はｖａｌｕｅｓ属性に記述されており、Ｘ方向の値とＹ方向の値を”，”区切りで、Ｘ，Ｙのペアを“；”区切りで示す。
【００６３】
さらに、アニメーション処理は、実行するタイミングを指定することができ、ｋｅｙＴｉｍｅｓ属性に“；”区切りで示す。ｋｅｙＴｉｍｅｓ属性で記述されたそれぞれのタイミングは、ｖａｌｕｅｓ属性で記述されたそれぞれのＸ、Ｙのペアに対応している。
【００６４】
そのため、配列構造として符号化する際に、ｖａｌｕｅｓ属性の方は２次元配列としておくことでｋｅｙＴｉｍｅｓ属性との対応がとりやすい。また、配列の大きさは属性値の記述内容に依存し不定である。
【００６５】
＜装置の動作＞
・全体動作
第２実施形態に係る情報処理装置の動作を、第１実施形態と同様に図３に沿って説明する。ただし、図１３のＳＶＧデータを符号化する方法について説明する。
【００６６】
ステップＳ３０１では、ＳＶＧデータを読み込み、当該ＳＶＧデータに含まれる処理対象部分（構造部分）を指定する。ここでは、図１３に示したＳＶＧデータのａｎｉｍａｔｅＴｒａｎｓｆｏｒｍ要素のｖａｌｕｅｓ属性、ｋｅｙＴｉｍｅｓ属性の指定を受け付ける。
【００６７】
ステップＳ３０２では、ステップＳ３０１で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、図１３の下段に示すような描画命令単位の配列構造を指定する。
【００６８】
ステップＳ３０３では、ステップＳ３０２で決定したデータ構造にしたがって、ステップＳ３０１で指定した処理対象部分に対し階層情報を設定する。具体的には、ステップＳ３０１で指定した処理対象部分に含まれる区切り文字に対し階層および識別子を指定する。
【００６９】
図１４は、階層情報の指定を例示的に示す図である。ここでは、”，”、”；”といった文字に加え、属性値の開始位置（ｓｔａｒｔ）を区切り文字として扱う。これにより、属性値全体を一つの配列構造にまとめることができる。
【００７０】
また、階層は、配列単位であるｓｔａｒｔが最上位階層、Ｘ，Ｙのペアの区切り文字“；”が２番目の階層、Ｘ方向の値、Ｙ方向の値の区切り文字“，”が３番目の階層となる。なお、属性値内には１つの配列しかないので、識別子名は指定しない。
【００７１】
さらに、Ｘ，Ｙのペアの個数は属性値の記述内容依存なので、図１４のように“；”、“，”の区切り文字に対し繰り返し指定をしておく。  データ型指定は、Ｘ方向、Ｙ方向の値に対し、ｆｌｏａｔ型を指定する。
【００７２】
ステップＳ３０４では、ステップＳ３０３で指定された階層情報を構造情報に変換する。
【００７３】
図１５は、図１４に示したｖａｌｕｅｓ属性に対するルールの階層情報を構造情報を変換した結果を例示的に示す図である。なお、変換処理は、第１実施形態と同様に、図５、図７のフローに沿って行うため説明は省略する。ただし、前述したように、図１３のｖａｌｕｅｓ属性のＸ、Ｙのペアの個数は入力データを実際に読み込むまで分からない。従って管理構造体ａｄｄｒ２のｉｔｅｒａｔｅ＿ｎｕｍは不定になり、ａｄｄｒ３のｉｔｅｒａｔｅ＿ｎｕｍはＸ方向、Ｙ方向の２になる。
【００７４】
ステップＳ３０５では、ステップＳ３０１で入力したＳＶＧデータを、ステップＳ３０３で指定された階層識別子とステップＳ３０４で変換した構造情報とを使って符号化する。
【００７５】
・符号化の処理動作の詳細（ステップＳ３０５）
符号化は、第１実施形態と同様に、図９のフローチャートに沿って実行する。
【００７６】
図１６は、図１３のｖａｌｕｅｓ属性の値に対しバイナリ符号化を実行した結果を示す図である。つまり、図１５の構造情報は、図１２の上段に示したのと同様の符号化ルールに従って順に、
最上位階層に対して”００”、
ｎａｍｅ＝””に対して”１１１１”、
中間階層に対して“０１”、
ｉｔｅｒａｔｅ＿ｎｕｍ＝不定に対して１４ビットのプレースホルダー、
リーフの階層に対して“１０”、
ｉｔｅｒａｔｅ＿ｎｕｍ＝２に対して”００１０”、
ｖａｌｕｅ＿ｔｙｐｅ＝”ｆｌｏａｔ”に対して”００００”
に符号化される。
【００７７】
ステップＳ９０７では、区切り文字で区切られた文字列を順に符号化する。ここでは、図１２のｖａｌｕｅｓ属性のＸ，Ｙのペアを４０個としている。従って、計８０個のｆｌｏａｔ型のデータに符号化される。このとき、Ｘ，Ｙのペアの数が判明するので、プレースホルダーを可変長整数の”４０”を示す”１０００００００１０１０００”に置き換える。
【００７８】
以上説明したとおり第２実施形態のデータ符号化装置によれば、２次元配列の属性値を持つ要素含まれるデータに対しても、効率的にバイナリ符号化を実行することが可能となる。なお、配列は２次元に限られずＮ（Ｎは自然数）次元に拡張可能である。
【００７９】
（第３実施形態）
第３実施形態では、属性値が列ｘ行の２次元配列を示す場合の符号化について説明する。装置構成については第１実施形態と同様であるので説明は省略する。
【００８０】
＜ＳＶＧデータにおける変換処理の記述＞
ＳＶＧには、図１７に示すような描画データの変換処理の記述がある。ｔｒａｎｓｆｏｒｍ属性は、変換処理の内容を示しており、ｍａｔｒｉｘは変換行列であることを示す。このとき、行列の各要素が”，”区切りで並べられている。
【００８１】
＜装置の動作＞
・全体動作
この場合、第２実施形態と同様に、列ｘ行の２次元配列構造としておくことで効率的な処理が行える。第３実施形態に係る情報処理装置の動作を、第１実施形態と同様に図３に沿って説明する。ただし、図１７のＳＶＧデータを符号化する方法について説明する。
【００８２】
ステップＳ３０１では、ＳＶＧデータを読み込み、当該ＳＶＧデータに含まれる処理対象部分（構造部分）を指定する。ここでは、図１７に示したＳＶＧデータのｇ要素のｔｒａｎｓｆｏｒｍ属性の指定を受け付ける。
【００８３】
ステップＳ３０２では、ステップＳ３０１で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、図１７の下段に示すような配列構造を指定する。
【００８４】
ステップＳ３０３では、ステップＳ３０２で決定したデータ構造にしたがって、ステップＳ３０１で指定した処理対象部分に対し階層情報を設定する。具体的には、ステップＳ３０１で指定した処理対象部分に含まれる区切り文字に対し階層および識別子を指定する。
【００８５】
図１８は、階層情報の指定を例示的に示す図である。ここでは、”ｍａｔｒｉｘ（”、”，”といった文字には階層情報を指定するが、’）’については不要であり符号化処理の妨げになるのでｄｅｌｅｔｅを指定しておく。
【００８６】
また、階層は、配列単位であるｍａｔｒｉｘ（が最上位階層、各行列要素の区切り文字“，”が２番目の階層となる。識別子名には”ｍａｔｒｉｘ”を指定している。データ型指定は、ｆｌｏａｔ型を指定する。
【００８７】
ステップＳ３０４では、ステップＳ３０３で指定された階層情報を構造情報に変換する。
【００８８】
図１９は、図１８に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。なお、変換処理は、第１実施形態と同様に、図５、図７のフローに沿って行うため説明は省略する。ただし、ａｄｄｒ２のｉｔｅｒａｔｅ＿ｎｕｍは列数である３、ａｄｄｒ３のｉｔｅｒａｔｅ＿ｎｕｍは行数である２になる。
【００８９】
ステップＳ３０５では、ステップＳ３０１で入力したＳＶＧデータを、ステップＳ３０３で指定された階層識別子とステップＳ３０４で変換した構造情報とを使って符号化する。
【００９０】
・符号化の処理動作の詳細（ステップＳ３０５）
符号化は、第１実施形態と同様に、図９のフローチャートに沿って実行する。
【００９１】
図２０は、図１７のｔｒａｎｓｆｏｒｍ属性の値に対しバイナリ符号化を実行した結果を示す図である。つまり、図１９の構造情報は、図１２の上段に示したのと同様の符号化ルールに従って順に、
最上位階層に対して”００”、
ｎａｍｅ＝”ｍａｔｒｉｘ”に対して（第１実施形態と同様に変換テーブルを用意して）”０００１”、
中間階層に対して“０１”、
ｉｔｅｒａｔｅ＿ｎｕｍ＝３に対して”００１１”、
リーフの階層に対して“１０”、
ｉｔｅｒａｔｅ＿ｎｕｍ＝２に対して”００１０”、
ｖａｌｕｅ＿ｔｙｐｅ＝”ｆｌｏａｔ”に対して”００００”
に符号化される。なお、末尾には最後にバイト単位（８ビット単位）で終了するようにｐａｄｄｉｎｇ”００”が付けられる。
【００９２】
ステップＳ９０７では、区切り文字で区切られた文字列を順に符号化する。ここでは、６個のｆｌｏａｔ型のデータに符号化される。
【００９３】
以上説明したとおり第３実施形態のデータ符号化装置によれば、列ｘ行の２次元配列の属性値を持つ要素含まれるデータに対しても、効率的にバイナリ符号化を実行することが可能となる。
【００９４】
（第４実施形態）
第４実施形態では、構造化文書の子要素の符号化について説明する。装置構成については第１実施形態と同様であるので説明は省略する。
【００９５】
＜メソッド呼び出しのメッセージデータへの変換記述＞
ＸＭＬによるメッセージング技術であるＳＯＡＰには、示すようなメソッド呼び出しをメッセージデータに変換した記述がある。
【００９６】
図２１は、メソッド呼び出しをメッセージデータに変換した記述を例示的に示す図である。＜ｓｏａｐ：ｂｏｄｙ＞要素の子要素として記述されており、＜ｍｙＭｅｔｈｏｄ＞要素がメソッド名、その子要素が各メソッドパラメタを示している。
【００９７】
＜装置の動作＞
・全体動作
この場合も、第１実施形態と同様、配列構造として符号化することで、データサイズの縮小、受信処理の高速化が行える。ここでは、図２１のような構造化文書の子要素に対する場合の実施形態について説明する。
【００９８】
ステップＳ３０１では、メソッド読み出しから変換されたＳＯＡＰのＸＭＬデータを読み込み、当該データに含まれる処理対象部分（構造部分）を指定する。ここでは、図２１に示したデータのｍｙＭｅｔｈｏｄ要素の内容の指定を受け付ける。
【００９９】
ステップＳ３０２では、ステップＳ３０１で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、図２１の下段に示すような配列構造を指定する。
【０１００】
ステップＳ３０３では、ステップＳ３０２で決定したデータ構造にしたがって、ステップＳ３０１で指定した処理対象部分に対し階層情報を設定する。
【０１０１】
図２２は、階層情報の指定を例示的に示す図である。ここでは、属性値（文字）ではなくＸＭＬの要素に対して指定する。
【０１０２】
また、階層は、配列単位であるｍｙＭｅｔｈｏｄ要素が最上位階層、ｘ要素、ｙ要素がそれぞれ２番目の階層となる。本実施例では、識別子名として”ｍｙＭｅｔｈｏｄ”を指定する。データ型指定は、ｘ要素に対してｉｎｔ型、ｙ要素に対してｆｌｏａｔ型を指定する。ＸＭＬのｘｓｉ：ｔｙｐｅ属性の記述を解釈して自動的に型設定することもできる。
【０１０３】
ステップＳ３０４では、ステップＳ３０３で指定された階層情報を構造情報に変換する。
【０１０４】
図２３は、図２２に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。なお、変換処理は、第１実施形態と同様に、図５、図７のフローに沿って行うため説明は省略する。ただし、ａｄｄｒ２のｉｔｅｒａｔｅ＿ｎｕｍはｘ要素の１、ａｄｄｒ３のｉｔｅｒａｔｅ＿ｎｕｍはｙ要素の１になる。
【０１０５】
ステップＳ３０５では、ステップＳ３０１で入力したデータを、ステップＳ３０３で指定された階層識別子とステップＳ３０４で変換した構造情報とを使って符号化する。
【０１０６】
・符号化の処理動作の詳細（ステップＳ３０５）
符号化は、第１実施形態と同様に、図９のフローチャートに沿って実行する。
【０１０７】
図２４は、図２１のｓｏａｐ：ｂｏｄｙ要素の値に対しバイナリ符号化を実行した結果を示す図である。つまり、図２３の構造情報は、図１２の上段に示したのと同様の符号化ルールに従って順に、
最上位階層に対して”００”、
ｎａｍｅ＝”ｍｙＭｅｔｈｏｄ”に対して（第１実施形態と同様に変換テーブルを用意して）”０００１”、
リーフの階層に対して“１０”、
ｉｔｅｒａｔｅ＿ｎｕｍ＝１に対して”０００１”、
ｖａｌｕｅ＿ｔｙｐｅ＝”ｉｎｔ”に対して”００１０”、
リーフの階層に対して“１０”、
ｉｔｅｒａｔｅ＿ｎｕｍ＝１に対して”０００１”、
ｖａｌｕｅ＿ｔｙｐｅ＝”ｆｌｏａｔ”に対して”００００”
に符号化される。なお、末尾には最後にバイト単位で終了するようにｐａｄｄｉｎｇ”００００００”が付けられる。
【０１０８】
ステップＳ９０７では、区切り文字で区切られた文字列を順に符号化する。ここでは、要素の値が符号化され、それぞれｘ要素の値として１個のｉｎｔ型のデータ、ｙ要素の値として１個のｆｌｏａｔ型のデータに符号化されることになる。
【０１０９】
以上説明したとおり第４実施形態のデータ符号化装置によれば、ＳＯＡＰのＸＭＬデータに対しても、効率的にバイナリ符号化を実行することが可能となる。
【０１１０】
（他の実施形態）
以上、本発明の実施形態について詳述したが、本発明は、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１１１】
なお、本発明は、前述した実施形態の機能を実現するコンピュータプログラムを、システム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置が、供給されたプログラムコードを読み出して実行することによっても達成される。従って、本発明の機能処理をコンピュータで実現するために、コンピュータにインストールされるプログラムコード自体も本発明の技術的範囲に含まれる。
【０１１２】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。
【０１１３】
プログラムを供給するための記録媒体としては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク、磁気テープ、不揮発性のメモリカード、ＲＯＭなどがある。
【０１１４】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【０１１５】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【０１１６】
【図１】第１実施形態のデータ符号化装置を構成するコンピュータ装置のブロック図である。
【図２】ＳＶＧ形式のデータの一例を示す図である（第１実施形態）。
【図３】第１実施形態に係る情報処理装置の動作フローチャートである。
【図４】階層情報の指定を例示的に示す図である（第１実施形態）。
【図５】図３のルール２の階層情報を構造情報に変換する詳細動作フローチャートである。
【図６】階層情報を構造情報に変換した結果を例示的に示す図である（第１実施形態）。
【図７】管理構造体の集約処理の動作フローチャートである。
【図８】図６に示した構造情報に対し集約処理をした際の構造情報を例示的に示す図である。
【図９】符号化処理の詳細動作フローチャートである。
【図１０】図２の属性値文字列の描画コマンド”ｃ”の部分に対しバイナリ符号化を実行した結果を示す図である。
【図１１】変換テーブルの例を示す図である。
【図１２】変換テーブルの他の例を示す図である。
【図１３】ＳＶＧ形式のデータの一例を示す図である（第２実施形態）。
【図１４】階層情報の指定を例示的に示す図である（第２実施形態）。
【図１５】図１４に示したｖａｌｕｅｓ属性に対するルールの階層情報を構造情報を変換した結果を例示的に示す図である。
【図１６】図１３のｖａｌｕｅｓ属性の値に対しバイナリ符号化を実行した結果を示す図である。
【図１７】ＳＶＧ形式のデータの一例を示す図である（第３実施形態）。
【図１８】階層情報の指定を例示的に示す図である（第３実施形態）。
【図１９】図１８に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。
【図２０】図１７のｔｒａｎｓｆｏｒｍ属性の値に対しバイナリ符号化を実行した結果を示す図である。
【図２１】メソッド呼び出しをメッセージデータに変換した記述を例示的に示す図である。
【図２２】階層情報の指定を例示的に示す図である（第４実施形態）。
【図２３】図２２に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。
【図２４】図２１のｓｏａｐ：ｂｏｄｙ要素の値に対しバイナリ符号化を実行した結果を示す図である。
【符号の説明】
【０１１７】
１００  データ符号化装置
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  外部記憶装置
１０５  入力インタフェース
１０６  モニタインタフェース
１０７  ネットワークインタフェース
１０８  システムバス
【図１】
0004898615.tif 000002
【図２】
0004898615.tif 000003
【図３】
0004898615.tif 000004
【図４】
0004898615.tif 000005
【図５】
0004898615.tif 000006
【図６】
0004898615.tif 000007
【図７】
0004898615.tif 000008
【図８】
0004898615.tif 000009
【図９】
0004898615.tif 000010
【図１０】
0004898615.tif 000011
【図１１】
0004898615.tif 000012
【図１２】
0004898615.tif 000013
【図１３】
0004898615.tif 000014
【図１４】
0004898615.tif 000015
【図１５】
0004898615.tif 000016
【図１６】
0004898615.tif 000017
【図１７】
0004898615.tif 000018
【図１８】
0004898615.tif 000019
【図１９】
0004898615.tif 000020
【図２０】
0004898615.tif 000021
【図２１】
0004898615.tif 000022
【図２２】
0004898615.tif 000023
【図２３】
0004898615.tif 000024
【図２４】
0004898615.tif 000025