CN1836374B - 一种适合代码自动生成的结构化数据的二进制编码方法 - Google Patents

一种适合代码自动生成的结构化数据的二进制编码方法 Download PDF

Info

Publication number
CN1836374B
CN1836374B CN2004800236517A CN200480023651A CN1836374B CN 1836374 B CN1836374 B CN 1836374B CN 2004800236517 A CN2004800236517 A CN 2004800236517A CN 200480023651 A CN200480023651 A CN 200480023651A CN 1836374 B CN1836374 B CN 1836374B
Authority
CN
China
Prior art keywords
structural data
binary
coding method
data
binary system
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
CN2004800236517A
Other languages
English (en)
Other versions
CN1836374A (zh
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.)
UTStarcom Telecom Co Ltd
Original Assignee
UT SIDAKANG (CHINA) CO Ltd
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 UT SIDAKANG (CHINA) CO Ltd filed Critical UT SIDAKANG (CHINA) CO Ltd
Publication of CN1836374A publication Critical patent/CN1836374A/zh
Application granted granted Critical
Publication of CN1836374B publication Critical patent/CN1836374B/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8543Content authoring using a description language, e.g. Multimedia and Hypermedia information coding Expert Group [MHEG], eXtensible Markup Language [XML]

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种适合代码自动生成的结构化数据的二进制编码方法,其特征在于,包括如下步骤:定义BXML编码格式;按照具体的应用需求,构造适合采用BXML编码的结构化数据描述文件;使用BXML编译器读取所述结构化数据描述文件,BXML编译器根据命令生成某种具体的计算机语言的源代码,与具体的应用逻辑和传输方式相结合,实现完整的应用层的数据交换。本发明所述方法通过提供一种编码定义的规则,以及设计了一套代码生成过程和规则,使得开发人员按照这些规则开发的编译器能自动生成编解码代码。本发明具有适用面广泛、编码高效、适合代码自动化生成、简单和易于实现的特点。

Description

