Часть XIII13.5. ПодтипыПодтипом называется тип, значения которого задаются как подмножество значений другого типа (порождающего). В ASN.1 определяется целый ряд методов задания подтипа: a) одно значение; b) вложенный подтип; c) диапазон значений; d) ограничение размера; e) ограничение алфавита; f) внутренний подтип. Обозначение для подтипа имеет следующий вид: Подтип::= ПорождающийТип СпецификацияПодтипа | SET ОграничениеРазмера OF Тип | SEQUENCE ОграничениеРазмера OF Тип Здесь конкретный вид `СпецификацияТипа` определяется выбранным методом задания подмножества значений порождающего типа. Основные из них показаны ниже на примерах: Months ::= ENUMERATED { january(1), february(2), march(3), april(4), may(5), june(6), july(7), august(8), september(9), october(10), novermber(11), december(12) } First-quarter ::= Months ( january | february | march ) Second-quarter ::= Months ( april | may | june ) --При образовании последних двух подтипов использован --метод `одно значение` (неоднократно) First-half ::= Months ( INCLUDES First-quarter | INCLUDES Second-quarter ) --Здесь использован метод `выделенный подтип` AtomicNumber ::= INTEGER(1..104) --Диапазон значений TouchToneString ::= IA5String(FROM ( "0"|"1"|"2"|"3"|"4"|"5"| "6"|"7"|"8"|"9"|"*"|"#")| SIZE(1..63) ) --Комбинация ограничения алфавита (FROM) --и ограничения размера (SIZE) ParameterList ::= SET SIZE(0..63) OF Parameter --Ограничение размера (специальная нотация для SET OF) Имеется возможность определения общих порождающих структурированных типов и последующего создания на их базе подтипов (метод `внутренний подтип`). Пример: Envelope ::= SET { typeA TypeA, typeB TypeB OPTIONAL, typeC TypeC OPTIONAL } --Общий порождающий тип
ABEnvelope ::= Envelope (WITH COMPONENTS { ..., typeB PRESENT, typeC ABSENT }) --typeB должен всегда присутствовать, --а typeС - отсутствовать
AСEnvelope ::= Envelope (WITH COMPONENTS { ..., typeB ABSENT, typeC PRESENT }) --typeC должен всегда присутствовать, --а typeB - отсутствовать --`...` - означают, что используется частичная спецификация --подтипа, т.е. неуказанные типы-компоненты не изменяются Поскольку подтип - это подмножество порождающего типа, то в последних примерах нельзя добавить новые компоненты или каким-то иным способом расширить множество значений (например, нельзя для typeA указать вид ограничения присутствия ABSENT). |