注1t在“n”的十进制和十六进制值中允许以O开始,而且“A”~“P的大小写都能用在十六进制值中.
注2,如果转义序列“&#n”和。8L#】cn”用于不在基本多文种平面(BMP)中的GB/T 13000.I字符.-n”值将比65535(十六进制FFFF)大。
ABCD~# 233;FGH~# xEE;JK8LamptXYZ
能用来表示类型UTF8String的字符串值。表示的值由下面字符组成;
ABCDe FGHiJK&XYZ
如果在规范中采用成比例的间隔字体(例如上面),其中∈和F之间的精确间隔字符在印刷媒介上可能有歧义。
11,16赋值词项
词项名——”::=“.
该词项应由字符序列:。=组成。
注:该序列不包含任何空白字符(见11.1.2)。
11.17范围分隔符
词项名——”,.“
该词项应由字符序列..组成。
注:该序列不包含任何空白字符(见11.1.2).
11.18省略号
词项名——“…”
该词项应由字符序列…组成。
注:该序列不包含任何空白字符(见11.1.2)。
11.19左版本括号
词项名——“[[”
该词项应由字符序列[[组成。
注:该序列不包含任何空白字符(见11.1.2)。
11.20右版本括号
词项名——“]]”
该词项应由字符序列]]组成。
注t该序列不包含任何空白字符(见II.i.2)。
结尾标记开始项项名——“</”
该项应由字符序列</组成。
注t该序列不包含任何空白字符(见11.1.2)。
单个标记结尾项项名——“/>”
该项应由字符序列/>组成。
注t该序列不包含任何空白字符(见11.1.2)。
布尔真项项名——“tr ue"
11,23.1该项应由字符序列true组成。
11.23.2分析使用这一记法的实例时,“true”由其出现的上下文来与“valuereferertee”或“identifier”
区别。
注。该序列不包含任何空白字符(见11.1.2)。
布尔假项项名——“false"
11.24.1该项应由字符序列false组成。
11.24.2分析使用这一记法的实例时,‘‘false”由其出现的上下文来与“valuereferenee”或“identifier”
区别。
注:该序列不包含任何空白字符(见11.1.2)。
11.25.3 “UsefulType”的“xmIasnltypename”应该是用于它们定义的“typereference”。
ASN.1类型产生式名称 |
|
BitStringType |
BIT_STRING |
BooleanType |
BOOLEAN |
ChoiceType |
CHOICE |
表4(续)
GB/T 16262.1--2006/I$O/IEC 8824-1 =2002
ASN.1类型产生式名称 |
|
EmbeddedPDVType |
SEQUENCE |
EnumeratedType |
ENUMERATED |
Externa[Type |
SEQUENCE |
InstanceOfType |
SEQUENCE |
lntegerType |
INTEGER |
NullType |
NULL |
ObjectClassFieldType |
见GB/T 16262.2的‘14.10和14.11 |
ObjectIdentifierType |
OBJECT_IDENTIFIER |
OctetStringType |
OCTET_STRING |
RealType |
REAL |
RelativeOIDType |
RELATIVE_STRING |
RestrictedCharacterStringType |
类型名称(如l IA5Stin8) |
SequenceType |
SEQUENCE |
SequenceOfType |
SEQUENCE_OF |
SetType |
SET |
SetOfType |
SET_OF |
TaggedType |
见11.25.5 |
LlnrestrictedCharacterStringType |
SEQUENCE |
11.26单个字符词项
词项名——
“(”“)”“<”“>”“,”“.”“(”“)”-r”“]”“一”(HYHEN-M1NUS)“:”“一”“””(QUOTATION
MARK)“’”(APOSTROPHE)“”(SPACE)“I”“@”“l”“!”“‘”
带任意上面所列名称的词项应由无引号的单个字符组成。
11.27保留字
保留字名——
ABSENT ABSTRACT-SYNTAX ALL APPLICATION AUTOMATIC BEGIN BIT BMPString BOOLEAN BY CHARACTER
|
ENCODED END ENUMERATED EXCEPT EXPLICIT EXPORTS EXTENSIBILITY EXTERNAL FALSE FROM GeneralizedTime
|
INTEGER INTERSECTION IS0646String MAX MIN MINUS-INFINITY NULL NumericString OBJECT ObjectDescriptor OCTET
|
RELATIVE-OID SEQUENCE SET SIZE ST-RING SYNTAX T61String TAGS TeletexString TRUE TYPE-IDENTIFIER
|
CHOICE GeneralStrmg OF UNION
CLASS GraphicString OPTIONAL UNIQUE
COMPONENT IA5String PATTERN UNIVERSAL
COMPONENTS IDENTIFIER PDV UniversalString
CONSTRAINED IMPLICIT PLUS-INFINIT UTCTime
CONTAINING IMPLIED PRESENT UTF8String
DEFAULT IMPORTS PrintableString VideotexString
DEFINITIONS INCLUDES PRIVATE Visib/eString.
EMBEDDED INSTANCE REAL WITH
带上面名称的词项应由名称中的字符序列组成,且是保留的字符序列。
注l:这些序列中没有空白,
注2:本部分中不用关键字:CLASS. CONSTRAINED, CONTAINING, ENCODED, INSTANCE, SYNTAX和u'NIQUE,它们在GB/T 16262.2,GB/T 16262. ~,GB/T 16262.4中使用.
12模块定义
12. ! "ModuleDefinition"由T面的产生式规定:
ModuleDefinition: : =
ModuhIdentifier
DEFINITIONS
TagDefault
ExtensionDefault
“ ::=“
BEGIN
ModuleBody
END
Moduleldentifier: =
modulereference
DefinitiveIdentifier
Definitiveldentifier: : ---
"{" DefinitiveObjIdComponentList " }"
empty
DefinitiveObjldComponent List z, =
DelinitiveObjldComponent │
DefinitiveObjldComponent DefinitiveObjldComponentList
DefinitiveObjldComponent... =
NameForm │
DefinitiveNumberForm │
DefinitiveNameAndNumberForm
DefinitiveNumberForm.. = number
DefinitiveNameAndNumberForm: : = identifier " (" DefinitiveNumberForm " )"
TagDefault: :=
EXPLICIT TAGS │
IMPLICIT TAGS
AUTOMATIC TAGS
empty
ExtensionDefault:. ----
EXTENSIBILITY IMPLIED
empty_
ModuleBody .. =
Exports Imports AssignmentList
empty
Exports: z ---
EXPORTS SymbolsExported "
EXPORTS ALL " ~ "
empty
SymbolsExported. ~ =
SymbolList
empty
Imports: : =
IMPORTS Symbolslmported " ;
empty
GB/T 16262.1--2006/ISO/IEC 8824-1 ..2002
SymbolsImported, : --
SymbolsFromModule[,ist │
empty
SymbolsFromModuleList: : ----
Sym bolsFromModule │
SymbolsFromModuleList SymbolsFromModule
SymbolsFromModule... =
SymbolList FROM GlobalModuleRefereace
GlobalModuleReference: : =
modulereference Assignedldentilier
Assignedldentifier: : =
ObjeetldentifierValue
DefinedValue
empty
SymboIList: : =
Symbol
SymboIList " ," Symbol
Symbol : : =
Reference
ParameterizedReference
Reference: : =
typereference
valuereference
objectclassreference
objeetreference
GB/T 16262.1--2006/ISO/1EC 8824-1 ~2002
objectsetreference
AssignmentList::=
Assignment │
AssignmentList Assignment
Assignment::=
TypeAssignment │
ValueAssignment │
ValueSetTypeAssignment │
Obj ectClassAssignment │
ObjectAssignment │
ObiectSetAssignment l
ParameterizedAssignment
注1 l在GB/T 16262.4中规定了“Exports"和“Imports”列表里的“ParameterizedReference”的用法l
注2 z例如(及对于带通用类别标记类型的本部分中的定义),“ModuleBody”可用在“ModuleDefinition”的外部.
注4t为模块定义的“TagDefault”值只影响那些在模块中显式已定义类型,它不影响引入类型的解释.
注5:字符分号不在赋值列表规范或它的任何下一级产生式中出现,并保留为ASN.1工具开发者使用。
12.2 如果“TagDefauh’’是“empty”,它取“EXPI,ICIT TAGS”。
注l第30章给出了EXPLICIT TAGS、IMPLICIT TAGS和AUTOMATIC TAGS的意义。
12.3 当选择“TagDefauh”的替换项AUTOMATIC TAGS时,就是说选择了为模块自动加标记,否则就说没有选择。自动加标记是(带附加条件)应用于模块定义内的“ComponentTyp。Lists”和“Alterna-tiveTypeLists”产生式上的语法转换。24.7至24.9、26.3和28.2至28.5形式上分别规定了有关序列类型、集合类型和选择类型记法的这一转换。
12.4 EXTENSIBILITY IMPLIED选项相当于允许的模块中每个类型定义中文本插入扩展标志(“…”)a隐式扩展标志的位置是允许有显式规定扩展标志的类型中的最后位置。无EXTENSIBILI-TY IMPLIED意味着只为扩展标志显式存在的模块内的那些类型提供可扩展性。
注一EXTENSIBILITY IMPLIED只影响类型。它不影响客体集和子类型约束.
12.5在“Moduleldentifier”产生式中出现的“modulereference,,称为模块名称。
注t用赋予相同“modulereference”的“ModuleBody"的几个事件定义单个ASN.1模块的可能性在早期的规范中是(可论证)允许的。本部分中不允许这样。
12.6模块名在模块定义的应用范围内应只能使用一次(12.9规定的除外)。
12.7如果“Definitiveldentifier”不是空的,指示客体标识符值无歧义和唯一地标识所定义的模块。未定义值可用于定义客体标识符值。
注一本部分不阐述模块变化需要新“Definitiveldentifier"的问题。
12.8如果“Assignedldentitier”不是空,则“ObjectldentifierValue,,和“DefinedValue,,替换项无歧义和唯一地标识引入引用名的模块。当使用“Assignedldentifier”的“DefinedValue”替换项时,它应是类型客体标识符值。“Assignedldentifier"内文本出现的每个“valUereference"应满足下列规则之一:’
a)它在所定义模块的“AssignmentList”中定义,且所有在赋值描述右边文本出现的“valuerefer-enee”也满足本规则(“a"规则)或下一个规则(“b”规则)。
b)在“Assignmentldentifier”不能文本包含任何“valuereference,,的。SymbolsFromModule”中,它表现为“Symbol”。
注t建议赋予一个客体标识符以便其他地方能无歧义地引用模块.
12.9“SymbolsFromModule”中的“GlobalModuleReference"应在另一个模块的“ModuleDefinition”中出现,如果它包含非空的“DefinitiveIdentiiier”,“modulereferenee”可能在两种情况下有所不同例外。
注:当符号是从两个名字相同(不考虑12.6已命名模块)的模块中引入时,应只能用不同于用于其他模块中的“modulereference”.采用替换项的不同名字使这些名字可用于模块体中(见1L15)。
12.10当“modulereference”和非空“AssignedIdentifier”都用来引用一个模块时,后者应该认为是确定性的。
12.11 当引用的模块有非空的“DefinitiveIdentifier”时,引用那个模块的“GlobalModuleReference”不应有空的“Assignedldentifier"。
12. 12 当选择“SymbolsExported’’替换“Exports”时;
a) “SymbolsExported"中的每个“Symbol”应满足一个且只能是一个下面的条件:
i) 只在所构建的模块中定义,或
ii)在“Imports”的“Symbolslmported”替换项中,只准确地出现一次;
b)每个适合从模块外面引用的“Symbol”应包含在“SymbolsExported”中且只有这些“Symbol”能从模块外部引用(根据12.13的规定放宽限制);和
c) 如果没有这类“Symbol”,那么应选择空替换“SymbolsExported"(不是替换!'Exports”).
12. 13当选择“empty”或者EXPORTS ALL替换“Exports”时,模块中定义或模块引入的每个“Sym-
bol”可从其他受到12. 12 a)中规定限制的模块中引用.
注l包含“empty”替换。Exports”是为了向后兼容.
12.14 如果定义它们的typereference是输出的或作为输出类型内的成分(或子成分)出现,则“NamedNumberList”、“Enumeration”或“NamedBitList”中出现的标识符是隐式输出。
12.15 当选择“Symbolslmported’’替换“Imports”时:
a> 在“SymbolsFromModue挣中的每个“Symbol”应在“SymbolsFromModue”中的..GlobalModul-eReference”指明模块的模块体中定义,或者在“Imports”章出现。如果在那一章中只有一次“Symbol"事件,则只允许引入被引用模块的“Imports”章中出现的“Symbol”,而且“Symbol”不 能在被引用模块中定义。
注】:不禁止在两个来自被引入到另一个模块的不同模块中定义相同的符号名,然而,如果相同的。Symbol~名字在模块A的“Imports"章中出现不止一次,那个“Symbol”名就不能从A输出以引入到另一个模块B。
b)如果在“SymbolsFromModule”中的“GlobalModuleReference’’指明的模块的定义中选择了“SymbolsExported”替换‘‘Exports”,则“Symbol’’应出现在其“SymbolsExported”中。
c)只有那些出现在“SymbolsFromModue”的“SymbolList’’之中的“Symbol”可在任何有由那个“SymbolsFromMod ue”的“GlobalModuleReference’’指明的“modulereference"的.‘External<X
>Reference”(这里<X>是“Value”、“Type”、“Object”、“Objectelass”或“Objectset’’)中作为符号出现。
d)如果没有这样的“Symbol”,那么应选择“empty’’替换“Symbolslmported"。
注2lc)和d)的作用是语句IMPORTS,意昧着模块不能包含“External<X:> Rderence一。
e) 在“SymbolsFi:omMod ueList”中的所有“SymbolsFromModue”应包含“GlobalModuleRefer-encen出现,因此:
i)其中的“modulereferenee”彼此完全不同,而且不同于与引用模块相关的“modulerefer-ence”;和
ii) 非空时,“Assignedldentifier”指明彼此完全不同的客体标识符值,而且不同于(若有的话)与引用模块相关的客体标识符值。
12.16 当选择“empty”替换“Imports"时,模块仍可通过崩External<X>Reference”的方法引用其他模块中定义的“Symbol”。
注:含有“empty"替换"Imports”是为了向后兼容。
12.17如果定义它们的typereference是引入的或作为引入类型的成分(或子成分)出现的,则在“NamedNumberList”、“Enumeration”或“NamedBitList”中出现的标识符是隐式引入。
12. 18“SymbolsFromModule”中的“Symbol”可以在“ModuleBody”中作为“Reference”出现,与“Sym-bol"相关的意义是它在对应的"GlobalModuleReference"指明的模块中出现。
12. 19 当“Symbol”也出现在“AssignmentList”(不赞成),或者在“SymbolsFromModule”的一个或多个其他实例中出现时,它应仅用在“External<X>Reference”中。它没有这样出现时,应直接用作“Ref-erence"。
12.20本部分中随后的几章里定义了“Assignment"的各种替代式,另外标注的除外:
赋值替代式 定义章节
“TypeAssignment” 15.1
“ValueAssignment” 15.2
“ValueSetTypeAssignment” 15.6
“Obj ectClassAssignment” GB/T 16262.2的9.1
"ObjectAssignment"GB/T 16262.2的11.1
“Obj ectSetAssignment” GB/T 16262.2的12.1
“ParameterizedAssignment” GB/T 16262.4的8.1
每个“Assignment"的第一个符号是“Reference”的替换项之一,指明被定义的引用名。“Assign-mentList”内的两个赋值中不应有相同的引用名。
13引用类型和值定义
1301 被定义类型和值产生式
DefinedType::一
ExternalTypeReference
Typereference
ParameterizedType
ParameterizedValueSetType
DefinedValue.:=
ExternalValueReferenee l
Valuereference 、 l
ParameterizedVa!ue
规定应用予引用类型和值定义的序列。GB/T 16262.4中规定了“ParameterizedType”和“Parame-terizedValueSetType”标识的类型和“ParameterizedValue”标识的值。
NonParameterizedTypeName.:=
ExternalTypeReference
typereferenee
ISO/IEC 8825-4)中使用这一记法不出现该限制。
13.4除12. 18规定的外,除非引用是在类型或值指派给(见15.1和15.2)“typereference”或
“valuereference”的“ModuleBody”内,否则不应使用“typereference”、“valuereference"、“Parameterized-
Type”、“ParameterizedValueSetType“或“ParameterizedVal ue”替代式。
13.5除非对应的“typereference”或“valuereference"在用于定义对应的“modulereference”的‘‘Module-Body”内
a)分别被赋予类型或值(见15.1和15.9);或
b) 出现在“Imports”章中,否则不应使用“ExternalTypeReference”和“ExternalValueReference”。如果在那一章中,“Sym-bol”事件不超过一次,则仅允许引用另一个模块的“Imports”章中的名称。
注:这不禁止在两个来自被引入到另一模块的不同模块中定义的相同“Symbol”,然而,如果相同的“Symbol”在模块A的IMPORTS章中出现不止一次,那么不能在外部引用中用模块A引用那个“Symbol”.
13.6在只引用在不同模块中定义的模块名的模块中应采用外部引用,而且用下面的产生式规定:
ExternalTypeReference l:=
Modulereference
“.”
typereference
ExternalValueReference....
Modulereference
“.”
valuereferenee
注l GB/T 16262.2中规定了附加外部引用产生式(“ExternalClassReference”、“ExternalObjectReference”和“Exter-
nalObj ectSetReference").
13.7 当用“Imports”的“SymbolsImported"替换项定义引用模块时,“Symbolslmported’’里只有一个“SymbolsFromModuh”的“GlobalModuleReferenee’’中应出现外部引用中的“modulereference"。当用“Imports”的“empty”替换项定义引用模块时,定义“Reference”的模块(不同于引用模块)的“Modu-leDefinition”中应出现外部引用的"modulereference”。
13.8在“DefinedType”用作“Type”支配的部分记法时(例如,在"SubtypeConstraint"中).那么,“De-finedType”应该与附录B.6.2中规定的支配“Type”相兼容。
13.9“DefinedValue”的ASN.1规范内的每次出现由“Type”支配,而且“DefinedValue”应该引用与附录B.6.2中规定的支配“Type”相兼容的类型的值。
14支持引用ASN.1成分的记法
14.1在很多情况下,需要形式引用ASN.1类型、值等的成分。一个这样的实例是要写出文本来标识某些A SN.1模块内的规定类型。本章定义能用来提供这些引用的记法。
14.2记法使集或序列类型(强制或可选地出现在类型中)的任何成分能被标识。
14.’3通过使用“AbsoluteReference"语法结构:
AbsoluteReIerence:l一“@”Moduleldentifier
“.”
ItemSpec
ItemSpec::=
29
typereference
ItemId " . "ComponentId
hemId: := ItemSpec
Componentld:: =
能引用任何ASN.1类型定义的任何部分.
注: Absolute_Reference产生式不可用在本部分的其他地方。提供它是为14.1的陈述。
14.4“ModuleIdentifier”标识ASN.1模块(见18.1)。
14.5当“DefinitiveIdentifier”的第一个替换项用作部分“ModuleIdentifier”时,.。DefinitiveIdentifier,,无歧义和唯一地标识名称被引用的模块。
14.6“‘ypereferenee”引用由“Moduleldentifier”标识的模块中定义的任何ASN.1类型.
14.7每个“ItemSpec’’中的"Componentld,,标识由“ltemId"标识的类型的成分。如果它标识的成分不是集、序列、单一集合、单一序列或选择类型,它应该是最后的“Componentld”。 .
14.8如果双亲“ItemId"是集或序列类型,并且要求是该集或序列“ComponentTypeLists”中“Named-Type”的“identifier”之一,可以使用“Componentld"的“identifier,,形式。如果“Itemld,,标识选择类型,且
然后要求是那个选择类型“AhernativeTypeLists”中“NamedType"的“identifier”之一,也可使用“Com -ponentId钟的“identifier"形式。它不能在任何其他情况下使用。
14.9只有“Itemld"是单一序列或单一集合类型的条件下能使用“ComponentId"的数字形式。数字值标识单一序列或单一集合中的类型实例,用值“1”标识类型的第一个实例。值零标识概念整数类型成分
(不在传送中显式出现),该成分包含封闭类型的值中出现的单一序列或单一集合中的类型实例数字的计数。
14.10只有“Itemld”是单一序列或单一集合时可以使用“Componentld”的“一,形式。任何与使用“ComponentId”的“”形式相关的语义适用于单一序列和单一集合的所有成分。
注:下面的示例中。
M DEFINITIONS::=BEGIN
T l I= SEQUENCE(
aBOOLEAN
bSET OF INTEGER
)
END
成分“T”能通过ASN.1模块外(或注解中)的文本引用,如:
一if(@M.T.b.0 is odd) then.
(@M.T'b.鲁shall be an odd integer)
用来陈述如果~”里的成分数字是奇数,飞”的所有成分必须是奇数.
15类型和值的赋值
15.1 通过“TypeAssignment"产生式规定的记法将。typereference”赋予类型:
TypeAssignment I l=
typereference
¨::2”
Type
“typereference”不应该是ASN.1的保留字(见11.27)。
ValueAssignment::一
valuereference
Type
¨::=¨
Value
valuereference
¨::=¨
::一’’<”&NonParameterizedTypeName”>‘‘
’’</”&NonParameterizedTypeName“>” I
”<”&NonParameterizedTypeName”/>”
15.3“Value“是16.7中规定类型的值的记法。
15.6通过“ValueSetTypeAssignment打产生式规定的记法可将“typereference"赋给值集:
ValueSetTypeAssignment::=
typereference
Type
¨::=¨
ValueSet
这一记法将“typereference"赋给定义为“Type"指示的类型的子类型,并且确定包含“ValueSet”中规定或允许的值的类型。“typereference"不应该是ASN.1的保留字(见11.27),且可引用作为类型。在15.7中定义了“ValueSet"。
15.7某些类型支配的值集应由记法"ValueSet"规定;
ValueSet::=”{”ElementSetSpecs“)”值集包含“ElementSetSpecs”规定的所有值(见第46章),至少应该包含有一个。
15.8 “ValueSetTypeAssignment”产生式扩大成l
typereference
Type .
¨::2¨
”(”ElementSetSpecs”)”
为了所有目的t包括应用编码规则,定义它是准确地相当于使用具有相同的“Type”和“Element-SetSpecs”规范的产生式:
typereference
”:l 2”
Type
”(”ElementSetSpecs”)’’
16类型和值的定义
16.1 类型由下列记法“Type”规定:
Type::2 BuihinType I ReferencedType I ConstrainedType
16.2记法“BuiltinType"规定ASN.1的固有类型,定义如下:
BuihinType::=
BitStringType
BooleanType
CharacterStringType
ChoiceType
EmbeddedPDVType
EnumeratedType
ExternalType
InstanceOfType
IntegerType
NullType
ObjectClassFieldType
Obj eetldentifierType
OetetStringType
RealType
RelativeOIDType
SequenceType
SequenceOfType
SetType
SetOfType
TaggedType
以下几章(除非另有说明,否则是指本部分中的)定义各种“固有类型”记法:
BitStringType 21
BooleaaType 17
CharacterStringType 36
ChoiceType 28
EmbeddedPDVType 33
EnumeratedType 19
ExternalType 34
InstanceOfType GB/T 16262.2--2006的附录C
IntegerType 18
NullType 23
Obj ectClassFieldType GB/T 16262. 2--2006的14.1
ObjectIdentifierType 31
OctetStringType 22
RealType 20
RelativeOIDType 32
SequenceType 24
SequeneeOfType 25
SetType 26
SetOfType 27
TaggedType 30
16.3记法“ReferencedType"规定ASN.1引用的类型:
ReferencedType ;:=
DefinedType
UsefulType
SeleetionType
TypeFromObjeet
ValueSetFromObject .
“RefereneedType舛记法提供了引用某些其他类型(最终到固有类型)的替换方法。各种“Refer-encedType”记法以及确定它们引用的类型的方法在下列位置规定(除非另有说明,否则在本部分中);
DefinedType 13.1
UsefulType 41,1
SelectionType 29
TypeFromObjeet GB/T 16962.2--9.006的第15章
ValueSetFromObject GB/T~696L 2--2006的第1 5章
16.4 "ConstrainedType”在第45章中定义。
16,5本部分要求在规定集类型、序列类型和选择类型的成分时采用记法“NamedType”。“Named-Type”的记法是t
NamedType l l=identifier Type
15:6 "ider~tifier~'用来无歧义地引用值记法、内部子类型约束及成分关系约束中‘的集类型、序列类型或选择类型的成分(见GB/T 16262.3).它不是类型的一部分,因此,不影响类型。
Value ::=
BuihinValue
ReferencedValue
ObjectClassFieldValue
::=注;如果任意空白字符,II, i.4允许插入的空白除外,出现在开始标记的最后“>‘字符和结束标记的初始“<”字符之间,就不满足上面的条件.
如下;
BuihinValue::=
BitStringValue
BooleanValue
CharacterStringValue
ChoiceValue
EmbeddedPDVValue
EnumeratedValue
ExternalValue
InstanceOfValue
lntegerValue
NullValue
ObjectldentifierValue
OctetStringValue
RealValue
RelativeOIDValue
SequeneeValue
SequeneeOfValue
SetValue
SetOfValue
TaggedValue
各种“BuiltinValue”记法的每一个在上面16.2中列出的,对应的“BuiltinType"记法的同一条中定义.
义如T. :=16.11用记法“RefereneedValue”规定ASN.1引用的值:
RefereneedValue::;
DefinedValue I
ValueFromObject
“ReferencedValue”记法提供了引用某些其他值(最终到固有值)的替换方法。各种“Referenced-Value”记法以及确定它们引用的值的方法在下列位置规定(除非另有说明,否则在本部分中):
DefinedValue 13.1
ValueFromObject GB/T 16262.2—2006的第1 5章 、
16.12不管类型是“BuihinType”、“ReferencedType”或“ConstrainedType”,其值能够用那个类型的
“BuihinValue”或“ReferencedValue”规定。
NamedValue::=identifier Value
这里,“identifier"与“NamedType”记法中使用的一样.
注:“identifier”是记法的一部分.它不形成值本身的部分.它用来无歧义地引用集类型、序列类型或选择类型的成分。
16.14类型定义中隐式(见12.4)或显式出现的扩展标志(见第6章)不影响值记法。也就是,有扩展标志的类型的值记法准确地和好像缺少扩展标志一样。
注:46.8条禁止用于取自引用不在双亲类型扩展根中的值的子类型约束的值记法。
17布尔类型记法
17.1应该通过记法“BooleanType”引用布尔类型(见3.6.7):
BooleanType l l=BOOLEAN
17.2用本记法定义类型的标记是通用类别,编号为1。
BooleanValue;l=TRUE │FALSE
::=”<” &”true“”/>”
”<”&”false””/>”
18整数类型的记法
18.1 整数类型应该由记法“lntegerType,,来引用(见3.6.41):
IntegerType:;=
INTEGER
INTEGER"{" NamedNumberList")”
NamedNumberList::=
NamedNumber │
NamedNumberList”,”NamedNumber
NamedNumber:j=
identifier”("SignedNumber")" │
identifier”("DefinedValue”)”
SignedNumber::=
number │
”一”number
18.2如果“number"是零,则不应该使用“SignedNumber”的第二个替换项。
18.3"NamedNumberList’’在类型定义中没有意义,它仅用于18.9中规定的值记法。
18,4"DefinedValue"中的“valuereference"应该是类型整数的。
注z由于“identifier”不能用来规定与‘‘NamedNumber’相关的值."DefinedValue”永远不会被错认为是一IntegerVal-ue”,在下面的情况下:
a INTEGER l:=1
T1:1=INTEGER{a(2》
T2::=INTEGER{a(3),b(a))
eT2 l l=b
dT2 l l=a
其中,c指示值1,由于它既不能引用a的第二、也不能第三个出现,面d指示值3.
18.5 "NamedNumberList嚣中出现的每个“SignedNumher”或“DefinedValue”的值应该不同,而且代表整数类型的不同值。
18.6在"NamedNumberList”中出现的每个“identifier"应该不同。
18.7 在"NamedNumberList”中的“NamedNumb~”的顺序无关紧要。
18.8由本记法定义的类型标记是通用类别,编号为2.
IntegerValue::=
SignedNumber │
identifier
::=SignedNumber │
”<”8L identifier”/>”
18.11有"NamedNumberList"的整数类型的值记法实例内,取自“NamedNumberList"的"identifier"和引用名都是名称的任何事件应该解释为“identifier",
19枚举类型的记法
19.1 枚举类型(见3.6.24)应该用记法“EnumeratedType"来引用:
EnumeratedType::=
ENUMERATED”{“Enumerations“)“
Enumerations: : =
RootEnumeration
RootEnumeration " ... "ExceptionSpec
RootEnumeration ......, ... " ExceptionSpec "
RootEnumeration :.= Enumeration
, "AdditionalEnumeratio
AdditionalEnumeration::=Enumeration
Enumeration::=
Enumerationhem[ Enumerationhem “,”Enumeration
EnumerationItem::=identifier[ NamedNumber
注1 I“EnumeratedType”的每个值有一个与不同整数相关的标识符.然而,不希望值本身有任何整数语义,规定。Enumerationltem”的。NamedNumber"替换项提供控制值的表达式以便有利于可兼容的扩展。
注2;在“RootEnumeration”中的“NamedNumber”内的数值不必有序或者相邻,而“AdditionalEnumeration。中的“NamedNumber"内的数值是有序的但不必相邻.
19.2对于每个"NamedNumber","identifier'’和"SignedNumber"应与“Enumeration"中的所有其他“i.
dentifier”和“SignedNumber挣不同。18.2和18.3条也适用于每个NamedNumber”。
19.3 (在"EnumeratedType"中)每个是“identifier"的“EnumerationItem”连续地被赋给不同的非负整数。对于“RootEnumeration",赋值从零开始、但不包括任何是“NamedNumber"的“Enumerationhem"中采用的任何整数的连续整数。
注.整数值与“Enumerationltem”相关,以帮助定义编码规则。否则,它没有在ASN.1规则中采用。
19.4每个新"Enumerationhem"的值应该比类型中所有以前定义的“AdditionalEnumeration"要大。
19.5当“NamedNumber"用于定义"AdditionalEnumeration”中的“Enumerationhem,,时,与之相关的值应该与(本类型中)所有前面定义“Enumerationltem"的值不同,无论前面定义的。Enumerationhem。
在枚举根中存在与否。例如:
A ::=ENUMERATED(a.b,-一.c(O)} 一无效,因为a和c都为0
B ::= ENUMERATED{a.b..一,c,d(2))一无效,因为c和d都为2
C ::=ENUMERATED{a,b(3),…,e(1))一有效,因为c=l
D:::= ENUMERATED{a.b,.,.,c(2》 一有效,因为c=2
19.6 对予"Enumerationltem"不是在“RootEnumeration"中定义时,与作为“identifier"(而不是"NamedNumber")的"AdditionalEnumeration"替换项中的第一个“Enumerationhem”相关的值应该是最小值-而且“AdditionalEnumeration"(若有的话)中所有前面的"Enumerationltem"较小。例如,下面都是有效的.
A ::=ENUMERATED{a,b,,,.,c} 一c=2
B ::=NUMERATED {a,b,c(0),…,d) --d=3
C::=ENUMERATED {a,b,,,..c(3),d) --d=4
D::=NUMERATED {a, z(25),,..,d) - d=1
19.7枚举类型的标记是通用类别,编号为10.
EnumeratedValue::=identifier
乙identifier”/>“19.10枚举类型值记法的实例内,取自"Enumeration"的“identifier"和引用名都是名字的任何事件应该解释为“identifier"。
20 实数类型的记法
2D.1实效类型(见3.6.54)应该用记法“RealType”来引用:
RealType::一REAL
20.2实数类型的标记是通用类别,编号为9。
20.3实数类型的值是值PLUS-INFINITY and MINUS-INFINITY及能用包含三个整数M、B和E的下列公式规定的实数:
M×BF
这里,M称作尾数,B称作底数,E称作指数。
20.4实数类型有一个相关的类型,该类型用来精确定义实数类型的抽象值,并也用来支持实数类型的值和子类型记法。
注:编码规则可定义不同的、用来规定编码的类型,或者不引用相关类型可规定编码。特别是,如果"base”是lO.PER和BER中的编码提供一个二进制代码的十进制(BCD)编码,和如果“base”是2.提供允许来自于硬件浮点表达式的有效转换的编码.
5值定义和分成子类型的相关类型是(有标准注解):
SEQUENCE(
mantissa INTEGER.
mantissa INTEGER(2110),
exponent INTEGER
一相关的数学实数是“mantissa”乘以“base”为底的“exponent”次幂
}
注:1尽管114base”2和"ha∞”10表示的非零值确定同样的实数值,它们还是被认为是不同的抽象值,而且可携带不同的应用层语义。
注:2 记法“REAL(WITH COMPONENT{...,base(10)))”能用来限镪值集为底数是10的抽象值(对底数是2的抽象值也类似).
注:3本类型能携带一个能以典型浮点硬件储存的任何数字的准确有限表达式及任何有限的十进错字符表达式数字。
RealValue::=
NumericReaIValue
SpecialReaIValue
NumericRealValue:.=
realnumber
”一”realnumber
SequeneeValue一相关序列类型的值
SpecialRealValue::=
PLUS-INFINITY
MINUS-INFINITY
“NumericRealValue”的第二和第三个替换项不应用于零值。
:=realnumber
“-”realnumber
:的第二个替换项不应该用作零值l”<”&PLUS-INFINITY”/>”J”<”MINUS-INFINITY n/>”
20.7 当使用“realnumber”记法时,它标识出对应以10为“base”的抽象值。如果“RealType”被约束
为以2为"base”,“realnumber"以2为"base”的抽象值标识对“realnumber”规定的十进制值,或如果不能准确表示时对应本机系统定义的精确度。
21 位串类型的记法
21.1 位串类型(见3.6.6)应该用记法“BitStringType"来引用:
BitStringType::未
BIT STRING
BIT STRING ”{”NamedBitList”}”
NamedBitList l l=
NamedBit f
NamedBitList”,”NamedBit
NamedBit.:一
identifier“(”number‘’)”I
identifier”(”DefinedValue”)”I
21.2位串中的第一位叫做起始位,位串中的最后一位叫做结尾位。
注:这一术语用于规定值记法及定义编码规则.
21.3“DefinedValue”应该引用类型整数的非负值。
21.4出现在“NamedBitList"中的每个“number"或“DefinedValue"的值应该不同,而且是位串值中的不同位的数字。位串的起始位用“number一零标识,连续的位上有连续的值。
21.5 出现在“NamedBitList”中的每个弗identifier”应该不同。
注1I在“NamedBitList”中的。NamedBit”产生式序列的顺序没有意义.
注2-由于出现在“NamedBitList”内的“identifier”不能用来规定与。NamedBit一相关的值,。DefinedValue”从不可能被误以为是“IntegerValue”.因此在下列情况下:
a INTEGER;I—l
T1::=INTEGER{a(2)}
T2::一BIT STRING{a(3),b(a)}
其中a的最后事件指明值1,因为它既不能引用a的第二个也不能引用第三个事件.
21.6“NamedBitList”的出现不会影响本类型的抽象值的集。允许是包含1位而非已命名位的值。
21.7当“NamedBitList”用来定义位串类型时,ASN.1编码规则随意地在被编码或解码的值上加上(或移去)任意多个结尾O位。因此,应用设计者应保证不同的语义与这些仅在结尾o位不同的值不相关。
21.8该类型的标记是通用类别,编号为3。
BitStfingValue::=
bstring
hstring
”{”IdentifierList’’}“
¨{¨¨)"
CONTAINING Value
IdentifierList::
identifier
IdentifierList”,”identifier
:;=empty
:=”<‘‘&identifier”/>”
/>”21.13“empty"替换项指明带空位的位串。
21.16当使用“hstring”记法时,每个十六进制数字的最高有效位对应位串中最左边的位。
注t这一记法在任何情况下都不约束解码规则将位串置成用来传送8位位组的方式.
21.17除非位串值由4位的倍数组成,否则不应该使用“hstring”记法。
例如:
'A98AI'H
和
'1010100110001010'B
是同一位串值的替换记法。如果用“NamedBitList"定义类型,则(单个)结尾零不能形成长度是15位的值的一部分。如果没有用“NamedBitList”定义类型,则结尾零形成长度是16位的值的一部分。
21.18如果具有包括CONTAINING的位串类型内容约束,则只能使用CONTAINING替换项。然后,“Value"应该是“ContentsConstraint”中“Type"的值的值记法(GB/T 16262.3--2006第11章).
注:由于GB/T 16268. 3--2006的11.3条禁止“ContentsConstraint”之后的进一步约束,因此,该值记法从不可能在子类型约束中出现,而且,除非支配者有“ContentsConstraint”,否则,上面的文本禁止其使用。
21.19如果有不包含ENCODED BY的位串类型的内容约束,应该使用CONTAINING替换项。
22八位位组串类型的记法
22.1 八位位组串类型(见3.6.49)应由记法“八位位组串类型”引用:
OctetStringType::=OCTET STRING
22.2该类型的标记是通用类别,编号为4。
OctetStringValue::=
bstring
hstring
CONTAINING Value
1174