WMLC/WBXML 学习笔记
数据类型
============================================
类型 说明
bit : 1 bit of data
byte : 8 bits of opaque data
u_int8 : 8 bit unsigned integer
mb_u_int32: 32 bit unsigned integer, encoded in multi-byte integer format.
multi-byte integer format: 每个字节的第一位用于表示后面还有没有字节是属于当前integer,1表示还有,0表示没有。
如:0xA0 转换后变成两个字节0x81 0x20 ,0x60转换后还是0x60.
BNF格式文档架构
========================================================
start = version publicid charset strtbl body
strtbl = length *byte
body = *pi element *pi
element = ([switchPage] stag) [ 1*attribute END ] [ *content END ]
content = element | string | extension | entity | pi | opaque
stag = TAG | (literalTag index)
literalTag = LITERAL | LITERAL_A | LITERAL_C | LITERAL_AC
attribute = attrStart *attrValue
attrStart = ([switchPage] ATTRSTART) | ( LITERAL index )
attrValue = ([switchPage] ATTRVALUE) | string | extension | entity | opaque
extension = [switchPage] (( EXT_I termstr ) | ( EXT_T index ) | EXT)
string = inline | tableref
switchPage = SWTICH_PAGE pageindex
inline = STR_I termstr
tableref = STR_T index
entity = ENTITY entcode
entcode = mb_u_int32 // UCS-4 character code
pi = PI attrStart *attrValue END
opaque = OPAQUE length *byte
version = u_int8 // WBXML version number
publicid = mb_u_int32 | ( zero index )
charset = mb_u_int32
termstr = charset-dependent string with termination
index = mb_u_int32 // integer index into string table.
length = mb_u_int32 // integer length.
zero = u_int8 // containing the value zero (0)
pageindex = u_int8
Version
=======================================================
version = u_int8 // WBXML version number
WBXML版本号,前4位表示主版本号减1后的值,后4位是副版本号,如:0x01表示版本号为1.1。
Public Identifier
=============================================================
publicid = mb_u_int32 | ( zero index )
zero = u_int8 // containing the value zero (0)
可用的public identifier清单如下:
0 String table index follows; public identifier is encoded as a literal in the string table.
1 Unknown or missing public identifier.
2 "-//WAPFORUM//DTD WML 1.0//EN" (WML 1.0)
3 DEPRECA