Exi编码器和计算机可读介质的制作方法

文档序号:6437057阅读:239来源:国知局
专利名称:Exi 编码器和计算机可读介质的制作方法
技术领域
本发明的实施例涉及EXI (高效的XML(可扩展标记语言)交換)编码器和计算机可读介质。
背景技术
通过有限状态机基于ASN. I的解释而生成解码器程序的解码器是通常已知的。可以想到通过类似过程来产生EXI编码器。EXI编码器通常指用来根据针对XML文档的高效交换的EXI规范,将文本XML文档转换成ニ进制格式的编码器。要将通过使用这样的EXI编码器生成的位串正确地映射到XML文档的元素,必须预先准备用于编码的原始XML文档中的所有条目,这导致编码量和/或诸如所需要的存储器容量等的计算资源的増加。这样的EXI编码器不适合包括在具有有限资源的嵌入式设备中。


图I示出根据本发明的实施例的EXI编码器的配置;图2是用于说明EXI流结构的示例的图;图3是用于说明EXI流结构的另ー个示例的图;图4示意地说明了主体部分的EXI位串的例示性构成;以及图5是示出由EXI编码器执行的处理的流程的流程图。
具体实施例方式根据实施例的ー个方面,提供了基于定义XML文档的结构的XML(可扩展标记语言)模式的EXI (高效的XML交換)编码器,所述XML文档包括头(HEAD)部分、主体(BODY)部分和尾(TAIL)部分,头部分包含固定的XML内容,主体部分能够被重复X次或更多次(X是等于或者大于O的整数)并且包含可变内容以及具有固定的XML内容,并且尾部分包含固定的XML内容。
编码器包括读取单元、头部分编码器、主体部分编码器、尾部分编码器和输出单
J Li ο读取单元顺序地读取分配给变量符号作为替换目标的输入数据,读取的次数与主体部分被重复的次数一祥多。头部分编码器生成对应于头部分的固定的XML内容的第一 EXI位串。主体部分编码器生成对应于主体部分中的固定的XML内容的第二EXI位串,其中,在主体部分中,每当由读取单元读取输入数据时,就用该输入数据替换可变内容。尾部分编码器生成对应于尾部分的固定的XML内容的第三EXI位串。输出单元输出包括第一 EXI位串、第二 EXI位串和第三EXI位串的EXI流。图I示出根据本发明的实施例的EXI编码器的配置。
该EXI编码器基于XML文档(对应于EXI流内容的假想的XML文档的模版)和基于定义文档的结构的XML模式,其中,所述XML文档包括包含固定的XML内容的头部分、能够被重复X次或者更多次(X是等于或者大于O的整数)并且包含可变内容和除了可变内容之外具有固定描述的主体部分,以及包含固定的XML内容的尾部分。在本实施例中,当在ー个主体部分中存在多个可变内容时,它们被共同地称为结构体(structure),其中姆个可变内容可以被称为结构体成员。在本实施例中,假定使用该结构体。可变内容在例如被标签包围的主体或者标签内的属性值点处被描述。控制单元(读取単元)11顺序地读取用于结构体的输入数据(输入结构体),读取次数与主体部分被重复的次数一祥多。头部分编码器H生成对应于头部分的固定XML内容的EXI位串(第一EXI位串)。主体部分计数器12对输入数据已经被处理(B卩,多少输入结构体已经被处理)的次数进行计数。主体部分编码器B生成对应于XML内容的EXI位串(第二 EXI位串),同时每当读取输入数据时,就用输入数据替换主体部分变量。主体部分子编码器O读取第一输入数据并且主体部分子编码器I读取第二以及随后的输入数据。由此,根据在输入数据前数据已经被读取的次数来生成EXI位串。这一点将在下面进行详细描述。尾部分编码器T生成对应于尾部分的固定的XML内容的EXI位串(第三EXI位串)。更具体地说,在本实施例中,当有零个主体部分时尾部分子编码器O生成EXI位串,并且当有ー个或者更多主体部分时尾部分子编码器I生成EXI位串。由此,生成了反映主体部分被重复的次数的EXI位串。这一点将在后面进行更详细地描述。输出单元13输出EXI流,该EXI流是来自头部分编码器的EXI位串、来自主体部 分编码器的零个或更多EXI位串以及来自尾部分编码器的EXI位串的序列。输出的EXI流被发送到接收设备并在上面被解码以再生成XML文档。下面对本实施例进行更详细地描述。在说明书的结尾,提供了示例A. I到A. 6作为样本数据,其将在适当的地方被引用。在示例中,被‘ぎ符号包围的部分特别地表示变化部分,在其中描述了成员名(可变内容)。图I所示的EXI编码器包括头部分编码器H、主体部分计数器12、由两个主体部分子编码器O和I组成的主体部分编码器B、由两个尾部分子编码器O和I组成的尾部分编码器T、用于根据来自调用方的输入来驱动和控制编码器的控制单元11、以及输出単元13。作为输入的结构体的值(输入数据)由调用方给出并且由控制単元11读入。取决于输入结构体的格式和/或目标XML模式,两个主体部分子编码器O和I或者两个尾部分子编码器O和I可以是一祥的。控制单元11在初始化时将主体部分计数器12初始化为零,然后调用头部分编码器H。头部分编码器H输出针对预先提供的头部分的EXI位串。即,头部分编码器H,通过使用初始化參数作为输入并且以EXI格式生成对应于要被输出的EXI流的开头的流的初始信息。每当给出ー个输入数据(结构体)吋,控制单元11就将该数据传递给主体部分编码器B。当主体部分计数器12是零时使用主体部分子编码器0,并且当主体部分计数器12是非零时使用主体部分子编码器I。主体部分子编码器O或者主体部分子编码器I基于给出的数据生成和输出EXI位串。更具体地说,主体部分子编码器O或者主体部分子编码器I接收结构体作为输入,并且生成相当于XML内容的EXI位串,其中,在描述主体部分的成员名处描述结构体成员的值。每当由主体部分编码器B处理输入数据时,控制単元11也递增主体部分计数器12的值。当主体部分编码器B已经处理了所有的输入数据时,控制単元11调用尾部分编码器T。当主体部分计数器12是零时(即,当还没有输入数据或结构体时)尾部分编码器T使用尾部分子编码器0,并且当主体部分计数器12是非零时使用尾部分子编码器I。尾部分子编码器O或I输出针对预先提供的尾部分的EXI位串。即,尾部分编码器T以EXI格式生成元素以关闭流(相当于尾部分的XML内容)。·输出单元13将来自头部分编码器H、编码器B(主体部分子编码器O和I)和尾部分编码器T (尾部分子编码器O或I)的EXI位串组装成EXI流并且输出该流。图2示意地示出了输出的EXI流的例示性结构。图2的示例表示给出三个结构体(结构体I到3)的情況。图3示意地示出没有给出结构体的EXI流(即,尾部分接着头部分)的例示性结构。尽管本实施例通过仅提供输入结构体而没有给出XML文档生成了 EXI流,但是为了理解,下面描述从XML文档到EXI格式的转换。从XML文档到EXI格式的转换基于从XML模式(Schema-informed Grammar [I]Section 8.5)生成的EXI语法。EXI语法及用它生成的EXI流具有如下所示的特征。众所周知,XML模式定义了 XML文档的结构。EXI语法是通过已知的方法从EXI模式生成的。I.以事件的形式从XML文档的开头表示XML文档,例如“元素”(例如,SE和EE)、“属性”(AT)和“特性”(CH)(例如,SAX事件中的表示)。2. EXI语法具有基于由XML模式允许的状态转换的次数的语法和被按顺序分配给状态转换的事件编码。3.用能够表示状态转换的次数的最小位宽的整数来表示事件(取决于选择)。由于第二个和第三个特征,正常沟通是困难的,除非发送设备(具有EXI编码器的设备)和接收EXI流的设备具有相同的EXI语法。在接收设备上跳过在通常的XML处理中普遍的未知标签也是困难的。另外,在如下所示的这样的情况中,即使针对表面上相同的表示,状态转换和因此的输出位串也会变化。I.可选的XML属性当有可能或者可能不存在的属性X时,对于紧接该属性之前的状态,存在导致属性X的发生的转换并且导致下ー个属性或者节点的发生的转换。換言之,在属性Y在可选的属性X之后的语法中,当属性X存在时针对属性Y的事件编码和当属性X不存在时针对属性Y的事件编码能够是不同的。2. minOccur = O 的节点对于上面所描述的可选的XML属性的情況,当有可能不存在的节点时,针对在该节点之后的元素的事件编码能够变化。minOccur = O的节点意味着它不是必须存在的。
3. maxOccur是2或者更大的节点即使对于具有相同内容的XML元素(节点P),用于从对应于前ー个元素的语法转换到节点P的事件编码和从节点P到节点P转换的事件编码能够是不同的。maxOccur是2或者更大的节点意味着节点能够被重复那些次(例如,对应于本实施例的主体部分的次数)。在本实施例中处理的XML文档具有ー个头部分、零个或更多主体部分以及ー个尾部分。对于头、主体和尾部分中的每ー个,能够取决于输入数据来确定子元素和属性是否存在。
根据本实施例的EXI编码器预先为EXI语法之间所有的状态转换保留包括事件编码的位串(或者ニ进制串),对于所述状态转换,事件编码能够取决于输入的数量和输入是否存在而变化。因此,通过根据数据是否存在、布尔值和作为输入的数据项的数量来选择位串,能够容易地创建能够被正确地解码的EXI流。将用具体的示例来描述这一点。示例A. I示出针对假想的XML文档的例示模板。该文档符合示例A. 5中所示的模式,并且示例A. 6中所示的EXI语法是从该模式中衍生的。从參考文献 l(John Schneider and Takuki Kamiya, Efficient XMLInterchange (EXI)Format L 0. W3C Candidate Recommendation, December 2009, http://www. w3. org/TR/exi/)引用模式示例。示例A. 6中所示的EXI语法也是从參考文献I中引用的。EXI语法示出了针对“order”的语法(“针对元素〈order〉的完整语法”)和针对“piOduct”的语法(“针对元素〈product〉的完整语法”)。在每个语法中,定义了更详细的语法。在针对〈order〉的语法中的“ Term-product O, O”和“Term_product O, I”以及在针对〈product〉的语法中的“User_color0”是语法的名称。EXI语法包括四个部分LeftHandSide>TerminalsNonTerminal 和 EventCode0 当“Terminal,,事件在 LeftHandSide状态下发生时,输出EventCode和发生于向NonTerminal状态的转换。假设由“/order/product”标签(Xpath记法)指示的区域表示主体部分(重复的部分),如示例A. 2中所示布置头、主体和尾部分。具体地说,当输出表A. 3所示的三个结构体(一行对应于一个结构体并且结构体的每个元素表示成员(变量))时,预计要输出的假想的XML文档,即,对应于EXI流的XML文档,如示例A. 4中所示。以下在本实施例中,任意长度的比特以"Ob"开头并且用O和I的串表示。当用引号(")来指示任意的字符串时,这意味着它是用在XML中处理的格式UTF-8来表示的字节序列。根据本实施例的编码处理从头部分编码器H开始。在初始化时,主体部分编码器12被初始化为零。头部分编码器H除了 EXI头部(一般两字节)以外还包括对应于示例A. 2. I的EXI位串。头部分编码器H响应于来自控制单元11的调用输出所包括的EXI位串。将示例A. 3中所示的一行作为ー单元提供给主体部分编码器B以作为输入,并且主体部分编码器B输出EXI位串。将用于第一行的数据(一结构体)提供给主体部分子编码器O。主体部分子编码器O输出ObO并且进一步输出主体部分的内容的编码的结果(即,表示主体的XML内容的EXI位串,在该XML内容中,用第一行数据替换结构体的成员名称)。将用于第二行的数据提供给主体部分子编码器I并且继续。当提供第二或之后的数据时,它针对每块数据输出ObOO,并且然后输出主体部分内容的编码結果。首先针对第一行数据输出ObO并针对第二行和之后的行的数据输出ObOO的原因是,当主体部分计数器12是零时应用语法Term_product O, O,而当主体部分计数器12是非零时应用语法Term_product 1,0。下面更详细地描述主体部分子编码器O。主体部分以“product”标签开始。換言之,它以SE( "product")为开始,并且因为语法的第一层有两个状态,O和I,( S卩,可以用ー比特表示),所以主体部分子编码器O输出0b0。此后,它输出对应于所提供的数据(结构体)的位串。控制单元11使主体部分计 数器12递增。第一层指的是在EXI语法中事件编码中最左边的数字。例如,对于语法Term_product O,O,存在如下所示的八个事件编码OI. OI. II. 2I. 31.4.0I. 5I. 6最左边的数字仅是O或者I ( S卩,两种类型),所以第一层的状态可以用ー比特来表
/Jn ο同样对于语法Term_product I,O,存在如下所示的四个事件编码OI2. O2. I最左边的数字是O、I或2 ( S卩,三种类型),所以,第一层的状态可以用两比特来表
/Jn ο当用结构体作为參数第二次调用控制単元11吋,因为主体部分计数器12是非零,所以它调用语法Term_product 1,0所对应的主体部分子编码器I。S卩,Term_product 0,0指定针对SE( “product”)输出事件编码O以引起向Term_product 1,0的转换。此时,因为对于如上所述的第一层的语法存在三种类型的编码0、1、2和3,所述事先已知需要输出两比特事件编码。在同样的SE(“pr0dUCt”)被输出的情况下,主体部分子编码器I输出ObOO(即,事件编码“O”的两比特表示)。然后,它正如主体部分子编码器
O一祥,根据所给出的输入数据输出位串。控制单元11使主体部分计数器12递增。当用结构体作为參数第三次调用控制单元11时,因为Term_product 1,O被重复,所以与第二次调用时一样的过程发生。即,Ternu^oduct 1,0指定输出的事件编码O,然后对于SE( “product”)发生再次向同样的Term_productl,O的转换。最后,尾部分编码器T以“order”标签结束。当有零个主体部分时尾部分子编码器O运行,输出针对Term_product0,0的 EE(l.O),即,OblOOO,其是一比特I长度和三比特长度O’ s的串联。换言之,因为“1,0”中的“O”对应于第二层并且在第二层中有七种编码0、1、2、3、4、5和6,所以第二层需要三比特来用于表示。即使当主体部分发生一次时,向Term_product I,O的转换也会发生并且将再也不会返回到Term_product 0,0。当有一个或更多主体部分时,尾部分子编码器I运行,输出针对Term_product 1,0的EE(I),即,ObOl,其是两比特长度I。下面示出如何对主体部分的内容编码,即,如何生成表示XML文档的EXI位串,在该XML文档中,用输入数据替换主体部分中的结构体的成员名称(或者可变内容)。 本实施例中使用的语法期望按照“color”属性、“sku”属性、“quantity”元素和 “price”元素的顺序构成流(见示例A. I和A. 2)。虽然没有在本实施例中使用,但是“description”元素可以存在。在本实施例中,主体部分的构成是固定的并且除了“SKU”、“C0L0R”、“QUANTITY”和 “PRICE”四个部分以外不会改变。因此,预先用通用的EXI编码方法创建描述主体部分的结构的位串,并且仅变化的部分能够被输入数据替换。在主体部分中,保留对应于下面五个部分的EXI编码的位串。I.从“product”标签的开始到紧接对“sku”属性的内容描述之前(相当于 “〈product sku=,,)2.从紧接对“sku”属性的内容描述之后到紧接对“color”属性的内容描述之前 (相当于“color =”)3.从紧接对“color”属性的内容描述之后到紧接对“quantity”元素的内容描述之前(相当于“Xquantity〉”)4.从紧接对“quantity”元素的内容描述之后到紧接对“price”元素的内容描述之前(相当于“〈quantityXprice〉”),以及5.从紧接对“price”元素的内容描述之后到“order”标签的结束(相当于“〈/ price>〈/order>,,)。将作为输入提供的用于变量(S卩,成员)的位串插入到这些位串之间,产生位串, 该位串相当于其中用EXI语法来描述反映输入数据的主体部分的位串。在图4中示意地示出了针对主体部分的EXI位串的例示构成。图5是示出EXI编码器操作流程的流程图。在编码器被激活之后,控制单元11向头部分编码器H发送输出指令,然后头部分编码器H将包括在编码器H中的EXI位串(即,通过转换头部分的XML内容而生成的EXI 位串)发送到输出单元13 (S101)。控制单元11尝试从外面读取用于结构体的数据(多个变量)。如果数据存在(在 S102处是),它将所读取的数据传送给主体部分子编码器O。主体部分子编码器O基于所接收的数据生成EXI位串并将该EXI位串发送到输出单元13(S103)。控制单元11然后递增主体部分计数器12。控制单元11再一次尝试读取数据。如果第二个或更多的数据存在(在S104处是),则控制単元11将数据发送到主体部分子编码器I。主体部分子编码器I基于该数据生成EXI位串并将它发送到接收的输出单元13 (S105)。当没有更多的输入数据(在S104处否)吋,控制单元11向尾部分子编码器I发布输出指令。尾部分子编码器I将包括在尾部分子编码器I中的位串(通过转换尾部分的XML内容而生成的对应于Term_product I,O的EXI位串)发送到输出单元13 (S106)。如果在步骤S102处,在数据读取中没有数据(在S102处为否),则控制単元11向尾部分子编码器O发送输出指令。尾部分子编码器O输出包括在尾部分子编码器O中的位串(通过转换尾部分的XML内容而生成的对应于Term_product 0,O的EXI位串)(S107)。
输出单元13将从头部分编码器H、主体部分子编码器O和I、尾部分编码器O或I接收的EXI位串按照它们被接收的顺序布置到EXI流中,并将该EXI流输出到接收设备(S108)。上面所描述的方法使得能够基于XML模式而不需要使用XML文档作为输入来生成反映输入数据(输入结构体)的EXI流。如上面所描述的,根据本实施例,可以针对由特定的XML模式给出的EXI语法实施专门的和高效的编码。特别是对于处理仅使用XML模式中允许的数据描述的部分自由度的类型而言,可以比使用XML作为输入的传统编码器更高效地执行编码。尽管为了简单本实施例被限于头/主体/尾格式,但是随着对常量和变量部分的组合的原理的自然扩展和基于结构体被重复的次数而对常量的改变,嵌套构成或者包括两个或更多类型的主体部分也是可能的。通过使用例如通用的计算机设备作为基础硬件,也可以实现根据上述实施例的EXI编码器。即,通过包括在计算机设备中的处理器执行程序,可以实现EXI编码器的控制単元、主体部分计数器、头部分编码器、主体部分编码器和尾部分编码器。在这种情况下,可以通过预先将程序安装在计算机设备中,或者通过分发存储在诸如CD-ROM等的存储介质上的程序,或者通过网络分发,并且适当地将程序安装在计算机设备里来实现EXI编码器。A.样本数据A. I假想的XML文档的示例模板< xm1>
<order>
〈product sku="@SKU@" color="@COLOR@">
<quantity>@QUANTITY @</quantity〉
<price>@PRICE@</price>
〈/product〉
〈/order〉A. 2.假想的XML文档的模板的示例分割A. 2. I 头部分< xml>〈order〉A. 2. 2.主体部分〈product sku=" iSKUi" color = " iCOLORi" ><quantity>iQUANTITYi</quantity〉<price>iPRICEi</price>〈/product〉A. 2. 3.结尾(END)部分〈/order〉A. 3.对编码器的输入
权利要求
1.一种基于XML (可扩展标记语言)模式的EXI (高效的XML交換)编码器,所述XML模式定义了 XML文档的结构,所述XML文档包括头部分、主体部分和尾部分,所述头部分包含固定的XML内容,所述主体部分能被重复X次或者更多次(X是等于或者大于O的整数)并且包含可变内容以及具有固定的XML内容,并且所述尾部分包含固定的XML内容,所述编码器包括 读取单元,被配置为顺序地读取分配给变量符号的输入数据以作为替换目标,其中,所读取的次数与所述主体部分被重复的次数ー样多; 头部分编码器,被配置为生成对应于所述头部分的所述固定的XML内容的第一 EXI位串; 主体部分编码器,被配置为生成对应于所述主体部分中所述固定的XML内容的第二EXI位串,在所述主体部分中,每当所述读取单元读取所述输入数据时,就用所述输入数据替换所述可变内容; 尾部分编码器,被配置为生成对应于所述尾部分的所述固定的XML内容的第三个EXI位串;以及 输出单元,被配置为输出EXI流,其中,所述EXI流包括所述第一 EXI位串、所述第二EXI位串和所述第三EXI位串。
2.根据权利要求I所述的编码器,其中,所述主体部分编码器根据所述输入数据已经被读取的次数来生成所述EXI位串。
3.根据权利要求I所述的编码器,其中,所述尾部分编码器根据所述主体部分被重复的次数来生成所述EXI位串。
4.一种存储用于基于XML (可扩展标记语言)模式的EXI (高效的XML交換)编码的程序的非暂时性计算机可读介质,所述XML模式定义XML文档结构,所述XML文档包括头部分、主体部分和尾部分,所述头部分包含固定的XML内容,所述主体部分能够被重复X次或者更多次(X是等于或者大于O的整数)并且包含可变内容和具有固定的XML内容,以及所述尾部分包含固定的XML内容,所述程序当被计算机执行时,使得所述计算机执行包括以下的步骤 顺序地读取分配给所述可变内容的输入数据,读取的次数与所述主体部分被重复的次数ー样多; 生成对应于所述头部分的所述固定的XML内容的第一 EXI位串; 生成对应于所述主体部分中所述XML内容的第二EXI位串,在所述主体部分中,每当读取所述输入数据时,就用所述输入数据替换所述可变内容; 生成对应于所述尾部分的所述固定的XML内容的第三EXI位串;以及 输出EXI流,所述EXI流包括所述第一 EXI位串、所述第二 EXI位串和所述第三EXI位串O
全文摘要
EXI编码器是基于定义了XML文档的XML模式的,该XML文档包括头部分、能够被重复X次或者更多次并且包含可变内容的主体部分、和尾部分。读取单元顺序地读取对应于可变内容的输入数据,读取次数与主体部分被重复的次数一样多。头部分编码器生成对应于头部分的EXI位串。主体部分编码器生成对应于主体部分的EXI位串,在主体部分中,每当读取单元读取输入数据时,就用输入数据替换变量。尾部分编码器生成对应于尾部分的EXI位串。输出单元输出包括EXI位串的EXI流。
文档编号G06F17/30GK102708106SQ20111033936
公开日2012年10月3日 申请日期2011年11月1日 优先权日2011年3月28日
发明者土井裕介 申请人:株式会社东芝
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1