(57)【要約】      （修正有）【課題】ワイルドカードで定義された拡張要素に対応する拡張スキーマを反映したＥＸＩ文法を作成することで、ワイルドカードで定義された拡張要素を含むＸＭＬ文書の符号化率向上を実現する。【解決手段】エンコーダは、ＸＭＬ文書の開始箇所から終了箇所に向かってＸＭＬ文書の符号化を行うとともに、ＸＭＬ文書の開始箇所と終了箇所との間にある拡張要素を検知する符号化部と、基本スキーマに基づき生成される第１ＥＸＩ（Efficient XML Interchange）文法と、拡張要素の構造を規定する拡張スキーマに基づき生成される第２ＥＸＩ文法とを合成した第３ＥＸＩ文法を生成する合成部とを備え、符号化部は、ＸＭＬ文書のうち、開始箇所から拡張要素を検知するまでは第１ＥＸＩ文法に基づき符号化し、ＸＭＬ文書のうち、拡張要素を検知後は第３ＥＸＩ文法に基づき符号化する。【選択図】図１
2014191613.tif 000002
【特許請求の範囲】
【請求項１】
ＸＭＬ文書の開始箇所から前記ＸＭＬ文書の終了箇所に向かって前記ＸＭＬ文書の符号化を行うとともに、前記ＸＭＬ文書の開始箇所と前記ＸＭＬ文書の終了箇所との間にある拡張要素を検知する符号化部と、
基本スキーマに基づき生成される第１ＥＸＩ（Efficient XML Interchange）文法と、と前記拡張要素の構造を規定する拡張スキーマに基づき生成される第２ＥＸＩ文法とを合成した第３ＥＸＩ文法を生成する合成部とを備え、
前記符号化部は、前記ＸＭＬ文書のうち、前記開始箇所から前記拡張要素を検知するまでは前記第１ＥＸＩ文法に基づき符号化し、前記ＸＭＬ文書のうち、前記拡張要素を検知後は前記第３ＥＸＩ文法に基づき符号化することを特徴とするエンコーダ。
【請求項２】
前記第１ＥＸＩ文法と前記第２ＥＸＩ文法とを保持する第１記憶部を備えることを特徴とする請求項１記載のエンコーダ。
【請求項３】
前記基本スキーマと、前記拡張スキーマとを保持する第２記憶部と、
前記基本スキーマに基づき前記第１ＥＸＩ文法を生成し、前記拡張スキーマに基づき前記第２ＥＸＩ文法を生成する生成部とを更に備えることを
特徴とする請求項１、又は２記載のエンコーダ。
【請求項４】
前記符号化部は、前記ＸＭＬ文書に含まれる要素が前記基本スキーマにおけるワイルドカードに対応する要素であることを検知することで、前記拡張要素を検知する請求項１記載のエンコーダ。
【請求項５】
前記第２記憶部は、前記拡張スキーマを含む複数のスキーマを記憶し、
前記符号化部は、前記拡張要素を検知する際、当該検知した拡張要素を規定する拡張スキーマを特定するスキーマＩＤを検知し、
前記合成部は、前記第１ＥＸＩ文法と、前記記憶部が記憶する複数のスキーマのうち、前記符号化部が検知したスキーマＩＤにより特定される拡張スキーマに基づき生成された第２ＥＸＩ文法とに基づき第３ＥＸＩ文法を生成することを特徴とする
請求項３記載のエンコーダ。
【請求項６】
前記第１ＥＸＩ文法は、第１文書文法と、第１型文法と、第１文字列表初期化定義とを備え、
前記第２ＥＸＩ文法は、第２文書文法と、第２型文法と、第２文字列表初期化定義とを備え、
前記合成部は、前記第３ＥＸＩ文法を生成する際、前記３ＥＸＩ文法の文書文法を、前記第２文書文法とすることを特徴とする請求項１、又は５記載のエンコーダ。
【請求項７】
前記第１ＥＸＩ文法は、第１文書文法と、第１型文法と、第１文字列表初期化定義とを備え、
前記第２ＥＸＩ文法は、第２文書文法と、第２型文法と、第２文字列表初期化定義とを備え、
前記合成部は、前記第３ＥＸＩ文法を合成する際、前記第３ＥＸＩ文法の型文法を、前記第１型文法と前記第２型文法との和集合とすることを特徴とする請求項１、又は６記載のエンコーダ。
【請求項８】
前記第１ＥＸＩ文法は、第１文書文法と、第１型文法と、文字列の順序付き集合である第１URI Partitionを含む第１文字列表初期化定義とを備え、
前記第２ＥＸＩ文法は、第２文書文法と、第２型文法と、文字列の順序付き集合である第２URI Partitionを含む第２文字列表初期化定義とを備え、
前記第３文字列表初期化定義は、文字列の順序付き集合である第３URI Partitionを備え、
前記合成部は、前記第３ＥＸＩ文法を合成する際、前記第３ＥＸＩ文法の文字列表初期化定義の第3URI Partionとして、前記第１URI Partitionの文字列の順序つき集合の後に、前記第２URI Partitionの集合のうち前記第１URI Partitionの集合に含まれない元を、前記第２URI Partitionの文字列の順序を保存して結合した集合、又は、前記第2URI Partitionの文字列の順序つき集合の後に、前記第1URI Partitionの集合のうち前記第2URI Partitionの集合に含まれない元を、前記第1URI Partitionの文字列の順序を保存して結合した集合を生成することを特徴とする
請求項１、又は請求項７記載のエンコーダ。
【請求項９】
前記第１文字列表初期化定義は、更に、前記第１URI Partitionに含まれるＵＲＩに属する第１Local Name Partitionを備え、
前記第２文字列表初期化定義は、更に、前記第２URI Partitionに含まれるＵＲＩに属する第２Local Name Partitionを備え、
前記第３文字列表初期化定義は、更に、前記第３URI Partitionに含まれるＵＲＩに属する第３Local Name Partitionを備え、
前記合成部は、前記第３ＥＸＩ文法を合成する際、前記第3URI Partitionに含まれるＵＲＩに属するLocal Name Partitionとして、前記第３URI Partitionに含まれるURIに対応する第１Local Name Partitionの集合の後に、前記第３URI Partitionに含まれるURIに対応する第2Local Name Partitionの集合のうち、前記第３URI Partitionに含まれるURIに対応する第１Local Name Partitionの集合に含まれない元を、前記第３URI Partitionに含まれるURIに対応する前記第２Local Name Partitionの集合の順序を保存して結合した集合、又は、前記第３URI Partitionに含まれるURIに対応する第2Local Name Partitionの集合の後に、前記第３URI Partitionに含まれるURIに対応する第1Local Name Partitionの集合のうち、前記第３URI Partitionに含まれるURIに対応する第2Local Name Partitionの集合に含まれない元を、前記第３URI Partitionに含まれるURIに対応する前記第1Local Name Partitionの集合の順序を保存して結合した集合を、生成することを特徴とする請求項8記載のエンコーダ。
【請求項１０】
前記符号化部は、更に、入力を受けたXML文書に登場した文字列と当該文字列に対応付けた符号化情報とを対応付けたString Tableに基づく符号化を行い、前記ＸＭＬ文書中の、前記拡張要素開始時点で、前記拡張要素の前までに入力を受けたＸＭＬ文書までに生成されたString Tableを初期化するか継続利用するかを示すフラグを検知することで、String Tableを初期化するか、継続利用するかを制御することを特徴とする請求項１記載のエンコーダ。
【請求項１１】
前記符号化部は、更に、前記拡張要素終了時点で、前記拡張要素の内容に基づき更新されたString Tabeを継続利用するか、前記拡張要素開始時点のString tableを復元するかを示すフラグを検知することで、String Tableを継続利用するか、復元するかを制御することを特徴とする請求項１０記載エンコーダ。
【請求項１２】
ＸＭＬ文書の開始箇所から前記ＸＭＬ文書の終了箇所に向かって前記ＸＭＬ文書の符号化を行うとともに、前記ＸＭＬ文書の開始箇所と前記ＸＭＬ文書の終了箇所との間にある拡張要素を検知する符号化機能と、
基本スキーマに基づき生成される第１ＥＸＩ（Efficient XML Interchange）文法と、と前記拡張要素の構造を規定する拡張スキーマに基づき生成される第２ＥＸＩ文法とを合成した第３ＥＸＩ文法を生成する合成機能とを備え、
前記符号化機能は、前記ＸＭＬ文書のうち、前記開始箇所から前記拡張要素を検知するまでは前記第１ＥＸＩ文法に基づき符号化し、前記ＸＭＬ文書のうち、前記拡張要素を検知後は前記第３ＥＸＩ文法に基づき符号化することを特徴とするプログラム。
【請求項１３】
ＸＭＬ文書の開始箇所から前記ＸＭＬ文書の終了箇所に向かって前記ＸＭＬ文書の符号化を行うとともに、前記ＸＭＬ文書の開始箇所と前記ＸＭＬ文書の終了箇所との間にある拡張要素を検知する符号化ステップと、
基本スキーマに基づき生成される第１ＥＸＩ（Efficient XML Interchange）文法と、と前記拡張要素の構造を規定する拡張スキーマに基づき生成される第２ＥＸＩ文法とを合成した第３ＥＸＩ文法を生成する合成ステップとを備え、
前記符号化ステップは、前記ＸＭＬ文書のうち、前記開始箇所から前記拡張要素を検知するまでは前記第１ＥＸＩ文法に基づき符号化し、前記ＸＭＬ文書のうち、前記拡張要素を検知後は前記第３ＥＸＩ文法に基づき符号化することを特徴とするエンコード方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、エンコーダ、エンコード方法及びプログラムに関する。
【背景技術】
【０００２】
効率的、かつ高速なデータ処理のための規格としてＥＸＩ（Efficient XML Interchange）が提案されている。
【０００３】
EXIは、XML スキーマを用いて、XML のコンパクトなバイナリ表現を作成する技術であり、非特許文献1で定義されている。
【０００４】
ＸＭＬからＥＸＩ形式への変換の一手法として、ＸＭＬスキーマから生成されるＥＸＩ文法（Schema-Informed Grammar）に基づくものがある。尚、ＸＭＬスキーマは、よく知られているように、ＸＭＬ文書の構造を規定するものである。ＥＸＩ文法は、ＸＭＬスキーマから既知の方法で、生成される。
【０００５】
XML 文書は、文書全体の構造が基本スキーマにより規定されている。XML文書は、一つ又は複数の拡張要素を含み、拡張要素毎に、拡張スキーマにより構造が規定されていることがある。例えば、ＸＭＬ文書は、ワイルドカードと呼ばれる記法を用いることで、文書開始時点では参照されていなかった拡張スキーマに定義された拡張要素を動的に参照することがある。
【０００６】
従来、ＸＭＬ文書をＥＸＩ形式に変換するためのＥＸＩ文法は、拡張スキーマを反映することができなかった。したがって、従来、拡張スキーマに対応するＸＭＬの要素（拡張要素）は、拡張スキーマを反映しないＥＸＩ文法に基づき変換されていたため、符号化率が低かった。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】John Schneider and Takuki Kamiya. Efficient XML Interchange (EXI) Format 1.0. W3C Recommend(EXI) Format 1.0. W3C Recommendation, March 2011. http://www.w3.org/TR/exi/.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の一側面は、ワイルドカードで定義された拡張要素に対応する拡張スキーマを反映したＥＸＩ文法を作成することで、ワイルドカードで定義された拡張要素を含むＸＭＬ文書の符号化率向上を実現する。
【課題を解決するための手段】
【０００９】
本発明の一側面にかかるエンコーダは、ＸＭＬ文書の開始箇所から前記ＸＭＬ文書の終了箇所に向かって前記ＸＭＬ文書の符号化を行うとともに、前記ＸＭＬ文書の開始箇所と前記ＸＭＬ文書の終了箇所との間にある拡張要素を検知する符号化部と、基本スキーマに基づき生成される第１ＥＸＩ（Efficient XML Interchange）文法と、と前記拡張要素の構造を規定する拡張スキーマに基づき生成される第２ＥＸＩ文法とを合成した第３ＥＸＩ文法を生成する合成部とを備え、前記符号化部は、前記ＸＭＬ文書のうち、前記開始箇所から前記拡張要素を検知するまでは前記第１ＥＸＩ文法に基づき符号化し、前記ＸＭＬ文書のうち、前記拡張要素を検知後は前記第３ＥＸＩ文法に基づき符号化することを特徴とする。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態に係るエンコーダ１００を示すブロック図。
【図２】エンコーダ１００の動作を示すフローチャート。
【図３】基本スキーマの例を示す図。
【図４】拡張スキーマの第１の例を示す図。
【図５】拡張スキーマの第２の例を示す図。
【図６】ＸＭＬの例を示す図。
【図７】図３の基本スキーマから導出したＥＸＩ文法の文書文法及び型文法の状態遷移図。
【図８】図４の拡張スキーマから導出したＥＸＩ文法の文書文法及び型文法の状態遷移図。
【図９】図3の基本スキーマに由来するEXI文法と図4に示す拡張スキーマに由来するEXI文法を合成した後の文書文法と型文法を示す図。
【図１０】図3で定義される基本スキーマから生成されるＥＸＩ文法の文字列表初期化定義の例を示す図。
【図１１】図４で定義される拡張スキーマから生成されるＥＩＸ文法の文字列表初期化定義の例を示す図。
【図１２】図3で定義される基本スキーマから生成されるＥＸＩ文法と、図4で定義される拡張スキーマから生成されるＥＸＩ文法とを合成した際に生成される文字列表初期化定義の例を示す図。
【図１３】本発明の実施形態の変形例のエンコーダ２００を示すブロック図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について、図面を参照しながら説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１２】
図１は、本発明の実施形態に係るエンコーダ１００を示すブロック図である。
【００１３】
エンコーダ１００は、ＥＸＩ符号化部１０５とスキーマストレージ１０２とＥＸＩ文法コンパイラ１０３とＥＸＩ文法合成部１０４と実行文法切り替え部１０５とを備える。
【００１４】
ＥＸＩ符号化部１０１は、ＸＭＬ文書の開始箇所から終了箇所に向かってＸＭＬ文書の符号化を行う。図６にＸＭＬ文書の例を示す。図６の例では、ＸＭＬ文書の開始箇所は、1行目の  <base  である。ＸＭＬ文書の終了箇所は、11行目の  /base>である。ＥＸＩ符号化部１０１は、ＸＭＬ文書の符号化を行う際、開始箇所から拡張要素の前の部分までは、あらかじめ定められたＥＸＩ文法に基づき、符号化を行う。例えば、ＸＭＬ文書のうち、開始箇所から拡張要素を検知する（後述する）前までは、あらかじめ定められたＥＸＩ文法に基づき、符号化を行う。ここで、あらかじめ定められたＥＸＩ文法は、ＸＭＬ文書全体のスキーマである基本スキーマＡに基づき生成される。
【００１５】
ＥＸＩ符号化部１０５は、ＸＭＬ文書の開始箇所から終了箇所に向かって符号化を行うのと同時に、ＸＭＬ文書内に、基本スキーマＡと異なるスキーマにより定義される拡張要素があるか否かを検知する。ＥＸＩ符号化部１０５は、拡張要素を検知すると、ＥＸＩ文法合成部１０４に対して、当該検知した拡張要素を定義するスキーマから生成されるＥＸＩ文法と基本スキーマＡから生成されるＥＸＩ文法とを合成するように指示を出す。尚、ＥＸＩ符号化部１０１は、拡張要素の検知を、XML文書を基本スキーマと対照しながら解釈し、ワイルドカードに対応する要素を発見することによって行う。具体的には、図6において<payload>要素の中身は、図3の <xs:any> のルールにより解釈され、これがワイルドカードに対応する要素であることを検知できる。ここでは、<intKV>要素あるいは<floatKV>要素は、ワイルドカードに対応する要素である。そして、<intKV>要素あるいは<floatKV>要素は、各々 http://example.org/ext あるいは http://example.org/efloat 名前空間で定義されるため、名前空間を手掛かりに拡張要素を参照できる。また、拡張要素に対応するスキーマを、スキーマを特定するスキーマＩＤを検知することで検知する。ＥＸＩ符号化部１０１は、ＥＸＩ文法合成部１０４への指示の際、スキーマＩＤを伝達してもよい。
【００１６】
ＥＸＩ符号化部１０５は、拡張要素を検知後、前述した拡張要素を、合成されたＥＸＩ文法に基づきＥＸＩ符号化を行い、生成したＥＸＩ文書を出力する。
【００１７】
ＥＸＩ符号化部１０５は、拡張要素のＥＸＩ符号化を完了すると、再び、基本スキーマＡに基づくＸＭＬ文書のＥＸＩ符号化を再開する。ここで、拡張要素のＥＸＩ符号化完了は、例えば、拡張要素の終了タグで検知することができる。図6においては、</intKV>あるいは</floatKV>がこれに対応する。
【００１８】
スキーマストレージ１０２は、基本スキーマＡ及び拡張スキーマを記憶する。拡張スキーマは、単数でも良いし複数でも良い。スキーマストレージ１０２は、拡張スキーマ以外のスキーマも記憶してもよい。スキーマは、あらかじめ記憶しておいてもよいし、ＸＭＬ文書のＥＸＩ符号化部１０１への入力と合わせてスキーマストレージ１０２に入力されても良い。スキーマストレージ１０２は、基本スキーマＡ及び拡張スキーマを、スキーマを特定するスキーマＩＤと対応付けて記憶してもよい。例えば、スキーマストレージ１０２が、基本スキーマＡと拡張スキーマＢ〜Ｄを記憶している場合を考える。この場合、スキーマストレージ１０２は、スキーマＡ〜Ｄと、それぞれのスキーマを特定するスキーマＩＤ（Ａ〜Ｄ）とを対応付けて記憶する。
【００１９】
ＥＸＩコンパイラ１０４は、スキーマストレージ１０２に記憶したスキーマを用いて、ＥＸＩ文法を生成する。尚、ＥＸＩコンパイラは、拡張スキーマに対応するＥＸＩ文法を生成する場合、ＥＸＩ符号化部１０１から、基本スキーマＡと、例えば、拡張スキーマＢとを合成したＥＸＩ文法を生成する指示があった場合に、拡張スキーマＢに対応するＥＸＩ文法を生成しても良いし、あらかじめ、拡張スキーマＢに対応するＥＸＩ文法を生成しておいても良い。ＥＸＩコンパイラ１０３は、生成したＥＸＩ文法をＥＸＩ文法合成部１０４に渡す。
【００２０】
ＥＸＩ文法合成部１０４は、ＥＸＩ符号化部１０１から、ＥＸＩ文法の合成の指示を受けると、基本スキーマＡに対応するＥＸＩ文法と、拡張要素スキーマに対応するＥＸＩ文法との合成を行う。具体的な、合成方法についての詳細は後述する。ＥＸＩ文法合成部１０４は、生成したＥＸＩ文法を、ＥＸＩ文法切り替え部１０５に渡す。
【００２１】
ＥＸＩ文法切り替え部１０５は、ＥＸＩ文法合成部１０４から、合成したＥＸＩ文法を受け取ると、ＥＸＩ符号化部１０１に対して、合成したＥＸＩ文法に基づき、ＥＸＩ符号化を行うように指示を出す。
【００２２】
次に、エンコーダ１００の動作例を説明する。図２は、エンコーダ１００の動作例を示すフローチャートである。なお、これは一例であり、拡張要素内にてさらに拡張要素を許す場合は、同等の処理を再帰的に実施するなどにより実現できる。
【００２３】
ＸＭＬ文書の分割入力を受け付け、Ｓ１０１において、ＸＭＬ文書全体の符号化が完了していない場合（Ｓ１０１  ＮＯ）に、Ｓ１０２において、ＥＸＩ符号化部１０１は、基本スキーマＡに対応するＥＸＩ文法により、入力されたＸＭＬ文書をＸＭＬの開始箇所から終了箇所に向かって順次ＥＸＩ符号化する。Ｓ１０３において、ＥＸＩ符号化部１０１は、入力されたＸＭＬ文書内に、基本スキーマＡと異なるスキーマにより定義される拡張要素があるか否かを検知する。拡張要素の検知は、たとえば、ＸＭＬ文書内に含まれるワイルドカードに対応する要素を発見することで実現できる。拡張要素を検知した場合（Ｓ１０３  ＹＥＳ）、ＥＸＩ符号化部１０１が、ＥＸＩ文法合成部１０４に、検知した拡張要素に対応するスキーマＩＤを含む、ＥＸＩ文法合成指示を行う。ＥＸＩ合成部１０４は、ＥＸＩ文法合成指示に基づき、基本スキーマＡに対応するＥＸＩ文法と、スキーマＩＤにより特定される拡張スキーマに対応するＥＸＩ文法とを合成する。ＥＸＩ文法合成部１０４は、合成したＥＸＩ分法をＥＸＩ文法切り替え部１０５に通知し、ＥＸＩ文法切り替え部１０５は、ＥＸＩ符号化部１０１に、合成したＥＸＩ文法でのＥＸＩ符号化を指示する。ＥＸＩ符号化部１０１は、拡張要素を、合成後のＥＸＩ文法に基づき符号化する（Ｓ１０４）。ＥＸＩ符号化部１０１は、拡張要素の符号化を完了すると（Ｓ１０５  ＹＥＳ）、基本スキーマに基づくＥＸＩ文法に基づくＥＸＩ符号化を再開する（Ｓ１０２）。ＸＭＬ文書全体の符号化を完了すると、処理を終了する。
【００２４】
以上の動作により、エンコーダ１００は、ワイルドカードで定義された拡張要素に対応する拡張スキーマを反映したＥＸＩ文法を作成することで、ワイルドカードで定義された拡張要素を含むＸＭＬ文書の符号化率向上を実現する。
【００２５】
基本スキーマＡに対応するＥＸＩ文法と拡張要素のＥＸＩ文法とを合成する際に、工夫を入れることで、ＥＸＩ符号の符号化の際の効率は更に向上できる。以下では、ＥＸＩ文法の合成時の工夫について説明する。詳細は後述するが、基本スキーマに対応するＥＸＩ文法と拡張要素のスキーマに対応するＥＸＩ文法との合成後の文法のサイズを小さくする。
【００２６】
尚、以下の説明では、EXI 符号化(エンコード) について記述するが、以下、デコードでも同等である。
【００２７】
（ＥＸＩ文法の合成について）
以下では、ＸＭＬ 文書のＥＸＩ符号化に用いるＥＸＩ文法をＧeiと表現する。（i は整数である。）ここで、ＸＭＬ文書のＥＸＩ符号化開始時点から符号化に利用されるもＥＸＩ文法をＧe0と表現する。以後、登場する順に、拡張要素の符号化に利用するＥＸＩ文法をＧe1、Ｇe２・・・・などと表現する。また、EXI 文書の開始時点で利用する基本スキーマであるXML スキーマを、スキーマA とする。拡張要素に対応するスキーマとしてスキーマＢ，Ｃがあるとする。スキーマＡ、Ｂ、Ｃ各々に対応するEXI 文法をＧA、ＧＢ、ＧＣとする。
【００２８】
以下では、文書の開始から終了までのＥＸＩ文法を説明する。
【００２９】
文書開始時点でのＥＸＩ文法は、この文書全体がスキーマA で定義されるものであることから、式１で表せる。
【００３０】
Ｇe0 = ＧA    ・・・・・・・・式１）  次に、スキーマB により定義される拡張要素B の開始時点において、ＥＸＩ文法を切り替える。ここで、実効文法を単純にＧＢ に切り替えるのでは、拡張要素B で利用される、スキーマA で定義されている要素の定義が含まれない。したがって、拡張要素Ｂに対するＥＸＩ符号化に用いるＥＸＩ文法は、ＧAとＧＢとを合成したものとなる。拡張要素の符号化に用いるＥＸＩ文法をＧe1とすると、ＧA にＧＢを合成したものとして、以下の式２で表記する。    
Ｇe1 =ＧA＋ＧＢ・・・・・・・式２）
次に、ＸＭＬ文書内の拡張要素B の終了時点において、ＥＸＩ文法Ｇe1から実効文法はＧe0に切り替える。
【００３１】
次に、スキーマC による拡張要素C の開始時点において、ＥＸＩ文法を切り替える。拡張要素Ｃに対するＥＸＩ符号化に用いるＥＸＩ文法は、ＧAとＧＣとを合成したものとなる。拡張要素の符号化に用いるＥＸＩ文法をＧe２とするとＧAとＧＣとを合成したものとして、以下の式３で表記する。
【００３２】
Ｇe1 =ＧA＋ＧＢ・・・・・・・式３）
次に、ＸＭＬ文書内の拡張要素Ｃ の終了時点において、ＥＸＩ文法Ｇe2から実効文法はＧe0に切り替える。
【００３３】
尚、式２と式３では、二つのＥＸＩ文法を合成する表記として＋と表記したが、この表記は、２つのＥＸＩ文法を合成することを示す表記であり、単純な加算を示すものではない。
【００３４】
（ＥＸＩ文法の定義）
次に、ＥＸＩ文法の定義を説明する。
【００３５】
ＥＸＩ文法Ｇe は、文書文法(Document Grammar)：Ｄと、型文法(Type Grammar)：Ｔと、文字列表(String Table) 初期化定義Ｉとを備える文法である。ＥＸＩ文法Ｇeは、以下の式４で表記できる。
【００３６】
Ｇe =｛Ｄ，Ｔ，Ｉ｝・・・・・・・式４）
ここで、文書文法Ｄ は、一組の生成文法である。
【数１】
2014191613.tif 000003
【００３７】
文字列表初期化定義Ｉは、EXI により定義されるURI Partition U および、各URI に所属するLocal Name Partition の集合Ｌ にわかれる。文字列表初期化定義Ｉは、以下の式５）で表記できる。
【００３８】
Ｉ=｛Ｕ，Ｌ｝・・・・・・・式５）
【数２】
2014191613.tif 000004
【００３９】
以上が、ＥＸＩ文法Ｇe  の説明である。
【００４０】
（ＥＸＩ文法の合成時における工夫の説明）
次に、ＥＸＩ文法の合成時における工夫を説明する。
【００４１】
基本スキーマと拡張要素に対応するスキーマ各々のＥＸＩ文法を合成する際に、以下の工夫をすることができる。基本スキーマに由来するEXI 文法をＧ１、拡張スキーマに由来するEXI文法をＧ２、合成後の文法をＧ３とする。また、合成後のＥＸＩ文法Ｇ３の文書文法をＤ３、型文法をＴ３、文字列表(String Table) 初期化定義をＩ３と表記する。以下に、式６を定義する。
【００４２】
Ｇ３＝Ｇ１＋Ｇ２＝｛Ｄ３，Ｔ３，Ｉ３｝・・・式６）
ここで、+（ 加算記号）は便宜上２つの文法の合成することを表記するために用いたものであり、通常の加算とは異なる独自の定義である。
【００４３】
基本スキーマに由来するＥＸＩ文法と拡張スキーマに由来するＥＸＩ文法の合成における、Ｄ３、Ｔ３、Ｉ３は各々単純に、以下の工夫を行うことで、ＥＸＩの符号化における効率向上につながる。
【００４４】
Ｄ３、は、拡張スキーマによる拡張要素の文書定義に相当するものである。従って、Ｄ３は、拡張要素の文書定義を採用することができる。つまり、Ｄ３は、以下の式７で表現できる。
【００４５】
Ｄ３＝Ｄ２・・・・式７）
なお、Ｄ３は、Ｄ２とＤ１の要素の和でもよい。
【００４６】
Ｔ３は、拡張スキーマにおける型の集合と、基本スキーマにおける型の集合の定義を含める必要がある。従って、Ｔ３は、以下の式８で表現できる。つまり、Ｔ３は、Ｔ１の集合とＴ２の集合との和集合である。
【００４７】
Ｔ３＝Ｔ１∪Ｔ２・・・式８）
尚、前述したように、型文法Ｔは、型名と、型名に対応する生成文法を持っている。したがって、Ｔ１とＴ２とでは同じ型名を持つ一方で、定義が異なる生成文法を持つ場合もある。この場合、実装のポリシーによって、エラーとしてもよいし、合成後のＴ３に関して、生成文法の定義としてＴ２ の定義を採用してもよいし、Ｔ１ の定義を採用してもよい。
【００４８】
図7に、図3により定義される基本スキーマから導出した文書文法と型文法を状態遷移図の形で示す。文書文法は Documentからはじまる状態遷移図であり、要素baseの型文法に対応する状態遷移図は、図中右側の base からはじまる状態遷移図である。図8に、図4により定義される拡張スキーマから導出した文書文法と型文法を状態遷移図の形で示す。図9は、図3に由来するEXI文法に、図4に由来する拡張スキーマから導出したEXIを合成した後の文書文法と型文法である。図９は、図８と比べて、文書文法はintKVに置き換えられ、型文法にintKV型が追加されている。つまり、図９の文書文法は、拡張スキーマから導出したＥＸＩ文法の文書文法である。また、図９の型文法は、基本スキーマから導出したＥＸＩ文法と拡張スキーマから導出したＥＸＩ文法各々の型文法の和集合である。文字列表初期化定義Ｉについては、以下のように合成操作を定義する。
【００４９】
Ｉ３＝Ｉ１＋Ｉ２＝｛Ｕ１，Ｌ１｝＋｛Ｕ２，Ｌ２｝＝｛Ｕ３，Ｌ３｝・・・式９）
ここで、Ｕは先述したように、文字列の順序付き集合となる。Ｕ３は、Ｕ１とＵ２との和集合であればなんでも良い。一方で、以下の式１０または式１１で表す合成操作を実施することで、更なるメモリ実装効率・符号化効率向上を実現できる。
【数３】
2014191613.tif 000005
【数４】
2014191613.tif 000006
【００５０】
図10に、図3で定義される基本スキーマから生成されるＥＸＩ文法の、文字列表初期化定義の例を示す。図11に、図4で定義される拡張スキーマから生成されるＥＸＩ文法の文字列表初期化定義の例を示す。図12に、図3で定義されるスキーマから生成される文法に、図4で定義されるスキーマから生成される文法を合成した際に生成される文字列表初期化定義の例を示す。それぞれの文字列表初期化定義には番号が割り付けられ、EXIストリーム中これらの文字列が必要な際は番号で参照される。なお、EXI仕様に定義されているデフォルトのlocal name partitionは簡単のために図示していない(以下同様)。
【数５】
2014191613.tif 000007
【００５１】
以上の通り、ＥＸＩ文法の合成を工夫することで、更なるメモリ実装効率・符号化効率向上を実現できる。
【００５２】
ここで、実際にワイルドカードを含むＸＭＬ 文書を符号化するためのより詳細な説明をする。
【００５３】
ワイルドカードに対応する拡張要素を符号化する際は、拡張要素に対応する生成規則（例えば、拡張スキーマ）に対応するＥＸＩ文法を基本スキーマに対応するＥＸＩ文法と合成する必要がある。これは、EXI の仕様で言うところの fidelity option のうち selfContained (SC) と同様の処理となる。selfContained が許可されたＸＭＬ文書においては、selfContainedに対応する要素を独立性の高い符号化方法で符号化することが可能であり、これを示すための生成規則を文法に追加する(非特許文献1のSection 8.5.4.4.1 参照)。
【００５４】
同様に、合成文法により記述されるEXI 拡張要素に対応する生成規則を、これが許されるEXI文書においては記述することができる。そして、selfContained の処理と同様に、規則から遷移した先のEXI ストリームは、合成文法により符号化・復号することによって、本発明の実施形態の効果を得ることができる。このとき、どの合成文法を選択するかの手掛かりのために、遷移時のEXI 符号にスキーマID(String) を含めてもよい。このスキーマID の解釈は、各々のアプリケーションに任せられる。例えばXMPP の例の場合は、XEP と呼ばれる文書が対応し、これには通番が付与されるため、XEP 番号を利用できる。
【００５５】
また、符号化を行う側がこの拡張スキーマを知っていたとしても、復号側がこのスキーマを知らなかった場合、復号ができない。EXI は性質上、復号できないと読み飛ばすこともできないため、以後の項目が利用できなくなってしまう。一方で、XML は性質上自由な拡張を求めるものであり、例えば通信にEXI を利用する全てのノードで全て同一の拡張スキーマ群を実装することは現実的ではない。そこで、拡張スキーマについては未実装のノードにおいて読み飛ばし処理を実現するために、遷移時のEXI 符号に、拡張要素に対応する部分の符号化長を含めても良い。
【００５６】
なお、EXI においては、String Table と呼ばれる文字列の表を構築することにより、XML 文書中に繰り返し登場する文字列を効率的に符号化できる。具体的には、XMLストリーム中の過去に登場した文字列であれば、その文字列を示す番号により文字列を符号化することができる。
【００５７】
拡張要素の符号化においては、拡張要素の符号化開始時点でString Table を初期化する方法(これは、EXI におけるselfContained と同等) と、String Table を初期化せずに継続利用する方法が考えられる。String Table を継続利用することにより、更なる効率的な符号化が可能になる一方で、符号が文脈依存となる。一方、String Tableを初期化すると、符号が文脈依存とならないという利点がある一方で、継続利用と比べて符号化の効率は低い。したがって、利用方法におうじて、初期化する方法、又は、継続利用する方法を使い分けると良い。例えば、拡張要素を理解しないデコーダ側プロセスが拡張要素を復号せずに、コピーして再度別の受信者に転送する、などといった利用方法をとる場合は、初期化の方法が好ましい。例えばXMPP においては、サーバからクライアントの通信では、拡張要素の符号化においてString Tableを初期化せず再利用することで効率化し、クライアントからサーバへの通信では、String Table を初期化することでサーバから他のサーバ・クライアントへの拡張要素の転送を実現する、といった利用法が良い。本発明の実施形態においては、ＸＭＬ文書中の、拡張要素開始時に、String Table について、初期化をするか継続利用するかを示すフラグを示すこともできる。一方、ＸＭＬ文書中の、拡張要素の文書終了時点にも、拡張要素に含まれる文字列情報により更新されたString Table を継続利用するか、拡張要素の符号化開始時点のString Table を復元するかを示すフラグを追加してもよい。
【００５８】
＜変形例＞
図１３は、本実施形態の変形例を示すエンコーダ２００である。エンコーダ２００は、エンコーダ１００と異なり、ＥＸＩ文法ストレージ２０１を備え、スキーマストレージ１０２とＥＸＩ文法コンパイラ１０３とを備えていない。
【００５９】
エンコーダ２００は、基本スキーマに基づくＥＸＩ文法と拡張スキーマに基づくＥＸＩ文法との入力を受け、ＥＸＩ文法ストレージ２０１にＥＸＩ文法を記憶しておく。ＥＸＩ文法ストレージは、スキーマを特定するスキーマＩＤとＥＸＩ文法とを対応付けて記憶してもよい。
【００６０】
以上の説明はエンコード時のものであるが、デコードに対しても同等の処理を逆転させることにより拡張要素を効率的に符号化した符号列を復号できる。具体的には、拡張要素を示す生成規則をストリーム中に発見したら、スキーマID、拡張要素データ長、String Table初期化フラグを読み取り、スキーマIDに対応した文法を読み出し、これを現在の処理文法に合成することで拡張要素を処理する文法を作成する。この合成文法により拡張要素部分の読み出しを行い、拡張要素終了時 (すなわち、拡張要素の開始(SE)に対応する要素終了(EE)イベントが生成されたとき) に文法を元の処理文法に復元することによって、効率的に符号化されたEXI符号の効率的な復号が可能となる。
【００６１】
以上説明した実施形態の効果は、ワイルドカードで定義された拡張要素に対応する拡張スキーマを反映したＥＸＩ文法を作成することで、ワイルドカードで定義された拡張要素を含むＸＭＬ文書の符号化率向上を実現することである。
【００６２】
また、ＥＸＩ文法の合成の工夫を行うことで、更なるメモリ実装効率・符号化効率向上を実現できる。
【００６３】
また、エンコーダ１００は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、ＥＸＩ符号化部１０５とスキーマストレージ１０２とＥＸＩ文法コンパイラ１０３とＥＸＩ文法合成部１０４と実行文法切り替え部１０５とは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、ＥＸＩ符号化部１０５とスキーマストレージ１０２とＥＸＩ文法コンパイラ１０３とＥＸＩ文法合成部１０４と実行文法切り替え部１０５とは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、スキーマストレージ１０２は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００６４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６５】
１００、２００・・・エンコーダ、１０１・・・ＥＸＩ符号化部、１０２・・・スキーマストレージ、１０３・・・ＥＸＩコンパイラ、１０４・・・ＥＸＩ文法合成部、１０５・・・ＥＸＩ文法切り替え部１０５、２０１・・・ＥＸＩ文法ストレージ
【図７】
2014191613.tif 000008
【図８】
2014191613.tif 000009
【図９】
2014191613.tif 000010
【図１】
2014191613.tif 000011
【図２】
2014191613.tif 000012
【図３】
2014191613.tif 000013
【図４】
2014191613.tif 000014
【図５】
2014191613.tif 000015
【図６】
2014191613.tif 000016
【図１０】
2014191613.tif 000017
【図１１】
2014191613.tif 000018
【図１２】
2014191613.tif 000019
【図１３】
2014191613.tif 000020