一种适合代码自动生成的结构化数据的二进制编码方法
技术领域
本发明涉及一种简单易行的结构化数据的编码技术,特别是涉及一种适合代码自动生成的结构化数据的二进制编码方法,具体地说,包括结构化数据的描述、编码和代码自动映射。
背景技术
无论是Internet还是各种专用通讯网络中,应用数据的交换是不可避免的,结构化数据是应用数据在计算机世界的最通常的表述方式,为了让各种结构化的应用数据在不同的计算机平台之间顺利交换,需要有独立于平台、编程语言和传输的数据编码方法。W3C组织提出的XML(Extensible Markup Language)就是一种被广泛应用的数据编码方法,基于XML的网络通讯协议也被广泛采用,如XML-RPC(Remote Process Communication),SOAP(Simple Object Access),Jabber(http://www.jabber.org)等等。但是由于XML采用文本编码导致占用大量网络带宽,对它的解析消耗较多计算机CPU和内存资源,W3C发布了XML的二进制编码格式WBXML(WAP Binary XML),其核心思想是将XML标签、属性类型、属性值和字符串常量映射成单字节编码,通过使用编码空间(codepage)来避免编码冲突。WBXML最初是为提高WAP的应用层协议WML(Wireless Markup Language)的编码效率而设计的,但由于其编码简单、高效且具备与具体应用无关的特点,也被用于很多其他的场合,如Wireless Village (http://www.wireless-village.org),SyncML(http://www.syncml.org)等等。应该说WBXML在设计出来之后被广泛应用的场合与它的初衷有着不同的特点,在诸如Wireless Village这样的应用环境,WBXML被用作通讯协议的编码格式,所有传递的消息结构都是预先定义的,而WML这样的语言被用来描述WAP页面的结构,其消息结构是不可预知的。尽管WBXML相对于XML来说编码效率提高了很多,但它的编程模型并没有改变,仍然需要采用Document Object Model(DOM)或Simple API for XML(SAX API)来编程,这种编程模型可能适合页面浏览器,但在WBXML被引申应用的场合(如Wireless Village)就未必合适了,因为它不是面向计算机编程语言的数据结构的直接映射,需要开发人员写大量的代码来操作与应用信息相关的数据。另一方面,XML标签到单字节编码的映射是通过普通文档描述的,需要开发人员阅读这些文档并手工地映射成代码。这些特点导致开发效率低下而且容易出错。如果有一种自动化工具能帮助开发人员自动地实现应用数据结构到计算机语言的数据结构映射,同时自动实现结构标签的编码映射,将大大提高开发效率。
发明内容
基于以上的分析,大量的结构预知的通讯场合采用WBXML这样简单高效的编码规则,因此,本发明要解决的技术问题是提出一种适合代码自动生成的结构化数据的二进制编码方法,本发明适用于独立于平台、语言和传输的各种应用数据的交换,如网络通讯协议、智能设备间的数据同步、结构化数据存储等。
本发明所述适合代码自动生成的结构化数据的二进制编码方法,将所描述的编码规则称为二进制扩展性标识语言BXML(Binary XML),包括如下步骤:
步骤一,定义二进制扩展性标识语言编码格式;
步骤二,按照具体的应用需求,构造适合采用二进制扩展性标识语言编码的结构化数据描述文件;
步骤三,使用二进制扩展性标识语言编译器读取所述结构化数据描述文件,二进制扩展性标识语言编译器根据命令生成某种具体的计算机语言的源代码,
步骤四,与具体的应用逻辑和传输方式相结合,实现完整的应用层的数据交换。
本发明所述方法通过提供一种编码定义的规则,以及设计了一套代码生成过程和规则,使得开发人员按照这些规则开发的编译器能自动生成编解码代码。本发明具有适用面广泛、编码高效、适合代码自动化生成、简单和易于实现的特点。
附图说明
图1为本发明所述方法的流程示意图;
图2为本发明所述方法的又一具体示意图。
具体实施方式
以下结合附图对本发明的具体实施方式进行说明。
本发明将所描述的编码规则称为“BXML(Binary XML)”,以示与WBXML的区别。
本发明所述方法的流程示意图参见图1。本发明的基本思想是先建立BXML编码格式,包括对版本号、消息长度、字符集和不定结构等等的描述;按照BXML编码格式,构造结构化数据描述文件;然后使用BXML编译器读取所述结构化数据描述文件,BXML编译器根据命令生成某种具体的计算机语言的源代码,与具体的应用逻辑和传输方式相结合,实现应用数据结构到计算机语言的数据结构映射,同时自动实现结构标签的编码映射。
以下分别对建立BXML编码格式,构造结构化数据描述文件以及生成某种具体的计算机语言的源代码进行说明。
本发明提出的BXML编码格式如下:
BXMLMessage  =version msgLength charset ANY
version    =u_int8containing BXML version number
msgLength    =u_int16
charset    =mb_u_int32indicating the charset
ANY    =[SWITCH_PAGH codepage]TAG[struct]
struct    =*content END
content  =INTERNAL_TAG[integer|string|binary|struct|union|enum|array|ANY]
integer    =mb_int32
string    =string terminated with zero
binary  =length*byte
length  =integer
union    =content
enum    =integer
array    =*arrayItem END
arrayItem=ARRAY_ITEM(integer|string|binary|struct)
版本号version=u_int8containing BXML version number
所有BXML编码的初始字节代表BXML的版本号,其编码规则与WBXML相同。它的高四位比特代表主版本号减一,低四比特代表从版本号。例如,版本2.7被编码成0X17。如果将本发明的版本号指定为1.1,则被编码成0X01。
消息长度msgLength=u_int16
消息长度指后续的BXML编码的可变字节数,不包括版本号和消息长度本身所占用的字节数。它被编码成一个双字节整数(按网络序)。该域的目的是方便BXML编码在面向连接的传输(如TCP)中使用,对解码器无影响。
字符集charset=mb_u_int32
字符集定义后续的BXML编码中的所有字符串基本类型所采用的编码字符集。该域本身被编码成一个多字节整数,其整数值是IANA为字符集分配的MIB号。字符集为零,则代表编解码双方预先已经约定默认的字符集。
考虑到代码生成的简单性,本发明不接受那些在C语言中结尾标记不是一个单字节零值的字符集,如UTF-16。事实上,也很少有人用这样的字符集作为传输数据的编码,而且我们总是可以用其他字符集来替换他们,如UTF-8或任何专用字符集(如GB2312)等。
不定结构ANY=[SWITCH_PAGH codepage]TAG[struct]
ANY部分是一个带标签的结构,解码器可以通过标签值知道结构的类型。TAG值由BXML编译器自动分配。BXML编译器总是按照一个BXML结构描述文件中结构定义的顺序从0X05开始递增地分配TAG值。结构的TAG值仅仅在对应的codepage空间中有效。
缺省的codepage值是零。如果codepage不是零,则SWITCH_PAGH codepage必须出现,而且它指定的codepage值仅仅对紧接着的struct生效。这点与WBXML不同,在WBXML中,codepage始终生效直到下一个SWITCH__PAGH codepage出现。本发明的考虑在于,一个结构中内含的结构可能位于其他的codepage空间,如果按照WBXML的编码规则,则SWITCH_PAGH可能反复地出现,而本发明认为解码器已经预知了任何结构成员的类型,所以对结构的成员根本不需要codepage和结构TAG,因此我们定义SWITCH_PAGH仅仅生效一次。这样还可以避免解码器需要记住codepage状态。
TAG及其所属空间
TAG被编码成一个单字节,它具备下面的结构:
Figure B2004800236517D00051
一个TAG总是在它所属的空间中有效,有三种类型的TAG空间,如下表所示:
Figure B2004800236517D00052
Figure B2004800236517D00061
结构struct=*content END
一个结构由若干个内容的编码和一个END标签组成,每个内容代表了一个结构的成员,结构成员出现与否由应用逻辑自行决定,成员的出现可以带值也可以不带值,也由应用逻辑自行决定。
内容content=INTERNAL_TAG[integer|string|binary|struct|union|enum|array|ANY]
一个内容代表结构或联合的一个成员,它可以带值出现,或不带值出现。它由一个内部标签和对应的值的编码组成。
整数integer  =mb_int32
一个整数被编码成一个多字节整数,规则与WBXML相同。它由一系列字节组成,每个字节的第7(最高)比特为连续标记,如果它为1,表示该整数还包括后续字节编码,否则表示当前字节是该整数的最后一个字节编码。该整数值由这一系列的字节去除连续标记后剩余的比特位串接起来表示(由高到低)。
字符串string=string terminated with a single zero byte
一个字符串按照字符集指定的编码方式进行编码,并用一个单字节零结尾。考虑到代码生成的简单性,本发明不接受那些在C语言中结尾标记不是一个单字节零值的字符集,如UTF-16。事实上,也很少有人用这样的字符集作为传输数据的编码,而且我们总是可以用其他字符集来替换他们,如UTF-8或任何专用字符集(如GB2323)等。
二进制数据串binary  =length*byte
任意的二进制数据串的编码规则与WBXML中的opaque相同,由一个长度指示和若干字节数据组成。其中,长度指示指该二进制数据串的字节数,不包括其自身的字节数,它被编码成一个多字节整数。
联合union=content
联合由一个单一的内容编码组成,它可以带值或不带值。
枚举enum=integer
枚举被编码成多字节整数,代表所定义的枚举值。
数组array=*arrayItem END
数组由若干数组元素的编码和一个END标签组成。
数组元素arrayItem=ARRAY_ITEM(integer|string|binary|struct)
一个数组元素由一个ARRAY_ITEM标签和元素值的编码组成。数组元素类型对解码器是预知的。
本发明的BXML编码格式继承的WBXML的特性,主要包括:
继承了WBXML中的元素(Element)所具备的特性,包括元素的嵌套、缺省、无内容单一元素等;
在编码上仍然对元素标签(Element tag)采用单字节编码,并采用编码空间(codepage)避免编码冲突;
继承了部分全局标签(Global token),如SWITCH_PAGE,END等。
基本数据类型编码规则与WBXML相同,如多字节整数(mb_int),内联字符串(inline string)和不透明数据(opaque)等;
基于BXML编码的开发过程和代码自动生成
开发过程如图2所示。本发明针对最常用的计算机语言C++和JAVA说明代码自动生成的原理。
首先需要根据具体应用需求编写结构化数据描述文件,然后使用BXML编译器读取这些描述文件,BXML编译器根据命令生成某种具体的计算机语言的源代码,如C++、JAVA。这些自动生成的代码包含下面的主要功能:
用同名的类名、成员名直接表达结构化数据类型,开发人员可利用这些代码直接设置或提取结构化数据的内容,而不需要象DOM或SAXAPI那样间接地访问。
代码中包含编解码函数,可用于生成或解析BXML编码数据。
代码中可包含自打印功能,方便调试。
在使用BXML编译器生成源代码以后,开发人员可利用这些代码与具体的应用逻辑和传输方式结合起来,实现应用数据的交换。开发人员不需要再编写任何编解码的代码,也不用再间接访问结构化数据。
结构化数据的描述文件
结构化数据描述文件用于描述事先确定的结构化数据的结构,其地位类似于XML的DTD文件或Schema文件,但与XML DTD或Schema文件不同的是,它的目的不是用于对BXML编码进行校验,而是用于指导编译器自动生成程序源代码,并告知编译器应生成什么样的编解码代码。
以下是有关结构化数据描述文件的规则:
1)任何数据交换总是发生在一定的上下文(Context)中,比如一个特定的协议接口等等。一个结构化数据描述总是针对这样的一个上下文的,一个上下文描述可以由一个或多个BXML结构描述文件组成。BXML编译器的一次运行也总是针对一个上下文的,它需要同时读入该上下文的所有描述文件。
2)每个BXML结构描述文件在文件开头必须使用“page”关键字指定该文件的codepage空间,它对该文件内描述的所有结构有效。在一个上下文中,codepage必须是唯一的。
3)每个BXML结构描述文件应在page关键字之后指明生成程序源代码时所需要的JAVA包名或C++命名空间,他们对该文件中的所有描述有效。对一个上下文中的不同的描述文件,可以指定相同或不同的JAVA包名或C++命名空间。
4)在一个BXML结构描述文件中可以直接使用同一上下文的任何一个BXML描述文件中定义的数据类型,但是同一上下文的任何数据类型不能重名。
5)用关键字定义的数据类型,包括:
整数:关键字为int
字符串:关键字为string
不透明二进制字节序列:关键字为binary
枚举:关键字为enum
联合:关键字为union
结构:关键字为struct
不定结构:关键字为ANY
数组:关键字为arrayof
6)在一个BXML结构描述文件中的结构定义顺序是重要的,它影响BXML编译器分配的TAG值。数据交换双方必须使用相同的BXML结构描述文件。
7)一个结构或联合内部的成员定义顺序也是重要的,它影响BXML编译器分配的内部标签值。数据交换双方必须使用相同的BXML结构描述文件。
为了开发人员书写方便,本发明采用类似C语言头文件的方式描述结构化数据,下面的例子说明了描述文件的格式。其中,下划线部分为关键字,所有关键字均被展示。
//file test.bxml,only for test,no actual meaning
page=0;
package com.test;//for java
namespace com::test;//for c++
enum SessionType{
     inband=1;
     outband=2;
}
union SessionAddress{
     string url;
     int ipAddress;
}
struct SessionDescriptor{
  _SessionType type;
   SessionAddress address;
   stringsessionID;
}
struct UserInfo{
    string userID;
    int age;
    binary key;
}
arrayofUserInfoUserInfoList;
arrayofint IntegerList;
arrayofstring StringList;
arrayofbinary BinaryList;
struct LoginReq{
     string deviceID;
     UserInfoList userList;
     BinaryList blist;
     StringList slist;
    IntegerList ilist;
}
struct LoginRes{}
structMessage{
     SessionDescriptor desc;
     ANY msgBody;
     int time;
     ANY addition;
}
//end of the test.xml
代码生成的一般规则
事实上,从BXML结构描述文件向某种计算机编程语言的映射方法应该不会是唯一的,本发明首先描述一般的规则;随后,简要描述向C++和JAVA语言的典型映射。
1)任何数据交换总是发生在一定的上下文(Context)中,比如一个特定的协议接口等等。一个结构化数据描述总是针对这样的一个上下文的,一个上下文描述可以由一个或多个BXML结构描述文件组成。BXML编译器的一次运行也总是针对一个上下文的,它需要同时读入该上下文的所有描述文件。为方便起见,通常应将一个上下文的所有BXML结构描述文件放置在同一个根目录下。
2)一个应用程序可以同时拥有不同的上下文,比如,它可能同时拥有多个不同类型的通讯接口,与不同的实体交换数据。这样,需要使用BXML编译器分别对各个上下文进行编译,尽管不同上下文的结构标签值会冲突,但他们应使用在不同的通讯接口(地址)中,这种标签值的重复不会有任何问题。但是不同上下文中可能有数据类型名冲突的情况,这种情况应使用不同的JAVA包名或C++命名空间来解决。
3)在一次上下文编译中,BXML编译器针对每个描述文件分别从0X05开始依次为每个结构分配结构TAG。如果结构太多,可以分布到不同的文件(codepage)中。一个上下文的应用结构最大数为:
256co depages*(128tags-5predefined)=31488
对绝大多数应用来说已经足够了。
4)BXML编译器分别为每一个结构或联合的成员依次从0X05开始分配内部标签,一个结构或联合的内部标签的最大数为:
128tags-5predefined=123
对绝大多数结构或联合来说也足够了。
下面通过具体示例分别描述向C++和JAVA语言的典型映射。
向C++语言的典型映射
枚举的映射:
Figure B2004800236517D00121
Figure B2004800236517D00131
联合的映射:
结构的映射:
Figure B2004800236517D00151
数组的映射:
Figure B2004800236517D00162
Figure B2004800236517D00171
整型的映射:
一个整型被映射成C++的DWORD类型,在BXML运行库中有一个BXMLInt类用来支持对它进行编解码和可打印字符串的输出功能。
字符串的映射:
一个字符串被映射成C++的STL string类型,在BXML运行库中有一个BXMLString类用来支持对它进行编解码和可打印字符串的输出功能。
二进制字节序列的映射:
一个二进制字节序列被映射成C++的STL vecotor<BYTE>类型,在BXML运行库中有一个BXMLBinary类用来支持对它进行编解码和可打印字符串的输出功能。
不定结构的映射:
不定结构被映射成BXML运行库中的ANY类,它也是所有结构映射成C++类的基类。ANY类的定义摘要如下:
class ANY
{
public:
    static ANY*parseANY(uBYTEid,BXMLBuffer & buffer,BXMLParser & p);
    virtual~ANY(){};
    virtual ANY*duplicate()=0;
    virtual uBYTE getCodepage()=0;
    virtual uBYTE getTag()=0;
    virtual ANY*parse(uBYTE id,BXMLBuffer & buffer,BXMLParser & p)=0;
    virtual void write(BXMLBuffer & buffer,BXMLWriter & w,bool withtag)=0;
    virtual string toString(int level,bool withtag)=0;
};
另外,BXML运行库中还有两个重要的类:BXMLWriter和BXMLParser,用来支持对顶层BXML数据进行编解码。
向JAVA语言的映射
枚举的映射:
Figure B2004800236517D00191
联合的映射:
结构的映射:
Figure B2004800236517D00202
Figure B2004800236517D00211
Figure B2004800236517D00221
数组的映射:
Figure B2004800236517D00222
Figure B2004800236517D00231
整型的映射:
一个整型被映射成JAVA的Integer类型,在BXML运行库中有一个BXMLInt类用来支持对它进行编解码和可打印字符串的输出功能。
字符串的映射:
一个字符串被映射成JAVA的String类型,在BXML运行库中有一个BXMLString类用来支持对它进行编解码和可打印字符串的输出功能。
二进制字节序列的映射:
一个二进制字节序列被映射成JAVA的byte[]类型,在BXML运行库中有一个BXMLBinary类用来支持对它进行编解码和可打印字符串的输出功能。
不定结构的映射:
不定结构被映射成BXML运行库中的ANY类,它也是所有结构映射成JAVA类的基类。ANY类的定义摘要如下:
public abstract class ANY
{
    public static ANY parseANY(int id,InputStream in,BXMLParser p);
    public abstract ANY parse(int id,InputStream in,BXMLParser p);
    public abstract void write(OutputStream out,BXMLWriter w,boolean withtag);
    public abstract int getCodepage();
    public abstract int getTag();
    public abstract String toString(int level,boolean withtag);
}
另外,BXML运行库中还有两个重要的类:BXMLWriter和BXMLParser,用来支持对顶层BXML数据进行编解码。
一个应用程序运行示例
用前面示例过的BXML结构描述文件,然后用BXML编译器生成的源代码开发了一个应用程序,该程序以描述文件中定义的Message结构作为顶层结构构造了一个结构化数据,再用该结构的自打印功能输出数据内容,并用编码函数进行BXML编码。
Message结构的自打印输出:
Message
  desc
    type
      outband
  address
      url
      sip:joe.li@utstar.com
  sessionID
     abcd
