X680 20 Enumerated类型标识

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有关。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章