Каждое «Значение» в «СпискеЗначений» должно быть обозначением некоторого значения «Типа», который используется в последовательности «Тип-МноЖествоИз».
Примечания:
Порядок следования значений-компонентов не имеет йикакого семантического значення.
К. правилам кодирования не Предъявляются требования сохранения порядка следования этих значений. ;
ОБОЗНАЧЕНИЯ ВЫБОРОЧНЫХ ТИПОВ
Обозначения для определения выборочного типа (п. 3.25), ИСХОДЯ <<з имеющихся других типов, должны иметь ВИД «ЙЫбО’ рочный Тип »;
ВыборочнынТип : : - СН01СЕ{Спйсок-ТипоВ-Вариантов) СпнсокТииов-Вариантов ■: : ?=
ПопменованныйТип |
СпирокТппов-Вариантов, ПоименованныйТип
11 р и м е ч а н и я;
Правила кодирования обеспечивают идентичность способа кодирования выбранного значения, выборочного типа способу кодирования такого же значения типа-вяриаига. ' ...
Кодирований значений «ВыборочногоТипа» с едийстрейнйм тйпом-вариай- том ■ «ПоименбванныЙТпп» й «СпискеТийов-Вариантов» ііейоэйожно отличить от Кодирования . соответствующих значений в случае прямого задания «Типа», ПХОДЯІПСІО в последовательность «ПойменованныйТиП». ■
Все типы, входящие в «СписокТипов-Вариаитов», должны иметь различные теги (разд. 24).
. Тег выборочного типа следует считать переменной, ГІрн выборе конкретного значения выборочного типа его тег становится равным тегу того типа-варианта, к которому относится значение.
. Если выборочный тип используется в таких конструкциях, где требованием настоящего стандарта является использование типов с различными тегами (пп. 18.3, 20.3 и 22.2), то теги всех типов, определенных в «СпискеТипов-Вариантов» должны отличаться от тегов других типов (разд. 24). Приведенные ниже примеры иллюстрируют это требование. Примеры 1 и 2 являются примерами правильного использования нотации. Пример 3 является примером неправильного использования нотации, поскольку теги типов d и f, а также eng совпадают.
Примеры:
1. А : : = CHOICE
{b В
с NULL)
В : : = CHOICE
{d [0] NULL,
е [і] NULL}
A : : = CHOICE
{b, B,
с C}
В : : = CHOICE
{d [0] NULL
e [1] NULL}
C : : = CHOICE
{f [2] NULL,
g [3] NULL}
:3. Пример неправильного описания
A : : = CHOICE
{b, B,
с C}
В : : = CHOICE
{d [0] NULL
e [1] NULL}
C : : = CHOICE
{f [0] NULL,
g [1] NULL}
. Все «Идентификаторы» (если они заданы) в последовательностях «ПоименованныйТип», входящих в «СписокТипов-Ва- риантов», должны быть различными.
. Если выборочный тип используется в таких конструкциях, где требованием настоящего стандарта является использование «ПоименованныхТипов» с различными «Идентификаторами», то «Идентификаторы» если они заданы, всех «Поименованных- Типов» в «СпискеТипов-Вариантов» должны отличаться от всех' «Идентификаторов» других «ПоименованныхТипов» (входящих в- конструкцию).
. Обозначения, используемые для определения значения выборочного типа, определяются продукцией «ВыборочноеЗначе- ние»:
ВыборочноеЗначение : : = ПоименованноеЗначение
. Если «ПоименованноеЗначение» содержит «Идентификатор», то оно должно быть записью значения того типа в «Спис- кеЗначений-Вариантов», который имеет тот же «Идентификатор». Если «ПоименованноеЗначение» не содержит «Идентификатора», то оно должно быть записью значения одного из тех типов в «Спис- кеЗначений-Вариантов», которые не имеют «Идентификатора».
Примечание. Пропуск идентификатора в «ПоименованномТипе» может привести к неоднозначности.
ОБОЗНАЧЕНИЯ СЕЛЕКТИВНЫХ ТИПОВ
Поименованный тип в «СпискеТипов-Вариантов» «Выбо- рочногоТипа» может быть задан с помощью обозначения «СелективныйТип»:
СелективныйТип : : = Идентификатор<Тип,
где «Тип» является обозначением, задающим «ВыборочныйТип», а «Идентификатор» является одним из «Идентификаторов» «ПоименованныхТипов» (входящих в «ВыборочныйТип»).
Примечание. «СелективныйТип» может использоваться как в качестве «ПоименованногоТипа», и в этом случае «Идентификатор» используется, при записи значения, так и в качестве «Типа» в «ПоименованномТипе», и в этом случае его «Идентификатор» при записи значения не используется.
Обозначения для записи значения селективного типа определяются продукцией «СелективноеЗначение»:
СелективноеЗначение : : = ПоименованноеЗначение
При этом в «ПоименованноеЗначение» входит идентификатор, присутствующий в соответствующей последовательности «СелективныйТип», только в том случае, когда «СелективныйТип» используется как «ПоименованныйТип».
ОБОЗНАЧЕНИЯ ТЕГИРОВАННЫХ ТИПОВ
Тегированный тип (п. 3.24) является новым типом, изоморфным исходному типу, но имеющим другой тег. При всех способах кодирования обеспечивается отличие значения нового типа от значения исходного типа. Тегированный тип используется главным образом в тех случаях, когда требованием настоящего стандарта является использование типов с различными тегами (пп. 18.3, 20.3, 22.2, 22.4 и 25.2).
Г! р и м е ч а н и е. Различные теги могут понадобиться для правильного декодирования значения получателем в тех случаях, когда протокол допускает передачу значений различных типов данных в произвольный момент времени.
Обозначения для тегированного тина должны иметь вид «ТегнрованнынТии»:
ТегированныйТип : : = Тег Тип |
Тег IMPLICIT Тип
Тег : = [Класс НомерВКлассе}
. . . НомерВКлассе : ; = Число | ОнределенноеЗначьи-twt- 1
Класс : : =* UNIVERSAL
APPLICATION
PRIVATE пусто
«ОпределенноеЗначение» должно быть ссылкой на неотрицательное значение целочисленного типа или производного от целочисленного помеченного типа.
Новый тир изоморфен исходному типу, но имеет тег с классом, заданным последовательностью «Класс», и номер, заданный последовательностью «НомерВКлассе», если для после- ч довательности «Класс» был выбран вариант, отличный от «пусто»; если же был выбран вариант «пусто», то тег относится к контекстно-зависимому классу и имеет номер, заданный последовательностью «НомерВ Классе».
Для типов, определяемых вне рамок настоящего стандарта, «Класс» не должен быть универсальным классом («UNIVERSAL»).
Примечание. Иейользовапие тегов универсального класса периодически согласовывается между ЙСО И МККТТ.
Если «Класс» тега является прикладным («APPLICATION»), то тот же самый «Тег» не может быть использован повторно в том же самом модуле.
Если «Класс» тега явлйотся пользовательским («PRIVATE»), то тег доступен для нсйольэования по правилам, устанавливаемым организациями-пользователями.
Если «Классом» тега является «пусто», то на использование «ТйГа» не накладывается никаких ограничений, кроме тех, Которые вызваны требованиями различия тегов, сформулированными в пп. 18.3, 20.3 и 22.2,
Вариант «IMPLICIT» является ;боэдачением того, что для тех Правил кодирования, которые обеспечивают эту возможность, явное указание тега, который, имел исходный «Тйи», не требуемся при передаче данных.Примечание, Сохранение старого тега может оказаться полезным, еслн он относится к универсальному классу, и поэтому однозначно идентифицирует исходный тип при отсутствии информации об определении, с помощью АСН.1 нового типа. Однако с помощью варианта «IMPLICIT» обеспечивается минимальное количество октетов при передаче. Пример кодирования для использования варианта «LMPLICIT» дан в ИСО 8825 (ГОСТ ).
Вариант «IMPLICIT» нс должен использоваться, если тип, определенный последовательностью «Тип», . является выборочным («CHOICE») или произвольным типом («ANY»).
Обозначения для определения значения тегированного типа должны иметь вид «ТегированноёЗиачение»:
ТегированноеЗначение : : =° Значение, где «Значение» является обозначением значения того типа, который был задан последовательностью «Тип» в продукции «Тегироч ванныйТип».
ГІ р и м е ч а и и е. Отметим, чти в этом обозначении отсутствует «Тег».
ОБОЗНАЧЕНИЯ ПР0ИЗВОЛЬНОГ0 ТИПА
Обозначение для произвольного типа определяется продукцией «ПроизвольныйТнп»;
ПроизвольныйТнп : : — ANY ■ ■ ‘
Примечание. «ANY» используется в тех случаях, когда требуется дополнительная стандартизация. При использовании «ANt» до того, как станет возможным обмен информацией, требуется дополнительное описвние тиПов дан-’ ных и их семантики; соответствующее описание типа должно быть Подставлено вместо «ANY». Использование произвольного типа («ANY») в стандартах ЙСО или Рекомендациях МККТТ сопровождается, как правило, комментарием, указывающим источник Дополнительных описаний. -
Произвольный тип имеет неопределенный тег; он не дол-, жен использоваться в тех случаях, где требованием настоящего стандарта является использование типов с различными тегами (пп. 18.3, 20.3, 22.2 и 22.4). /
Запись значения йроизвольногО типа Должна осуществляться по правилам АСН.1 и определяется следующей продукци», ей «ПроизвольноеЗкачение».
ПроизвольноеЗяачение : : = Тиїі Значение,. .
где «Тип» ■*-*обозначение некоторого типа,, а «Значение» — обозначение для записи значения этого типа. .
О&03ЙАЧ£НИЯ ТИПА «ИДЕНТЙШКАІСЙ» ОБЪЕКТА» ;
Ссылка на тип «идентификатор объекта» (п. 3.31) должна иметь вид «Тип-ИдентификаторОбъекта»:
-. Тип-ИдентификаторОбъекта : : - OBJECT IDENTIFIER
Этот тип имеет тег универсального класса с номером 6.
Обозначения для записи идентификатора объекта должны иметь вид «Значение-ИдентификаторОбъекта»:
Значение-ИдентификаторОбъекта : : = {СписокКомпонентовИдОбъекта} | {ОпределенноеЗначение СписокКомпонентовИдОбъекта}
■СписокКомпонентовИдОбъекта : : =
КомпонентИдОбъекта :
КомпонентИдОбъекта СписокКомпонентовИдОбъекта
КомпонентИдОбъекта : : = ИменнаяФорма :
ЧисловаяФорма : Смешаннаяформа
Именная форма : : = Идентификатор
Числовая форма : : = Число : ОпределенноеЗначение Смешаннаяформа : : = Идентификатор (ЧисловаяФорма) 26.4. Определенное значение в продукции «ЧисловаяФорма» должно быть ссылкой на значение целочисленного типа или тегированного типа, производного от целочисленного.
Определенное значение в продукции «Значение-ИдентификаторОбъекта» должно быть значением целочисленного типа или тегированного типа, производного от целочисленного.
«ИменнаяФорма» используется только для тех компонентов идентификатора объекта, численные значения которых определены в приложениях 2—4 настоящего стандарта, и должна совпадать с одним из идентификаторов, определенных в этих приложениях.
«Число» в продукции «ЧисловаяФорма» должна быть числовым значением, присвоенным компоненту идентификатора объекта.
«Идентификатор» в продукции «Смешаннаяформа» задается в тех случаях, когда данному компоненту идентификатора объекта присвоено Целочисленное значение.
Семантическое значение идентификаторов задается {деревом идентификаторов объектов}. Дерево идентификаторов объектов является графом вида «дерево с корнем», причем корень дерева соответствует настоящему стандарту, вершины соответствуют службам — источникам идентификации, осуществляющим выделение ребер, исходящих из данной вершины. Каждому ребру дерева ставится в соответствие компонент идентификатора объекта, являющийся целочисленным значением. Каждому информационному объекту, подлежащему идентификации, соответствует в точности одна вершина (обычно — висящая вершина) и отсутствуют другие информационные объекты, которым назначена та дке вершина. Таким образом, информационный объект однозначно й .непротиворечиво идентифицируется последовательностью числовых значений (компонентов идентификаторов объектов), которые соответствуют ребрам в пути от корня графа до вершины, соответствующей данному информационному объекту.
Примечание. Значения вида «идентификатор объекта» состоят,, по крайней мере, из двух компонентов, как определяется в приложениях 2—4.
Значение вида «идентификатор объекта» представляет из себя упорядоченный список значений вида «компонент идентификатора объекта». Начиная с корня дерева идентификаторов объектов, каждое значение вида «компонент идентификатора объекта» соответствует ребру этого дерева. Последнее из этих значений, идентифицирует ребро, ведущее к вершине, соответствующей информационному объекту. Это тот самый информационный объект, который идентифицируется данным значением вида «идентификатор объекта». Существенной частью значения вида «компонент идентификатора объекта» является «именная форма» или «числовая форма», к которой сводится «именная форма». «Числовая форма» («NumberForm») представляет собой численное значение компонента идентификатора объекта.
Примечание. Как правило, информационный объект представляет собой класс информации (например формат файла), а не конкретный представитель этого класса (например конкретный файл). Таким образом, каждая вершина дерева задает некоторый информационный класс (определяемый некоторым описанием, на которое дается ссылка), а не какой-то объем информации, относящейся к этому классу.
В тех случаях, когда «Значение-ИдентификаторОбъек- та» включает «ОпределенноеЗначение», список компонентов идентификатора объекта, задаваемый этим «ОпределеннымЗначени- ем», ставится непосредственно перед компонентами, явно присутствующими в значении.