msgBody
  LoginReq
   deviceID
      UTStarcomABC
userList
  UserInfo
    userID
     Joe.li
    age
    29
key
  0c 16 00 17
UserInfo
  userID
    Mike
age
   25
key
  38 23 0c 43 45
blist
   4e c8
   15 19 06
slist
    string1
    string2
ilist
       30
       800
time
  540394
addition
 LoginRes
经编码函数进行编码以后的数据总长度为138个字节,其内容用16进制表示如下:
01 00 87 6a 89 85 85 02 86 85 73 69 70 3a 6a 6f 65 2e 6c 69 40 75 74 73 74 61 72 2e 63 6f 6d 00 87 6162 63 64 00 01 86 87 85 55 54 53 74 61 72 63 6f 6d 41 42 43 00 86 86 85 4a 6f 65 2e 6c 69 00 86 1d 87 040c 16 00 17 01 86 85 4d 69 6b 65 00 86 19 87 05 38 23 0c 43 45 01 01 87 82 02 4e c8 82 03 15 19 06 01 8882 73 74 72 69 6e 67 31 00 82 73 74 72 69 6e 67 32 00 01 89 82 1e 82 86 20 01 01 87 a0 fd 6a 88 08 01
对上述BXML编码的解释如下表所示:
Figure B2004800236517D00251
Figure B2004800236517D00261
Figure B2004800236517D00271
综上所述,本发明对WBXML的改进主要包括:
将WBXML的元素与计算机语言的结构数据类型相对应,所有的元素标签代表相应的结构类型编码;
增加内部标签(Internal tag)的概念,内部标签在一个结构内解释,代表一个相应的结构成员,内部标签根据运行时需要可携带标签内容(即成员值),也可不携带内容(即无值出现),或者不出现(即成员缺席);
内部标签所携带的内容不再需要任何其他tag标记,因为类型是预知的,除非是成员类型为不定结构(ANY)的情况;
内部标签所携带的内容直接按照所对应的成员类型进行编码,如整型按多字节整数进行编码,不象WBXML仍然采用字符串编码;
增加一个预定义的全局标记——ARRAY_ITEM,用于分隔数组元素;
不考虑专门支持WBXML的属性(Attribute),但是可以通过增加结构成员来表达属性;
不考虑专门支持WBXML中的字符串常量,但是可以通过枚举类型来表达;
虽然已经参考附图对本发明的方法以举例方式进行了描述,但是本发明不限于上述这些细节,并且本申请含盖权利要求范围之内的各种变型或改变。
工业应用性
根据本发明的方法提出了一种适合代码自动生成的结构化数据的二进制编码方法,本发明适用于独立于平台、语言和传输的各种应用数据的交换,如网络通讯协议、智能设备间的数据同步、结构化数据存储等。

