Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://oit.cmc.msu.ru/lectures/AnalizeIT/Ch13_4.html
Дата изменения: Thu Jan 15 23:15:42 2004 Дата индексирования: Mon Oct 1 22:31:42 2012 Кодировка: Windows-1251 |
Часть XIII13.4. Структурированные типыИспользуя базовые типы и применяя небольшой набор способов построения, можно получать сложные типы. Способы можно применять в любой последовательности, повторно, многократно. Получаемые в результате типы называют структурированными. В ASN.1 определяется шесть способов структурирования: "последовательность" (SEQUENCE), "последовательность из" (SEQUENCE OF), "множество" (SET), "множество из" (SET OF), выборочный тип (CHOICE), селективный тип. Тип "последовательность" - это структурированный тип, определяемый ссылкой на фиксированный, упорядоченный список типов; каждое значение нового типа является упорядоченной последовательностью значений типов-компонентов, по одному на каждого из них. Пример: Credentials ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER } -- тип VisibleString - один из определенных в ASN.1 для -- представления строк знаков Любой тип-компонент может быть помечен как `OPTIONAL` или `DEFAULT_Значение`. Первое означает, что данный тип-компонент является необязательным при задании значения структурированного типа "последовательность". Второе означает задание значения, которое будет использоваться по умолчанию при пропуске значения соответствующего типа-компонента. Тип "последовательность из" - это структурированный тип, определяемый ссылкой на один из существующих типов; каждое значение нового типа является упорядоченной последовательностью произвольной длины из значений существующего типа. Пример: NamesOfMemberNations ::= SEQUENCE OF VisibleString --перечисление в порядке вступления Тип "множество" - это структурированный тип, определяемый ссылкой на фиксированный неупорядоченный список типов; каждое значение нового типа является неупорядоченным списком значений типов-компонентов, по одному на каждого из них. Пример: UserName ::= SET { personalName [0] IMPLICIT VisibleString, organizationName [1] IMPLICIT VisibleString, countryName [2] IMPLICIT VisibleString } Все типы-компоненты должны иметь различные теги. В данном примере исходные типы для типов-компонентов одинаковы, поэтому применено явное тегирование посредством контекстно-зависимых тегов. IMPLICIT означает, что при кодировании теги исходных типов VisibleString передаваться не будут (т.к. все равно различить элементы UserName можно будет только по заданным явно тегам). Любой тип-компонент может быть помечен как `OPTIONAL`: HCSStudent ::= SET { personalName [0] IMPLICIT VisibleString, group [1] IMPLICIT ENUMERATED { primary(0), secondary(1), external(2) } OPTIONAL --основная, если отсутствует } Тип "множество из" - это структурированный тип, определяемый ссылкой на единственный существующий тип; каждое значение нового типа является неупорядоченным списком из значений существующего типа. Пример: Keywords ::= SET OF VisibleString --в произвольном порядке Выборочный тип - это структурированный тип, определяемый указанием фиксированного неупорядоченного списка различных типов; каждое значение нового типа является значением одного из типов-компонентов. Пример: FileIndentifier ::= CHOICE { relativeName [0] IMPLICIT VisibleString, --имя файла (например, MarchProgressReport) absoluteName [1] IMPLICIT VisibleString, --имя файла и содержащий это имя каталог, --например, Williams/MarchProgressReport serialNumber [2] IMPLICIT INTEGER --идентификатор, присвоенный файлу системой } При рассмотрении простых типов был назван тип NULL. Можно показать пример использования этого типа: PatientIdentifier ::= SEQUENCE { name VisibleString, roomNumber CHOICE { INTEGER, NULL --в случае выбывающего пациента-- } } --Примечание: тот же результат может быть достигнут с помощью --параметра `OPTIONAL`. Селективный тип - это структурированный тип, определяемый указанием одного из типов-компонентов выборочного типа. Пример: FileAttribute ::= CHOICE { date-last-used INTEGER, file-name VisibleString }
CurrentAttributes ::= SEQUENCE { date-last-used file-name Здесь применен селективный тип при определении типов-компонентов типа CurrentAttributes.
Возможное значение CurrentAttributes:
{ date-last-used 27,
file-name "PROGRAM" }
|