Inheritance ASN.1是否支持某种形式的继承?

Inheritance ASN.1是否支持某种形式的继承?,inheritance,asn.1,Inheritance,Asn.1,例如,假设我定义如下: World-Schema DEFINITIONS AUTOMATIC TAGS ::= BEGIN Human ::= SEQUENCE { name UTF8String, first-words UTF8String DEFAULT "Hello World", age INTEGER (1..150) OPTIONAL, height INTEGER (120..200) } END 现在我想定义一个ShortHuman,它完全

例如,假设我定义如下:

World-Schema DEFINITIONS AUTOMATIC TAGS ::= 
 BEGIN
  Human ::= SEQUENCE {
   name UTF8String,
   first-words UTF8String DEFAULT "Hello World",
   age  INTEGER (1..150) OPTIONAL,
   height INTEGER (120..200)
 }
END

现在我想定义一个
ShortHuman
,它完全相同,但是
高度限制为150。我能否以某种方式重用已经定义的
Human
并细化该描述?

我不确定您如何定义继承,但您可以使用Human定义ShortHuman,如下所示:

ShortHuman::=Human(具有组件{height(120..150)})

这将限制您想要的高度

实际上,最好使用以下方法:

ShortHuman::=Human(带组件{…,高度(120..150)})


部分规范对未列出的组件没有任何限制,而完整规范(没有…,)将要求未列出的可选组件(如age)不存在。

ASN.1本身不使用术语“继承”。如果您想阅读,X.680中的附录C“类型和值兼容性规则”讨论了ASN.1类型之间的关系

您可以使用参数化来定义Human和ShortHuman,如下所示:

HumanBase { INTEGER : maxHeight } ::= SEQUENCE {
   name UTF8String,
   first-words UTF8String DEFAULT "Hello World",
   age  INTEGER (1..150) OPTIONAL,
   height INTEGER (120..maxHeight)
}

Human ::= HumanBase { 200 }

ShortHuman ::= HumanBase { 150 }

参数化是ASN.1的一个常用特性,用于“重用”适合某些模式的定义。请注意,您还可以使用类型为的参数,因此,作为一个不太可能的示例,您可以在类型Human和Short Human中为“name”使用不同的字符串类型。X.683包括参数化。

谢谢。这正是我想要的。也许在这种情况下,它不是最合适的名字。