Claims (16)

1.一种适合代码自动生成的结构化数据的二进制编码方法,其特征在于,包括如下步骤:
步骤一,定义二进制扩展性标识语言编码格式,所述二进制扩展性标识语言编码格式包括对版本号、消息长度、字符集和基本数据类型、联合、枚举、结构和不定结构的描述;
步骤二,按照具体的应用需求,构造适合采用二进制扩展性标识语言编码的结构化数据描述文件,其中所述结构化数据描述文件的规则如下:
1)结构数据交换发生在一定的上下文中;
2)每个二进制扩展性标识语言结构描述文件在文件开头使用关键字指定所述文件的编码空间,它对所述文件内描述的所有结构有效;
3)每个二进制扩展性标识语言结构描述文件在关键字之后指明生成程序源代码时所需要的包名或命名空间,它们对所述文件中的所有描述有效;
4)在一个二进制扩展性标识语言结构描述文件中直接使用同一上下文的任何一个二进制扩展性标识语言描述文件中定义的数据类型,同一上下文的任何数据类型不能重名;
5)用关键字定义数据类型;
6)定义结构顺序;以及
7)定义成员顺序;以及
步骤三,使用二进制扩展性标识语言编译器读取所述结构化数据描述文件,二进制扩展性标识语言编译器根据命令生成具体的计算机语言的源代码,
步骤四,与具体的应用逻辑和传输方式相结合,实现完整的应用层的数据交换。
2.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,对于规则1),一个结构化数据描述总是针对一个特定的上下文,一个上下文描述由一个或多个二进制扩展性标识语言结构描述文件组成;二进制扩展性标识语言编译器的一次运行也总是针对一个上下文同时读入所述上下文的所有描述文件。
3.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,对于规则2),在一个上下文中,编码空间必须是唯一的。
4.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,对于规则3),对一个上下文中的不同的描述文件,指定相同或不同的包名或命名空间。
5.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,定义二进制扩展性标识语言编码格式时,还包括定义标签TAG,所述标签TAG被编码成一个单字节。
6.根据权利要求5所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,所述单字节的最高位用于指示所述标签TAG是否还有后续的内容编码。
7.根据权利要求5所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,所述单字节的第0到6比特位用于定义标签TAG标识。
8.根据权利要求7所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,所述单字节的一定范围被保留做预定义标记。
9.根据权利要求5-8中任一所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,一个标签TAG总是在它所属的空间中有效。
10.根据权利要求5-8中任一所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,所述标签TAG有三种类型:总是全局范围有效的预定义标签;结构标签,由二进制扩展性标识语言编译器自动分配;内部标签,用来标识一个成员是否出现。
11.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,所述数据类型包括:
整数:关键字为int
字符串:关键字为string
不透明二进制字节序列:关键字为binary
枚举:关键字为enum
联合:关键字为union
结构:关键字为struct
不定结构:关键字为ANY
数组:关键字为arrayof。
12.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,一个上下文描述由一个或多个二进制扩展性标识语言结构描述文件组成。
13.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,对应于多个不同类型的通讯接口,一个应用程序同时拥有不同的上下文,以适应于多个不同类型的功能实体进行交换数据。
14.根据权利要求12所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,在一次上下文编译中,二进制扩展性标识语言编译器针对每个描述文件分别依次为每个结构分配结构TAG;如果一个页面的结构数目超过123,则分布到不同的文件的编码空间中,一个上下文的应用结构最大数为31488。
15.根据权利要求13所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,所述二进制扩展性标识语言编译器分别为每一个结构或联合的成员依次分配内部标签,一个结构或联合的内部标签的最大数为123。
16.根据权利要求1所述的适合代码自动生成的结构化数据的二进制编码方法,其特征在于,所述源代码提供了结构化数据描述到代码的直接映射,并自动实现了对结构标签的编码映射和相应的二进制扩展性标识语言编解码和自打印功能。
CN2004800236517A 2004-02-13 2004-02-13 一种适合代码自动生成的结构化数据的二进制编码方法 Expired - Fee Related CN1836374B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2004/000122 WO2005081408A1 (fr) 2004-02-13 2004-02-13 Methode de codage binaire concue pour des donnees structurees dont le code est automatiquement genere

