我无法弄清楚哪个是ASN.1中可扩展约束的设置操作的结果,如下所示:
A ::= INTEGER ( (1..64, ..., 100..128) INTERSECTION (1..32, ..., 33..120) )
B ::= INTEGER ( (1..64, ..., 100..128) UNION (1..32, ..., 33..120) )
C ::= INTEGER (1..64, ..., 100..128) (1..32, ..., 33..120)
这些类型的结果约束是什么?
感谢任何帮助。
答案 0 :(得分:1)
前两个定义无效,因为...只能出现在最顶层,而不是嵌套在多个括号内,因此A和B是无效定义。见ITU-T X.680第50.1和50.5条。
C在技术上也是无效的,因为对于“父类型”,值120不在1..64的基本范围内。如果将120更改为64,则有效约束如下:
C :: = INTEGER(1..32,...,33..64)
ITU-T X.680第50.10条规定如下:
50.10如果子类型约束被串行应用于通过应用可扩展约束可扩展的父类型,则其中使用的值表示法不应引用不在父类型的扩展根中的值。第二个(连续应用)约束的结果被定义为与约束已应用于父类型而没有其扩展标记和可能的扩展添加的结果相同。