例如,让我说我定义了这样的东西:
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
,它完全相同,但height
限制为150.我可以以某种方式重用已定义的Human
并优化该描述吗?
答案 0 :(得分:2)
我不确定如何定义继承,但您可以使用Human来定义ShortHuman,如下所示:
ShortHuman :: = Human(WITH COMPONENTS {height(120..150)})
这会根据您的需要限制高度。
实际上,最好使用以下内容:
ShortHuman :: = Human(WITH COMPONENTS {...,height(120..150)})
部分规范不对未列出的组件设置任何限制,而完整规范(没有......,)将要求不存在未列出的可选组件(例如年龄)。
答案 1 :(得分:0)
ASN.1本身并没有使用术语"继承"。附件C,"类型和价值兼容性规则"在X.680中讨论了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功能,用于"重用"适合某种模式的定义。请注意,您也可以使用类型的参数,因此,作为一个不太可能的示例,您可以为" name"使用不同的字符串类型。在人类与短人类型中。 X.683涵盖参数化。