Publications (2)

Publication Number Publication Date
CN1836374A CN1836374A (zh) 2006-09-20
CN1836374B true CN1836374B (zh) 2010-10-13

Family

ID=34876874

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2004800236517A Expired - Fee Related CN1836374B (zh) 2004-02-13 2004-02-13 一种适合代码自动生成的结构化数据的二进制编码方法

Country Status (2)

Country Link
CN (1) CN1836374B (zh)
WO (1) WO2005081408A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105955066A (zh) * 2016-05-30 2016-09-21 北京理工大学 一种仿真系统中通用的模型数据编码和解码方法

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10977221B2 (en) * 2017-10-20 2021-04-13 Hewlett Packard Enterprise Development Lp Encoding of data formatted in human-readable text according to schema into binary
CN111258629B (zh) * 2018-11-30 2023-08-11 苏州新看点信息技术有限公司 一种手机代码转码方法、存储介质、电子设备及系统
CN110162480B (zh) * 2019-05-31 2023-02-24 泛升云微电子(苏州)有限公司 一种结构化诊断对象的自动化解析方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002063775A2 (en) * 2001-02-05 2002-08-15 Expway Method and system for compressing structured documents
WO2003001811A1 (de) * 2001-06-25 2003-01-03 Siemens Aktiengesellschaft System zur verbesserten encodierung/decodierung von strukturierten, insbesondere xml-basierten, dokumenten sowie verfahren und vorrichtungen zur verbesserten encodierung/decodierung von binären repräsentationen von solchen dokumenten
US20030046317A1 (en) * 2001-04-19 2003-03-06 Istvan Cseri Method and system for providing an XML binary format

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002063775A2 (en) * 2001-02-05 2002-08-15 Expway Method and system for compressing structured documents
US20030046317A1 (en) * 2001-04-19 2003-03-06 Istvan Cseri Method and system for providing an XML binary format
WO2003001811A1 (de) * 2001-06-25 2003-01-03 Siemens Aktiengesellschaft System zur verbesserten encodierung/decodierung von strukturierten, insbesondere xml-basierten, dokumenten sowie verfahren und vorrichtungen zur verbesserten encodierung/decodierung von binären repräsentationen von solchen dokumenten

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
WO 03001811 A1,全文.

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105955066A (zh) * 2016-05-30 2016-09-21 北京理工大学 一种仿真系统中通用的模型数据编码和解码方法

