Внешний тип (EXTERNAL) может быть определен с помощью нотации АСН.1 следующим образом:
EXTERNAL : : = [UNIVERSAL 8] IMPLICIT SEQUENCE {direct-reference OBJECT IDENTIFIER OPTIONAL, indirect-reference INTEGER OPTIONAL, data-value-descriptor ObjectDescriptor OPTIONAL, encoding CHOICE
{single-ASNI-type [0] ANY,
octet-aligned [1] IMPLICIT OCTET STRING, arbitrary [2] IMPLICIT BIT STRING}}
Когда для данного значения внешнего типа («EXTERNAL») не используется диалог по установлению правил кодирования на уровне представления, а используется предварительная договоренность относительно синтаксиса передачи, то в значении должен присутствовать идентификатор объекта для прямой ссылки («direct-reference OBJECT IDENTIFIER»). В этом случае идентификация множества значений осуществляется посредством идентификатора объекта (являющегося прямой ссылкой на абстрактный синтаксис) и подставляемого в поле «идентификатора объекта для прямой ссылки» («direct reference OBJECT IDENTIFIER»). В этом случае правила кодирования также определяются с использованием осуществленной ранее регистрации абстрактного синтаксиса и целочисленная косвенная ссылка (indirect-reference INTEGER») не используется.
Когда используется диалог по установлению правил кодирования на уровне представления для данного значения внешнего типа («EXTERNAL»), то должна быть задана «целочисленная косвенная ссылка» («indirect-reference INTEGER»). В этом случае идентификатором множества значений данных является целое число, являющееся ссылкой на конкретное использование абстракт- його синтаксиса. Это число называется идентификатором контекста представления и подставляется в поле «целочисленная косвенная ссылка» (indirect-reference INTEGER»). Если диалог по установлению правил кодирования на уровне представления завершен, то идентификатор контекста представления также идентифицирует правила кодирования (синтаксис передачи), применяемые к данному значению данных, при этом «идентификатор объекта для прямой ссылки» («direct reference OBJECT IDENTIFIER») не задается. Если диалог по установлению правил кодирования на уровне представления не завершен, то значение идентификатора объекта также необходимо для идентификации используемых в данный момент правил кодирования (синтаксиса передачи). При использовании диалога по установлению правил кодирования допустимость (или необходимость) элемента «идентификатор объекта для прямой ссылки» («direct reference OBJECT IDENTIFIER») должна быть указана в комментарии, описывающем использование обозначения «EXTERNAL»), если же соответствующее указание отсутствует, то этот идентификатор не должен использоваться.
Примечания:
Следствием из пп. 32.5 и 32.6 является требование обязательного присутствия по крайней мере одного из вариантов «прямая ссылка» или «косвенная ссылка».
Если диалог по установлению параметров на уровне представления используется, но не завершен, то используются обе ссылки.
Если рассматриваемое значение данных является значением какого-либо одного типа данных, определенного с помощью АСН.1, и если правила кодирования для этого значения данных те же, что и для всего внешнего типа («EXTERNAL»), то в конкретной реализации на стороне отправителя может быть использован любой из вариантов элемента «кодовое представление» («encoding»):
single-ASNl-type octet-aligned arbitrary
Если кодовое представление данных, использующее правила кодирования, установленные в результате предварительной договоренности или в результате диалога по установлению параметров, имеет целое число октетов, то в конкретной реализации на стороне отправителя может быть использован любой из следующих вариантов элемента «кодовое представление» («encoding») :
octet-aligned arbitrary
Примечание. Если значение данных является последовательностью значений, относящихся к различным типам АСИ. I, и правила кодирования предписывают простую постановку друг за другом строк октетов, полученных применением базовых правил кодирования к каждому нз значений разных типов, то такое значение относится К категории, описываемой в данном пункте, а не к категории, описанной в п. 32.7.
Если кодовое представление значения данных, использующее правила кодирования, установленные в резулыате предварительной договоренности или в результате диалога по установлению параметров, содержит не целое число актетов, то должен использоваться следующий вариант элемента «кодовое представление («encoding»):
arbitrary
Если для элемента «кодовое представление» («encoding») выбран вариант «единственный тип АСН.1» («single-ASNI- type»), то вместо «ANY» должен быть подставлен тип значения, подлежащего кодированию.
Примечание. Множество значений, которые могут встретиться в этом случае определяются осуществленной ранее регистрацией значения вида «идентификатор объекта», задаваемого «прямой ссылкой» («direct reference»), и/или целочисленного значения, задаваемого «косвенной ссылкой» («indirect reference»),
Если для элемента «кодовое представление» («encoding») выбран вариант «октетио-выравненное» («octet-aligned»), то значение данных должно быть закодировано в соответствии с синтаксисом передачи, установленным в результате предварительной договоренности или в результате диалога по установлению параметров, и полученные в результате октеты должны составлять значение — строку актетов.
Если для элемента «кодовое представление» («encoding») был выбран вариант «произвольное» («arbitrary»), то значение данных должно быть закодировано в соответствии с синтаксисом передачи, установленным в результате предварительной договоренности или в результате диалога по установлению правил кодирования, а результат должен быть значением — строкой битов. ' ’ .
Тег этого типа должен соответствовать определению типа в п. 32.4.
Обозначения для записи значения должны быть обозначениями для записи значения типа, определенного в п. 32.4.
ТИП «ОПИСАТЕЛЬ ОБЪЕКТА»
Ссылка на этот тип осуществляется с помощью имени ObjectDeScriptor.
Этот тип составляют тексты, ориентированные на восприятие человеком и предназначенные для описания информационных объектов. Текст, являющийся значением данного типа, необязательно должен идентифицировать информационный объект, но предполагается, что использование одного и того же текста для описания разных информационных объектов маловероятно.
Примечание. Желательно, чтобы значения типа «описатель объекта» («ObjectPescriptor») присваивались информационным объектам теми же службами, которые присваивает информационным объектам значення типа «идентификатор объекта» («OBJECT tOENTlFIER»).
Этот тин может быть определен с помощью нотации АСИ.і следующим образом:
ObjectDescriptor : : =»
[UNIVERSAL?] IMPLICIT
Graphicstring
«Графическая строка* («Graphicstring») содержит текст, описывающий информационный объект.
Тег этого типа должен соответствовать определению типа в п. 33.3. '
Обозначения для записи значения должны быть обозначениям»‘Для записи значения типа, определенного в п. 33.3
,ПРИЛОЖЕНИЕ 1
Обязательное
МАКРОНОТАЦИЯ
Введение
В АСН.1 предусмотрен способ, с помощью которого пользователь АСН.І может определить новую систему обозначений, с помощью которой он может строить те же типы данных, что и в АСН.1, и ссылаться на них, а также задавать значения этих типов. Эта новая система обозначений определяется с помощью обозначения нотации АСН.1 «Макроопределение». «Макроопределение» одновременно определяет как обозначения для построения типов и осуществления ссылок на них, так и обозначения для записи значений (п. 6.3, содержащий пример использования макронотации).
С помощью «Макроопределения» пользователь АСН.1 определяет новые обозначения с помощью некоторого множества продукций аналогично тому, как это делается в настоящем стандарте. Составитель макроопределения должен:
полностью определить синтаксис, который предполагается использовать для определения всех типов, обеспечиваемых данным макроопределением (это описание синтаксиса вызывается для синтаксического анализа каждый раз при появлении в обозначении типа АСН.1 имени макроопределения);
полностью определить синтаксис, который предполагается использовать для определения значений этих типов (это описание синтаксиса вызывается для синтаксического анализа каждый раз, когда ожидается значение типа, описанного с помощью макроопределения);
определить в виде значений стандартных типов АСН.1 (произвольного уровня сложности) получающиеся в результате типы и значения для всех случаев использования макрообозначений для записи значений.
Конкретное использование синтаксиса, определенного с помощью макроопределения, может содержать обозначения типов и значений , заданных в обычной нотации АСН.1. Эти типы или значения (присутствующие в конкретном использовании макрообозначений) могут быть присвоены на время выполнения синтаксического анализа локальным ссылкам на тип или локальным ссылкам на значение с помощью соответствующих конструкций в макроопределении. Возможно также включение в макроопределение присвоение ссылкам обычных определений типов АСН.1. Описанные выше присвоения активизируются, когда соответствующая синтаксическая категория макроопределения сопоставляется с элементом (или элементами), входящими в использование новой нотации. Время их действия ограничено временем выполнения синтаксического анализа.
При синтаксическом анализе значения, заданного с помощью макронотации, присвоения, выполненные при синтаксическом анализе типа, продолжают быть доступными. Синтаксический анализ обозначения типа считается логически предшествующим анализу соответствующих значений.
Каждое «Макроопределение» определяет систему обозначений (синтаксис) для определения типа и систему обозначений (синтаксис) для определения значений. Тип данных АСН.1, определенный с помощью макрообозначения типа, может зависеть (но необязательно зависит) от макрообозначения конкретного значения, к которому относится макрообозначение типа. В этом отношении использование макронотации типа сходно с использованием выборочного типа («CHOICE») — тег типа в данном случае не определен. Поэтому в случаях вависимости типа от значения макронотация не может быть использована там, где требуется наличие известного тега; в этих случаях не может также применяться неявное задание тега.
Тип и значение, полученные в результате использования макронотации, определяются тем, какое значение (и каков его тип) присваивается (в результате последовательной обработки макроопределения типа, а затем макроопределения значения) локальной ссылке на значение, отмеченное в макроопределении ключевым словом VALUE.
Д о п о л н е н и е к набору знаков и множеству элементов АСН.1
В макронотации используются знаки « : » и «>».
Также используются элементы, описанные в последующих пунктах.
Макроссылка
Имя элемента ■— макроссылка.
«Макроссылка» должна состоять из последовательности знаков, удовлетворяющей требованиям, установленным для «Ссылки — НаТип» в п. 8.2, с тем отличием, что все буквы должны быть прописными. Внутри одного модуля одна и та же последовательность знаков не должна использоваться одновременно, как ссылка на тип и как макроссылка.
Ссылка на продукцию
Имя элемента — СсылкаНаПродукцию
«СсылкаНаПродукцию» должна состоять из последовательности знаков, удовлетворяющих требованиям, установленным для «СсылкиНаТип» в п. 8.2.
Локальная ссылка на тип
Имя элемента — ЛокальнаяСсылкаНаТип
«ЛокальнаяСсылкаНаТип» должна представлять собой последовательность знаков вида «СсылкаНаТип», определенного в п. 8.2. «ЛокальнаяСсылкаНаТип» используется в качестве идентификатора для типов, распознаваемых во время синтаксического анализа макрообозначения типа или значения.
Локальная ссылка на значение
Имя элемента — ЛокальнаяСсылкаНаЗначение
«ЛокальнаяСсылкаНаЗначение» должна представлять собой последовательность знаков вида «СсылкаНаТип», определенного в п. 8.2. «ЛокальнаяСсылка НаТип» используется в качестве идентификатора для значений, распознаваемых во время синтаксического анализа макрообозначения типа или значения.
Примечание. «ЛокальнаяСсылкаНаТип» должна начинаться с прописной буквы.
Элемент разграничения вариантов
Имя элемента — I.
Этот элемент состоит из единственного знака «I».
Элемент, обозначающий конец определения
Имя элемента — >
Этот элемент состоит из единственного знака «>».
Примечание. Элемент «<», обозначающий начало определений, приведен в п. 8.13.
Синтаксический терминальный элемент
Имя элемента ■— а-строка
Элемент «а-строка» («строка в кавычках») должен состоять из произвольного (возможно, равного нулю) количества знаков из знакового набора АСН.1 (см. разд. 7), выделенных кавычками (»). Знак (») представляется в «строке в кавычках» в виде пары знаков (»).
Примечание. Использование «строки в кавычках» («a-строки») в макрообозначении задает появление в соответствующем месте анализируемого синтаксиса знаков, заключенных между кавычками (»).Элементы — ключевые слова синтаксических категорий Имена элементов — «string»
«identifier»
«number»
«empty»
Элементы с приведенными выше именами должны состоять (в макроопределении) из последовательностей знаков, совпадающих с их именами, исключая кавычки (»). Эти элементы исгіользуюТся в макроопределении для задания вхождения в использовании новой нотации последовательностей знаков определенного вида. Вид последовательностей знаков, соответствующих каждому из элементов, определяется в табл. 8 посредством ссылки на раздел настоящего стандарта.