"固定のXML記述を含むヘッド部と、XXは0以上の整数回以上繰り返し可能であり、変数名を含むとともに前記変数名以外の記述は固定であるボディ部と、固定のXML記述を含むテイル部とを含むXML文書の構造を規定したXMLスキーマに基づいた、EXIEfficientXMLInterchangeエンコーダであって、前記ボディ部の繰り返し回数に応じた個数だけ、前記変数名に対応する入力データを順次読み込む読み込み手段と、前記ヘッド部の前記固定のXML記述に対応するEXIビット列を生成するヘッド部エンコーダと、前記読み込み手段により入力データを読み込むごとに、前記ボディ部の変数名を前記入力データに置換したXML記述に対応するEXIビット列を生成する、ボディ部エンコーダと、前記テイル部の前記固定のXML記述に対応するEXIビット列を生成するテイル部エンコーダと、前記ヘッド部エンコーダにより得られたEXIビット列と、前記ボディ部エンコーダにより得られたEXIビット列と、前記テイル部エンコーダにより得られたEXIビット列を含むEXIストリームを出力する出力部と、を備えたEXIエンコーダ。前記ボディ部エンコーダは、前記EXIビット列を、前記入力データが何回目の読み込みかに依存して生成することを特徴とする請求項1に記載のEXIエンコーダ。前記テイル部エンコーダは、前記ボディ部の繰り返し回数に依存して、前記EXIビット列を生成することを特徴とする請求項1または2に記載のEXIエンコーダ。固定のXML記述を含むヘッド部と、XXは0以上の整数回以上繰り返し可能であり、変数名を含むとともに前記変数名以外の記述は固定であるボディ部と、固定のXML記述を含むテイル部とを含むXML文書の構造を規定したXMLスキーマに基づいた、EXIEfficientXMLInterchangeエンコードのためのプログラムであって、前記ボディ部の繰り返し回数に応じた個数だけ、前記変数名に対応する入力データを順次読み込む読み込みステップと、前記ヘッド部の前記固定のXML記述に対応するEXIビット列を生成するヘッド部エンコードステップと、前記読み込みステップにより入力データを読み込むごとに、前記ボディ部の変数名を前記入力データに置換したXML記述に対応するEXIビット列を生成する、ボディ部エンコードステップと、前記テイル部の前記固定のXML記述に対応するEXIビット列を生成するテイル部エンコードステップと、前記ヘッド部エンコーダにより得られたEXIビット列と、前記ボディ部エンコーダにより得られたEXIビット列と、前記テイル部エンコーダにより得られたEXIビット列とを含むEXIストリームを出力する出力ステップと、をコンピュータに実行させるためのプログラム。本発明の一側面は、EXIストリームを低負荷で生成可能なEXIエンコーダおよびプログラムを提供することを目的とする。本発明の一態様としてのEXIエンコーダは、固定のXML記述を含むヘッド部と、XXは0以上の整数回以上繰り返し可能であり、変数名を含むとともに前記変数名以外の記述は固定であるボディ部と、固定のXML記述を含むテイル部とを含むXML文書の構造を規定したXMLスキーマに基づいた、EXIEfficientXMLInterchangeエンコーダであって、読み込み手段と、ヘッド部エンコーダと、ボディ部エンコーダと、テイル部エンコーダと、出力部とを備える。前記読み込み手段は、前記ボディ部の繰り返し回数に応じた個数だけ、前記変数名に対応する入力データを順次読み込む。前記ヘッド部エンコーダは、前記ヘッド部の前記固定のXML記述に対応するEXIビット列を生成する。前記ボディ部エンコーダは、前記読み込み手段により入力データを読み込むごとに、前記ボディ部の変数名を前記入力データに置換したXML記述に対応するEXIビット列を生成する。前記テイル部エンコーダは、前記テイル部の前記固定のXML記述に対応するEXIビット列を生成する。前記出力部は、前記ヘッド部エンコーダにより得られたEXIビット列と、前記ボディ部エンコーダにより得られたEXIビット列と、前記テイル部エンコーダにより得られたEXIビット列を含むEXIストリームを出力する。図1は、本実施形態に係るEXIエンコーダの構成を示す。このEXIエンコーダは、固定のXML記述を含むヘッド部HEAD部と、XXは0以上の整数回以上繰り返し可能であり、変数名を含むとともに前記変数名以外の記述は固定であるボディ部BODY部と、固定のXML記述を含むテイル部TAIL部とを含むXML文書仮想的なXML文書のテンプレートと、その文章の構造を規定したXMLスキーマに基づく。本実施形態において、1つのBODY部の中で変数の箇所が複数箇所あるときは、これらの複数の変数をまとめて構造体と呼ぶ。この場合、個々の変数を、構造体メンバと称することもある。本実施形態では、構造体を想定する。変数名は、タグで囲まれた本文や、タグ内の属性の値の箇所等に記載されている。制御部読み込み手段11は、BODY部の繰り返し回数に応じた個数だけ、構造体の入力データ入力構造体を順次読み込む。HEAD部エンコーダHは、HEAD部の固定のXML記述に対応するEXIビット列を生成する。BODY部カウンタ12は、入力データの処理回数つまり何個目の入力構造体を処理したかをカウントする。BODY部エンコーダBは、入力データが読み込まれるごとに、BODY部の変数を入力データに置換したXML記述に対応するEXIビット列を生成する。BODY部エンコーダ0は、1回目の入力データ、BODY部エンコーダ1は、2回目以降の入力データを読み込む。これにより、何番目の入力データかに依存したEXIビット列を生成する。詳細は後述する。TAIL部エンコーダTは、TAIL部の固定のXML記述に応じたEXIビット列を生成する。より詳細に、本実施形態では、BODY部が0個のときは、TAIL部エンコーダ0が、BODY部が1個以上のときは、TAIL部エンコーダ1が、EXIビット列を生成する。これにより、BODY部の繰り返し回数に依存したEXIビット列を生成する。詳細は後述する。出力部13は、HEAD部エンコーダにより得られたEXIビット列と、BODY部エンコーダにより得られた0個以上のEXIビット列と、TAIL部エンコーダにより得られたEXIビット列とを順次並べたEXIストリームを出力する。出力されたEXIストリームは、受信装置に送られ、受信装置で復号されることにより、XML文書が復元される。以下、本実施形態について、さらに詳細に説明する。なお本明細書の末尾にサンプルデータとして例A1~A6を載せてある。適宜、これらを参照する。図1のEXIエンコーダは、HEAD部エンコーダH、BODY部カウンタ12、2つのBODY部エンコーダ0,1を含むBODY部エンコーダB、2つのTAIL部エンコーダ0,1を含むTAIL部エンコーダT、呼び出し側からの入力に応じてエンコーダを駆動制御する制御部11、および出力部13を備える。入力となる構造体の値入力データは、呼び出し側から与えられ、制御部11が読み込む。なお、入力となる構造体の形式や、対象とするXMLのスキーマによっては、2つのBODY部エンコーダ0,1、あるいは2つのTAIL部エンコーダ0,1は同一のものとなることもある。制御部11は、初期化時に、BODY部カウンタ12をゼロに初期化した上で、HEAD部エンコーダHを呼び出す。HEAD部エンコーダHは、予め保持している、HEAD部に対応するEXIビット列を出力する。つまり、HEAD部エンコーダHは、初期化パラメータを入力とし、出力すべきEXIストリームの先頭に相当する、ストリームの初期情報を、EXI形式で生成する。その上で、制御部11は、入力となるデータが一つ与えられるごとに、BODY部エンコーダBにこれを渡す。BODY部カウンタ12がゼロのときは、BODY部エンコーダ0を、非ゼロのときは、BODY部エンコーダ1を用いる。BODY部エンコーダ0またはBODY部エンコーダ1は、与えられたデータを元に、EXIビット列を生成し、出力する。より詳細に、BODY部エンコーダ0またはBODY部エンコーダ1は、入力となる構造体を受け、構造体の各メンバの値を、BODY部の各メンバ名が記載された箇所に記載したXML記述に相当するEXIビット列を生成する。また、制御部11は、BODY部エンコーダBにより1つの入力データが処理されるごとに、BODY部カウンタ12の値をインクリメントする。また、制御部11は、すべての入力データの処理がBODY部エンコーダBで終わると、TAIL部エンコーダTを呼び出す。TAIL部エンコーダTは、BODY部カウンタ12がゼロのときはデータ構造体が入力されなかったときは、TAIL部エンコーダ0を用い、BODY部カウンタ12が非ゼロのときは、TAIL部エンコーダ1を用いる。TAIL部エンコーダ0またはTAIL部エンコーダ1は、予め保持している、TAIL部に対応するEXIビット列を出力する。つまり、TAIL部エンコーダTは、ストリームを閉じる要素TAIL部のXML記述に相当を、EXI形式で生成する。出力部13は、HEAD部エンコーダHエンコーダBBODY部エンコーダ0,1TAIL部エンコーダTTAIL部エンコーダ0または1からのEXIビット列をまとめて、EXIストリームとし、これを出力する。図2に、出力されるEXIストリームの構造例を模式的に示す。図2の例は、構造体が3つ構造体1、構造体2、構造体3が与えられた場合の例である。図3に、構造体が1つも与えられない場合HEAD部の次がTAIL部である場合のEXIストリームの構造例を模式的に示す。本実施形態ではXML文書を与えることなく、入力構造体を与えるのみで、EXIストリームを生成するが、理解のため、XML文書からEXI形式への変換について説明する。このXML文書からEXI形式の変換は、XMLスキーマから生成されるEXIの文法に基づく。EXIの文法およびこれにより生成されるEXIストリームは、次の特徴を持つ。なお、XMLスキーマは、よく知られているように、XML文書の構造を規定するものである。EXI文法は、EXLスキーマから既知の方法で、生成される。1XML文書を、先頭からElementSEやEEなど、AttributeAT、CharactersCHなどのイベント単位で表現するたとえばSAXイベントで表現する2EXI文法は、XMLスキーマにより許される状態遷移の数に基づいた文法を持ち、この状態遷移に順にイベントコードを割り付ける3状態遷移の数を表現できる最小限のビット幅の整数で、イベントを表現特徴2および3から、送信装置EXIエンコーダの搭載装置と、EXIストリームの受信装置が同一のEXI文法を持っていないと、正常な通信が困難である。また通常のXML処理で見られるように、受信装置側で、未知のタグを読み飛ばすといったことが困難である。また、以下に挙げるような場合、一見同じ表現であっても状態遷移が異なり、結果として出力されるビット列が、異なる場合がある。1オプショナルなXML属性存在しても、しなくても良い属性AttributeXがある場合、そのAttributeが登場する直前の状態に対しては、AttributeXが登場する遷移と、次のAttributeあるいはノードNode等が登場する遷移が、存在する。つまり、optionalAttributeXの後にAttributeYが登場する文法において、AttributeXが存在した場合のAttributeYのイベントコードと、AttributeXが存在しない場合のAttributeYのイベントコードは、異なる場合がある。2minOccur0のノード上記したオプショナルなXMLAttributeの場合と同様に、存在しなくてもよいノードがあった場合、その次の要素のイベントコードが変化する場合がある。minOccur0のノードは、存在しなくてもよいことを意味する。3maxOccurが2以上のノード同じ内容のXML要素であっても、前の要素に対応する文法からNodePに遷移する場合のイベントコードと、NodePからNodePに遷移する場合のイベントコードが異なる場合がある。maxOccurが2以上のノードは、当該回数だけ、繰り返されることが可能であることを意味するたとえば本実施形態のBODY部がこれに相当。ここで、本実施形態で取り扱うXML文書は、HEAD部が1回、BODY部が0以上複数回、TAIL部が1回の登場となる。また、HEAD部BODY部TAIL部のそれぞれについて、子要素の有無、Attributeの有無が、入力データに依存して、決定される場合がある。本実施形態によるEXIエンコーダは、EXI文法とEXI文法との間の状態遷移のうち、入力の回数および有無によってイベントコードが異なる可能性が出るもの全てに対して、事前にイベントコードを含めたビット列バイナリ列を、保持しておくものである。これにより、入力として、データの有無、bool値、ならびにデータの個数によって、ビット列を選択することで、正しくデコード可能な、EXIストリームを簡易に作成できる。以下、具体例を用いて、説明を行う。例A1に、仮想XML文書のテンプレートの例を示す。この文書では、特に記号で囲まれている部分が、可変となる部分であり、メンバ名変数名が記載されている。また、この文書は、例A5に示すスキーマに準拠し、このスキーマから、例A6に示すEXI文法が導出される。このスキーマ例は、参考文献1JohnSchneiderandTakukiKamiyaEfficientXMLInterchangeFormat10W3CCandidateRecommendationDecember2009httpwwww3orgTRexiより引用したものである。節A6に示したEXI文法も、参考文献1より引用したものである。このEXI文法では、orderに対する文法Completegrammarforelementと、productに対する文法Completegrammarforelementが示される。各文法内でさらに細かく文法が規定されている。に対する文法のTermproduct00、Termproduct01、に対する文法におけるUsecolor0等は、文法名である。EXI文法は、LeftHandSideTerminalNonTerminalEventCodeイベントコードの4つから構成される。LeftHandSideの状態の時、Terminalのイベントが発生したら、EventCodeを出力し、NonTerminalの状態に移行する。ここで、orderproductタグにより示す範囲を、BODY部とすると、HEAD部、BODY部、TAIL部は、例A2に示す構成となる。具体的に、表A3に示す3つの構造体1つの行が1つの構造体に相当し、構造体の各要素が、それぞれメンバ変数に相当するを入力とすると、出力として期待される仮想XML文書、つまり、EXIストリームに対応するXML文書は、例A4に示すものとなる。以下、本実施形態では、任意長のビットを0bにより始まり、0および1の列で表わす。また任意の文字列をで囲んで表記した場合は、これをUTF8XMLで扱われる形式で表記したバイト列であるとする。本実施形態によるエンコード処理は、HEAD部エンコーダHから開始する。初期化時に、BODY部カウンタ12をゼロに初期化する。HEAD部エンコーダHは、EXIヘッダに加え、例A21に相当するEXIビット列を内包している。HEAD部エンコーダHは、内包している当該EXIビット列を、制御部11からの呼び出しに対応して、出力する。BODY部エンコーダHは、入力として、例A3に示す各行のうち1行を単位として与えられ、EXIビット列を出力する。BODY部エンコーダ0は、1行目のデータ構造体が与えられる。BODY部エンコーダ0は、0b0を出力し、さらにBODY部の内容をエンコードした結果BODY部のXML記述において構造体の各メンバ名を、上記1行目のデータで置換したものに対応するEXIビット列を出力する。BODY部エンコーダ1は、2行目以降のデータが与えられる。2行目以降のデータが与えられたときは、データごとに、0b00を出力した後、BODY部の内容をエンコードした結果を出力する。このように1行目のデータに対しては、最初に0b0を出力し、2行目以降のデータに対しては、最初に0b00を出力するのは、BODY部カウンタ12がゼロであるときは、文法Termproduct00が対応し、BODY部カウンタ12が非ゼロであるときは,文法Termproduct10が対応することによる。BODY部エンコーダ0について、以下にさらに詳細に説明する。BODY部はproductタグの開始から始まる。すなわちSEからはじまり、また文法の第一レベルの状態は、0と1の2種類ため、BODY部エンコーダ0は、0b0を出力する。その後、与えられたデータ構造体に応じて、ビット列を出力する。また、制御部11は呼び出しBODY部カウンタ12をインクリメントする。ここで第一レベルとは、EXIの文法のイベントコードの一番左を指す。たとえば文法Termproduct00では、イベントコードが以下のように、8個ある。0101112131401516一番左は、0と1のみが存在し2種類存在し、よって、第一レベルの状態は1ビットで表現できる。同様に、文法Termproduct10では、イベントコードが以下のように4個ある。012021一番左は、0と1と2が存在し3種類存在し、よって第一レベルの状態は2ビットで表現できる。制御部11が、2度目に構造体を引数として呼び出された際は、BODY部カウンタ12が非ゼロであることから、文法Termproduct10が対応する、BODY部エンコーダ1を呼び出す。つまり、Termproduct00では、SEに対して、イベントコード0を出力して、Termproduct10に遷移することを定めている。ここでは、文法の第一レベルが、上述のように0、1、2の3種類存在するため、2ビットのイベントコードを出力する必要があることが事前にわかっている。BODY部エンコーダ1は、同じSEを出力する局面で0b00イベントコードの0を2ビットで表現したものを出力する。以後は、BODY部エンコーダ0と同様に、与えられた入力データに応じて、ビット列を出力する。また、制御部11は呼び出しBODY部カウンタ12をインクリメントする。3度目に、構造体を引数として呼び出されたときは、Termproduct10が繰り返されるため、2度目と同様になる。つまり、Termproduct10では、SEに対して、イベントコード0を出力した後、同じTermproduct10に遷移することを定めている。最後に、TAIL部エンコーダTは、orderタグを終了させる。TAIL部エンコーダ0は、BODY部が0回のとき動作し、Termproduct00のEE、すなわち1ビット長の1と、3ビット長の0を連結した0b1000を出力する。つまり10の0は第2レベルに相当し、Termproduct00では、第2レベルは0123456の7個存在するから、表現するのに3ビット必要になる。BODY部が1回でも来ると、Termproduct10に遷移し、Termproduct00に戻ることはない。TAIL部エンコーダ1は、BODY部が1回以上のとき動作し、Termproduct10のEE、すなわち2ビット長の1である0b01を出力する。以下、BODY部の内容のエンコード方法、つまりBODY部における構造体の各メンバ名変数名を入力データに置換したXML文書に相当するEXIビット列の生成方法について説明する。本実施形態で採用する文法は、color属性、sku属性、quantity要素、price要素の順にストリームを構築することを期待している例A1、例A2参照。また、本実施形態では利用しないが、description要素が存在することもある。本実施形態では、BODY部の構成は、SKU、COLOR、QUANTITY、PRICEの4箇所以外は、固定であり、変化しない。従って、事前に通常のEXIエンコード手段によって、BODY部の構造を記述したビット列を作成しておき、変化する部分のみ、入力データと、差し替えれば良い。BODY部には、以下の5つの部分に対応するEXIエンコードされたビット列が保持されている。1productタグの開始からsku属性の内容記述の直前まで2sku属性の内容記述の直後からcolor属性の内容記述の直前まで3color属性の内容記述の直後からquantity要素の内容記述直前まで4quantity要素の内容記述直後からprice要素の内容記述直前まで5price要素の内容記述直後からorderタグの終了までそれぞれのビット列の間に、入力として与えられた変数メンバのビット列を記述すれば、結果的に、入力データを反映したBODY部をEXI文法で記述したビット列と同等のものが得られる。BODY部に対応するEXIビット列の構成例を、図4に模式的に示す。図5は、EXIエンコーダによる動作の流れを示すフローチャートである。制御部11は、本エンコーダの起動後、HEAD部エンコーダHに出力指示を送り、HEAD部エンコーダHは内包するEXIビット列HEAD部のXML記述を変換したEXIビット列を出力部13に送るS101。制御部11は、外部から構造体複数の変数のデータの読み込みを試み、データが存在したときはS102のYES、読み込んだデータをBODY部エンコーダ0に渡し、BODY部エンコーダ0は、受け取ったデータに基づき、EXIビット列を生成し、出力部13に送るS103。そして、制御部11は、BODY部カウンタ12をインクリメントする。制御部11は、再び、データの読み込みを試み、2番目以降のデータが存在するときはS104のYES、そのデータを、BODY部エンコーダ1に送る。BODY部エンコーダ1は、受け取ったデータに基づき、EXIビット列を生成し、出力部13に送るS105。そして、制御部11は、入力データがなくなったときはS104のNO、TAIL部エンコーダ1に出力指示を出す。TAIL部エンコーダ1は、内包するビット列TAIL部のXML記述を変換したEXIビット列であって、Termproduct10に対応を出力部13に送るS106。一方、制御部11は、ステップS102での読み込みで、データが存在しなかったときはS102のNO、TAIL部エンコーダ0に出力指示を送る。TAIL部エンコーダ0は、内包するビット列TAIL部のXML記述を変換したEXIビット列であって、Termproduct00に対応を出力するS107。出力部13は、HEAD部エンコーダH、BODY部エンコーダ0,1、TAIL部エンコーダ0,1から受けたEXIビット列を、受け取った順番に並べることにより、EXIストリームとし、受信装置に向けて、出力するS108。以上で説明した方法により、XML文書を入力として用いることなく、XMLスキーマに基づいた、入力データ入力構造体を反映したEXIストリームを生成できる。以上、本実施形態によれば、特定のXMLスキーマによって与えられるEXI文法について、専用の効率的なエンコード処理が実施可能になる。特に、XMLスキーマで許されたデータ記述の自由度のうち一部しか用いないような種類の処理において、XMLを入力として用いる通常のエンコーダに比べて、格段に効率的なエンコード処理が、実施可能になる。ここでの実施例では簡単のためHEADBODYTAILの形式に限定したが、定数部と変数部との組み合わせ、ならびに構造の繰り返し回数にもとづく定数の変更、という原理は入れ子状に構築したり、2種類以上のBODY部を持つことなども自然な拡張として考えられる。なお、以上に説明した実施形態におけるEXIエンコーダは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、EXIエンコーダにおける制御部、BODY部カウンタ、HEAD部エンコーダ、BODY部エンコーダ、TAIL部エンコーダは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、EXIエンコーダは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD-ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。AサンプルデータA1仮想XML文書のテンプレート例QUANTITYPRICEA2仮想XML文書のテンプレートの分割例A21HEAD部A22BODY部QUANTITYPRICEA23END部A3エンコーダへの入力A4仮想XML文書の具体例40339502515503018395A5XMLスキーマの例A6EXI文法の例CompletegrammarforelementEventCodeUsecolor0ATschematypedvalueUsecolor10ATschematypedvalueUsesku11EE20ATUsecolor021ATUsecolor022ATUsecolor023ATuntypedvalueUsecolor1240ATuntypedvalueUsesku1241ATuntypedvalueUsecolor0242SEUsesku1copied25CHuntypedvalueUsesku1copied26Usecolor1ATschematypedvalueUsesku10EE10ATUsecolor111ATuntypedvalueUsesku1120ATuntypedvalueUsecolor1121SEUsesku1copied13CHuntypedvalueUsesku1copied14Usesku1SETermdescription010SETermquantity011EE20ATUsesku121ATuntypedvalueUsesku1220SEUsesku1copied23CHuntypedvalueUsesku1copied24Usesku1copiedSETermdescription010SETermquantity011EE20SEUsesku1copied21CHuntypedvalueUsesku1copied22Termdescription01SETermquantity010EE1SETermdescription0120CHuntypedvalueTermdescription0121Termquantity01SETermprice010EE1SETermquantity0120CHuntypedvalueTermquantity0121Termprice01SETermdescription110SETermquantity111EE2SETermprice0130CHuntypedvalueTermprice0131Termdescription11SETermquantity110EE1SETermdescription1120CHuntypedvalueTermdescription1121Termquantity11SETermprice110EE1SETermquantity1120CHuntypedvalueTermquantity1121Termprice11EE0SETermprice1110CHuntypedvalueTermprice1111CompletegrammarforelementEventCodeTermproduct00SETermproduct100EE10ATTermproduct0011ATTermproduct0012ATTermproduct0013ATuntypedvalueTermproduct00140SETermproduct00copied15CHuntypedvalueTermproduct00copied16Termproduct00copiedSETermproduct100EE10SETermproduct00copied11CHuntypedvalueTermproduct00copied12Termproduct10SETermproduct100EE1SETermproduct1020CHuntypedvalueTermproduct1021"