Государственный стандарт РФ ГОСТ Р ИСО/МЭК 8824-1-2001
"Информационная технология. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 1. Спецификация основной нотации"
(принят и введен в действие постановлением Госстандарта РФ от 6 сентября 2001 г. N 375-ст)
Information technology. Abstract Syntax Notation One (ASN.1). Specification of basic notation
Дата введения 1 января 2002 г.
Введен впервые
1 Область применения
Настоящий стандарт устанавливает нотацию, называемую абстрактной синтаксической нотацией версии один (АСН.1), которая используется для определения типов данных, значений и ограничений типов данных.
Стандарт определяет:
- ряд простых типов вместе с присвоенными им тегами и обозначения для ссылок на эти типы и задания их значений;
- методы построения новых типов из нескольких базовых и обозначения для определения этих типов, присвоения им тегов и задания их значений;
- наборы символов (через указания других стандартов) для использования в АСН.1;
- ряд полезных типов (используя АСН.1), на которые могут ссылаться пользователи АСН.1.
Нотация АСН.1 может применяться во всех случаях, когда требуется определять абстрактный синтаксис информации. Она, в частности (но не единственно), применяется для протоколов прикладного уровня. Ссылки на нотацию АСН.1 содержатся в других стандартах, определяющих правила кодирования для типов АСН.1.
2 Нормативные ссылки
В настоящем стандарте использованы ссылки на следующие стандарты:
ГОСТ 34.971-91 (ИСО 8822-88) Системы обработки информации. Взаимосвязь открытых систем. Спецификация услуг уровня представления для режима с установлением соединения (см. также Рекомендацию МСЭ-Т Х.216)
ГОСТ 34.972-91 (ИСО 8823-88) Системы обработки информации. Взаимосвязь открытых систем. Спецификация протокола уровня представления для режима с установлением соединения (см. также Рекомендацию МСЭ-Т Х.226)
ГОСТ Р ИСО/МЭК 7498-1-99 Информационная технология. Взаимосвязь открытых систем. Базовая эталонная модель. Часть 1. Базовая модель (см. также Рекомендацию МСЭ-Т Х.200)
ГОСТ Р ИСО/МЭК 8824-93 Информационная технология. Взаимосвязь открытых систем. Абстрактно-синтаксическая нотация версии 1 (АСН.1)
ГОСТ Р ИСО/МЭК 8824-2-2001. Информационная технология. Абстрактная синтаксическая нотация версии 1 (АСН.1). Часть 2. Спецификация информационного объекта (см. также Рекомендацию МСЭ-Т Х.681)
ИСО/МЭК 646-91* Информационная технология. 7-битный кодовый набор символов ИСО для информационного обмена
ИСО/МЭК 2022-94* Информационная технология. Структура кода символов и методы расширения
ИСО/МЭК 8824-3-98* Информационная технология. Абстрактная синтаксическая нотация версии 1 (АСН.1). Часть 3. Спецификация ограничения (см. также Рекомендацию МСЭ-Т Х.682)
ИСО/МЭК 8824-4-98* Информационная технология. Абстрактная синтаксическая нотация версии 1 (АСН.1). Часть 4. Параметризация спецификаций АСН.1 (см. также Рекомендацию МСЭ-Т Х.683)
ИСО/МЭК 8825-1-98* Информационная технология. Правила кодирования АСН.1. Спецификация базовых (BER), канонических (СER) и отличительных (DER) правил кодирования (см. также Рекомендацию МСЭ-Т Х.690)
ИСО/МЭК 8825-2-98* Информационная технология. Правила кодирования АСН.1. Спецификация упаковывающих правил кодирования (PER) (см. также Рекомендацию МСЭ-Т Х.691)
ИСО/МЭК 9834-1-93* Информационная технология. Взаимосвязь открытых систем. Процедуры работы полномочных органов регистрации ВОС. Часть 1. Общие процедуры (см. также Рекомендацию МСЭ-Т Х.660)
ИСО 6523-84* Обмен данными. Структура идентификаторов организаций
ИСО 8601-88* Элементы данных и форматы обмена. Информационный обмен. Представление дат и времени
ИСО/МЭК 10646-1-93* Информационная технология. Универсальный, многооктетный кодовый набор символов (UCS). Часть 1. Архитектура и основная многоязычная плоскость
Рекомендация МСЭ-Т Т.61 (1988) Репертуар символов и кодовые наборы символов для международных услуг телетекса
Рекомендация МСЭ-Т Т.100 (1988) Международный информационный обмен для интерактивного видеотекса
Рекомендация МСЭ-Т Т.101 (1994) Международное межсетевое взаимодействие и для услуг видеотекса
3 Определения
3.1 Спецификация информационного объекта
В настоящем стандарте используют следующие термины, определенные в ГОСТ Р ИСО/МЭК 8824-2:
а) информационный объект;
б) класс информационных объектов;
в) набор информационных объектов;
г) экземпляр типа;
д) тип поля класса объектов.
3.2 Спецификация ограничения
В настоящем стандарте используют следующие термины, определенные в ИСО/МЭК 8824-3:
а) ограничение связи компонентов;
б) табличное ограничение.
3.3 Спецификация параметризации АСН.1
В настоящем стандарте используют следующие термины, определенные в ИСО/МЭК 8824-4:
а) параметризованный тип;
б) параметризованное значение.
3.4 Определение услуг уровня представления
В настоящем стандарте используют следующие термины, определенные в ГОСТ 34.971:
а) абстрактный синтаксис;
б) имя абстрактного синтаксиса;
в) множество определенных контекстов;
г) значение данных уровня представления;
д) синтаксис передачи;
е) имя синтаксиса передачи.
3.5 Спецификация протокола уровня представления
В настоящем стандарте используют следующий термин, определенный в ГОСТ 34.972:
- идентификатор контекста представления.
3.6 Структура для идентификации организаций
В настоящем стандарте используют следующие термины, определенные в ИСО 6523:
а) выпускающая организация;
б) код организации;
в) Международный кодовый определитель (International Code Designator - ICD).
3.7 Универсальный многооктетный кодовый набор символов (UCS)
В настоящем стандарте используют следующие термины, определенные в ИСО/МЭК 10646-1:
а) основная многоязычная плоскость (Basic Multilingual Plane - BMP);
б) ячейка;
в) комбинированный символ;
г) графический символ;
д) группа;
е) ограниченное подмножество;
ж) плоскость;
и) строка;
к) выбранное подмножество.
3.8 Дополнительные определения
3.8.1 абстрактный символ: Множество информации, связанное с ячейкой в таблице, определяющей репертуар символов.
Примечание - Информация обычно включает в себя:
а) графический символ,
б) имя символа или
в) определение функций, связанных с символом при использовании в конкретном окружении.
3.8.2 абстрактное значение: Значение, определение которого основывается только на типе, независимо от его представления в любых правилах кодирования.
Примечание - Термин "абстрактное значение" часто используется в утверждениях, которые, вероятно, могут изменяться для различных используемых правил кодирования.
3.8.3 набор символов АСН.1: Набор символов, определенный в разделе 10, который используется в нотации АСН.1.
3.8.4 спецификация АСН.1: Совокупность одного или нескольких модулей АСН.1.
3.8.5 ассоциированный тип: Тип, который используется только для определения значения и нотации подтипа для типа.
Примечание - Ассоциированные типы определены в настоящем стандарте, когда необходимо сделать очевидным, что может быть существенное различие между тем, как тип определен в АСН.1 и как он кодируется. Ассоциированные типы не появляются в спецификациях пользователей.
3.8.6 тип "битовая строка": Простой тип, различными значениями которого являются упорядоченные последовательности из нуля, одного или нескольких бит.
Примечание - Когда необходимо передать встроенное кодирование абстрактного значения, использование типа "встроенное-здп" в общем случае предоставляет более гибкий метод для объявления или согласования характера кодирования, чем битовая строка.
3.8.7 булевский тип: Простой тип с двумя различными значениями.
3.8.8 символ: Член набора элементов, используемых для организации, управления или представления данных.
Примечание - Например, это подразумевает, что знак ударения и строчная 'е' - два разных символа во французской версии ИСО 646, а не единственный символ е.
3.8.9 символьный абстрактный синтаксис: Любой абстрактный синтаксис, значения которого специфицированы как набор символьных строк из нуля, одного или нескольких символов из некоторой заданной совокупности символов.
3.8.10 репертуар символов: Символы в наборе символов без какой-либо связи с их кодированием.
3.8.11 типы символьных строк: Простые типы, значениями которых являются строки символов из некоторого определенного набора символов.
3.8.12 символьный синтаксис передачи: Любой синтаксис передачи для символьного абстрактного синтаксиса.
Примечание - АСН.1 не поддерживает символьные синтаксисы передачи, которые не кодируют все символьные строки как кратные 8 бит.
3.8.13 выборочные типы: Типы, определяемые указанием списка различных типов; каждое значение выборочного типа происходит из значения одного из типов-компонентов.
3.8.14 тип компонента: Один из типов, указанных при определении CHOICE, SET, SEQUENCE, SET OF или SEQUENCE OF.
3.8.15 ограничение: Нотация, которая может быть использована вместе с типом для определения подтипа этого типа.
3.8.16 управляющие символы: Символы, появляющиеся в некоторых репертуарах символов, которым должно быть дано имя (и, возможно, определена функция относительно определенных окружений), но которым не присвоен графический символ и которые не являются символом пробела.
Примечание - NEWLINE и ТАВ являются примерами управляющих символов, которым назначены функции форматирования в среде печати. DLE является примером управляющего символа, которому назначена функция в окружении коммуникации.
3.8.17 Всемирное согласованное время (UTC): Шкала времени, поддерживаемая Международным бюро времени и служащая основой для согласованного распространения стандартных частот и сигналов времени.
Примечания
1 Источником этого определения является Рекомендация 460-2 Международной консультативной комиссии по радио (СС1R). Акроним UTC для всемирного согласованного времени также был введен CC1R.
2 UTC и среднее гринвичское время являются двумя альтернативными стандартами времени, которые для большинства практических задач определяют одно и то же время.
3.8.18 элемент: Член класса элементов, отличный от всех других элементов этого класса.
3.8.19 класс элементов: Тип (элементами которого являются его значения) или информационный объект (элементами которого являются все возможные объекты этого класса).
3.8.20 набор элементов: Один или несколько элементов одного и того же класса элементов.
3.8.21 тип "встроенное-здп": Тип, множество значений которого является объединением множеств значений во всех возможных абстрактных синтаксисах. Этот тип является частью спецификации АСН.1 и представляет значение, тип которого может быть определен внешне для данной спецификации АСН.1. Он также представляет идентификацию типа передаваемого значения и идентификацию правил кодирования, использованных для кодирования значения.
3.8.22 закодированный: Битовый результат применения правил кодирования к значению данного абстрактного синтаксиса.
3.8.23 правила кодирования (АСН.1): Правила, определяющие представление при передаче значений типов АСН.1. Правила кодирования позволяют получателю возможность распознать переданную информацию, предоставляя знания о типе.
Примечание - Для целей спецификации правил кодирования нотации различных указываемых типов (и значений), которые могут предусматривать альтернативные нотации для встроенных типов (и значений), не существенны.
3.8.24 перечислимые типы: Простые типы, значения которых задаются различными идентификаторами как часть нотации типа.
3.8.25 расширяющее дополнение: Одна из дополнительных нотаций в серии расширений. Для типов "множество", "последовательность" и для выборочного типа каждое расширяющее дополнение является добавлением либо одной расширяющей дополнительной группы, либо одного типа компонента. Для перечислимых типов оно является добавлением одного перечисления. Для ограничения оно является добавлением подтипа элемента.
Примечание - Расширяющие дополнения упорядочены как текстуально (следом за маркером расширения), так и логически (имеют возрастающие перечислимые значения и, в случае альтернатив CHOICE, возрастающие теги).
3.8.26 расширяющая дополнительная группа: Один или несколько компонентов типов "множество", "последовательность" или выборочного типа, объединенные скобками версии. Расширяющая дополнительная группа используется для ясной идентификации компонентов множества, последовательности или выбора, которые были добавлены в конкретной версии модуля АСН.1.
3.8.27 расширяющий дополнительный тип: Тип, содержащийся в расширяющей дополнительной группе, или единственный тип компонента, который сам является расширяющим дополнением (в этом случае он не содержится в расширяющей дополнительной группе).
3.8.28 расширяемое ограничение: Ограничение подтипа с маркером расширения.
3.8.29 точка вставки расширения: Место в определении типа, куда вставляются расширяющие дополнения. Это место является концом нотации типа, непосредственно предшествующего типу в серии расширений, если в определении типа имеется единственное многоточие, или находится непосредственно перед вторым многоточием, если в определении типа имеется пара маркеров расширения.
3.8.30 маркер расширения: Синтаксический признак (многоточие), включаемый во все типы, образующие серию расширений.
3.8.31 пара маркеров расширения: Два маркера расширения, между которыми вставлены расширяющие дополнения.
3.8.32 связанные расширением: Два типа, имеющие один и тот же корень расширения, один из которых создан путем добавления к другому нуля или нескольких расширяющих дополнений.
3.8.33 корень расширения: Расширяемый тип, который является первым типом в серии расширений. Он имеет либо маркер расширения без дополнительной нотации, отличной от комментариев и пропусков между маркером расширения и завершающей скобкой "}" или ")", либо пару маркеров расширения без дополнительной нотации, отличной от запятой, комментариев и пропусков между ними.
Примечание - Только корень расширения может быть первым типом в серии расширений.
3.8.34 серия расширений: Последовательность типов АСН.1, которые могут быть упорядочены таким образом, что каждый последующий тип образован добавлением текста в точке вставки расширения.
Примечание - Могут быть расширены как вложенные, так и невложенные типы.
3.8.35 расширяемый тип: Тип с маркером расширения.
3.8.36 внешняя ссылка: Ссылка на тип, значение, информационный объект и пр., определенные в некотором другом модуле, имя которого указывается в виде префикса к указываемому элементу.
Пример - ModuleName. TypeReference
3.8.37 внешний тип: Тип, который является частью спецификации АСН.1, представляющий значение, тип которого может быть определен внешне для данной спецификации АСН.1. Он также предоставляет идентификацию типа, значение которого представляется.
3.8.38 ложно: Одно из двух различающихся значений булевского типа (см. "истинно").
3.8.39 управляющий (тип): Определение типа или ссылка на тип, который влияет на интерпретацию части синтаксиса АСН.1, устанавливая, что часть синтаксиса АСН.1 относится к значениям в управляющем типе.
Нумерация пунктов приводится в соответствии с источником
3.8.39 bis определения идентичных типов: Два экземпляра продукции АСН.1 "Туре" (см. раздел 16), являющиеся определениями идентичных типов, если, после осуществления преобразований, указанных в приложении F, они являются идентично упорядоченными списками элементов АСН.1 (см. раздел 11).
3.8.40 целочисленный тип: Простой тип, различные значения которого являются всеми положительными и отрицательными целыми числами, включая нуль (как одно значение).
Примечание - Конкретные правила кодирования ограничивают диапазон целых чисел, но эти ограничения выбраны так, чтобы не сказываться на пользователях АСН.1.
3.8.41 элементы: Поименованные последовательности символов из набора АСН.1, определенного в разделе 9, которые используются для образования нотации АСН.1.
3.8.42 модуль: Один или несколько экземпляров использования нотации АСН.1 для типа, значения и т.п., объединенных с использованием нотации модуля АСН.1 (см. раздел 12).
3.8.43 вырожденный тип: Простой тип, состоящий из единственного значения, также называемого null.
3.8.44 объект: Строго определенная порция информации, определения или спецификации, которой требуется имя для идентификации ее использования в конкретном соединении.
3.8.45 тип "описатель объекта": Тип, различными значениями которого является человекочитаемый текст, предоставляющий краткое описание объекта.
Примечание - Значение описателя объекта обычно связано с единственным объектом. Недвусмысленно идентифицирует объект только значение идентификатора объекта.
3.8.46 идентификатор объекта: Значение (отличное от всех других таких значений), которое связано с объектом.
3.8.47 тип "идентификатор объекта": Простой тип, различные значения которого образуют множество всех идентификаторов объектов, выделенных в соответствии с правилами настоящего стандарта.
Примечание - Правилами ГОСТ Р ИСО/МЭК 9834-1 допускается широкий диапазон уполномоченных для независимого связывания идентификаторов объектов с объектами.
3.8.48 тип "строка октетов": Простой тип, различные значения которого являются упорядоченными последовательностями из нуля, одного или нескольких октетов, каждый из которых, в свою очередь, является упорядоченной последовательностью из восьми бит.
3.8.49 нотация открытого типа: Нотация АСН.1, используемая для обозначения множества значений из более чем одного типа АСН.1.
Примечания
1 В настоящем стандарте термин "открытый тип" используется как синоним термина "нотация открытого типа".
2 Все правила кодирования АСН.1 обеспечивают недвусмысленное кодирование значений одного типа АСН.1. Они не обязательно обеспечивают недвусмысленное кодирование "нотации открытого типа", представляющей значения из типов АСН.1, которые обычно не являются определенными на момент спецификации. До того, как абстрактное значение для этого поля может быть недвусмысленно определено, необходимо знание типа кодируемого значения.
3 Единственной нотацией открытого типа в настоящем стандарте является "ObjectClassFieldType", определенная в ГОСТ Р ИСО/МЭК 8824-2, где "FieldName" обозначает либо поле типа, либо поле значения переменной-типа. Нотация "ANY", которая определена в ГОСТ Р ИСО/МЭК 8824, была нотацией открытого типа.
3.8.50 порождающий тип (подтипа): Тип, который был ограничен при определении подтипа и который управляет нотацией подтипа.
Примечание - Порождающий тип сам может быть подтипом другого типа.
3.8.51 продукция: Часть формальной нотации, используемая для спецификации АСН.1.
3.8.52 действительный тип: Простой тип, различные значения которого (заданные в разделе 20) являются членами множества действительных чисел.
3.8.53 рекурсивное определение (типа): Множество определений АСН.1, которое не может быть упорядочено таким образом, чтобы все типы, используемые в конструкции, были определены до определения самой конструкции.
Примечание - В АСН.1 допускаются рекурсивные определения: пользователь нотации должен гарантировать, чтобы используемые значения (получающихся типов) имели конечные представления.
3.8.54 ограниченный тип символьных строк: Тип строки символов, которые берутся из фиксированного репертуара символов, идентифицированного в спецификации типа.
3.8.55 селективные типы: Типы, определенные указанием типа компонента выборочного типа, значениями которых являются именно значения этого типа компонента.
3.8.56 типы "последовательность": Типы, определенные указанием упорядоченного списка типов (некоторые из них могут быть объявлены как факультативные); каждое значение типа <последовательность> является упорядоченным списком значений, по одному из каждого типа компонентов.
Примечание - Когда тип компонента объявлен факультативным, значение типа "последовательность" не обязательно содержит значение этого типа компонента.
3.8.57 типы "последовательность-из": Типы, определенные указанием единственного типа компонента; каждое значение типа "последовательность-из" является упорядоченным списком нуля, одного или нескольких значений этого типа компонента.
3.8.58 типы "множество": Типы, определенные указанием фиксированного, неупорядоченного списка различных типов (некоторые из них могут быть объявлены как факультативные); каждое значение типа "множество" является неупорядоченным списком значений, по одному из каждого типа компонентов.
Примечание - Когда тип компонента объявлен факультативным, значение типа "множество" не обязательно содержит значение этого типа компонента.
3.8.59 типы "множество-из": Типы, определенные указанием единственного типа компонента; каждое значение типа "множество-из" является неупорядоченным списком нуля, одного или нескольких значений этого типа компонента.
3.8.60 простые типы: Типы, определенные непосредственно спецификацией множеств их значений.
3.8.61 символ интервала: Символ в репертуаре символов, который предназначен для включения вместе с графическими символами в печатное представление строки символов, но который в физическом исполнении представляется в виде пустого места; обычно он не рассматривается как управляющий символ (см. 3.8.16).
Примечание - В репертуаре символов может быть единственный символ интервала, а может быть и несколько разной ширины.
3.8.62 подтип (порождающего типа): Тип, значения которого являются подмножеством (или полным подмножеством) значений некоторого другого (порождающего) типа.
3.8.63 тег: Обозначение типа, которое связывается с каждым типом АСН.1.
3.8.64 тегированные типы: Типы, определенные указанием одного существующего типа и тега; новый тип изоморфен существующему типу, но отличается от него.
3.8.65 тегирование: Замена существующего (возможно, по умолчанию) тега типа заданным тегом.
3.8.66 истинно: Одно из двух различающихся значений булевского типа (см. "ложно").
3.8.67 тип: Поименованное множество значений.
3.8.68 ссылочное имя типа: Имя, однозначно связанное с типом в некотором контексте.
Примечание - Ссылочные имена присвоены типам, определенным в настоящем стандарте; они всеобще доступны в пределах АСН.1. Другие ссылочные имена определяются в других стандартах; они доступны только в контекстах этих стандартов.
3.8.69 неограниченный тип символьных строк: Тип, значениями которого являются значения из символьного абстрактного синтаксиса, идентифицируемого отдельно для каждого случая использования этого типа.
3.8.70 пользователь (АСН.1): Лицо или организация, которое определяет абстрактный синтаксис конкретного вида информации, используя АСН.1.
3.8.71 значение: Отдельный член множества значений.
3.8.71# bis отображение значения: Взаимоотношение 1-1 между двумя типами, которое позволяет ссылку на значения одного из них использовать как ссылку на значения другого. Это может быть использовано, например, при спецификации подтипов и значений по умолчанию (см. приложение F).
3.8.72 ссылочное имя значения: Имя, однозначно связанное со значением в некотором контексте.
3.8.73 множество значений: Совокупность значений типа. Семантически эквивалентно подтипу.
3.8.74 скобки версии: Две пары смежных левых и правых квадратных скобок ([[ и ]]), используемые в начале и конце расширяющей дополнительной группы.
3.8.75 пропуск: Любое действие форматирования, оставляющее пустое место на печатной странице, как символы SPACE или ТАВ, или несколько подряд таких символов.
4 Сокращения
АСН.1 - абстрактно-синтаксическая нотация версии 1
ЗДП - значение данных представления
ВМР - основная многоязычная плоскость (Basic Multilingual Plane)
BER - базовые правила кодирования (Basic Encoding Rules)
CER - канонические правила кодирования (Canonical Encoding Rules)
DER - отличительные правила кодирования (Distinguished Encoding Rules)
РER - упаковывающие правила кодирования (Packed Encoding Rules)
UCS - универсальный, многооктетный кодовый набор символов (Universal Multi ple-Octet Coded Character Set)
UTC - всемирное согласованное время (Coordinated Universal Time)
ICD - Международный кодовый определитель (International Code Designator)
DCC - цифровой код страны (Data Country Code)
DNIC - идентификационный код сети передачи данных (Data Network Identification Code)
5 Обозначения, используемые в настоящем стандарте
Нотация АСН.1 состоит из последовательностей символов набора АСН.1, определенного в разделе 10.
Каждый конкретный случай использования нотации АСН.1 содержит символы из символьного набора АСН.1, сгруппированные в элементы. В разделе 11 определяются все последовательности символов, образующие элементы АСН.1, и каждому элементу присваивается имя.
Нотация АСН.1 определяется в разделе 12 (и последующих разделах) путем спецификации совокупности последовательностей элементов, которые образуют допустимые экземпляры АСН.1, и спецификации семантики каждой такой последовательности.
Для того чтобы специфицировать эту совокупность, в настоящем стандарте используют формальную нотацию, определяемую в последующих подразделениях.
5.1 Продукции
Новая (более сложная) совокупность последовательностей определяется с помощью продукции. Она использует имена совокупностей последовательностей продукций, определенных в настоящем стандарте, и строит новую совокупность последовательностей продукций, специфицируя либо:
а) что новая совокупность из последовательностей продукций должна состоять из любой последовательности, содержащейся в любой из исходных совокупностей, либо
б) что новая совокупность должна состоять из любой последовательности продукций, которая может быть образована, если взять ровно по одной последовательности продукций из каждой исходной совокупности и соединить их в заданном порядке.
Каждая продукция состоит из следующих частей, в одну или несколько строк, в следующем порядке:
1) имя новой совокупности последовательностей продукций;
2) символ : : =
3) одна или несколько альтернативных совокупностей последовательностей продукций, определенных в 5.2 и разделенных знаком |
Последовательность продукций присутствует в новой совокупности, если она присутствует в одной или нескольких альтернативных совокупностях. Ссылки на новую совокупность в настоящем стандарте осуществляются по имени из перечисления 1).
Примечание - Если одна и та же последовательность продукций появляется более чем в одной альтернативе, то любая появляющаяся семантическая двусмысленность снимается другими частями полной последовательности продукций АСН.1.
5.2 Альтернативные совокупности
Каждая альтернативная совокупность последовательностей продукций в одной или нескольких альтернативных совокупностях (см. 5.1в) задается списком имен. Каждое имя является либо именем элемента, либо именем совокупности последовательностей продукций, определенной с помощью продукции в настоящем стандарте.
Совокупность последовательностей продукций, определяемая альтернативой, состоит из всех последовательностей продукций, которые получаются, если взять любую из последовательностей продукций (или элемент), связанных с первым именем, за ней - любую из последовательностей продукций (или элемент), связанных со вторым именем, за ней - любую из последовательностей продукций (или элемент), связанных со третьим именем, и так далее до последнего имени (или элемента) в альтернативе включительно.
5.3 Пример продукции
BitStringValue : : = bstring |
hstring | "{" IdentifierList "}"
Эта запись является продукцией, которая связывает с именем <BitStringValue> следующие последовательности продукций:
а) любая "bstring" (элемент), или
б) любая "hstring" (элемент), или
в) любая последовательность продукций, связанная с "IdentifierList", перед которой стоит знак {, а за которой - знак }.
Примечание - "{"и"}" являются именами элементов, состоящими из одного знака, соответственно {и} (см. 11.17).
В данном примере "IdentifierList" должно быть определено другой продукцией, либо до, либо после продукции "BitStringValue".
5.4 Размещение текста
Перед и после каждой продукции, используемой в настоящем стандарте, стоит пустая строка. Внутри продукции пустые строки отсутствуют. Продукция может либо располагаться в одной строке, либо разбиваться на несколько строк. Размещение текста продукции не имеет значения.
5.5 Рекурсия
Продукции, используемые в настоящем стандарте, часто являются рекурсивными. В таком случае продукции применяются до тех пор, пока не будут сгенерированы новые последовательности.
Примечание - Во многих случаях такое повторение приводит к неограниченной совокупности допустимых последовательностей, некоторые или все из которых сами могут быть неограниченными. Это не является ошибкой.
5.6 Ссылки на совокупность последовательностей
В настоящем стандарте ссылка на совокупность последовательностей (часть нотации АСН.1) осуществляются указанием первого имени в продукции (перед : : =); имя окружается двойными кавычками ("), чтобы отличать от текста на русском языке; в продукции такое выделение не делается.
5.7 Ссылки на элемент
В настоящем стандарте ссылки на элемент осуществляются указанием имени элемента; для того чтобы отличать имя от текста на естественном языке, оно заключается в двойные кавычки ("), если только оно не является частью продукции и не является односимвольным элементом, ": : =", ".." или "...".
5.8 Краткие формы нотации
Для того чтобы сделать продукции более сжатыми и более удобочитаемыми, следующие краткие формы нотации используются в определении совокупностей последовательностей продукций АСН.1 в ГОСТ Р ИСО/МЭК 8824-2, ИСО/МЭК 8824-3 и ИСО/МЭК 8824-4 (в настоящем стандарте они не используются):
а) звездочка (*) следом за двумя именами ("А" и "В") обозначает либо пустой элемент (см. 11.7), либо последовательность продукций, ассоциированную с "А", либо альтернативные серии последовательностей продукций, связанных с "А" и "В", начинающиеся и заканчивающиеся последовательностями, ассоциированными с "А". Так,
С : : = А В *
эквивалентно
С : : = D | empty
D : : = A | A B D
"D" является вспомогательным именем, нигде в продукциях не появляющимся.
Пример - "С : : = А В *" является краткой формой нотации для следующих альтернатив С:
empty
A
А В А
А ВА В А
А ВА В А В А
...
б) знак плюс (+) аналогичен звездочке из перечисления а), за исключением того, что пустой элемент не допускается. Так,
Е : : = А В +
эквивалентно
Е : : = A | A B Е
Пример - "Е : : = А В +" является краткой формой нотации для следующих альтернатив Е:
A
А В А
А ВА В А
А ВА В А В А
...
в) знак вопроса (?) следом за именем обозначает либо пустой элемент (см. 11.7), либо последовательность продукций, ассоциированных с "А". Так,
F : : = А ?
эквивалентно
F : : = empty | A
5.9 Ссылки на значения и типиазация значений
5.9.1 АСН.1 определяет нотацию присваивания значений, которая позволяет дать имя значению специфицированного типа. Это имя может использоваться всякий раз, когда нужна ссылка на значение. В приложении F описан и установлен метод отображения значений, который позволяет ссылочному имени значения одного типа идентифицировать значение другого типа. Таким образом, ссылка на первое значение может использоваться тогда, когда требуется ссылка на значение второго типа.
5.9.2 В стандартах АСН.1 используется описание на обычном языке для спецификации допустимости (или недопустимости) конструкций, в которых участвует несколько типов, но при этом два типа должны быть "совместимы". Например требуется, чтобы тип, используемый при определении ссылки на значение, был "совместим" с управляющим типом при использовании этой ссылки. В приложении F понятие отображения значений используется для точного утверждения о том, допустима данная конструкция АСН.1 или нет.
6 Модель АСН.1 расширения типа
При декодировании расширяемого типа декодер может выявить:
а) отсутствие ожидаемых расширяющих дополнений в типе "последовательность" или "множество", или
б) присутствие либо произвольных неожидаемых расширяющих дополнений, кроме тех, которые определены (если были определены) в типе "последовательность" или "множество", либо неизвестной альтернативы в выборочном типе, либо неизвестного перечисления в перечислимом типе, либо неожиданной длины или значения типа, ограничение которого расширяется.
Формально говоря, абстрактный синтаксис, определяемый расширяемым типом "Х", содержит не только значения типа "Х", но и значения всех типов, связанных расширением с "Х". Таким образом, процесс декодирования никогда не сигнализирует об ошибке при выявлении любой из перечисленных ситуаций а) и б). Действия, которые должны быть предприняты в такой ситуации, должны быть специфицированы проектировщиком прикладного уровня.
Примечание - Часто действием должно быть игнорирование присутствия неожидаемых дополнительных расширений и использование значений по умолчанию или указателей "отсутствует" для отсутствующих, но ожидаемых расширяющих дополнений.
Неожидаемые расширяющие дополнения, выявленные декодером в расширяемом типе, могут быть позже включены в последующие кодирования этого типа (для передачи обратно отправителю или какой-либо третьей стороне), при условии, что для последующей передачи используется тот же самый синтаксис передачи.
7 Требования расширяемости для правил кодирования
7.1 Все правила кодирования АСН.1 должны допускать кодирование значения расширяемого типа "Х" таким образом, что оно может быть декодировано с использованием расширяемого типа "Y", который связан расширением с "Х". Более того, правила кодирования должны допускать, чтобы значения, декодированные с использованием "Y", были повторно закодированы (используя "Y") и декодированы с использованием третьего расширяемого типа "Z", который связан расширением с "Y" (и, следовательно, с "Х").
Примечание - Типы "X", "Y" и "Z" могут появляться в последовательности расширения в любом порядке.
Если значение расширяемого типа "Х" закодировано и передано (непосредственно или через ретранслирующее приложение, использующее связанный расширением тип "Z") другому приложению, которое декодирует значение, используя расширяемый тип "Y", связанный расширением с "Х", то декодер, использующий тип "Y", получит абстрактное значение, составленное из:
а) абстрактного значения типа корня расширения;
б) абстрактного значения каждого расширяющего дополнения, которое присутствует как в "Х", так и в "Y";
в) выделенного кодирования для каждого расширяющего дополнения, которое есть в "Х", но отсутствует в "Y" (если такие имеются).
Кодирование в случае в) должно быть пригодно для включения в последующее кодирование значения "Y", если это требуется приложением. Это кодирование должно быть допустимым кодированием значения "Х".
Пример - Если система А использует тип расширяемого корня (тип "Х"), являющийся типом "последовательность" или "множество" с расширяющим дополнением факультативного целого типа, а система В использует связанный расширением тип (тип "Y"), имеющий два расширяющих дополнения, каждое из которых - факультативный целый тип, то при передаче от В значения "Y" с опущенным целым значением первого расширяющего дополнения и включенным вторым, оно не должно быть перепутано системой А с наличием первого (единственного) расширяющего дополнения "Х", о котором ей известно. Более того, А должна быть в состоянии повторно закодировать значение "Х" со значением, предоставленным для первого целого типа, с последующим вторым целым значением, полученным от В, если это требуется прикладным протоколом.
7.2 Все правила кодирования АСН.1 должны специфицировать кодирование и декодирование значения перечислимого и выборочного типов таким образом, что если передаваемое значение - из множества расширяющих дополнений, общего для кодера и декодера, то оно будет успешно декодировано, в противном случае у декодера должна быть возможность выделить кодирование этого значения и идентифицировать его как значение (неизвестного) расширяющего дополнения.
7.3 Все правила кодирования АСН.1 должны специфицировать кодирование и декодирование типов с расширяемыми ограничениями таким образом, что если передаваемое значение - из множества расширяющих дополнений, общего для кодера и декодера, то оно будет успешно декодировано, в противном случае у декодера должна быть возможность выделить кодирование этого значения и идентифицировать его как значение (неизвестного) расширяющего дополнения.
В любом случае присутствие расширяющих дополнений не должно влиять на возможность распознавания последующего материала, когда тип с маркером расширения вложен в некоторый другой тип.
Примечание - Все варианты базовых и упаковывающих правил кодирования АСН.1 удовлетворяют всем этим требованиям.
8 Теги
8.1 Тег задается указанием его класса и номера в классе. Определены следующие классы тегов:
- универсальный (universal);
- прикладной (application);
- пользовательский (private);
- контекстно зависимый (context - specific).
8.2 Номер является неотрицательным целым числом, заданным в десятичной нотации.
Ограничения на теги, присваиваемые пользователем АСН.1, определены в разделе 32.
В таблице 1 приведена сводка тегов универсального класса, присвоенных в настоящем стандарте.
8.3 Некоторые правила кодирования требуют канонического порядка тегов. Для обеспечения единообразия канонический порядок тегов определен в 8.4.
8.4 Канонический порядок тегов определяется следующим образом:
а) первыми должны появляться элементы или альтернативы с тегами универсального класса, далее - прикладного, затем - контекстно зависимого и последними - с тегами пользовательского класса;
б) в пределах каждого класса элементы или альтернативы должны появляться в порядке возрастания номеров их тегов.
Таблица 1 - Присвоенные теги универсального класса
UNIVERSAL 0 |
Зарезервировано для использования правилами кодирования |
UNIVERSAL 1 |
Булевский тип |
UNIVERSAL 2 |
Целочисленный тип |
UNIVERSAL 3 |
Тип "битовая строка" |
UNIVERSAL 4 |
Тип "строка октетов" |
UNIVERSAL 5 |
Вырожденный тип |
UNIVERSAL 6 |
Тип "идентификатор объекта" |
UNIVERSAL 7 |
Тип "описатель объекта" |
UNIVERSAL 8 |
Внешний тип и тип "экземпляр-из" |
UNIVERSAL 9 |
Вещественный тип |
UNIVERSAL 10 |
Перечислимый тип |
UNIVERSAL 11 |
Тип "встроенное-здп" |
UNIVERSAL 12 |
Тип UTF8String |
UNIVERSAL 13-15 |
Зарезервировано для последующих редакций стандарта |
UNIVERSAL 16 |
Типы "последовательность" и "последовательность-из" |
UNIVERSAL 17 |
Типы "множество" и "множество-из" |
UNIVERSAL 18-22, 25-30 |
Типы символьных строк |
UNIVERSAL 23-24 |
Типы времени |
UNIVERSAL 31-... |
Зарезервировано для дополнений к стандарту |
9 Использование нотации АСН.1
9.1 Нотацией АСН.1 для определения типа должна быть "Туре" (см. 16.1).
9.2 Нотацией АСН.1 для определения значения должна быть "Value" (см. 16.7).
Примечание - В общем случае невозможно интерпретировать нотацию значения без знания типа.
9.3 Нотацией АСН.1 для присвоения типа ссылочному имени типа должна быть либо "TypeAssignment" (см. 15.1), либо "ValueSetTypeAssignment" (см. 15.4), либо "ParameterizedTypeAssignment" (см. ИСО/МЭК 8824-4, 8.2), либо "ParameterizedValueSetTypeAssignment" (см. ИСО/МЭК 8824-4, 8.2).
9.4 Нотацией АСН.1 для присвоения значения ссылочному имени значения должна быть либо "ValueAssignment" (см. 15.2), либо "ParameterizedValueAssignment" (см. ИСО/МЭК 8824-4, 8.2).
9.5 Альтернативы продукции нотации "Assignment" должны использоваться только в нотации "МоduleDefinition" (за исключением, указанным в примечании 2 к 12.1).
10 Набор символов АСН.1
10.1 Каждый элемент АСН.1 состоит из последовательности символов, приведенных в таблице 2, за исключением случаев, указанных в 10.2 и 10.3. В таблице 2 символы идентифицируются именами, данными в ИСО/МЭК 10646-1.
Таблица 2 - Символы АСН.1
От А до Z (от LATIN CAPITAL LETTER A до LATIN CAPITAL LETTER Z - прописные латинские буквы от А до Z) | |
От а до z (от LATIN SMALL LETTER A до LATIN SMALL LETTER Z - строчные латинские буквы от а до z) | |
От 0 до 9 (от DIGIT ZERO до DIGIT 9 - цифры от нуля до 9) | |
: |
(COLON - двоеточие) |
= |
(EQUALS SIGN - знак "равно") |
, |
(СОММА - запятая) |
{ |
(LEFT CURLY BRACKET - левая фигурная скобка) |
} |
(RIGHT CURLY BRACKET - правая фигурная скобка) |
< |
(LESS-THAN SIGN - знак "меньше, чем") |
. |
(FULL STOP - точка) |
@ |
(COMMERCIAL AT - коммерческое "эт") |
( |
(LEFT PARENTHESIS - левая скобка) |
) |
(RIGHT PARENTHESIS - правая скобка) |
[ |
(LEFT SQUARE BRACKET - левая квадратная скобка) |
] |
(RIGHT SQUARE BRACKET - правая квадратная скобка) |
- |
(HYPHEN-MINUS - дефис) |
' |
(APOSTROPHE - апостроф) |
" |
(QUOTATION MARK - кавычка) |
| |
(VERTICAL LINE - вертикальная черта) |
& |
(AMPERSAND - амперсанд) |
^ |
(CIRCUMFLEX ACCENT - знак ударения) |
* |
(ASTERISK - звездочка) |
|
(SEMICOLON - точка с запятой) |
! |
(EXCLAMATION MARK - восклицательный знак) |
Примечание - В стандартах, производных от данного стандарта, которые национальными организациями по стандартизации, дополнительные символы могут присутствовать в следующих элементах:
typereference (см. 11.2);
identifier (см. 11.3);
valuereference (см. 11.4);
modulereference (см. 11.5).
Когда дополнительные знаки вводятся для соответствия алфавитам, в которых различие между строчными и прописными буквами не имеет значения, синтаксическое различие, достигаемое за счет предписания регистра первого символа некоторых из приведенных выше элементов АСН.1, должно обеспечиваться каким-то другим способом. Тем самым допускается написание допустимых спецификаций АСН.1 на разных языках.
10.2 При использовании нотации для спецификации значения типа символьная строка в нотации АСН.1 могут появляться все графические символы для определенного набора символов, взятые в двойные кавычки (") (см. 11.11).
10.3 Дополнительные (произвольные) графические символы могут появляться в элементе "комментарии" (см. 11.6).
10.4 Не следует придавать какого-либо значения типографскому стилю, размеру, цвету, яркости и другим характеристикам отображения.
10.5 Строчные и прописные буквы следует рассматривать как различные знаки.
11 Элементы АСН.1
11.1 Общие правила
11.1.1 В последующих подразделах определяются символы в элементах АСН.1. В каждом случае даются имя элемента и определение символьных последовательностей, которые образуют элемент.
11.1.2 Каждый элемент, определяемый в последующих подразделах (за исключением "bstring", "hstring" и "cstring"), должен располагаться в пределах одной строки и (за исключением элементов "comment", "bstring", "hstring" и "cstring") не должен содержать пробелов (см. 11.9-11.11).
11.1.3 Длина строки не ограничивается.
11.1.4 Элементы в последовательностях продукций, определенные в настоящем стандарте (в обозначениях нотации АСН.1), могут располагаться на одной или нескольких строках и разделяться одним или несколькими пробелами, пустыми строками или комментариями.
11.1.5 Каждый элемент должен быть отделен от следующего за ним элемента пробелом, новой строкой или комментарием, если начальный символ (или символы) следующего элемента являются допустимыми для включения в конец последовательности символов предыдущего элемента.
11.1.6 В настоящем стандарте использованы термины "новая строка", "конец строки", "пропуск". При представлении пропуска и новой строки (конца строки) в машиночитаемых спецификациях могут использоваться любые из следующих символов в любой комбинации (символы названы и идентифицированы десятичными значениями, которые являются значениями кодов символов по ИСО/МЭК 646):
- для пропуска
HORIZONTAL TABULATION (9) - горизонтальная табуляция,
SPACE (32) - пробел,
LINE FEED (10) - пропуск строки,
VERTICAL TAB (11) - вертикальная табуляция,
FORM FEED (12) - пропуск страницы,
CARRIAGE RETURN (13) - возврат каретки;
- для новой строки:
LINE FEED (10) - пропуск строки,
VERTICAL TAB (11) - вертикальная табуляция,
FORM FEED (12) - пропуск страницы,
CARRIAGE RETURN (13) - возврат каретки.
11.2 Ссылки на тип
Имя элемента - typereference.
11.2.1 Элемент "typereference" должен состоять из произвольного количества (большего или равного единице) букв, цифр и дефисов. Начальный символ должен быть прописной буквой. Последний символ не должен быть дефисом. Два дефиса не должны следовать друг за другом.
Примечание - Правила использования дефиса должны исключать двусмысленность с (возможным последующим) комментарием.
11.2.2 Элемент "typereference" не должен совпадать с одной из зарезервированных символьных последовательностей, приведенных в 11.18.
11.3 Идентификаторы
Имя элемента - identifier.
Элемент "identifier" должен состоять из произвольного количества (большего или равного единице) букв, цифр и дефисов. Начальный символ должен быть строчной буквой. Последний символ не должен быть дефисом. Два дефиса не должны следовать друг за другом.
Примечание - Правила, относящиеся к использованию дефиса, направлены на то, чтобы избежать двусмысленности с (возможным последующим) комментарием.
11.4 Ссылки на значение
Имя элемента - valuereference.
Элемент "valuereference" должен состоять из последовательности символов, заданных для "identifier" в 11.3. При анализе конкретного использования данной нотации элемент "valuereference" отличается от элемента "identifier" контекстами, в которых они появляются.
11.5 Ссылка на модуль
Имя элемента - modulereference.
Элемент "modulereference" должен состоять из последовательности символов, заданной для элемента "typereference" в 11.2. При анализе конкретного использования данной нотации элемент "modulereference" отличается от элемента "typereference" контекстами, в которых они появляются.
11.6 Комментарий
Имя элемента - соmment.
11.6.1 Комментарий не указывается в определении нотации АСН.1. Однако он может появляться в любом месте между другими элементами нотации АСН.1, но не имеет синтаксического значения.
11.6.2 Элемент "comment" должен начинаться с пары следующих друг за другом дефисов и заканчиваться следующей парой таких же дефисов или текущей строкой, в зависимости от того, что встретиться раньше. Комментарий не должен содержать пар следующих друг за другом дефисов, кроме начальных и завершающих (в случае наличия). Комментарии может содержать графические символы, не входящие в символьный набор, определенный в 10.1 (см. 10.3).
11.7 Пустой элемент
Имя элемента - empty.
Элемент "empty" не содержит никаких символов. Он используется в нотации раздела 5, когда заданы альтернативные множества последовательностей продукций для указания на возможное отсутствие всех альтернатив.
11.8 Элемент "число"
Имя элемента - number.
Элемент "number" состоит из одной или нескольких цифр. Первая цифра не может быть нулем, за исключением случая, когда "number" состоит из одной цифры.
Примечание - Элемент "number" всегда отображается в целочисленное значение путем интерпретации его как десятичного обозначения.
11.9 Элемент "двоичная строка"
Имя элемента - bstring.
Элемент "bstring" состоит из произвольного количества (возможно - нулевого) нулей, единиц, пропусков или новых строк, перед которыми стоит одиночная кавычка (') и за которыми следует пара символов
'В
Пропуски и новые строки, которые появляются в двоичной строке, значения не имеют.
Пример - '01101100'В
11.10 Элемент "шестнадцатеричная строка"
Имя элемента - hstring.
11.10.1 Элемент "hstring" состоит из произвольного количества (возможно - нулевого) символов
А В С D E F 0 1 2 3 4 5 6 7 8 9
или пропусков и новых строк, перед которыми стоит одиночная кавычка (') и за которыми следует пара символов
'Н
Пропуски и новые строки, которые появляются в шестнадцатеричной строке, значения не имеют.
Пример - 'АВ0196'Н
11.10.2 Каждый символ используется для обозначения значения полуоктета в шестнадцатеричном представлении.
11.11 Элемент "символьная строка"
Имя элемента - cstring.
11.11.1 Элемент "cstring" состоит из произвольного количества (возможно - нулевого) графических символов и интервалов из набора символов, определяемого типом рассматриваемой строки, перед которыми и после них следуют двойные кавычки ("). Если набор символов содержит двойные кавычки, то этот символ (если он присутствует в символьной строке, представляемой "cstring") должен быть представлен в "cstring" парой двойных кавычек в одной и той же строке, без интервала между ними. "cstring" может занимать несколько строк текста; в этом случае представляемая символьная строка не должна содержать символов интервала в позиции до или после конца строки в "cstring". Пропуски, которые появляются непосредственно до или после конца строки в "cstring", значения не имеют.
Примечания
1 Элемент "cstring" может использоваться только для представления символьных строк, всем представляемым символам которых либо был присвоен графический знак, либо они являются символом интервала. Когда требуется обозначить символьную строку, содержащую управляющие символы, имеется альтернативный синтаксис АСН.1 (см. раздел 34).
2 Символьная строка, представленная "cstring", состоит из символов, связанных с печатными графическими символами и символами интервала. Символы интервала, непосредственно предшествующие концу строки в "cstring" или следующие непосредственно за ним, не являются частью представляемой символьной строки (они игнорируются). Когда символы интервала входят в "cstring" или графические символы в символьном репертуаре являются двусмысленными, символьная строка, обозначаемая "cstring", может быть двусмысленной.
Пример 1 -
"Элемент"
Пример 2 - Элемент "cstring"
"ABCDE FGH
IJK""XYZ"
может быть использован для представления значения символьной строки типа IA5String. Представленное значение состоит из символов
ABCDE FGHIJK"XYZ
где точное число пробелов между Е и F может быть неоднозначным, если в спецификации используется пропорциональный шрифт.
11.11.2 Когда символ является комбинированным, он должен быть обозначен в "cstring" как один символ. Он не должен являться наложением символов, из которых скомбинирован. (Тем самым подразумевается, что порядок комбинирования символов в значении строки определен однозначно).
Пример - Комбинация ударения и строчного 'е' является двумя символами во французской версии ИСО 646 и, таким образом, в соответствующей "cstring" записывается как два символа 'е', а не один.
11.11.3 Элемент "cstring" не должен использоваться для представления значений символьных строк, содержащих управляющие символы. В нем допустимы только графические символы и знаки интервала.
11.12 Элемент "присвоение"
Имя элемента - ": : ="
Этот элемент состоит из последовательности символов
: : =
Примечание - Эта последовательность не содержит пробелов (см. 11.1.2).
11.13 Разделитель диапазона
Имя элемента - ".."
Этот элемент состоит из последовательности символов
..
Примечание - Эта последовательность не содержит пробелов (см. 11.1.2).
11.14 Многоточие
Имя элемента - "..."
Этот элемент состоит из последовательности символов
...
Примечание - Эта последовательность не содержит пробелов (см. 11.1.2).
11.15 Левые скобки версии
Имя элемента - "[["
Этот элемент должен состоять из последовательности символов
[[
Примечание - Эта последовательность не содержит символов пропуска (см. 11.1.2).
11.16 Правые скобки версии
Имя элемента - "]]"
Этот элемент должен состоять из последовательности символов
]]
Примечание - Эта последовательность не содержит символов пропуска (см. 11.1.2).
11.17 Элементы, состоящие из одного символа
Имена элементов -
"{"
"}"
"<"
","
"."
"("
")"
"["
"]"
"-" (дефис)
":"
";"
"@"
"|"
"!"
"^"
Элемент с любым из перечисленных выше имен состоит из единственного символа без кавычек.
11.18 Зарезервированные слова
Имена зарезервированных слов следующие:
ABSENT |
END |
INTEGER |
SEQUENCE |
ABSTRACT-SYNTAX |
ENUMERATED |
INTERSECTION |
SET |
ALL |
EXCEPT |
ISO646String |
SIZE |
APPLICATION |
EXPLICIT |
MAX |
STRING |
AUTOMATIC |
EXPORTS |
MIN |
SYNTAX |
BEGIN |
EXTENSIBILITY |
MINUS-INFINITY |
T61String |
BIT |
EXTERNAL |
NULL |
TAGS |
BMPString |
FALSE |
NumericString |
TeletexString |
BOOLEAN |
FROM |
OBJECT |
TRUE |
BY |
GeneralizedTime |
ObjectDescriptor |
TYPE - IDENTIFIER |
CHARACTER |
GeneralString |
OCTET |
UNION |
CHOICE |
GraphicString |
OF |
UNIQUE |
CLASS |
IA5String |
OPTIONAL |
UNIVERSAL |
COMPONENT |
IDENTIFIER |
PDV |
UniversalString |
COMPONENTS |
IMPLICIT |
PLUS-INFINITY |
UTCTime |
CONSTRAINED |
IMPLIED |
PRESENT |
UTF8String |
DEFAULT |
IMPORTS |
PrintablеString |
VideotexString |
DEFINITIONS |
INCLUDES |
PRIVATE |
VisibleString |
EMBEDDED |
INSTANCE |
REAL |
WITH |
Элементы с перечисленными выше именами состоят из последовательностей символов в имени и являются зарезервированными символьными последовательностями.
Примечания
1 В приведенных выше последовательностях символов отсутствуют пробелы.
2 Ключевые слова CLASS, CONSTRAINED, INSTANCE, SYNTAX и UNIQUE не используются в настоящем стандарте; они используются в ГОСТ Р ИСО/МЭК 8824-2, ИСО/МЭК 8824-3 и ИСО/МЭК 8824-4.
12 Определение модуля
12.1 Определение модуля "ModuleDefinition" задается следующими продукциями:
ModuleDefinition : : =
ModuleIdentifier
DEFINITIONS
TagDefault
": : ="
BEGIN
ModuleBody
END
ModuleIdentifier : : =
modulereference
DefinitiveIdentifier
DefinitiveIdentifier : : =
"{" DefinitiveObj IdComponentList "}" | empty
DefinitiveObj IdComponentList : : =
DefinitiveObj IdComponent |
DefinitiveObj IdComponent DefinitiveObj IdComponentList
DefinitiveObj IdComponent : : =
NameForm |
DefinitiveNumberForm |
DefinitiveNameAndNumberForm
DefinitiveNumberForm : : = number
DefinitiveNameAndNumberForm : : = identifier "(" DefinitiveNumberForm ")"
TagDefault : : =
EXPLICIT TAG |
IMPLICIT TAG |
AUTOMATIC TAGS |
empty
ExtensionDefault : : =
EXTENSIBILITY IMPLIED |
empty
ModuleBody : : =
Exports Imports AssignmentList |
empty
Exports : : =
EXPORTS SymbolsExported ";" |
empty
SymbolsExported : : =
SymbolList |
empty
Imports : : =
IMPORTS SymbolsImported ";" |
empty
SymbolsImported : : =
SymbolsFromModuleList |
empty
SymbolsFromModuleList : : =
SymbolsFromModule |
SymbolsFromModuleList SymbolsFromModule
SymbolsFromModule : : =
SymbolList FROM GlobalModuleReference
GlobalModuleReference : : =
modulereference AssignedIdentifier
AssignedIdentifier : : =
ObjectIdentifierValue |
DefinedValue |
empty
SymbolList : : =
Symbol |
SymbolList "," Symbol
Symbol : : =
Reference |
ParameterizedReference
Reference : : =
typereference |
valuereference |
objectclassreference |
objectreference |
objectsetreference
AssignmentList : : =
Assignment |
AssignmentList Assignment
Assignment : : =
TypeAssignment |
ValueAssignment |
ValueSetTypeAssignment |
ObjectClassAssignment |
ObjectAssignment |
ObjectSetAssignment |
ParameterizedAssignment
Примечания
1 Использование ParameterizedReference в списках EXPORTS и IMPORTS специфицировано в ИСО/МЭК 8824-4.
2 В примерах (и определениях в настоящем стандарте типов с тегами универсального класса) "ModuleBody" может использоваться вне "ModuleDefinition".
3 Продукции "TypeAssignment" и "ValueAssignment" специфицированы в разделе 15.
4 Группирование типов данных АСН.1 в модули не определяет обязательного формирования значений данных уровня представления в поименованные абстрактные синтаксисы с целью определения контекста представления.
5 Значение "TagDefault" для определения модуля влияет только на типы, явно определенные в модуле. Оно не влияет на интерпретацию импортированных типов.
6 Точка с запятой не ставиться в спецификации списка присвоений "AssignmentList" или в какой-либо подчиненной продукции, а зарезервирована для использования разработчиками инструментов АСН.1.
12.2 Если тег по умолчанию "TagDefault" равен "empty", то подразумевается "EXPLICIT TAGS".
Примечание - Смысл "EXPLICIT TAGS", "IMPLICIT TAGS" и "AUTOMATIC TAGS" определяется в разделе 32.
12.3 Когда выбрана альтернатива "AUTOMATIC TAGS" для "TagDefault", то говорят, что для модуля выбрано автоматическое тегирование. Автоматическое тегирование - это синтаксическое преобразование, которое применяется (с дополнительными условиями) к продукциям "ComponentTypeList" и "AlternativeTypeList", встретившимся в определении модуля. Это преобразование формально специфицировано в подразделах 24.7-24.9, 26.3 и 28.2 для нотаций типов последовательностей, множеств и выборочных типов соответственно.
12.4 Опция "EXTENSIBILITY IMPLIED" эквивалентна вставке в модуле маркера расширения (...) в определении каждого типа, для которого это допустимо. Подразумеваемый маркер расширения располагается в типе в последней позиции, в которой допустима явная спецификация маркера расширения. Отсутствие "EXTENSIBILITY IMPLIED" означает, что расширение обеспечивается только для тех типов в модуле, для которых маркер расширения присутствует явно.
Примечание - "EXTENSIBILITY IMPLIED" влияет только на типы, но не влияет на множества объектов.
12.5 Ссылка на модуль "modulereference", появляющаяся в продукции "ModuleIdentifier", называется именем модуля.
Примечание - Возможность определения одного модуля АСН.1 с помощью нескольких элементов "ModuleBody" с присвоением одной и той же "modulereference" допускалась предшествующими спецификациями. Настоящей спецификацией это не допускается.
12.6 Имена модулей должны использоваться только один раз (за исключением, определенным в 12.9) в сфере применения определения модуля.
12.7 Если определяющий идентификатор "DefinitiveIdentifier" не пуст, то значение идентификатора объекта недвусмысленно и однозначно идентифицирует определяемый модуль. Не определенное значение может быть использовано в определяющем значении идентификатора объекта.
Примечание - Вопрос, какие изменения потребуются в модуле для нового "DefinitiveIdentifier", не рассматривается в настоящем стандарте.
12.8 Если присвоенный идентификатор "AssignedIdentifier" не пуст, то альтернативы "ObjectIdentifierValue" и "DefinedValue" недвусмысленно и однозначно идентифицируют модуль, из которого должны быть импортированы элементы. Когда в "AssignedIdentifier" используется альтернатива "DefinedValue", она должна быть значением идентификатора типа объекта. Каждая ссылка на значение "valuereference", текстуально появляющаяся в "AssignedIdentifier", должна удовлетворять одному из следующих правил.
а) ссылка определена в "AssignmentList" определяемого модуля и все "valuereference", текстуально появляющиеся в правой части предложения присваивания, также удовлетворяют этому (правило "а") или следующему (правило "б") правилу.
б) ссылка появляется как "Symbol" в "SymbolsFromModule", "AssignedIdentifier" которого не содержит текстуально никаких "valuereference".
Примечание - Рекомендуется, чтобы идентификатор объекта был присвоен таким образом, чтобы можно было недвусмысленно ссылаться на модуль.
12.9 Глобальная ссылка на модуль "GlobalModuleReference" в "SymbolsFromModule" должна появляться в "ModuleDefinition" другого модуля, и, за исключением случая, когда он содержит непустой "DefinitiveIdentifier", "modulereference" может различаться в этих двух модулях.
Примечание - Отличающаяся "modulereference" в другом модуле должна использоваться, только когда импортируются символы с одним и тем же именем из двух разных модулей (модули были названы без учета 12.6). Использование альтернативных различных имен делает эти имена доступными для использования в теле модуля (см. 12.15).
12.10 Когда в ссылающемся модуле используются и "modulereference", и непустой "Assigned-Identifier", то последний должен рассматриваться как определяющий.
12.11 Когда указываемый модуль имеет непустой "DefinitiveIdentifier", тогда "GlobalModule-Reference", указывающая этот модуль, не должна иметь пустой "AssignedIdentifier".
12.12 Когда в "Exports" выбрана альтернатива "SymbolsExported", тогда:
а) каждый "Symbol" в "SymbolsExported" должен удовлетворять в точности одному из следующих условий:
i) он является единственным, определенным в создаваемом модуле, или
ii) он появляется ровно один раз и только в альтернативе "SymbolsImported" в "Imports";
б) каждый "Symbol", для которого предназначена ссылка из внешнего модуля, должен быть включен в "SymbolsExported", и только эти "Symbol" могут быть указаны вне модуля, и
в) если нет таких "Symbol", то должна быть выбрана пустая альтернатива для "SymbolsExported" (а не для "Exports").
12.13 Когда выбрана альтернатива "empty" для "Exports", каждый "Symbol", определенный в модуле, может быть указан вне модуля.
Примечание - Альтернатива "empty" для "Exports" включена для совместимости с предшествующими версиями нотации.
12.14 Идентификаторы, которые появляются в "NamedNumberList", "Enumeration"или "NamedBitList", экспортируются неявно, если определяющая их ссылка на тип экспортируется или появляется как компонент (или подкомпонент) в экспортируемом типе.
12.15 Когда выбрана альтернатива "SymbolsImported" в "Imports", тогда:
а) каждый "Symbol" в "SymbolsFromModule" должен быть либо определен в теле модуля, либо представлен в разделе IMPORTS модуля, обозначенного "GlobalModuleReference" в "Symbols-FromModule". Импорт символа "Symbol", присутствующего в разделе IMPORTS указываемого модуля, допустим, если имеется только одно появление "Symbol" в этом разделе и "Symbol" не определен в указываемом модуле.
Примечание 1 - Не запрещается одно и то же имя символа, определенное в двух разных модулях, импортировать в другой модуль. Однако если одно и то же имя "Symbol" встречается несколько раз в разделе IMPORTS модуля А, то это имя "Symbol" не может быть экспортировано из А в другой модуль В;
б) если для "Exports" выбрана альтернатива "SymbolsExported" в определении модуля, обозначенного "GlobalModuleReference" в "SymbolsFromModule", то "Symbol" должен присутствовать в его "SymbolsExported";
в) только тот "Symbol" из присутствующих в "SymbolList" для "SymbolsFromModule" может быть использован в качестве символа в любой ссылке "External<X>Reference", который имеет ссылку "modulereference", обозначенную "GlobalModuleReference" в этом "SymbolsFromModule" (где <X> есть "value", "type", "object", "objectclass" или "objectset");
г) если нет такого "Symbol", то для "SymbolsImported" должна быть выбрана пустая альтернатива "empty".
Примечание 2 - Из в) и г) следует утверждение: "IMPORTS;" подразумевает, что модуль не может содержать "External<X>Reference";
д) все "SymbolsFromModule" в "SymbolsFromModuleList" должны содержать экземпляры ссылки "GlobalModuleReference", такие, что:
i) все "modulereference" в ней отличны друг от друга и от "modulereference", ассоциированной со ссылающимся модулем, и
ii) "AssignedIdentifier", когда он не пуст, обозначает значения идентификаторов объектов, которые отличны друг от друга и от значения идентификатора объекта (если он есть), ассоциированного со ссылающимся модулем.
12.16 Когда для "Imports" выбрана пустая альтернатива "empty", то модуль может ссылаться на "Symbol", определенный в другом модуле с помощью "External<X>Reference".
Примечание - Альтернатива "empty" для "Imports" включена для совместимости с предшествующими версиями нотации.
12.17 Идентификатор, который появляется в "NamedNumberList", "Enumeration" или "NamedBitList", импортируется неявно, если определяющая его ссылка на тип импортируется или появляется как компонент (или подкомпонент) в импортируемом типе.
12.17bis Символ "Symbol" из "SymbolsFromModule" может появляться в "ModuleBody" в качестве ссылки "Reference". Смысловое значение, связанное с "Symbol", то же самое, какое он имеет в модуле, обозначенном соответствующей ссылкой "GlobalModuleReference".
12.18 Когда символ "Symbol" также появляется в "AssignmentList" (не рекомендуется) или в одном или нескольких других экземплярах "SymbolsFromModule", он должен использоваться только в ссылках "External<X>Reference". Если он таким образом не появляется, то он должен использоваться непосредственно как ссылка "Reference".
12.19 Различные альтернативы для присвоения "Assignment" определены в следующих разделах настоящего и последующих стандартов:
Альтернатива присвоения Определяющий раздел
"TypeAssignment" 15.1
"ValueAssignment" 15.2
"ValueSetTypeAssignment" 15.4
"ObjectClassAssignment" ГОСТ Р ИСО/МЭК 8824-2, 9.1
"ObjectAssignment" ГОСТ Р ИСО/МЭК 8824-2, 11.1
"ObjectSetAssignment" ГОСТ Р ИСО/МЭК 8824-2, 12.1
"ParameterizedAssignment" ИСО/МЭК 8824-4, 8.1
Первый символ в любом "Assignment" является одной из альтернатив для "Reference", обозначающей определяемое ссылочное имя. Ни для каких двух присвоений в списке "AssignmentList" не может быть одинаковых ссылочных имен.
13 Ссылки на определения типов и значений
13.1 Последовательности, которые должны использоваться для ссылок на определения типов и значений, определяются следующими продукциями:
DefinedType : : =
Externaltypereference |
typereference |
ParameterizedType |
ParameterizedValueSetType
DefinedValue : : =
Externalvaluereference |
valuereference |
ParameterizedValue
Тип, идентифицированный "ParameterizedType" и "ParameterizedValueSetType", и значение, идентифицированное "ParameterizedValue", определены в ИСО/МЭК 8824-4.
13.2 За исключением случаев, определенных в 12.18, альтернативы "typereference", "valuereference", "ParameterizedType", "ParameterizedValueSetType" или "ParameterizedValue" не должны использоваться, если ссылка не находится в том же теле "ModuleBody", в котором тип или значение были присвоены (см. 15.1 и 15.2) ссылке на тип или значение.
13.3 Внешние ссылки "Externaltypereference" и "Externalvaluereference" не должны использоваться, если соответствующей ссылке "typereference" или "valuereference":
б) она не находится в разделе IMPORTS
в теле "ModuleBody", использованном для определения соответствующей ссылки "modulereference". Указание элементов в разделе IMPORTS другого модуля допустимо, только когда имеется не более одного экземпляра этого "Symbol" в данном разделе.
Примечание - Не запрещается один и тот же "Symbol", определенный в двух разных модулях, импортировать в другой модуль. Однако если один и тот же "Symbol" встречается несколько раз в разделе IMPORTS модуля А, то этот "Symbol" не может быть указан с использованием модуля А во внешней ссылке.
13.4 Внешняя ссылка должна использоваться в модуле только для указания элемента, определенного в другом модуле, и задается следующими продукциями:
Externaltypereference : : =
modulereference
"."
typereference
Externalvaluereference : : =
modulereference
"."
valuereference
Примечание - Дополнительные продукции внешних ссылок (ExternalClassReference, External-ObjectReference и ExternalОbjectSetReference) определены в ГОСТ Р ИСО/МЭК 8824-2.
13.5 Когда ссылающийся модуль определен с использованием альтернативы "SymbolsImported" для "Imports", "modulereference" во внешней ссылке должен появляться в "GlobalModuleReference" для ровно одного "SymbolsFromModule" в "SymbolsImported". Когда ссылающийся модуль определен с использованием пустой альтернативы "empty" для "Imports", "modulereference" во внешней ссылке должен появляться в "ModuleDefinition" для модуля (отличного от ссылающегося модуля), в котором определена ссылка "Reference".
13.6 Когда "DefinedType" используется как часть нотации, управляемой "Type" (например в "SubtypeElementSpec"), то "DefinedType" должен быть совместим с управляющим "Type", как определено в F.6.2.
13.7 Каждое появление "DefinedValue" в спецификации АСН.1 управляется "Type" и это "DefinedValue" должно указывать на значение типа, совместимого с управляющим "Type", как определено в F.6.2.
14 Нотация для обеспечения ссылок на компоненты АСН.1
14.1 Для многих целей требуются формальные ссылки на компоненты типов АСН.1, значений и пр. Одним из таких примеров является необходимость идентификации конкретного типа в некотором модуле АСН.1. В данном разделе определена нотация, которая может быть использована для обеспечения подобных ссылок.
14.2 Нотация позволяет идентифицировать любой компонент типов "множество" и "последовательность" (присутствующий в типе как обязательно, так факультативно).
14.3 На любую часть любого определения типа АСН.1 можно сослаться, используя синтаксическую конструкцию "AbsoluteReference":
AbsoluteReference : : = "@" GlobalModuleReference
"."
ItemSpec
ItemSpec : : =
typereference |
ItemId"." ComponentId
ItemId : : = ItemSpec
ComponentId : : =
identifier | number | "*"
Примечание - Продукция для "AbsoluteReference" не используется в настоящем стандарте. Она введена для целей, указанных в 14.1.
14.4 Ссылка "GlobalModuleReference" идентифицирует модуль АСН.1 (см. 12.1).
14.5 Ссылка "typereference" идентифицирует любой тип АСН.1, определенный в модуле, идентифицированном "GlobalModuleReference".
14.6 "ComponentId" в каждой "ItemSpec" идентифицирует компонент типа, который идентифицирован "ItemId". Последним должен быть "ComponentId", если идентифицируемый им компонент не является типом "множество", "последовательность", "множество-из", "последовательность из" или выборочным типом.
14.7 Альтернатива "identifier" для "ComponentId" может быть использована, если порождающий "ItemId" является типом "множество" или "последовательность" и обязательно должен быть одним из "identifier" для "NamedType" в "ComponentTypeList" этого множества или последовательности. Она также может использоваться, если "ItemId" идентифицирует выборочный тип, и тогда он обязательно должен быть одним из "identifier" для "NamedType" в "AlternativeTypeList" этого выборочного типа. При иных обстоятельствах эта альтернатива использоваться не может.
14.8 Альтернатива "number" для "ComponentId" может быть использована, только если "ItemId" является типом "множество-из" или "последовательность-из". Значение числа "number" идентифицирует экземпляр типа в множестве-из или последовательности-из, при этом значение "1" идентифицирует первый экземпляр типа. Значение "0" идентифицирует концептуальный компонент целого типа (не присутствующий явно при передаче и называемый "счетчик итераций"), который содержит число экземпляров типа в множестве-из или последовательности-из, имеющихся в значении охватывающего типа.
14.9 Альтернатива "*" для "ComponentId" может быть использована, только если "ItemId" является типом "множество-из" или "последовательность-из". Любая семантика, связанная с использованием "*" для "ComponentId", применяется ко всем компонентам множества-из и последовательности-из.
Примечание - В следующем примере:
M DEFINITIONS : : = BEGIN
T : : = SEQUENCE {
a BOOLEAN,
b SET OF INTEGER
}
END
компонент "Т" может быть указан в тексте вне модуля АСН.1 (или в комментарии) следующим образом:
если (@M.T.b.0 нечетное), то
(@M.T.b.* должно быть нечетным),
использованным для утверждения, что если количество компонентов в "b" нечетное, то все компоненты "b" должны быть нечетными.
15 Присвоение типов и значений
15.1 Ссылке на тип "typereference" должен быть присвоен тип нотацией, заданной продукцией "TypeAssignment":
TypeAssignment : : =
typereference
": : ="
Type
Ссылка "typereference" не должна быть зарезервированным словом АСН.1 (см. 11.18).
15.2 Ссылке на значение "valuereference" должно быть присвоено значение нотацией, заданной продукцией "ValueAssignment":
ValueAssignment : : =
valuereference
Type
": : ="
Value
Значение "Value", которое присваивается ссылке "valuereference", управляется "Туре" и должно быть в нотации для значения типа, определяемого "Туре" (как сказано в 15.3).
15.3 Значение "Value" является нотацией для значения типа, если:
а) либо "Value" есть нотация "BuiltinValue" для типа (см. 16.8),
б) либо "Value" есть нотация "DefinedValue" для значения этого типа.
15.4 Ссылке на тип "typereference" может быть присвоено множество значений нотацией, заданной продукцией "ValueSetTypeAssignment":
ValueSetTypeAssignment : : = typereference
Type
": : ="
ValueSet
Эта нотация присваивает ссылке "typereference" тип, определяемый как подтип типа, обозначенного "Туре", содержащий только те значения, которые специфицированы или допускаются "ValueSet". Ссылка "typereference" не должна быть зарезервированным словом АСН.1 (см. 11.18) и может указываться как тип. "ValueSet" определяется в 15.5.
15.5 Множество значений некоторого типа должно быть специфицировано нотацией "ValueSet":
ValueSet : : = "{" ElementSetSpec "}"
Множество значений включает в себя все значения, которые, по крайней мере один раз, специфицированы "ElementSetSpec" (cм. раздел 46).
16 Определение типов и значений
16.1 Тип специфицируется нотацией "Туре":
Type : : = BuiltinType | ReferencedType | ConstrainedType
16.2 Встроенные типы АСН.1 специфицируются нотацией "BuiltinType", определяемой следующим образом:
BuiltinType : : =
BitStringType |
BooleanType |
СharacterStringType |
ChoiceType |
EmbeddedPDVType |
EnumeratedType |
ExternalType |
InstanceOfType |
IntegerType |
NullType |
ObjectClassFieldType |
ObjectIdentifierType |
OctetStringType |
RealType |
SequenceType |
SequenceOfType |
SetType |
SetOfType |
TaggedType
Различные нотации "BuiltinType" определяются в следующих разделах настоящего стандарта (если не оговорено иное):
BitStringType 21
BooleanType 17
СharacterStringType 35
ChoiceType 28
EmbeddedPDVType 32
EnumeratedType 19
ExternalType 33
InstanceOfType ГОСТ Р ИСО/МЭК 8824-2, приложение С
IntegerType 18
NullType 23
ObjectClassFieldType ГОСТ Р ИСО/МЭК 8824-2, 14.1
ObjectIdentifierType 31
OctetStringType 22
RealType 20
SequenceType 24
SequenceOfType 25
SetType 26
SetOfType 27
TaggedType 30
16.3 Указываемые типы АСН.1 специфицируются нотацией "ReferencedType":
ReferencedType : : =
DefinedType |
UsefulType |
SelectionType |
TypeFromObject |
ValueSetFromObjects
Нотация "ReferencedType" обеспечивает альтернативный способ указания некоторого другого (а в конечном счете - встроенного) типа. Различные нотации "ReferencedType" и методы, которыми указываемый ими тип определяется, специфицированы в следующих пунктах и разделах настоящего стандарта (если не оговорено иное):
DefinedType 13.1
UsefulType 40.1
SelectionType 29
TypeFromObject ГОСТ Р ИСО/МЭК 8824-2, раздел 15
ValueSetFromObjects ГОСТ Р ИСО/МЭК 8824-2, раздел 15
16.4 "ConstrainedType" определен в разделе 44.
16.5 Настоящим стандартом требуется использование нотации "NamedType" в спецификации компонентов типов "множество", "последовательность" и выборочных типов. Нотация для "NamedType" следующая:
NamedType : : = identifier Type
16.6 Идентификатор "identifier" используется для недвусмысленной ссылки на тип "множество", "последовательность" и выборочного типа в нотации значения и в ограничениях связей компонентов (см. ИСО/МЭК 8824-3). Он не является частью типа и не влияет на него.
16.7 Значение некоторого типа должно быть специфицировано нотацией "Value":
Value : : = BuiltinValue | ReferencedValue | ObjectClassFieldValue
Примечание - "ObjectClassFieldValue" определяется в ГОСТ Р ИСО/МЭК 8824-2, 14.6.
16.8 Значения встроенных типов АСН.1 могут быть специфицированы нотацией "BuiltinValue", определенной следующим образом:
BuiltinValue : : =
BitStringValue |
BooleanValue |
СharacterStringValue |
ChoiceValue |
EmbeddedPDVValue |
EnumeratedValue |
ExternalValue |
InstanceOfValue |
IntegerValue |
NullValue |
ObjectIdentifierValue |
OctetStringValue |
RealValue |
SequenceValue |
SequenceOfValue |
SetValue |
SetOfValue |
TaggedValue
Различные нотации "BuiltinValue" определены в тех же самых разделах, что и соответствующие нотации "BuiltinType" (см. 16.2).
16.9 Указываемые значения АСН.1 специфицируются нотацией "ReferencedValue":
ReferencedValue : : =
DefinedValue |
ValueFromObject
Нотация "ReferencedValue" обеспечивает альтернативный способ указания некоторого другого (а в конечном счете - встроенного) значения. Различные нотации "ReferencedValue" и методы, которыми указываемое ими значение определяется, специфицированы в следующих пунктах и разделах настоящего стандарта (если не оговорено иное):
DefinedValue 13.1
ValueFromObject ГОСТ Р ИСО/МЭК 8824-2, раздел 15
16.10 Независимо от того, является ли тип "BuiltinТуре", "ReferencedType" или "ConstrainedType", его значение может быть задано либо "BuiltinValue", либо "ReferencedValue" этого типа.
16.11 Значение типа, указанного с использованием нотации "NamedType", должно быть определено нотацией "NamedValue":
NamedValue : : = identifier Value
где "identifier" - тот же самый, который был использован в нотации "NamedТуре".
Примечание - "identifier" является частью нотации, но не образует часть самого значения. Он используется для недвусмысленной ссылки на компоненты типов "множество", "последовательность" и выборочного типа.
16.12 Подразумеваемое или явное присутствие маркера расширения в определении типа не влияет на значение нотации. Значение нотации для типа с маркером расширения точно такое же, как если бы маркер отсутствовал.
17 Нотация для булевского типа
17.2 Типы, определенные с этой нотацией, имеют тег универсального класса 1.
17.3 Значение булевского типа (см. 3.8.66 и 3.8.88) должно определяться нотацией "BooleanValue":
BooleanValue : : = TRUE | FALSE
18 Нотация для целочисленного типа
18.1 Целочисленный тип (см. 3.8.40) должен указываться нотацией "IntegerType":
IntegerType : : =
INTEGER |
INTEGER "{" NamedNumberList "}"
NamedNumberList : : =
NamedNumber |
NamedNumberList "," NamedNumber
NamedNumber : : =
identifier "(" SignedNumber ")" |
identifier "(" DefinedValue ")"
SignedNumber : : = number | "-" number
18.2 Вторая альтернатива для "SignedNumber" не должна использоваться, если "number" есть нуль.
18.3 "NamedNumberList" не является существенной составной частью определения типа. Эта последовательность используется только в нотации для значения, определенной в 18.9.
18.4 Ссылка "valuereference" в "DefinedValue" должна быть целочисленного типа.
Примечание - Так как "identifier" не может использоваться для спецификации значения, связанного с "NamedNumber", то "DefinedValue" никогда не может быть ошибочно интерпретировано как "IntegerValue". Следовательно, в следующем случае
а INTEGER : : = 1
T1 : : = INTEGER{a(2)}
T2 : : = INTEGER{a(3), b(a)}
c T2 : : = b
d T2 : : = a
"c" обозначает значение 1, так как не может относится ни ко второму, ни к третьему появлению "а" в этом примере, а "d" обозначает значение 3.
18.5 Значения каждого из "SignedNumber" и "DefinedValue", входящего в "NamedNumberList", должны быть различными и представлять разные значения целочисленного типа.
18.6 Все "identifier" входящие в "NamedNumberList", должны быть различными.
18.7 Порядок последовательностей "NamedNumber" в "NamedNumberList" не существенен.
18.8 Типы, определенные этой нотацией, имеют тег универсального класса 2.
18.9 Значение целочисленного типа должно определяться нотацией "IntegerValue":
IntegerValue : : =
SignedNumber |
identifier
18.10 Идентификатор "identifier" в продукции "IntegerValue" должен быть одним из идентификаторов "identifier" в "IntegerТуре", с которым связано значение, и представляет соответствующее число.
Примечание - Когда указывается целочисленное значение, для которого был определен идентификатор "identifier", использование формы "identifier" для "IntegerValue" является предпочтительным.
19 Нотация для перечислимого типа
19.1 Перечислимый тип (см. 3.8.24) должен указываться нотацией "EnumeratedType":
EnumeratedType : : =
ENUMERATED "{" Enumerations "}"
Enumerations : : = RootEnumeration |
RootEnumeration "," "..." |
RootEnumeration "," "..." "," AdditionalEnumeration
RootEnumeration : : = Enumeration
AdditionalEnumeration : : = Enumeration
Enumeration : : =
EnumerationItem | EnumerationItem "," Enumeration
EnumerationItem : : =
identifier | NamedNumber
Примечания
1 Каждое значение "EnumeratedType" имеет идентификатор, который связан с отличным от других целым числом. Однако не подразумевается, что само значение должно иметь какую-либо целочисленную семантику. Спецификация альтернативы "NamedNumber" для "EnumerationItem" обеспечивает управление представлением значения для облегчения совместимости выражений.
2 Численные значения внутри "NamedNumber" в "RootEnumeration" не обязательно должны быть упорядоченными или последовательными, а численные значения внутри "NamedNumber" в "AdditionalEnumeration" должны быть упорядоченными или, но не обязательно, последовательными.
19.2 Для каждой альтернативы "NamedNumber" идентификаторы "identifier" и "SignedNumber" должны отличаться от всех других "identifier" и "SignedNumber" в "Enumeration". Кроме того, для каждой "NamedNumber" выполняются положения 18.2 и 18.4.
19.3 Всем элементам перечисления "EnumerationItem" (в "EnumeratedType"), являющимся идентификаторами "identifier", последовательно присваиваются неотрицательные целые. Для этого последовательность целых начинается с 0, но из нее исключаются те, которые уже задействованы в элементах перечисления "EnumerationItem", являясь "NamedNumber".
Примечание - Целочисленные значения связываются с "EnumerationItem" для определения правил кодирования. В противном случае они не используются в спецификации АСН.1.
19.4 Значение каждого нового "EnumerationItem" должно быть больше, чем все ранее определенные "AdditionalEnumeration" в типе.
19.5 Когда "NamedNumber" используется в определяющем "EnumerationItem" в "Additional-Enumeration", связанное с ним значение должно отличаться от значений всех ранее определенных "EnumerationItem" (в этом типе) независимо от того, встречаются ранее определенные "EnumerationItem" в корне перечисления или нет. Например:
А : : = ENUMERATED {a, b, ..., c(0)} - - недопустимо, т. к. 'а' и 'с' равны 0
В : : = ENUMERATED {a, b, ..., c, d(2)} - - недопустимо, т. к. 'c' и 'd' равны 2
C : : = ENUMERATED {a, b(3), ..., c(1)} - - допустимо, c = 1
D : : = ENUMERATED {a, b, ..., c(2)} - - допустимо, c = 2
19.6 Значение, связанное с первой альтернативой "EnumerationItem" в "AdditionalEnumeration", которая есть "identifier" (а не "NamedNumber"), должно быть наименьшим значением, для которого "EnumerationItem" не определен в "RootEnumeration", и все предшествующие "EnumerationItem" в "AdditionalEnumeration" (если они есть) должны быть меньше. Например являются допустимыми следующие записи:
А : : = ENUMERATED {a, b, ..., c} - - с = 2
В : : = ENUMERATED {a, b, с(0), ..., d} - - d = 3
C : : = ENUMERATED {a, b, ..., c(3), d} - - d = 4
D : : = ENUMERATED {a, z(25), ..., d} - - d = 1
19.7 Перечислимый тип имеет тег универсального класса 10.
19.8 Значение перечислимого типа должно определяться нотацией "EnumeratedValue":
EnumeratedValue : : = identifier
19.9 Идентификатор "identifier" в перечислимом значении "EnumeratedValue" должен быть равен значению "identifier" в последовательности "EnumeratedТуре", с которым оно связывается.
20 Нотация для действительного типа
20.1 Действительный тип (см. 3.8.52) должен указываться нотацией "RealType":
RealType : : = REAL
20.2 Действительный тип имеет тег универсального класса 9.
20.3 Значениями действительного типа являются значения PLUS-INFINITY, MINUS-INFINITY и действительные числа, задаваемые следующей формулой, содержащей три целых числа - М, В и Е:
,
где М - мантисса, В - основание, а Е - показатель степени.
20.4 Действительный тип имеет ассоциированный тип, который используется для задания точности абстрактных значений действительного типа и обеспечения нотаций значений и подтипов действительного типа.
Примечание - Правилами кодирования может определяться другой тип, который используется для спецификации кодирования, или может быть задано кодирование без ссылки на ассоциированный тип. В частности, кодирование в BER и PER обеспечивает двоично-кодированное десятичное (BCD) кодирование, если основание равно 10, и кодирование, допускающее эффективное преобразование в машинное представление с плавающей точкой и обратно, если основание равно 2.
20.5 Ассоциированный тип для определения значения и подтипов есть (с обязательными комментариями):
SEQUENCE {
mantissa INTEGER,
base INTEGER (2|10),
exponent INTEGER
- - Ассоциированное математическое действительное число
- - есть "mantissa", умноженная на "base" в степени "exponent"
}
Примечания
1 Значения, представленные по основанию 2 и 10, рассматриваются как различные абстрактные значения, даже если их вычисление дает одно и то же действительное число, и могут иметь разную прикладную семантику.
2 Нотация "REAL (WITH COMPONENTS { ..., base(10)})" может быть использована для ограничения множества значений по абстрактному основанию 10 (и, аналогично, - основанию 2).
3 Этот тип может предоставлять точное, конечное значение любого числа, которое может храниться в памяти машины с плавающей точкой, и любого числа с конечным символьно-десятичным представлением.
20.6 Значение действительного типа должно определяться нотацией "RealValue":
RealValue : : =
NumericRealValue | SpecialRealValue
NumericRealValue : : = 0
SequenceValue - - Значение ассоциированного типа
SpecialRealValue : : =
PLUS-INFINITY | MINUS-INFINITY
Форма "0" должна использоваться для нулевых значений, альтернативная форма "NumericRealValue" для нулевых значений использоваться не может.
21 Нотация для типа "битовая строка"
21.1 Тип "битовая строка" (см. 3.8.6) должен указываться нотацией "BitStringType":
BitStringType : : =
BIT STRING
BIT STRING "{" NamedBitList "}"
NamedBitList : : =
NamedBit |
NamedBitList "," NamedBit
NamedBit : : =
identifier "(" number ")" |
identifier "(" DefinedValue ")"
21.2 Первый бит в битовой строке называется нулевым. Последний бит в битовой строке называется завершающим.
Примечание - Эта терминология используется в спецификации значения нотации и определении правил кодирования.
21.3 "DefinedValue" должно быть ссылкой на неотрицательное значение целочисленного типа.
21.4 Значения последовательностей "number" и "DefinedValue", появляющихся в списке поименованных битов "NamedBitList", должны быть попарно различными, и являются номерами различных битов в значении битовой строки.
21.5 Все идентификаторы "identifier", появляющиеся в "NamedBitList", должны быть различными.
Примечания
1 Порядок последовательностей продукций "NamedBit" в "NamedBitList" не существенен.
2 Так как "identifier", который появился в "NamedBitList", не может быть использован для спецификации значения, связанного с "NamedBit", то "DefinedValue" никогда не может быть ошибочно интерпретировано как "IntegerValue". Следовательно, в следующем случае:
а INTEGER : : = 1
T1 : : = INTEGER{a(2)}
T2 : : = BIT STRING {a(3), b(a)}
последнее появление "а" обозначает значение 1, которое не может быть указано ни при втором, ни при третьем появлении "а".
21.6 Присутствие "NamedBitList" не влияет на множество абстрактных значений этого типа. Значения, содержащие биты 1, отличные от поименованных битов, допускаются.
21.7 Когда список поименованных битов "NamedBitList" используется в определяющем типе битовой строки, правила кодирования АСН.1 могут добавлять (или убирать) произвольное число завершающих битов 0 к (или из) значениям(ий), которые кодируются или декодируются. Следовательно, проектировщики реализаций должны гарантировать, что различные семантики не связаны со значениями, различающимися только числом завершающих битов 0.
21.8 Этот тип имеет тег универсального класса 3.
21.9 Значение типа "битовая строка" должно определяться нотацией "BitStringValue":
BitStringValue : : =
bstring |
hstring |
"{" IdentifierList "}" |
"{" "}"
IdentifierList : : =
identifier |
IdentifierList "," identifier
21.10 Каждый из идентификаторов "identifier" в значении "BitStringValue" должен быть тем же самым, что и "identifier" в последовательности продукций "BitStringТуре", с которой связывается значение.
21.11 Нотация "BitStringValue" обозначает значение битовой строки с единицами в позициях, заданных номерами, соответствующими идентификаторам "identifier", и с нулями - в остальных позициях.
Примечание - Последовательность продукций "{" "}" используется для обозначения битовой строки, не содержащей ни одного бита.
21.12 При спецификации правил кодирования для битовой строки будут использованы термины "первый бит" и "завершающий бит", где первый бит есть нулевой бит (см. 21.2).
21.13 При использовании нотации "bstring" первый бит записывается слева, а завершающий бит - справа.
21.14 При использовании нотации "hstring" старший бит каждой шестнадцатеричной цифры соответствует левому биту в битовой строке.
Примечание - Эта нотация никоим образом не ограничивает способ размещения правилами кодирования битовой строки по октетам для передачи.
21.15 Нотация "hstring" может использоваться, если только значение битовой строки состоит из количества бит, кратного четырем.
Пример
'А98А'Н
и
'1010100110001010'В
являются альтернативными обозначениями одного и того же значения битовой строки. Если тип был определен с использованием списка поименованных битов "NamedBitList", то (единственный) завершающий нуль не является частью значения, которое, таким образом, имеет длину 15 бит. Если тип был определен без "NamedBitList", то завершающий нуль является частью значения, которое имеет длину 16 бит.
22 Нотация для типа "строка октетов"
22.1 Тип "строка октетов" (см. 3.8.48) должен указываться нотацией "OctetStringType":
OctetStringType : : = OCTET STRING
22.2 Этот тип имеет тег универсального класса 4.
22.3 Значение типа "строка октетов" должно определяться нотацией "OctetStringValue":
OctetStringValue : : =
bstring |
hstring
22.4 Для строк октетов при спецификации правил кодирования октеты указываются терминами "первый октет" и "завершающий октет", а для битов внутри октета - терминами "старший бит" и "младший бит".
22.5 При использовании нотации "bstring" самый левый бит является старшим битом первого октета. Если "bstring" состоит из количества бит, не кратного восьми, она должна интерпретироваться таким образом, как если бы она содержала дополнительные завершающие нули, которые сделают ее длину наименьшей из кратных восьми.
22.6 При использовании нотации "hstring" крайняя левая шестнадцатеричная цифра должна быть старшим полуоктетом первого октета.
22.7 Если "hstring" состоит из нечетного числа шестнадцатеричных цифр, то она должна интерпретироваться таким образом, как если бы она содержала еще одну дополнительную завершающую нулевую шестнадцатеричную цифру.
23 Нотация для вырожденного типа
23.2 Этот тип имеет тег универсального класса 5.
23.3 Значение вырожденного типа должно указываться нотацией "NullValue":
NullValue : : = NULL
24 Нотация для типов "последовательность"
24.1 Нотацией для определения типа "последовательность" (см. 3.8.56) должна быть "SequenceType":
SequenceType : : = SEQUENCE "{" "}" |
SEQUENCE "{" ExtensionAndException OptionalExtensionMarker "}" |
SEQUENCE "{" ComponentTypeLists "}"
ExtensionAndException : : = "..." | "..." ExceptionSpec
OptionalExtensionMarker : : = "," "..." | empty
ComponentTypeLists : : = RootComponentTypeList |
RootComponentTypeList "," ExtensionAndException ExtensionAdditions
OptionalExtensionMarker |
RootComponentTypeList "," ExtensionAndException ExtensionAdditions
ExtensionEndMarker "," RootComponentTypeList |
ExtensionAndException ExtensionAdditions ExtensionEndMarker ","
RootComponentTypeList
RootComponentTypeList : : = ComponentTypeList
ExtensionEndMarker : : = "," "..."
ExtensionAdditions : : = "," ExtensionAdditionList | empty
ExtensionAdditionList : : = ExtensionAddition | ExtensionAdditionList
"," ExtensionAddition
ExtensionAddition : : = ComponentType | ExtensionAdditionGroup
ExtensionAdditionGroup : : = "[[" ComponentTypeList "]]"
ComponentTypeList : : =
ComponentType |
ComponentTypeList "," ComponentType
ComponentType : : =
NamedType |
NamedType OPTIONAL |
NamedType DEFAULT Value |
COMPONENTS OF Type
24.2 Когда продукция "ComponentTypeLists" встречается в определении модуля, для которого выбрано автоматическое тегирование (см. 12.3), и никакой из экземпляров "NamedType" в любой из первых трех альтернатив для "ComponentType" не содержит "TaggedType", то преобразование автоматического тегирования выбрано для всего "СomponentTypeLists"; в противном случае - нет.
Примечания
1 Использование нотации "TaggedType" в определении списка компонентов для типа "последовательность" позволяет спецификатору управлять тегами в противоположность автоматическому присваиванию в методе автоматического тегирования. Следовательно, в следующем случае:
Т : : = SEQUENCE { a INTEGER, b [1] BOOLEAN, c OCTET STRING }
автоматическое тегирование не применяется к списку компонентов а, b, c, даже если это определение типа "последовательность" Т встретилось в модуле, для которого было выбрано автоматическое тегирование.
2 Только экземпляры продукции "ComponentTypeList", встретившиеся в модуле, для которого было выбрано автоматическое тегирование, являются кандидатами для преобразования автоматического тегирования.
24.3 Вопрос о применении преобразования автоматического тегирования решается индивидуально для каждого экземпляра списка "ComponentTypeLists" и до преобразования COMPONENTS OF, определенного в 24.4. Однако, как определено в 24.7-24.9, преобразование автоматического тегирования (если оно применяется) производится после преобразования COMPONENTS OF.
Примечание - В результате применение автоматических тегов подавляется тегами, явно присутствующими в "ComponentTypeLists", но не тегами, присутствующими в "Туре", следующем за COMPONENTS OF.
24.4 Тип "Туре" в нотации "COMPONENTS OF Type" должен быть типом "последовательность". Нотация "COMPONENTS OF Type" должна использоваться для определения включения, в этом месте списка компонентов, всех компонентов указанного типа, за исключением любых маркеров расширения и расширяющих дополнений, которые могут присутствовать в "Туре". (В "COMPONENTS OF Type" включается только "RootСomponentTypeList" типа "Туре"; маркеры расширения и расширяющие дополнения, если они есть, игнорируются нотацией "COMPONENTS OF Type"). При этом преобразовании игнорируются все ограничения, применяемые к указываемому типу.
Примечание - Это преобразование логически завершается до удовлетворения требований последующих подразделов.
24.5 В каждом из последующих подразделов идентифицированы серии появлений "СomponentType" либо в корне, либо в расширяющих дополнениях, либо и в том, и в другом. Правило 24.5.1 должно применяться для всех таких серий.
24.5.1 Для каждой серии из одного или нескольких последовательных появлений типов компонентов "СomponentType", отмеченных как OPTIONAL или DEFAULT, теги этих "СomponentType" и любого непосредственно следующего типа компонента в серии должны быть различными (см. раздел 30). Если было выбрано автоматическое тегирование, то требование, чтобы теги были различными, применяется только после осуществления автоматического тегирования, и всегда должно быть удовлетворено, если применялось автоматическое тегирование.
24.5.2 Правило 24.5.1 должно применяться к сериям "СomponentType" в корне.
24.5.3 Правило 24.5.1 должно применяться к завершенным сериям "СomponentType" в корне или в расширяющих дополнениях в текстуальном порядке их появления в определении типа (игнорируя все скобки версий и многоточия).
24.6 Когда используется третья или четвертая альтернатива "ComponentTypeLists", все "ComponentType" в расширяющих дополнениях должны иметь теги, отличные от тегов текстуально последующих "ComponentType" до первого "ComponentType" который не отмечен как OPTIONAL или DEFAULT в завершающем "RootСomponentTypeList" включительно (если такой есть).
24.7 Преобразование автоматического тегирования появления списка "СomponentTypeLists" логически осуществляется после преобразования, определенного в 24.4, но только если 24.2 определяет, что оно должно применяться к этому экземпляру "СomponentTypeLists". Преобразование автоматического тегирования изменяет каждый тип компонента "СomponentType" в "СomponentTypeLists", заменяя исходный тип "Туре" в продукции "NamedType" замещением "TaggedType", определенным в 24.9.
24.8 Если действует автоматическое тегирование и "ComponentType" в корне расширения не имеют тегов, то "ComponentType" в "ExtensionAdditionList" должен быть тегированным типом.
24.9 Замещающий тегированный тип "TaggedType" определяется следующим образом:
а) в замещающей нотации "TaggedType" используется альтернатива "Tag Type";
б) "Class" замещения "TaggedType" пуст (т.е. тегирование контекстно зависимое);
в) "ClassNumber" в замещении "TaggedType" есть нулевое значение тега для первого "Component-Type" в "RootСomponentTypeList" или для первого "NamedType" в "AlternativeTypeLists", единица - для второго и т.д. по мере возрастания номеров тегов;
г) "ClassNumber" в замещении "TaggedType" первого "СomponentType" в "ExtensionAdditionList" есть нуль, если "RootСomponentTypeList" пропущен, в противном случае он на единицу больше самого большого "ClassNumber" в "RootСomponentTypeList"; следующий "СomponentType" в "ExtensionAdditionList" имеет "ClassNumber" на единицу больше первого и т.д. по мере возрастания номеров тегов;
д) "Туре" в замещении "TaggedType" есть исходный тип "Туре", который будет замещен.
Примечания
1 Правила, управляющие спецификацией явного или неявного тегирования для замещения "TaggedType", приведены в 30.6. Автоматическое тегирование всегда неявное, если только "Туре" не является выборочным типом, нотацией открытого типа или пустой ссылкой "DummyReference" (см. ИСО/МЭК 8824-4, 8.3), когда тегирование является явным.
2 Если удовлетворены требования 24.7, то теги компонентов полностью определены и не изменяются, даже когда тип "последовательность" указывается в определении компонента в другом списке "ComponentTypeList", для которого применяется автоматическое тегирование. Таким образом, в следующем случае:
Т : : = SEQUENCE { a Ta, b Tb, c Tc }
E : : = SEQUENCE { f1 E1, f2 T, f3 E3 }
теги, присоединенные к а, b, с не изменятся возможным автоматическим тегированием, примененным к компонентам Е.
3 Когда тип "последовательность" встречается как "Туре" в "COMPONENTS OF Type", каждое появление в нем "ComponentType" дублируется благодаря применению 24.4 до возможного применения автоматического тегирования к ссылающемуся типу "последовательность". Таким образом, в следующем случае:
Т : : = SEQUENCE { a Ta, b SEQUENCE { b1 T1, b2 T2, b3 T3 }, c Tc }
W : : = SEQUENCE { x Wx, COMPONENTS OF T, y Wy }
теги элементов а, b, с в последовательности Т не обязательно должны быть теми же самыми, что и теги элементов а, b, с в последовательности W, если W была определена в окружении автоматического тегирования, но теги элементов b1, b2 и b3 - одни и те же в последовательностях Т и W. Другими словами, преобразование автоматического тегирования применяется только один раз к данному списку "ComponentTypeLists".
4 Введение подтипа не влияет на автоматическое тегирование.
5 Когда имеет место автоматическое тегирование, вставка новых компонентов может привести к изменениям других компонентов, вызванным побочным эффектом модификации тегов.
24.10 Если используется ключевое слово "OPTIONAL" или "DEFAULT", то соответствующее значение может быть опущено из значения нового типа.
24.11 Если встречает ключевое слово "DEFAULT", то отсутствие значения этого типа должно быть в точности эквивалентно вставке значения, определенного "Value", которое, в свою очередь, должно быть нотацией для значения типа, определенного "Туре" в последовательности продукций "NamedType".
24.12 Значение, соответствующее "ExtensionAdditionGroup" (всем компонентам вместе), является факультативным. Однако если такое значение присутствует, то должно присутствовать и значение, соответствующее компонентам в заключенном в скобки "СomponentTypeList", которые не отмечены как OPTIONAL или DEFAULT.
24.13 Идентификаторы "identifier" во всех последовательностях продукций "NamedType" списка "СomponentTypeLists" (вместе с теми, которые получены раскрытием COMPONENTS OF) должны быть различными.
24.14 Значение для данного типа, расширяющего дополнения, не должно устанавливаться, если не установлены значения для всех типов расширяющего дополнения, не отмеченных как OPTIONAL или DEFAULT, которые логически находятся между этим типом расширяющего дополнения и корнем расширения.
Примечания:
1 Когда тип наращивается от корня расширения (версия 1) через версию 2 к версии 3 путем добавления новых расширяющих дополнений, присутствие в кодировании любых дополнений из версии 3 требует присутствия в кодировании всех дополнений версии 2, не отмеченных как OPTIONAL или DEFAULT.
2 "ComponentType", которые имеются в расширяющих дополнениях, но не содержатся в "ExtensionAddition-Group", должны кодироваться всегда, если они не отмечены как OPTIONAL или DEFAULT, за исключением значения данных уровня представления, переданных отправителем, который использует предшествующую версию абстрактного синтаксиса, где не определена продукция "СomponentType".
3 Рекомендуется использовать продукцию "ExtensionAdditionGroup", так как:
а) она может привести к более компактному кодированию в зависимости от правил кодирования (например, PER);
б) синтаксис более точен в том отношении, если он ясно указывает, что значение типа, определенного в "ExtensionAdditionList" и не отмеченного как OPTIONAL или DEFAULT, всегда должно присутствовать в кодировании, если кодируется группа расширяющих дополнений, в которой определен тип (см. примечание 1);
в) синтаксис ясно указывает, какие типы в "ExtensionAdditionList" должны поддерживаться приложением как группа.
24.15 Все типы "последовательность" имеют тег универсального класса 16.
Примечание - Типы "последовательность" (см. 25.2).
24.16 Значение типа "последовательность" должно определяться нотацией
SequenceValue : : =
"{" ComponentValueList "}" |
"{" "}"
ComponentValueList : : =
NamedValue |
ComponentValueList "," NamedValue
24.17 Нотация "{" "}" должна использоваться, только если:
а) все последовательности "ComponentType" в "SequenceType" помечены как "DEFAULT", или
"OPTIONAL", а все значения - опущены, или
б) нотацией типа была "SEQUENCE {}".
24.18 Должно быть по одному значению "NamedValue" для каждого типа "NamedТуре" в "SequenceType", который не отмечен как "DEFAULT" или "OPTIONAL", и эти значения должны быть в том же самом порядке, что и соответствующие последовательности "NamedТуре".
25 Нотация для типов "последовательность-из"
25.1 Нотацией для определения типа "последовательность-из" (см. 3.8.57) из другого типа должна быть "SequenceОfType":
SequenceOfType : : = SEQUENCE OF Type
25.2 Все типы "последовательность-из" имеют тег универсального класса 16.
Примечание - Типы "последовательность" имеют тот же самый тег, что и типы "последовательность-из" (см. 24.15).
25.3 Значение типа "последовательность-из" должно определяться нотацией "SequenceOfValue":
SequenceOfValue : : = "{" ValueList "}" | "{" "}"
ValueList : : =
Value |
ValueList "," Value
Нотация "{" "}" используется, когда SequenceOfValue есть пустой список.
25.4 Каждое значение "Value" в списке значений "ValueList" должно быть нотацией для значения типа, заданного в "SequenceOfType".
Примечание - Семантическое значение может быть связано с порядком этих значений.
26 Нотация для типов "множество"
26.1 Нотацией для определения типа "множество" (см. 3.8.58) из других типов должна быть "SetType":
SetType : : = SET "{" "}" |
SET "{" ExtensionAndException OptionalExtensionMarker "}" |
SET "{" ComponentTypeLists "}"
Продукции "ComponentTypeLists", "ExtensionAndException" и "OptionalExtensionMarker" определены в 24.1.
26.2 "Туре" в нотации "COMPONENTS OF Type" должен быть типом "множество". Нотация "COMPONENTS OF Type" должна использоваться для определения включения, в данном месте в списке компонентов, всех типов компонентов, появляющихся в указанном типе, за исключением любых маркеров расширения и расширяющих дополнений, которые могут присутствовать в "Туре". (В "COMPONENTS OF Type" включается только "RootСomponentTypeList" типа "Туре"; маркеры расширения и расширяющие дополнения, если они есть, игнорируются нотацией "COMPONENTS OF Type".) При этом преобразовании игнорируются все ограничения, применяемые к указываемому типу.
Примечание - Это преобразование логически завершается до удовлетворения требований последующих разделов.
26.3 Типы "СomponentType" в типе "множество" должны иметь различающиеся теги (см. раздел 30). Тег каждого нового "СomponentType", добавляемого к "AdditionalСomponentTypeList", должен быть канонически больше (см. 8.4), чем тег других компонентов в "AdditionalСomponentTypeList".
Примечание - Когда "TagDefault" для модуля, в котором появилась данная нотация, есть "AUTOMATIC TAGS", это условие выполняется независимо от фактических типов "СomponentType", в результате применения 24.7.
26.4 Положения 24.2, 24.7-24.13 применяются также и для типов "множество".
26.5 Все типы "множество" имеют тег универсального класса 17.
Примечание - Типы "множество-из" имеют тот же самый тег, что и типы "множество" (см. 27.2).
26.6 Никакая семантика не должна связываться с порядком значений в типе "множество".
26.7 Значение типа "множество" должно определяться нотацией "SetValue":
SetValue : : = "{" ComponentValueList "}" | "{" "}"
Продукция "ComponentValueList" определена в 24.16.
26.8 Нотация "{" "}" должна использоваться для "SetValue", только если:
а) все последовательности "СomponentType" в "SetType" помечены как "DEFAULT" или "OPTIONAL", а все значения - опущены, или
б) нотацией типа была "SET {}".
26.9 Должно быть по одному значению "NamedValue" для каждого типа "NamedТуре" в "SetType", который не отмечен как "DEFAULT" или "OPTIONAL".
Примечание - Эти значения "NamedValue" могут появляться в произвольном порядке.
27 Нотация для типов "множество-из"
27.1 Нотацией для определения типа "множество-из" (см. 3.8.59) из другого типа должна быть "SetOfType":
SetOfType : : =
SET OF Type
27.2 Все типы "множество-из" имеют тег универсального класса 17.
Примечание - Типы "множество" имеют тот же самый тег, что и типы "множество-из" (см. 26.5).
27.3 Значение типа "множество-из" должно определяться нотацией "SetOfValue":
SetOfValue : : = "{" ValueList "}" | "{" "}"
Список значений "ValueList" определен в 25.3.
Нотация "{" "}" используется, когда SetOfValue есть пустой список.
27.4 Каждое значение "Value" в списке значений "ValueList" должно быть нотацией для значения типа "Туре", заданного в "SetOfТуре".
Примечания
1 Никакое семантическое значение не должно быть связано с порядком этих значений.
2 Не требуется, чтобы правила кодирования сохраняли порядок этих значений.
3 Тип "множество-из" не является математическим множеством значений, например для "SET OF INTEGER" значения "{1}" и "{11}" являются различными.
28 Нотация для выборочных типов
28.1 Нотация для определения выборочного типа (см. 3.8.13) из других типов должна быть "ChoiceType":
ChoiceType : : = CHOICE "{" AlternativeTypeLists "}"
AlternativeTypeLists : : =
RootAlternativeTypeList |
RootAlternativeTypeList "," ExtensionAndException
ExtensionAdditionAlternatives OptionalExtensionMarker
RootAlternativeTypeList : : = AlternativeTypeList
ExtensionAdditionAlternatives : : =
"," ExtensionAdditionAlternativesList | empty
ExtensionAdditionAlternativesList : : = ExtensionAdditionAlternative |
ExtensionAdditionAlternativesList ","
ExtensionAdditionAlternative
ExtensionAdditionAlternative : : = ExtensionAdditionAlternatives |
NamedType
ExtensionAdditionAlternatives : : = "[[" AlternativeTypeList "]]"
AlternativeTypeList : : =
NamedType |
AlternativeTypeList "," NamedType
Примечание - Типы CHOICE : : = { a A } и А являются различными и могут кодироваться различным образом.
28.2 Типы, определенные в продукциях "AlternativeTypeList" в "AlternativeTypeLists", должны иметь различающиеся теги (см. раздел 28). Если действует автоматическое тегирование и "NamedType" в корне расширения не имеют тегов, то "NamedType" в "ExtensionAdditionAlternativesList" не должны тегироваться.
Примечание - Когда "TagDefault" для модуля, в котором появилась данная нотация, есть "AUTOMATIC TAGS", теги автоматически становятся различными в результате применения 24.7.
28.3 Когда продукция "AlternativeTypeLists" встречается в определении модуля, для которого выбрано автоматическое тегирование (см. 12.3), и никакой из экземпляров "NamedType" в ней не содержит тип "Type", являющийся экземпляром "TaggedType", то преобразование автоматического тегирования выбрано для всей "AlternativeTypeList"; в противном случае - нет. Преобразование автоматического тегирования "AlternativeTypeLists", когда оно выбрано, применяется к каждому типу "NamedType" продукции "AlternativeTypeLists" путем замены каждого "Туре", исходного для продукции "NamedType", экземпляром замещения "TaggedType", определенного в 24.9.
28.4 Тег каждого нового "NamedType", добавляемого к "ExtensionAdditionAlternativesList", должен быть канонически больше (см. 8.4) тегов других альтернатив в "ExtensionAdditionAlternativesList" и в "ExtensionAdditionAlternativesList" последним должен быть "NamedType".
28.5 Выборочный тип содержит значения, не все из которых имеют один и тот же тег. (Тег зависит от альтернативы, которая дает значение выборочному типу).
28.6 Когда данный тип не имеет маркера расширения и используется там, где настоящий стандарт требует использовать типы с различающимися тегами (см. 24.5, 24.6, 26.3 и 28.2), все возможные теги значений выборочного типа должны рассматриваться с точки зрения этого требования. Это требование иллюстрируется в следующих примерах, где принято, что "TagDefault" не есть "AUTOMATIC TAGS".
Примеры
1 А : : = CHOICE
{b B,
c NULL}
B : : = CHOICE
{d [0] NULL,
e [1] NULL}
2 А : : = CHOICE
{b B,
c C}
B : : = CHOICE
{d [0] NULL,
e [1] NULL}
C : : = CHOICE
{f [2] NULL,
g [3] NULL}
3 (НЕКОРРЕКТНЫЙ)
А : : = CHOICE
{b B,
c C}
B : : = CHOICE
{d [0] NULL,
e [1] NULL}
C : : = CHOICE
{f [0] NULL,
g [1] NULL}
В примерах 1 и 2 нотация используется корректно. В примере 3 нотация некорректна без автоматического тегирования, так как теги типов d, f, а также е, g идентичны.
28.7 Идентификаторы "identifier" всех типов "NamedType" в "AlternativeTypeLists" должны отличаться от идентификаторов других типов "NamedType" в этом же списке.
28.8 Значение выборочного типа должно определяться нотацией "ChoiceValue":
ChoiceValue : : = identifier ":" Value
28.9 "Value" должно быть нотацией для значения того типа в "AlternativeTypeLists", который назван идентификатором "identifier".
29 Нотация для селективных типов
29.1 Нотацией, определяющей селективный тип (см. 3.8.55), должна быть "SelectionType":
SelectionType : : = identifier "<" Type
где "Туре" обозначает выборочный тип, а "identifier" - один из типов "NamedType", появляющихся в "AlternativeTypeLists" определения этого выборочного типа.
29.1.1 Когда "Туре" обозначает ограниченный тип, выбор осуществляется из родового типа, игнорируя ограничение.
29.2 Когда "SelectionType" используется в качестве "NamedType", идентификатор "identifier" типа "NamedType" присутствует так же, как и "identifier" типа "SelectionType".
29.3 Когда "SelectionType" используется в качестве "Туре", идентификатор "identifier" сохраняется и обозначает тип выбранной альтернативы.
29.4 Нотацией для значения селективного типа должна быть нотация для значения, указанного типом "SelectionType".
30 Нотация для тегированных типов
Тегированный тип (см. 3.8.64) - это новый тип, который является изоморфным старому типу, но имеет другой тег. Тегированный тип используется главным образом там, где настоящим стандартом требуется использование типов с различающимися тегами (см. 24.5, 24.6, 26.3 и 28.2). Использование в модуле "TagDefault" c "AUTOMATIC TAGS" позволяет выполнить эти требования без явной спецификации нотации тегированного типа в этом модуле.
Примечание - Когда протокол определяет, что значения нескольких типов данных могут быть переданы в один и тот же момент времени, различие тегов может быть необходимым для того, чтобы обеспечить получателю возможность корректно декодировать значение.
30.1 Нотацией для тегированного типа должна быть "TaggedType":
TaggedType : : =
Tag Type |
Tag IMPLICIT Type |
Tag EXPLICIT Type
Tag : : = "[" Class ClassNumber "]"
ClassNumber : : =
number |
DefinedValue
Class : : =
UNIVERSAL |
APPLICATION |
PRIVATE |
empty
30.2 Ссылка на значение "valuereference" в "DefinedValue" должна быть целочисленного типа, и ей должно быть присвоено неотрицательное значение.
30.3 Новый тип изоморфен старому типу, но имеет тег класса "Class" и номер "ClassNumber", за исключением случая, когда "Class" есть "empty"; в этом случае тег - контекстно зависимого класса с номером "ClassNumber".
30.4 Класс "Class" не может быть универсальным классом "UNIVERSAL", за исключением типов, определенных в настоящем стандарте.
Примечания:
1 Использование тегов универсального класса регулярно согласуется ИСО и МЭК-Т.
2 В подразделе С.2.12 содержится руководство и указания по стилистике использования классов тегов.
30.5 Все применения тегов относятся либо к явному, либо к неявному тегированию. Неявное тегирование указывает (тем правилам кодирования, которые обеспечивают соответствующий выбор), что явная идентификация исходных тегов типа "Туре" в "TaggedType" не является необходимой при передаче.
Примечание - Может быть полезным сохранять старый тег, когда он универсального класса и, следовательно, недвусмысленно идентифицирует старый тип без знания определения АСН.1 нового типа. Однако минимальное количество октетов для передачи обычно достигается использованием IMPLICIT. Пример кодирования, использующего IMPLICIT, приведен в ИСО/МЭК 8825-1.
30.6 Конструкция тегирования задает явное тегирование, если выполняется одно из следующих утверждений:
а) используется альтернатива "Tag EXPLICIT Type";
б) используется альтернатива "Tag Type", и значение "TagDefault" для модуля есть либо "EXPLICIT TAGS", любо пусто;
в) используется альтернатива "Tag Type", и значение "TagDefault" для модуля есть либо "IMPLICIT TAGS", любо "AUTOMATIC TAGS", но тип, определяемый "Туре", есть выборочный или открытый тип, или тип "DummyReference" (см. ИСО/МЭК 8824-4, 8.3).
30.7 Если "Class" есть "empty", то нет ограничений на использование "Tag", кроме тех, которые подразумеваются требованием различия тегов в 24.5, 24.6, 26.3 и 28.2.
30.8 Альтернатива "IMPLICIT" не должна использоваться, если тип, определяемый "Туре", есть выборочный или открытый тип, или тип "DummyReference" (см. ИСО/МЭК 8824-4, 8.3).
30.9 Нотацией для значения "TaggedType" должна быть "TaggedValue":
TaggedValue : : = Value
где "Value" есть нотация для значения "Туре" в "TaggedType".
Примечание - "Tag" не появляется в этой нотации.
31 Нотация для типа "идентификатор объекта"
31.1 Тип "идентификатор объекта" (см. 3.8.47) должен указываться нотацией "ObjectIdentifierType":
ObjectIdentifierType : : =
OBJECT IDENTIFIER
31.2 Этот тип имеет тег универсального класса 6.
31.3 Нотацией для значения идентификатора объекта должна быть "ObjectIdentifierValue":
ObjectIdentifierValue : : =
"{" ObjIdComponentList "}" |
"{" DefinedValue ObjIdComponentList "}"
ObjIdComponentList : : =
ObjIdComponent |
ObjIdComponent ObjIdComponentList
ObjIdComponent : : = NameForm |
NumberForm |
NameAndNumberForm
NameForm : : = identifier
NumberForm : : = number | DefinedValue
NameAndNumberForm : : =
identifier "(" NumberForm ")"
31.4 Ссылка на значение "valuereference" в "DefinedValue" числовой формы "NumberForm" должна быть целочисленного типа и ей должно быть присвоено неотрицательное значение.
31.5 Ссылка на значение "valuereference" в "DefinedValue" как на значение идентификатора объекта "ObjectIdentifierValue" должна быть типа "идентификатор объекта".
31.6 Именная форма "NameForm" должна использоваться только для тех компонентов идентификатора объекта, численное значение и идентификатор которых определены в приложениях А - С ИСО/МЭК 9834-1, и должна быть одним из идентификаторов, определенных в этих приложениях. Когда ИСО/МЭК 9834-1 определяет синонимы идентификаторов, любой синоним может использоваться с той же самой семантикой. Когда одно и то же имя является идентификатором, определенным в ИСО/МЭК 9834-1, и значением ссылки АСН.1 в модуле, содержащем "NameForm", имя в значении идентификатора объекта должно трактоваться как идентификатор ИСО/МЭК 9834-1.
31.7 Альтернатива "number" в числовой форме "NumberForm" должна быть числовым значением, присвоенным компоненту идентификатора объекта.
31.8 Идентификатор "identifier" в "NameAndNumberForm" должен быть задан, когда числовое значение присвоено компоненту идентификатора объекта.
Примечание - Уполномоченные, распределяющие численные значения компонентам идентификаторов объектов, идентифицированы в ИСО/МЭК 9834-1.
31.9 Семантика значения идентификатора объекта определяется в ИСО/МЭК 9834-1.
31.10 Значащей частью компонента идентификатора объекта является "NameForm" или "NumberForm", к которой он сводится и которая предоставляет числовое значение для компонента идентификатора объекта. За исключением дуг, определенных в приложениях А - С ИСО/МЭК 9834-1, числовое значение компонента идентификатора объекта всегда присутствует в экземпляре нотации значения идентификатора объекта.
31.11 Когда значение идентификатора объекта "ObjectIdentifierValue" содержит альтернативу "DefinedValue", список компонентов идентификатора объекта, на который она ссылается, предшествует компонентам, явно присутствующим в значении.
Примечание - ИСО/МЭК 9834-1 рекомендует, чтобы при присваивании значения идентификатора объекта также присваивалось и значение описателя объекта.
Примеры
С идентификаторами, присвоенными в ИСО/МЭК 9834-1, значения
{iso standard 8571 pci (1)}
и
{1 0 8571 1}
идентифицируют объект "pci", определенный в ИСО 8571.
С дополнительным определением
ftam OBJECT IDENTIFIER : : = {iso standard 8571}
этим значениям эквивалентно следующее:
{ftam pci (1)}
32 Нотация для типа "встроенное-здп"
32.1 Тип "встроенное-здп" (см. 3.8.21) должен указываться нотацией "EmbeddedPDVType":
EmbeddedPDVType : : = EMBEDDED PDV
32.2 Этот тип имеет тег универсального класса 11.
Примечание - Когда используется согласование уровня представления, те же самые функциональные возможности, что и EXTERNAL, обеспечиваются EMBEDDED PDV (вместе с дополнительными функциональными возможностями), но биты в строке будут другими. В этом случае рекомендуется, чтобы в последующих изменениях версии прикладного протокола была сделана замена EXTERNAL CHOICE (external EXTERNAL, embedded-pdv EMBEDDED PDV}. Дополнительные замены использования EXTERNAL там, где не используется согласование уровня представления, предлагаются в ГОСТ Р ИСО/МЭК 8824-2, приложение С.
32.3 Тип состоит из значений, представляющих:
а) кодирование единственного значения данных, которое может быть, а может и не быть, значением типа АСН.1, и
б) идентификацию (отдельно или вместе):
1) класса значений, содержащего это значение данных (абстрактного синтаксиса), и
2) кодирования, использованного для отличия этого значения данных от других того же класса (синтаксиса передачи).
Примечания
1 Значение данных может быть значением типа АСН.1 или, например, кодированием неподвижного или движущегося изображения. Идентифицируются либо один или два идентификатора объектов, либо ссылки на контекст представления ВОС для идентификации абстрактного синтаксиса и синтаксиса передачи.
2 Идентификация абстрактного синтаксиса и/или кодирования может также определяться проектировщиком приложения в качестве фиксированного значения, и в этом случае она может не кодироваться в конкретном сеансе взаимосвязи.
32.4 Тип "встроенное-здп" имеет ассоциированный тип. Этот тип используется для обеспечения нотации значений и подтипов типа "встроенное-здп".
32.5 Ассоциированный тип для определения значения и подтипа, принимая окружение автоматического тегирования, имеет вид (с нормативными комментариями):
SEQUENCE {
identification CHOICE {
syntaxes SEQUENCE {
abstract OBJECT IDENTIFIER,
transfer OBJECT IDENTIFIER }
- - Идентификаторы объектов абстрактного синтаксиса и
- - синтаксиса передачи - -,
syntax OBJECT IDENTIFIER
- - Единственный идентификатор объекта для идентификации
- - класса или кодирования - -,
presentation-context-id INTEGER
- - (Применяется только в среде ВОС)
- - Согласованный контекст уровня представления
- - идентифицирует класс значения и его кодирование - - ,
context-negotiation SEQUENCE {
presentation-context-id INTEGER,
transfer-syntax OBJECT IDENTIFIER }
- - (Применяется только в среде ВОС)
- - Осуществляется процесс согласования контекста для
- - идентификации класса значения и его кодирования - -,
transfer-syntax OBJECT IDENTIFIER
- - Класс значения (например спецификация того, что это
- - значение типа АСН.1) зафиксирован разработчиком
- - приложения (и, следовательно, известен как отправителю,
- - так и получателю). Этот случай предназначен главным
- - образом для обеспечения выборочного шифрования поля (или
- - другого преобразования кодирования) типа АСН.1 - -,
fixed NULL
- - Значение данных есть значение фиксированного типа АСН.1
- - (и, следовательно, известно как отправителю, так и
- - получателю) - - },
data-value-descriptor ObjectDescriptor OPTIONAL
- - Этим обеспечивается человекочитаемая идентификация
- - класса значения - -,
data-value OCTET STRING}
(WITH COMPONENTS {
...,
data-value-descriptor ABSENT})
Примечание - Тип "встроенное-зпд" не допускает включения значения "data-value-descri ptor". Однако определение ассоциированного типа отражает базовую общность, которая существует между типом "встроенное-здп", внешним типом и неограниченным типом символьных строк.
32.6 Для альтернативы "presentation-context-id" целочисленное значение должно быть идентификатором контекста представления в множестве определенных контекстов. Эта альтернатива не должна использоваться ни в запросе P-CONNECT, ни в запросе P-ALTER-CONNECT для контекста представления, который предлагается для добавления или удаления этими примитивами запросов.
Примечание - Даже если предлагается единственный синтаксис передачи для контекста представления в списке определений контекстов представления, альтернатива "presentation-context-id" не может использоваться для контекста представления.
32.7 Альтернатива "context-negotiation" должна использоваться в запросах P-CONNECT или в P-ALTER-CONNECT, а целочисленное значение должно быть идентификатором контекста представления, предложенного для добавления к множеству определенных контекстов. Идентификатор объекта "transfer-syntax" должен идентифицировать предложенный синтаксис передачи для того контекста представления, который используется для кодирования значения.
32.8 Нотация для значения типа "встроенное-здп" должна быть нотацией значения для ассоциированного типа, определенного в 32.5, где значение "data-value" OCTET STRING представляет собой кодирование, использующее специфицированный в "identification" синтаксис передачи.
EmbeddedPdvValue : : = SequenceValue - - значение ассоциированного типа, определенного в 32.5.
32.9 Пример 1 - Когда проектировщик приложения хочет, чтобы кодирование не зависело от любого окружения представления (и, следовательно, могло передаваться, храниться и вызываться без модификаций), необходимо запретить использование альтернатив "presentation-context-id" и "context-negotiation". Это может быть сделано следующим образом:
EMBEDDED PDV (WITH COMPONENTS {
...,
identification (WITH COMPONENTS {
...,
presentation-context-id ABSENT,
context-negotiation ABSENT })})
32.10 Пример 2 - Если обязательно должна использоваться единственная альтернатива, например "syntaxes", то это может быть сделано следующим образом:
EMBEDDED PDV (WITH COMPONENTS {
...,
identification (WITH COMPONENTS {
syntaxes PRESENT })})
33 Нотация для внешнего типа
33.1 Внешний тип (см. 3.8.37) должен указываться нотацией "ExternalType":
ExternalType : : = EXTERNAL
33.2 Этот тип имеет тег универсального класса 8.
33.3 Тип состоит из значений, представляющих:
а) кодирование единственного значения данных, которое может быть, а может и не быть значением типа АСН.1, и
б) идентификацию:
1) класса значений, содержащего это значение данных (абстрактного синтаксиса), и
2) кодирования, использованного для отличия этого значения данных от других того же класса (синтаксиса передачи), и
в) (факультативно) описатель объекта, который обеспечивает человекочитаемое описание класса значения данных. Факультативный описатель объекта может присутствовать, если только он явно допускается комментарием, связанным с использованием нотации "ExternalType".
Примечание - Примечание 1 к 32.3 применяется так же и к внешнему типу.
33.4 Внешний тип имеет ассоциированный тип. Он используется для задания точного определения абстрактных значений внешнего типа и обеспечения нотаций для его значения и подтипа.
Примечание - Правила кодирования могут определять различные типы, которые используются для производного кодирования, или могут специфицировать кодирования без ссылки на какой-либо ассоциированный тип. В частности, кодирование BER использует эквивалент типа "последовательность", идентичный тому, который присутствовал в определении внешнего типа в ГОСТ Р ИСО/МЭК 8824, и кодирование внешних значений с помощью BER не изменяется.
33.5 Ассоциированный тип для определения значения и подтипа, принимая окружение автоматического тегирования, имеет вид (с нормативными комментариями):
SEQUENCE {
identification CHOICE {
syntaxes SEQUENCE {
abstract OBJECT IDENTIFIER,
transfer OBJECT IDENTIFIER }
- - Идентификаторы объектов абстрактного синтаксиса и
- - синтаксиса передачи - -,
syntax OBJECT IDENTIFIER
- - Единственный идентификатор объекта для идентификации
- - класса или кодирования - -,
presentation-context-id INTEGER
- - (Применяется только в среде ВОС)
- - Согласованный контекст уровня представления
- - идентифицирует класс значения и его кодирование - - ,
context-negotiation SEQUENCE {
presentation-context-id INTEGER,
transfer-syntax OBJECT IDENTIFIER }
- - (Применяется только в среде ВОС)
- - Осуществляется процесс согласования контекста для
- - идентификации класса значения и его кодирования - -,
transfer-syntax OBJECT IDENTIFIER
- - Класс значения (например спецификация того, что это
- - значение типа АСН.1) зафиксирован разработчиком
- - приложения (и, следовательно, известен как отправителю,
- - так и получателю). Этот случай предназначен главным
- - образом для обеспечения выборочного шифрования поля (или
- - другого преобразования кодирования) типа АСН.1 - -,
fixed NULL
- - Значение данных есть значение фиксированного типа АСН.1
- - (и, следовательно, известно как отправителю, так и
- - получателю) - - },
data-value-descriptor ObjectDescriptor OPTIONAL
- - Этим обеспечивается человекочитаемая идентификация
- - класса значения - -,
data-value OCTET STRING}
(WITH COMPONENTS {
...,
identification (WITH COMPONENTS {
...,
syntaxes ABSENT,
transfer-syntax ABSENT,
fixed ABSENT })})
Примечание - Внешний тип не допускает включения альтернатив "syntaxes", "transfer-syntax" и "fixed" для "identification". Эти альтернативы не могут быть допустимы для внешнего типа потому, что необходимо поддерживать обратную совместимость с ГОСТ Р ИСО/МЭК 8824. Проектировщики приложений, которым требуются эти альтернативы, должны использовать тип "встроенное-здп". Определение ассоциированного типа отражает базовую общность, которая существует между типом "встроенное-зпд", внешним типом и неограниченным типом символьных строк.
33.7 Нотация для значения внешнего типа должна быть нотацией значения для ассоциированного типа, определенного в 33.5, где значение "data-value" OCTET STRING представляет собой кодирование, использующее специфицированный в "identification" синтаксис передачи.
ExternalValue : : = SequenceValue - - значение ассоциированного типа, определенного в 33.5.
Примечание - По историческим причинам правила кодирования могут передавать в EXTERNAL встроенные значения, кодирования которых не являются кратными 8 битам. Такие значения не могут быть представлены в нотации значения, использующей ассоциированный тип.
34 Типы символьных строк
Эти типы состоят из строк символов из некоторого заданного символьного репертуара. Обычно определяют символьный репертуар и его кодирование с использованием ячеек одной или нескольких таблиц; каждая ячейка соответствует символу в репертуаре. Обычно каждой ячейке присвоены графический символ и имя символа, хотя в некоторых репертуарах ячейки оставлены пустыми или имеют имена, но не имеют представления (например ячейки с именами, но без представления, включают управляющие символы, как EOF в ИСО 646, и символы интервала, как THIN-SPACE и EN-SPACE в ИСО/МЭК 10646-1).
Термин абстрактный символ обозначает всю информацию, связанную с ячейкой в таблице символьного репертуара. Информация, связанная с ячейкой, обозначает отдельный абстрактный символ в репертуаре, даже если этой информацией является null (ни графический символ, ни имя не присвоены ячейке).
Нотация значений АСН.1 для типов символьных строк имеет три варианта (которые можно комбинировать), формально определенные ниже:
а) печатное представление символов в строке, использующее присвоенные графические символы, возможно, включая символы интервала; это нотация "cstring";
Примечания
1 Такое представление может оказаться двусмысленным, когда один и тот же графический символ используется для нескольких символов в репертуаре.
2 Такое представление может оказаться двусмысленным, когда используются символы интервала или спецификация печатается с использованием пропорционального шрифта;
б) перечень символов в значении символьной строки путем задания серий ссылок на значения АСН.1, которые были присвоены символам; множество таких ссылок на значения определено в модуле ASN1-CHARACTER-MODULE в разделе 37 для репертуаров символов ИСО/МЭК 10646-1 и IA5String; это представление не доступно для других символьных репертуаров, если только пользователь не определит такие ссылки на значения, используя нотацию, описанную в а) или в);
в) перечень символов в значении символьной строки путем идентификации каждого абстрактного символа позицией его ячейки в таблице репертуара символов; эта форма доступна только для IA5String, UniversalString, UTF8String и BMPString.
35 Нотация для типов символьных строк
35.1 Нотацией для указания типа символьной строки (см. 3.8.11) должна быть
CharacterStringType : : = RestrictedCharacterStringType |
UnrestrictedCharacterStringType
"RestrictedCharacterStringType" является нотацией для ограниченного типа символьной строки и определена в разделе 36; "UnrestrictedCharacterStringType" является нотацией для неограниченного типа символьной строки и определена в 39.1.
35.2 Тег каждого ограниченного типа символьной строки определен в 36.1. Тег неограниченного типа символьной строки определен в 39.2.
35.3 Нотацией для значения символьной строки должна быть
CharacterStringValue : : = RestrictedCharacterStringValue |
UnrestrictedCharacterStringValue
Нотация "RestrictedCharacterStringValue" определена в разделе 36.7. Нотация "UnrestrictedCharacter-StringValue" определена в 39.6.
36 Определение ограниченных типов символьных строк
В данном разделе определяются типы, значения которых ограничены последовательностями из нуля, одного или нескольких символов из некоторой заданной совокупности символов. Нотацией для указания ограниченного типа символьной строки должна быть "RestrictedCharacterStringТуре":
RestrictedCharacterStringТуре : : = BMPString |
GeneralString |
GraphicString |
IA5String |
ISO646String |
NumericString |
PrintableString |
TeletexString |
T61String |
UniversalString |
UTF8String |
VideotexString |
VisibleString
Каждая альтернатива "RestrictedCharacterStringТуре" определяется заданием:
а) тега, присвоенного типу, и
б) имени (например NumericString), которым тип указывается, и
в) символами в совокупности символов, используемой в определении типа, путем указания таблицы, перечисляющей графические символы, или через ссылку на регистрационный номер в Международном регистре ИСО наборов кодированных символов, или через ссылку на ИСО/МЭК 10646-1.
36.1 В таблице 3 приведены имена, по которым ссылаются на ограниченные типы символьных строк, номера тегов универсального класса, присвоенные типам, определяющие регистрационные номера, таблицы или номера разделов настоящего стандарта и, при необходимости, идентифицированы примечания, относящиеся к строке таблицы. Когда в нотации определены синонимы, они приводятся в скобках.
Примечание - Теги, присвоенные типам символьных строк, недвусмысленно идентифицируют тип. Однако если АСН.1 используется для определения новых типов из приведенных здесь (в частности, используя IMPLICIT), то будет невозможно распознать эти типы без знания определения АСН.1.
Таблица 3 - Перечень зарегистрированных типов символьных строк
Имя для ссылки на тип |
Номер тега универсального класса |
Определяющий регистрационный номер*, номер таблицы или раздела стандарта |
Примечание |
UTF8String |
12 |
См. 36.13 |
- |
NumericString |
18 |
1 |
|
PrintableString |
19 |
1 |
|
TeletexString (T61String) |
20 |
6, 87, 102, 103, 106, 107, 126, 144, 150, 153, 156, 164, 165, 168 + SPACE + DELETE |
2 |
VideotexString |
21 |
1, 13, 72, 73, 87, 89, 102, 108, 126, 128, 129, 144, 150, 153, 164, 165, 168 + SPACE + DELETE |
3 |
IA5String |
22 |
1, 6 + SPACE + DELETE |
- |
GraphicString |
25 |
Все графические наборы + SPACE |
- |
VisibleString (IS0646Strin) |
26 |
6 + SPACE |
4 |
GeneralString |
27 |
Все графические и символьные наборы + SPACE + DELETE |
- |
UniversalString |
28 |
См. 36.6 |
- |
BMPString |
30 |
См. 36.12 |
- |
_____________________________ * Определяющие регистрационные номера приведены в Международном регистре ИСО наборов кодированных символов, которые должны использоваться с Escape-последовательностями. | |||
Примечания 1 Тип-стиль, размер, цвет, интенсивность и прочие характеристики отображения не существенны. 2 Записи, соответствующие этим регистрационным номерам, ссылаются на рекомендацию МСЭ-Т Т.61, содержащую правила их использования. Регистрационные записи 6 и 156 могут использоваться вместо записей 102 и 103. 3 Записи, соответствующие этим регистрационным номерам, обеспечивают функциональные возможности Рекомендаций МСЭ-Т Т.100 и Т.101. 4 Указание регистрационного номера 6 Международного регистра ИСО наборов кодированных символов, которые должны использоваться с Escape-последовательностями, является неявным указанием ИСО 646. В этом состоит отличие от ГОСТ Р ИСО/МЭК 8824, где приводился регистрационный номер 2 (неявное указание на ИСО 646). В приложениях, где желательно применять регистрационный номер 2, следует использовать другие способы указания [например через неограниченные символьные строки (см. раздел 39)] для обращения к старому определению VisibleString или к ГОСТ Р ИСО/МЭК 8824. |
36.2 В таблице 4 приведены символы, которые могут появляться в типе NumericString, и их абстрактный синтаксис.
Примечания
1 Это значение идентификатора объекта может использоваться в значениях CHARACTER STRING и в других случаях, когда необходимо передать идентификацию типа символьной строки отдельно от значения.
2 Значение абстрактного синтаксиса символов NumericString может быть закодировано:
а) по одному из правил ИСО/МЭК 10646-1 для кодирования абстрактных символов. В этом случае синтаксис передачи символов идентифицируется идентификатором объекта, связанным с этими правилами в ИСО/МЭК 10646-1, приложение М;
б) по правилам кодирования АСН.1 для встроенного типа NumericString. В этом случае синтаксис передачи символов идентифицируется значением идентификатора объекта { joint-iso-itu-t asn1 (1) basic-encoding (1) }.
36.4 В таблице 5 приведены символы, которые могут появляться в типе PrintableString, и их абстрактный синтаксис.
Таблица 5 - Тип PrintableString
Имя |
Графическое представление |
Имя |
Графическое представление |
Прописные буквы |
A, B, ... Z |
Запятая |
, |
Строчные буквы |
a, b, ... z |
Дефис |
- |
Цифры |
0, 1, ... 9 |
Точка |
. |
Пробел |
(пробел) |
Наклонная черта |
/ |
Апостроф |
' |
Двоеточие |
: |
Левая скобка |
( |
Знак равенства |
= |
Правая скобка |
) |
Знак вопроса |
? |
Знак плюс |
+ |
|
|
36.5 Следующие значения идентификатора и описателя объекта назначены для идентификации и описания абстрактного синтаксиса символов PrintableString:
{ joint-iso-itu-t asn1 (1) specification (0) characterStrings (1) printableString (1) }
и
"PrintableString character abstract syntax"
Примечания
1 Это значение идентификатора объекта может использоваться в значениях CHARACTER STRING и в других случаях, когда необходимо передать идентификацию типа символьной строки отдельно от значения.
2 Значение абстрактного синтаксиса символов PrintableString может быть закодировано:
а) по одному из правил ИСО/МЭК 10646-1 для кодирования абстрактных символов. В этом случае синтаксис передачи символов идентифицируется идентификатором объекта, связанным с этими правилами в ИСО/МЭК 10646-1, приложение М;
б) по правилам кодирования АСН.1 для встроенного типа PrintableString. В этом случае синтаксис передачи символов идентифицируется значением идентификатора объекта {joint-iso-itu-t asn1(1) basic-encoding (1)}.
36.6 Символами, которые могут появляться в типе UniversalString, являются любые символы, допускаемые ИСО/МЭК 10646-1, а использование этого типа влечет за собой требования соответствия, специфицированные в ИСО/МЭК 10646-1, особенно относительно ограничений на использование зон ИСО/МЭК 10646-1.
Примечания
1 Использование этого типа без ограничений не рекомендуется, так как соответствие будет, в общем случае, не практичным.
2 В разделе 37 определен модуль АСН.1, содержащий ряд подтипов этого типа для совокупности графических символов для подмножеств, определенной в приложении А к ИСО/МЭК 10646-1.
36.7 Нотацией значений для ограниченных типов символьных строк должна быть "cstring" (см. 11.11), "CharacterStringList", "Quadruple" или "Tuple". Нотация "Quadruple" допускается только для символьных строк длиной в один символ и может использоваться только в нотации значения для типов UniversalString, UTF8String или BMPString. Нотация "Tuple" допускается только для символьных строк длиной в один символ и может использоваться только в нотации значения для типа IA5String.
RestrictedCharacterStringValue : : = cstring | CharacterStringList |
Quadruple | Tuple
CharacterStringList : : = "{" CharSyms "}"
CharSyms : : = CharsDefn | CharSyms "," CharsDefn
CharsDefn : : = cstring | DefinedValue
Quadruple : : = "{" Group "," Plane "," Row "," Cell "}"
Group : : = number
Plane : : = number
Row : : = number
Cell : : = number
Tuple : : = "{" TableColumn "," TableRow "}"
TableColumn : : = number
TableRow : : = number
Примечания
1 Нотация "cstring" может использоваться только для среды, допускающей отображение графических символов, представленных в значении. Обратно, если среда не имеет таких возможностей, то единственным способом спецификации значения символьной строки, использующей такие графические символы, является нотация "CharacterStringList", только если тип есть UniversalString, UTF8String, BMPString или IA5String; при этом для "CharsDefn" используется альтернатива "DefinedValue" (см. 37.1.2).
2 В разделе 37 определяется ряд ссылок "valuereference", которые обозначают единичные символы (строки длиной 1) типов BMPString (и, следовательно, UniversalString и UTF8String) и IA5String.
Пример - Допустим, что мы хотим специфицировать значение "abcdef" для UniversalString, когда символ "" не может быть представлен в доступной среде; это значение может быть выражено как: IMPORTS BasicLatin, greekCapitalLetterSigma FROM ASN1-CHARACTER-MODULE
{joint-iso-itu-t asn1 (1) specification (0) modules (0) iso10646 (0)}; MyAlphabet : : = UniversalString (FROM (BasicLatin | greekCapitalLetterSigma)) mystring MyAlphabet : : = {"abc", greekCapitalLetterSigma, "def"}
3 При спецификации значения типа UniversalString, UTF8String или BMPString, нотация "cstring" не должна использоваться, если двусмысленность, возникающая из-за различия графических символов с одинаковым представлением, не может быть разрешена.
Пример - Следующая нотация "cstring" не должна использоваться, так как графические символы 'Н', 'О', 'Р' и 'Е' встречаются в алфавитах BASIC LATIN, CYRILLIC и BASIC GREEK и, следовательно, двусмысленны.
IMPORTS BasicLatin, Cyrillic, BasicGreek FROM ASN1-CHARACTER-MODULE
{joint-iso-itu-t asn1 (1) specification (0) modules (0) iso10646 (0)}; MyAlphabet : : = UniversalString (FROM (BasicLatin | Cyrillic | BasicGreek)) mystring MyAlphabet : : = "HOPE"
Альтернативным недвусмысленным определением "mystring" могло бы быть следующее:
mystring MyAlphabet (BasicLatin) : : = "HOPE"
Формально "mystring" является ссылкой на значение подмножества "MyAlphabet", но она, по правилам отображения значений, приведенным в приложении F, может быть использована, когда необходима ссылка на значение в пределах "MyAlphabet".
36.8 Альтернатива "DefinedValue" в "CharsDefn" должна ссылаться на значение этого типа.
36.9 Число "number" в продукциях "Plane", "Row" и "Cell" должно быть меньше 256, а в продукции "Group" - меньше 128.
36.10 Продукция "Group" специфицирует группу в кодовом пространстве UCS, "Plane" - плоскость в группе, "Row" - строку в плоскости, а "Cell" - ячейку в строке. Абстрактный символ, идентифицированный этой нотацией, является абстрактным символом, специфицированным значениями "Group", "Plane", "Row" и "Cell". В любом случае множество допустимых значений может быть ограничено введением подтипа.
Примечание - Проектировщики приложений должны тщательно рассматривать соответствие, когда используют такие типы символьных строк с открытым завершением, как GeneralString, GraphicString и UniversalString без ограничений. Тщательное рассмотрение соответствия необходимо и для ограниченных, но длинных типов строк, таких как TeletexString.
36.11 Число "number" в продукции "TableColumn" должно быть от нуля до семи, а в продукции "TableRow" - от нуля до пятнадцати. "TableColumn" задает столбец, а "TableRow" - строку в кодовой таблице в соответствии с рисунком 1 ИСО/МЭК 2022. Эта нотация используется только для IA5String, когда кодовая таблица содержит регистрационную запись 1 в столбцах 0, 1 и регистрационную запись 6 в столбцах 2-7 (см. Международный регистр ИСО наборов кодированных символов, которые должны использоваться с Escape-последовательностями).
36.12 BMPString является подтипом UniversalString, который имеет свой собственный уникальный тег и моделирует основную многоязычную плоскость (первые 64К - 2 ячеек) ИСО/МЭК 10646-1. Он имеет ассоциированный тип, определенный как:
UniversalString (Bmp)
где Bmp определяется в модуле АСН.1 ASN1-CHARACTER-MODULE (см. раздел 37) как подтип UniversalString, соответствующий совокупности имен "ВМР", определенной в ИСО/МЭК 10646-1, приложение А.
Примечания
1 Так как BMPString является встроенным типом, то он не определяется в ASN1-CHARACTER-MODULE.
2 Целью определения BMPString как встроенного типа является предоставление возможности по правилам кодирования (таким как BER), которые не учитывают ограничения, использовать 16-битовое, а не 32-битовое кодирование.
3 В нотациях значений BMPString допустимы значения UniversalString и UTF8String.
36.13 На абстрактном уровне UTF8String является синонимом UniversalString и может применяться всякий раз, когда используется UniversalString (подчиняясь правилам, требующим различия тегов), но имеет другой тег и тип.
Примечание - Его кодирование отличается от кодирования UniversalString и в большинстве случаев будет менее длинным.
37 Наименование символов и совокупностей, определенных в ИСО/МЭК 10646-1
В настоящем разделе специфицирован встроенный модуль АСН.1, который содержит определения ссылочных имен значений для всех символов ИСО/МЭК 10646-1, и каждое имя указывает значение UniversalString длиной 1. Этот модуль также содержит определения ссылочных имен типов для всех совокупностей символов ИСО/МЭК 10646-1, и каждое имя указывает подмножество UniversalString.
Примечание - Эти значения доступны для использования в нотациях значений типа UniversalString и типов, полученных из него. Все ссылки на типы и значения, определенные в модуле, специфицированном в 37.1, являются экспортируемыми и должны быть импортированы любым использующим их модулем.
37.1 Спецификация модуля АСH.1 "ASN1-CHARACTER-MODULE"
Данный модуль не приводится здесь полностью. Вместо этого специфицирован способ, которым он определяется.
37.1.1 Модуль начинается следующим образом:
ASN1-CHARACTER-MODULE {joint-iso-itu-t asn1 (1) specification (0)
modules (0) iso10646 (0)}
DEFINITIONS : : = BEGIN
- - Все ссылки на значения и типы, определенные в данном модуле,
- - являются экспортируемыми и могут быть импортированы любым
- - модулем.
- - Управляющие символы ИСО 646:
nul IA5String : : = {0, 0}
soh IA5String : : = {0, 1}
stx IA5String : : = {0, 2}
etx IA5String : : = {0, 3}
eot IA5String : : = {0, 4}
enq IA5String : : = {0, 5}
ack IA5String : : = {0, 6}
bel IA5String : : = {0, 7}
bs IA5String : : = {0, 8}
ht IA5String : : = {0, 9}
lf IA5String : : = {0, 10}
vt IA5String : : = {0, 11}
ff IA5String : : = {0, 12}
cr IA5String : : = {0, 13}
so IA5String : : = {0, 14}
si IA5String : : = {0, 15}
dle IA5String : : = {1, 0}
dc1 IA5String : : = {1, 1}
dc2 IA5String : : = {1, 2}
dc3 IA5String : : = {1, 3}
dc4 IA5String : : = {1, 4}
nak IA5String : : = {1, 5}
syn IA5String : : = {1, 6}
etb IA5String : : = {1, 7}
can IA5String : : = {1, 8}
em IA5String : : = {1, 9}
sub IA5String : : = {1, 10}
esc IA5String : : = {1, 11}
is4 IA5String : : = {1, 12}
is3 IA5String : : = {1, 13}
is2 IA5String : : = {1, 14}
is1 IA5String : : = {1, 15}
del IA5String : : = {7, 15}
37.1.2 Для каждой записи в каждом списке имен для графических символов (глифов), показанных в разделах 24 и 25 ИСО/МЭК 10646-1, модуль содержит утверждение вида:
<namedcharacter>BMPString : : = <tablecell>
- - представляет символ <iso10646name>, см. ИСО/МЭК 10646-1,
где: а) <iso10646name> - имя символа, полученное из перечисленных в ИСО/МЭК 10646-1;
б) <namedcharacter> - строка, полученная применением к <iso10646name> процедур, установленных в 37.2;
в) <tablecell> - глиф в ячейке таблицы в ИСО/МЭК 10646-1, соответствующей записи списка.
Пример
latinCapitalLetterA BMPString : : = {0, 0, 0, 65}
- - представляет символ LATIN CAPITAL LETTER A, см. ИСО/МЭК 10646-1
greekCapitalLetterSigma BMPString : : = {0, 0, 3, 145}
- - представляет символ GREEK CAPITAL LETTER SIGMA, см. ИСО/МЭК 10646-1.
37.1.3 Для каждого имени совокупности графических символов, определенной в ИСО/МЭК 10646-1, приложение А, в модуль включается утверждение вида:
<namedcollectionstring> : : = BMPString
(FROM (<alternativelist>))
- - представляет совокупность символов <collectionstring>,
- - см. ИСО/МЭК 10646-1,
где а) <collectionstring> - имя совокупности, присвоенное в ИСО/МЭК 10646-1;
б) <namedcollectionstring> - образовано применением к <collectionstring> процедуры 37.3;
в) <alternativelist> - образуется с использованием <namedcharacter>, как описано в 37.2, для каждого символа, определенного в ИСО/МЭК 10646-1.
Результирующая ссылка на тип, <namedcollectionstring>, образует ограниченное подмножество (см. руководство в приложении D).
Примечание - Ограниченное подмножество является списком символов в заданном подмножестве. Противоположность ему - выбранное подмножество, которое является совокупностью символов, перечисленных в ИСО/МЭК 10646-1, приложение А, плюс совокупность BASIC LATIN.
Пример (частичный):
space BMPString : : = {0, 0, 0, 32}
exclamationMark BMPString : : = {0, 0, 0, 33}
quotationMark BMPString : : = {0, 0, 0, 34}
... - - и так далее
tilde BMPString : : = {0, 0, 0, 126}
BasicLatin : : = BMPString
(FROM (space
| exclamationMark
| quotationMark
| ... - - и так далее
| tilde)
)
- - представляет совокупность символов BASIC LATIN,
- - см. ИСО/МЭК 10646-1.
- - Многоточия в этом примере используются для краткости и
- - означают "и так далее";
- - их нельзя использовать в реальном модуле АСН.1.
37.1.4 В ИСО/МЭК 10646-1 определены три уровня реализации. По умолчанию все типы, определенные в модуле ASN1-CHARACTER-MODULE, за исключением "Level1" и "Level2", соответствуют реализации уровня 3, так как эти типы не имеют ограничений на использование комбинированных символов. "Level1" указывает, что требуется реализация уровня 1, "Level2" - уровня 2, а "Level3" - уровня 3. Таким образом, в ASN1-CHARACTER-MODULE определено следующее:
Level1 : : = BMPString (FROM (ALL EXCEPT CombiningCharacters))
Level2 : : = BMPString (FROM (ALL EXCEPT CombiningCharactersB-2))
Level3 : : = BMPString
Примечания
1 "CombiningCharacters" и "CombiningCharactersB-2" являются ссылками <namedcollectionstring>, удовлетворяющими совокупностям "COMBINING CHARACTERS" и "COMBINING CHARACTERS B-2", соответственно, определенным в ИСО/МЭК 10646-1, приложение А.
2 "Level1" и "Level2" используются либо следом за "IntersectionMark" (см. раздел 46), либо как единственное ограничение в "ConstraintSpec". Примеры см. в С.2.7.1.
3 Дополнительную информацию см. в D.2.5.
37.1.5 Модуль завершается утверждением:
END
37.1.6 Определяемым пользователем эквивалентом примера 37.1.3 является:
BasicLatin : : = BMPString (FROM (space .. tilde))
- - представляет совокупность символов BASIC LATIN, см. ИСО/МЭК 10646-1.
37.2 <namedcharacter> является строкой, полученной из <iso10646name> (см. 37.1.2) применением следующего алгоритма:
а) каждая прописная буква <iso10646name> преобразуется в соответствующую строчную букву, если только прописной букве не предшествует символ SPACE; в этом случае прописная буква остается неизменной;
б) каждая цифра и символ HYPHEN-MINUS остаются неизменными;
в) каждый символ SPACE удаляется.
Примечание - Приведенный алгоритм, вместе с руководством по наименованию символов в приложении К ИСО/МЭК 10646-1, всегда приведет к недвусмысленной нотации значения для любого имени символа, приведенного в ИСО/МЭК 10646-1.
Пример - Символ ИСО/МЭК 10646-1 в строке 0, ячейке 60, который назван "LESS-THAN SIGN" и имеет графическое представление "<", может быть указан с использованием "DefinedValue"
less-thanSign
37.3 <namedcollectionstring> является строкой, полученной из <collectionstring> применением следующего алгоритма:
а) каждая прописная буква в имени совокупности ИСО/МЭК 10646-1 преобразуется в соответствующую строчную букву, если только прописной букве не предшествует символ SPACE или она не является первой буквой в имени; в этом случае прописная буква остается неизменной;
б) каждая цифра и символ HYPHEN-MINUS остаются неизменными;
в) каждый символ SPACE удаляется.
Примеры
1 Совокупность, идентифицированная в приложении А ИСО/МЭК 10646-1 как
BASIC LATIN
имеет ссылку на тип АСН.1
BasicLatin
2 Тип символьной строки, состоящий из символов совокупностей BASIC LATIN и BASIC ARABIC, может быть определен следующим образом:
My-Character-String : : = BMPString (FROM (BasicLatin | BasicArabic))
Примечание - Приведенная конструкция необходима потому, что более простая.
My-Character-String : : = BMPString (BasicLatin | BasicArabic) допускает лишь строки, состоящие целиком из символов либо BASIC LATIN, либо BASIC ARABIC, но не из их смеси.
38 Канонический порядок символов
38.1 Для создания подтипов с помощью "ValueRange" и возможности использования правил кодирования определен канонический порядок символов для UniversalString, BMPString, NumericString, PrintableString, VisibleString и IA5String.
38.2 Для целей только данного раздела каждый символ имеет однозначное соответствие ячейке кодовой таблицы, независимо от того, присвоено ли ячейке имя символа и представление, является ли символ управляющим или печатным, комбинированным или некомбинированным.
38.3 Канонический порядок абстрактных символов определяется каноническим порядком их ячеек.
38.4 Для UniversalString канонический порядок ячеек определяется (см. ИСО/МЭК 10646-1) как:
256*(256*(128*(номер группы) + (номер плоскости)) + (номер строки)) + (номер ячейки)
Полный набор содержит ровно 128*256*256*256 символов. Конечные точки диапазонов "ValueRange" в нотациях "PermittedAlphabet" (или отдельных символов) могут быть заданы, используя либо ссылку на значение АСН.1, определенную в модуле ASN1-CHARACTER-MODULE, либо (когда графический символ является недвусмысленным в контексте спецификации) графическим символом в "cstring" (модуль ASN1-CHARACTER-MODULE определен в 37.1). Невозможно задать ячейку в качестве конечной точки диапазона или идентифицировать отдельный символ, когда этой ячейке не присвоено имя символа или представление.
38.5 Для BMPString канонический порядок ячеек определяется (см. ИСО/МЭК 10646-1) как
256*(номер строки) + (номер ячейки)
Полный набор содержит ровно 256*256 символов. Конечные точки диапазонов "ValueRange" в нотациях "PermittedAlphabet" (или отдельных символов) могут быть заданы, используя либо ссылку на значение АСН.1, определенную в модуле ASN1-CHARACTER-MODULE, либо (когда графический символ является недвусмысленным в контексте спецификации) графическим символом в "cstring". Невозможно задать ячейку в качестве конечной точки диапазона или идентифицировать отдельный символ, когда этой ячейке не присвоено имя символа или представление.
38.6 Для NumericString канонический порядок с возрастанием слева направо определяется (см. таблицу 4 в 36.2) как
(пробел) 0 1 2 3 4 5 6 7 8 9
Полный набор содержит ровно 11 символов. Конечная точка диапазона "ValueRange" (или отдельные символы) может быть задана использованием графического символа в "cstring".
Примечание - Этот порядок является тем же самым, что и порядок соответствующих символов в совокупности BASIC LATIN ИСО/МЭК 10646-1.
38.7 Для PrintableString канонический порядок с возрастанием слева направо определяется (см. таблицу 5 в 36.4) как
(пробел) (апостроф) (левая скобка) (правая скобка) (знак плюс)
(запятая) (дефис) (точка) (наклонная черта) 0123456789
(двоеточие) (знак равенства) (знак вопроса)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Полный набор содержит ровно 74 символа. Конечная точка диапазона "ValueRange" (или отдельные символы) может быть задана использованием графического символа в "cstring".
Примечание - Этот порядок является тем же самым, что и порядок соответствующих символов в совокупности BASIC LATIN ИСО/МЭК 10646-1.
38.8 Для VisibleString канонический порядок ячеек определяется кодированием ИСО 646 (названным ISO 646 ENCODING) следующим образом:
(ISO 646 ENCODING) - 32
Примечание - Таким образом, канонический порядок тот же самый, что и для символов в ячейках 2/0-7/14 кодовой таблицы ИСО 646.
Полный набор содержит ровно 95 символов. Конечная точка диапазона "ValueRange" (или отдельные символы) могут быть заданы использованием графического символа в "cstring".
38.9 Для IA5String канонический порядок ячеек определяется кодированием ИСО/МЭК 646 следующим образом:
(ISO 646 ENCODING)
Полный набор содержит ровно 128 символов. Конечная точка диапазона "ValueRange" (или отдельные символы) может быть задана использованием графического символа в "cstring" или ссылкой на значение управляющего символа ИСО 646, определенной в 37.1.1.
39 Определение неограниченных типов символьных строк
В данном значении определяется тип, значениями которого являются значения любого символьного абстрактного синтаксиса. Абстрактный синтаксис может быть частью множества определенных контекстов в экземпляре соединения или может быть непосредственно указан для каждого экземпляра использования неограниченного типа символьной строки.
Примечания
1 Символьный абстрактный синтаксис (и один или несколько соответствующих символьных синтаксисов передачи) может быть определен любой организацией, имеющей право присваивать идентификаторы объектов АСН.1.
2 Профили, создаваемые сообществами по интересам, будут определять символьные абстрактные синтаксисы и синтаксисы передачи, которые должны поддерживаться для конкретных экземпляров или групп символьных строк. Будет принято включать ссылку на поддерживаемые синтаксисы в форму заявки о соответствии реализации протоколу. Группирование экземпляров для целей спецификации прикладного уровня может быть достигнуто использованием различных ссылок на типы АСН.1 (все из которых должны быть ссылками на тип CHARACTER STRING).
39.1 Неограниченный тип символьных строк (см. 3.8.69) должен указываться нотацией "UnrestrictedCharacterStringType"
UnrestrictedCharacterStringType : : = CHARACTER STRING
39.2 Этот тип имеет тег универсального класса 29.
39.3 Тип состоит из значений, представляющих:
а) значение символьной строки, которая может, но не обязательно, быть значением типа символьной строки АСН.1, или
б) идентификацию (по отдельности или вместе):
1) класса значений, содержащего это значение символьной строки (символьный абстрактный синтаксис), и
2) использованное кодирование (символьный синтаксис передачи) для отличия этого значения символьной строки от других значений в том же самом классе.
39.4 Неограниченный тип символьных строк имеет ассоциированный тип, который используется для обеспечения нотаций значения и подтипа для этого типа.
39.5 Ассоциированный тип для определения значения и подтипа, используя окружение автоматического тегирования, есть (с нормативными комментариями):
SEQUENCE {
identification CHOICE {
syntaxes SEQUENCE {
abstract OBJECT IDENTIFIER,
transfer OBJECT IDENTIFIER }
- - Идентификаторы объектов абстрактного синтаксиса и синтаксиса
- - передачи - -,
syntax OBJECT IDENTIFIER
- - Идентификатор объекта для класса кодирования - -,
presentation-context-id INTEGER
- - (Применяется только в среде ВОС)
- - Согласованный контекст представления идентифицирует класс
- - значения и его кодирование - - ,
context-negotiation SEQUENCE {
presentation-context-id INTEGER,
transfer-syntax OBJECT IDENTIFIER }
- - (Применяется только в среде ВОС)
- - Идет процесс согласования контекста для идентификации класса
- - значения и его кодирования - -,
transfer-syntax OBJECT IDENTIFIER
- - Класс значения (например спецификация того, что оно является
- - значением типа АСН.1) зафиксирован проектировщиком приложения
- - (и, следовательно, известен как отправителю, так и получателю).
- - Этот случай предназначен главным образом для поддержки
- - выборочного-шифрования-полей (или других преобразований
- - кодирования) типов АСН.1 - - ,
fixed NULL
- - Значение данных является значением фиксированного типа АСН.1 (и,
- - следовательно, известно как отправителю, так и получателю) - -},
data-value-descriptor ObjectDescriptor OPTIONAL
- - Обеспечивает человекочитаемую идентификацию класса значения - -,
string-value OCTET STRING}
(WITH COMPONENTS {
...,
data-value-descriptor ABSENT})
Примечание - Неограниченный тип символьных строк не допускает включения значения "datavalue-descriptor" вместе с "identification". Однако определение ассоциированного типа отражает базовую общность, которая существует между типом "встроенное-зпд", внешним типом и неограниченным типом символьных строк.
39.6 Нотация значения должна быть нотацией значения для ассоциированного типа, в которой значение "string-value" OCTET STRING представляет собой кодирование, использующее синтаксис передачи, специфицированный в "identification".
UnrestrictedCharacterStringValue : : = SequenceValue
- - значение ассоциированного типа, определенного в 39.5
39.7 Пример неограниченного типа символьных строк приведен в С.2.8.
41 Обобщенное время
41.1 Этот тип должен указываться именем
GeneralizedTime
41.2 Тип состоит из значений, представляющих:
а) календарную дату, как определено в ИСО 8601, и
б) время дня с любой точностью, определенной в ИСО 8601, за исключением значения часов 24, которое не должно использоваться, и
в) местную поправку часов, как определено в ИСО 8601.
41.3 Тип определяется, используя АСН.1, следующим образом:
GeneralizedTime : : =
[UNIVERSAL 24] IMPLICIT VisibleString
со значениями VisibleString, ограничивающимися строками символов, которые являются либо:
а) строкой, представляющей календарную дату, как определено в ИСО 8601, с четырехзначным представлением года, двузначными представлениями месяца и дня, без использования разделителей, с последующей строкой, представляющей время дня, как определено в ИСО 8601, без разделителей, отличных от десятичной запятой и десятичной точки (как установлено в ИСО 8601), и без завершающего Z (как установлено в ИСО 8601), либо
б) символами из перечисления а) с последующей прописной буквой Z, либо
в) символами из перечисления а) с последующей строкой, представляющей местную поправку часов, как определено в ИСО 8601, без разделителей.
В случае а) время представляет местное время. В случае б) время представляет всемирное время. В случае в) часть строки, сформированная как в случае а), представляет местное время (), а местная поправка часов () позволяет определить всемирное время следующим образом:
всемирное время равно -
Примеры:
Случай а)
"19851106210627.3"
представляет местное время 21 ч 6 мин и 27,3 с 6 ноября 1985 г.
Случай б)
"19851106210627.3Z"
представляет указанное выше всемирное время.
Случай в)
"19851106210627.3-0500"
представляет местное время как в случае а) с отставанием на 5 ч от всемирного времени.
41.4 Тег определен в 41.3.
41.5 Нотацией значения должна быть нотация значения VisibleString, определенная в 41.3.
42 Всемирное время
42.1 Этот тип должен указываться именем
UTCTime
42.2 Тип состоит из значений, представляющих:
а) календарную дату,
б) время дня с точностью до минуты или секунды и
в) (факультативно) местную поправку часов.
42.3 Тип определяется, используя АСН.1, следующим образом:
UTCTime : : = [UNIVERSAL 23] IMPLICIT VisibleString
со значениями VisibleString, ограничивающимися строками следующих символов:
а) шесть цифр YYMMDD, где YY - две последние цифры года, ММ - двузначное представление месяца (считая январь 01), DD - двузначное представление дня (от 01 до 31), и
б) либо
1) четыре цифры hhmm, где hh - часы (от 00 до 23), а mm - минуты (от 00 до 59), либо
2) шесть цифр hhmmss, где hh и mm - как в случае 1), а ss - секунды (от 00 до 59), и
в) либо
1) символа Z, либо
2) одного из символов "+" или "-" с последующими цифрами hhmm,
где hh - часы, а mm - минуты.
Альтернативы в случае б) позволяют варьировать точность представления времени.
В альтернативе в)1) время является всемирным. В альтернативе в)2) время (), заданное в а) и б), является местным; поправка часов (), заданная альтернативой в)2), позволяет определить всемирное время следующим образом:
всемирное время равно -
Пример 1 - Если местное время - 7 ч 2 января 1982 г., а всемирное - 12 ч, то значением UTCTime является либо
"8201021200Z"
либо
"8201020700-0500"
Пример 2 - Если местное время - 7 ч 2 января 2001 г., а всемирное - 12 ч, то значением UTCTime является либо
"0101021200Z"
либо
"0101020700-0500"
42.4 Тег определен в 42.3.
42.5 Нотацией значения должна быть нотация значения VisibleString, определенная в 42.3.
43 Тип "описатель объекта"
43.1 Этот тип должен указываться именем
ObjectDescriptor
43.2 Тип состоит из человекочитаемых текстов, которые служат для описания объектов. Текст не является недвусмысленной идентификацией объекта, но подразумевается, что идентичный текст для разных объектов есть что-то необычное.
Примечание - Рекомендуется, чтобы уполномоченные по присвоению объектам значений типа "OBJECT IDENTIFIER" присваивали также значения типа "ObjectDescriptor" этим объектам.
43.3 Тип определяется, используя АСН.1, следующим образом:
ObjectDescriptor : : = [UNIVERSAL 7] IMPLICIT GraphicString
Строка "GraphicString" содержит текст, описывающий объект.
43.4 Тег определен в 43.3.
43.5 Нотацией значения должна быть нотация значения GraphicString, определенная в 43.3.
44 Ограниченные типы
44.1 Нотация "ConstrainedType" позволяет применять ограничение к (порождающему) типу, либо ограничивая его множество значений некоторым подтипом порождающего типа, либо (в типах "множество" или "последовательность") задавая, что отношения между компонентами применяются к значениям порождающего типа и значениям некоторого другого компонента в том же самом значении множества или последовательности. С ограничением может быть ассоциирован идентификатор исключения.
ConstrainedType : : =
Type Constraint |
TypeWithConstraint
В первой альтернативе порождающий тип есть "Туре", а ограничение задается "Constraint", как определено в 44.5. Вторая альтернатива определена в 44.4.
44.2 Когда нотация "Constraint" следует за нотацией типа "множество-из" или "последовательность-из", то она применяется к типу "Туре" в (самой внутренней) нотации "множество-из" или "последовательность-из", а не к типу "множество-из" или "последовательность-из".
Примечание - Например следующее ограничение "(SIZE(1..64))" применяется к VisibleString, а не к SEQUENCE OF:
NamesOfMemberNations : : = SEQUENCE OF VisibleString (SIZE(1..64))
44.2.1 Когда нотация "Constraint" следует за нотацией селективного типа, она применяется к выборочному типу, а не к типу выбранной альтернативы.
Примечание - В следующем примере ограничение (WITH COMPONENTS {..., a ABSENT}) применяется к типу CHOICE, а не к выбранному типу SEQUENCE (см. 29.1 bis).
T : : = CHOICE {
a SEQUENCE {
a INTEGER OPTIОNAL,
b BOOLEAN
},
b NULL
}
V : : = a < T (WITH COMPONENTS {..., a ABSENT})
44.3 Когда нотация "Constraint" следует за нотацией "TaggedType", то интерпретация всей нотации одна и та же, независимо от того, рассматривается ли "TaggedType" или "Туре" в качестве порождающего типа.
44.4 Как следствие интерпретации, установленной в 44.2, специальная нотация обеспечивается для того, чтобы ограничение применялось к типам "множество-из" или "последовательность-из". Это нотация "TypeWithConstraint":
TypeWithConstraint : : =
SET Constraint OF Type |
SET SizeConstraint OF Type |
SEQUENCE Constraint OF Type |
SEQUENCE SizeConstraint OF Type
В первой и второй альтернативах порождающий тип есть "SET OF Type", а в третьей и четвертой - "SEQUENCE OF Type". В первой и третьей альтернативах ограничение есть "Constraint" (см. 44.5), а во второй и четвертой - "SizeConstraint" (см. 48.5).
Примечание - Хотя альтернативы "Constraint" включают соответствующие альтернативы "SizeConstraint", последние, не взятые в скобки, введены для обратной совместимости с ГОСТ Р ИСО/МЭК 8824.
44.5 Ограничение специфицируется нотацией "Constraint":
Constraint : : = "(" ConstraintSpec ExceptionSpec ")"
ConstraintSpec : : =
SubtypeConstraint |
GeneralConstraint
Продукция "ExceptionSpec" определяется в разделе 45. Если она не используется вместе с маркером расширения (см. раздел 47), то должна присутствовать только в том случае, когда продукция "ConstraintSpec" включает в себя ссылку "DummyReference" (см. ИСО/МЭК 8824-4, 8.3) или является ограничением "UserDefinedConstraint" (см. ИСО/МЭК 8824-3, раздел 9).
44.6 Нотация "SubtypeConstraint" является нотацией общего назначения "ElementSetSpec" (раздел 46):
SubtypeConstraint : : = ElementSetSpec
В данном контексте элементы являются значениями порождающего типа (управляющим множеством элементов является порождающий тип). В множестве должен быть по крайней мере один элемент.
45 Идентификатор исключения
45.1 В сложной спецификации АСН.1 имеется ряд мест, где существенно распознавать, что декодеры должны обрабатывать материал, который не полностью специфицирован. Такие случаи возникают, в частности, при использовании ограничения, которое определено с использованием параметра абстрактного синтаксиса (см. ИСО/МЭК 8824-4, раздел 10).
45.2 В таких случаях проектировщик приложения нуждается в идентификации действий, которые должны быть предприняты, когда нарушается некоторое зависящее от реализации ограничение. Идентификатор исключения обеспечивает недвусмысленный способ указания частей спецификации АСН.1, чтобы выделить действия, которые должны быть предприняты. Идентификатор состоит из символа "!" с последующим факультативным типом АСН.1 и значением этого типа. При отсутствии типа в качестве типа значения принимается INTEGER.
45.3 Если присутствует продукция "ExceptionSpec", то она указывает, что в стандарте имеется текст, говорящий о том, как обрабатывать нарушение ограничения, связанное с "!". Если она отсутствует, то реализаторы будут вынуждены либо идентифицировать текст, описывающий действия, которые необходимо предпринять, либо предпринимать зависящие от реализации действия, когда встретиться нарушение ограничения.
45.4 Нотация "ExceptionSpec" определяется следующим образом:
ExceptionSpec : : = "!" ExceptionIdentification | empty
ExceptionIdentification : : = SignedNumber |
DefinedValue |
Type ":" Value
Первые две альтернативы обозначают идентификаторы исключения целочисленного типа. Третья альтернатива обозначает идентификатор исключения ("Value") произвольного типа ("Туре").
45.5 Когда для типа установлен ряд ограничений, несколько из которых имеют идентификаторы исключений, идентификатор исключения самого внешнего ограничения должен рассматриваться как идентификатор исключения этого типа.
45.6 когда для типов, используемых в арифметических установках, присутствует маркер расширения, идентификатор исключения игнорируется и не наследуется типом, ограниченным в результате арифметической установки.
46 Спецификация множества элементов
При осуществлении арифметической установки, включающей ограничения подтипа и множества значений, в этой установке используются только абстрактные значения, определенные корнем расширения. Все экземпляры нотации значения (включая ссылки на значения), используемые в этих ограничениях, обязательно относятся к абстрактному значению корня расширения. Если на самом внешнем уровне "ElementSetSpecs" нет маркера расширения, то результат арифметической установки не является расширяемым типом.
При осуществлении арифметической установки, включающей множества информационных объектов, все информационные объекты (а не только в корне расширения) используются в этой установке. Если какое-либо множество информационных объектов, относящееся к арифметической установке, является расширяемым или на самом внешнем уровне "ElementSetSpecs" есть маркер расширения, то результат арифметической установки является расширяемым типом.
46.1 В некоторых нотациях может быть специфицировано множество элементов некоторого идентифицированного класса элементов (управляющего). В таких случаях используется нотация "ElementSetSpecs":
ElementSetSpecs : : =
RootElementSetSpec |
RootElementSetSpec "," "..." |
RootElementSetSpec "," "..." "," AdditionalElementSetSpec
RootElementSetSpec : : = ElementSetSpec
AdditionalElementSetSpec : : = ElementSetSpec
ElementSetSpec : : = Unions |
ALL Exclusions
Unions : : = Intersections |
UElems UnionMark Intersections
UElems : : = Unions
Intersections : : = IntersectionElements |
IElems IntersectionMark IntersectionElements
IElems : : = Intersections
IntersectionElements : : = Elements | Elems Exclusions
Elems : : = Elements
Exclusions : : = EXCEPT Elements
UnionMark : : = "|" | UNION
IntersectionMark : : = "^" | INTERSECTION
Примечания
1 Символ "^" и слово INTERSECTION - синонимы. Символ "|" и слово UNION - синонимы. Рекомендуется, чтобы во всей спецификации использовались либо символ, либо слово. И в том, и в другом случае может использоваться слово EXCEPT.
2 Старшинство операторов от старших к младшим следующее: "EXCEPT", "^","|". "ALL EXCEPT" специфицировано так, что оно не может чередоваться с другими ограничениями без использования скобок вокруг "ALL EXCEPT ххх" .
3 Всякий раз, когда встречается продукция "Elements", может появиться либо ограничение без скобок (например INTEGER (1..4)), либо ограничение подтипа в скобках (например INTEGER ((1..4|9))).
4 Два оператора "EXCEPT" должны разделяться или "|", "^", "(", или ")", так что (А ЕХСЕРТ В ЕХСЕРТ С) не допускается; оно должно быть заменено на ((А ЕХСЕРТ В) ЕХСЕРТ С) или на (А ЕХСЕРТ (В ЕХСЕРТ С)).
5 Отметим, что ((А ЕХСЕРТ В) ЕХСЕРТ С) - то же самое, что и (А ЕХСЕРТ (В | С)).
6 Элементы, которые указываются "ElementSetSpecs", являются объединением элементов, указанных "RootElementSetSpec" и "AdditionalElementSetSpec".
46.2 Элементами, образующими множество, являются:
а) если в "ElementSetSpec" выбрана первая альтернатива, - то специфицированные в "Unions" [см. б)], в противном случае - все элементы управляющего, за исключением специфицированных в нотации "Elements" для "Exclusions";
б) если в "Unions" выбрана первая альтернатива, - то специфицированные в "Intersections" [см. в)], в противном случае - элементы, специфицированные по крайней мере один раз в "UElems" или в "Intersections";
в) если в "Intersections" выбрана первая альтернатива, - то специфицированные в "Intersection-Elements" [см. г)], в противном случае - элементы из специфицированных продукцией "IElems", которые так же специфицированы и продукцией "IntersectionElements";
г) если в "IntersectionElements" выбрана первая альтернатива, - то специфицированные в "Elements", в противном случае - элементы, которые специфицированы в "Elems", за исключением специфицированных в "Exclusions".
46.3 Нотация "Elements" определяется следующим образом:
Elements : : =
SubtypeElements |
ObjectSetElements |
"(" ElementSetSpec ")"
Элементами, специфицированными этой нотацией, являются:
а) определенные в разделе 48, если используется альтернатива "SubtypeElements". Эта нотация должна использоваться только в том случае, когда управляющий является типом, а фактически участвующий тип будет ограничиваться далее возможностями нотации. В этом контексте управляющий называется порождающим типом;
б) определенные в ГОСТ Р ИСО/МЭК 8824-2, 12.6, если используется нотация "Object-SetElements". Эта нотация должна использоваться только в том случае, когда управляющий является классом информационных объектов;
в) специфицированные нотацией "ElementSetSpec", если используется последняя альтернатива.
47 Маркер расширения
Примечание - Как и любая нотация ограничения, маркер расширения не влияет на одни правила кодирования АСН.1, такие как базовые правила кодирования, но влияет на другие, такие как упаковывающие правила кодирования.
47.1 Маркер расширения (многоточие) является указанием того, что ожидаются расширяющие дополнения. Он не делает каких-либо утверждений о том, как должны обрабатываться такие расширения, а только указывает, что при декодировании они не должны трактоваться как ошибка.
47.2 Совместное использование маркера расширения и идентификатора расширения является указанием, что ожидаются расширяющие дополнения, что они не должны при декодировании трактоваться как ошибка и что прикладные стандарты предписывают конкретные действия, которые должны быть предприняты приложением, если имеется нарушение ограничения. Рекомендуется применять эту нотацию в случаях, когда используется метод "запомнить и передать" или другая форма ретрансляции, указывая, что любые нераспознанные расширяющие дополнения должны возвращаться приложению для возможного перекодирования и ретрансляции.
47.3 Результат арифметической установки, включающей ограничения подтипа, множества значений или множества объектов, которые являются расширяемыми, описан в разделе 46.
47.4 Если в "СontainedSubtype" указан тип, определенный с расширяемым ограничением, то вновь определяемый тип не наследует маркер расширения и его расширяющие дополнения. Если вновь определяемый тип должен быть расширяемым, то маркер расширения должен быть добавлен к его "ElementSetSpecs" явным образом. Например:
А : : = INTEGER (0..10, ... , 12) - - A - расширяемый
В : : = INTEGER (А) - - В - нерасширяемый и ограничен до (0-10)
С : : = INTEGER (А, ...) - - С - расширяемый и ограничен до (0-10)
47.5 Если тип, определенный с расширяемым ограничением, ограничивается далее нотацией "ElementSetSpecs", которая не содержит маркер расширения, то ограничение получающегося типа - нерасширяемое, а тип не наследует никаких расширяющих дополнений, которые могут присутствовать в порождающем типе. Например:
А : : = INTEGER (0..10, ...) - - A - расширяемый
В : : = А (2..5) - - В - нерасширяемый
С : : = А - - С - расширяемый
47.6 Компоненты типов "множество", "последовательность" и "выбор", которые, согласно ограничению, должны отсутствовать, не могут присутствовать даже в том случае, когда тип "множество", "последовательность" или "выбор" является расширяемым.
Примечание - Внутренние ограничения типа не влияют на расширяемость.
Например:
А : : = SEQUENCE {
a INTEGER
b BOOLEAN OPTIONAL
...
}
B : : = A (WITH COMPONENTS {b ABSENT}) - - B - расширяемый, но 'b'
- - не должен присутствовать ни в каком его значении.
47.7 Когда настоящий стандарт требует различия тегов (см. 24.5, 24.6, 26.3 и 28.2), то до проведения проверки на единственность тегов должно быть осуществлено следующее преобразование.
47.7.1 Новый элемент или альтернатива (называемый "концептуально добавляемым элементом", см. 47.7.2) концептуально добавляется в точке вставки расширения, если:
а) нет маркеров расширения, но расширяемость подразумевается заголовком модуля, и тогда добавляются маркер расширения и новый элемент как первое дополнение после маркера расширения, или
б) имеется единственный маркер расширения в CHOICE, SEQUENCE или SET, и тогда новый элемент добавляется в конце CHOICE, SEQUENCE или SET непосредственно перед закрывающей скобкой, или
в) имеется два маркера расширения в CHOICE, SEQUENCE или SET и тогда новый элемент добавляется непосредственно перед вторым маркером расширения.
47.7.2 Этот концептуально добавляемый элемент служит исключительно для проверки правильности применения правил, требующих различия тегов (см. 24.5, 24.6, 26.3 и 28.2). Он концептуально добавляется после применения автоматического тегирования (если оно применяется) и раскрытия COMPONENTS OF.
47.7.3 Концептуально добавляемый элемент определяется как имеющий тег, который отличен от тегов всех обычных типов АСН.1, но который согласуется с тегами всех концептуально добавляемых элементов и с неопределенным тегом открытого типа, как специфицировано в ГОСТ Р ИСО/МЭК 8824-2, 14.2, примечание 2.
Примечание - Правила, касающиеся единственности тегов относительно концептуально добавляемых элементов и открытого типа, вместе с правилами, требующими различия тегов (см. 24.5, 24.6, 26.3 и 28.2), являются необходимыми и достаточными, чтобы гарантировать, что:
а) любое неизвестное расширяющее дополнение может быть недвусмысленно приписано к единственной точке вставки при декодировании BER;
б) неизвестные расширяющие дополнения никогда не могут быть перепутаны с элементами OPTIONAL.
В PER эти правила достаточны, но не необходимы для гарантии указанных свойств. Тем не менее эти правила вводятся как правила АСН.1 для обеспечения независимости нотации от правил кодирования.
47.7.4 Если с этими концептуально добавленными элементами нарушаются правила, требующие различия тегов, то в спецификации была неправильно использована нотация расширения.
Примечание - Целью приведенных выше правил является установление точных ограничений, вытекающих из использования точек вставки (в частности, тех, которые не находятся в конце CHOICE, SEQUENCE или SET). Ограничения предназначены для того, чтобы гарантировать, что в BER, DER и CER можно неизвестный элемент, полученный системой версии 1, недвусмысленно приписать конкретной точке вставки. Это важно, когда обработка расширений таких добавленных элементов различна для разных точек вставки.
47.8 Примеры
47.8.1 Пример 1
А : : = SET {
a A,
b CHOICE {
c C,
d D,
...,
...
}
}
Это допустимо потому, что нет двусмысленности, так как любой добавляемый материал должен быть частью "b".
47.8.2 Пример 2
А : : = SET {
a A,
b CHOICE {
c C,
d D,
...,
...
},
...,
е Е
}
Это недопустимо потому, что добавление может быть частью "b" или быть на внешнем уровне "А", и система версии 1 не сможет решить, где оно находится.
47.8.3 Пример 3
А : : = SET {
a A,
b CHOICE {
c C,
...
},
d CHOICE {
e E
...
}
}
Это недопустимо потому, что добавление может быть частью "b" или "d".
47.8.4 Могут быть построены и более сложные примеры с расширяемыми выборами в расширяемых выборах или с расширяемыми выборами в элементах последовательности, помеченных как OPTIONAL или DEFAULT, но приведенные выше правила необходимы и достаточны, чтобы гарантировать, что элемент, отсутствующий в версии 1, может быть недвусмысленно приписан системой версии 1 к ровно одной точке вставки.
48 Элементы подтипа
48.1 Общие положения
Для "SubtypeElements" обеспечивается ряд различных форм нотации. Они идентифицированы ниже, а их синтаксис и семантика определяются в последующих пунктах. В таблице 6 приведена сводка того, какие нотации к каким порождающим типам могут применяться.
Таблица 6 - Применимость множеств значений подтипов
Тип |
Single Value |
Contained Subtype |
Value Range |
Permitted Alphabet |
SizeCon-straint |
TypeCon-straint |
Inner TypeCon-straints |
Битовая строка |
Да |
Да |
Нет |
Да |
Нет |
Нет |
Нет |
Булевский |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Нет |
Выборочный |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Да |
Встроенное-здп |
Да |
Нет |
Нет |
Нет |
Нет |
Нет |
Да |
Перечислимый |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Нет |
Внешний |
Да |
Нет |
Нет |
Нет |
Нет |
Нет |
Да |
Экземпляр-из |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Да |
Целочисленный |
Да |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Вырожденный |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Нет |
Поле класса объектов |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Нет |
Идентификатор объекта |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Нет |
Строка октетов |
Да |
Да |
Нет |
Да |
Нет |
Нет |
Нет |
Открытый |
Нет |
Нет |
Нет |
Нет |
Нет |
Да |
Нет |
Вещественный |
Да |
Да |
Да |
Нет |
Нет |
Нет |
Да |
Ограниченный символьных строк |
Да |
Да |
Да* |
Да |
Да |
Нет |
Нет |
Последовательность |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Да |
Последовательность-из |
Да |
Да |
Нет |
Да |
Нет |
Нет |
Да |
Множество |
Да |
Да |
Нет |
Нет |
Нет |
Нет |
Да |
Множество-из |
Да |
Да |
Нет |
Да |
Нет |
Нет |
Да |
Неограниченный символьных строк |
Да |
Нет |
Нет |
Да |
Нет |
Нет |
Да |
_____________________________ * Допустимо только в "PermittedAlphabet" для BMPString, IA5String, NumericString, PrintableString, VisibleString и UniversalString. |
SubtypeElements : : =
SingleValue |
ContainedSubtype |
ValueRange |
PermittedAlphabet |
SizeConstraint |
TypeConstraint |
InnerTypeConstraints
48.2 Единственное значение
48.2.1 Нотация для единственного значения "SingleValue" должна быть:
SingleValue : : = Value
где "Value" является нотацией значения для порождающего типа.
48.2.2 Нотация "SingleValue" специфицирует единственное значение порождающего типа, заданное "Value".
48.3 Содержащийся подтип
48.3.1 Нотация для содержащегося подтипа "ContainedSubtype" должна быть:
ContainedSubtype : : = Includes Type
Includes : : = INCLUDES | empty
Альтернатива "empty" для продукции "Includes" не должна использоваться, когда "Туре" в "ContainedSubtype" является нотацией для вырожденного типа.
48.3.2 Нотация "ContainedSubtype" специфицирует все значения в порождающем типе, которые имеются и в "Туре". Требуется, чтобы тип "Туре" был совместим с порождающим типом, как установлено в F.6.3.
48.4 Диапазон значений
48.4.1 Нотация для диапазона значений "ValueRange" должна быть:
ValueRange : : = LowerEndpoint ".." UpperEndpoint
48.4.2 Нотация "ValueRange" специфицирует все значения в диапазоне, который определяется заданием значений конечных точек диапазона. Эта нотация может применяться только для целочисленных и вещественных типов и некоторых ограниченных типов символьных строк PermittedAlphabet (только BMPString, IA5String, NumericString, PrintableString, VisibleString и UniversalString).
Примечание - При создании подтипов "PLUS-INFINITY" превышает все значения "NumericReal", а "MINUS-INFINITY" меньше всех значений "NumericReal".
48.4.3 Каждая конечная точка диапазона является либо закрытой (в таком случае эта конечная точка задана), либо открытой (в таком случае эта конечная точка не задана). Для открытой точки спецификация включает символ "меньше чем" ("<"):
LowerEndpoint : : = LowerEndValue | LowerEndValue "<"
UpperEndpoint : : = UpperEndValue | "<" UpperEndValue
48.4.4 Конечная точка может быть не задана, в таком случае диапазон простирается в этом направлении настолько, насколько допускает порождающий тип:
LowerEndValue : : = Value | MIN
UpperEndValue : : = Value | MAX
Примечание - Когда "ValueRange" используется как ограничение "PermittedAlphabet", "LowerEndValue" и "UpperEndValue" должны быть размером 1.
48.5 Ограничение размера
48.5.1 Нотация для ограничения размера "SizeConstraint" должна быть:
SizeConstraint : : = SIZE Constraint
48.5.2 Нотация "SizeConstraint" может применяться только к типам битовых строк, строк октетов, символьных строк, "множество-из" или "последовательность-из".
48.5.3 Продукция "Constraint" специфицирует допустимые целые значения для длины заданных значений и имеет вид любого ограничения, которое может применяться к следующему порождающему типу:
INTEGER (0 .. MAX)
Продукция "Constraint" должна использовать альтернативу "SubtypeConstraint" для "Constraint-Spec".
48.5.4 Единица измерения зависит от порождающего типа следующим образом:
Тип Единица измерения
битовая строка бит
строка октетов октет
символьная строка символ
множество-из значение компонента
последовательность-из значение компонента
Примечание - Подсчет количества символов в данном разделе для определения размера значения символьной строки следует четко отличать от подсчета октетов. Подсчет символов следует интерпретировать в соответствии с определением совокупности символов, используемой в типе, в частности, относительно ссылок на стандарты, таблицы или регистрационные номера в регистре, которые появляются в таком определении.
48.6 Ограничение типа
48.6.1 Нотация ограничения типа "TypeConstraint" должна быть:
TypeConstraint : : = Туре
48.6.2 Эта нотация применяется только к нотации открытого типа и ограничивает открытый тип значениями "Туре".
48.7 Допустимый алфавит
48.7.1 Нотация для допустимого алфавита "PermittedAlphabet" должна быть:
PermittedAlphabet : : = FROM Constraint
48.7.2 Нотация "PermittedAlphabet" специфицирует все значения, которые могут быть построены с использованием подалфавита порождающей строки. Эта нотация может применяться только для ограниченных типов символьных строк.
48.7.3 Ограничение "Constraint" является любым, которое может применяться для порождающего типа (см. таблицу 6), за исключением использующих альтернативу "SubtypeConstraint" для "ConstraintSpec". Подалфавит включает символы, появляющиеся в одном или нескольких значениях порождающего типа строки, которые допускаются ограничением "Constraint".
48.8 Внутренние подтипы
48.8.1 Нотация для внутренних подтипов "InnerTypeConstraints" должна быть:
InnerTypeConstraints : : =
WITH COMPONENT SingleTypeConstraint |
WITH COMPONENTS MultipleTypeConstraints
48.8.2 Нотация "InnerTypeConstraints" специфицирует только те значения, которые удовлетворяют совокупности ограничений на присутствие, и/или значения компонентов порождающего типа. Значение порождающего типа не специфицировано, если оно не удовлетворяет всем ограничениям, явно выраженным или подразумеваемым (см. 48.8.6). Эта нотация может применяться к выборочному типу, типам "множество-из", "последовательность-из", "множество" или "последовательность".
Примечание - Нотация "InnerTypeConstraints", применяемая к типу "множество" или "последовательность", игнорируется преобразованием COMPONENTS OF (см. 24.4 и 26.2).
48.8.3 Для типов, которые определены в терминах единственного другого (внутреннего) типа ("множество-из" и "последовательность-из"), ограничение принимает вид спецификации значения подтипа. Нотацией для такого случая является "SingleTypeConstraint":
SingleTypeConstraint : : = Constraint
Ограничение "Constraint" определяет подтип единственного другого (внутреннего) типа. Значение порождающего типа специфицировано, если и только если каждое внутреннее значение относится к подтипу, полученному применением "Constraint" к внутреннему типу.
48.8.4 Для типов, которые определены в терминах нескольких других (внутренних) типов (выборочный, "множество" и "последовательность"), может быть несколько ограничений на эти внутренние типы. Нотацией для такого случая является "MultipleTypeConstraints":
MultipleTypeConstraints : : = FullSpecification | PartialSpecification
FullSpecification : : = "{" TypeConstraints "}"
PartialSpecification : : = "{" "..." "," TypeConstraints "}"
TypeConstraints : : =
NamedConstraint |
NamedConstraint "," TypeConstraints
NamedConstraint : : =
identifier ComponentConstraint
48.8.5 Продукция "TypeConstraints" содержит список ограничений на типы компонентов порождающего типа. Для типа "последовательность" ограничения должны появляться упорядочено. Внутренний тип, к которому применяется ограничение, идентифицируется с помощью его идентификатора. Для данного компонента должно быть не более одной продукции "NamedConstraint".
48.8.6 Нотация "MultipleTypeConstraints" включает в себя либо нотацию "FullSpecification", либо нотацию "PartialSpecification". Когда используется "FullSpecification", подразумевается присутствие ограничения "ABSENT" на все внутренние типы, которые могут быть ограничены тем, что будут отсутствовать (см. 48.8.9) и не перечислены явно. Когда используется "PartialSpecification", то нет подразумеваемых ограничений, и любой внутренний тип может быть опущен из списка.
48.8.7 Конкретный внутренний тип может быть ограничен в терминах его присутствия (в значениях порождающего типа), его значения, или и того, и другого. Нотацией является "ComponentConstraint":
ComponentConstraint : : = ValueConstraint PresenceConstraint
48.8.8 Ограничение на значение внутреннего типа выражается нотацией "ValueConstraint":
ValueConstraint : : = Constraint | empty
Ограничение удовлетворяется значением порождающего типа только в том случае, если внутреннее значение относится к подтипу, заданному ограничением "Constraint", применяемым к внутреннему типу.
48.8.9 Ограничение на присутствие внутреннего типа должно быть выражено нотацией "PresenceConstraint":
PresenceConstraint : : = PRESENT | ABSENT | OPTIONAL | empty
Смысл этих альтернатив и ситуации, в которых они допустимы, определены в 48.8.9.1-48.8.9.3.
48.8.9.1 Если порождающий тип является последовательностью или множеством, то тип компонента, помеченный "OPTIONAL", может быть ограничен как "PRESENT" (и в этом случае ограничение удовлетворяется тогда и только тогда, когда соответствующее значение компонента присутствует) или как "ABSENT" (и в этом случае ограничение удовлетворяется тогда и только тогда, когда соответствующее значение компонента отсутствует), или как "OPTIONAL" (и в этом случае нет ограничений на присутствие соответствующего значения компонента).
48.8.9.2 Если порождающий тип является выборочным, то тип компонента может быть ограничен как "ABSENT" (и в этом случае ограничение удовлетворяется тогда и только тогда, когда соответствующий тип компонента не используется в значении) или как "PRESENT" (и в этом случае ограничение удовлетворяется тогда и только тогда, когда соответствующий тип компонента используется в значении); для данного типа не должно быть более одного ключевого слова "PRESENT" в продукции "MultipleTypeConstraints".
Примечание - Поясняющий пример см. в С.4.6.
48.8.9.3 Смысл пустой альтернативы для "PresenceConstraint" зависит от того, используется "FullSpecification" или "PartialSpecification":
а) в "FullSpecification" она эквивалентна ограничению "PRESENT" для компонентов множества или последовательности, помеченных "OPTIONAL", и не накладывает других ограничений в противном случае;
б) в "PartialSpecification" никаких ограничений не накладывается.
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Государственный стандарт РФ ГОСТ Р ИСО/МЭК 8824-1-2001 "Информационная технология. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 1. Спецификация основной нотации" (принят и введен в действие постановлением Госстандарта РФ от 6 сентября 2001 г. N 375-ст)
Текст ГОСТа приводится по официальному изданию Госстандарта России, ИПК Издательство стандартов, 2001 г.
1 Разработан Государственным научно-исследовательским и конструкторско-технологическим институтом "ТЕСТ" Министерства Российской Федерации по связи и информатизации
Внесен Министерством Российской Федерации по связи и информатизации
2 Принят и введен в действие Постановлением Госстандарта России от 6 сентября 2001 г. N 375-ст
3 Настоящий стандарт содержит полный аутентичный текст международного стандарта ИСО/МЭК 8824-1:1998 "Информационная технология. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 1. Спецификация основной нотации" с Изменением N 1 (1999 г.) и Дополнением N 2 (2000 г.)
4 Введен впервые