20 Enumerated類型標識
20.1 enumerated類型應該引用EnumeratedType標識。
Enumerated ::=
ENUMERATED “{” Enumerations ”}”
Enumerations ::=
RootEnumeration
| RootEnumeration “,” “…”ExceptionSpec
| RootEnumeration “,” “…”ExceptionSpec “,” AdditionalEnumeration
RootEnumeration ::= Enumeration
AdditionalEnumeration ::= Enumeration
Enumeration ::= EnumerationItem |EnumerationItem ”,” Enumeration
EnumerationItem ::= identifier |NamedNumber
注1- 每個EnumerationType的值使用唯一的整型值來識別。然而,值本身並不預期都是整型的。EnumerationItem使用NamedNumber選項提供了控制值展現的能力來提供兼容擴展項的靈活性。
注2- RootEnumeration中的NamedNumber的值不排序,也不是鄰近的值;AdditionalEnumeration中的NamedNumber的值是排序的,但不一定是鄰近的值。
20.2 對於每個NamedNumber,在Enumeration中,identifier和SignedNumber應該和其他的identifier和SignedNumber不同。19.2和19.4節同樣適用與每個NamedNumber。
20.3 在EnumerationType中的每個EnumerationItem的identifier分配連續的非負整數。對於RootEnumeration連續的整數從0開始,但是要排除使用分配了NamedNumber的EnumerationItem。
注- EnumerationItem分配一個整型值是爲了在編碼規則上給予協助。它不在其他ASN.1規範上使用。
20.4 在類型中,每個新的EnumerationItem的值應該大於之前定義的所有AdditionalEnumeration。
20.5 當AdditionalEnumeration中使用NamedNumber定義EnumerationItem,它的值應該不同與所有在這類型中之前定義的EnumertaionItem,不管之前定義的EnumerationItem是不是在根枚舉類型中。例如:
A ::= ENUMERATED {a, b, …, c(0)} --無效,因爲a和c都等於0
B ::= ENUMERATED {a, b, …, c, d(2) } -- 無效,因爲c和d都等於2
C ::= ENUMERATED {a, b(3), …, c(1)} -- 有效,c=1
D ::= ENUMERATED {a, b, …, c(2)} -- 有效,c=2
20.6 當EnumerationItem不是定義在RootEnumeration中的時候,在AdditionalEnumeration中的第一個EnumerationItem的值的identifier(不是NamedNumber)應該是最小值。在AdditionalEnumeration中定義的之前的EnumerationItem應該是較小值。例如以下都是有效的:
A ::= ENUMERATED {a, b, …, c} -- c = 2
B ::= ENUMERATED {a, b, c(0), …, d} -- d= 3
C ::= ENUMERATED {a, b, …, c(3), d} -- d= 4
D ::= ENUMERATED {a, z(25), …, d} -- d = 1
20.7 enumerated類型標籤是universal類型,值10.
20.8 enumerated類型的值應該使用EnumeratedValue標識定義,或當使用XMLValue時候,使用XMLEnumeratedValue標識定義,表達式如下:
EnumeratedValue ::= identifier
XMLEnumeratedValue ::=
EmptyElementEnumerated
| TextEnumerated
EmptyElementEnumerated ::= “<”&identifier ”/>”
TextEnumerated ::= identifier
20.9 如果EmptyElementEnumerated出現在XMLValueAssignment中,那麼TextEnumerated就不應該出現在XMLValueAssignment中。
20.10 EnumeratedValue和XMLEnumeratedValue中的identifier應該和EnumeratedType序列中被選中的值的identifier相等。
20.11在enumerated類型的值標識實例中,名稱應該是Enumeration的identifier,引用名稱應該和identifier有關。