12 ASN.1词项
12.1 基本规则
12.1.1以下章节定义了词项使用的字符集。每个词项名称是由构成词项的字符集组成的。
12.1.2词项的定义在本章中进行定义。除了多行注释,bstring,hstring,cstring,其他词项不应该包含空白字符。(详见:12.6,12.10, 12.12和12.14)
12.1.3每行的长度不限制。
12.1.4多个词项之间可以通过一个或多个空白字符(详见12.1.6)或除了使用非空指示符“&”外的注释(详见12.6)区分。在XMLTypedValue表达式中(详见16.2),空白字符可以出现在词项之间,但是禁止使用comment词项。
注:这样可以避免在xmlcstring词项中出现临近的连字符或星号和斜杠。在XMLTypedValue中,这些字符不会被用来标识comment词项。
12.1.5如果后续词项是之前词项的许可字符,那么两个词项之间应该通过空白字符或注释区分。
12.1.6本规范使用词汇换行和空格。在机器可识别规范中空格和换行的描述由以下字符组合而成(以下每个字符使用Unicode标准)。
空白字符:
HORIZONTALTABULASTION(9)
LINEFEED(10)
VERTICALTABULASTION(11)
FORMFEED(12)
CARRIAGERETURN(13)
SPACE(32)
换行:
LINEFEED(10)
VERTICALTABULASTION(11)
FORMFEED(12)
CARRIAGERETURN(13)
注-所有的换行字符同样是有效的空白字符。
12.2 类型名称
词项名称-typereference
12.2.1typereference应由任意多个字母,数字和连字符组成,首字符大写。连字符不能是最后一个字符。连字符之后不能再跟一个连字符。
注-有关连字符的规则是为了避免与注释歧义。
12.2.2typereference不应该使用12.38列出的保留字符集。
12.3 标识符
词项名称-identifier
identifier应由任意多个字母,数字和连字符组成。首字符大写。连字符不应该是最后一个字符。连字符不应该紧跟另一个连字符。
注-有关连字符的规则是为了避免与注释歧义。
12.4 值名称
词项名称-valuereference
valuereference应该由12.3定义identifier的字符序列组成。在分析使用该标识的实例时,valuereference和identifier是通过它出现的上下文语境来区分。
12.5 模块引用
词项名称-modulereference
modulereference应该由12.2定义的一系列typereference组成。在分析使用该标识的实例时,上下文中modulereference和typereference的区别是他们出现的地方。
12.6 注解
词项名称-comment
12.6.1 comment不在ASN.1标识中引用。它可以在任何词项之间出现,并没有任何意义。
注-虽然如此,在使用ASN.1的标准语境中,一个ASN.1comment或许包含与应用环境相关的标准文本,或语法约束。
12.6.2 comment有两类格式:
a)在12.6.3中定义的单行注释,起始符“--”
b)在12.6.4中定义的多行注释,起始符“/*”
12.6.3任何时候,当comment由双连字符开始,它应该结束与下一个双连字符或者本行的末尾。comment不应该包含双连字符,否这comment结束。如果comment起始与“--”,包含字符串“/*”或“*/”,他们没有特别的意义,被认为是comment的一部分。comment可以包含不在11.1中的字符集。
12.6.4当comment起始与“/*”,它应该终止与“*/”,不管“*/”是否在同一行中。如果另外一个”/*”在发现“*/”之前被发现,那么comment在每一个“*/”匹配“/*”之后结束。如果起始于“/*”的comment包含双连字符“--”,那么这些双连字符没有特别的意义,只是作为comment的一部分。comment或许包含不在11.1中的字符集。
注-这样允许使用者通过简单的在起始插入“/*”和在末尾插入“*/”注释掉ASN.1的部分已经包含注释的模块(不管他们是起始与“--”还是“/*”),确保在“/*”和“*/”之外的字符串不被注释掉。
12.7 空白词项
词项名称-empty
empty词项不包含字符。用于第五章当表达式序列可选集被指定时标识所有可选项都缺席是可能的。
12.8 数字
词项名称-number
number应包含一个或多个数字。首位不能为0除非number是单个数字。
注-number词项通常映射为整形值,并解析为十进制标识。
12.9 实数
词项名称-realnumber
realnumber应包含一个或多个数字组成的整数部分,和可选的小数点。小数点之后的小数部分可跟随一个或多个数字。整数部分,小数点,小数部分都可以跟随e或者E和可选的由一个或多个数字组成的指数幂。指数幂首字符不应该为0,除非是单字符的。
12.10 二进制字符串
词项名称-bstring
bstring可以包含随意多个0和1,并可能混杂着空格,由撇号包围并跟随字符B。
例如:’11010101’B
bstring中空格是否出现并不重要。
12.11 XML二进制字符串
词项名称-xmlbstring
xmlbstring应包含随意多个0、1和空格。空格是否出现在xmlbstring并不重要。
例如-01100000
这个字符集在xmlhstring和xmlcstring中同样有效。在分析xmlbstring标识实例的时候,通过上下文来区分xmlbstring、xmlhstring、xmlcstring。
12.12 十六进制字符串
词项名称-hstring
12.12.1 hstring应包含随意多个以下字符:
A B C D E F 0 1 2 3 4 5 6 7 8 9
可能包含多个空格,并使用撇号包围,最后跟随H字符。
例如-‘AB0196’H
空格是否出现并不重要。
12.12.2 每个十六进制字符用来表示半个字节的值。
12.13 XML十六进制字符串
词项名称-xmlhstring
12.13.1xmlhstring应包含任意数量的以下字符:
01 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
或空格。空格在xmlhstring中出现没有任何意义。
例如-Ab0912
12.13.2每个十六进制字符用于表示半个字节的值。
12.13.3一些xmlhstring的实例通常是xmlbstring和xmlcstring的有效实例。在分析xmlhstring实例时候,需要根据上下文区分xmlhstring、xmlbstring、xmlcstring。
12.14 字符串
词项名称-cstring
12.14.1cstring应该包含任意数量的来自于字符串类型字符集的图形符号和空格,并且由双引号包围。如果字符串中包含双引号字符,那么之后应该紧跟一个双引号。cstring可能包含多行数据,出现在字符串中的控制符将被忽视。
注1-cstring只能被用于唯一的展现字符串,字符串中的每个字符都应该是图形字符或空格。当字符串包含控制字符的想要展现时,可选的ASN.1句法详见39章。
注2-cstring包含图形字符和空白字符。在cstring之前或之后的空白字符是被忽略的。包含在cstring中的空白字符或不可打印字符,那么这个cstring在打印呈现时是有歧义的。
12.14.2当字符是一个组合字符,在cstring中应该作为单独字符展示。它不应该作为组合字符打印。(这样可以保证组合字符可以确保唯一的打印版本)。
12.15 XML字符串项
词项名称-xmlcstring
12.15.1xmlcstring应该包含任意数量的ISO/IEC 10646字符:
a) 横向制表符(9)
b) 换行符(10)
c) 回车符(13)
d) 在32-55295之间的所有ISO/IEC10646字符;
e) 在57344-65533之间的所有字符;
f) 在65536-1114111之间的所有字符;
注-在使用实例中应该只包含控制字符类型所许可的字符,额外的约束要求被强加给xmlcstring。
12.15.2“&”、“<”、“>”应该作为定义在12.15.4或12.15.5定义的字符序列的一部分出现。
12.15.3xmlcstring用于呈现受限字符串的值(详见41.9),可以直接的或通过以下定义的转义字符间接的展现ISO/IEC 10646的所有字符组合。
注1-xmlcstring不可以用来展现不在ISO/IEC10646规范中的字符,例如一些可以在GeneralString中展现的控制字符,也不可以展现大于10ffff的ISO/IEC 10646字符。
注2-换行符(10)和回车符(13)以及他们的组合在确认xml进程中不被识别。
12.15.4如果“&”、“<”、“>”需要在xmlcstring中展现,他们应该通过以下途径的某一类途径展现:
a) 定义在12.15.8的转义字符;或
b) 分别使用“&;”、“<;”、“>;”。这些转义字符不应该包含空格。(详见12.15.6)
12.15.5如果一个ISO/IEC 10646字符在表3的第一列,那么他在xmlcstring中的展现方式在表3的第二列展现。这些字符串不应该包含空格(详见12.1.6)。
注-表3中字符不包含十进制的字符9、10和13,所有字符都是小写。
表3略。有时间再补上
12.15.6当xmlcstring在XMLTypedValue中作为XER编码的一部分使用,他或许包含双连字符。当在ASN.1模型中作为XML值标识实例使用时,xmlcstring不应该包含双连字符。如果这个字符串是作为ASN.1模型中的xmlcstring的一个抽象值展现,那么至少一个连字符应该通过12.15.8定义的转义字符方式呈现。
12.15.7当xmlcstring在XMLTypedValue中作为XER编码的一部分使用时,它可能包含星号和斜杠符号。当在ASN.1模型中作为XML值标识实例的时候,他不应该包含星号和斜杠符号。如果字符串是作为抽象字符串呈现,那么至少一个星号和一个斜杠符号应该通过12.15.8定义的转义字符方式呈现。
12.15.8任何可以在xmlcstring中直接呈现的字符也可以通过转义字符格式“&#n;”(n是十进制)或“&#xn;”(n是十六进制)呈现。这些转义字符不应该包含空白字符(详见12.1.6)。
注1-0开头在十进制和十六进制中都是允许的。大写或小写的a-f都可以在十六进制中使用。
注2-如果使用的转义字符不在基本多国语言中(BMP),那么n会大于65535。
12.16 单个字符词项
词项名称-simplestring
simplestring应该包含任意数量的字符编码在32到126之间的ISO/IEC 10646字符并使用双引号包围。simplestring不应该包含双引号。simplestring可能包含多行文本,每行末字符应该作为间隔字符对待。在分析标识的使用实例时,simplestring和cstring的区别在上下文中区分。
注-simplestring词项只在时间类型的子标识中使用。
12.17 时间字符串
词项名称-tstring
tstring应该包含以下任意数量的字符:
01 2 3 4 5 6 7 8 9 + - : . , / C D H M R P S T W Y Z
并使用双引号包围。
注-tstring词项只在时间类型的子标识使用。
12.18 XML时间字符串
词项名称-xmltstring
xmltstring应该包含以下任意数量的字符:
01 2 3 4 5 6 7 8 9 + - : . , / C D H M R P S T W Y Z
注-xmltstring词项只在时间类型的XML值标识中使用。
12.19 属性和集合名称词项
词项名称-psname
psname应该包含任意数量的字母、数字和连字符。首字母大写。连字符不应该是最后一个字符,连字符不应该紧跟连字符。
注-psname应该是作为simplestring的内容用于时间类型的子标识。
12.20 分派词项
词项名称-“::=”
该词项由以下字符组成:
::=
注-该序列不包含空格(详见12.1.2)
12.21 一系列符号
词项名称-“..”
该词项由以下字符串组成:
..
注-该序列不包含空格(详见12.1.2)
12.22 省略符号
词项名称-“…”
该词项由以下字符串组成:
…
注-该序列不包含空格(详见12.1.2)
12.23 左版本括号
词项名称-“[[”
该词项由以下字符串组成:
[[
注-该序列不包含空格(详见12.1.2)
12.24 右版本括号
词项名称-“]]”
该词项由以下字符串组成:
]]
注-该序列不包含空格(详见12.1.2)
12.25 编码引用
词项名称-encodingreference
encodingreference由12.2的typereference定义的所有字符序列组成,除了不包含小写字符。
注-当前定义的编码引用在本规范的附录E中列出,它阐述了对应编码说明的句法和语义。encodingreference应该只包含在未来版本的本规范的附录E中列出。
12.26 整型值Unicode标签
词项名称-integerUnicodeLabel
该词项包含任意数量的数字0-9来识别国际对象标识符树的节点。它不应该0起始,除非他是个单字符并且关联的国际对象标识符树的相关节点基本值是0。
12.27 非整型值Unicode标签
词项名称-non-integerUnicodeLabel
该词项应该包含任意数量的ISO/IEC10646字符,并且按照X660约束定义,用于识别国际归降标识符树的节点。为了词项解析方便,他不应该只包含可以识别为integerUnicodeLabel的字符。
12.28 XML终止符起始
词项名称-“</”
该词项由以下字符串组成:
</
注-该序列不包含空格(详见12.1.2)。
12.29 单一XML标签终止符
词项名称-“/>”
该词项由以下字符串组成:
/>
注-该序列不包含空格(详见12.1.2)。
12.30 XML 布尔真
词项名称-“true”
12.30.1该词项由以下字符串组成:
true
12.30.2在分析本标识使用实例时,true和valuereference、identifier、XML扩展true的区别在于他们的上下文。
注-该序列不包含空格。(详见12.1.2)。
12.31 XML布尔真扩展
词项名称-extended-true
12.31.1该词项由以下字符串组成:
true
或单个字符:
1(数字1)
12.31.2在分析本标识使用实例时,extended-true和valuereference、identifier、XML“true”的区别在于他们的上下文。
注-该序列不包含空格(详见12.1.2)。
12.32 XML布尔假
词项名称-false
12.32.1该词项有以下字符串组成:
false
12.32.2在分析本标识使用实例时,false和valuereference、identifier、XML扩展false之间的区别在于上下文。
注-该序列不包含空格(详见12.1.2)。
12.33 XML布尔假扩展
词项名称-extended-false
12.33.1 该词项由以下字符串组成:
false
或单个字符:
0(数字0)
12.33.2 在分析本标识使用实例时,extended-false和valuereference、identifier、XML false之间的区别在于他们的上下文。
注-该序列不包含空格(详见12.1.2)。
12.34 XML非数字项
词项名称-“NaN”
12.34.1该词项有以下字符串组成:
NaN
12.34.2在分析本标识使用实例时,NaN和其他词项的区别在于他是以大写字母开头的。
注-该序列不包含空格(详见12.1.2)。
12.35 XML无穷大项
词项名称-INF
12.35.1该词项由以下字符串组成:
INF
12.35.2在分析本标识使用实例时,INF和其他词项的区别在于他是以大写字母开头的。
注-该序列不包含空格(详见12.1.2)。
12.36 XML ASN.1类型的标签名称
词项名称-xmlasntypename
12.36.1本规范在Asn.1内嵌类型使用XML标签名称时使用xmlasntypename。
12.36.2表四列出了17.2列出的每个ASN.1内嵌类型的xmlasntypename。表4第一列列出了ASN内嵌类型的表达式名称。表4第二列列出了xmlasntypename字符串。
12.36.345.1节的UsefulType的xmlasntypename应该是typereference中定义。
12.36.4ObjectClassFieldType和InstanceOfType的xmlasntypename字符串在x681和附录C中定义。
12.36.5如果ASN.1内嵌类型是PreFixedType,那么决定xmlasntypename的类型应该是PreFixedType(详见31.1.5)中的类型。如果该类型还是PreFixedType,那么12.36.5应该被嵌套调用。
注-26.10节定义Type可以被使用为SelectionType和ConstainedType。
表4略
12.37 单字节词项
词项名称-
“{”
“}”
<
>
,
.
/
(
)
[
]
-
:
=
“
‘
“ ”(空格)
;
@
|
!
^
以上词项名称都不包含双引号。
12.38 保留关键字
保留关键字-略
以上词项名称应该由字符串组成,并且是保留的字符串。
注1- 空格不出现在以上字符串中。
注2- 关键字CLASS,CONSTRAINTED,CONTAINING,ENCODED,INSTANCE,SYNTAXH和UNIQUE不是在本规范中使用;他们在X681,X682,X683中使用。