EXIEfficientXMLInterchangeストリームを生成するためのEXIエンコーダを生成するエンコーダコンパイラであって、XMLスキーマで定義された文書構造における特定箇所と、変数の名前とを互いに対応づけた対応情報を読み込む第1読み込み手段と、少なくともタグ名を有する複数のタグと、前記特定箇所に配置された置換文字列とを含む教師XML文書を読み込む第2読み込み手段と、前記教師XML文書を、前記タグ名および前記置換文字列を含む複数の要素のうちの1つを指定したイベントの列に変換するパーサと、前記イベントの遷移と、EXIイベントコードとの関係を定義したEXI文法書を読み込む第3読み込み手段と、A前記イベントの列を順番に処理して、前記イベントを処理するごとに前記EXI文法書に応じてEXIイベントコードを生成し、B処理するイベントが前記置換文字列を指定するイベントであるときは、前記置換文字列が配置された箇所に対応する前記変数の値を取得する関数を生成し、C前記イベントの列の処理順序に応じて、生成したEXIイベントコードの出力命令コードおよび前記関数の値の出力命令コードを配置することによりEXIエンコーダを生成する、コードコンポーザと、を備えたエンコーダコンパイラ。前記関数は、さらに、取得した変数の値を前記XMLスキーマに準拠した形式へ変換することを特徴とする請求項1に記載のエンコーダコンパイラ。前記置換文字列は、前記タグに囲まれた箇所に記載されていることを特徴とする請求項1または2に記載のエンコーダコンパイラ。前記教師XML文書における前記タグは属性を有し、前記置換文字列は、前記属性の値として、記載されている、ことを特徴とする請求項1ないし2のいずれか一項に記載のエンコーダコンパイラ。前記パーサは、SAXパーサであり、前記イベントは、SAXイベントである、ことを特徴とする請求項1ないし4のいずれか一項に記載のエンコーダコンパイラ。前記変数は、構造体の要素であることを特徴とする請求項1ないし5のいずれか一項に記載のエンコーダコンパイラ。前記対応情報は、前記特定箇所が含まれる前記教師XML文書の範囲を、タグ名を用いて指定し、前記コードコンポーザは、前記イベントの列を、前記範囲に対応するボディ部、前記ボディ部より前のヘッド部、および前記ボディ部より後のテイル部に分けて処理を行い、各処理でそれぞれ得られた出力命令コードを結合することにより、前記EXIエンコーダを生成することを特徴とする請求項1ないし5のいずれか一項に記載のエンコーダコンパイラ。EXIEfficientXMLInterchangeストリームを生成するためのEXIエンコーダを生成するプログラムであって、所定のXMLスキーマで定義された文書構造における特定箇所と、変数の名前とを互いに対応づけた対応情報を読み込む第1読み込みステップと、少なくともタグ名を有する複数のタグと、前記特定箇所に配置された置換文字列とを含む教師XML文書を読み込む第2読み込みステップと、前記教師XML文書を、それぞれ前記タグ名および前記置換文字列を含む複数の要素のうちの1つを指定したイベントの列に変換するステップと、前記イベントの遷移と、EXIイベントコードとの関係を定義したEXI文法書を読み込む第3読み込みステップと、前記イベントの列を順番に処理して、前記イベントを処理するごとに前記EXI文法書に応じてEXIイベントコードを生成するステップと、処理するイベントが前記置換文字列を指定するイベントであるときは、前記置換文字列が配置された箇所に対応する前記変数の値を取得する関数を生成するステップと、前記イベントの列の処理順序に応じて、生成したEXIイベントコードの出力命令コードおよび前記取得関数の値の出力命令コードを配置することによりEXIエンコーダを生成するステップとをコンピュータに実行させるためのプログラム。請求項1~8のいずれか一項に従って生成されたEXIエンコーダと、前記変数の値を記憶する記憶部と、前記EXIエンコーダを実行することにより、前記EXIイベントコードと前記変数の値とのシーケンスであるEXIストリームを生成するエンコーダ実行部と、を備えた通信機器。本発明の一側面は、EXIストリームを低負荷の処理で生成することが可能なEXIエンコーダを生成することを目的とする。本発明の一態様としてのエンコーダコンパイラは、EXIEfficientXMLInterchangeストリームを生成するためのEXIエンコーダを生成するエンコーダコンパイラであって、第1読み込み手段と、第2読み込み手段と、パーサと、第3読み込み手段と、コードコンポーザとを備える。前記第1読み込み手段は、XMLスキーマで定義された文書構造における特定箇所と、変数の名前とを互いに対応づけた対応情報を読み込む。前記第2読み込み手段は、少なくともタグ名を有する複数のタグと、前記特定箇所に配置された置換文字列とを含む教師XML文書を読み込む。前記パーサは、前記教師XML文書を、それぞれ前記タグ名および前記置換文字列を含む複数の要素のうちの1つを指定したイベントの列に変換する。前記第3読み込み手段は、前記イベントの遷移と、EXIイベントコードとの関係を定義したEXI文法書を読み込む。前記コードコンポーザは、A前記イベントの列を順番に処理して、前記イベントを処理するごとに前記EXI文法書に応じてEXIイベントコードを生成し、B処理するイベントが前記置換文字列を指定するイベントであるときは、前記置換文字列が配置された箇所に対応する前記変数の値を取得する関数を生成し、C前記イベントの列の処理順序に応じて、生成したEXIイベントコードの出力命令コードおよび前記関数の値の出力命令コードを配置することによりEXIエンコーダを生成する。以下、図面を参照しながら、本発明の実施形態を説明する。なお明細書の末尾にサンプルデータとして節A1~A6を載せてある。適宜、これらを参照する。図1に、本発明の実施形態に係るエンコーダコンパイラエンコーダ生成器の構成を示す。図2に、EXIエンコーダの生成までの全体の流れを示す。このエンコーダコンパイラ11は、EXIストリームを生成するためのEXIエンコーダを生成するためのものである。EXIエンコーダは、たとえば資源の限られたスマートメータ等の通信機器に搭載される。このEXIエンコーダを搭載した通信機器では、EXIエンコーダを実行するだけで、XML文書およびXMLスキーマを介することなく、EXIストリームを生成できる。従来では、通信機器が、EXIストリームを生成するには、相手に送りたい値を書き込んだXML文書を作成し、XML文書をXMLスキーマに基づいて解釈することで、EXIストリームを生成する必要があった。しかしながら、このような処理は、資源の限られた機器たとえばスマートメータには負荷が大きかった。なお、EXIストリームは、相手機器に送られた後は、相手機器で、XMLスキーマに基づきXML文書に復元される。本実施形態は、この問題を解決するもので、相手に送りたい値本実施形態では構造体の各要素の値に基づきEXIエンコーダを実行するだけで、この値を組み込んだEXIストリームを生成できるようにし、このようなEXIエンコーダを以下、専用EXIエンコーダを生成する手段を提案する。これにより資源の制約が厳しい機器において、正規のXMLに対応するEXIストリームを少ない負荷で生成できる。図1に示されるように、本エンコーダコンパイラ11は、特定のXMLスキーマから生成したEXI文法木と、当該特定のXMLスキーマに準拠したXML文書である教師XML文書と、スキーマ-構造体対応情報と、エンコーダコードテンプレートとを入力とし、EXIエンコーダ専用EXIエンコーダを出力する。エンコーダコンパイラ11は、スキーマ-構造体対応情報を読み込む第1読み込み手段と、教師XML文書を読み込む第2読み込み手段と、EXI文法木を読み込む第3読み込み手段とを含む。第1~第3読み込み手段の読み込み先は、同じまたは異なる記憶装置である。読み込みは、ネットワークを介して行っても良い。XMLスキーマは、専用EXIエンコーダが出力するEXIストリームの文書構造を規定するXMLスキーマである。教師XML文書の文書構造を規定するXMLスキーマでもある。節A5に、本説明で用いるXMLスキーマの例を示す。このスキーマ例は、参考文献1JohnSchneiderandTakukiKamiyaEfficientXMLInterchangeFormat10W3CCandidateRecommendationDecember2009httpwwww3orgTRexiより引用したものである。図2に示すように、XMLスキーマはスキーマ分析モジュールによりEXI文法木に変換され、EXI文法木がエンコーダコンパイラ11に与えられる。なお、EXI文法木については、参考文献1の85SchemainformedGrammarsなどを参照されたい。EXI文法木は、参考文献1の付録Hに説明される文法を、木構造として表現したデータである。節A6に、本説明で用いるEXI文法の例を示す。orderに対する文法Completegrammarforelementと、productに対する文法Completegrammarforelementが示される。各文法内でさらに細かく文法が規定されている。に対する文法のTermproduct00、Termproduct01、に対する文法におけるUsecolor0等は、文法名である。EXI文法は、LeftHandSideTerminalNonTerminalEventCodeイベントコードの4つから構成される。LeftHandSideの状態の時、Terminalのイベントが発生したら、EventCodeを出力し、NonTerminalの状態に移行する。後述のように本実施形態では、XML文書の解釈モデルとしてSAXを想定し、SAXイベントからEXIイベントを生成する。たとえばorderの開始イベントSEが読まれてに対する文法が選択されるこの状態をTermorderと表記する。この状態で、次に、SEのイベントが来たら、イベントコードとして01ビットのゼロを出力し、Termproduct10に遷移するとともに、productに対する文法が選択されるこの状態をTermproductと表記する。同様にして、イベントが来るごとに、処理を継続し、EEイベントが来たら、productに対する文法から、orderに対する文法の上記の状態Termproduct10に戻り、また同様にして、処理が継続される。なおEXIのイベントコードは1つまたは複数の可変ビット幅非負整数の組によって表現される。個々のイベント番号は、その組み合わせを表現するのに必要十分なビット幅の非負整数により表現される。具体的には、ある文法のイベント番号が7までであれば3ビット、8以上15以下であれば4ビット、等である。また、ピリオドで結合された複数のイベントコード1021241などは階層的なイベントコードとなっており、その階層分だけ可変ビット幅非負整数をならべることにより表現する。なお節A6の例では、EEイベントは、タグ名の指定がないが、これは現在の文法が指示するタグの終了を確定的に意味する。教師XML文書は、専用EXIエンコーダの出力内容を規定するものである。XMLスキーマが文書に許されている形式を規定するものであるのに対し、教師XML文書は、より具体的にどういった文書を出力するのかを規定するものである。本実施形態において、出力に含まれる値のうち、変化しない定数などの部分タグ名や、属性値や本文が定数の場合なお、節A1の例では属性値や本文が定数の場合は存在しないは、教師XML文書に、直接記入する。一方、変化する値は、ポインタとして機能する置換文字列識別子を記述する。置換文字列は、たとえば、開始タグおよび終了タグ間に囲まれた本文の箇所や、タグの属性の値の箇所に、記述される。節A1に、教師XML文書の例を示す。SKUCOLORQUANITTYPRICEが、それぞれ置換文字列識別子に相当する。スキーマ構造体対応情報は、XMLスキーマならびに教師XML文書のどの部分に、入力となる構造体の要素を対応づけるかを定義する。スキーマ構造体対応情報は、具体的に、以下の要素から成る。また、節A2に、本説明で用いるスキーマ構造体対応情報の例を示す。なお要素が1つのときは、構造体を用いなくてもよく、この場合は変数を定義すればよい。また本実施形態において構造体の各要素のことをそれぞれ変数と称することもある。対象タグ構造体に対応するタグの絶対パス。つまり文書構造において構造体が配置される範囲の指定。構造体の定義入力となる構造体の定義。構造体の名前と、構造体の各要素の名前およびその型とを含む。structproductが構造体の名称である。変換関数構造体の各要素の値を、教師XML文書の該当箇所に、どのような型で表記するかを定める関数。構造体の要素の型と、教師XML文書の該当箇所とが同じ型を有する場合は、変換は不要であり、構造体の要素の値のみを取得する関数を用いればよい。節A2の例では、skucolorquantitypriceが構造体の名称で、wcharintfloatが、構造体の型に相当する。置換文字列方式では、SKUのように教師XML文書と同じ文字列識別子が、構造体の要素の名前に対応づけて、記載されている。wchar2utf8は、wchar型を、XMLスキーマが使用するutf8型に変換する関数を示している。たとえば、wcharskuwchar2utf8は、wchar型の構造体要素skuの値を、utf8型に変換する関数を示している。このように、本発明の実施形態のエンコーダコンパイラ11は、特定のXMLスキーマにもとづく教師XML文書の特定箇所置換文字列が配置された箇所に、指定した構造体の要素の値を、指定の型で書き込んだ形のEXIストリームを生成するための専用EXIエンコーダを生成する。EXIストリームは、EXIイベント列とも称される。上述のように、専用EXIエンコーダは、通信機器に搭載され、通信機器で1つまたは複数の構造体を入力とし、専用EXIエンコーダが実行されることで、EXIストリームが出力される。この様子を図3に示す。EXIストリームは、EXIイベントコードと値とのシーケンスである。通信機器で生成されたEXIストリームは、相手機器に送信される。EXIストリームは、相手機器でXMLスキーマより詳細にはXMLスキーマから生成したEXI文法木に基づき、デコードすることにより、教師XML文書の特定部分に構造体を格納したXML文書が得られる。ただし、BODY部例節A1におけるproductタグで囲まれた部分。詳細は後述は、複数繰り返し可能である後述する図5参照。この場合は、教師XML文書のBODY部が繰り返された状態でのXML文書が変換されたEXIストリームが送られる。BODY部が複数繰り返される場合のXML文書の例を、節A4に示す。図1に示すように、エンコーダコンパイラ11は、SAXパーサ12と、コードコンポーザ13とを備えている。SAXパーサ12は、教師XML文書を、SAXイベント列に変換する。SAXパーサ12は、教師XML文書の先頭から解析をはじめ、文書の開始、要素の開始、属性、要素の終了、文書の終了、などを表すSAXイベント列を生成する。SAXイベントの種類として、タグ開始イベント、タグ終了イベント、文字列イベントなどがある。たとえば、タグ開始イベントは、タグの開始を示し、当該タグのタグ名を指定し、またタグに含まれる属性の名前と値を指定する。このSAXイベントはEXIイベントにおけるSEATなどに対応する。タグ終了イベントは、現在のタグの終了を示す。EXIにおけるEEに対応する。文字列イベントは、文字列を指定する。EXIにおけるCHに対応する。SAXについては広く知られているため、これ以上詳細な説明を省略する。また、以後説明の簡単さのため、与えられたSAXイベントを以上のように対応するEXIイベントにより表記する。SAXパーサ12により生成されたSAXイベント列は、コードコンポーザ13に入力される。本実施形態ではSAXイベントに変換する例を示しているが、本実施形態は、これに限定されず、XML文書をイベント列に変換できるのであれば、どのような方法を用いても良い。教師XML文書を変換したSAXイベント列は内部的に、1~3の3つの部分に分けることができる。1スキーマ構造体対応情報が指定するタグの直前本例ではの直前までのSAXイベント列2当該指定するタグの1つまたは複数の繰り返しからなるSAXイベント列3当該指定するタグが終了した直後本例ではの直後から文書の末尾までのSAXイベント列から成る。節A2の例ではスキーマ-構造対応情報は、orderproductを指定しており、したがって、orderタグの下位のproductタグを指定している。本説明では、上述1のイベント列をHEAD部、2のイベント列をBODY部、3のイベント列をTAIL部と呼ぶ。教師XML文書と、HEAD部BODY部TAIL部の関係を図5に示す。また、節A3に、HEAD部BODY部TAIL部の例を示す。これは、節A1で示した教師XML文書と、節A2に示したスキーマ構造体対応情報から決定されたものである。コードコンポーザ13は、SAXイベント列を先頭から順番にEXIイベントに変換し、これをEXI文法木に基づき処理して、イベントを処理するごとに、対応するEXIストリームを生成する出力命令コードを生成する。処理するイベントが、置換文字列を指定するイベントに合致するときは、置換文字列が配置された箇所に対応する構造体の要素の値を取得し変換する関数型変換が不要なときは、変換は行わなくてよいを生成する。そして、イベントの列の処理順序に応じてEXIイベントコードの出力命令コードと、当該関数の値の出力命令コードとを配置組み合わせることで、専用EXIエンコーダを生成する。以下、コードコンポーザ13についてさらに詳しく説明する。コードコンポーザ13は、処理の間、内包する文法分析用の有限状態機械のスタックの状態を把握しつつ、処理を行う。なおHEAD部と、TAIL部には、変動する要素すなわち置換文字列が含まれない場合、それぞれ、固定のEXIイベント列が得られる。一方、BODY部では、変動する要素置換文字列が含まれるため、通信機器側で構造体の値をEXIストリームに挿入できるようにする必要がある。なお、HEAD部とTAIL部に変動要素が含まれる場合は、本発明で開示するBODY部と同様のアルゴリズムにより動的なEXIイベント列を出力する命令コードを生成できる。コードコンポーザ13は、イベントの列の処理に応じてられるEXIイベントの列と、個々の処理ステップの時点でのスタック状態を手掛かりに、専用EXIエンコーダを生成する。この際、エンコーダコードテンプレートを使用する。エンコーダコードテンプレートは、先ほど示したwchar2utf8といった変換関数や、プログラム命令コードを記述するのに必要なコードテンプレートを格納している。たとえば、HEAD部のSAXイベント列から生成されたEXIストリームを書き出す命令コードを、HEAD部出力関数であるencodeHeadの中に記述する。encodeHeadの内部に、HEAD部から生成されたEXIイベント列のビットを記述しておき、encodeHeadを実行することで、HEAD部に対応するEXIイベント列が通信機器で出力される。また、TAIL部のSAXイベント列から生成されたEXIストリームを書き出す命令コードを、TAIL部出力関数であるencodeTailを用いて記述する。encodeTailの内部に、Tail部から生成されたEXIイベント列のビットを記述しておき、encodeTailを実行することで、Tail部に対応するEXIイベント列が、通信機器で出力される。同様にボディ部に対しては、BODY部出力関数であるencodeBodyを用いて、BODY部から生成されたEXIストリームを書き出す命令コードを記述する。この際、通信機器側で読み出される構造体の値については、その値を読み込んで通信機器の内部記憶部等から、wchar2utf8関数等で、スキーマで定義された形式に符号化して、書き出されるようにする必要がある。たとえば、構造体メンバ仮にorderskuとするについては、wchar2utf8といったような命令コード関数を挿入しておく。この場合、専用EXIエンコーダを実行する通信機器では、encodeBodyを実行した際、EXIイベント列を順次読み出して書き出すが、途中でwchar2utf8を読み出すと、これを実行して、skuに対応する値を読み出して、utf8型に変換して、書き出す。続くEXIイベントが存在すれば、そのEXIイベントを書き出していく。BODY部出力関数の詳細な構成方法は、後述する。なおここに示した関数の記載形式はあくまで一例であり、本実施形態はこれらの例に限定されるものではない。これらのencodeHead、encodeBody、encodeTailを順番に実行するように記述したプログラムの構成例を図4に示す。必要ならば、構造体skucolorなどの定義ファイルをさらに追加記述してもよい。encodeHead、encodeBody、およびencodeTailの実行結果をつなげることで、出力となるEXIストリームが得られ、通信機器は、これを相手機器に送信する。コードコンポーザ13は、これら定義ファイルおよびプログラムを含むような専用EXIエンコーダを生成する。通信機器ではこの専用EXIエンコーダを実行することで、自動的に、メモリ内に存在する構造体の値をもとに、取得した構造体の値を組み込んだEXIストリームを生成できる。図6はエンコーダコンパイラ11の動作を説明するフローチャートである。エンコーダコンパイラ11は、教師XML文書をSAXパーサ12によりSAXイベント列に変換するS11。またエンコーダコンパイラ11は、専用EXIエンコーダを初期化するS12。HEAD部に対応するイベントリストHEventおよびTAIL部に対応するイベントリストTEventを初期化するS13。これらのリストは、それぞれHEAD部およびTAIL部から得られたEXIイベントのビット列を格納するためのものである。なお、これらのリストのビットは、定数として扱われ、出力となる専用EXIエンコーダのプログラムには、上述したように、これらのビットを出力する関数encodeHead、encodeTailが記述されることとなる。エンコーダコンパイラ11は、SAXイベント列を先頭から処理し、SAXイベントの処理に伴い、文法のスタックを構築する。このスタックはフルパス表記したXPathに相当し、上記スキーマ構造体対応情報に記述された対象タグ節A2の例ではproductタグに合致した際に、BODY部の処理を開始するS17。BODY部の処理を開始する前のSAXイベントは、HEAD部として処理されるS14のfalse。HEAD部の処理は、EXIエンコーダ::処理ステップを一つ行いS15、その結果をイベントリストHEventに格納するS16。この処理を、EXIエンコーダの文法スタックが対象タグに合致するまで続ける。文法スタックが対象タグに合致したら、その文法スタックが継続している間、BODY部処理により、SAXイベントが処理されるS17。この処理については複雑になるので後述する。BODY部処理終了時に、TAIL部に対応する可能性のある文法を得ることができる。この文法を記憶し、文書終了まで、残り部分のSAXイベント列を、EXIイベント列に変換し、イベントリストTEventに格納するS18、S19、S20。なお、TAIL部に存在する文法が複数存在するときはそれぞれについてTEventを作成するものとする。終了処理S21では、HEAD部の定数、BODY部のエンコーダ辞書、TAIL部の定数を用いて、専用EXIエンコーダを生成する。図7は、エンコーダコンパイラ11におけるSAXイベントの処理部分EXIエンコーダ::処理ステップのフローチャートを示す。本発明の実施形態においては、教師XML文書の内容に応じて、EXIのエンコード方法を切り替えることが特徴の一つであり、そのためにSAXイベント1つごとに処理を行う。エンコーダコンパイラ11は、文法構造に基づく状態機械のスタックを管理する必要があり、本フローチャートは、この様子を明示したものである。一つひとつのイベントの処理については、参考文献1の第6章など、公知の内容に基づく。SAXイベントを一つ取り出すごとにS51、EXI文法木によりSAXイベントを処理し、EXIストリームの一部分を生成するS52。EXIイベントがタグ終了に該当するときはS53のtrue、状態遷移スタックをポップpopするS54。EXIイベントがタグ開始に該当するときはS55のtrue、開始イベントに対応する状態機械を初期化し、状態機械スタックにプッシュする。タグ終了およびタグ開始のいずれにも該当しないときは、状態機械スタックに対しては何も行うことなく、本フローを終了する。たとえばATイベント、CHイベントに相当するイベントがこの場合に該当する。図8は、エンコーダコンパイラ11におけるBODY部処理図6のS17の流れを示したフローチャートである。BODY部は、教師XML文書からひとつ与えられるが、これを再帰的に複数回処理することにより可能性のある文法を発見し、それぞれの文法に対応するサブエンコーダを生成する。つまり節A1の例ではBODY部が1つ存在するが、実際に通信機器が送信したい内容が節A4のときは、複数回、BODY部に対するエンコード処理を繰り返す必要がある。繰り返しのたびに同じ文法を使うとは限らないため、可能性のあるそれぞれの文法に対応するBODY部用のエンコーダサブエンコーダを生成する。たとえば節A6の例では、1回目はTermproduct00が用いられるが、2回目以降は、Termproduct10が用いられる。このため以下の処理では、節A6および節A1の例の場合は、図9に示すように、1回目用のエンコーダTermproduct00対応関数と、2回目以降用に適用するエンコーダTermproduct01対応関数とを含むBODY部エンコーダ関数が生成される。節A4の例に則して説明すれば、3つのボディ部の繰り返しのうち、最初のボディ部に対してはTermproduct00対応関数を適用し、残り2つのBODY部に対してはTermproduct01対応関数を適用して、EXIへのエンコードを行うことに相当する。このように、BODY部は文法をかえて何度もエンコードしうるため、BODY部処理開始時点でのSAXストリーム位置pを記録しておきS31、後でストリーム位置をpに復帰させるS41。文法Rをキーとする辞書をLRと表記する。LRは、完成品のエンコーダ専用EXIエンコーダで用いられる、BODY部のサブエンコーダの辞書である。サブエンコーダは、入力となる構造体を、EXIビット列に変換する機能を含む。また、終了が確定している文法以外は、現在の構造体の次の構造体が入力された際に利用する文法が確定するため、その次の文法の辞書PRをあわせて持つ。全ての文法のうち、BODY部の開始タグたとえばに対応する文法それぞれを、順にRに代入し、逐次的に以下の処理を行う。まず、各文法に対して、独立した個別エンコーダを初期化する。ただし、XMLスキーマから生成された文法のうち、Rを初期文法として選択するため、ここでは個別エンコーダをEと表記する。SAXイベント列が、BODY部タグ終了位置になるまで、以下の処理を継続するS35のfalse。各文法に対するBODY部の処理は、SAXイベントに置換文字列が含まれるかによって分岐するS36。置換文字列は、前述したように、教師XMLの例におけるNAMEに対応する。置換文字列は、アトリビュート属性、あるいはタグで囲まれた本文に対して許される。節A2にあるスキーマ構造体対応情報においては、文字列で記述している例と、相対XPathで記述する例を示している。もしSAXイベントが置換文字列、つまり構造体に関する情報を含まないのであれば、EによりそのSAXイベントを処理し、処理の出力をLRに追記するS38。もしLRが存在しなければ、空のリストを初期化し、初期化されたリストに追記する以下同じ。SAXイベントに置換文字列を含む場合も、Eを実行するが、これはEが持つ状態を遷移させるためのもので、出力すなわち置換文字列そのものは使わないS39。その上で、置換文字列処理を行う。置換文字列については、本文にある場合節A1の例のQUANTITYPRICEと、タグ内のアトリビュート節A1の例のSKUCOLORとして定義される場合とがある。また、置換方法構造体のどの要素の値を、どのように変換するかは、スキーマ構造体対応情報によって定まる。この場合、LRに、以下のように内容が追記されるS38。タグ内のアトリビュートに関しては、現在の文法に基づき生成されたATイベントコードと、スキーマに準拠する型たとえばスキーマ-構造体対応情報のwchr2utf8のutf8になるように構造体の要素の値を変換する変換関数と、および構造体中の入力となるべき要素を指定する入力要素ポインタたとえばスキーマ-構造体対応情報におけるskuとの3つの組をLRに追記する。一方、XMLの本文タグで囲まれたテキスト文などについては、CHイベントコード、変換関数、入力要素ポインタを、LRに登録する。変換関数は、スキーマ構造体対応情報から得られる変換方法に対応する関数である。節A2では、相対XPath方式の例において、wchar型をutf8文字列に変換するwchar2utf8が、構造体要素skuおよびcolorに対応している。また、int型をutf8文字列に変換するint2utf8が、quantityタグに囲まれる本文に対応している。また、float型をutf8文字列に変換するfloat2utf8が、priceタグに囲まれた本文に、対応している。これらの関数は、入力としてC言語など、エンコーダを記述する言語に基づく型を持ち、出力としてスキーマで許された型をもつことが条件である。その中で実装として単純な変換のみで構成してもよいし、変換関数中で処理を実施しても良い。これらの処理を、SAXイベントがBODY部タグ終了位置になるまで、繰り返す。なお、SAXイベントがBODY部タグ終了位置になればS35のtrue、この文法についての処理を終了し、Eが現在位置している文法をPRに記録しS33、SAXストリーム位置をpに復帰しS41、次の文法に処理を移すS33。最終的にBODY部開始タグに対する処理を全て終えたら、LRおよびPRを、コードコンポーザ13は得る。対応するすべての文法の個数分だけ、LRおよびPRのペアが同数得られることとなる。ここで、終了処理図6のS21においては、LRとPRから以下のようなコード結合処理が行われる。まず、BODY部処理の開始位置の文法を初期文法とし、これを内部状態Rとする初期化コードを生成する。その上で、以下の処理を実施する命令コード図9の例の各関数の内容に相当するを、エンコーダに格納する。1スキーマ構造体対応情報にて定義される構造体を入力として、LRの内容リストを得る。2リストの先頭から順番に以下の処理を行う。もし処理対象が定数たとえばイベントコードのビットのみであったら、定数を出力する。もし処理対象が入力要素ポインタ構造体を示すとその変換関数の組であれば、そのポインタが示す値を変換関数に渡し、変換関数の出力をそのまま出力する。もしリストが終了したら、処理を終了する。この処理の前に、イベントリストHEventの内容の出力を行う命令コード、後ろにイベントリスTEventの内容の出力を行う命令コードを組み合わせることで、エンコーダは完成である。以上のエンコーダコンパイラ11により、特定のXMLスキーマによって与えられる文法に対し、教師XML文書による効率的な専用EXIエンコーダを簡便に生成できる。この結果、同一のXMLスキーマであっても搭載機器種別毎に利用機能が異なるケースなどにおいて、機器種別毎に最適化したエンコーダを簡便に作成できる。また、個別の搭載機器のIDなども含めて教師XMLを記載することもでき、機器ひとつひとつに最適化されたエンコーダを生成できる。また、スマートメータなど、資源の制約が厳しい機器において、正規のXMLに対応するEXIストリームを生成できる。図10に、本実施形態により生成した専用EXIエンコーダを組み込んだ通信機器の構成例を示す。本実施形態で生成した専用EXIエンコーダは、スマートメータ等の資源の厳しい通信機器に組み込まれる。通信機器101は、相手機器との間で効率的なXML文書のやりとりを行うため、相手機器図示せずに、送信したいXML文書の内容がエンコードされたEXIストリームを送信する。エンコーダ実行部であるCPU102が、記憶部103内の専用EXIエンコーダをメモリ104に展開して実行する。これにより、図3に示したように、構造体の値が挿入されたEXIストリームEXIイベント列が生成される。つまり、XML文書およびXMLスキーマを用いることなく、低負荷な処理で、EXIストリームが生成できる。通信部105は、このEXIストリームを相手機器に、ネットワークを介して送信する。必要に応じて、暗号化や認証を行っても良い。なお、以上に説明した実施形態におけるエンコーダコンパイラ11は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、エンコーダコンパイラ11におけるSAXパーサ12およびコードコンポーザ13は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、エンコーダコンパイラ11は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD-ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。AサンプルデータA1教師XML文書の例QUANTITYPRICEA2スキーマ構造体対応情報置換文字列方式によるもの:orderproductstructproductwcharskuwchar2utf8SKUwcharcolorwchar2utf8COLORintquantityint2stringQUANTITYfloatpricefloat2stringPRICE相対XPath方式によるものorderproductstructproductwcharskuwchar2utf8skuwcharcolorwchar2utf8colorintquantityint2utf8quantitytextfloatpricefloat2utf8pricetextA3教師XML文書の分割例A31HEAD部A32BODY部QUANTITYPRICEA33END部A4想定するXML文書の具体例40339502515503018395A5XMLスキーマの例A6EXI文法の例CompletegrammarforelementEventCodeUsecolor0ATschematypedvalueUsecolor10ATschematypedvalueUsesku11EE20ATUsecolor021ATUsecolor022ATUsecolor023ATuntypedvalueUsecolor1240ATuntypedvalueUsesku1241ATuntypedvalueUsecolor0242SEUsesku1copied25CHuntypedvalueUsesku1copied26Usecolor1ATschematypedvalueUsesku10EE10ATUsecolor111ATuntypedvalueUsesku1120ATuntypedvalueUsecolor1121SEUsesku1copied13CHuntypedvalueUsesku1copied14Usesku1SETermdescription010SETermquantity011EE20ATUsesku121ATuntypedvalueUsesku1220SEUsesku1copied23CHuntypedvalueUsesku1copied24Usesku1copiedSETermdescription010SETermquantity011EE20SEUsesku1copied21CHuntypedvalueUsesku1copied22Termdescription01SETermquantity010EE1SETermdescription0120CHuntypedvalueTermdescription0121Termquantity01SETermprice010EE1SETermquantity0120CHuntypedvalueTermquantity0121Termprice01SETermdescription110SETermquantity111EE2SETermprice0130CHuntypedvalueTermprice0131Termdescription11SETermquantity110EE1SETermdescription1120CHuntypedvalueTermdescription1121Termquantity11SETermprice110EE1SETermquantity1120CHuntypedvalueTermquantity1121Termprice11EE0SETermprice1110CHuntypedvalueTermprice1111CompletegrammarforelementEventCodeTermproduct00SETermproduct100EE10ATTermproduct0011ATTermproduct0012ATTermproduct0013ATuntypedvalueTermproduct00140SETermproduct00copied15CHuntypedvalueTermproduct00copied16Termproduct00copiedSETermproduct100EE10SETermproduct00copied11CHuntypedvalueTermproduct00copied12Termproduct10SETermproduct100EE1SETermproduct1020CHuntypedvalueTermproduct1021