説明

情報処理装置および符号化方法

【課題】複雑な属性値を持つ要素含まれるデータに対しても、データサイズの縮小や解析処理速度の向上の効果が得られる符号化技術を提供する
【解決手段】所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力手段と、データ列に含まれる1以上の区切り文字の各々に対して、階層位置を示す階層情報を設定する階層情報設定手段と、階層情報の相互の関係を定義する構造情報を生成する構造情報生成手段と、入力されたファイルから所定の形式のデータ列の領域を指定する指定手段と、指定された領域から区切り文字を検出し、検出された区切り文字と構造情報とに基づいて、指定された領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化手段と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、構造化文書データの符号化技術に関するものである。
【背景技術】
【0002】
従来、W3Cで策定されたXML(eXtensible Markup Language)言語仕様では、データをXML形式でエンコーディングする場合、UTF−8、UTF−16などの方式で符号化(テキストエンコーディング)するのが一般的である。
【0003】
一方、携帯電話、デジタルカメラ、プリンタなどハードウェアリソースの少ない機器では、XMLデータのサイズ縮小や、パース処理の高速化が求められている。このような要求を満たすため、バイナリXMLという符号化技術も近年用いられてきている。バイナリXMLでは、XMLの要素や属性などの構造をバイナリデータに符号化し、要素や属性の値を整数や小数などの本来のデータ型で符号化する。バイナリデータとすることで、UTF−8やUTF−16などのテキスト符号化よりも、データサイズが小さくなり、パース処理が高速化される。
【0004】
さらに、ISOで策定されたFast Infoset(非特許文献1)では、XMLデータ内の属性値や要素内容を、整数や小数など本来のデータ型に適したバイナリ形式で符号化することができる。そのため、さらに、データサイズの圧縮やデータ処理時間の短縮を行なうことができる。
【非特許文献1】Fast Infoset(ISO/IEC 24824−1)仕様書、ISO、2007年
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、上述のデータ符号化技術には以下のような問題点があった。例えば、属性値や要素の内容(値)として、整数や小数など単純なデータ型だけではなく、複雑なデータ構造の値が記述される場合もある。例えば、SVG(Scalable Vector Graphics)形式の文書データにおいては、属性値として描画コマンドや座標情報が組み合わさった複雑な値が記述される。このような場合、汎用的にデータ構造を認識して符号化するのは困難である。データ構造を符号化するのみであれば、例えばSOAPエンコーディングを使ってテキスト形式のXMLにエンコーディングすることもできる。しかしこの方法では、元のデータよりデータサイズが大きく、文字列解析処理が必要であるので、本来の目的であるデータサイズの縮小や処理の効率化は達成されないことになる。そのため、テキストXMLのように一連の文字列としてエンコーディングするのが一般的であった
つまり、テキストエンコーディングする場合、属性値や要素内容として記述するデータが、整数や小数など文字以外のデータであっても、文字としてエンコーディングしなければならなかった。数値を文字でエンコーディングした場合、バイナリ表現でエンコーディングするよりもデータサイズが大きくなり、処理にも時間を要する。そのため、上述のSVGのように、こうした独自の構造が文書データの大部分を占める場合には、サイズ縮小やパースの高速化などを実現することが困難であった。
【0006】
本発明は、上述の問題点に鑑みなされたものであり、複雑な属性値を持つ要素含まれるデータに対しても、データサイズの縮小や解析処理速度の向上の効果が得られる符号化技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
上述の問題を解決するために、本発明の情報処理装置は以下の構成を備える。すなわち、所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力手段と、前記所定の形式のデータ列に含まれる1以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定手段と、前記階層情報設定手段で設定された1以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成手段と、前記ファイル入力手段により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定手段と、前記指定手段により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化手段と、を備える。
【0008】
上述の問題を解決するために、本発明の符号化方法は以下の構成を備える。すなわち、所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力工程と、前記所定の形式のデータ列に含まれる1以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定工程と、前記階層情報設定工程で設定された1以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成工程と、前記ファイル入力工程により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定工程と、前記指定工程により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化工程と、を備える。
【発明の効果】
【0009】
本発明によれば、複雑な属性値を持つ要素含まれるデータに対しても、データサイズの縮小や解析処理速度の向上の効果が得られる符号化技術を提供することができる。
【発明を実施するための最良の形態】
【0010】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【0011】
(第1実施形態)
本発明に係る情報処理装置の第1実施形態として、SVG形式のデータを処理するデータ符号化装置を例に以下に説明する。
【0012】
<装置構成>
図1は、第1実施形態のデータ符号化装置を構成するコンピュータ装置のブロック図である。なお、データ符号化装置はそれぞれ単一のコンピュータ装置で実現してもよいし、必要に応じた複数のコンピュータ装置に各機能を分散して実現するようにしてもよい。複数のコンピュータ装置で構成される場合は、互いに通信可能なようにLANなどを介して接続される。
【0013】
101は、データ符号化装置100全体を制御する中央演算処理装置(CPU)である。102はプログラムやパラメータを格納するROMである。103は外部装置などから供給されるプログラムやデータを一時記憶するRAMである。
【0014】
104は、データ符号化装置100に接続されるハードディスクやメモリカードなどの外部記憶装置である。外部記憶装置104として、着脱可能な磁気ディスクや光ディスクなどを使用しても良い。105は、ユーザの操作を受け付けデータを入力するための入力デバイスと接続するための入力インタフェースである。入力デバイスとしては、キーボード109aなどのほかマウス109bなどのポインティングデバイスがある。
【0015】
106は、データ符号化装置100の保持するデータや供給されたデータを表示するためのモニタ110と接続するためのモニタインタフェースである。107は、インタフェース111などのネットワークに接続するためのネットワークインタフェースである。108は上述の各部を相互に接続するシステムバスである。
【0016】
<装置の動作>
・全体動作
図2は、SVG(Scalable Vector Graphics)形式のデータの一例を示す図である。SVG形式のデータにおいては、属性値に”M”や”c”といった描画コマンドや、”434.228”や”228.562”といった座標情報の組み合わせが記述される。
【0017】
図3は、第1実施形態に係る情報処理装置の動作フローチャートである。ここでは、図2のSVGデータを符号化する方法について説明する。なお、以下の各ステップは、データ符号化装置100のCPU101がプログラムを実行することにより実現される。
【0018】
ステップS301では、SVGデータ(ファイル)を読み込み(ファイル入力手段)、当該SVGデータに含まれる処理対象部分(構造部分)を指定する。つまり、以降の処理の対処となる所定の形式のデータ列の領域を指定する。ここでは、図2に示したSVGデータのpath要素のd属性の値の部分の指定を受け付ける。この処理は、データ符号化装置100が、予め指定された条件に基づいて自動的に指定するよう構成してもよいし、入力デバイスを介してユーザからの指定を受け付けるよう構成してもよい。なお、予め指定された条件として、要素および属性の名称を指定してもよいし、要素および属性の内容(値)のデータ長の閾値を設定しても良い。
【0019】
ステップS302では、ステップS301で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、処理の効率化を考えて、図2の下段に示すような描画命令単位の配列構造を指定する。
【0020】
ステップS303では、ステップS302で決定したデータ構造にしたがって、ステップS301で指定した処理対象部分のデータ列に対し階層情報を設定する(階層情報設定手段)。具体的には、ステップS301で指定した処理対象部分に含まれる区切り文字に対し、当該区切り文字に関連するデータの表す階層(階層位置)および識別子を指定する。
図4は、階層情報の指定を例示的に示す図である。階層情報は、各区切り文字に対する階層および識別子名から構成される。区切り文字は、データの境目となる文字で、ユーザが任意に指定可能である。ここでは、”M”、”c”、”,”を区切り文字とする。
【0021】
階層は、区切り文字で区切られた文字列同士の包含関係を示すためのものである。ここでは、配列の単位である描画命令文字”M”,”c”が最上位階層となる。そして、小数値の区切り文字”,”が2番目の階層となる。
【0022】
識別子名は、同じ階層の文字を区別するためのものであり、ここでは配列を区別するために描画命令文字”M”,”c”を指定する。区別する必要がなければ指定しなくてもよい。
【0023】
なお、階層情報には、データ型指定を行うこともできる(データ型設定手段)。データ型を指定することにより、後述する符号化(S907)の際に、当該指定されたデータ型に従って区切り文字で区切られた個々の値を効率的に符号化することができる。ここでは、座標情報の文字列に対しfloat型を指定している。
【0024】
ステップS304では、ステップS303で指定された階層情報を構造情報に変換する(構造情報生成手段)。具体的には、ステップS303で指定された階層構造に基づいて、各階層情報の相互の関係を定義する構造情報を生成する。
【0025】
図6は、図4に示した”ルール2”に対する階層情報を構造情報に変換した結果を例示的に示す図である。構造情報は、1以上の管理構造体から構成されている。また、それぞれの管理構造体には、階層(layer)、識別子名(name)、データ型(value_type)が記述される。また、下位階層の管理構造体のリスト(lower_list)、上位階層の管理構造体へのリンク(upper_link)も併せて記述される。管理構造体同士の関係は、lower_link、upper_linkに記述され、複数の下位階層を持つ場合は文書内の出現順にlower_listにリンクされる。この管理構造体は、特定のプログラミング言語に依存するものではない。なお、階層情報を構造情報に変換する処理の詳細については図5〜図8を参照して後述する。
【0026】
ステップS305では、ステップS301で入力したSVGデータを、ステップS303で指定された階層識別子とステップS304で変換した構造情報とを使って符号化する。具体的には、テキストXMLあるいはバイナリXMLのような構造化記述言語に基づき符号化を行う。なお、当該符号化の処理の詳細については図9〜図12を参照して後述する。
【0027】
・階層情報を構造情報に変換する処理動作の詳細(ステップS304)
図5は、図3のルール2の階層情報を構造情報に変換する詳細動作フローチャートである。
【0028】
ステップS501では、最初に指定されている階層情報に対し管理構造体を生成する。ルール2では、”c”という区切り文字に対し[1]{c}[2]{}(f)という階層情報が指定されている。そこで[1]{c}という階層情報に対し管理構造体addrAを生成し、level=1、name=”c”を記述する。
【0029】
ステップS502では、addrAのポインタをカレントポインタへ代入する。カレントポインタは、現在処理中である管理構造体を示すためのものであり、後述の処理で使われる。
【0030】
ステップS503では、ルール内に未処理の階層情報があるかどうかを確認する。ある場合はステップS504に進み、ない場合はステップS508に進む。
【0031】
ステップS504では、未処理の階層情報の一つに対し管理構造体を生成する。ルール2では、[1]{c}という階層の次に[2]{}(f)という階層があるので、管理構造体addrBを生成し、level=2、value_type=”float”を記述する。
【0032】
なお、新しく生成した管理構造体は、上位階層の管理構造体のlower_listにリンクしなければならない。この処理は、カレントポインタを利用して行われる。
【0033】
ステップS505では、ステップS504で生成した管理構造体が、カレントポインタの指す管理構造体の階層より下位であるかどうかを確認する。下位階層であればステップS507へ進む。下位階層でなければステップS506に進む。
【0034】
ステップS506では、カレントポインタが指す管理構造体の一つ上位の管理構造体をカレントポインタに代入する。その後、ステップS505に戻る。
【0035】
ステップS507では、カレントポインタが指す管理構造体のlower_listを検出し、生成した管理構造体をリンクする。リンク後、ステップS502に戻る。
【0036】
例えば、新しく生成した管理構造体がaddrBの場合、カレントポインタはaddrAを指している。addrBのlevelはaddrAのlevelより下位であるので、addrAのlower_listにaddrBがリンクされる。一方、新しく生成した管理構造体がaddrCの場合は、カレントポインタはaddrBを指している。addrBのlevelはaddrCと同じであるので、上位階層を辿る。上位階層はaddrAであるので、addrAのポインタがカレントポインタへ代入される。addrAのlevelはaddrCのlevelより下位であるので、addrAのlower_listにaddrCがリンクされる。addrD以降も同様にして処理し、また、ルール1に対しても同様の処理を行う。
【0037】
ステップS508では、カレントポインタを1階層ずつ上位の階層に更新し、最上位まで到達したら終了する。
【0038】
図6は、図5の処理により生成される構造情報を例示的に示す図である。図6に示すように、構造情報の中には、同一構造の管理構造体が繰り返し現われる場合がある。ここでは、level=2の管理構造体に同一構造の管理構造体ものが現われる。そのため、これらをまとめて表記することで、符号化したときのサイズを小さくすることができる。この処理もカレントポインタを利用して行うとよい。
【0039】
また、構造情報は入れ子構造である。カレントポインタは、上位階層に更新された時点で、更新前の管理構造体に戻ることはない。つまり、更新前の管理構造体に対し新しい情報が付け加わることは無い。そこで、カレントポインタが上位階層へ更新された時点で、更新前の管理構造体の集約処理を行う(情報集約手段)。ここでは、このときの管理構造体をclosed_structureと呼ぶ。
【0040】
図7は、管理構造体の集約処理の動作フローチャートである。
【0041】
ステップS701では、closed_structureのupper_linkを辿り、closed_structureをリンクしている上位階層のlower_listを特定する。
【0042】
ステップS702では、ステップS701で特定したlower_listの中に、closed_structureの一つ前にリンクされている管理構造体があるかどうかを確認する。なければ集約処理を終了し、あればステップS703に進む。
【0043】
ステップS703では、管理構造体のメンバと、closed_structureのメンバとが一致しているかどうかを確認する。一致していなければ集約処理を終了する。一致していればステップS704に進む。
【0044】
ステップS704では、値iterate_numをインクリメントしclosed_structureをlower_listから削除する。
【0045】
図8は、図6に示した構造情報に対し集約処理をした際の構造情報を例示的に示す図である。図6における6個の同一の管理構造体(addrB〜addrG)がaddrBとして集約されていることが分かる。ただし、iterate_num=6を設定することにより、当該管理構造体が6回繰り返して現れることが表現されている。
【0046】
・符号化の処理動作の詳細(ステップS305)
図9は、符号化処理の詳細動作フローチャートである。
【0047】
ステップS901では、入力されたSVGデータの構造化文書部分を読み込む。なければ処理を終了する。
【0048】
ステップS902では、ステップS901で読み込んだ構造化文書部分が、ステップS301で指定された構造化文書部分であるか否かを判定する。つまり、ここでは、path要素のd属性であるかどうかを確認する。
【0049】
指定された部分でなければ、通常のバイナリXML符号化を行い、ステップS901に戻る。指定された部分であれば、ステップS903に進む。
【0050】
ステップS903では、構造化文書部分内にデータがあるかどうかを確認する。ない場合は符号化処理の必要は無いためステップS901に戻る。あれば、ステップS904において、当該構造化文書部分内のデータを読み込む。
【0051】
ステップS905では、ステップS904で読み込んだデータがステップS303で指定されたどのルールと一致するかを判別する。なお、このとき、一意に決定できない場合はステップS904に戻って次の文字を読み込み、再度判別を行う。そして、一意に決定できた場合はステップS906に進む。
【0052】
ステップS906では、ステップS304で生成した対応する構造情報を取得しバイナリ符号化する。
【0053】
図10は、図2の属性値文字列の描画コマンド”c”の部分に対しバイナリ符号化を実行した結果を示す図である。つまり、図2の属性値文字列の描画コマンド”c”の部分に対して、図8のルール2に対する構造情報を取得し、バイナリエンコーディングを実行した結果である。
【0054】
管理構造体の各々は、その種類とメンバの値で符号化される。具体的には
最上位階層の場合は”00”、
中間階層の管理構造体は”01”、
リーフの管理構造体は”10”
にそれぞれ符号化される。続けて、
最上位階層の管理構造体は識別子名(name)、
中間階層の管理構造体は繰り返し数(iterate_num)、
リーフの管理構造体はiterate_numとデータ型(value_type)
が符号化される。
【0055】
図11は、変換テーブルの例を示す図である。上述の、nameとvalue_typeは、図11に示すような変換テーブルを使って符号化される。iterate_numは可変長整数で符号化される。先頭ビットが整数のデータ長を示し、続くビットが値を示す。
【0056】
それぞれの管理構造体は、最上位階層の管理構造体から深さ優先で順に符号化される。例えば、図8に示した構造情報は、最上位階層の管理構造体とリーフの管理構造体からなる。そのため、順に、
最上位階層に対して”00”、
name=”c”に対して”0011”、
リーフの階層に対して”10”、
iterate_num=6に対して”0110”、
value_type=”float”に対して”0000”
に符号化される。
【0057】
ステップS907では、区切り文字で区切られた文字列を順に符号化する。符号化する際は、対応する管理構造体のvalue_typeを参照して符号化する。符号化後、ステップS903に戻って、構造化文書部分の次の文字データを処理する。その結果、図10に示すように、図2に示す属性値文字列の”c”の部分に対しては、6個のfloat型のデータに符号化される。
【0058】
なお、ステップS304において指定された階層識別子のルールは、符号化の際、繰り返し使われることがある。毎回符号化するのは冗長であるので、ステップS305において、変換した構造情報のトークンを用いるようにするとよい。トークンの符号化データは、先頭に2ビットの”11”をつけ、管理構造体の符号化データと区別する。トークンは、変換テーブルを用意し適当に値を割り振っても良いが、識別子名自体をトークンとし図12に示す変換テーブルを用いることもできる。
【0059】
以上説明したとおり第1実施形態のデータ符号化装置によれば、複雑な属性値を持つ要素含まれるデータに対しても、効率的にバイナリ符号化を実行することが可能となる。つまり、図2に示すSVGデータにおいて従来はテキストとして符号化されていたpath要素のd属性に対して、データ構造を考慮したバイナリ符号化を行うことが可能となる。その結果、データサイズの縮小や解析処理速度の向上の効果が得られる。
【0060】
なお、デコーダ(復号)側では、符号化手順と逆の処理を行い、符号化データを読み取る。このとき、デコーダは、先頭の構造情報を読むことでデータ構造を認識し、必要な領域を確保して順次値を読み込む。
【0061】
(第2実施形態)
第2実施形態では、属性値が2次元配列を示す場合の符号化について説明する。装置構成については第1実施形態と同様であるので説明は省略する。
【0062】
<SVGデータにおけるアニメーション処理の記述>
SVGには、図13に示すようなアニメーション処理の記述がある。type属性は、アニメーション処理のタイプを示しており、translateの場合は移動処理であることを示す。このとき、移動する距離はvalues属性に記述されており、X方向の値とY方向の値を”,”区切りで、X,Yのペアを“;”区切りで示す。
【0063】
さらに、アニメーション処理は、実行するタイミングを指定することができ、keyTimes属性に“;”区切りで示す。keyTimes属性で記述されたそれぞれのタイミングは、values属性で記述されたそれぞれのX、Yのペアに対応している。
【0064】
そのため、配列構造として符号化する際に、values属性の方は2次元配列としておくことでkeyTimes属性との対応がとりやすい。また、配列の大きさは属性値の記述内容に依存し不定である。
【0065】
<装置の動作>
・全体動作
第2実施形態に係る情報処理装置の動作を、第1実施形態と同様に図3に沿って説明する。ただし、図13のSVGデータを符号化する方法について説明する。
【0066】
ステップS301では、SVGデータを読み込み、当該SVGデータに含まれる処理対象部分(構造部分)を指定する。ここでは、図13に示したSVGデータのanimateTransform要素のvalues属性、keyTimes属性の指定を受け付ける。
【0067】
ステップS302では、ステップS301で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、図13の下段に示すような描画命令単位の配列構造を指定する。
【0068】
ステップS303では、ステップS302で決定したデータ構造にしたがって、ステップS301で指定した処理対象部分に対し階層情報を設定する。具体的には、ステップS301で指定した処理対象部分に含まれる区切り文字に対し階層および識別子を指定する。
【0069】
図14は、階層情報の指定を例示的に示す図である。ここでは、”,”、”;”といった文字に加え、属性値の開始位置(start)を区切り文字として扱う。これにより、属性値全体を一つの配列構造にまとめることができる。
【0070】
また、階層は、配列単位であるstartが最上位階層、X,Yのペアの区切り文字“;”が2番目の階層、X方向の値、Y方向の値の区切り文字“,”が3番目の階層となる。なお、属性値内には1つの配列しかないので、識別子名は指定しない。
【0071】
さらに、X,Yのペアの個数は属性値の記述内容依存なので、図14のように“;”、“,”の区切り文字に対し繰り返し指定をしておく。 データ型指定は、X方向、Y方向の値に対し、float型を指定する。
【0072】
ステップS304では、ステップS303で指定された階層情報を構造情報に変換する。
【0073】
図15は、図14に示したvalues属性に対するルールの階層情報を構造情報を変換した結果を例示的に示す図である。なお、変換処理は、第1実施形態と同様に、図5、図7のフローに沿って行うため説明は省略する。ただし、前述したように、図13のvalues属性のX、Yのペアの個数は入力データを実際に読み込むまで分からない。従って管理構造体addr2のiterate_numは不定になり、addr3のiterate_numはX方向、Y方向の2になる。
【0074】
ステップS305では、ステップS301で入力したSVGデータを、ステップS303で指定された階層識別子とステップS304で変換した構造情報とを使って符号化する。
【0075】
・符号化の処理動作の詳細(ステップS305)
符号化は、第1実施形態と同様に、図9のフローチャートに沿って実行する。
【0076】
図16は、図13のvalues属性の値に対しバイナリ符号化を実行した結果を示す図である。つまり、図15の構造情報は、図12の上段に示したのと同様の符号化ルールに従って順に、
最上位階層に対して”00”、
name=””に対して”1111”、
中間階層に対して“01”、
iterate_num=不定に対して14ビットのプレースホルダー、
リーフの階層に対して“10”、
iterate_num=2に対して”0010”、
value_type=”float”に対して”0000”
に符号化される。
【0077】
ステップS907では、区切り文字で区切られた文字列を順に符号化する。ここでは、図12のvalues属性のX,Yのペアを40個としている。従って、計80個のfloat型のデータに符号化される。このとき、X,Yのペアの数が判明するので、プレースホルダーを可変長整数の”40”を示す”10000000101000”に置き換える。
【0078】
以上説明したとおり第2実施形態のデータ符号化装置によれば、2次元配列の属性値を持つ要素含まれるデータに対しても、効率的にバイナリ符号化を実行することが可能となる。なお、配列は2次元に限られずN(Nは自然数)次元に拡張可能である。
【0079】
(第3実施形態)
第3実施形態では、属性値が列x行の2次元配列を示す場合の符号化について説明する。装置構成については第1実施形態と同様であるので説明は省略する。
【0080】
<SVGデータにおける変換処理の記述>
SVGには、図17に示すような描画データの変換処理の記述がある。transform属性は、変換処理の内容を示しており、matrixは変換行列であることを示す。このとき、行列の各要素が”,”区切りで並べられている。
【0081】
<装置の動作>
・全体動作
この場合、第2実施形態と同様に、列x行の2次元配列構造としておくことで効率的な処理が行える。第3実施形態に係る情報処理装置の動作を、第1実施形態と同様に図3に沿って説明する。ただし、図17のSVGデータを符号化する方法について説明する。
【0082】
ステップS301では、SVGデータを読み込み、当該SVGデータに含まれる処理対象部分(構造部分)を指定する。ここでは、図17に示したSVGデータのg要素のtransform属性の指定を受け付ける。
【0083】
ステップS302では、ステップS301で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、図17の下段に示すような配列構造を指定する。
【0084】
ステップS303では、ステップS302で決定したデータ構造にしたがって、ステップS301で指定した処理対象部分に対し階層情報を設定する。具体的には、ステップS301で指定した処理対象部分に含まれる区切り文字に対し階層および識別子を指定する。
【0085】
図18は、階層情報の指定を例示的に示す図である。ここでは、”matrix(”、”,”といった文字には階層情報を指定するが、’)’については不要であり符号化処理の妨げになるのでdeleteを指定しておく。
【0086】
また、階層は、配列単位であるmatrix(が最上位階層、各行列要素の区切り文字“,”が2番目の階層となる。識別子名には”matrix”を指定している。データ型指定は、float型を指定する。
【0087】
ステップS304では、ステップS303で指定された階層情報を構造情報に変換する。
【0088】
図19は、図18に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。なお、変換処理は、第1実施形態と同様に、図5、図7のフローに沿って行うため説明は省略する。ただし、addr2のiterate_numは列数である3、addr3のiterate_numは行数である2になる。
【0089】
ステップS305では、ステップS301で入力したSVGデータを、ステップS303で指定された階層識別子とステップS304で変換した構造情報とを使って符号化する。
【0090】
・符号化の処理動作の詳細(ステップS305)
符号化は、第1実施形態と同様に、図9のフローチャートに沿って実行する。
【0091】
図20は、図17のtransform属性の値に対しバイナリ符号化を実行した結果を示す図である。つまり、図19の構造情報は、図12の上段に示したのと同様の符号化ルールに従って順に、
最上位階層に対して”00”、
name=”matrix”に対して(第1実施形態と同様に変換テーブルを用意して)”0001”、
中間階層に対して“01”、
iterate_num=3に対して”0011”、
リーフの階層に対して“10”、
iterate_num=2に対して”0010”、
value_type=”float”に対して”0000”
に符号化される。なお、末尾には最後にバイト単位(8ビット単位)で終了するようにpadding”00”が付けられる。
【0092】
ステップS907では、区切り文字で区切られた文字列を順に符号化する。ここでは、6個のfloat型のデータに符号化される。
【0093】
以上説明したとおり第3実施形態のデータ符号化装置によれば、列x行の2次元配列の属性値を持つ要素含まれるデータに対しても、効率的にバイナリ符号化を実行することが可能となる。
【0094】
(第4実施形態)
第4実施形態では、構造化文書の子要素の符号化について説明する。装置構成については第1実施形態と同様であるので説明は省略する。
【0095】
<メソッド呼び出しのメッセージデータへの変換記述>
XMLによるメッセージング技術であるSOAPには、示すようなメソッド呼び出しをメッセージデータに変換した記述がある。
【0096】
図21は、メソッド呼び出しをメッセージデータに変換した記述を例示的に示す図である。<soap:body>要素の子要素として記述されており、<myMethod>要素がメソッド名、その子要素が各メソッドパラメタを示している。
【0097】
<装置の動作>
・全体動作
この場合も、第1実施形態と同様、配列構造として符号化することで、データサイズの縮小、受信処理の高速化が行える。ここでは、図21のような構造化文書の子要素に対する場合の実施形態について説明する。
【0098】
ステップS301では、メソッド読み出しから変換されたSOAPのXMLデータを読み込み、当該データに含まれる処理対象部分(構造部分)を指定する。ここでは、図21に示したデータのmyMethod要素の内容の指定を受け付ける。
【0099】
ステップS302では、ステップS301で指定した処理対象部分に対するデータ構造を決定する。データ構造の決定は、入力デバイスを介してユーザからの指定を受け付けるよう構成するとよい。ここでは、図21の下段に示すような配列構造を指定する。
【0100】
ステップS303では、ステップS302で決定したデータ構造にしたがって、ステップS301で指定した処理対象部分に対し階層情報を設定する。
【0101】
図22は、階層情報の指定を例示的に示す図である。ここでは、属性値(文字)ではなくXMLの要素に対して指定する。
【0102】
また、階層は、配列単位であるmyMethod要素が最上位階層、x要素、y要素がそれぞれ2番目の階層となる。本実施例では、識別子名として”myMethod”を指定する。データ型指定は、x要素に対してint型、y要素に対してfloat型を指定する。XMLのxsi:type属性の記述を解釈して自動的に型設定することもできる。
【0103】
ステップS304では、ステップS303で指定された階層情報を構造情報に変換する。
【0104】
図23は、図22に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。なお、変換処理は、第1実施形態と同様に、図5、図7のフローに沿って行うため説明は省略する。ただし、addr2のiterate_numはx要素の1、addr3のiterate_numはy要素の1になる。
【0105】
ステップS305では、ステップS301で入力したデータを、ステップS303で指定された階層識別子とステップS304で変換した構造情報とを使って符号化する。
【0106】
・符号化の処理動作の詳細(ステップS305)
符号化は、第1実施形態と同様に、図9のフローチャートに沿って実行する。
【0107】
図24は、図21のsoap:body要素の値に対しバイナリ符号化を実行した結果を示す図である。つまり、図23の構造情報は、図12の上段に示したのと同様の符号化ルールに従って順に、
最上位階層に対して”00”、
name=”myMethod”に対して(第1実施形態と同様に変換テーブルを用意して)”0001”、
リーフの階層に対して“10”、
iterate_num=1に対して”0001”、
value_type=”int”に対して”0010”、
リーフの階層に対して“10”、
iterate_num=1に対して”0001”、
value_type=”float”に対して”0000”
に符号化される。なお、末尾には最後にバイト単位で終了するようにpadding”000000”が付けられる。
【0108】
ステップS907では、区切り文字で区切られた文字列を順に符号化する。ここでは、要素の値が符号化され、それぞれx要素の値として1個のint型のデータ、y要素の値として1個のfloat型のデータに符号化されることになる。
【0109】
以上説明したとおり第4実施形態のデータ符号化装置によれば、SOAPのXMLデータに対しても、効率的にバイナリ符号化を実行することが可能となる。
【0110】
(他の実施形態)
以上、本発明の実施形態について詳述したが、本発明は、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0111】
なお、本発明は、前述した実施形態の機能を実現するコンピュータプログラムを、システム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置が、供給されたプログラムコードを読み出して実行することによっても達成される。従って、本発明の機能処理をコンピュータで実現するために、コンピュータにインストールされるプログラムコード自体も本発明の技術的範囲に含まれる。
【0112】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等、プログラムの形態を問わない。
【0113】
プログラムを供給するための記録媒体としては、例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク(CD、DVD)、光磁気ディスク、磁気テープ、不揮発性のメモリカード、ROMなどがある。
【0114】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【0115】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【0116】
【図1】第1実施形態のデータ符号化装置を構成するコンピュータ装置のブロック図である。
【図2】SVG形式のデータの一例を示す図である(第1実施形態)。
【図3】第1実施形態に係る情報処理装置の動作フローチャートである。
【図4】階層情報の指定を例示的に示す図である(第1実施形態)。
【図5】図3のルール2の階層情報を構造情報に変換する詳細動作フローチャートである。
【図6】階層情報を構造情報に変換した結果を例示的に示す図である(第1実施形態)。
【図7】管理構造体の集約処理の動作フローチャートである。
【図8】図6に示した構造情報に対し集約処理をした際の構造情報を例示的に示す図である。
【図9】符号化処理の詳細動作フローチャートである。
【図10】図2の属性値文字列の描画コマンド”c”の部分に対しバイナリ符号化を実行した結果を示す図である。
【図11】変換テーブルの例を示す図である。
【図12】変換テーブルの他の例を示す図である。
【図13】SVG形式のデータの一例を示す図である(第2実施形態)。
【図14】階層情報の指定を例示的に示す図である(第2実施形態)。
【図15】図14に示したvalues属性に対するルールの階層情報を構造情報を変換した結果を例示的に示す図である。
【図16】図13のvalues属性の値に対しバイナリ符号化を実行した結果を示す図である。
【図17】SVG形式のデータの一例を示す図である(第3実施形態)。
【図18】階層情報の指定を例示的に示す図である(第3実施形態)。
【図19】図18に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。
【図20】図17のtransform属性の値に対しバイナリ符号化を実行した結果を示す図である。
【図21】メソッド呼び出しをメッセージデータに変換した記述を例示的に示す図である。
【図22】階層情報の指定を例示的に示す図である(第4実施形態)。
【図23】図22に示したルールの階層情報を構造情報を変換した結果を例示的に示す図である。
【図24】図21のsoap:body要素の値に対しバイナリ符号化を実行した結果を示す図である。
【符号の説明】
【0117】
100 データ符号化装置
101 CPU
102 ROM
103 RAM
104 外部記憶装置
105 入力インタフェース
106 モニタインタフェース
107 ネットワークインタフェース
108 システムバス

【特許請求の範囲】
【請求項1】
所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力手段と、
前記所定の形式のデータ列に含まれる1以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定手段と、
前記階層情報設定手段で設定された1以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成手段と、
前記ファイル入力手段により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定手段と、
前記指定手段により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記階層情報設定手段は、さらに、前記区切り文字に関連するデータのデータ型を設定するデータ型設定手段を備え、
前記符号化手段は、前記データ型設定手段により設定されたデータ型に基づいて前記領域のデータ列に含まれるデータを符号化することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記構造情報生成手段は、前記構造情報をN(Nは自然数)次元配列構造として生成することを特徴とする請求項1記載の情報処理装置。
【請求項4】
前記構造情報は、予め設定された構造化記述言語に基づいて記述されており、
前記符号化手段は、前記構造情報を記述した構造化記述言語で、前記領域のデータ列に含まれるデータを符号化することを特徴とする請求項1に記載の情報処理装置。
【請求項5】
前記構造情報生成手段は、さらに、前記構造情報を生成する際に同一構造が繰り返し現われる場合、該同一構造を1つの情報に集約する情報集約手段を備えることを特徴とする請求項1に記載の情報処理装置。
【請求項6】
前記予め設定された構造化記述言語は、バイナリXMLであることを特徴とする請求項1に記載の情報処理装置。
【請求項7】
所定の形式のデータ列を属性値として有する要素を含むファイルを入力するファイル入力工程と、
前記所定の形式のデータ列に含まれる1以上の区切り文字の各々に対して、該区切り文字に関連するデータの前記データ列における階層位置を示す階層情報を設定する階層情報設定工程と、
前記階層情報設定工程で設定された1以上の階層情報の相互の関係を定義する構造情報を生成する構造情報生成工程と、
前記ファイル入力工程により入力されたファイルから、前記所定の形式のデータ列の領域を指定する指定工程と、
前記指定工程により指定された領域から前記区切り文字を検出し、検出された区切り文字と前記構造情報とに基づいて、前記領域のデータ列を予め設定された構造化記述言語に基づき符号化する符号化工程と、
を備えることを特徴とする符号化方法。
【請求項8】
コンピュータに請求項7に記載の符号化方法を実行させる為のコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公開番号】特開2009−75887(P2009−75887A)
【公開日】平成21年4月9日(2009.4.9)
【国際特許分類】
【出願番号】特願2007−244443(P2007−244443)
【出願日】平成19年9月20日(2007.9.20)
【出願人】(000001007)キヤノン株式会社 (59,756)