1. 文件规则
1.1 与结构体名相关的术语
1.1.1 字段(field)
字段(field)是包含值且可存储数据的最小单位
1.1.2 记录(Record)
记录是由多个字段(field)组成,这些字段按照一定的方式被组合到一起,处理他们时把他们看做是一个完整的数据。
1.1.3 表(Table)
表是由相同类型,长度固定的记录组成的数据存储单元,这些数据按顺序进行存储。
1.1.4 链表(List)
链表是由相同类型,长度可变的记录组成的数据单元。
1.1.5 帧(Frame)
帧是由多个表或链表组成的数据存储单元。
1.1.6 分配管理头(Distribution Header)
分配管理头(Distribution Header)位于整个帧的初始位置。它包含了该帧内部存储的表或链表的位置和长度。
1.1.7 属性管理头(Attribute Header)
属性管理头(Attribute Header)位于一组数据的初始位置,它描述了该数据相关的属性和地址位置。
1.2 数据类型
1.2.1 自然数类型(N)
数值范围:表示数值范围从0到最大正整数值,这个最大值正整数值由字段(field)的字节数决定。(例如:由两个字节构成的自然数字段能表示数的范围从0到65535. 0被赋值为”Null”.)
1.2.2 整数类型(I)
表示方法:使用2的补码格式来表示(第一位是符号位,代表是正数还是负数.)
数值范围:由字段长度决定数值范围,也就是说有效范围是由该字段长度能表示的最小负数值和最大正数值。(例如:由两个字节组成的字段能表示的整数值的范围从-32768 到 +32767. 0值被赋值为”Null”)
1.2.3 单字节字符类型(C)
表示方法:使用单字节(比如 JIS 8位码)组成的序列。
1.2.4 Meta-dependent字符类型(CC)
表示方法:由元数据(metadata)定义的语言系字符串码(比如 SJIS 码)组成的序列。
1.2.5 位类型(B)
表示方法:由一组二进制的位构成一个字段。
1.2.6 Normalized Type(NZ) (浮点类型)
值范围:表示一个浮点值(0.0≦字段值≦1.0)乘以n后的整数部分的值。
1.2.7 扇区地址类型(SA)
表示方法:使用3个字节表示数据在存储媒体上的物理扇区地址,同时,使用另外6位表示逻辑扇区的数目。每个逻辑扇区的空间长度是可变的,最小的是32个字节,最大的是256个字节。
字-0
序号 | bit | 描述 |
1 | 15~0 | 扇区地址 |
字-1
序号 | bit | 描述 | ||
1 | 15~8 | 扇区地址 | ||
2 | 7 | 磁盘面识别标志 | bit7 | 含义 |
|
|
| 0 | A面 |
|
|
| 1 | B面 |
3 | 6 | 存储层识别标志 | bit6 | 含义 |
|
|
| 0 | 单层 |
|
|
| 1 | 双层 |
4 | 5~0 | 逻辑扇区数 |
数值范围:代表扇区地址范围从0[扇区地址],0[逻辑扇区] 到16777215[扇区地址],63[逻辑扇区号].
如果使用CD-ROM/DVD-ROM存储数据,一个扇区的空间长度固定为2048个字节。下表描述了一个扇区中包含的块数以及每个块的字节数。(我们当前项目使用第一项数据)
1个逻辑扇区的容量 | 逻辑扇区的个数范围 |
32Byte | 0~63 |
64Byte | 0~31 |
128Byte | 0~15 |
256Byte | 0~7 |
保留值:当扇区地址被赋值为“未使用(null)”时,这四个字节被赋值为4294967295(FFFFFFFF(16)))。
1.2.8 逻辑扇区长度(BS)
表示方法:使用逻辑扇区数表示数据空间长度。一个逻辑扇区的空间长度是可变的,数据的范围在32个字节和256个字节之间。
数值范围:表示数值范围从0到最大正整数值,这个最大正整数值由字段(field)的字节数决定(例如:由两个字节构成的字段能表示的数值范围是0 到 65535。0(0000(16))被赋值为”Null”.)
1.2.9 偏移量类型(Displacement Type)(D)
数值范围:表示数值范围从0到最大正整数值,这个最大值的确定由字段(field)的字节数决定。
数值单位:短字(Short word)(2 字节)
保留值:这个最大值的确定由字段(field)的字节数决定。当没有实体被指定时,这个最大值是“null”.
(实例:如果偏移量类型(Displacement Type)是由两个字节构成的字段则表示的数值范围从0到65534。值65535(FFFF(16))被设置为“null”.因此,最大可以指定131068个字节。 偏移量类型如果是由4个字节组成能则表示的数值范围从 0 到 4294967294. ) 值4294967295(FFFFFFFF(16))被指定为“null”.因此,最大可以指定8589934588个字节 )
1.2.10 扇区地址偏移量(Displacement Sector Address Type)(DSA)
表示方法:这个类型与扇区地址类型表示方法相同。如果包含扇区地址偏移量(DSA)相关的字段(当整个数据由一个文件组成时,它位于全部数据管理(all data management)帧的起始位置),则相应的扇区地址位于该文件的起始位置。
当扇区地址被使用文件名的方法表示在一起时,一个地址与指定的文件的初始位置相关。例如,当管理文件名被设置在管理文件头记录(看第5章),管理头地址是与管理文件的初始地址位置相对应。
1.2.11 短字长度类型(SWS)
值范围:表示数值范围从0到最大正整数值,这个最大值的确定由字段(field)的字节数决定。
值单位:短字(2字节).
(例如:由两个字节组成短字长度类型能表示的数值范围从0到65535. 0(0000(16))被赋值为”Null”。因此,最大可以指定131070个字节)
1.2.12 长字长度类型(LWS)
值范围:表示数值范围从0到最大正整数值,这个最大值的确定由字段(field)的字节数决定。
值单位:长字(4字节).
当短字的数据的元素个数是奇数时,必须添加2个字节在数据的末尾,它的目的是调整数据的界限。
(例如:由两个字节组成长字类型,能表示的数值范围从0到65535. 0(0000(16))被赋值为”Null”。因此,最大可以指定262140个字节)
1.2.13 Parcel ID号类型(PID)
表示方法:Parcel ID号类型由经度和纬度组成。这个数据由2个字各自表示。
起始位是标志位:一个标志位,表示是南纬还是北纬信息
紧接着的20个位表示经度和纬度值,以秒(纬度中有度,接下来有分,再接下来有秒如10°9’19”)为单位。
接下来的3个位表示经度和纬度值,以0.125秒(1/8秒为单位)。
剩下来的8位用于扩展。
字 0
序号 | bit | 描述 | ||
1 | 15 | 南北识别Flag | bit15 | 含义 |
|
|
| 0 | 北纬 |
|
|
| 1 | 南纬 |
2 | 14~0 | 纬度/秒(SEC) |
字1
序号 | bit | 内容 |
1 | 15~11 | 纬度/秒(SEC) |
2 | 10~8 | 纬度 0.125秒(1/8秒)单位 |
3 | 7~0 | 用于扩展 |
注意:北纬表式范围从0°0’ 0”(赤道)到90°0’ 0”(北极) 。南纬表式范围从0°0’ 0”(赤道)到90°0’ 0”(南极)。
字 2
序号 | bit | 描述 | ||
1 | 15 | 东西识别标识 | bit15 | 含义 |
|
|
| 0 | 东经 |
|
|
| 1 | 西经 |
2 | 14~0 | 经度/秒(SEC) |
字 3
序号 | bit | 描述 |
1 | 15~11 | 经度/秒(SEC) |
2 | 10~8 | 经度 0.125秒(1/8秒)单位 |
3 | 7~0 | 扩展用 |
注意:东经表示的数字范围从 0°0’0”(格林威治子午线)到180°0’0”(不包括180°0’0”)。西经表式的数字范围从0°0’0”(格林威治子午线)到180°0’0”。表示极点(北极及南极)时,必须写东经0°0’ 0”
以秒为单位,可以表现大约30m单位,但为了提高精度,可以使用0.125秒为单位,这样准确度可以提高到 3.75米。
不可忽视的最后8位,用于将来扩展使用
1.2.14 制造商识别类型(MID)
名字[制造者表示类型]
序号 | 偏移量 | 数据长度 | 数据类型 | 项目名 |
1 | 0 | 8 | PID | 制造商公司位置的纬度和经度 |
2 | 8 | 1 | I | 制造商公司位置的楼层信息(楼层数是有符号的数值,它以地面作为0层) |
3 | 9 | 1 |
| (保留) |
4 | 10 | 2 | N | 识别制造商相关信息被设定的日期 (1997年1月1日看做0,此日期是设定日期相对于这一天的天数) |
如果MID信息不依赖于系统,则用FF(16)填充该信息
不管系统中其他地方使用什么测地系统来表示位置信息,这里都使用大地测量系统(ITRF)为制造商标识类型(MID)指定PID。
1.2.15 界限类型(BR)
表示方法:使用0(0000(16))表示。它为界限值调整区域。
数值范围:0
1.2.16 Meta数据类型(M)
使用metadata指定数值表示方法或数值范围。
1.3 表数据读取方法
1.3.1 数据项读法
名字[・・・](1)
序号 | 偏移量 | 数据长度 | 数据类型 | 项目名 | 备注 | 种类 |
(2) | (3) | (4) | (5) | (6) | (7) | (8) |
(1)[…]:
表示记录、表或数据帧的名字
(2) 序号:
表示分配给每一项数据的项目编号
(3) 偏移量:
表示记录、表、列表或帧的相对起始位置(使用与第一个字节数的相对偏移量表示)。然而,种类是C(可选)字段时,因为该字段是可选字段,所以此时的偏移量只能作为参考。
当偏移量的大小数目不是固定值时,它表示的是具体的值如01,02….当偏移量的大小是可选项时,它的表示方法是使用“free”.
(4) 数据长度:
表示该项数据的数据长度(使用字节数来表示).
当一项数据的数据长度不固定时,则接下来项的数据长度使用B1,B2…表示
(5) 数据类型:
表示该项数据的数据类项。当某一项包含多个字段时,他们之间用冒号(:)分隔。当一项或一个字段包含多个数据类型时,它们之间用括号和逗号分隔([,,]).
(6) 项目名字:
描述该项数据相关的名字信息。
对于所有的保留部分,对应位置的数据设置为 0,对应的种类设定为”a”.如果它是0,软件不得不需要使用掩码修改该字段,然后再恢复它。
“(KIWI扩充领域)”是为了能够确保将来格式可以扩展。在其他域指定的信息能够被用例决定这个扩充区域是安全的还是不安全的。而且,应用程序必须能够忽视扩展区域的不完整数据。
“(个别扩充领域)”是制造商指定的扩充区域。如果系统不支持个别扩展,也需要做特别的设置,这样可以忽视这些扩充区域。
字(“扩充区域”) 被用来作为KIWI扩展域和个人扩展域的通用术语而存在。
(7) 备注
相应项目中的备注信息。(这一列下边的数字指的是在表下边数字段信息)
(8) 标识
表示一个重要的数值,这个数值必须被存储,或者当这个重要值不需要被存储是把这个值删掉
a: 一个重要的值必须总是被存储。(该域的值必须被分配)
b: 一个(非必要值(null))可以在某些情况下被存储。(这个域的值必须被分配)
c: 如果这个值不是必须的值,必须删除。(对于某些管理帧,即使所有帧类型是’c’,至少一个帧必须存在以确保与管理帧联系。)
1.3.2 域数据项读法
(n)・・・(1)
序号 | bit | 描述 | ||
(2) | (3) | (4) | bitm | 含义 |
|
|
| (5) | (6) |
(1)(n)…:
标识记录或其它项的名字,(n)代表注释号。
(2) 序号:
标识每个域的项目编号。
(3) bit
表示位域的范围。
(4) 描述:
表示域的名字。
(5) bitm:
表示给位数据分配的数值。
(6) 含义:
表示赋给不同位数值对应的含义。
1.4 数据格式扩充方法
这部分内容描述的是KIWI数据的升级方法,与各个厂商对应的版本同步升级方法以及在某个成果物中针对多个制造商的程序如何处理各个版本。
1.4.1 KIWI数据升级规则
(1) 初始版本的“保留”区域用于升级
(2) 为了升级信息,可能会影响其他域或描述的结构,这个规则适用于单个信息的升级,升级后,对于每个制造商的程序都适用。
1.4.2 个别版本升级规则
(1) 当每个制造商使用扩展数据,它要求定义一定量的数据区域。
(2) 对于个别版本升级,不是用保留(RESERVED)部分、而是使用追加字段的方法。
(3)对于使用了无效值(固定字段)或者长度值是0(可变字段),这些字段在新版本中将不再使用。这些字段在新版本中不可以重新使用。
1.4.3 如何定义扩展内容
1.4.3.1个别厂家的识别
由制造商使用metadata格式定义用于表示制造商,定义制造商识别码,为了识别1个Medium内存在的(或有可能存在的)个别扩展厂家、对每个个别厂家定义管理者识别码。MATA定义包括以下的内容
制造商识别码表{
制造商识别码数
for(i=0;i<=制造商识别码数;){
index号; … 从0号开始按顺序编号
管理者识别号{
系统限定识别的MID;
数据制作者识别的MID; … 如果不需要,这个字段指定为0
开始时间; … 制造商的管理履历
}
}
}
1.4.3.2 扩展所有数据
名字[全部扩展数据](管理者识别码数为1时)
序号 | 偏移量 | 数据长度 | 数据类型 | 项目名 | 备注 | 种类 |
1 | O | B1 |
| 扩展数据 |
| a |
名字[全部扩展数据](管理者识别代码数为2或者2以上时)
序号 | 偏移量 | 数据长度 | 数据类型 | 项目名 | 备注 | 种类 |
1 | O | B1 |
| 扩展数据帧排列 |
| a |
1.4.3.3 扩展数据帧
名字[扩展数据帧]
序号 | 偏移量 | 数据长度 | 数据形式 | 项目名 | 备注 | 种类 |
1 | 0 | 2 | B:B:N:N | 扩展头信息 |
| a |
2 | O1 | 2 | N | 附加扩展数据的制造商识别码 |
| c |
3 | O2 | 2 | SWS | 附加扩展数据长度(Size) |
| c |
4 | O3 | B1 |
| 扩展数据 |
| c |
1.4.3.4 扩展头信息
序号 | bit | 描述 | ||
1 | 15 | 制造商识别域类别 | bit15 | 含义 |
|
|
| 0 | 制造商识别码 |
|
|
| 1 | 为制造商识别码服务的附加表 |
2 | 14 | 扩展域数据长度类型 | bit14 | 含义 |
|
|
| 0 | 扩展的数据长度(Size) |
|
|
| 1 | 为制造商识别码服务的附加表长度(Size) |
3 | 13~10 | 制造商识别域(1) | ||
4 | 9~0 | 扩展域数据域长度(2) |
(1)制造商识别域
当制造商识别域类别是“制造商识别码”时,在制造商识别码的附加表中指定索引号。允许设定的数值范围是 0 ~15。
当制造商识别域是“为制造商识别码服务的附加表”时,这个字段是无效的。
(2) 扩展域数据长度类型
当扩展域数据长度类型为“扩展数据长度”时,在“扩展域数据域长度”设置空间大小。
数据长度 = ([扩展域数据域长度] + 1) ×2。表示范围2~128
当扩展域数据长度类型为“为制造商识别码服务的附加表长度”,这个字段是无效的。
1.4.3.5 附加扩展数据的制造商识别码
名字[附加扩展数据的制造商识别码]
序号 | 偏移量 | 数据长度 | 数据类型 | 项目名 | 备注 | 种类 |
1 | 0 | 2 | N | 制造商识别码 |
| a |
(1) 制造商识别码域为「为制造商识别码服务的附加表」时该项有效、在附加表中为制造商识别码指定索引号。允许的数值范围0~65535。
1.4.3.6 附加扩展数据长度
名字[附加扩展数据长度]
序号 | 偏移量 | 数据长度 | 数据类型 | 项目名 | 备注 | 种类 |
1 | 0 | 2 | SWS | 扩展数据长度 |
| a |
(1) 当扩展数据域长度类型为[为制造商识别码服务的附加表长度]时有效、表示扩展数据帧的扩展部分的数据长度。允许的数值范围是0~65535。
扩展数据帧的长度为([扩展数据长度]+1)×2。表示范围:2~131070。
1.4.3.7 扩展数据
扩展数据是根据制造商识别码所表示的制造商的独自式样设定数据的实体。
1.4.3.8 扩展的具体实例
for(制造商识别码数){
Header信息{
制造商识别码(MID定义Table的索引) … KIWI定义
扩展部分的长度(2字节单位) … KIWI定义
}
扩展部分实体{ … 各制造商的定义
for(Node数){ … 与主体的NodeRecord
排列相同
扩展节点属性
扩展Link属性
附加节点信息有无标志
到扩展节点附加信息的偏移量 … 从扩展部分第一个位
置的偏移量
}
附件的节点信息{
for(存在附加信息的节点数){
附加信息的排列 … 如果需要时设定
}
}
}
}