Перейти в оглавлению раздела

Часть XIII

13.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).



Предыдущая глава Оглавление Следующая глава