Also Published As

Publication number Publication date
WO2005081408A1 (fr) 2005-09-01
CN1836374A (zh) 2006-09-20
WO2005081408A9 (fr) 2005-11-10

Similar Documents

Publication Publication Date Title
Brandes et al. Graph markup language (GraphML)
US7302678B2 (en) Symmetric transformation processing system
US6874146B1 (en) Metadata driven system for effecting extensible data interchange based on universal modeling language (UML), meta object facility (MOF) and extensible markup language (XML) standards
CN100437579C (zh) 一种实现ajax网页的方法
TWI334551B (en) Method and computer-readable medium for improting and exporting hierarchically structured data
US20080010629A1 (en) Shareable, bidirectional mechanism for conversion between object model and XML
US7509574B2 (en) Method and system for reducing delimiters
CA2438176A1 (en) Xml-based multi-format business services design pattern
WO2002054291A3 (en) Compact tree representation of markup languages
Armstrong et al. The java web services tutorial
WO2003073271A1 (en) System and method for xml data binding
JP2006209745A (ja) 文書のバイナリシリアライゼーションの方法およびシステム
CN102566984A (zh) 一种配置参数的方法及装置
US20060212800A1 (en) Method and system for sequentially accessing compiled schema
McArthur et al. An extensible tool for source code representation using XML
CN1836374B (zh) 一种适合代码自动生成的结构化数据的二进制编码方法
Brandes et al. Graph markup language (GraphML)
US7735001B2 (en) Method and system for decoding encoded documents
Skogan UML as a schema language for XML based data interchange
Barta et al. Syndication with JML
US20060184874A1 (en) System and method for displaying an acceptance status
US20060212799A1 (en) Method and system for compiling schema
Aziz et al. An Introduction to JavaScript Object Notation (JSON) in JavaScript and .NET
CN112765252A (zh) 数据传输方法、客户端、终端、服务器及存储介质
Hunter et al. Easy Java/XML integration with JDOM, Part

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: UT STARCOM COMMUNICATION CO., LTD.

Free format text: FORMER OWNER: UT SIDAKANG (CHINA) CO. LTD.

Effective date: 20130328

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100738 DONGCHENG, BEIJING TO: 310053 HANGZHOU, ZHEJIANG PROVINCE

TR01 Transfer of patent right

Effective date of registration: 20130328

Address after: 310053 six and 368, hi tech Development Zone, Zhejiang, Binjiang, Hangzhou

Patentee after: UT Starcomm Communication Co Ltd

Address before: 100738, Beijing, Dongcheng District, East Chang'an Avenue, No. 1 East Plaza, Oriental Economic and trade east two office building, 10 floor

Patentee before: UT Sidakang (China) Co., Ltd.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20101013

Termination date: 20160213

CF01 Termination of patent right due to non-payment of annual fee