17 定义类型和值
17.1 类型应该通过Type标识定义。
Type ::= BuiltinType | ReferencedType |ConstraintedType
17.2 Asn.1内嵌类型通过BuiltinType标识定义,BuiltinType定义如下:
BuiltinType ::=
BitStringType
| BooleanType
| CharacterStringType
| ChoiceType
| DateType
| DateTimeType
| DurationType
| EmbeddedPDVType
| EnumeratedType
| ExternalType
| InstanceOfType
| IntegerType
| IRIType
| NullType
| ObjectClassFieldType
| ObjectIdentifierType
| OctetStringType
| RealType
| RelativeIRIType
| RelativeOIDType
| SequenceType
| SequenceOfType
| SetType
| SetOfType
| PrefixedType
| TimeType
| TimeOfDayType
绝大多数BuiltinType标识在以下章节定义除非另作说明。
BitStringType 22
BooleanType 18
CharacterStringType 40
ChoiceType 29
DateType 38.4.1
DateTimeType 38.4.3
DurationType 38.4.4
EmbeddedPDVType 36
ExternalType 37
InstanceOfType X681 附录C
IntegerType 19
IRIType 34
NullType 24
ObjectClassFieldType X681,14.1
ObjectIdentifierType 32
OctetStringType 23
RealType 21
RelativeIRIType 35
RelativeOIDType 33
SequenceType 25
SequenceOfType 26
SetType 27
SetOfType 28
PrefixedType 31
TimeType 38.1.1
TimeOfDayType 38.4.2
17.3 ASN.1引用类型通过ReferencedType标识定义。
ReferencedType ::=
DefinedType
| UsefulType
| SelectionType
| TypeFromObject
| ValueSetFromObjects
ReferencedType标识提供了引用其他类型的一种可选方式(最终引用内嵌类型)。各种不同的ReferencedType以及他们所能引用的类型在以下章节定义,除非另作说明:
DefinedType 14.1
UsefulType 45.1
SelectonType 30
TypeFromObject X681,15
ValueSetFromObjects X681,15
17.4 ConstrainedType在49章定义。
17.5 本规范要求使用NamedType标识指定set,sequence和choice类型组件。NamedType标识定义如下:
NamedType ::= identifier Type
17.6 identifier用来在内部子类型约束和在组件关系约束中唯一的引用set,sequence或choice类型值标识组件(详见X682)。它不是类型的一部分,也不会对类型产生影响。
17.7 类型的值应该使用Value标识或XMLValue标识定义:
Value ::=
BuiltinValue
| ReferencedValue
| ObjectClassFieldValue
XMLValue ::=
XMLBuiltinValue
| XMLObjectClassFieldValue
注1-ObjectClassFieldValue和XMLObjectClassFieldValue在X681,14.6中定义。
注2- XMLValue只在XMLTypedValue中使用。
17.8 如果XML Value表达式在XML起始标签之后紧跟XML终止标签,或许还通过空白字符分隔(例如:<field></field>),这两个XML标签和可能的空白字符可以使用单个XML空白标签代替(<field/>)。
注-除了12.1.4约定的空白字符插入方式外的其他空白字符出现在起始标签的结束符“>”和终止标签的起始符“<”之间,不满足以上约束条件。
17.9 ASN.1内嵌类型的值通过XMLBuiltinValue(见17.10)和BuiltinValue标识定义,定义如下:
BuiltinValue ::=
BitStringValue
| BooleanValue
| CharacterStringValue
| ChoiceValue
| EmbeddedPDVValue
| EnumratedValue
| InstanceOfValue
| IntegerValue
| IRIValue
| NullValue
| ObjectIdentifierValue
| OctetStringValue
| RealValue
| RelativeIRIValue
| RelativeOIDValue
| SequenceVlaue
| SequenceOfValue
| SetValue
| SetOfValue
| PrefixedValue
| TimeValue
每个BuiltinValue标识被对应的BuiltinType标识定义。
17.10 XMLBuiltinValue定义如下:
XMLBuiltinValue ::=
XMLBitStringValue
| XMLBooleanValue
| XMLCharacterStringValue
| XMLChoiceValue
| XMLEbeddedPDVValue
| XMLEnumratedValue
| XMLExternalValue
| XMLInstanceOfValue
| XMLIntegerValue
| XMLIRIValue
| XMLNullValue
| XMLObjectIdentifierValue
| XMLOctetStringValue
| XMLRealValue
| XMLRelativeIRIValue
| XMLRelativeOIDValue
| XMLSequenceValue
| XMLSequenceOfValue
| XMLSetValue
| XMLSetOfValue
| XMLPrefixedValue
| XMLTimeValue
每个XMLBuiltinValue标识由对应的BuiltinType标识定义。
17.11 ASN.1引用值通过ReferencedValue标识定义:
ReferencedValue ::=
DefinedValue
| ValueFromObject
ReferencedValue标识提供了引用其他值(最终引用内嵌值)的可选途径。多种类型的ReferencedValue标识和他们各自的引用定义在以下章节定义(在本规范中除非另行说明):
DefinedValue 14.1
ValueFromObject X681,15
17.12 不管类型是BuiltinType,ReferencedType或ConstrainedType,它的值可以被定义为该类型的BuiltinValue或ReferencedValue。
17.13 使用NamedType标识引用的类型值应使用NamedValue标识定义或作为XMLValue一部分时使用XMLNamedValue标识定义。表达式如下:
NamedValue ::= identifier Value
XMLNamedValue ::= “<”&identifier”>”XMLValue”<”&identifier”>”
identifier和NamedType中使用的identifier是同一个定义。
注- identifier是标识的一部分,它不构成值本身的部分。他用来唯一的引用set,sequence或choice类型的组件。
17.14 在类型定义中隐式(详见13.4)或显示的呈现一个扩展标记(详见第6章)对值标识没有任何影响。因此,对于某类型的值标识来说扩展标记是否存在都是一样的。
注- 50.8节禁止使用子类型约束的值标识引用非根扩展类型的父类型的值。