RFC 3072

发表于 5年以前  | 总阅读数:2009 次
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:王安鹏(anpengwang    anpengwang@263.net)
译文发布时间:2001-12-19
版权:本翻译文档可以用于非商业用途自由转载,但必须保留本文档的翻译及组织信息。

Network Working Group                                       M. Wildgrube
Request for Comments: 3072                                    March 2001
Category: Informational

结构化数据交换格式
(RFC3072――Structured Data Exchange Format (SDXF))

本备忘录的状态
本备忘录为Internet社区提供信息,没有定义任何类型的标准。被备忘录的发布没有限
制。
版权信息
  Copyright (C) The Internet Society (2001).  All Rights Reserved.

IESG说明
本文档规定了一种数据交换格式,和用于创建于解析这种格式的部分API。IESG认为
IETF通常使用的ASN.1和XML格式也可解决同样的问题。强烈建议本文读者在放弃ASN.1
或XML改用SDXF之前认真阅读第13部分。另外,如果以SDXF格式保存文本,建议用
户按照第2.5节的要求采用UTF-8的数据类型。

摘要
本规范描述的通用交换格式既可用于文件格式,也可用于网络。数据被组织成数据块,
数据块按照层次结构排列。本格式是自描述的,与硬件无关。

目录
1. 简介	2
2. SDFX数据格式规范	3
2.1 数据块	3
2.2 结构化块	3
2.3 块元素内部表示的几点要求:	4
2.4 内容部分的字符值同样也是经过改写的对象,参见第4章。	4
2.5 标志位的含义:	4
2.6 短块	5
2.7 压缩块和加密块	5
2.8 数组	5
2.9 UTF-8的处理	5
2.10 某些位不能同时出现:	5
3. SDFX函数介绍	5
3.1 一般事项	5
3.2 写入一个SDXF缓冲区	6
3.3 从SDXF缓冲区中读出,可以使用下列函数:	6
3.4 例子:	6
4. 平台独立性	8
5. 压缩	8
6. 加密	9
7. 数组	9
8. SDXF函数描述	10
8.1 简介	10
8.2 基本定义	10
8.3 C++定义	12
8.4 公共定义:	13
8.5 专用函数	14
9. 对UTF-8的支持	15
10. 安全问题	16
11. 几点提示	16
12. 关于IANA	16
12.1 压缩方法	17
12.2 加密方法	17
12.3 关于方法编号的分配	17
13. 讨论	17
13.1 SDXF与ASN.1	17
13.2 SDXF 与XML	18
14. 作者地址	19
15. 鸣谢	19
16. 参考	19
17.  版权声明	20

1. 简介
结构化数据交换格式(Structured Data eXchange Format)的目的是实现各种不同类型数
据(数字、文本、位串)组成的任意结构化数据块的交换。由于数据被规格化为一种独立于
“网络格式”的抽象计算机体系结构,因此SDXF可作为网络交换数据格式使用。
本数据格式可用于任何应用程序,在设计本格式时,目的就是使它既可以作为文字处理
程序的文本格式,也可以作为图象、声音文件格式,还可以是带有复杂参数的远程过程调用,
同样也适用于文档格式和商业数据交换等等。
SDXF是自描述的,任何程序无需了解每个数据元素的含义就可以解析出任何SDXF数
据。
在描述数据格式的同时,本文还将介绍一些函数,通过这些函数可以创建和访问SDXF
格式的数据。这样做是希望让程序员不需要处理底层的数据结构,只要简单地使用这些函数
就可以了。(用面向对象编程的术语来讲,这些函数就是作为给定SDXF数据块句柄的某个
对象的方法。)
SDFX没有规定特定的平台,由于SDFX函数的精心设计,SDFX数据可以跨越不同的
体系结构进行交换(具体就字符编码而言,如ASCII、ANSI、EBCDIC以及二进制数据的
字节流)。也可以对SDXF数据整块或部分进行压缩或加密。

2. SDFX数据格式规范
2.1 数据块
首先介绍数据块的概念,块是由一组固定成分组成的数据结构,块可以是“原子性”的
也可以是“结构性”的,结构块内部还可以包含其它的块。
块由头部和数据体(内容)组成:
名称
位置
长度
说明
块ID
1
2
数据块的ID号,无符号整数
Flags
3
1
块的类型和属性
长度length
4
3
后续数据的长度
内容content
7
*
纯数据或块列表
内容的长度由头部字段length指定,整个块的长度为length+6。块ID号是一个正整数。
其存储的格式如下:
   +----+----+----+----+----+----+----+----+----+-...
   | chunkID | fl | length       |  content
   +----+----+----+----+----+----+----+----+----+-...
用ASN.1语法描述如下:

   chunk  ::=  SEQUENCE
   {
     chunkID INTEGER (1..65535),
     flags   BIT STRING,
     length  OCTET STRING SIZE 3, -- or: INTEGER (0..16777215)
     content OCTET STRING
   }

2.2 结构化块
结构化块由标志字节指明(参见2.5节)。与原子块不同的是,结构化块的内容部分包
含一个块列表(可以是原子块或者结构块)。
   +----+-+---+-------+-------+-------+-----+-------+
   | id |f|len| chunk | chunk | chunk | ... | chunk |
   +----+-+---+-------+-------+-------+-----+-------+
根据这个概念,可以在SDXF块内构造任何层次化的结构数据。

2.3 块元素内部表示的几点要求:
类似于IP头部的二进制值,块中的二进制数据也采用高位在前的顺序(big endian)。
比方说某个块的内容长为300(=256+32+12),其存储格式用十六进制表示为:
   +----+----+----+----+----+----+----+----+----+--
   |         |    | 00   01   2C |  content
   +----+----+----+----+----+----+----+----+----+--
这一规定同样适用于块ID。

2.4 内容部分的字符值同样也是经过改写的对象,参见第4章。
2.5 标志位的含义:
     +-+-+-+-+-+-+-+-+
     |0|1|2|3|4|5|6|7|
     +-+-+-+-+-+-+-+-+
      | | | | | | | |
      | | | | | | | +-- 保留
      | | | | | | +---- 数组
      | | | | | +------ 短块
      | | | | +-------- 加密块
      | | | +---------- 压缩块
      | | |
      +-+-+------------ 数据类型(0..7)
数据类型为:
   0