1、中华人民共和国国家标准信息处理系统开放系统互连抽象语法记法一基本编码规则规范发布实施国家技术监督局发布中华人民共和国国家标准信息处理系统开放系统互连抽象语法记法一基本编码规则规范国家技术监督局批准实施本标准等同采用国际标准信息处理系统开放系统互连抽象语法记法一基本编码规则规范引言抽象语法记法一规范规定了定义抽象语法的记法使应用层标准能使用该记法来定义需要用表示服务传送的信息的类型它还规定了已定义类型值规范的记法本标准定义一组编码规则它可适用于中规定的记法定义类型的值应用这些编码规则产生这些值的传送语法这里描述的编码规则规范同时适用于译码处理记法定义的类型值用的编码规则可以有多种集合本标准定义的
2、一组编码规则称为基本编码规则本标准与建议的相应部分在技术上是相容的附录参考件给出一些应用编码规则例子附录参考件总结了在本标准中所作的客体标识符值的赋值附录参考件给出了对实数编码应用规则的例子主题内容与适用范围本标准规定了一组基本编码规则用来产生由记法定义的类型的值的传送语法基本编码规则也用于对传送语法解码以识别被传送数据值基本编码规则在通信期间使用在请求表示上下文时由表示服务提供者使用引用标准信息处理七位和八位编码字符集代码扩充技术信息处理系统开放系统互连基本参考模型数据处理转义序列的登记规程信息处理系统开放系统互连面向连接的表示协议规范信息处理系统开放系统互连抽象语法记法一规范信息处理信息交
3、换用字符串中数字值的表示法抽象语法记法的基本编码规则规范定义本标准使用中的定义以及下列定义动态一致性对实现要求的陈述这个实现依据本标准确定的通信实例的行为静态一致性有效实现本标准定义的某些特性时应满足的要求的陈述数据值某个类型的值说明的信息类型和值用定义数据值编码用来表示数据值的八位位组的完整序列注某些建议对这个八位位组序列使用称为数据元素的术语但因为其他标准用它指数据值本标准不用此术语标识符八位位组数据值编码的一部分用来标识值的类型长度八位位组数据值编码中标识符八位位组后的一部分用来确定编码的结束内容结束八位位组数据值编码尾部的一部分用来确定编码的结束注不是所有的编码都要求有内容结束八位位组
4、内容八位位组数据值编码中的一部分表示与同类型中其他值相区别的特定值简单编码一个数据值编码其内容八位位组直接表示这个数据值构造编码一个数据值编码其内容八位位组是一个或多个其他数据值的完整编码发送者实现传送数据值编码的一方接收者为了识别编码的数据值实现将发送者产生的八位位组解码的一方缩略词和记法缩略词抽象语法记法一记法本标准引用定义的记法本标准规定了编码中每个八位位组的值使用术语最高有效位和最低有效位注低层标准中使用同一记法来定义串行线中位传输的次序或并行通道中数据位的分配在本标准内八位位组中的二进制位编号从到第位为最高有效位第位为最低有效位一致性动态一致性在第章至第章中规定静态一致性由应用基本编
5、码规则的标准规定允许发送者按本标准选择替换编码一致性的接受者应支持所有的替换形式注这种替换编码的例子在和表中编码的一般规则编码结构数据值编码应由下列次序的四种成分组成标识符八位位组见长度八位位组见内容八位位组见内容结束八位位组见除非长度八位位组的值需要内容结束八位位组不应出现见图说明编码的结构简单的或构造的图说明替换结构的编码图编码的结构图替换结构的编码标识符八位位组标识符八位位组应对数据值所属类型的标识类和号编码对于标记是从到包括和范围内的数标识符八位组由如下的单个八位位组编码构成编码的第位和第位表示标记所属类如表中的规定第位是或按条规则定为第位至第位作为二进制整数是标记号的编码第位是最高有
6、效位表标记类的编码类第位第位通用应用上下文规定专用其标记号在到包括和范围内的类型的标识符八位位组的形式由图说明对编号大于或等于的标记标识符八位位组的构成是一个前导八位位组及后随的一个或多个后继八位位组前导八位位组按如下方式编码编码的第位和第位是表示如表列出的标记类第位是或按规定为第位至第位的编码是图标识符八位位组小标记号后继八位位组是按如下规则得到的标记号编码除了最末标识符八位位组外每个八位位组的第位置为第个后继八位位组的第位至第位后随第个后继八位位组的第位至第位依次后随每个更后面的八位位组的第位至第位直到并包括标识符八位位组中的最后一个后继八位位组应是等于标记号的无符号二进制整数的编码以第个
7、后继八位位组的第位作为最高有效位第个后继八位位组不能每位都为数字其标记号大于的类型的标识符八位位组的形式由图说明图标识符八位位组大标记序号若编码是简单的则第位置若编码是构造的则第位置注对每个类型由以后各条规定其编码是简单的或是构造的规定用关键字定义的类型的标记取得选择的数据值所属的类型标记的值规定用定义的类型的标记是不确定的类型根据具体使用确定为某种类型然后其值的完整编码等于所赋类型的值的编码包括标识符八位位组长度八位位组规定两种长度八位位组形式它们是确定形式见非确定形式见发送者应该若编码是简单的则用确定形式见若编码是构造的且都是立即可用的则用确定形式见或非确定形式见由发送者选择若是构造编码且
8、不都是立即可用的则用非确定形式见对于确定形式长度八位位组由一个或多个八位位组组成并由发送者选择使用短形式见或长形式见表示内容八位位组中的八位位组数注当内容八位组中的八位位组数小于或等于时仅使用短形式在短形式中长度八位位组由单个八位位组组成其中第位为第至第位是内容八位位组中八位位组数的编码可能是整体是个无符号二进制整数以第位为最高有效位例的编码为在长形式中长度八位位组由一个初始八位位组和一个或多个后继八位位组组成初始八位位组如下编码第位为第位至第位作为无符号二进制整数是长度八位位组中后继八位位组数的编码以第位为最高有效位不使用值注引入这个限制是为了将来的可能扩展第个后继八位位组的第位至第位后随第
9、个后继八位位组的第位至第位依次后随更后面八位位组的第位至第位直至并包含最末后继八位位组是等于内容八位位组中八位位组数的无符号二进制整数的编码以第个后继八位位组的第位为最高有效位例编码为注在长形式中是否用比最少必需数更多的长度八位组由发送者选择对非确定形式长度八位位组指示内容八位位组至内容结束八位位组结束见并由单个八位位组组成单个八位位组置第位为第位至第位置为若使用该长度形式则在内容八位位组之后应出现内容结束八位位组见内容八位位组内容八位位组由零个或更多的八位位组组成并按下列各条的规定对数据值编码注内容八位位组依赖于数据值的类型以后各条遵从中一样的类型定义序列内容结束八位位组若长度按的规定编码则
10、出现内容结束八位位组否则不出现内容结束八位位组由两个零八位位组组成注内容结束八位位组可被认为是值的编码其标记是通用类其形式是简单的标记号是零内容缺省因此内容结束八位位组长度内容缺省布尔值的编码布尔值的编码应是简单的内容八位位组由单个八位位组组成若布尔值是则八位位组是零若布尔值是八位位组是任意非零值由发送者选择例若是布尔类型值被编码为布尔长度内容整数值的编码整数值的编码应是简单的内容八位位组由一个或多个八位位组组成若整数值编码的内容八位位组由多于一个八位位组组成则第个八位位组的位和第个八位位组的第位不应全为不应全为注这些规则确保整数值总是按最少八位位组数编码内容八位位组是等于整数值的二值补码的二
11、进制数组成是由第个八位位组的第至第位后随第个八位位组的第位至第位后随依次的八位位组的第位至第位直到包含内容八位位组的最后八位位组注二值补码的二进制的值的推导过程对内容八位位组中的每位求值从最后八位位组的第位开始作为第位到第个八位位组的第位结束每位所指定数值为这里是该位在求值序列中的位置二值补码的二进制的数值是累加那些置为的每个位的数值除去第个八位位组的第位然后用第个八位位组第位为对应的数值减去这个值所得的结果枚举值的编码枚举值的编码是与之相关的整数值编码注它是简单的实数值的编码实数值的编码应是简单的如果实数值是值在编码中应没有内容八位位组如果实数值是非那么编码使用的基数应是它由发送者选择如果是
12、或应使用中规定的二进制编码如果是应使用中规定的字符编码注发送者和接收者进行的存储生成或处理形式以及在值记法中使用的形式都与传送使用的基数无关第一个内容八位位组的位应按如下设置如果位那么使用中规定的二进制编码如果位且位那么使用规定的十进制编码如果位且位那么按规定的那样编码一个特定实数值见当使用二进制编码时位那么如果尾数是非它应由一个符号一个非负整数值以及一个二进制比例因子来表示如或注提供这种选择的自由能使得通过去掉将尾数隐含的十进制小数点与八位位组边界对齐的要求见附录而更容易生成传送格式的存在并不会显著地使接收者任务变复杂如果是第一个内容八位位组的位应是否则为第一个八位位组的位到位应按如下对基数
13、的值进行编码位到位基数基数为基数为基数为为本标准将来版本保留第一个八位位组的位到位应把二进制比例因子的值编码成无符号二进制整数第一个内容八位位组的位到位应按如下编码指数格式如果位到位是那么第二个内容八位位组将指数的值编码成的补码二进制数如果位到位是那么第二个和第三个内容八位位组将指数的值编码成的补码二进制数如果位到位是那么第二第三和第四个内容八位位组将指数的值编码成的补码二进制数如果位到位是那么第二个内容八位位组编码用于编码指数的值的八位位组的数假定为为无符号二进制数目并且三个直到最大为第加个包括二者内容八位位组将指数的值编码成的补码二进制数的值应至少为传送指数的最前位应不全为或不全为剩余的内
14、容八位位组将整数值见的值编码成无符号二进制数注本编码不规定一个常规化的表示对每个值除外有许多可能的表示该变量是发送者的选项并能用作精确性的广泛指示实数数字的这种表示与通常用在浮点硬件中的格式有很大的不同但实数数字的表示已设计成能轻易地与这种格式转换来回地被转换见附录当使用十进制编码时位到位按中使用的项跟在第一个内容八位位组后的所有内容八位位形成一个由发送者选择长度的字段并且按照予以编码对数字表示的选择由第一个内容八位位组的位到位规定如下位到位数字表示形式形式形式位到位中剩余的值为本标准而保留这儿应不使用伴随文件规定的比例因子见注在中关于至少使用一个数字用到十进制标记的左边的建议在本标准中也建议
15、这么做但并不是强制的使用常规化形式见是发送者的选项这并不重要当特别实数值被编码位到位时应只有一个内容八位位组有如下值值是值是位到位等于和的所有其他值分别为本标准的补篇所保留位串值的编码位串值的编码或者是简单的或者是构造的由发送者选择注在整个位串成为有效值之前必须传送部分位串时使用构造编码简单编码的内容八位位组包含一个初始八位位组后随零个一个或多个后继八位位组从第位开始并以跟踪位结尾的位串的所有位置于第个后继八位位组的到位后随第个后继八位位组的到位依次后随每个八位位组的到位再后随第位开始的最后后继八位位组需要的一些位注第位和跟踪位的记法由规定作为以第位为最低有效位的无符号二进制整数初始八位位组的
16、编码是最后后继八位位组中未使用的位数该数在和之间若位串为空则没有后继八位位组且初始八位位组为零构造编码的内容八位位组由零个一个或多个数据值的完整编码组成注每个这样的编码包括标识符长度和内容八位位组若它是构造的则还可能包括内容结束八位位组内容八位位组中编码的每个数据值应是类型的值注实际上内容八位位组的标记总是普通类编号为被编码的位串值中的位以第位开始并以跟踪位结束置于内容八位字节编码中的第个数据值的第位至跟踪位后随内容八位位组编码中的第个数据值的第一位至跟踪位依次后随各个数据值的第位至跟踪位最后后随内容八位位组中的最后数据值的第位至跟踪位内容八位位组编码中的每个数据值除了最后一个其位数都是八的整
17、数倍注内容八位位组编码中的数据值可以是零长度的位串使用构造编码时内容八位位组编码中的各个数据值之间的界限是不重要的内容八位位组编码中的每个数据值的编码可以是简单的或构造的注它通常是简单的例位串类型的值的编码如下在此例中位串表示是简单编码位串长度内容上面列出的值也可以如下编码此时位串表示是构造编码位串长度内容位串长度内容内容结束长度八位位组串值的编码由发送者选择八位位组串值的编码或者是简单的或是构造的注在完整的八位位组串有效之前若要传送部分八位位组使用构造编码简单编码包含零个一个或多个值等于数据值中八位位组的内容八位位组按照数据值中八位位组出现的次序并使一个数据值八位位组的最高有效位与内容八位位
18、组的一个八位位组的最高有效位组对齐构造编码的内容八位位组由零个一个或多个数据值构成的完整编码组成注每个这样的编码包括标识符长度和内容八位位组且若是构造的话还包括内容结束八位位组内容八位位组中的每个数据值编码是一个八位位组串类型值的编码注实际上内容八位位组中的标记总是普通类编号为八位位组串值中被编码的八位位组以第八位位组开头并以跟踪八位位组结尾置于内容八位位组编码中的第个数据值的第至跟踪八位位组后随内容八位位组编码中的第个数据值的第至跟踪八位位组依次后随每个数据值的第至跟踪八位位组后随内容八位位组编码中的最后数据值的第至跟踪八位位组注内容八位位组编码中的数据值可以是零长度的八位位组串当使用构造编
19、码时内容八位位组编码中的数据值之间的界限是不重要的内容八位位组编码中的每个数据值编码可以是简单的或构造的注它通常是简单的空值的编码空值的编码是简单编码内容八位位组不包含任何八位位组注长度八位位组为零例若是空类型空值可以编码为空值长度序列值的编码序列值的编码是构造编码内容八位位组由序列类型定义中列出的每个类型的一个数据值的完整编码组成除非该类型带有关键字或否则这些编码按定义中的次序出现带有关键字或的类型其数据值的编码可以不出现若有则它应按定义的类型的编码中相应点上出现例若是序列类型值可以编码为序列长度内容串长度内容布尔长度内容单纯序列值的编码单纯序列值的编码是构造编码内容八位位组由零个一个或多个
20、列在定义类型的数据值的完整编码组成数据值编码的次序与被编码的单纯序列值中数据值的次序相同集合值的编码集合值的编码是构造编码内容八位位组由集合类型的定义中列出的每个类型的一个数据值的完整编码组成除非某类型带有关键字或否则这些编码按发送者选定的次序出现带有关键字或的类型其数据值编码可以不出现注集合值中的数据值的次序不重要对传送时的次序没有限制单纯集合值的编码单纯集合值的编码是构造编码同编码及以后编码时不必保持数据值的次序值选择值的编码值选择值的编码应与被选定类型值的编码相同注依照选定类型而定编码可以是简单的或构造的用于标识符八位位组的标记如定义中的值选定类型所规定是被选定类型的标记类型选择值的编码
21、类型选择值的编码应与被选择类型的值的编码相同注依照被选择的类型编码可以是简单的或构造的有标记值的编码有标记值的编码由和中规定的有标记类型记法中所出现类型的对应数据值的完整编码称为基编码导出若类型定义中未使用关键字编码应是构造的且内容八位位组是完整的基编码若类型定义中使用了关键字则若基编码是构造的则编码是构造的否则是简单的内容八位位组应与基编码的内容八位位组相同例由类型定义类型可视串类型类型类型类型类型类型类型类型值编码如下对类型可视串长度内容对类型长度内容对类型长度内容长度内容对类型长度内容长度内容对类型长度内容任意类型值的编码任意类型的编码是本标准中规定的任意类型的值的完整编码客体标识符值的
22、编码客体标识符值的编码是简单的内容八位位组是互相联结的子标识符见和编码的有序表每个子标识符表示一系列一个或多个八位位组每个八位位组的第位指示它是否为该系列中的最后一个最后八位位组的第位为零其他八位位组的第位为序列中八位位组的位组合起来作子标识符的编码概念上这些位组联结起来形成一个无正负号的二进制数它的最高有效位是第个八位位组的第位最低有效位是最后的八位位组的第位子标识符按可能最少的八位位组编码前导八位位组不应有值十六进制子标识符数应比被编码的客体标识符值中客体标识符的成分的数目少第个子标识符的数值从被编码的客体标识符值中的头两个客体标识符成分的值导出使用公式其中是第个客体标识符成分的值是第个客
23、体标识符成分的值注这种头两个客体标识符成分的组合认可的只有三个值由根节点分配且由和达到的节点最多分配个后继值第个子标识符的数值是第个客体标识符成分的数值例子客体标识符值联合它与下式相同其第个子标识符为第个子标识符为编码结果为长度内容字符串类型值的编码数据值由类型定义中规定的字符集得到的字符串组成每个数据值独立于同一类型的其他数据值而编码每个字符串类型按如下说明方式编码此处是指派给中的字符串类型的通用类标记号八位位组串的值在和中规定在中若直接引用一个列举表数值串和可打印串规定字符串类型则八位位组串的值将是中规定的带有相同字符串值的可见类型的值八位位组串包含在中为位环境的编码规定的八位位组使用按照
24、登记的转义序列和字符编码除非在中用来定义字符串类型的登记号之一中有规定否则不使用转义序列在每串的开头某些登记号应被设定为和或秒或且被调用使用的术语表对每个类型加以规定以及设定它们隐含的转义序列某些字符集串类型的编码中不包含显式转义序列在所有别的情况下允许的任何转义序列可以在任何时候出现包括在编码的开头表列出允许有其显式转义序列的类型不使用宣布序列除非用户有明确允许注类型的选择还提供了一个受限的宣布序列功能性的形式特定应用协议可以在其他协议元素中带有宣布序列或者详细地规定用宣布序列的使用方式例子这个例子的类型定义为名字可视串其值为可被编码简单形式为可视串长度内容或构造形式确定长度为可视串长度内容
25、八位位组串长度内容八位字节串长度内容或构造形式确定长度为可视串长度内容八位字节串长度内容八位字节串长度内容内容结束长度以上例子示出了三种更多可能的有效形式由发送者选择要求接收者处理所有允许的形式见有用类型值的编码这些类型的定义在中提供编码通过对那些类型定义使用该标准中说明的规则而得到在传送语法定义中的使用在需要对单个类型的所有值规定一个无二义的不可分和自定界的八位位组串表示时本标准中说明的编码规则可被引用或应用注所有这样的八位位组串在单个类型的范围内是无二义的若不同的类型混合编码则不必是无二义的客体标识符和客体描述符值联合基本编码和单个类型的基本编码被指定来标识和描述本标准中的编码规则若一个应
26、用标准将一个抽象语法定义为一组表示数据值每一个是某个特别命名的类型的值通常但不必要是一个值选择类型则中描述的客体标识符值要与抽象语法名一起使用将本标准中说明的编码规则的应用归结到用于定义抽象语法的特别命令的类型从而规定传送语法注特别的编码规则的标识可以出现在表示协议的传送语法名域中如果没有满足的定义抽象语法的条件中规定的名字不能和抽象语法名一起使用以标识传送语法表转义序列的使用类型设定登记号设定和登记号设定转义序列和锁定移动在可采用处是否允许转义序列数值串无否可打印串无否智能用户电报串是可视图文串是可视串或无否串否图形串无是一般串是注有许多通常使用的字符如到出现在具有各自登记号和转义序列的许多
27、字符表中当类型允许转义序列时对一个特殊的字符串有多种编码是可能的见附录编码的例子参考件本附录通过提出一个用定义的人事记录的八位位组表示来说明本标准中的基本编码规则记录结构的描述假想的人事记录的结构在下面用中为了定义类型而说明的来作形式描述人事记录姓名标题可视串数雇佣号受雇日期日期子女子女信息子女信息姓名生日日期姓名名可视串起首字母可视串姓可视串雇佣号日期可视串记录值的描述的个人记录的值用形式描述如下名起首字母姓标题领导号码受雇日期配偶名名起首字母姓孩子名起首字母姓生日名起首字母姓生日该记录值的表示上面所给的记录值用八位位组的表示如下使用了本标准中定义的基本编码规则标识符长度和整数的内容八位位组
28、的值用十六进制表示每个八位位组是二个十六进制数字符串内容的值的表示为正文每个八位位组一个字符人事记录长度内容姓名长度内容可视串长度内容可视串长度内容可视串长度内容标题长度内容可视串长度内容领导雇员号长度内容受雇日期长度内容日期长度内容配偶名长度内容姓名长度内容可视串长度内容可视串长度内容可视串长度内容长度内容集合长度内容姓名长度内容可视串长度内容可视串长度内容可视串长度内容生日长度内容日期长度内容集合长度内容姓名长度内容可视串长度内容可视串长度内容可视串长度内容生日长度内容日期长度内容附录客体标识符值的赋值参考件下列值在本标准中指定条目客体标识符值客体描述符值联合基本编码单一类型的编码附录实数
29、值编码的示例参考件发送者通常检查他自己的硬件浮点表示以便确定用来传送在该浮点表示和实数值编码的长度八位位组及内容八位位组之间的值的依赖于值的算法本附录说明了通过使用图所示的尾数的人工硬件浮点表示在这样的过程中能够采取的步骤假设该指数作为一个整数值它能容易地从浮点硬件得到图浮点表示需要为了发送使用二进制编码的非值如本标准内容中所规定而产生的内容八位位组是的八位位组的八位位组其中尾数符号依赖于被转换的值是固定的值假定为它表示基数在本例中让我们假定基数为是如中所描述的那样计算出的值是如所描述的那样计算出的指数值的固定长度本附录不处理需要超过个八位位组的情况在强置第八位位组的位到位和第八位位组的位到位
30、为之后该算法将发送作为值的硬件表示的八位位组到假设隐含的十进制小数点被定位在传递值的硬件表示中的八位位组的位和位中间发送之前通过减去值其隐含位置能移位到八位位组之后的最近的点上在我们的例子系统中我们对每个指数的减量能移位因为我们假定基数为所以的减量将隐含定位的小数点在八位位组的位和位中间这样值是乘以可正确地定位中的小数点所传送八位位组的中隐含的位置是在八位位组的位之后这样我们得到关键的参数所以是指数减量指数所需要的长度现在通过求出所表示下列值需要的八位位组最大数而计算出来超过量指数减量超过量指数减量其中和是指数表示法的最小和最大整数值超过量是为了产生真实指数而需要减去的任何值指数减量是如所计算
31、出的让我们假设它给出个八位位组的长度那么是我们也假设超过量为现在发送算法是对于类型实数发送带有标记的基本编码规则标识符八位位组字段测试如果测试完成发送带有值为的基本编码规则长度字段无内容八位位组并结束该算法测试并记忆尾数符号并且如果为负尾数取反传送带有值为的基本编码规则长度字段那么如果为负则如果为正则乘上并且发送了个八位位组指数具有值为将八位位组的位至位和八位位组的位到位置然后发送个八位位组尾数接收算法必须准备处理任何基本编码但这儿可以直接使用浮点单元我们按如下内容进行检验内容中的八位位组如果它是我们得到的传输与我们的算法相一致并且能简单地接发送算法逆向进行否则对字符编码调用标准字符十进制生浮点的转换软件并根据应用语义可能设置硬件浮点能处理的最大和最小数来处理特殊实数值对二进制传输将放入浮点单元如有必要丢弃最低有效位结束处的八位位组乘以和如有必要取反实现者可以发现在特定事例中可能的优化技术但也可以发现除了与兼容机的发送相关的优化技术外对它们进行测试得不偿失上述算法只是示例当然实施者将确定他们自己最好的策略附加说明本标准由中华人民共和国电子工业部提出本标准由电子工业部标准化研究所归口本标准由中国科学院软件研究所负责起草本标准的主要起草人曾炼佟军张长喜萧燕林