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節禁止使用子類型約束的值標識引用非根擴展類型的父類型的值。