JP5325921B2 - デコーダコンパイラ、プログラムおよび通信機器 - Google Patents

デコーダコンパイラ、プログラムおよび通信機器 Download PDF

Info

Publication number
JP5325921B2
JP5325921B2 JP2011070244A JP2011070244A JP5325921B2 JP 5325921 B2 JP5325921 B2 JP 5325921B2 JP 2011070244 A JP2011070244 A JP 2011070244A JP 2011070244 A JP2011070244 A JP 2011070244A JP 5325921 B2 JP5325921 B2 JP 5325921B2
Authority
JP
Japan
Prior art keywords
grammar
exi
decoder
value
stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011070244A
Other languages
English (en)
Other versions
JP2012203826A (ja
Inventor
井 裕 介 土
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2011070244A priority Critical patent/JP5325921B2/ja
Priority to US13/235,880 priority patent/US8700680B2/en
Publication of JP2012203826A publication Critical patent/JP2012203826A/ja
Application granted granted Critical
Publication of JP5325921B2 publication Critical patent/JP5325921B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Document Processing Apparatus (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

本発明の実施形態は、EXI(EXI(Efficient XML(Extensible Markup Language) Interchange))デコーダを生成するためのデコーダコンパイラおよびプログラム、ならびにEXIデコーダを搭載した通信機器に関する。
特開10-240652号公報では、ASN.1 のデコーダの構成について開示している。ASN.1 の有限状態機械による解釈により、デコーダプログラムの生成を行っている。
ASN.1 では、一般に通信に記載される所望の情報が限定されており、全ての情報を取得することが前提である。従って、組込み機器においても全ての可能性に対して構文解析を行うことができる。
一方、EXI は、より計算資源の豊富な環境向けのXML に基づく技術であり、XML の文書構造を規定するXML スキーマの解釈を含め、正常な情報のデコードのためには、機器にとっての所望の情報以外の情報の解釈が必要となる。したがってデコーダのコーディングが複雑になるとともに、機器の処理負荷やメモリに対する負荷が高くなる。
特開10-240652号公報
本発明の一側面は、所望の情報のみを低負荷で抽出可能なEXIデコーダを生成することを目的とする。
本発明の一態様としてのデコーダコンパイラは、EXI(Efficient XML(Extensible Markup Language) Interchange)ストリームをデコードするためのEXIデコーダを生成するデコーダコンパイラであって、第1読み込み部と、第2読み込み部と、文法選択部と、更新判定部と、読み飛ばし関数設定部と、読み出し関数設定部と、コードコンポーザとを備える。
前記第1読み込み部は、所定のXMLスキーマで定義されたXML文書構造における箇所と、変数の名前とを互いに対応づけた対応情報を読み込む。
前記文法選択部は、前記XML文書構造の各要素を表現するイベントと、EXIイベントコードコードと、次に用いるべき文法と、の関係を定めた複数の文法を含むEXI文法書を読み込む。
前記文法選択部は、開始文法から前記EXI文法書の各文法を順次辿るように選択する。
前記更新判定部は、前記文法を選択するごとに前記XML文書構造上の位置を特定する文法スタックを逐次更新し、更新された文法スタックが、前記対応情報で示される箇所を示すかどうかを判断する。
前記読み飛ばし関数設定部は、前記更新された文法スタックが前記箇所を示さないとき、選択した文法に対して前記文法スタックが示す位置に対応する前記EXIストリームの値を読み飛ばす、読み飛ばし関数を設定する。
前記読み出し関数設定部は、前記更新された文法スタックが前記箇所を示すとき、前記文法スタックが示す位置に対応する前記EXIストリームの値を読み出して、前記箇所に対応する前記変数に与える、読み出し関数を設定する。
前記コードコンポーザは、各前記文法に対しそれぞれ選択された前記読み飛ばし関数および前記読み出し関数を含むEXIデコーダを生成する。
本発明の実施形態を説明するための背景知識として、EXI デコーダの内容を説明するための図である。 本発明の実施形態で生成される専用EXIデコーダの動作イメージを示す。 本発明の実施形態に係るデコーダコンパイラと、それに対する入出力の関係を示す。 EXI ストリームを構成するXML 文書の内容と、専用EXI デコーダの内部構成との関係について説明する。 本発明の実施形態に係るデコーダコンパイラの構成を示す図である。 本発明の実施形態に係るデコーダコンパイラの処理の流れの例を説明したフローチャートである。 専用EXIデコーダによるデコード処理の流れを示す。 図7のステップS122で行う処理の詳細な流れを示すフローチャートである。 図7のステップS124で行う処理の詳細な流れを示すフローチャートである。 本発明の実施形態により生成した専用EXIデコーダを組み込んだ通信機器の構成例を示す。
以下、図面を参照しながら、本発明の実施形態について説明する。
図1は、本発明の実施形態を説明するための背景知識として、EXI デコーダの内容を説明するための図である。
EXI(Efficient XML(Extensible Markup Language) Interchange)ストリームは、元はXML文書から生成されたイベントの列であり、XML文書のタグ開始・終了・属性(attribute)などの構造(イベントコード)と、構造に含まれる値(データ)とが、一列に配置されたイベントストリームである。このようなEXIストリームがEXIデコーダに与えられ、デコードされる。
XML文書 では、タグは入れ子構造になっている。XML の特性(スキーマ等) から、ストリームにおいて、許されるイベントの順序が決定される。EXIデコーダは、これを解釈するための状態機械の形で、構成される。
EXIデコーダの処理として、タグが開始されるとそのタグの内部の構文を解釈するための状態機械が生成され、タグの終了とともにその状態機械は終了する。そして、タグの入れ子関係が状態機械のスタックとなり、ストリームの内容に応じてこのスタックを構成する仕組みを備えることにより、EXI デコーダは構成される。通常のEXIデコーダでは、この状態機械における状態遷移から、元となるXML文書を復元する。
本発明の実施形態では、特に組込み機器への搭載などの限定的な用途を想定したEXIデコーダを提供する。つまり、自由度の高い構造化文書であるXML 文書をそのまま利用(復元)するのではなく、EXIストリームから、用途に関係ある部分(後述する構造体の値)のみを出力するEXIデコーダの生成を目的とする。このようなEXIデコーダ(専用EXIデコーダ)を生成するための、デコーダコンパイラ(デコーダ生成器)を、本実施形態では、提案する。
図2に、本実施形態で生成される専用EXIデコーダの動作イメージを示す。
専用EXIデコーダは、EXIストリームを入力として、一定の構造を持つ構造体(メモリイメージ) を出力する。たとえば図1の例において、「内容1」、「内容2」、「内容3」が定義された構造体をターゲットとしたデコーダは、「内容1」、「内容2」、「内容3」の値のみを出力し、XML文書全体の復元は行わない。つまり、EXI ストリームとして入力されたXML文書全体情報のうち、機器が想定する用途に合致しない部分は捨てる。
これにより、専用EXIデコーダを利用するアプリケーション(組み込み機器の動作プログラム等) は、XMLの自由度を無視して処理を記述でき、また不要な処理に対処するためのコードをデコーダに搭載しなくて良いという効果が得られる。
図3に、本実施形態に係るデコーダコンパイラと、それに対する入出力の関係を示す。
本デコーダコンパイラ11は、対象XML文書の構造を決定するXMLスキーマから生成したEXI文法木、スキーマと出力構造体とを対応づけるスキーマ−構造体対応情報、デコーダのコードテンプレート(コード断片辞書)を入力として受ける。EXI 文法木は、XML スキーマがスキーマ分析モジュール31により変換されたものである。デコーダコンパイラ11は、これらの入力に基づき、専用EXIデコーダを生成する。
付録A.1に、説明のための利用するXML文書を示す。
XML文書は、タグ名、属性、属性値、本文など、様々な要素により記述される。本実施形態に係る専用EXIデコーダは、このようなXML文書がエンコードされたEXIストリームを入力としてデコードし、必要な情報のみを抽出する。
付録A.2 に、本説明で用いるXML スキーマの例を示す。
XMLスキーマは、XML文書の許容される構造を定める。このスキーマ例は、参考文献1(John Schneider and Takuki Kamiya. Efficient XML Interchange (EXI) Format 1.0. W3C Candidate Recommendation, December 2009. http://www.w3.org/TR/exi/)より引用したものである。付録A.1のXML文書は、付録A.2のXMLスキーマに準拠している。
付録A.3に、付録A.2のスキーマから生成したEXI文法の例を示す。
XML文書構造の各要素を表現するイベントと、EXIイベントコードと、次に用いるべき文法との関係を定めた複数の文法を含む。本実施形態では、XMLのイベントとして、SAXイベントを想定している。
XML文書をSAXイベント列に変換するSAXパーサは広く知られているものである。エンコード側の装置では、XML文書をSAXイベント列に変換し、SAXイベント列とEXI文法とからEXIストリームを生成する。EXIストリームはEXIイベントコードと、EXIイベントコードに関連づけられた値とを含むストリームである。
エンコード側でどのようにEXIストリームを生成するかは任意でよいが、一例を示すと次のようになる。SAXイベント列の先頭から順番に、EXI文法木における現在の文法から、対応するEXIイベントコードを特定するとともに、SAXイベントが値を指定するときはその値を取得し、さらに次に用いる文法をEXI文法木に基づき特定する。これをSAXイベント列の末尾まで繰り返すことで、EXIイベントコードと値とを含むEXIストリームを得ることができる。
付録A.4 に、スキーマ-構造体対応情報の例を示す。
スキーマ構造体対応情報の必須構成要素は、以下の通りである。
(1)出力となるべき構造体とその型
例では、struct product の部分と、各行の要素宣言(w_char* sku など) の部分にあたる。より詳細に、struct productは構造体の名前、skuなどは要素の名前、w_char*などは型である。
(2)構造体が対応するXML タグの開始位置を示すXPath (あるいはXPath と同等の文書位置の指示子)。例では、/order/product が、タグ開始位置を示すXPathにあたる。これは、XML文書の<order>の下位の<product>から、対応する</product>までの範囲が、ひとつの構造体に対応する情報が存在する範囲(後述するBODY部)であることを意味する。
(3)構造体の要素の箇所を特定するための、上記XPath 位置からの相対Path (あるいは同等の指示子)
例では、「@sku;」 や「quantity/text();」が、相対Pathにあたる。前者の例の場合、productタグの属性の値の箇所が、構造体の要素(skuなど)の箇所である。また後者の例の場合、quantityタグで囲まれた本文の箇所が、構造体の要素(quantity)の箇所である。
(4)XML 文書に含まれる値(EXIストリームで送られてきた値)を、上記(1)の構造体の各要素に格納するために用いる型変換関数
例では、utf2wchar やutf2floatが、型変換関数にあたる。utf2wcharは、上記値の型を、utfからwcharに変換する関数である。utf2floatは、上記値の型を、utfからfloatに変換する関数である。utfは、XMLスキーマで用いることが定められた型である。
なお要素が1つのときは、構造体を用いなくてもよく、この場合は変数を定義すればよい。また本実施形態において構造体の各要素のことをそれぞれ変数と称することもある。
図4 を用いて、EXI ストリームを構成するXML 文書の内容と、本実施形態により生成される専用EXI デコーダの内部構成との関係について説明する。
専用EXIデコーダの処理において、入力となるXML 文書(EXIストリーム)は、「スキーマ-構造体対応情報」の開始位置タグ(<order>の下位の<product>)が登場するまで読み飛ばされる。
開始位置タグから順に必要な要素のみを読み取り、一つひとつ構造体の形でデコード結果を出力する。そして、それらの要素を、読み終えたらデコード終了となる。
より詳細に、XML文書は、図示のように、HEAD 部・BODY 部・TAIL 部の3つに分けることができる。HEAD部は、「スキーマ-構造体対応情報」の開始位置タグ(<order>の下位の<product>)が登場する直前までの部分である。TAIL部は、当該タグが終了した直後(本例では</product>の直後>から文書の末尾までの部分である。BODY部は、開始位置タグから終了タグまでの部分(<product>〜</product>)である。付録A.1の例では、BODY部は3回繰り返されている。
このようにHEAD 部・BODY 部・TAIL 部に分ける処理が簡単になる。HEAD部と、TAIL部には、構造体に対応する情報は含まれないため、すべて読み飛ばせばよい。BODY部についてのみ、必要な要素を読み出す処理ができるように、デコード処理を工夫する。この工夫された処理を行うのが、図示のBODY部デコーダ関数である。なお、HEAD 部・BODY 部・TAIL 部に分けることは本実施形態の必須要件ではなく、これらに分けることなく後述の処理を行っても良い。
図5は、本実施形態に係るデコーダコンパイラ11の構成を示す図である。
デコーダコンパイラ11は、文法選択部12、更新判定部13、コードコンポーザ14を備える。コードコンポーザ14は、読み飛ばし関数設定部15と、読み出し関数設定部16を備える。
デコーダコンパイラ11は、EXI文法木、スキーマ−構造体対応情報、コードテンプレート(コード断片辞書)を入力として受ける。デコーダコンパイラ11は、スキーマ−構造体対応情報を読み込む第1読み込み手段と、EXI文法木を読み込む第2読み込み手段とを含む。各読み込み手段の読み込み先は、同じまたは異なる記憶装置である。読み込みは、ネットワークを介して行っても良い。
文法選択部12は、所定の開始文法から、EXI文法木の各文法を順次辿るように選択する。
更新判定部13は、文法選択部12により文法を選択するごとに、XML文書構造上の位置を示す文法スタックを逐次更新する。更新判定部13は、更新した文法スタックが、スキーマ−構造体対応情報で指定される箇所を示すかを判断する。
コードコンポーザ14は、更新判定部13の判断結果に応じて、上記選択された文法に対して関数を設定する。
上記文法スタックが、スキーマ−構造体対応情報で指定される箇所を示さないとき、読み飛ばし関数設定部15を用いて、選択した文法に対して、文法スタックに示される位置の値を読み飛ばす、読み飛ばし関数を設定する。
上記文法スタックが、スキーマ−構造体対応情報で指定される箇所を示すとき、文法スタックに示される位置の値をEXIストリームから読み出して、その値を、当該箇所に対応する構造体要素(メンバ)に与える、読み出し関数を設定する。
コードコンポーザ14は、各文法に対しそれぞれ選択された読み飛ばし関数および読み出し関数を含むEXIデコーダを生成する。なお、EXIデコーダには、これらの関数の他、デコードに当然に必要とされる命令コードも含める。たとえば、開始文法を起点に、EXIストリームの先頭から順次EXIイベントを取り出し、EXI文法木と現在の文法に基づき、取り出したEXIイベントに応じて次に用いる文法を選択する命令コード、EXIイベントコードに値が関連づけられているときは、現在の文法に対応づけられた関数(読み飛ばし関数または読み出し関数)を実行して、取り出したEXIイベントに関連づけられた値を処理する命令コード、読み出し関数の実行により読み出した構造体の値を出力する命令コード等も含む。
以下、コードコンポーザ14が行う処理の動作について、さらに詳細に説明する。
図6は、本実施形態に係るデコーダコンパイラ11の処理の流れの例を説明したフローチャートである。
デコーダコンパイラ11は、文法スタックs と、デコーダ辞書D を持ち、これらを初期化する(S101、S102)。
デコーダ辞書D は、EXI 文法とイベントコードに基づき、生成する専用EXIデコーダ用のコード断片を格納する辞書である。
文法スタックは、文法のスタックであり、各文法解析木がXML 文書のどの部分に対応するのかを示す手がかりとなる。具体的には、各文法スタックは、タグや属性などのイベントに対応するが、タグの内容を示すラベルを、各スタックから集めて並べると、XPath によるタグのパス表記に近いものとなる(順序等は記述しない)。
また、処理済の文法を示す文法セットGs を初期化する(S103)。入力されたEXI 文法には開始文法(XMLのStartDocument に相当する文法) が必ず一つ含まれ、Gs は開始文法を初期値として持つ。また、開始文法に対応するスタック状態は空である。
ここで、「到達可能」という概念を定義する。
EXI の文法は、LeftHandSide, Terminal, NonTerminal,EventCode の4 つから構成される。LeftHandSide の状態の時、Terminal のイベントが発生したら、EventCode を出力し、NonTerminal の状態に移行する。LeftHandSide g1 からNonTerminalg2 の状態に以降する文法が存在する場合、状態g1 からg2 に到達可能である、と定義する。
たとえば付録A.3の例に則して説明する。XMLのイベントをEXIイベントに変換する例で説明すると、<product>に対する文法において、Use_color0状態のとき、AT(“color”)イベントが発生したら、イベントコード0(1ビットのゼロ)を出力し、Use_color1状態に遷移する。
デコーダコンパイラ11のメインプロセスは、Gs に含まれる文法から到達可能で、Gs に含まれない文法を、文法選択部12により一つ選択し(S104)、その文法に対してデコーダ辞書を作成することの繰り返しである。選択できる文法が複数あるときは、次回以降のループで選択する。これにより、EXI文法(付録A.3参照)に含まれる、全ての文法を処理し終えるまで、以下の処理を繰り返す(S105〜S109)。
選択した文法をg と置き、更新判定部13により、g に到達した文法の文法スタックs に、g に対応する文法を積むことで文法スタックs を更新する。ここで、文法スタックs の更新はEXI と同様に、タグ開始のSE(StartElement) に相当する時は一つ上に新しいスタックを生成し、タグ終了のEE(EndElement)に相当する時は最上位のスタックを消滅させる。
文法スタックs ならびに文法g から、現在の文法がXML のどの部分に対応するかを、更新判定部13により特定する。具体的には、文法スタックは各々XML タグの階層に対応し、文法g のTerminal (付録A.3の例では、ATやSEといったSAXイベントで指定される括弧内の値)が、構造体の要素や、文字列などに対応する。
「スキーマ-構造体対応情報」の構造体の各要素について、開始タグ位置と各要素の相対位置を加算すると、各要素のXML 文書中の位置が得られる。
開始タグが文法スタックs に含まれ、各要素の相対位置が文法スタックs あるいは文法g に対応する場合(S106のtrue)、読み出し関数設定部16により、デコーダ辞書D[g] として「読み出し関数」をセットする。読み出し関数は、該当する値を読み出し、変換関数により型変換して出力する関数である。スキーマ−構造対応情報に示される変換関数を利用する。
文法スタックs あるいは文法g に、対応する要素が存在しない場合(S106のfalse)、読み飛ばし関数設定部15により、デコーダ辞書D[g]として、「読み飛ばし関数」をセットする。
文法gを、文法セットGsに追加し、Gsに全ての文法が格納されているかを判断する(S109)。まだ格納されていないときは(false)、ステップS104に戻る。全ての文法が文法セットGsに格納されたら (true)、ステップS110に進む。
ステップS110では、文法セットGs内のすべての文法の各々に対するデコーダ辞書D[g] を、デコーダのコードテンプレートにセットし、必要な関数をリンクすることにより、EXI専用デコーダを得る。
以上の手続きを、付録A.3 のEXI 文法と、付録A.4 のスキーマ-構造体対応情報を事例として説明する。
スキーマ-構造体対応情報の開始タグは/order/product である。文法スタックs がTerm_order/Term_productとなった際に/order/product に対応する。なお、Term_orderは、SE(”order”)に対応するEXIイベントが読み出された状態を示し、Term_product は、SE(“product”)に対応するEXIイベントが読み出された状態を示すとする。
ここで、アトリビュート(属性)に対応する構造体要素を含む文法は、以下の2つの文法(Use_color0 :と、Use_color1 :)である。
Complete grammar for element <product>
Use_color0 :
AT("color") [schema-typed value] Use_color1 0
AT("sku") [schema-typed value] Use_sku1 1
AT("color") [untyped value] Use_color1 2.4.0
AT("sku") [untyped value] Use_sku1 2.4.1
Use_color1 :
AT("sku") [schema-typed value] Use_sku1 0
AT("sku") [untyped value] Use_sku1 1.2.0

それぞれ、AT("color") が、@color に対応し、AT("sku") が@sku に対応する。
したがって、Use_color0 :の文法に対して、productタグの属性color, skuの値を読み出して、utfからwcharへの型変換を行った上、構造体要素「w_char* sku」,「w_char* color」に、変換された値を入力する、読み出し関数を設定する。Use_color1 :の文法についても同様に、読み出し関数を、当該文法に対するデコーダ辞書D[g]として、設定する。
また、quantity/text(); およびprice/text(); は次の文法に対応する。
Complete grammar for element <product>
Term_quantity0,1 :
CH [untyped value] Term_quantity0,1 2.1
Term_price0,1 :
CH [untyped value] Term_price0,1 3.1
Term_quantity1,1 :
CH [untyped value] Term_quantity1,1 2.1
Term_price1,1 :
CH [untyped value] Term_price1,1 1.1

text() は、CH(Character) に対応するので、以上の文法が各要素に対応する。
したがって、Term_quantity0,1 :の文法に対して、SE(quantity)に相当するEXIイベントの値(XML文書でいうところのquantityタグの本文の値)を読み出して、intからutfへの型変換を行った上、構造体要素「int quantity」に変換された値を入力する、読み出し関数を設定する。Term_price0,1 :、Term_quantity1,1 :、Term_price1,1 :の文法についても同様に、読み出し関数を、デコーダ辞書D[g]として、それぞれ設定する。
つまり、EXI ストリームでは、イベントコードに続いて、存在する場合は値が与えられるが、この値を構造体に入力するための関数が、対応する文法のデコーダ辞書D に記載される。
つまり、utf2wchar あるいはutf2int / utf2floatにより、読み取った値(utf型を有する)を、charあるいはint/floatに変換する関数を、対応する文法のデコーダ辞書にDに記載する。
スキーマ-構造体対応情報に対応しない文法については、イベントコードを読み出した後、値(必要としない情報)を読み飛ばす関数が、デコーダ辞書D に記載される(値が存在しない場合は、読み飛ばし関数の代わりに、ヌルを記載しても良い)。
以下、本実施形態により生成された専用EXIデコーダがどのように動作するかを説明する。
図7に、専用EXIデコーダによるデコード処理の流れを示す。専用EXIデコーダはデコーダ辞書Dをもとに、デコード処理を行う。
専用EXIデコーダは、EXI 文法に対応したデコーダ機能を含む。ただし、通常の(知られている方式の) デコーダと、次の3 点で異なる。
1. 構造体-スキーマ対応情報に記載されたデコード開始位置までのストリーム(HEAD部に相当)は、単に読み飛ばす(S121のfalse、S122、S123)
2. BODY 部(XML 文書のうち構造体-スキーマ対応情報が対応する部分) のデコードは、繰り返し要素(たとえば<product>〜</product)がこれに相当)を一つデコードするたびに構造体r を生成し、デコーダ呼び出し元に返す(S121のtrue、S124、S125、S126のS127のt)
3. BODY 部を読み終わったら、残りのストリーム(TAIL部に相当)は捨てる(S127のfalse)
より詳細には、まずEXIストリームを先頭から読み込み、BODY開始位置(<product>)かを判断し、BODY開始位置でないときは(S121のfalse)、図8の「EXIデコーダ::処理」を実行し(S122)、次に、現在の文法に対応する辞書デコーダにより、値を読み飛ばす(S123)。
BODY開始位置になったときは(S121のtrue)、図9のBODY部処理を実行し(S124)、処理結果として構造体rを生成し、BODY部がさらに存在すれば(S127のtrue)、すなわちBODY開始位置(<product>)を示すEXIイベントが検出されれば、ステップS124に戻る。
BODY部がもはや存在しなければ(S127のfalse)、その時点で処理を終了し、TAIL部に対するEXIイベントの処理は行わない。
図8 は、図7のステップS122、または後述する図9のステップS142で行う「EXIデコーダ::処理」の流れを示す。
現在の文法に従って理解されるEXIイベントコードが、タグ終了イベント(EE)またはタグ開始イベント(SE)を示すかを判断する(S131、S132、S133、S135)。タグ開始イベントおよびタグ終了イベントを示すときに限って、状態機械スタックを操作する。つまり、タグ開始イベントを示すときは、開始イベントに対応する状態機械を、状態機械スタックにプッシュ(puch)し、タグ終了イベントを示すときは、状態機械スタックから状態機械をポップ(pop)する(S136、S134)。そして、現在のスタック状態sを返す。この操作により、デコード処理が文書のどこに相当するかを、デコード処理の各ステップで確認できる。
図9 は、図7のステップS124で行うBODY部処理の流れを示す。
EXI ストリームから読み出されるべき構造体r を、構造体-スキーマ対応情報に含まれる構造体定義に従って初期化し(S141)、図8の「EXIデコーダ::処理」を行い(S142)、現在の文法スタックが、スキーマ−構造体対応情報の要素が持つXPathに対応するかを判断する(S143)。
要素がもつXpathに対応するときは(true)、EXIストリームの値部分を、現在の文法に対応する辞書デコーダを用いて読み出し、読み出した値を、構造体rの要素のうち該当する要素に書き込む(S144,S145)。
一方、要素がもつXpathに対応しないときは(false)、現在のEXIイベントが、BODY部タグを閉じるイベントかを検査し、trueであるときは、本処理を終了し、falseであるときは、ステップS142に戻る。
図10に、本実施形態により生成した専用EXIデコーダを組み込んだ通信機器の構成例を示す。
本実施形態で生成した専用EXIエンコーダは、スマートメータおよび移動体機器等、資源制約の厳しい通信機器に組み込まれる。
通信機器21は、相手機器との間で効率的なXML文書のやりとりを行うため、相手機器(図示せず)からに、XML文書の内容がエンコードされたEXIストリームを受信部23で受信する。EXIストリームは、上述したように、複数のEXIイベントと、EXIイベントの全部または一部にそれぞれ関連づけられた値とのシーケンスである。
デコード実行部であるCPU24が、記憶部22内の専用EXIデコーダをメモリ25に展開して実行する。実行により、EXI文法木もメモリ25に読み出され用いられる。なお、EXI文法木がEXIデコーダに含まれていても良い。専用EXIデコーダの実行により、構造体の各要素の値のみが、EXIストリームから取得される。
つまり、EXIストリームの先頭からEXIイベントコードを特定し、当該EXIイベントコードと、事前に選択された文法(最初は開始文法)に基づき、次に用いる文法を選択する。そして、EXIイベントコードに値が関連づけられているときは(EXIイベントコードの次に値が格納されているとき、つまりEXIイベントコードがCHイベントあるいはATイベントに相当するとき)、EXIイベントコードが得られたときの文法に対応づけられた関数(読み出し関数または読み飛ばし関数)により、当該値を処理する。例えば、一つの応用事例として、読み出し関数の実行により読み出した構造体の各要素(変数)の値を、表示部26に出力する、などといった応用が考えられる。各要素の値を記憶部22または他の記録媒体に格納してもよい。EXIデコーダの動作の詳細な説明は既に、図7、図8、図9および図2を用いて述べた通りである。
以上に説明したEXI デコーダコンパイラ11により、任意のXML スキーマに対応するEXI デコード処理に関して、組み込み向けのような特定用途の環境において、その用途に対応する専用のデコーダを生成できる。このデコーダは、出力に無関係な不要な部分を読み飛ばし、出力に関係する部分のみを読み出して、構造体の形で返す。これにより、デコーダ利用側(組み込み機器などの機器制御プログラム)は、XML が持つ高い自由度に対応する必要がなくなる。よってデコーダのみならず周辺の構成が、公知なEXI デコード方式に比べて簡素とすることができる。また、デコーダ利用側の処理負荷が低くて済む。
なお、以上に説明した実施形態におけるデコーダコンパイラ11は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、デコーダコンパイラ11における文法選択部12、更新判定部13およびコードコンポーザ14は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、デコーダコンパイラ11は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。
A サンプルデータ
A.1 想定するXML文書の具体例
<?xml>
<order>
<product sku="1JB339" color="white">
<quantity>40</quantity>
<price>339.50</price>
</product>
<product sku="1JB340" color="black">
<quantity>25</quantity>
<price>155.0</price>
</product>
<product sku="1JB341" color="green">
<quantity>30</quantity>
<price>183.95</price>
</product>
</order>


A.2 XMLスキーマの例(参考文献1より引用)
<xs:element name="product">
<xs:complexType>
<xs:sequence maxOccurs="2">
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:integer" />
<xs:element name="price" type="xs:float" />
</xs:sequence>
<xs:attribute name="sku" type="xs:string" use="required" />
<xs:attribute name="color" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>

<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element ref="product" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>


A.3 EXI 文法の例(参考文献1より引用)
Complete grammar for element <product>
Event Code
Use_color0 :
AT("color") [schema-typed value] Use_color1 0
AT("sku") [schema-typed value] Use_sku1 1
EE 2.0
AT(xsi:type) Use_color0 2.1
AT(xsi:nil) Use_color0 2.2
AT (*) Use_color0 2.3
AT("color") [untyped value] Use_color1 2.4.0
AT("sku") [untyped value] Use_sku1 2.4.1
AT (*) [untyped value] Use_color0 2.4.2
SE(*) Use_sku1_copied 2.5
CH [untyped value] Use_sku1_copied 2.6

Use_color1 :
AT("sku") [schema-typed value] Use_sku1 0
EE 1.0
AT (*) Use_color1 1.1
AT("sku") [untyped value] Use_sku1 1.2.0
AT (*) [untyped value] Use_color1 1.2.1
SE(*) Use_sku1_copied 1.3
CH [untyped value] Use_sku1_copied 1.4

Use_sku1 :
SE("description") Term_description0,1 0
SE("quantity") Term_quantity0,1 1
EE 2.0
AT (*) Use_sku1 2.1
AT (*) [untyped value] Use_sku1 2.2.0
SE(*) Use_sku1_copied 2.3
CH [untyped value] Use_sku1_copied 2.4

Use_sku1_copied :
SE("description") Term_description0,1 0
SE("quantity") Term_quantity0,1 1
EE 2.0
SE(*) Use_sku1_copied 2.1
CH [untyped value] Use_sku1_copied 2.2


Term_description0,1 :
SE("quantity") Term_quantity0,1 0
EE 1
SE(*) Term_description0,1 2.0
CH [untyped value] Term_description0,1 2.1

Term_quantity0,1 :
SE("price") Term_price0,1 0
EE 1
SE(*) Term_quantity0,1 2.0
CH [untyped value] Term_quantity0,1 2.1

Term_price0,1 :
SE("description") Term_description1,1 0
SE("quantity") Term_quantity1,1 1
EE 2
SE(*) Term_price0,1 3.0
CH [untyped value] Term_price0,1 3.1

Term_description1,1 :
SE("quantity") Term_quantity1,1 0
EE 1
SE(*) Term_description1,1 2.0
CH [untyped value] Term_description1,1 2.1

Term_quantity1,1 :
SE("price") Term_price1,1 0
EE 1
SE(*) Term_quantity1,1 2.0
CH [untyped value] Term_quantity1,1 2.1

Term_price1,1 :
EE 0
SE(*) Term_price1,1 1.0
CH [untyped value] Term_price1,1 1.1

Complete grammar for element <order>
Event Code
Term_product 0,0 :
SE("product") Term_product 1,0 0
EE 1.0
AT(xsi:type) Term_product 0,0 1.1
AT(xsi:nil) Term_product 0,0 1.2
AT (*) Term_product 0,0 1.3
AT (*) [untyped value] Term_product 0,0 1.4.0
SE(*) Term_product 0,0_copied 1.5
CH [untyped value] Term_product 0,0_copied 1.6

Term_product 0,0_copied :
SE("product") Term_product 1,0 0
EE 1.0
SE(*) Term_product 0,0_copied 1.1
CH [untyped value] Term_product 0,0_copied 1.2

Term_product 1,0 :
SE("product") Term_product 1,0 0
EE 1
SE(*) Term_product 1,0 2.0
CH [untyped value] Term_product 1,0 2.1

A.4 スキーマ-構造体対応情報

/order/product <= struct product {
w_char* sku <- utf2wchar | @sku;
w_char* color <- utf2wchar | @color;
int quantity <- utf2int | quantity/text();
float price <- utf2float | price/text();
};

Claims (5)

  1. EXI(Efficient XML(Extensible Markup Language) Interchange)ストリームをデコードするためのEXIデコーダを生成するコンピュータ装置であって、
    所定のXMLスキーマで定義されたXML文書構造における箇所と、変数の名前とを互いに対応づけた対応情報を読み込む第1読み込み部と、
    前記XML文書構造の各要素を表現するイベントと、EXIイベントコードと、次に用いるべき文法と、の関係を定めた複数の文法を含むEXI文法書を読み込む第2読み込み部と、
    開始文法から前記EXI文法書の各文法を順次辿るように選択する文法選択部と、
    前記文法を選択するごとに前記XML文書構造上の位置を特定する文法スタックを逐次更新し、更新された文法スタックが、前記対応情報で示される箇所を示すかどうかを判断する更新判定部と、
    前記更新された文法スタックが前記箇所を示さないとき、選択した文法に対して前記文法スタックが示す位置に対応する前記EXIストリームの値を読み飛ばす、読み飛ばし関数を設定する、読み飛ばし関数設定部と、
    前記更新された文法スタックが前記箇所を示すとき、前記文法スタックが示す位置に対応する前記EXIストリームの値を読み出して、前記箇所に対応する前記変数に与える、読み出し関数を設定する、読み出し関数設定部と、
    各前記文法に対しそれぞれ選択された前記読み飛ばし関数および前記読み出し関数を含むEXIデコーダを生成するコードコンポーザと、
    を備えたコンピュータ装置
  2. 前記変数は、構造体の要素である
    ことを特徴とする請求項1に記載のコンピュータ装置
  3. 前記対応情報は、前記XML文書構造において前記箇所に対して定義された型と、前記変数の型との情報を含み、
    前記読み出し関数は、読み出した値の型を前記変数の型に変換して、前記変数に与えるものである
    ことを特徴とする請求項1または2に記載のコンピュータ装置
  4. EXI(Efficient XML(Extensible Markup Language) Interchange)ストリームをデコードするためのEXIデコーダを生成するためのプログラムであって、
    所定のXMLスキーマで定義されたXML文書構造における箇所と、変数の名前とを互いに対応づけた対応情報を読み込む第1読み込みステップと、
    前記XML文書構造の各要素を表現するイベントと、EXIイベントコードと、次に用いるべき文法と、の関係を定めた複数の文法を含むEXI文法書を読み込む第2読み込みステップと、
    開始文法から前記EXI文法書の各文法を順次辿るように選択する文法選択ステップと、 前記文法を選択するごとに前記XML文書構造上の位置を特定する文法スタックを逐次更新し、更新した文法スタックが、前記対応情報で示される箇所を示すかどうかを判断する更新判定ステップと、
    前記更新された文法スタックが前記箇所を示さないとき、選択した文法に対して前記文法スタックが示す位置に対応する前記EXIストリームの値を読み飛ばす、読み飛ばし関数を設定する、読み飛ばし関数設定ステップと、
    前記更新された文法スタックが前記箇所を示すとき、前記文法スタックが示す位置に対応する前記EXIストリームの値を読み出して、前記箇所に対応する前記変数に与える、読み出し関数を設定する、読み出し関数設定ステップと、
    各前記文法に対しそれぞれ選択された前記読み飛ばし関数および前記読み出し関数を含むEXIデコーダを生成するステップと、
    をコンピュータに実行させるためのプログラム。
  5. 請求項1ないし4のいずれか一項に従って生成された前記EXIデコーダと、前記EXI文法書を記憶する記憶部と、
    前記EXIデコーダを実行する実行部と、
    前記EXIストリームを受信する受信部と、を備え、
    前記EXIストリームは、複数のEXIイベントコードと、前記EXIイベントコードの全部または一部にそれぞれ関連づけられた値とのシーケンスであり
    前記実行部は、
    前記EXIストリームの先頭から順次EXIイベントコードを特定し、前記EXIイベントコードと、事前に選択された文法とに基づき、次に用いる文法を選択し、
    前記EXIイベントコードに値が関連づけられているとき、前記EXIイベントコードが特定されたときの文法に対応づけられた、前記読み飛ばし関数または前記読み出し関数により、前記値を処理し、
    前記読み出し関数により取得された前記変数の値を出力する
    ことを特徴とする通信機器。
JP2011070244A 2011-03-28 2011-03-28 デコーダコンパイラ、プログラムおよび通信機器 Expired - Fee Related JP5325921B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011070244A JP5325921B2 (ja) 2011-03-28 2011-03-28 デコーダコンパイラ、プログラムおよび通信機器
US13/235,880 US8700680B2 (en) 2011-03-28 2011-09-19 Decoder compiler, computer readable medium, and communication device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011070244A JP5325921B2 (ja) 2011-03-28 2011-03-28 デコーダコンパイラ、プログラムおよび通信機器

Publications (2)

Publication Number Publication Date
JP2012203826A JP2012203826A (ja) 2012-10-22
JP5325921B2 true JP5325921B2 (ja) 2013-10-23

Family

ID=46928680

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011070244A Expired - Fee Related JP5325921B2 (ja) 2011-03-28 2011-03-28 デコーダコンパイラ、プログラムおよび通信機器

Country Status (2)

Country Link
US (1) US8700680B2 (ja)
JP (1) JP5325921B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10019418B2 (en) * 2012-07-20 2018-07-10 Fujitsu Limited Efficient XML interchange profile stream decoding
JP2014086048A (ja) 2012-10-26 2014-05-12 Toshiba Corp 検証装置、検査方法およびプログラム
US10282400B2 (en) * 2015-03-05 2019-05-07 Fujitsu Limited Grammar generation for simple datatypes
US10311137B2 (en) * 2015-03-05 2019-06-04 Fujitsu Limited Grammar generation for augmented datatypes for efficient extensible markup language interchange
CN106844758A (zh) * 2017-02-17 2017-06-13 安图实验仪器(郑州)有限公司 数据集代码生成方法
CN112114812B (zh) * 2020-08-26 2022-09-27 中国船舶重工集团公司第七一六研究所 一种应用于工业机器人编程语言的语法检查方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2996296B2 (ja) 1997-02-26 1999-12-27 日本電気株式会社 メッセージ復号化装置及び有限状態機械生成装置
JP2004234405A (ja) * 2003-01-31 2004-08-19 Fujitsu Ltd プロトコル符号化/復号化装置
JP4898405B2 (ja) * 2006-12-01 2012-03-14 キヤノン株式会社 文書データ処理方法、文書データ作成装置、及び文書データ処理装置
JP2009059215A (ja) 2007-08-31 2009-03-19 Canon Inc 構造化文書処理装置、構造化文書処理方法
FR2931271B1 (fr) * 2008-05-15 2012-07-27 Canon Kk Procede et dispositif de codage d'un document structure et procede et dispositif de decodage d'un document ainsi code
JP5409090B2 (ja) * 2009-04-13 2014-02-05 キヤノン株式会社 情報処理装置、情報処理方法、プログラム及び記憶媒体

Also Published As

Publication number Publication date
US8700680B2 (en) 2014-04-15
US20120254231A1 (en) 2012-10-04
JP2012203826A (ja) 2012-10-22

Similar Documents

Publication Publication Date Title
JP5325921B2 (ja) デコーダコンパイラ、プログラムおよび通信機器
JP5325920B2 (ja) エンコーダコンパイラ、プログラムおよび通信機器
US7734091B2 (en) Pattern-matching system
JP5815114B2 (ja) 中間フォーマットを用いた、swfのhtmlへのクロスコンパイル
US20030115548A1 (en) Generating class library to represent messages described in a structured language schema
JP4997777B2 (ja) デリミタを減少させる方法及びシステム
JP5044942B2 (ja) 文書分析において受付状態を決定するシステム及び方法
US11474796B1 (en) Build system for distributed applications
CN110888645A (zh) 一种转换为小程序的方法、装置和存储介质
CA2741082C (en) Conditional processing method and apparatus
JP5044943B2 (ja) データ文書の高速符号化方法及びシステム
CN116719523A (zh) 页面渲染方法及电子设备
CN111580830A (zh) 超文本标记语言文档元素的绑定及解析方法
JP5789236B2 (ja) 構造化文書分析方法、構造化文書分析プログラム、および構造化文書分析システム
CN112631604B (zh) 一种前端框架实现方法及装置
JP2005332146A (ja) 動的コンテンツ作成プログラムの生成装置、動的コンテンツ作成プログラムを生成するためのプログラム、及び動的コンテンツ作成プログラムの生成方法
JP4776389B2 (ja) 符号化文書復号方法及びシステム
US9529573B2 (en) Graphical user interface generation through use of a binary file
JP2008226010A (ja) コンパイル方法及びコンパイル装置
JP2008204000A (ja) 符号化装置及びその制御方法、復号装置及びその制御方法、プログラム、記憶媒体
JP2006221655A (ja) スキーマをコンパイルする方法とシステム
JP2009163662A (ja) 情報処理装置、情報処理装置の制御方法、および情報処理装置の制御プログラム
JP5206675B2 (ja) 構造化文書変換装置
JP4207992B2 (ja) 構造化文書処理システム及び構造化文書処理方法
Queirós SeCoGen-A Service Code Generator

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130215

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130415

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130628

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130722

R151 Written notification of patent or utility model registration

Ref document number: 5325921

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees