欢迎来到天天文库
浏览记录
ID:38463011
大小:269.00 KB
页数:29页
时间:2019-06-13
《2.11子类型约束》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2.11子类型约束2.11.1单值约束(SingleValueConstraint)最简单的的子类型约束就是单值约束,即将一个类型限制为一个值,以圆括号将该值列在类型声明之后即可,如:Two::=INTEGER(2) Day::=ENUMERATED{monday(0),tuesday(1),wednesday(2),thursday(3),friday(4),saturday(5),sunday(6)}Wednesday::=Day(wednesday) FourZ::=IA5String("ZZZZ") Afters::=CHOICE{cheeseIA5S
2、tring,dessertENUMERATED{profiterolles(1),sabayon(2),fraisier(3)}}CompulsoryAfters::=Afters(dessert:sabayon)如果该值的选择可以是多个中的一个,则可以用“
3、”将被选值列出,如:WeekEnd::=Day(saturday
4、sunday)PushButtonDial::=IA5String("0"
5、"1"
6、"2"
7、"3"
8、"4"
9、"5"
10、"6"
11、"7"
12、"8"
13、"9"
14、"*"
15、"#")2.11.2类型包含约束(TypeInclusionConstraint)当
16、声明一个类型和另一个类型拥有同样的约束时,只需要将被参考类型列出,如:FrenchWeekEnd::=Day(WeekEnd)还可以这样使用:LongWeekEnd::=Day(WeekEnd
17、monday)注意:在1994以前的标准中必须使用INCLUDES关键字,以后的标准不再是必须的。2.11.3值域约束(ValueRangeConstraint)对于数学中的整数和实数,可以用区间来约束。在ASN.1中使用“..”来表示区间,“<”用来限定边界,如:Number::=INTEGERFrom3to15::=Number(3..15)From3exclude
18、dTo15excluded::=Number(3<..<15)关键字MIN和MAX用来表征基本类型的最小、最大值。 对于实数类型,下面两个定义:T::=REAL(0..19、约束,如:Exactly31BitsString::=BITSTRING(SIZE(31)) StringOf31BitsAtTheMost::=BITSTRING(SIZE(0..31)) EvenNumber::=INTEGER(220、421、622、823、10)EvenLengthString::=IA5String(SIZE(EvenNumber)) NonEmptyString::=OCTETSTRING(SIZE(1..MAX))前两个类型的区别在于,第二个的长度是一个区间,从0到31;而第一个的长度固定是31。 对SEQUENCEOF和SETOF的约束,如:24、ListOfStringsOf5Characters::=SEQUENCEOFPrintableString(SIZE(5)) ListOf5StringsOf5Characters::=SEQUENCE(SIZE(5))OFPrintableString(SIZE(5))2.11.5字符表约束(AlphabetConstraint)主要是对字符串类型的值进行约束,如:Morse::=PrintableString(FROM("."25、"-"26、""))IDCardNumber::=NumericString(FROM("0".."9"))PushButtonDi27、alSequence::=IA5String(FROM("0".."9"28、"*"29、"#"))下面这个类型定义,虽然没有错,但却没有意义:WrongType::=IA5String(FROM("Albert".."Zoe"))因为字符串类型定义需要声明字符而不是字符串。 下面两个定义是等价的:Dna::=PrintableString(FROM("TAGC")) Dna::=PrintableString(FROM("T"30、"A"31、"G"32、"C"))2.11.6正则表达式约束(RegularExpressionContraint)也是用于对字符串值的约束,通过关33、键字PATTERN来声明具体的正则表达
19、约束,如:Exactly31BitsString::=BITSTRING(SIZE(31)) StringOf31BitsAtTheMost::=BITSTRING(SIZE(0..31)) EvenNumber::=INTEGER(2
20、4
21、6
22、8
23、10)EvenLengthString::=IA5String(SIZE(EvenNumber)) NonEmptyString::=OCTETSTRING(SIZE(1..MAX))前两个类型的区别在于,第二个的长度是一个区间,从0到31;而第一个的长度固定是31。 对SEQUENCEOF和SETOF的约束,如:
24、ListOfStringsOf5Characters::=SEQUENCEOFPrintableString(SIZE(5)) ListOf5StringsOf5Characters::=SEQUENCE(SIZE(5))OFPrintableString(SIZE(5))2.11.5字符表约束(AlphabetConstraint)主要是对字符串类型的值进行约束,如:Morse::=PrintableString(FROM("."
25、"-"
26、""))IDCardNumber::=NumericString(FROM("0".."9"))PushButtonDi
27、alSequence::=IA5String(FROM("0".."9"
28、"*"
29、"#"))下面这个类型定义,虽然没有错,但却没有意义:WrongType::=IA5String(FROM("Albert".."Zoe"))因为字符串类型定义需要声明字符而不是字符串。 下面两个定义是等价的:Dna::=PrintableString(FROM("TAGC")) Dna::=PrintableString(FROM("T"
30、"A"
31、"G"
32、"C"))2.11.6正则表达式约束(RegularExpressionContraint)也是用于对字符串值的约束,通过关
33、键字PATTERN来声明具体的正则表达
此文档下载收益归作者所有