2017-04-20 43 views
1

例如,假設我定義是這樣的: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,這是完全一樣的,但height被限制爲150。我可以以某種方式重新使用已定義Human和完善那個描述?

回答

2

我不知道你怎麼定義繼承,但是你可以用人力來定義ShortHuman如下:

ShortHuman :: =人(含組件{身高(120..150)})

這會限制你想要的高度。

其實,這可能是更好的使用以下命令:

ShortHuman :: =人(含組件{...,高度(120..150)})

的部分規範不對未列出的組件進行任何限制,而完整規範(不包含...)將要求未列出的可選組件(如年齡)不存在。

+0

謝謝。這正是我所期待的。也許繼承,這不是在這種情況下最合適的名稱。 –

0

ASN.1本身並不使用術語「繼承」。附件C,X.680中的「類型和值兼容性規則」討論了ASN.1類型之間的關係,如果你想閱讀它的話。

你可以使用參數來定義人與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 vs. Short Human中使用不同的字符串類型作爲「name」。 X.683涉及參數化。