Государственный стандарт РФ ГОСТ Р ИСО/МЭК 8824-93
"Информационная технология. Взаимосвязь открытых систем. Спецификация абстрактно-синтаксической нотации версии один (АСН.1)"
(утв. постановлением Госстандарта РФ от 20 декабря 1993 г. N 263)
Information technology. Open Systems Interconnection. Specification Abstract Syntax Notation One (ASN.1)
Дата введения 1 июля 1994 г.
Введен впервые
Введение
На нижних уровнях базовой эталонной модели (см. ГОСТ 28906) каждый параметр данных пользователя, задаваемый в сервисном примитиве, определяется как двоичное значение некоторой последовательности октетов.
На уровне представления характер параметров данных пользователя становится иным. Спецификации по прикладному уровню требуют, чтобы данные пользователя услуг представления (см. ГОСТ 34.971) могли принимать значения весьма сложных типов, возможно, включающих строки знаков из различных знаковых наборов. Эти спецификации требуют наличия определенной нотации, которая определяла бы передаваемое значение, не задавая конкретного способа его представления. Способ представления определяется заданием одного или нескольких алгоритмов, называемых правилами кодирования. Правила кодирования определяют конкретный вид октетов на сеансовом уровне, с помощью которых передаются значения данных прикладного уровня (синтаксис передачи). Протокол уровня представления (см. ГОСТ 34.972) позволяет взаимодействующим объектам договариваться о том, какие синтаксисы передачи будут ими использоваться.
Цель задания значения состоит в том, чтобы можно было отличать его от всех возможных других значений. Объединение некоторого значения с другими значениями, отличными от данного, называется типом, и каждый конкретный элемент этой совокупности является значением этого типа. С более общих позиций значение или тип часто могут рассматриваться как образования, состоящие из более простых значений или типов, между которыми установлены взаимосвязи. В качестве синонима термина "тип" часто используют термин "тип данных".
Для правильной интерпретации конкретного представления значения (например, с помощью пометок на бумаге или бит, передаваемых по линии связи) необходимо знать тип передаваемых данных (обычно определяемый из контекста). Таким образом, указание типов является одним из важных вопросов, рассматриваемых в настоящем стандарте.
Одним из общих методов определения сложных типов является определение небольшого количества "простых типов" путем задания всех возможных значений этих типов и последующего образования различных комбинаций из этих простых типов. Ниже перечислены некоторые из способов определения новых типов:
а) имея список (упорядоченный) существующих типов, можно сформировать новое значение в виде последовательности, в которую входит по одному из значений каждого типа, входящего в список; совокупность всех возможных значений, получаемых таким образом, образует новый тип (если все уже определенные типы, входящие в список, являются различными, то можно расширить этот способ, допуская пропуск некоторых значений из списка);
b) имея список существующих типов, можно сформировать новое значение в виде множества (неупорядоченного) значений, в которое входит по одному из значений каждого типа, входящего в список; совокупность всех значений, получаемых таким образом, образует новый тип (этот способ можно также расширить, допуская пропуск некоторых значений);
c) имея один существующий тип, можно сформировать новое значение в виде последовательности (упорядоченной) или множества (неупорядоченного), состоящего из пустого множества значений и одного или нескольких значений исходного типа; совокупность (неограниченная) всех возможных значений, полученных таким образом, образует новый тип;
d) имея список различных существующих типов, можно выбрать какое-либо значение одного из этих типов; множество всех возможных значений, получаемых таким образом, образует новый тип;
е) имея некоторый тип, можно сформировать новый тип в виде подмножества исходного типа, используя некоторую структурную или порядковую взаимосвязь между элементами исходного множества.
Типы, определенные с помощью описанных выше методов, называются структурированными типами.
Каждому типу, определенному посредством нотации, описываемой настоящим стандартом, назначается "тег". Тег либо определен в самом стандарте, либо определяется пользователем описываемой здесь нотации.
Часто один и тот же тег назначается нескольким разным типам, при этом кконкретный тип идентифицируется контекстом, в котором используется тег.
Пользователь настоящей нотации может присвоить новый тег какому-либо существующему типу, создавая тем самым новый тип, отличный от первоначального. Это может потребоваться в тех случаях, когда необходимо определить, какой выбор был сделан в ситуации типа описанной выше в п. d).
Настоящей нотацией определяется четыре класса тегов.
Первый класс называется универсальным. Использование тегов универсального класса определяется спецификациями настоящего стандарта, причем каждый тег либо:
a) присвоен какому-то одному типу, либо
b) присвоен некоторому способу построения типов.
Второй класс тегов называется прикладным. Теги прикладного класса присваиваются типам данных в других стандартах. В рамках одного стандарта тег прикладного класса присваивается только какому-то одному типу.
Третий класс тегов называется пользовательским. Теги пользовательского класса не присваиваются в стандартах ИСО. Порядок их использования может быть различным в различных организациях.
Последний класс тегов называется контекстно-зависимым. Теги этого класса могут свободно назначаться при любом использовании настоящей нотации, и интерпретируются в соответствии с контекстом, в котором они используются.
Теги ориентированы главным образом на машинную обработку данных и не несут существенной информации при использовании нотации человеком. Однако в тех случаях, когда необходимо потребовать, чтобы все типы были различными, это выражается требованием различия тегов, присвоенных вышеупомянутым типам. Таким образом, присвоение тегов является важным аспектом использования настоящей нотации.
Примечания
1 Все типы, которые могут быть определены с использованием нотации, описываемой настоящим стандартом, имеют теги. Пользователь настоящей нотации может определить новый тип, присваивая новый тег ранее определенному типу.
2 Правила кодирования гарантируют явное или неявное задание тега типа вместе со значением данного типа при любом определении этого значения. Ограничения, налагаемые на использование настоящей нотации, обеспечивают достаточность тега для идентификации типа, при условии доступности определений соответствующих типов.
Настоящий стандарт определяет нотацию, которая служит одновременно и средством определения сложных типов данных, и средством задания конкретных значений этих типов. Это осуществляется без указания конкретного способа представления (в виде последовательности октетов) значений данного типа при их передаче. Нотация, обладающая этим свойством, называется нотацией для определения абстрактного синтаксиса.
Назначение настоящего стандарта состоит в описании нотации для определения абстрактного синтаксиса, называемой абстрактно-синтаксической нотацией версии 1, или АСН.1. Абстрактно-синтаксическая нотация версии 1 является полуформальным средством, используемым при определении протоколов. Использование настоящей нотации само по себе не исключает неоднозначности соответствующих спецификаций. Обеспечение однозначности спецификаций должно осуществляться пользователем нотации.
Настоящий стандарт поддерживается другими стандартами, определяющими правила кодирования. Применение правил кодирования к значениям некоторого типа, определенным в АСН.1, полностью определяет представление этих значений при передаче (т.е. синтаксис передачи).
С технической и редакционной точек зрения настоящий стандарт согласуется с рекомендацией Х.208 (1988) МККТТ.
Часть 1 настоящего стандарта содержит определения простых типов, используемых в АСН.1, и определяет обозначения, которые следует использовать для ссылок на простые типы и для описания структурированных типов. В части 1 также описываются обозначения, которые следует использовать при задании значений типов, определенных с помощью АСН.1.
В части 2 настоящего стандарта определяются дополнительные типы (типы "строка знаков"), которые применением правил кодирования могут быть приравнены к типу "строка октетов".
В части 3 настоящего стандарта определяются некоторые структурированные типы, которые являются общеупотребительными, и в то же время не требуют введения новых правил кодирования, отличных от правил кодирования ранее определенных типов.
В части 4 настоящего стандарта определяются обозначения, позволяющие определять подтипы из значений порождающего типа.
Приложение А является обязательной частью настоящего стандарта и определяет нотацию, расширяющую базовую нотацию АСН.1. Эти расширения называются макросредствами.
Приложение В является обязательной частью настоящего стандарта и содержит определение логического дерева идентификаторов объектов для источников идентификации, поддерживаемых ИСО.
1 Область применения
Настоящий стандарт описывает нотацию для определения абстрактного синтаксиса, называемую абстрактно-синтаксической нотацией версии один (АСН.1).
Настоящий стандарт определяет ряд простых типов вместе с присвоенными им тегами и обозначения, которые следует использовать для ссылок на эти типы, а также для задания значений этих типов.
Настоящий стандарт определяет методы построения новых типов из более простых типов и обозначения, которые следует использовать при определении такого рода структурированных типов, и присвоении им тегов, а также при задании значений этих типов.
Настоящий стандарт определяет знаковые наборы, используемые в АСН.1.
Настоящий стандарт определяет (с помощью АСН.1) ряд общеупотребительных типов, на которые могут ссылаться пользователи АСН.1.
Нотация АСН.1 может применяться во всех случаях, где требуется определять абстрактный синтаксис информации. Одной из сфер ее применения (но не единственной) являются протоколы прикладного уровня.
Ссылки на нотацию АСН.1 содержатся в других стандартах по уровню представления, в которых определяются правила кодирования для простых типов, структурированных типов, различных типов "строка знаков" и общеупотребительных типов, определенных в нотации АСН.1
2 Нормативные ссылки
ГОСТ 28906-91 (ИСО 7498) Системы обработки информации. Взаимосвязь открытых систем. Базовая эталонная модель (см. также Рекомендацию МККТТ Х.200)
ГОСТ 34.971-91 (ИСО 8822) Системы обработки информации. Взаимосвязь открытых систем. Спецификация услуг уровня представления для режима с установлением соединения
ГОСТ 34.972-91 (ИСО 8823) Системы обработки информации. Взаимосвязь открытых систем. Спецификация протокола уровня представления для режима с установлением соединения
ГОСТ Р ИСО/МЭК 8825-93 Системы обработки информации. Взаимосвязь открытых систем. Спецификация базовых правил кодирования для нотации абстрактного синтаксиса версии один (АСН 1)
ИСО 2375-85 Обработка информации. Процедуры регистрации последовательностей расширения*
ИСО 3166-88 Коды для представления названий стран*
ИСО 6523-84 Обмен информацией. Структура идентификаторов организаций*
Рекомендация МККТТ Х.208:1988 Спецификация нотации абстрактного синтаксиса версии 1 (АСН 1)
3 Определения
В настоящем стандарте используются определения, содержащиеся в ГОСТ 28906.
3.1 Значение - отличный от других элементов множества значений.
3.2 Тип - множество значений, которому присвоено имя.
3.3 Простой тип - тип, определяемый прямым заданием множества составляющих его значений.
3.4 Структурированный тип - тип, при определении которого используются ссылки на другие типы.
3.5 Тип-компонент - один из типов, используемых при определении структурированного типа.
3.6 Тег - обозначение типа, присваиваемое каждому типу в АСН.1.
3.7 Тегирование - изменение существующего (возможно, заданного по умолчанию) тега некоторого типа новым тегом.
3.8 Набор знаков АСН.1 - набор знаков, определенный в разделе 7, который используют в обозначениях нотации АСН.1.
3.9 Элементы - поименованные последовательности знаков из набора знаков АСН.1, определенные в разделе 8, используемые для формирования обозначений нотации АСН.1.
3.10 Ссылка на тип (или значение) - имя, однозначно идентифицирующее тип (или значение) в рамках некоторого контекста.
Примечание. Ссылочные имена присваивают типам, определяемым в настоящем стандарте; эти имена могут применяться при любом использовании АСН.1. Другие ссылочные имена определены в других стандартах, они применимы только в контексте соответствующих стандартов.
3.11 Правила кодирования АСН.1 - правила, определяющие конкретное представление (при передаче) значений любых типов, определенных в АСН.1; правила кодирования АСН.1 позволяют получателю распознать переданную информацию как конкретное значение конкретного типа, определенного в АСН.1.
3.12 Тип "строка знаков" - тип, значения которого являются строками знаков из некоторого набора знаков.
3.13 Булевский тип - простой тип с двумя различными значениями.
3.14 Истинно - одно из двух различных значений булевского типа.
3.15 Ложно - другое значение булевского типа.
3.16 Целочисленный тип - простой тип с различными значениями, являющимися положительными или отрицательными целыми числами, включая ноль (рассматриваемый как одно значение).
Примечание. Конкретные правила кодирования ограничивают диапазон, в котором могут находиться числа, однако рамки этих ограничений выбраны достаточно широкими для того, чтобы быть практически не ощутимыми для любого из пользователей АСН.1.
3.17 Перечислительный тип - простой тип, значениям которого назначаются отличные друг от друга идентификаторы, являющиеся частью обозначения для этого типа.
3.18 Тип "действительное число" - простой тип, различными значениями которого (описанными в 16.2) являются элементы множества действительных чисел.
3.19 Тип "строка бит" - простой тип, различными значениями которого являются упорядоченные последовательности из пустого множества бит, одного или более бит.
Примечание. Правила кодирования не ограничивают число бит в строке бит.
3.20 Тип "строка октетов" - простой тип, различные значения которого являются упорядоченными последовательностями из пустого множества октетов, одного или более октетов, где октет - это упорядоченная последовательность из восьми бит.
Примечание. Правила кодирования не ограничивают число октетов в строке октетов.
3.21 Вырожденный тип (тип NULL) - простой тип, состоящий из единственного значения, также называемого вырожденным значением ("NULL").
Примечание. Вырожденное значение обычно используют в тех случаях, когда возможно несколько различных вариантов, но ни один из них не имеет места.
3.22 Тип "последовательность" - структурированный тип, определяемый ссылкой на фиксированный, упорядоченный список типов (некоторые из которых могут быть объявлены необязательными); каждое значение нового типа является упорядоченной последовательностью значений типов-компонентов, по одному из каждого из них.
Примечание. Если тип-компонент обьявлен необязательным, то значение нового типа может не включать в себя значение этого типа-компонента.
3.23 Тип "последовательность из" - структурированный тип, определяемый ссылкой на один из существующих типов; каждое значение нового типа является упорядоченной последовательностью из пустого множества значений, одного или более значений существующего типа.
Примечание. Правила кодирования не ограничивают число значений - компонентов в значении "последовательность из".
3.24 Тип "множество" - структурированный тип, определяемый ссылкой на фиксированный неупорядоченный список различных типов (некоторые из которых могут быть объявлены необязательными); каждое значение нового типа является неупорядоченным списком значений, по одному из каждого типа-компонента.
Примечание. Если тин-компонент объявлен необязательным, то новый тип необязательно содержит значение этого типа-компонента.
3.25 Тип "множество из" - структурированный тип, определяемый ссылкой на единственный существующий тип; каждое значение нового типа является неупорядоченным списком из нуля, одного или более значений существующего типа.
Примечание. Правила кодирования не ограничивают число значений - компонентов в значении "множество из".
3.26 Тегированный тип - тип, определяемый указанием одного из существующих типов и тега; новый тип является изоморфным существующему типу, но отличен от него.
3.27 Выборочный тип - структурированный тип, определяемый указанием фиксированного неупорядоченного списка различных типов; каждое значение нового типа является значением одного из типов-компонентов.
3.28 Селективный тип - структурированный тип, определяемый указанием одного из типов-компонентов выборочного типа.
3.29 Произвольный тип - выборочный тип, типы-компоненты которого не заданы, но ограничены множеством типов, которые могут быть определены с помощью АСН.1.
3.30 Внешний тип - тип, различные значения которого не могут быть установлены только лишь по той информации, что они являются значениями внешнего типа, однако значения этого типа могут быть установлены по их кодовому представлению; эти значения могут быть (но это необязательно) описаны с помощью АСН.1, и соответственно их кодовое представление может (но необязательно) соответствовать правилам кодирования для АСН.1.
3.31 Информационный объект - некоторая точно определенная совокупность информации, определение или спецификация, использование которой в конкретном взаимодействии идентифицируется соответствующим именем.
3.32 Идентификатор объекта - значение (отличающееся от других подобных значений), которое связывается с информационным объектом.
3.33 Тип "идентификатор объекта" - тип, различные значения которого составляют множество всех идентификаторов объектов, присвоенных в соответствии с правилами настоящего международного стандарта.
Примечание. Правила настоящего международного стандарта предоставляют возможность целому ряду организаций - источников идентификации независимо друг от друга связывать идентификаторы объектов с информационными объектами.
3.34 Тип "описатель объекта" - тип, различные значения которого имеют вид текста, ориентированного на восприятие человеком, дающего краткое описание информационного объекта.
Примечание. Обычно (но не всегда) описатель объекта связывается с каким-то одним информационным объектом. Информационный объект полностью идентифицируется только с помощью идентификатора объекта.
3.35 Рекурсивные определения - множество таких определений, допускающихся в нотации АСН.1, которые не могут быть переупорядочены таким образом, чтобы все типы, использующиеся в соответствующих конструкциях этих определений, были определены до использования этих конструкций.
Примечание. Рекурсивные определения разрешены в АСН.1; пользователь этой нотации должен позаботиться о том, что используемые значения получаемых в результате типов имели конечное представление.
3.36 Модуль - одно или несколько выражений нотации АСН.1 для определения типов и значений, оформленных как единое целое в соответствии с обозначениями определения модулей. (См. раздел 9).
3.37 Продукция - часть формальной системы обозначений, используемой при спецификации АСН.1, в которой допустимым последовательностям элементов присваивается имя, которое может быть использовано для последующих ссылок на эти последовательности при определении новых допустимых последовательностей.
3.38 Всемирное согласованное время (UTC) - временной эталон, поддерживаемый Международным бюро времени и служащий основой для согласованного распространения частот и сигналов времени.
Примечания
1 Источником этого определения является рекомендация 460-2 Международной консультативной комиссии по радио (CCIR). Акроним UTС для всемирного согласованного времени также был введен ССIR.
2 UTC также называют средним гринвичским временем; соответствующие временные сигналы регулярно транслируются.
3.39 Пользователь (нотации АСН.1) - частное лицо или организация, определяющие абстрактный синтаксис некоторой информации, используя АСН.1.
3.40 Подтип (порождающего типа) - тип, значения которого задаются как подмножество значений другого (порождающего) типа.
3.41 Порождающий тип (для подтипа) - тип, используемый при определении подтипа.
Примечание. Порождающий тип может быть подтипом некоторого другого типа.
3.42 Спецификация подтипа - обозначение, которое может быть использовано в совокупности с обозначением некоторого типа для определения подтипа этого типа.
3.43 Подмножество значений подтипа - обозначение, образующее часть спецификации подтипа, задающее некоторое множество значений, которое должно быть включено в подтип.
В настоящем стандарте используют следующие термины, определенные в ГОСТ 34971:
a) значение данных представления;
b) абстрактный синтаксис;
c) имя абстрактного синтаксиса;
d) имя синтаксиса передачи.
В настоящем стандарте используют также следующие термины, определенные в ИСО 6523:
a) организация - источник кодов;
b) код организации,
c) Международный кодовый определитель.
4 Сокращения
АСН.1 - абстрактно-синтаксическая нотация версии 1
UTC - Coordinated Universal Time (всемирное согласованное время)
ICD - International Code Designator (Международный кодовый определитель)
DCC - Data Country Code (цифровой код страны)
DNIC - Data Network Identification Code (идентификационный код сети передачи данных)
5 Система обозначений, используемая в настоящем стандарте
Нотация АСН.1 строится из последовательностей знаков знакового набора АСН.1, определенного в разделе 7.
Каждый конкретный случай использования нотации АСН.1 содержит знаки из знакового набора АСН.1, сгруппированные в элементы. В разделе 8 определяются все последовательности знаков, образующие элементы нотации АСН.1, и каждому элементу присваивается имя.
Нотация АСН.1 определяется в 9 (и последующих разделах) путем описания совокупности последовательностей элементов, которые образуют правильные варианты использования нотации АСН.1, и определения семантики каждой такой последовательности.
Для того, чтобы описать эту совокупность последовательностей, в настоящем стандарте используют формальную систему обозначений, определяемую в последующих подразделах.
5.1 Продукции
Новая (более сложная) совокупность последовательностей, допустимых в АСН.1, определяется с помощью продукции. Продукция, используя имена совокупностей последовательностей, определенных в настоящем стандарте, строит новую совокупность последовательностей с помощью двух следующих способов;
а) образование новой совокупности из последовательностей, содержащихся в любой из исходных совокупностей, либо
b) образование новой совокупности из всех последовательностей, которые могут быть получены путем выбора одной последовательности из каждой исходной совокупности и соединения выбранных последовательностей в заданном порядке.
Каждая продукция состоит из следующих частей, образующих одну или несколько строк, в следующем порядке:
a) имени новой совокупности последовательностей;
b) знаков : : =
c) одной или нескольких совокупностей - вариантов последовательностей, определенных по правилам, описанным в 5.2, и разделенных знаком:
Последовательность присутствует в новой совокупности, если она присутствует в одной или нескольких совокупностях-вариантах. Ссылки на новую совокупность в настоящем стандарте осуществляются путем задания имени из а).
Примечание. Если одна и та же последовательность присутствует в нескольких совокупностях-вариантах, то любая семантическая неоднозначность полученного обозначения снимается с помощью других частей полной последовательности, определяемой данной продукцией.
5.2 Совокупности-варианты
Каждую из совокупностей-вариантов, упомянутых в 5.1с, задают с помощью списка имен. Каждое из этих имен является либо именем элемента, либо именем совокупности последовательностей, определенных с помощью продукции в настоящем стандарте.
Совокупность-вариант состоит из всех последовательностей, получаемых выбором произвольной последовательности (или элемента) из совокупности, определяемой первым именем, за которой помещается произвольная последовательность (или элемент) из совокупности, определяемой вторым именем, за которой в свою очередь помещается произвольная последовательность (или элемент) из совокупности, определяемой третьим именем, и так далее, вплоть до последнего имени, заданного для данного варианта.
5.3 Пример продукции
Значение-СтрокаБит : : = b-строка | |
|
h-строка |
{Список-Идентификаторов} |
Приведенная выше запись является примером продукции, которая связывает имя Значение-СтрокаБит со следующими последовательностями:
a) произвольным элементом "b-строка";
b) произвольным элементом "h-строка";
с) произвольной последовательностью из совокупности с именем "Список-Идентификаторов", перед которой следует знак {и за которой следует знак}.
Примечание. Знаки {и} являются именами элементов, состоящими из одного знака, соответственно, {и}.
"Список-Идентификаторов" в данном примере должен быть определен другой продукцией, которая может быть приведена как до, так и после продукции "Значение-СтрокаБит".
5.4 Расположение текста
Каждая продукция, используемая в настоящем стандарте, предваряется пустой строкой; за продукцией также следует пустая строка. Внутри продукции пустые строки отсутствуют. Продукция может либо состоять из одной строки, либо быть разбитой на несколько строк. Расположению текста продукции не придается какого-либо значения.
5.5 Рекурсия
Продукции, используемые в настоящем стандарте, часто являются рекурсивными. Рекурсивные продукции применяются неограниченное число раз до тех пор, пока не будут исчерпаны все порождаемые ими последовательности.
Примечание. Во многих случаях такое повторное применение продукции приводит к неограниченной совокупности разрешенных последовательностей, некоторые из которых сами могут быть неограниченными. Это не является ошибкой.
5.6 Ссылки на совокупность последовательностей
В настоящем стандарте ссылки на совокупность последовательностей (часть нотации АСН.1) осуществляются указанием первого имени в продукции (перед : : =); если ссылка на имя не является частью продукции, имя обрамляется знаками для того, чтобы отличить его от остального текста на естественном языке.
5.7 Ссылки на элемент
В настоящем стандарте ссылки на элемент осуществляются указанием имени элемента; если имя не является частью продукции, оно обрамляется знаками для того, чтобы отличить его от остального текста на естественном языке.
5.8 Теги
Тег задается указанием его класса и номера в классе. Определены следующие классы тегов:
универсальный (universal)
пользовательский (private)
контекстно-зависимый (context-spesific)
Номер задается в виде неотрицательного целого числа в десятичной системе счисления.
Ограничения на теги, присваиваемые пользователем АСН.1, определены в разделе 24.
Теги универсального класса назначаются таким образом, чтобы для структурированных типов по тегу можно было определить структуру верхнего уровня, а для простых типов тег полностью определял тип. В таблице 1 перечислены теги универсального класса, назначенные в рамках настоящего стандарта.
Примечание. Для последующих версий настоящего стандарта резервируется дополнительное множество тегов.
Таблица 1 - Присвоение тегов универсального класса
UNIVERSAL 1 |
Булевский тип |
UNIVERSAL 2 |
Целочисленный тип |
UNIVERSAL 3 |
Тип "строка битов" |
UNIVERSAL 4 |
Тип "строка октетов" |
UNIVERSAL 5 |
Вырожденный тип |
UNIVERSAL 6 |
Тип "идентификатор объекта" |
UNIVERSAL 7 |
Тип "описатель объекта" |
UNIVERSAL 8 |
Внешний тип |
UNIVERSAL 9 |
Тип "действительное число" |
UNIVERSAL 10 |
Перечислительный тип |
UNIVERSAL 12-15 |
Зарезервированы для последующих версий настоящего стандарта |
UNIVERSAL 16 |
Типы "последовательность" и "последовательность из" |
UNIVERSAL 17 |
Типы "множество" и "множество из" |
UNIVERSAL 18-22, 25-27 |
Типы "строка знаков" |
UNIVERSAL 23-24 |
Типы "время" |
UNIVERSAL 28-... |
Зарезервированы для последующих версий настоящего стандарта |
6 Использование нотации АСН.1
6.1 Обозначения нотации АСН.1 для определения типа определяются продукцией "Тип" (см. 12.1).
6.2 Обозначения нотации АСН.1 для определения значения определяются продукцией "Значение" (см. 12.7).
Примечание. Вообще говоря, невозможно интерпретировать значение, не зная типа, к которому оно относится.
6.4 Обозначения нотации АСН.1 для присвоения значения ссылочному имени значения определяются продукцией "Присвоение Значения" (см. 11.2).
6.5 Обозначения вида "ПрисвоениеТипа" и "ПрисвоениеЗначения" должны использоваться только внутри обозначения вида "ОпределениеМодуля" (см. 9.1).
7 Набор знаков нотации АСН.1
7.1 Каждый элемент АСН.1 состоит из последовательности знаков, перечисленных в таблице 2, за исключением случаев, описанных в 7.2 и 7.3.
Таблица 2 - Набор знаков АСН.1
|
от А до Z |
|
|
от а до z |
|
|
от 0 до 9 |
|
|
: ; = , { } < . |
|
|
( ) [ ] - |
|
Примечания
1 Дополнительно к знакам, перечисленным в таблице 2, в макронотации используют знаки и > (см. приложение А).
2 В стандартах, производных от данного стандарта, которые будут разработаны национальными организациями по стандартизации, знаки, отсутствующие в таблице 2, могут присутствовать в следующих элементах (пять последних элементов определяются в приложении А):
- СсылкаНаТип (8.2.1);
- Идентификатор (8.3);
- СсылкаНаЗначение (8.4);
- СсылкаНаМодуль (8.5);
- Макроссылка (А.2.1);
- СсылкаНаПродукцию (А.2.2);
- ЛокальнаяСсылкаНаТип (А.2.3);
- ЛокальнаяСсылкаНаЗначение (А.2.4);
- а-строка (А.2.7).
3 В тех случаях, когда используют дополнительные знаки национальных алфавитов, в которых отсутствует различие между строчными и прописными буквами, синтаксическое различие, достигаемое за счет использования строчных и прописных букв в некоторых из перечисленных выше элементов АСН.1, должно обеспечиваться каким-то другим способом.
7.2 При использовании нотации для определения значения типа "строка знаков" в обозначение нотации АСН.1 могут входить все знаки заданного знакового набора, обрамленные знаками" (см. 8.11).
7.3 Дополнительные символы (не включенные в таблицу 2) могут входить в состав элемента "комментарий" (см. 8.6).
7.4 Не следует придавать какого-либо значения типографскому стилю, размеру, цвету, яркости и другим характеристикам знаков нотации, связанным со способом их отображения.
7.5 Строчные и прописные буквы следует рассматривать как различные знаки.
8 Элементы АСН.1
8.1 Общие правила
8.1.1 В следующих подразделах определяется, с помощью каких знаков образуются элементы АСН.1. В каждом случае дается имя элемента и определение знаковых последовательностей, из которых может состоять элемент.
Примечание. В приложении А определяются дополнительные элементы, использующиеся в макронотации.
8.1.2 Каждый из элементов, определяемых в последующих подразделах, должен располагаться в пределах одной строки и (за исключением элемента "комментарий") не должен содержать пробелов.
8.1.3 Длина строки не ограничивается.
8.1.4 Элементы в последовательностях, определяемых настоящим стандартом (в обозначениях нотации АСН.1), могут располагаться на одной или на нескольких строках и могут разделяться одним или несколькими пробелами или пустыми строками.
8.1.5 Каждый элемент должен отделяться от следующего за ним элемента пробелом или помещением его на следующую строку, если начальный знак (или знаки) следующего элемента являются разрешенными для включения в конец последовательности знаков предыдущего элемента.
8.2 Ссылки на тип
Имя элемента - СсылкаНаТип
8.2.1 Элемент "СсылкаНаТип" должен состоять из произвольного количества (большего или равного единице) букв, цифр и дефисов. Начальный знак должен быть прописной буквой. Последний знак не должен быть дефисом. Два дефиса не должны следовать друг за другом.
Примечание. Правила, относящиеся к использованию дефиса, вводятся во избежание неоднозначности, которая может быть вызвана наличием комментария, следующего за элементом.
8.2.2 Элемент "СсылкаНаТип" не должен совпадать с одной из зарезервированных знаковых последовательностей, перечисленных в таблице 3.
8.3 Идентификаторы
Наименование элемента - Идентификатор
Элемент "идентификатор" должен состоять из произвольного количества (большего или равного единице) букв, цифр и дефисов. Начальный знак должен быть строчной буквой. Последний знак не должен быть дефисом. Два дефиса не должны следовать друг за другом.
Примечание. Правила, относящиеся к использованию дефиса, вводятся во избежание неоднозначности, которая может быть вызвана наличием комментария, следующего за элементом.
Таблица 3 - Зарезервированные последовательности знаков
BOOLEAN |
BEGIN |
INTEGER |
END |
BIT |
DEFINITIONS |
STRING |
EXPLICIT |
OCTET |
ENUMERATED |
NULL |
EXPORTS |
SEQUENCE |
IMPORTS |
OF |
REAL |
SET |
INCLUDES |
IMPLICIT |
MIN |
CHOICE |
MAX |
ANY |
SIZE |
EXTERNAL |
FROM |
OBJECT |
WITH |
IDENTIFIER |
COMPONENT |
OPTIONAL |
PRESENT |
DEFAULT |
ABSENT |
COMPONENTS |
DEFINED |
UNIVERSAL |
BY |
APPLICATION |
PLUS-IFINITY |
PRIVATE |
MINUS-INFINITY |
TRUE |
TAGS |
FALSE |
|
8.4 Ссылки на значение
Имя элемента - СсылкаНаЗначение.
Элемент "СсылкаНаЗначение" должен состоять из последовательности знаков, удовлетворяющей определению элемента "идентификатор" в 8.3. Отличие элемента "СсылкаНаЗначение" от элемента "идентификатор" при анализе конкретного использования настоящей нотации достигается различием контекстов, в которых появляются эти элементы.
8.5 Ссылка на модуль
Имя элемента - СсылкаНаМодуль
Элемент "СсылкаНаМодуль" должен состоять из последовательности знаков, удовлетворяющей определению элемента "СсылкаНаТип" в 8.2. Отличие элемента "СсылкаНаМодуль" от элемента "СсылкаНаТип" при анализе конкретного использования настоящей нотации обеспечивается различием контекстов, в которых появляются эти элементы.
8.6 Комментарий
Имя элемента - Комментарий
8.6.1 Ссылки на "комментарий" не используют в рамках определения нотации АСН.1. "Комментарий", тем не менее, может присутствовать в любом месте между другими элементами нотации АСН.1, формально не имея никакого значения.
8.6.2 "Комментарий" начинается с пары следующих друг за другом дефисов и заканчивается другой парой следующих друг за другом дефисов, либо концом текущей строки, в зависимости от того, что последует раньше. Комментарий не может содержать в себе пару следующих друг за другом дефисов, кроме той, с которой он начинается и, если она имеется, той, которая его завершает. Комментарий может содержать знаки, не являющиеся элементами знакового набора, определенного в 7.1 (см. 7.3).
8.7 Пустой элемент
Имя элемента - пусто
Элемент "пусто" не содержит никаких знаков. Он используется в обозначениях 5 при задании совокупностей-вариантов в тех случаях, когда требуется указать, что возможно отсутствие всех приведенных альтернатив.
8.8 Элемент "число"
Имя элемента - число
Элемент "число" состоит из одной или более цифр. Первая цифра не может быть нулем, за исключением случая, когда "число" состоит из одной цифры.
8.9 Элемент "двоичная строка"
Имя элемента - b-строка
Элемент "двоичная" строка" состоит из произвольного количества (от нуля и более) нулей в единиц, перед которыми следует знак и за которыми следует пара знаков:
В
Пример - 01101100 В
8.10 Элемент "шестнадцатеричная строка"
Имя элемента - h-строка
8.10.1 Элемент "шестнадцатеричная строка" состоит из произвольного количества (от нуля и более) знаков
A B C D E F 0 1 2 3 4 5 6 7 8 9,
перед которыми следует знак и за которыми следует пара знаков:
Н
Пример - АВ0186 Н
8.10.2 Каждый знак используется для обозначения значения полуоктета в шестнадцатеричном представлении.
8.11 Элемент "строка знаков"
Имя элемента - с-строка
Элемент "с-строка" состоит из произвольного количества (от нуля и более) знаков из набора знаков, который определяется типом рассматриваемой строки знаков, перед которыми и вслед за которыми следует знак . Если набор знаков содержит знак , то он представляется в элементе "с-строка" парой знаков . Набор знаков, о котором идет речь, совсем необязательно ограничивается знаками, перечисленными в таблице 2, он определяется типом рассматриваемого элемента "с-строка" (типом, для которого "Строка Знаков" является значением) (см. 7.2).
8.12 Элемент "присвоение"
Имя элемента - ": : ="
Этот элемент состоит из последовательности знаков
: : =
Примечание. Эта последовательность не содержит пробелов (см. 8.1.2).
8.13 Элементы, состоящие из одного знака
Имена элементов - | |
|
{ |
|
} |
|
< |
|
, |
|
. |
|
( |
|
) |
|
[ |
|
] |
|
- (дефис) |
|
|
Элемент, имеющий имя, входящее в приведенный выше перечень, состоит из одного символа, образующего это имя.
8.14 Элементы - ключевые слова
Имена элементов - | |
|
BOOLEAN |
|
INTEGER |
|
BIT |
|
STRING |
|
OCTET |
|
NULL |
|
SEQUENCE |
|
OF |
|
SET |
|
IMPLICIT |
|
CHOICE |
|
ANY |
|
EXTERNAL |
|
OBJECT |
|
IDENTIFIER |
|
OPTIONAL |
|
DEFAULT |
|
COMPONENTS |
|
UNIVERSAL |
|
APPLICATION |
|
PRIVATE |
|
TRUE |
|
FALSE |
|
BEGIN |
|
END |
|
DEFINITIONS |
|
EXPLICIT |
|
ENUMERATED |
|
EXPORTS |
|
IMPORTS |
|
REAL |
|
INCLUDES |
|
MIN |
|
MAX |
|
SIZE |
|
FROM |
|
WITH |
|
COMPONENT |
|
PRESENT |
|
ABSENT |
|
DEFINED |
|
BY |
|
PLUS-INFINITY |
|
MINUS-INFINITY |
|
TAGS |
Элементы с именем, входящим в приведенный выше перечень, состоят из последовательности знаков, составляющей это имя.
Примечания
1 В приведенных выше последовательностях знаков отсутствуют пробелы
2 Последовательности из этого перечня, не являющиеся зарезервированными (перечисленными в 8.2.2), могут быть отличены от других элементов, содержащих такие же знаки, с помощью контекста, в котором они присутствуют.
9 Определение модуля
9.1 "ОпределениеМодуля" задается следующими продукциями:
ОпределениеМодуля : : =
ИдентификаторМодуля
DEFINITIONS
ТегиПоУмолчанию
": : ="
BEGIN
ТелоМодуля
END
ИдентификаторМодуля : : =
СсылкаНаМодуль
ПрисвоенныйИдентификатор
ПрисвоенныйИдентификатор : : =
Значение-ИдентификаторОбъекта
пусто
ТегиПоУмолчанию : : =
EXPLICIT TAGS
IMPLICIT TAGS
пусто
ТелоМодуля : : =
ВыходныеСсылки ВходныеСсылки СписокПрисвоений
пусто
ВыходныеСсылки : : =
EXPORTS ВыходныеСимволы
пусто
ВыходныеСимволы : : =
СписокСимволов
пусто
ВходныеСсылки : : =
IMPORTS ВходныеСимволы
пусто
ВходныеСимволы : : =
СписокСимволовИзМодуля
пусто
СписокСимволовИзМодуля : : =
СимволыИзМодуля СписокСимволовИзМодуля
СимволыИзМодуля
СимволыИзМодуля : : =
СписокСимволов FROM ИдентификаторМодуля
СписокСимволов : : =
Символ, СписокСимволов Символ
Символ : : =
СсылкаНаТип СсылкаНаЗначение
СписокПрисвоений : : =
СписокПрисвоений Присвоение
Присвоение
Присвоение : : =
ПрисвоениеТипа ПрисвоениеЗначения
Примечания
1 В приложении А определяются последовательности вида "МакроОпределение", которые также могут присутствовать в последовательности вида "СписокПрисвоений". Выражения, определяемые с помощью макроопределений, могут быть приведены как до, так и после самого макроопределения, в рамках того же модуля.
2 В отдельных (исключительных) случаях, для использования в качестве примеров, а также для определения типов с тегами универсального класса, последовательность вида "ТелоМодуля" может использоваться самостоятельно, а не как часть последовательности "ОпределениеМодуля".
3 Продукции "ПрисвоениеТипа" и "ПрисвоениеЗначения" определены в разделе 11.
4 Объединение типов данных, описываемых с помощью нотации АСН.1, в модули необязательно определяет способ формирования из значений данных представления поименованных абстрактных синтаксисов, в целях определения контекста представления.
5 Значение, выбранное для последовательности "ТегиПоУмолчанию", влияет только на те типы, которые явно определены в модуле. Оно не влияет на интерпретацию типов, определенных входными ссылками.
6 В качестве "символа" может использоваться "макроссылка" (см. приложение А).
9.2 Если для последовательности "ТегиПоУмолчанию" было выбрано "пусто", то подразумевается вариант "EXPLICIT TAGS".
Примечание. Смысл вариантов "EXPLICIT TAGS" и "IMPLICIT TAGS" определяется в разделе 26.
9.3 "СсылкаНаМодуль", присутствующая в продукции "ОпределениеМодуля", называется именем модуля. Имена модулей выбирают таким образом, чтобы обеспечить полноту и согласованность всех последовательностей вида "присвоение", присутствующих в составных частях "ТелоМодуля" всех последовательностей вида "ОпределениеМодуля", в которых используется данное имя модуля. Множество последовательностей вида "присвоение" считают полным и согласованным, если для каждой содержащейся в ней последовательности вида "СсылкаНаТип" или "СсылкаНаЗначение", соответствует в точности одна последовательность вида "ПрисвоениеТипа" или "ПрисвоениеЗначения" соответственно, которые устанавливают связь между именем и, соответственно, типом или значением.
9.4 Имена модулей должны использоваться только один раз в сфере применения определения модуля, за исключением случаев, определенных в 9.10.
Примечание Рекомендуется следующая форма имен модулей, определенных в стандартах ИСО:
ISOxxxx-уууу
где хххх - номер стандарта ИСО, а уууу - подходящая аббревиатура для названия этого международного стандарта (например, JTM, FTAM или CCR). Аналогичное соглашение может использоваться другими организациями, выпускающими стандарты.
9.5 Если "ПрисвоенныйИдентификатор" включает "Значение-ИдентификаторОбъекта", то последний однозначно идентифицирует модуль.
Примечание. Рекомендуется назначать идентификатор объекта, чтобы позволить однозначные ссылки на данный модуль из других модулей.
9.6 "ИдентификаторМодуля" последовательности "СимволыИзМодуля" должен присутствовать в "ОпределенииМодуля" для некоторого другого модуля, однако, если он включает "Значение-ИдентификаторОбъекта", то "СсылкиНаМодуль" могут различаться в этих двух определениях.
Примечания
1 "СсылкаНаМодуль", отличная от используемой в другом модуле, может быть использована только в том случае, когда входные символы заимствуются из двух разных модулей с одинаковыми именами (модулей, имена которым были присвоены с нарушением 9.4. Использование альтернативных, отличных от исходных, имен позволяет сделать этэ модули доступными для использования в теле определяемого модуля (см. 9.8).
2 Если ссылка на модуль осуществляется с использованием как "СсылкиНаМодуль", так и "Значения-ИдентификаторОбъекта", то последнее является решающим.
9.7 Каждый "ВыходнойСимвол" должен быть определен в данном (определяемом) модуле.
Примечание Рекомендуется все символы, ссылки на которые допустимы из других модулей, включать в "ВыходныеСимволы". Если таких символов нет, то следует выбрать альтернативный вариант "пусто" (но не "ВыходныеСсылки").
9.8 Каждый символ из конструкции "СимволыИзМодуля" должен быть определен в модуле, задаваемом "ИдентификаторомМодуля" конструкции "СимволыИзМодуля". Если в определении этого модуля используют конструкцию "ВыходныеСсылки", то каждый символ должен присутствовать в ее "ВыходныхСимволах".
9.9 Любой "символ" из конструкции "СимволыИзМодуля" может присутствовать в "ТелеМодуля" в конструкции "ОпределенныйТип" (если символ - "СсылкаНаТип") или "Определенное Значение" (если символ - "СсылкаНаЗначение"). Смысл, связанный с этим "символом", - тот же, что и в модуле с соответствующим "ИдентификаторомМодуля". Если "символ" присутствует в одном из "присвоений" из "СпискаПрисвоений" (что не рекомендуется) или присутствует в одной или нескольких конструкциях "СимволыИзМодуля", то он должен использоваться только в конструкциях "ВнешняяСсылкаНаТип" или "ВнешняяСсылкаНаЗначение", в которых "СсылкаНаМодуль" совпадает со ссылкой на модуль в конструкции "СимволыИзМодуля" (см. 9.10). Если он не присутствует в таких конструкциях, то он может непосредственно входить в конструкции "ОпределенныйТип" или "ОпределенноеЗначение".
9.10 За исключением случаев, отмеченных в 9.9, для обращения к элементам "СсылкаНаТип" и "СсылкаНаЗначение" в модулях, отличных от тех, где вышеупомянутые элементы были определены, используют последовательности вида "ВнешняяСсылкаНаТип" и "ВнешняяСеылкаНаЗначение", определяемые следующими продукциями:
ВнешняяСсылкаНаТип : : = | |
|
СсылкаНаМодуль |
|
. |
|
СсылкаНаТип |
ВнешняяСсылкаНаЗначение : : = | |
|
СсылкаНаМодуль |
|
. |
|
СсылкаНаЗначение |
10 Ссылки на определения типов и значений
10.1 Для задания ссылок на определения типов и значений используют последовательности, определяемые следующими продукциями:
ОпределенныйТип : : = | ||
|
ВнешняяСсылкаНаТип |
|
|
СсылкаНаТип |
|
ОпределенноеЗначение : : = | ||
|
ВнешняяСсылкаНаЗначение |
|
|
СсылкаНаЗначение |
11 Присвоение типов и значений
11.1 Присвоение ссылке на тип некоторого типа описывается продукцией "ПрисвоениеТипа":
ПрисвоениеТипа : : = | |
|
СсылкаНаТип |
|
" : : =" |
|
Тип |
Элемент "СсылкаНаТип" не должен совпадать с каким-либо именем, используемым для ссылки" на один из типов "строка знаков", определенных в части 2, а также не должен совпадать с каким-либо именем, используемым для ссылки на типы, определенные в части 3.
11.2 Присвоение ссылке на значение некоторого значения описывается продукцией "ПрисвоениеЗначения":
ПрисвоениеЗначения : : = | |
|
СсылкаНаЗначение |
|
Тип |
|
": : =" |
|
Значение |
Последовательность "Значение", присваиваемая ссылке на значение, должна быть допустимым выражением (см. 12.7), описывающем некоторое значение, имеющее тип, определяемый последовательностью "Тип".
12 Определение типов и значений
12.1 Тип определяется одной из последовательностей вида "Тип":
Тип : : = ВстроенныйТип |
ОпределенныйТип Подтип |
||
|
(см. 10.1) |
(см. 37) |
|
ВстроенныйТип : : = |
|
|
|
|
БулевскийТип |
|
|
|
ЦелочисленныйТип |
|
|
|
Тип-СтрокаБитов |
||
|
Тип-СтрокаОктетов |
||
|
ВырожденныйТип |
||
|
Тип-Последовательность |
||
|
Тип-ПоследовательностьИз |
||
|
Тип-Множество |
||
|
Тип-МножествоИз |
||
|
ВыборочныйТип |
||
|
СелективныйТип |
||
|
ТегированныйТип |
||
|
ПроизвольныйТип |
||
|
Тип-ИдентификаторОбъекта |
||
|
Тип-СтрокаЗнаков |
||
|
ОбщеупотребительныйТип |
||
|
ПеречисленныйТип |
||
|
Тип-ДействительноеЧисло |
Примечания
1 В качестве последовательности вида "тип" также может использоваться обозначение типа, определенное с помощью макронотации
2 В последующих версиях настоящего стандарта могут быть определены другие встроенные типы
12.2 Обозначение "ВстроенныйТип" определяется в последующих разделах.
12.3 Обозначение "подтип" определяется в разделе 4
По-видимому, в тексте предыдущего абзаца допущена опечатка. Вместо "разделе 4" имеется в виду "3.40"
12.4 Тип, на который осуществляется ссылка, либо определен обозначением "ВстроенныйТип", либо присвоен ссылке "ОпределенныйТип".
12.5 В некоторых обозначениях нотации, в которых имеется ссылка на какой-либо тип, этот тип может быть поименован. В этих случаях настоящий стандарт предписывает использование обозначения вида "ПоименованныйТип":
ПоименованныйТип : : = | ||
|
Идентификатор Тип |
|
|
Тип |
|
|
СелективныйТип |
Обозначения вида "СелективныйТип" и обозначения для записи значений селективного типа определены в разделе 25.
Примечание Обозначение вида "СелективныйТип" содержит "Идентификатор". Если в качестве "ПоименованногоТипа" используют "СелективныйТип" (см. 25.1), то этот идентификатор может быть частью обозначения для записи значения.
12.6 "Идентификатор" не является составной частью типа и никак не влияет на тип. Тип, на который дается ссылка последовательностью "ПоименованныйТип", является тем же самым, что и тип, на который дается ссылка последовательностью "Тип", вложенной в последовательность "ПоименованныйТип".
12.7 Значение какого-либо типа должно определяться одной из последовательностей вида "Значение":
Значение · = ВстроенноеЗначение ОпределенноеЗначение | ||
ВстроенноеЗначение ·· = | ||
|
БулевскоеЗначение |
|
|
ЦелочисленноеЗначение |
|
|
Значение-СтрокаБитов |
|
|
Значение-СтрокаОктетов |
|
|
ВырожденноеЗначение |
|
|
Значение-Последовательность |
|
|
Значение-ПоследовательностьИз |
|
|
Значение-Множество |
|
|
ЗначениеМножествоИз |
|
|
ВыборочноеЗначение |
|
|
СелективноеЗначение |
|
|
ТегированноеЗначение |
|
|
ПроизвольноеЗначение |
|
|
Значение-ИдентификаторОбъекта |
|
|
Значение-СтрокаЗнаков |
|
|
ПеречислительноеЗначение |
|
|
Значение-ДействительноеЧисло |
Примечание В качестве последовательности вида "Значение" также может использоваться обозначение значения, определенное с помощью макронотации (см. приложение А).
12.8 Если тип определяется с использованием одного из обозначений, приведенных слева в приведенном ниже перечне, то значение должно задаваться с использованием обозначения, приведенного справа.
Обозначение типа |
Обозначение значения |
БулевскийТип |
БулевскоеЗначение |
ЦелочисленныйТип |
ЦелочисленноеЗначение |
Тип-СтрокаБит |
Значение-СтрокаБит |
Тип-СтрокаОктетов |
Значение-СтрокаОктетов |
ВырожденныйТип |
ВырожденноеЗначение |
Тип-Последовательность |
Значение-Последовательность |
Тип-ПоследовательностьИз |
Значение-ПоследовательностьИз |
Тип-Множество |
Значение-Множество |
Тип-МножествоИз |
Значение-МножествоИз |
ВыборочныйТип |
ВыборочноеЗначение |
ТегированныйТип |
ТегированноеЗначение |
ПроизвольныйТип |
ПроизвольноеЗначение |
Тип-ИдентификаторОбъекта |
Значение-ИдентификаторОбъекта |
Тип-СтрокаЗнаков |
Значение-СтрокаЗнаков |
ПеречислительныйТип |
ПеречислительноеЗначение |
Тип-ДействительноеЧисло |
Значение-ДействительноеЧисло |
Примечание. В последующих версиях настоящего стандарта могут быть определены дополнительные обозначения для записи значений.
В случаях, когда тип является "ОпределеннымТипом", обозначения, используемые для записи значения, должны соответствовать обозначениям, применяемым для типа, породившего "ОпределенныйТип".
12.9 Обозначения для записи значений типов, определяемых обозначением "ОбщеупотребительныйТип", приведены в разделе 3.
12.10 Обозначение "ВстроенноеЗначение" определяется в следующих разделах.
12.11 Значение типа, ссылка из который задается обозначением вида "ПоименованныйТип", определяется обозначением вида "ПоименованноеЗначение":
ПоименованноеЗначение : : = | |
|
Идентификатор Значение |
|
Значение |
где "Идентификатор" (если он задан) - тот же самый идентификатор, который использовался в обозначении "ПоименованныйТип". В 25.2 указаны дополнительные ограничения на "ПоименованноеЗначение" для случая, когда "ПоименованныйТип" является "СелективнымТипом".
Примечание. "Идентификатор" является составной частью обозначения, но не является составной частью значения.
12.12 "Идентификатор" является составной частью последовательности "ПоименованноеЗначение" в том и только том случае, когда он является составной частью последовательности "ПоименованныйТип".
Примечание. В том случае, когда используется вариант "СелективныйТип", "идентификатор" всегда включается в запись значения.
13 Обозначения для булевского типа
13.1 Для ссылки на булевский тип (см. 3.13) должно использоваться обозначение "БулевскийТип":
БулевскийТип : : = BOOLEAN
13.2 Типы, определенные с помощью этого обозначения, имеют тег универсального класса 1.
14 Обозначения для целочисленного типа
14.1 Для ссылки на целочисленный тип (см. 3.16) должно использоваться обозначение "ЦелочисленныйТип":
ЦелочисленныйТип : : = | |
|
INTEGER |
|
INTEGER {СписокПоименованныхЧисел} |
СписокПоименованныхЧисел : : = | |
|
ПоименованноеЧисло |
|
СписокПоименованныхЧисел, Поименованное Число |
ПоименованноеЧисло : : = |
|
|
Идентификатор (ЧислоСоЗнаком) |
|
Идентификатор (ОпределенноеЗначение) |
ЧислоСоЗнаком : : = Число - Число |
14.2 Вариант "число со знаком" не должен использоваться, если "число" является нулем.
14.3 "СписокПоименованныхЧисел" не является существенной составной частью определения типа. Эту последовательность используют только в обозначениях для записи значений, описанных в 14.9.
14.4 "ОпределенноеЗначение" является ссылкой на значение целочисленного типа или тегированного типа, производного от целочисленного типа.
14.5 Значение каждой из последовательностей "ЧислоСоЗнаком" и "ОпределенноеЗначение", входящих в "СписокПоименованныхЧисел", должны быть попарно различными и быть выделенными значениями целочисленного типа.
14.6 Элементы "идентификатор", входящие в "СписокПоименованныхЧисел", должны быть различными.
14.7 Порядок следования последовательностей "ПоименованноеЧисло" в последовательности "СписокПоименованныхЧисел" несущественен.
14.8 Типы, определенные с помощью этого обозначения, имеют тег универсального класса 2.
14.9 Значение целочисленного типа должно определяться обозначением вида "Целочисленное Значение":
ЦелочисленноеЗначение : : = | |
|
ЧислоСоЗнаком |
|
Идентификатор |
14.10 "Идентификатор" в продукции "ЦелочисленноеЗначение" должен совпадать с одной из последовательностей "Идентификатор", входящих в состав последовательности "ЦелочисленныйТип", которая определяет тип данного значения; "ЦелочисленноеЗначение" в этом случае определяется числом, соответствующим заданному идентификатору в описании целочисленного типа.
Примечание. При определении целочисленного значения, для которого был задан "Идентификатор" в определении типа, задание "ЦелочисленногоЗначения" в форме "Идентификатор" является предпочтительным.
15 Обозначения для перечислительного типа
15.1 Перечислительный тип (см. 3.17) должен определяться обозначением "ПеречислительныйТип":
ПеречислительныйТип : : = | |
|
ENUMERATED {Перечисление} |
Перечисление : : = | |
|
ПоименованноеЧисло |
|
ПоименованноеЧисло, Перечисление |
Примечания
1 Каждое значение имеет идентификатор, который связывается в этом обозначении с определенным числом. Это позволяет контролировать представление значений данного типа и облегчает согласованное расширение типов, но не предполагает наличие целочисленной семантики у значений данного типа.
2 Численные значения в обозначениях "ПоименованноеЧисло", входящих в "перечисление", необязательно должны быть упорядоченными или смежными.
15.2 Для каждого "ПоименованногоЧисла" "Идентификатор" и "ЧислоСоЗнаком" должны отличаться от "Идентификаторов" и "ЧиселСоЗнаком" других "ПоименованныхЧисел", входящих в "Перечисление".
15.3 Перечислительный тип имеет тег универсального класса 10.
15.4 Значение перечислительного типа должно определяться обозначением "ПеречислительноеЗначение":
ПеречислительноеЗначение : : = Идентификатор
16 Обозначения для типа "действительное число"
16.1 Тип "действительное число" (см. 3.18) определяется обозначением "Тип-ДействительноеЧисло":
Тип-ДействительноеЧисло : : = REAL
16.2 Значения типа "действительное число" включают значения PLUS-INFINITY и MINUS-INFINITY вместе с действительными числами, которые могут быть представлены следующей формулой, содержащей три целочисленных аргумента, М, В и Е:
где М называется мантиссой, В - основанием, а Е - порядком. М и Е могут принимать любые целочисленные значения, как положительные, так и отрицательные, а В принимает значения 2 или 10. Допускаются любые комбинации М, В и Е.
Примечания
1 Этот тип может передавать точное значение любого числа, которое может быть представлено в обычном оборудовании с плавающей запятой и любое число в десятичном представлении с конечным числом цифр.
2 Кодовое представление этого типа, определенное в ГОСТ Р ИСО/МЭК 8825, допускает использование оснований 2, 8 и 16 для двоичного представления действительных чисел и основания 10 для десятичного в виде последовательности знаков, выбор одного из вариантов осуществляется отправителем.
16.3 Тип "действительное число" имеет тег универсального класса 9.
16.4 Обозначения для определения значения типа "действительное число" должны иметь вид "Значение-ДействительноеЧисло":
Значение-ДействительноеЧисло : : = | |
|
ЧисленноеДействительноеЗначение |
|
СпециальноеДействительноеЗначение |
ЧисленноеДействительноеЗначение : : = | |
|
{Мантисса, Основание, Порядок} 0 |
Мантисса : : = ЧислоСоЗнаком | |
Основание : : = 2 10 | |
Порядок : : = ЧислоСоЗнаком | |
СпециальноеДействительноеЗначение : : = | |
|
PLUS-INFINIT MINUS-INFINITY |
Для нулевых значений должен использоваться вариант "0" конструкции ЧисленноеДействительноеЗначение, а альтернативный вариант этой конструкции использоваться не должен.
17 Обозначения для типа "строка битов"
17.1 Для ссылки на тип "строка битов" (см. 3.19) должно использоваться обозначение "Тип-СтрокаБитов":
Тип-СтрокаБит : : = |
|
|
BIT STRING |
|
|
BIT STRING {СписокПоименованныхБит} | ||
СписокПоименованныхБит : : = | ||
|
Поименованный Бит |
|
|
СписокПоименованныхБит, ПоименованныйБит |
|
ПоименованныйБит : : = | ||
|
Идентификатор (Число) |
|
|
Идентификатор (ОпределенноеЗначение) |
17.2 "СписокПоименованныхБит" не является существенной составной частью определения типа. Эта последовательность используется только в обозначениях для записи значений, определенных в 17.8.
17.3 Первый бит в строке бит имеет нулевой номер. Замыкающим битом называется бит, который заканчивает строку бит.
Примечание. Термины первый бит и замыкающий бит используют при описании как обозначений для задания значений, так и правил кодирования.
17.4 "ОпределенноеЗначение" должно представлять собой ссылку на некоторое неотрицательное значение целочисленного типа, помеченного типа, производного от целочисленного типа, или подтипа целочисленного типа.
17.5 Значения последовательностей "Число" и "ОпределенноеЗначение", входящих в состав последовательности "СписокПоименованныхБит", должны быть попарно различными; каждое из этих значений используют в качестве номера выделенного бита при задании значения строки бит.
17.6 Все элементы "Идентификатор", входящие в "СписокПоименованныхБит", должны быть различными.
Примечание. Порядок следования последовательностей "ПоименованныйБит" в последовательности "СписокПоименованныхБит" несущественен.
17.7 Этот тип имеет тег универсального класса под номером 3.
17.8 Значение типа "строка бит" задается нижеследующим обозначением "Значение-СтрокаБит":
Значение-СтрокаБит : : = | ||
|
b-строка |
|
|
h-строка |
|
|
{СписокИдентификаторов} |
|
|
{ } |
|
СписокИдентификаторов : : = | ||
|
Идентификатор |
|
|
СписокИдентификаторов, Идентификатор |
17.9 Каждый элемент "Идентификатор", входящий в последовательность "Значение-СтрокаБит", должен совладать с некоторым элементом "Идентификатор" в составе последовательности "Тип-Строка-Бит", определяющей тип, к которому относится данное значение.
17.10 Пользователь нотации определяет (и может указать это в комментарии), является ли существенным наличие или отсутствие последних нулевых бит.
Примечание. Правилами кодирования обеспечивается передача строк бит произвольной длины и с произвольным чередованием бит в строке.
17.11 Обозначение вида "{СписокИдентификаторов}" и "{ }" для последовательности "Значение-СтрокаБит" могут использоваться только в том случае, когда присутствие или отсутствие замыкающих нулевых бит несущественно. Этот вариант обозначения задает строку бит с единицами в битовых позициях с номерами, задаваемыми последовательностями "Идентификатор", и со всеми остальными битами, равными нулю.
Примечание. Последовательность "{ }" используют для обозначения значения строки бит, не содержащей ни одного бита, равного единице.
17.12 При описании правил кодирования для строк бит для ссылок на соответствующие биты используют термины первый бит и замыкающий бит, определенные выше.
17.13 При использовании обозначения "b-строка" первый бит записывают слева, а замыкающий бит - справа.
17.14 При использовании обозначения вида "h-строка" старший бит каждой шестнадцатеричной цифры соответствует начальному (первому слева) биту в представляющей ее строке бит.
Примечание. Описанные обозначения никоим образом не ограничивают способа размещения строки бит по октетам для передачи, который реализуется правилами кодирования.
17.15 Обозначение "h-строка" может использоваться только в следующих случаях:
а) если значение строки бит состоит из количества бит, кратного четырем, или
в) присутствие или отсутствие последних нулевых бит несущественно.
Пример
А98АН и
1010100110001010В
являются эквивалентными обозначениями одного и того же значения битовой строки.
18 Обозначения для типа "строка октетов"
18.1 Для ссылки на тип "строка октетов" (см. 3.20) должно использоваться обозначение "Тип-СтрокаОктетов":
Тип-СтрокаОктетов : : = OCTET STRING
18.2 Этот тип имеет тег универсального класса 4.
18.3 Значение типа "строка октетов" должно определяться обозначением вида "Значение-СтрокаОктетов":
Значение-СтрокаОктетов : : = | |
|
b-строка |
|
h-строка |
18.4 При описании правил кодирования для строк октетов для ссылок на соответствующие октеты используют термины первый октет и замыкающий октет, а для ссылок на соответствующие биты внутри октета - термины "старший бит" и "младший бит".
18.5 При использовании обозначения вида "b-строка" самый левый бит является старшим битом первого октета. Если "b-строка" состоит из некоторого количества бит, некратного восьми, она должна интерпретироваться таким образом, как если бы она содержала такое наименьшее количество дополнительных замыкающих нулевых бит, которое требуется для обеспечения кратности восьми.
18.6 При использовании обозначения вида "h-строка" крайняя левая шестнадцатеричная цифра является старшим полуоктетом первого октета. Если "h-строка" состоит из нечетного числа шестнадцатеричных цифр, то она должна интерпретироваться таким образом, как если бы она содержала еще одну дополнительную замыкающую нулевую шестнадцатеричную цифру.
19 Обозначения для вырожденного типа
19.1 Для ссылки на вырожденный тип (см. 3.21) следует использовать обозначение "ВырожденныйТип":
ВырожденныйТип : : = NULL
19.2 Этот тип имеет тег универсального класса 5.
19.3 Для ссылок на значение вырожденного типа должно использоваться обозначение "ВырожденноеЗначение":
ВырожденноеЗначение : : = NULL
20 Обозначения для типов "последовательность"
20.1 Для построения типа "последовательность" (см. 3.22) из. других типов используют определяемое ниже обозначение "Тип-Последовательность":
Тип-Последовательность : : = |
|
||
|
SEQUENCE {СписокТипов-Компонентов} |
||
|
SEQUENCE { } |
|
|
СписокТипов-Компонентов : : = |
|
||
|
Тип-Компонент |
|
|
|
СписокТипов-Компонентов, Тип-Компонент |
|
|
Тип-Компонент : : = |
|
|
|
|
ПоименованныйТип |
||
|
ПоименованныйТип OPTIONAL |
||
|
ПоименованныйТип DEFAULT Значение |
||
|
|
COMPONENTS OF Тип |
|
20.2 "Тип" в четвертом варианте продукции "Тип-компонент" должен быть типом "последовательность". Использование варианта "COMPONENTS OF Тип" определяет включение, в этом месте, в "СписокТипов-Компонентов" всех последовательностей "Тип-Компонент", имеющихся в типе, заданном обозначением "Тип".
Примечание. Это преобразование считают логически завершенным до удовлетворения требований, описанных в последующих подразделах.
20.3 Для каждой последовательности из одного или нескольких следующих друг за другом "Типов-Компонентов", отмеченных как "OPTIONAL" или "DEFAULT", теги этих "Типов-Компонентов" должны быть различными и отличаться от тега "Типа-Компонента", непосредственно следующего за этой последовательностью (см. раздел 26).
20.4 Если используют ключевые слова "OPTIONAL" или "DEFAULT", то при формировании значения нового типа, а также при формировании, в соответствии с правилами кодирования, информации для передачи значение соответствующего типа-компонента может быть опущено.
Примечания
1 Если элементы "Идентификатор" присутствуют не в каждой последовательности "ПоименованныйТип", то обозначение значения для нового типа может оказаться неоднозначным.
2 Правилами кодирования гарантируется, что кодирование значения-последовательности, в котором был опущен элемент, заданный с использованием ключевых слов "DEFAULT" или "ОРТIONAL", будет совпадать с кодированием такого значения последовательности, для которого соответствующий тип-компонент был опущен при описании типа. Это может оказаться полезным при определении подмножеств.
20.5 Пропуск значения типа, заданного как "DEFAULT", в точности эквивалентен включению значения, определенного последовательностью "Значение", которая должна быть допустимой последовательностью для обозначения значения типа, определенного последовательностью "Тип" в последовательности "ПоименованныйТип".
20.6 Элементы "Идентификатор" (если они заданы) должны быть различными во всех последовательностях вида "ПоименованныйТип", входящих в последовательность "СписокТипов-Компонентов".
20.7 Все типы "последовательность" имеют тег универсального класса 16.
Примечание. Типы "последовательность из" имеют тот же самый тег (см. 21.3).
20.8 Обозначения для определения значения типа "последовательность" должны иметь вид "Значение-Последовательность":
Значение-Последовательность : : = | ||
|
{СписокЗначений-Компонентов} |
|
|
{ } |
|
СписокЗначений-Компонентов : : = | ||
|
ПоименованноеЗначение |
|
|
СписокЗначений-Компонентов, ПоименованноеЗначение |
20.9 Обозначение "{ }" используют лишь в следующих случаях:
a) все последовательности вида "Тип-Компонент" в последовательности "Тип-Последовательность" отмечены как "DEFAULT" или "OPTIONAL", и все значения опущены; или
b) обозначение типа имело вид "SEQUENCE { }".
20.10 Для каждой последовательности "ПоименованныйТип", входящей в "Тип-Последовательность", которая не отмечена как "DEFAULT" или "OPTIONAL", в записи значения типа "последовательность" должно быть включено некоторое значение этого поименованного типа, в порядке следования последовательностей "ПоименованныйТип".
Примечание. Использование последовательностей "ПоименованныйТип", не содержащих идентификатор, не запрещается, но в случае использования "DEFAULT" или "OPTIONAL" может привести к неоднозначным обозначениям.
21 Обозначения для типов "последовательность из"
21.1 Обозначения для построения типа "последовательность из" (см. 3.23) из другого типа должны иметь вид "Тип-ПоследовательностьИз":
Тип-ПоследовательностьИз : : = SEQUENCE OF Тип | |
|
SEQUENCE |
21.2 Обозначение "SEQUENCE" эквивалентно обозначению "SEQUENCE OF ANY" (см. раздел 27).
21.3 Все типы "последовательность из" имеют тег универсального класса 16.
Примечание. Типы "последовательность" имеют тот же самый тег (см. 20.7).
21.4 Для задания значения типа "последовательность из" используют определяемое ниже обозначение "Значение-ПоследовательностьИз":
Значение-ПоследовательностьИз : : = | ||
|
{СписокЗначений} { } |
|
СписокЗначений : : = Значение | ||
|
СписокЗначений, Значение |
Обозначение "{ }" используют в тех случаях, когда в значении" типа "последовательность из" нет ни одного значения-компонента.
21.5 Каждая последовательность "Значение", входящая в "СписокЗначений", должна быть обозначением некоторого значения того "Типа", который задан определении типа "последовательность из".
Примечание. Порядку следования этих значений может соответствовать некоторый семантический смысл.
22 Обозначения для типа "множество"
22.1 Обозначения для определения типа "множество" (см. 3.24) на основе других типов должны иметь вид "Тип-Множество":
Тип-Множество : : = SET {СписокТипов-Компонентов} | |
|
SET { } |
"СписокТипов-Компонентов" определен в 20.1.
22.2 "Тип" в четвертом варианте продукции "Тип-Компонент" (см. 20.1) должен быть типом "множество". Использование варианта "COMPONENTS OF Тип" определяет включение в "СписокТипов-Компонентов" всех последовательностей "Тип-Компонент", имеющихся в типе "множество".
Примечание. Это преобразование считают логически завершенным до удовлетворения требований, описанных в последующих подразделах
22.3 Все "Типы-компоненты" в типе "множество" должны иметь разные теги (см. раздел 26).
22.4 Для типов "множество" применимы формулировки 20.4-20.6.
22.5 Все типы "множество" имеют тег универсального класса 17.
Примечание. Типы "множество из" имеют тот же самый тег (см. 23.3).
22.6 Порядку следования значений-компонентов в типе "множество" не придают никакого семантического значения.
22.7 Обозначения для определения значения типа "множество" должны иметь вид "Значение-Множество":
Значение-Множество : : = {СписокЗначений-Компонентов} { }
Последовательность "СписокЗначений-Компонентов" определена в 20.8.
22.8 Вариант "{ }" в продукции "Значение-множество" может быть применен только в следующих случаях:
a) все последовательности "Тип-Компонент" в продукции "Тип-Множество" заданы как "DEFAULT" или "OPTIONAL", и все значения-компоненты опущены, или
b) тип был задан последовательностью "SET{ }".
22.9 Для каждого "ПоименованногоТипа" в "Типе-Множестве", который не был задан как "ORTIONAL" или "DEFAULT", в записи значения должна присутствовать соответствующая последовательность "ПоименованноеЗначение".
Примечания
1 "ПоименованныеЗначения" могут следовать в произвольном порядке
2 Использование последовательностей "ПоименованныйТип", в которых отсутствует идентификатор, не запрещается, но может привести к неоднозначности.
23 Обозначения для типов "множество из"
23.1 Обозначения для определения типа "множество из" (см. 3.25) на основе другого типа должны иметь вид "Тип-МножествоИз":
Тип-МножествоИз : : = SET OF Тип | |
|
SET |
23.2 Обозначение "SET" эквивалентно обозначению "SET OF ANY" (см. 27).
23.3 Все типы "множество из" имеют тег универсального класса 17.
Примечание. Типы "множество" имеют тот же самый тег (см. 22.5).
23.4 Обозначения для определения значения типа "множество из" должны иметь вид "Значение-МножествоИз":
Значение-МножествоИз : : = {СписокЗначений} { }
Последовательность "СписокЗначений" определена в 21.4
Обозначение "{ }" используют в том случае, когда значения-компоненты в значении-множестве отсутствуют.
23.5 Каждое "Значение" в "СпискеЗначений" должно быть обозначением некоторого значения "Типа", который используют в последовательности "Тип-МножествоИз".
Примечания
1 Порядок следования значений-компонентов не имеет никакого семантического значения.
2 К правилам кодирования не предъявляется требования сохранения порядка следования этих значений.
24 Обозначения для выборочных типов
24.1 Обозначения для определения выборочного типа (см. 3.27), исходя из имеющихся других типов, должны иметь вид "ВыборочныйТип":
ВыборочныйТип : : = СНОIСЕ{СписокТипов-Вариантов} | ||||
СписокТипов-Вариантов : : = |
|
|||
|
ПоименованныйТип |
|||
СписокТипов-Вариантов, ПоименованныйТип |
|
Примечания
1 Правила кодирования обеспечивают идентичность способа кодирования выбранного значения выборочного типа способу кодирования такого же значения типа-варианта.
2 Кодирование значений "ВыборочногоТипа" с единственным типом-вариантом "ПоименованныйТип" в "СпискеТипов-Вариантов" невозможно отличить от кодирования соответствующих значений в случае прямого задания "Типа", входящего в последовательность "ПоименованныйТип".
24.2 Все типы, входящие в "СписокТипов-Вариантов", должны иметь различные теги (см. раздел 26).
24.3 Тег выборочного типа следует считать переменной. При выборе конкретного значения выборочного типа его тег становится равным тегу того типа-варианта, к которому относится значение.
24.4 Если выборочный тип используют в таких конструкциях, где требованием настоящего стандарта является использование типов с различными тегами (см. 20.3, 22.3 и 24.2), то теги всех типов, определенных в "СпискеТипов-Вариантов", должны отличаться от тегов других типов (см. раздел 26). Приведенные ниже примеры иллюстрируют это требование. Примеры 1 и 2 являются примерами правильного использования нотации. Пример 3 является примером неправильного использования нотации, поскольку теги типов d, f, а также е, g совпадают:
ПРИМЕРЫ
1 |
А |
: : |
= CHOICE {b В с NULL} |
|
В |
: : |
= CHOICE {d [0] NULL, е [1] NULL} |
2 |
А |
: : |
= CHOICE {b В, с С} |
|
В |
: : |
= CHOICE {d [0] NULL е [1] NULL} |
|
С |
: : |
= CHOICE {f [2] NULL, g [3] NULL} |
3 |
(НЕПРАВИЛЬНОЕ ОПИСАНИЕ) |
||
|
A |
: : |
= CHOICE {b B, с С} |
|
В |
: : |
= CHOICE {d [0] NULL e [1] NULL} |
|
С |
: : |
= CHOICE {f [0] NULL, g [1] NULL} |
24.5 Все "Идентификаторы" (если они заданы) в последовательностях "ПоименованныйТип", входящих в "СписокТипов-Вариантов", должны быть различными.
24.6 Если выборочный тип используют в таких конструкциях, где требованием настоящего стандарта является использование "ПоименованныхТипов" с различными "Идентификаторами", то "Идентификаторы", если они заданы, всех "ПоименованныхТипов" в "СпискеТипов-Вариантов" должны отличаться от всех "Идентификаторов" других "ПоименованныхТипов" (входящих в конструкцию).
24.7 Обозначения, используемые для определения значения выборочного типа, определяются продукцией "ВыборочноеЗначение":
ВыборочноеЗначение : : = ПоименованноеЗначение
24.8 Если "ПоименованноеЗначение" содержит "Идентификатор", то оно должно быть записью значения того типа в "СпискеЗначений-Вариантов", который имеет тот же "Идентификатор". Если "ПоименованноеЗначение" не содержит "Идентификатора", то оно должно быть записью значения одного из тех типов в "СпискеЗначений-Вариантов", которые не имеют "Идентификатора".
Примечание Пропуск идентификатора в "ПоименованномТипе" может лривести к неоднозначности.
25 Обозначения для селективных типов
25.1 Поименованный тип в "СпискеТипов-Вариантов" "ВыборочногоТипа" может быть задан с помощью обозначения "СелективныйТип":
Селективный Тип : : = Идентификатор < Тип
где "Тип" является обозначением, задающим "ВыборочныйТип", а "Идентификатор" является одним из "Идентификаторов" "ПоименованныхТипов" (входящих в "ВыборочныйТип").
Примечание. "СелективныйТип" может использоваться как в качестве "ПоименованногоТипа", и в этом случае "Идентификатор" используют при записи значения, так и в качестве "Типа" в "ПоименованномТипе", и в этом случае его "Идентификатор" при записи значения не используют.
25.2 Обозначения для записи значения селективного типа определяются продукцией "СелективноеЗначение":
СелективноеЗначение : : = ПоименованноеЗначение
причем в "ПоименованноеЗначение" входит идентификатор, присутствующий в соответствующей последовательности "СелективныйТип", в том и только в том случае, когда "СелективныйТип" используют как "ПоименованныйТип".
26 Обозначения для тегированных типов
Тегированный тип (см. 3.26) является новым типом, изоморфным исходному типу, но имеющим другой тег. При всех способах кодирования обеспечивается отличие значения нового типа от значения исходного типа. Тегированный тип используют главным образом в тех случаях, когда требованием настоящего стандарта является использование типов с различными тегами (см. 20.3, 22.3, 24.2, 24.4 и 27.6).
Примечание. Различные теги могут понадобиться для правильного декодирования значения получателем в тех случаях, когда протокол допускает передачу значений различных типов данных в произвольный момент времени.
26.1 Обозначения для тегированного типа должны иметь вид "ТегированныйТип":
ТегированныйТип : : = |
Тег Тип |
||
|
Тег IMPLICIT Тип |
||
|
Тег EXPLICIT Тип |
||
Тег : : = [Класс НомерВКлассе] | |||
НомерВКлассе : : = Число ОпределенноеЗначение | |||
Класс : : = UNIVERSAL | |||
|
APPLICATION |
||
|
PRIVATE |
||
|
пусто |
26.2 "ОпределенноеЗначение" должно быть ссылкой на неотрицательное значение целочисленного типа или производного от целочисленного помеченного типа.
26.3 Новый тип изоморфен исходному типу, но имеет тег с классом, заданным последовательностью "Класс" и номер, заданный последовательностью "НомерВКлассе", если для последовательности "Класс" был выбран вариант, отличный от "пусто"; если был выбран вариант "пусто", то тег относится к контекстно зависимому классу и имеет номер, заданный последовательностью "НомерВКлассе".
26.4 Для типов, определяемых вне рамок настоящего стандарта, "Класс" не должен быть универсальным классом ("UNIVERSAL").
Примечание. Использование тегов универсального класса периодически согласовывается между ИСО и МККТТ.
26.5 Если "Класс" тега является прикладным ("APPLICATION"), то тот же самый "Тег" не может быть использован повторно в том же самом модуле.
26.6 Если "Класс" тега является пользовательским ("PRIVATE"), то тег доступен для использования по правилам, устанавливаемым организациями-пользователями.
26.7 Конструкция тегирования задает явное тегирование, если выполняется одно из следующих условий:
a) используется вариант "Тег EXPLICIT Тип";
b) используется вариант "Тег Тип" и значение конструкции "ТегиПоУмолчанию" для этого модуля - "EXPLICIT TAGS".
c) используется вариант "Тег Тип" и значение конструкции "ТегиПоУмолчанию" для этого модуля - "IMPLICIT TAGS", но тип, определенный конструкцией "Тип", - выборочный или неопределенный.
26.8 Если "Классом" тега является "пусто", то на использование "Тега" не накладывается никаких ограничений, кроме тех, которые вызваны требованиями различия тегов, сформулированными в 20.3, 22.3 и 24.2.
26.9 Вариант "IMPLICIT" является обозначением того, что для тех правил кодирования, которые обеспечивают эту возможность, явное указание тега, который имел исходный "Тип", не требуется при передаче данных.
Примечание. Сохранение старого тега может оказаться полезным, если он относится к универсальному классу, и поэтому однозначно идентифицирует исходный тип при отсутствии информации об определении, с помощью АСН.1, нового типа. Однако с помощью варианта "IMPLICIT" обеспечивается минимальное количество октетов при передаче. Пример кодирования для использования варианта "IMPLICIT" дан в ГОСТ 34.974.
26.10 Вариант "IMPLICIT" не должен использоваться, если тип, определенный последовательностью "Тип", является выборочным ("CHOICE") или произвольным типом ("ANY").
26.11 Обозначения для определения значения тегированного типа должны иметь вид "ТегированноеЗначение":
ТегированноеЗначение : : = Значение
где "Значение" является обозначением значения того типа, который был задан последовательностью "Тип" в продукции "ТегированныйТип".
Примечание Отметим, что в этом обозначении отсутствует "Тег".
27 Обозначения для произвольного типа
27.1 Обозначение для произвольного типа (см. 3.29) определяется продукцией "ПроизвольныйТип":
ПроизвольныйТип : : = ANY | |
|
ANY DEFINED BY идентификатор |
Примечание. Использование "ANY" приводит к неполной спецификации, если не сопровождается дополнительной спецификацией. Конструкция "ANY DEFINED BY" предоставляет возможность задания типа, подставляемого вместо "ANY", во время обмена информацией, а также указывать на его семантику. Если выполняются описанные ниже правила использования этого типа, то он может обеспечить полную спецификацию. Использование "ANY" без "DEFINED BY" не рекомендуется
27.2 Вариант "DEFINED BY" должен использоваться только в том случае, когда произвольный тип, или тип, полученный из него тегированием, является типом-компонентом типа "последовательность" или "множество" (содержащего произвольный тип).
27.3 "Идентификатор" в варианте "DEFINED BY" должен также присутствовать в конструкции "ПоименованныйТип", которая задаст другой, обязательно присутствующий (то есть заданный не как "OPTIONAL") тип-компонент содержащего типа. "ПоименованныйТип" должен относиться либо к целочисленному типу, либо к идентификатору объекта.
27.4 Если "ПоименованныйТип" является целочисленным, перечислительным типом или типом "идентификатор объекта", либо типом, полученным из вышеупомянутых типов тегированием или образованием подтипа, то документ, использующий обозначение "DEFINED BY", должен содержать или явно ссылаться на единый список, в котором задано, какой тип АСН.1 должен быть подставлен вместо "ANY" для каждого разрешенного значения целочисленного типа. Этот список должен быть одним и тем же для всех случаев обмена информацией, затрагивающих содержащий тип.
27.5 Если "ПоименованныйТип" является типом "идентификатор объекта" или типом, полученным из него тегированием, то возникает необходимость в справочнике, "регистре", который для каждого выделенного значения "идентификатор объекта" связывал с ним единственный тин АСН.1 (возможно, выборочный тип), который следует подставить вместо типа "ANY".
Примечания
1 Возможно наличие произвольного количества регистров, связывающих значение-идентификатор объекта с типом АСН.1 для этих целей.
2 Регистрацию значений для идентификации типов при взаимосвязи открытых систем предполагается осуществлять в стандартах ИСО и рекомендациях МККТТ, в которых используют эти обозначения В случаях, когда требуется специальная международная регистрационная служба для некоторого случая использования "ANY DEFINED BY", это должно быть явно указано в документе, использующем эти обозначения.
3 Основное различие между записью значений для идентификации типов в виде целого числа и идентификатора объекта заключается в том, что число задает один законченный список, полностью содержащийся в стандарте, использующей это обозначение, тогда как идентификатор объекта допускает использование открытого списка типов, определяемого регистрационной службой, выделяющей идентификаторы объектов
27.6 Произвольный тип имеет неопределенный тег; он не должен использоваться в случаях, где требованием настоящего стандарта является использование типов с различными тегами (см. 20.3, 22.3, 24.3 и 24.4).
27.7 Запись значения произвольного типа должна осуществляться по правилам АСН.1 и определяется следующей продукцией "ПроизвольноеЗначение".
ПроизвольноеЗначение : : = Тип Значение
где "Тип" - обозначение некоторого типа, а "Значение" обозначение для записи значения этого типа.
28 Обозначения для типа "идентификатор объекта"
28.1 Ссылка на тип "идентификатор объекта" (см. 3.33) должны иметь вид "Тип-ИдентификаторОбъекта":
Тип-ИдентификаторОбъекта : : = OBJECT IDENTIFIER
28.2 Этот тип имеет тег универсального класса 6.
28.3 Обозначения для записи идентификатора объекта должна иметь вид "Значение-ИдентификаторОбъекта":
Значение-ИдентификаторОбъекта : : = | ||||
|
(СписокКомпонентовИдОбъекта} |
|
||
|
{ОпределенноеЗначение СписокКомпонентовИдОбъекта} |
|
||
СписокКомпонентовИдОбъекта : := |
|
|||
|
КомпонентИдОбъекта |
|
||
|
КомпонентИдОбъекта СписокКомпонентовИдОбъекта |
|
||
КомпонентИдОбъекта : : = ИменнаяФорма |
||||
|
ЧисловаяФорма |
|||
|
СмешаннаяФорма |
|
||
ИменнаяФорма : : = Идентификатор |
|
|||
ЧисловаяФорма : : = Число ОпределенноеЗначение |
|
|||
СмешаннаяФорма : : = Идентификатор (ЧисловаяФорма) |
|
28.4 Определенное значение в продукции "ЧисловаяФорма" должно быть ссылкой на значение целочисленного или помеченного типа, производного от целочисленного.
28.5 Определенное значение в продукции "Значение-ИдентификаторОбъекта" должно быть значением целочисленного или тегированного типа, производного от целочисленного.
28.6 "ИменнаяФорма" используется только для тех компонентов идентификатора объекта, численные значения которых определены в приложениях В-D к настоящему стандарту, и должна совпадать с одним из идентификаторов, определенных в этих приложениях.
28.7 "Число" в продукции "ЧисловаяФорма" должно быть числовым значением, присвоенным компоненту идентификатора объекта.
28.8 "Идентификатор" в продукции "СмешаннаяФорма" задается в случаях, когда данному компоненту идентификатора объекта присвоено целочисленное значение.
28.9 Семантическое значение идентификаторов задается деревом идентификаторов объектов. Дерево идентификаторов объектов является графом вида "дерево с корнем", причем корень дерева соответствует настоящему стандарту, вершины соответствуют службам - источникам идентификации, осуществляющим выделение ребер, исходящих из данной вершины. Каждому ребру дерева ставится в соответствие компонент идентификатора объекта, являющийся целочисленным значением. Каждому информационному объекту, подлежащему идентификации, соответствует в точности одна вершина (обычно - висящая вершина) и отсутствуют другие информационные объекты, которым назначена та же вершина. Таким образом, информационный объект однозначно и непротиворечиво идентифицируется последовательностью числовых значений (компонентов идентификаторов объектов), которые соответствуют ребрам в пути от корня графа до вершины, соответствующей данному информационному объекту.
Примечание. Значения вида "идентификатор объекта" состоят, по крайней мере, из двух компонентов, как определяется в приложениях В-D.
28.10 Значение вида "идентификатор объекта" представляет из себя упорядоченный список значений вида "компонент идентификатора объекта". Начиная с корня дерева идентификаторов объектов, каждое значение вида "компонент идентификатора объекта" соответствует ребру этого дерева. Последнее из этих значений идентифицирует ребро, ведущее к вершине, соответствующей информационному объекту. Это - тот самый информационный объект, который идентифицируется данным значением вида "идентификатор объекта". Существенной частью значения вида - "компонент идентификатора объекта" является "именная форма" или "числовая форма", к которой сводится "именная форма". "Числовая форма" ("NumberForm") представляет собой численное значение компонента идентификатора объекта.
Примечание. Как правило, информационный объект представляет собой класс информации (например, формат файла), а не конкретный представитель этого класса (например, конкретный файл). Таким образом, каждая вершина дерева задает некоторый информационный класс, (определяемый некоторым описанием, на которое дается ссылка), а не какой-то объем информации, относящейся к этому классу.
28.11 В случаях, когда "Значение-ИдентификаторОбъекта" включает "ОпределенноеЗначение", список компонентов идентификатора объекта, задаваемый этим "ОпределеннымЗначением", ставится непосредственно перед компонентами, явно присутствующими в значении.
Примеры
С учетом присвоения идентификаторов, описанного в приложении В, значения:
{iso standard 8571 pci(1)}
и
{ISO 8571 1}
идентифицируют один и тот же объект - протокольную управляющую информацию ("pci"), определенную в ИСО 8571.
С учетом следующего дополнительного определения
ftam OBJECT "IDENTIFIER : : =
{iso standard 8571}
значение
{ftam pci(l)}
также эквивалентно значениям, приведенным выше.
Примечание, Если в каком-либо международном стандарте, рекомендации МККТТ или другом документе содержится присвоение значений типа "идентификатор объекта" ("OBJECT IDENTIFIER"), то рекомендуется снабжать этот документ приложением или дополнением, содержащим перечень всех содержащихся в нем присвоений. Желательно также, чтобы службы, присваивающие значения типа "идентификатор объекта" ("OBJECT IDENTIFIER") информационным объектам, присваивали им также значения типа "описатель объекта".
29 Обозначения для типов "строка знаков"
29.1 Обозначения для задания ссылки на тип "строка знаков" (см. 3.12 и раздел 31) должны иметь вид:
Тип-СтрокаЗнаков : : = СсылкаНаТип
где "СсылкаНаТип" - одно из имен типов "строка знаков", перечисленных в разделе 31.
29.2 Теги всех типов "строка знаков" определены в разделе 31.
29.3 Обозначения для записи значения "строка знаков" должны иметь вид:
Значение-СтрокаЗнаков : : - с-строка
Знаки, которые могут присутствовать в "строке знаков" ("с-строке"), определятся типом, к которому относится строка.
31 Определение типов "строка знаков"
В этом разделе определяются типы, значения которых являются последовательностями, состоящими из пустого множества, одного или более знаков некоторого набора знаков.
31.1 Для определения типа ("строка знаков") необходимо задать следующее:
a) тег, присвоенный типу;
b) имя, с помощью которого осуществляется ссылка на определение типа;
в) набор знаков, использующихся в данном типе; набор знаков задается либо с помощью ссылки на таблицу, содержащую изображения знаков этого набора, либо ссылкой на регистрационный номер в Международном регистре наборов кодируемых знаков, используемый в Esc-последовательностях (последовательностях смены набора знаков).
Имя из b) может использоваться как "СсылкаНаТип" при задании типа с помощью нотации АСН.1 (см. раздел 29).
31.2 В таблице 6 приведены имена, с помощью которых могут осуществляться ссылки на определения типов, номера тегов универсального класса, присвоенных типам, и регистрационные номера или номера приведенных ниже таблиц (определяющие набор знаков). В случае необходимости строка таблицы сопровождается примечанием. В случаях, когда для типа определено имя-синоним, оно приводится в скобках.
Примечание. Тег, назначенный типу "строка знаков", однозначно идентифицирует этот тип. Отметим, однако, что в случаях, когда с помощью АСН.1 определяются новые типы, исходя из имеющегося типа "строка знаков" (в особенности, с использованием ключевого слова "IMPLICIT"), может оказаться невозможным распознавание этих типов без знания их определений.
31.3 В таблице 4 перечислены знаки, которые могут присутствовать в значении типа, имеющего имя NumericString (числовая строка).
Таблица 4 - Тип NumericString (числовая строка)
Наименование |
Изображение |
Цифры |
0, 1, ... 9 |
Пробел |
(пробел) |
31.4 В таблице 5 перечислены знаки, которые могут присутствовать в значении типа, имеющего имя PrintablеString (печатная строка).
Таблица 5 - Тип PrintebleString (печатная строка)
Наименование |
Изображение |
Прописные буквы |
А, В, ... Z |
Строчные буквы |
а, b, ... z |
Цифры |
0, 1, ... 9 |
Пробел |
(пробел) |
Апостроф |
' |
Левая скобка |
( |
Правая скобка |
) |
Знак плюс |
+ |
Запятая |
, |
Дефис |
- |
Точка |
. |
Косая черта |
/ |
Двоеточие |
: |
Знак равенства |
= |
Вопросительный знак |
? |
31.5 Обозначения для всех значений типов "строка знаков" должны иметь вид "с-строка".
Примечание. Это обозначение может быть использовано только в том случае, когда используют средства отображения, допускающие изображение знаков, составляющих данное значение. Обозначения для записи значения в других случаях не определены.
31.6 Во всех случаях набор допустимых знаков может ограничиваться комментарием, но не может быть расширен.
Таблица 6 - Список типов "строка знаков"
Имя для ссылки на тип |
Номер тега универсального класса |
Регистрационные номера (см. ИСО 2375) или номер таблицы, определяющей набор знаков |
Примечания |
NumericString |
18 |
(1) |
|
PrintebteString |
19 |
(1) |
|
TeletexString (T61String) |
20 |
87, 102, 103, 106, 107 |
(2) |
VideotexString |
21 |
1, 72, 73, 102, 108, 128, 129 +ПРОБЕЛ +ЗАБОЙ |
(3) |
VisibleString (ISO646String) |
26 |
2+ПРОБЕЛ |
|
IA5String |
22 |
1, 2+ПРОБЕЛ+ЗАБОЙ |
|
GraphicString |
25 |
Все наборы G |
|
GeneralString |
27 |
Все наборы G и С +ПРОБЕЛ+ЗАБОЙ |
|
Примечания 1 Для данного типа такие характеристики, как шрифт, размер, цвет, яркость и т.п. несущественны. 2 Для случаев, соответствующих этим регистрационным номерам, правила использования определяются рекомендацией МККТТ Т.61. 3 Для случаев, соответствующих этим регистрационным номерам, обеспечиваются функциональные возможности, определяемые рекомендациями МККТТ Т.100 и Т.101. |
32 Общая форма записи времени
32.1 Для ссылок на этот тип должно использоваться имя GeneralizedTime.
32.2 Этот тип состоит из значений, содержащих:
a) календарную дату в форме, определенной ИСО 2014 ("Записи календарной даты в числовом представлении");
b) время суток с любой точностью, предусмотренной в разделе 2 ИСО 3307 ("Формы представления времени суток");
c) сдвиг местного времени относительно всемирного времени в виде, описанном в ИСО 4031 ("Представление разности местного времени по отношению ко всемирному времени")
32.3 Описываемый тип может быть определен с помощью нотации АСН.1 следующим образом:
GeneralizedTime : : =
[UNIVERSAL 24] IMPLICIT VisibleString
где значения "отображаемой строки" ("VisibleString") ограничиваются строками знаков, удовлетворяющих одному из следующих условий:
а) "отображаемая строка" ("VisibleString") является строкой, представляющей календарную дату в соответствии с правилами, определенными в ИСО 2014 с четырехзначной записью года, двузначной записью месяца и двузначной записью числа без разделителей, за которой следует строка, представляющая время суток, как предписано ИСО 3307, не содержащая других разделителей, кроме десятичной точки или десятичной запятой (как предусматривается в 2.3-2.5 ИСО 3307) без оконечного знака Z (как предусмотрено в разделе 3 ИСО 3307) или
b) "отображаемая строка" является строкой знаков, определенной в а), за которой следует прописная буква Z, или
c) "отображаемая строка" является строкой знаков, определенной в а), за которой следует строка, определяющая сдвиг местного времени относительно всемирного времени, соответствующая требованиям ИСО 4031, без разделителей.
В случае а) запись времени обозначает местное время. В случае b) запись времени представляет всемирное время (UTC). В случае c) часть строки, описанная в а), представляет местное время (), а сдвиг местного времени относительно всемирного времени () позволяет вычислить всемирное время (UTC) по следующей формуле:
время UTC
Примеры
Случай а)
Значение 19851106210627.3
задает местное время 9 ч вечера 6 мин 27,3 с 6 ноября 1985 г.
Случай b)
Значение 19851106210627.3Z
задает всемирное время (UTC), в остальном заданное как в п. а).
Случай с)
Значение 19851106210627.3-0500
задает местное время как в а) с указанием сдвига местного времени относительно всемирного времени (местное время отстает на 5 ч)
32.4 Тег этого типа должен соответствовать определению типа в 32.3.
32.5 Обозначения для записи значения должны быть обозначениями для записи значения типа, "отображаемая строка", определенного в 32.3.
33 Всемирное время
33.1 Для ссылки на этот тип должно использоваться имя UTCTime
33.2 Этот тип состоит из значений, содержащих:
а) календарную дату;
b) время с точностью до 1 мин или 1 с;
и
с) (в качестве необязательной возможности) сдвиг местного времени относительно всемирного времени.
33.3 Этот тип может быть определен с помощью нотации АСН.1 следующим образом:
UTCTime : : =
[UNIVERSAL 23] IMPLICIT VisibleString
где значения "отображаемой строки" (VisibleString") ограничены строками знаков, состоящими из следующих частей, следующих друг за другом:
а) шести цифр YYMMDD, где YY - две последние цифры номера года по григорианскому календарю, ММ - номер месяца (январь - 01) и DD - число данного месяца (от 01 до 31);
b)
1) четырех цифр hhmm, где hh - обозначение часа (от 01 до 23) и mm - обозначение минут (от 00 до 59),
2) шести цифр hhmmss, где hh и mm - как в 1), a ss - обозначение секунд;
с)
1) знака Z
2) одного из знаков + или -, за которым следует последовательность hhmm, где hh - часы, a mm - минуты.
Разные варианты в b) обеспечивают разную точность при задании времени.
В варианте с) 1) задается всемирное время. В варианте с) 2) задается местное время (часть обозначения, определяемая а), b) и сдвиг местного времени относительно всемирного времени (часть обозначения, определяемая в с) 2), при этом всемирное время (UTC) может быть вычислено следующим образом:
время UTC равно
Пример - Пусть местное время - 6 ч после полудня 2 января 1982 г., а всемирное время - 12 ч (полдень) 2 января, тогда время может быть записано в виде:
UTCTime "8201021200Z" или
UTCTime "8201020700-0500"
33.4 Тег этого типа должен соответствовать определению типа в 33.3.
33.5 Обозначения для записи значения этого типа должны быть отображениями для записи типа "отображаемая строка", определенного в 33.3.
34 Внешний тип
34.1 Обозначение внешнего типа (см. 3.30) должно иметь вид "ВнешнийТип":
ВнешнийТип : : = EXTERNAL
34.2 Этот тип состоит из значений, включающих следующие составные части:
a) кодовое представление какого-то одного значения данных, которое может быть (но необязательно должно быть) значением какого-то одного определенного в АСН.1 типа данных,
b) идентифицирующую информацию, устанавливающую семантику значения и правила кодирования и
c) (в качестве необязательной информации) описатель объекта, содержащий описание данного информационного объекта.
Необязательный описатель объекта может задаваться только в том случае, если это явно разрешается в комментарии, описывающем использование обозначения EXTERNAL.
34.3 Тип EXTERNAL допускает включение в него любых значений данных из некоторого идентифицируемого множества значений.
Примечания
1 Определение этого множества значений данных, их семантики, присвоение идентификаторов объектов и описателей объектов, а также доведение этой информации до всех обменивающихся информацией сторон называется регистрацией абстрактного синтаксиса. Эта совокупность действий может быть выполнена любой службой, которая имеет право присваивать значения идентификаторов объектов (OBJECT IDENTIFIER), как описано в приложениях В-D.
2 Множество значений данных, зарегистрированных в качестве абстрактного синтаксиса (вместе с соответствующими правилами кодирования) считают правильно сформированным только в том случае, если кодовое представление каждого значения данных обладает свойством самоидентифицируемости в рамках множества кодовых представлений значений данных. Если для определения абстрактного синтаксиса используют нотацию ACH.1, то для обеспечения самоидентифицируемости кодового представления используют присвоение тегов. В случаях, когда абстрактный синтаксис не является правильно сформированным, использование коммуникационного канала либо контекстно зависимо, либо ведет к неоднозначности
34.4 Внешний вид (EXTERNAL) может быть определен с помощью нотации ACH.1 следующим образом:
EXTERNAL : : = [UNIVERSAL 8] IMPLICIT SEQUENCE
{direct-reference OBJECT IDENTIFIER OPTIONAL,
indirect-reference INTEGER OPTIONAL,
data-value-descriptor ObjectDescriptor OPTIONAL,
encoding CHOICE
{single-ASN1-type [0] ANY,
octet-aligned [1] IMPLICIT OCTET STRING,
arbitrary [2] IMPLICIT BIT STRING}}
34.5 Когда для данного значения внешнего типа ("EXTERNAL") не используют диалог по установлению правил кодирования на уровне представления, а используют предварительную договоренность относительно синтаксиса передачи, то в значении должен присутствовать идентификатор объекта для прямой ссылки ("direct-reference OBJECT IDENTIFIER"). В этом случае идентификация множества значений осуществляется посредством идентификатора объекта (являющегося прямой ссылкой на абстрактный синтаксис) и подставляемого в поле "идентификатор объекта для прямой ссылки" ("direct reference OBJECT IDENTIFIER"), В этом случае правила кодирования также определяются с использованием осуществленной ранее регистрации абстрактного синтаксиса и целочисленная косвенная ссылка ("indirect-reference INTEGER") не используется.
34.6 Когда используют диалог по установлению правил кодирования на уровне представления, для данного значения внешнего типа ("EXTERNAL"), то должна быть задана "целочисленная косвенная ссылка" ("indirect-reference INTEGER"), В этом случае идентификатором множества значений данных является целое число" являющееся ссылкой на конкретное использование абстрактного синтаксиса. Это число называется идентификатором контекста представления и подставляется в поле "целочисленная косвенная ссылка" ("indirect-reference INTEGER"). Если диалог по установлению правил кодирования на уровне представления завершен, то идентификатор контекста представления также идентифицирует правила кодирования (синтаксис передачи), применяемые к данному значению данных, при этом "идентификатор объекта для прямой ссылки" ("direct reference OBJECT IDENTIFIER") не задается. Если диалог по установлению правил кодирования на уровне представления не завершен, то значение идентификатора объекта также необходимо для идентификации используемых в данный момент правил кодирования (синтаксиса передачи). При использовании диалога по установлению правил кодирования допустимость (или необходимость) элемента "идентификатор объекта для прямой ссылки" ("direct reference OBJECT IDENTIFIER") должна быть указана в комментарии, описывающем использование обозначения "EXTERNAL"), если же соответствующее указание отсутствует, то этот идентификатор не должен использоваться.
Примечания
1 Следствием из 34.5 и 34.6 является требование обязательного присутствия по крайней мере одного из вариантов "прямая ссылка" или "косвенная ссылка".
2 Если диалог по установлению параметров на уровне представления используется, но не завершен, то используются обе ссылки.
34.7 Если рассматриваемое значение данных является значением какого-либо одного типа данных, определенного с помощью ACH.1, и если правила кодирования для этого значения данных те же, что и для всего внешнего типа ("EXTERNAL"), то в конкретной реализации на стороне отправителя может быть использован любой из вариантов элемента "кодовое представление" ("encoding"):
single-ASN1-type
octet-aligned
arbitrary
34.8 Если кодовое представление данных, использующее правила кодирования, установленные в результате предварительной договоренности или в результате диалога по установлению параметров, имеет целое число октетов, то в конкретной реализации на стороне отправителя может быть использован любой из следующих вариантов элемента "кодовое представление" ("encoding"):
octet-aligned
arbitrary
Примечание. Если значение данных является последовательностью значений, относящихся к различным типам АСН.1, и правила кодирования предписывают простую постановку друг за другом строк октетов, полученных применением базовых правил кодирования к каждому из значений разных типов, то такое значение относится к категории, описываемой в данном пункте, а не к категории, описанной в 34.7.
34.9 Если кодовое представление значения данных, использующее правила кодирования, установленные в результате предварительной договоренности или в результате диалога по установлению параметров, содержит не целое число октетов, то должен использоваться следующий вариант элемента "кодовое представление" ("encoding"):
arbitrary
34.10 Если для элемента "кодовое представление" ("encoding") выбран вариант "единственный тип ACH.1" ("single-ASN1-type"), то вместо "ANY" должен быть подставлен тип значения, подлежащего кодированию.
Примечание. Множество значений, которые могут встретиться в этом случае, определяются осуществленной ранее регистрацией значения вида "идентификатор объекта", задаваемого "прямой ссылкой" ("direct reference") и/или целочисленного значения, задаваемого "косвенной ссылкой" ("indirect reference").
34.11 Если для элемента "кодовое представление" ("encoding") выбран вариант "октетно-выравненное" ("octet-aligned"), то значение данных должно быть закодировано в соответствии с синтаксисом передачи, установленным в результате предварительной договоренности или диалога по установлению параметров, и полученные в результате октеты должны составлять значение - строку октетов.
34.12 Если для элемента "кодовое представление" ("encoding") был выбран вариант "произвольное" ("arbitrary"), то значение данных должно быть закодировано в соответствии с синтаксисом передачи, установленным в результате предварительной договоренности или диалога по установлению правил кодирования, а результат должен быть значением - строкой бит.
34.13 Тег этого типа должен соответствовать определению типа в 34.4.
34.14 Обозначения для записи значения должны быть обозначениями для записи значения типа, определенного в 34.4.
35 Тип "описатель объекта"
35.1 Ссылку на этот тип осуществляют с помощью имени
ObjeсtDesсriptor.
35.2 Этот тип составляют тексты, ориентированные на восприятие человеком и предназначенные для описания информационных объектов. Текст, являющийся значением данного типа, необязательно должен идентифицировать информационный объект, но предполагается, что использование одного и того же текста для описания разных информационных объектов маловероятно.
Примечание. Желательно, чтобы значения типа "описатель объекта" ("ObjectDesсriptor") присваивались информационным объектам теми же службами, которые присваивают информационным объектам значения типа "идентификатор объекта" ("OBJECT IDENTIFIER").
35.3 Этот тип может быть определен с помощью нотации АСН.1 следующим образом:
ObjectDescriptor : : =
[UNIVERSAL 7] IMPLICIT GraphicString
"Графическая строка" ("GraphicString") содержит текст, описывающий информационный объект.
35.4 Тег этого типа должен соответствовать определению типа в 35.3.
35.5 Обозначения для записи значения должны быть обозначениями для записи значения типа, определенного в п. 37.3.
36 Обозначения для подтипов
36.1 Подтип определяется с помощью обозначения порождающего типа, за которым следует спецификация требуемого подтипа. Обозначения для спецификации подтипа определяются через обозначения подмножеств значений подтипа. Множество значений подтипа определяется в соответствии с 36.7 взятием теоретико-множественного объединения подмножеств значений подтипа.
36.2 Не следует использовать обозначения подтипа таким образом, при котором порождается подтип, не содержащий ни одного значения.
36.3 Обозначения для подтипа должны иметь вид:
Подтип : : = |
|
|
|
ПорождающийТипСпецификацияПодтипа |
|
|
SET ОграничениеРазмера OF Тип |
|
|
SEQUENCE ОграничениеРазмера OF Тип |
|
ПорождающийТип : : = Тип |
|
36.4 В случаях, когда обозначение "СпецификацияПодтипа" следует за обозначением "СелективныйТип", порождающим типом является "СелективныйТип", а не "Тип" в обозначении "СелективныйТип".
36.5 В случаях, когда обозначение "СпецификацияПодтипа" следует за обозначением типа "множество из" или "последовательность из", оно относится к "Типу" в обозначении "множество из" или "последовательность из", а не к самому типу "множество из" или "последовательность из".
Примечание. Обозначения для частных случаев, имеющие вид "SET ОграничениеРазмера OF Тип" и "SEQUENCE ОграничениеРазмера OF Тип" обеспечивают альтернативные (более легко воспринимаемые) конструкции для простых случаев. Более сложные случаи требуют использования конструкции общего вида.
36.6 Обозначение для спецификации подтипа должно иметь вид "СпецификацияПодтипа":
СпецификацияПодтипа : : = |
|
(ПодмножествоЗначенийПодтипа |
СписокПодмножествЗначенийПодтипа) |
СписокПодмножествЗначенийПодтипа : : = | |
|
"" |
|
ПодмножествоЗначенийПодтипа |
|
СписокПодмножествЗначенийПодтипа |
|
пусто |
36.7 Каждое "ПодмножествоЗначенийПодтипа" задает какое-то количество (возможно, равное нулю) значений порождающего типа, которые включаются в подтип. Значение порождающего типа является значением подтипа тогда и только тогда, когда оно входит в одно или несколько подмножеств значений подтипа. Подтип, таким образом, образуется как объединение подмножеств значений подтипа.
36.8 Предусмотрено несколько различных форм обозначения "ПодмножествоЗначенийПодтипа". Они перечислены ниже, а их синтаксис и семантика определены в разделе 37. Как указано в разделе 37 и проиллюстрировано в таблице 7, некоторые виды обозначений применимы лишь к некоторым порождающим типам.
ПодмножествоЗначенийПодтипа : : =
ОдноЗначение
ВложенныйПодтип
ДиапазонЗначений
РазрешенныйАлфавит ОграничениеРазмера
ОграниченияВнутреннихТипов
37 Подмножества значений подтипа
37.1 Одно значение
37.1.1 Обозначение "одно значение" должно иметь вид
ОдноЗначение : : = Значение
где "Значение" - обозначение значения порождающего типа.
37.1.2 Подмножество, вида "ОдноЗначение" состоит из одного значения порождающего типа, заданного "Значением". Это обозначение может быть применено ко всем порождающим типам.
37.2 Вложенный подтип
37.2.1 Обозначения "ВложенныйПодтип" должны иметь вид:
ВложенныйПодтип : = INCLUDES Тип
37.2.2 Значения, задаваемые обозначением "ВложенныйПодтип", - это все значения, входящие в "Тип", который сам должен быть подтипом порождающего типа. Это обозначение может быть применено ко всем порождающим типам.
37.3 Диапазон значений
37.3.1 Обозначение "ДиапазонЗначений" должно иметь вид:
ДиапазонЗначений : : = | |
|
НижняяГраница . . ВерхняяГраница |
Таблица 7 - Применимость способов образования подмножеств значений подтипов
Тип или полученный из него тегированием |
Одно значение |
Вложенный подтип |
Диапазон значений |
Ограничение размера |
Ограничение алфавита |
Внутренние типы |
Булевский |
да |
да |
нет |
нет |
нет |
нет |
Целочисленный |
да |
да |
да |
нет |
нет |
нет |
Перечислительный |
да |
да |
нет |
нет |
нет |
нет |
Действительное число |
да |
да |
да |
нет |
нет |
нет |
Идентификатор объекта |
да |
да |
нет |
нет |
нет |
нет |
Строка бит |
да |
да |
нет |
да |
нет |
нет |
Строка октетов |
да |
да |
нет |
да |
нет |
нет |
Типы "строка знаков" |
да |
да |
нет |
да |
да |
нет |
Последовательность |
да |
да |
нет |
нет |
нет |
да |
Последовательность из |
да |
да |
нет |
да |
нет |
да |
Множество |
да |
да |
нет |
нет |
нет |
да |
Множество из |
да |
да |
нет |
да |
нет |
да |
Произвольный |
да |
да |
нет |
нет |
нет |
нет |
Выборочный |
да |
да |
нет |
нет |
нет |
да |
37.3.2 Множество значений, задаваемое "ДианазономЗначений", состоит из всех значений, заключенных в диапазоне, заданном числовыми значениями границ диапазона. Это обозначение может применяться только для целочисленных типов, типов "действительное число", а также типов, полученных из них тегированием или взятием подтипа.
Примечание. При образовании подтипов "PLUS-INFINITY" ("плюс бесконечность") превышает все значения "ДействительноеЧисло", a "MINUS-INFINITY" ("минус бесконечность") меньше всех значений "ДействительноеЧисло".
37.3.3 Граница диапазона может быть замкнутой (в этом случае граница диапазона входит в множество значений) или открытой (в этом случае граница диапазона не входит в множество значений). Если граница диапазона открытая, то обозначение нижней или верхней границы включает в себя знак "меньше" ("<"):
НижняяГраница : : =
НижнееГраничноеЗначение | НижнееГраничноеЗначение <
ВерхняяГраница : : =
ВерхнееГраничноеЗначение | < ВерхнееГраничноеЗначение
37.3.4 Граница диапазона может также быть не задана, при этом диапазон продолжается в данном направлении до границы порождающего типа:
НижнееГраничноеЗначение : : = Значение MIN
ВерхнееГраничноеЗначение : : = Значение МАХ
37.4 Ограничение размера
37.4.1 Обозначение "ограничение размера" должно иметь вид:
ОграничениеРазмера : : = SIZE СпецификацияПодтипа
37.4.2 Обозначение "ОграничениеРазмера" применимо только к типам "строка бит", "строка октетов", "строка знаков", "множество из" и "последовательность из", а также типам, полученным из них тегированием или взятием подтипа.
37.4.3 "СпецификацияПодтипа" задает разрешенные целочисленные значения длины элементов множества значений и имеет вид любой спецификации подтипа, которая может быть применена к следующему порождающему подтипу:
INTEGER (0 . . МАХ)
37.4.4 Единица измерения зависит от порождающего типа следующим образом:
Тип |
Единица измерения |
строка бит |
бит |
строка октетов |
октет |
строка знаков |
знак |
множество-из |
значение-компонент |
последовательность-из |
значение-компонент |
37.5 Разрешенный алфавит
37.5.1 Обозначение "РазрешенныйАлфавит" должно иметь вид:
РазрешенныйАлфавит : : = FROM СпецификацияПодтипа
37.5.2 Значения варианта "РазрешенныйАлфавит" - это все значения, которые могут быть построены с использованием подалфавита порождающей строки. Это обозначение может быть применено только к типам "строка знаков" или к типам, полученным из них тегированием или образованием подтипа.
37.5.3 Обозначение "СпецификацияПодтипа" задает знаки, которые могут присутствовать в строке знаков, оно может быть любой спецификацией подтипа, которая применима к подтипу, полученному из порождающего типа применением спецификации подтипа "SIZE(1)".
37.6 Образование внутренних подтипов
37.6.1 Обозначение "ОграниченияВнутреннихТипов" должно иметь вид:
ОграниченияВнутреннихТипов : : =
WITH COMPONENT ОграничениеОдногоТипа |
WITH COMPONENTS ОграниченияНесколькихТипов
37.6.2 "ОграниченияВнутреннихТипов" задают включение в подмножество только тех значений, которые удовлетворяют совокупности ограничений на присутствие и/или значения компонентов порождающего типа. Значение порождающего типа включается в подтип только в том случае, когда удовлетворяются все ограничения, как явные, так и неявные (см. 37.6.6). "Это обозначение может быть применено к типам "множество-из", "последовательность-из", "множество", "последовательность" и выборочному типу, а также к типам, полученным из них тегированием или образованием подтипа.
37.6.3 Для типов, определенных в терминах некоторого другого (внутреннего) типа (типы "множество-из", "последовательность-из" и полученные из них тегированием или образованием подтипа), предусмотрено ограничение, имеющее вид спецификации значения подтипа. Обозначение для этого случая должно иметь вид:
ОграничениеОдногоТипа : : = СпецификацияПодтипа
"СпецификацияПодтипа" определяет подтип единственного другого (внутреннего) подтипа. Значение порождающего является элементом подмножества значений подтипа в том и только в том случае, когда каждое внутреннее значение принадлежит подтипу, образованному применением "СпецификацииПодтипа" к внутреннему типу.
37.6.4 Для типов, определенных в терминах нескольких других (внутренних) типов (типы "множество", "последовательность", выборочный и полученные из них тегированием или образованием подтипа), предусмотрено несколько возможностей накладывать ограничения на эти внутренние типы. Обозначение для этого случая должно иметь вид:
ОграниченияНесколькихТипов : : =
ПолнаяСпецификация ЧастичнаяСпецификация
ПолнаяСпецификация : : = {ОграниченияТипа}
ЧастичнаяСпецификация : : = {. . ., ОграниченияТипа}
ОграниченияТипа : : =
ПоименованноеОграничение
ПоименованноеОграничение ОграниченияТипа
ПоименованноеОграничение : : =
Идентификатор Ограничение Ограничение
37.6.5 "ОграниченияТипа" содержат список ограничений на типы-компоненты порождающего типа. Для типа "последовательность" ограничения должны следовать в требуемом порядке. Внутренний тип, к которому относится ограничение, определяется с помощью идентификатора, если он имеется, или местом в перечне ограничений, как в случае типов "последовательность".
Примечание. Если внутренний тип не имеет идентификатора, то обозначение может оказаться неоднозначным.
37.6.6 Обозначение "ОграниченияНесколькихТипов" охватывает два варианта обозначений: "ПолнаяСпецификация" и "ЧастичнаяСпецификация". Если используется "ПолнаяСпецификация", то неявно подразумевается ограничение присутствия вида "ABSENT" ("отсутствует") для всех внутренних типов, не присутствующих явно в перечне ограничений (см. 37.6.9), а каждый внутренний тип, не отмеченный ключевым словом "OPTIONAL" ("необязательный") или "DEFAULT" ("по умолчанию") в описании порождающего типа, должен явно присутствовать в перечне ограничений. Если используется "ЧастичнаяСпецификация", то никаких ограничений присутствия не подразумевается, и любой внутренний тип может быть опущен из перечня ограничений.
37.6.7 На конкретный внутренний тип могут накладываться ограничения, как в терминах его присутствия (в значениях порождающего типа), так и в терминах допускаемых для него значений, либо и того и другого. Соответствующее обозначение должно иметь вид "Ограничение":
Ограничение : : =
ОграничениеЗначения ОграничениеПрисутствия
37.6.8 Ограничение значения внутреннего тина выражается обозначением "ОграничениеЗначения":
ОграничениеЗначения : : = СпецификацияПодтипа пусто
Значение порождающего типа удовлетворяет ограничению в том и только том случае, когда значение внутреннего типа относится к подтипу, заданному обозначением "СпецификацияПодтипа" в применений к внутреннему типу.
37.6.9 Ограничение присутствия внутреннего типа выражается обозначением "ОграничениеПрисутствия":
ОграничениеПрисутствия : : = | |
|
PRESENT ABSENT OPTIONAL |
|
пусто |
Смысл этих вариантов и ситуации, в которых они разрешены, определяются в 37.6.9.1-37.6.9.3.
37.6.9.1 Если порождающий тип - "последовательность" или "множество", присутствие типа-компонента, отмеченного ключевым словом "OPTIONAL", может быть ограничено ключевым словом "PRESENT" (в этом случае ограничение выполняется в том и только в том случае, когда присутствует соответствующее значение-компонент), ключевым словом "ABSENT" (в этом случае ограничение выполняется только в том случае, когда отсутствует соответствующее значение-компонент), или ключевым словом "OPTIONAL" (в этом случае ограничение накладывается на присутствие соответствующего значения-компонента).
37.6.9.2 Если порождающий тип - выборочный тип, то присутствие типа-компонента может быть ограничено ключевым словом "ABSENT" (в этом случае ограничение выполняется в том и только в том случае, когда соответствующий тип-компонент отсутствует в значении.
37.6.9.3 Смысл варианта "пусто" в обозначении "ОграничениеПрисутствия" зависит от того, используется вариант "ПолнаяСпецификация" или "ЧастичнаяСпецификация":
a) в "ПолнойСпецификации" этот вариант эквивалентен ограничению типа "PRESENT";
b) в "ЧастичнойСпецификации" никаких ограничений не налагается.
______________________________
* До прямого применения данного документа в качестве государственного стандарта распространение его осуществляет секретариат ТК 22 "Информационная технология".
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Государственный стандарт РФ ГОСТ Р ИСО/МЭК 8824-93 "Информационная технология. Взаимосвязь открытых систем. Спецификация абстрактно-синтаксической нотации версии один (АСН.1)" (утв. постановлением Госстандарта РФ от 20 декабря 1993 г. N 263)
Текст ГОСТа приводится по официальному изданию Госстандарта России, 1994 г.
Дата введения 1 июля 1994 г.
1 Подготовлен и внесен Техническим комитетом по стандартизации "Информационная технология" (ТК 22)
2 Утвержден и введен в действие постановлением Госстандарта России от 20 декабря 1993 г. N 263
Настоящий стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 8824-90 "Информационная технология. Взаимосвязь открытых систем. Спецификация абстрактно-синтаксической нотации версии один (асн.1)"
3 Введен впервые