• Текст документа
  • Статус
Оглавление
Поиск в тексте
Документ в силу не вступил


ГОСТ Р ИСО/МЭК 8825-3-2016

     
     
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ

Информационная технология

ПРАВИЛА КОДИРОВАНИЯ АСН.1

Часть 3

Спецификация нотации контроля кодирования (ECN)

Information technology. АСН.1 encoding rules. Part 3. Specification of Encoding Control Notation (ECN)


     
ОКС 35.100.60

Дата введения 2017-11-01

     
Предисловие

1 ПОДГОТОВЛЕН Федеральным государственным унитарным предприятием Государственный научно-исследовательский и конструкторско-технологический институт "ТЕСТ" (ФГУП ГосНИИ "ТЕСТ"), Обществом с ограниченной ответственностью "Информационно-аналитический центр" (ООО ИАВЦ) на основе собственного перевода на русский язык англоязычной версии международного стандарта, указанного в пункте 4
     

2 ВНЕСЕН Техническим комитетом по стандартизации ТК 22 "Информационные технологии"
     

3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 7 ноября 2016 г. N 1597-ст
     

4 Настоящий стандарт идентичен международному стандарту ИСО/МЭК 8825-3:2008* "Информационная технология. Правила кодирования АСН.1. Часть 3. Спецификация нотации контроля кодирования (ECN)" [ISO/IEC 8825-3:2008 "Information technology - АСН.1 encoding rules - Part 3: Specification of Encoding Control Notation (ECN)", IDT].
________________

* Доступ к международным и зарубежным документам, упомянутым здесь и далее по тексту, можно получить, перейдя по ссылке на сайт http://shop.cntd.ru. - Примечание изготовителя базы данных.


     
     При применении настоящего стандарта рекомендуется использовать вместо ссылочных международных стандартов соответствующие им национальные стандарты, сведения о которых приведены в дополнительном приложении ДА
     

5 ВВЕДЕН ВПЕРВЫЕ
     
     
     Правила применения настоящего стандарта установлены в статье 26 Федерального закона от 29 июня 2015 г. N 162-ФЗ "О стандартизации в Российской Федерации". Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ежемесячном информационном указателе "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
     
     

1 Область применения


     Настоящий стандарт определяет нотацию для спецификации кодирования типов АСН.1 или частей типов.
     
     В настоящем стандарте предусмотрено несколько механизмов такой спецификации, в том числе:
     
     - прямая спецификация кодирования с помощью стандартизованной нотации;
     
     - спецификация кодирования путем ссылки на стандартизованные правила кодирования;
     
     - спецификация кодирования типа АСН.1 путем ссылки на некоторую структуру кодирования;
     
     - спецификация кодирования с использованием не-ECN нотации.
     
     В настоящем стандарте предусмотрены также средства для связи спецификаций кодирования с определениями типов, к которым кодирование должно применяться.
     
     ECN в данный момент не предоставляет поддержку для спецификации, использующей OID тип международного идентификатора ресурсов или относительный OID тип международного идентификатора (см. МСЭ-Т рек. Х.680/ ИСО/МЭК 8824-1), и они не указаны далее в настоящем стандарте.
     
     

2 Нормативные ссылки


     В настоящем стандарте использованы нормативные ссылки на следующие международные стандарты*.
_______________
     * Таблицу соответствия национальных стандартов международным см. по ссылке. - Примечание изготовителя базы данных.          
     
     

2.1 Идентичные международные стандарты


     ISO/IEC 9834-1:2005 Information technology - Open Systems Interconnection - Procedures for the operation of OSI Registration Authorities: General procedures and top arcs of the ASN.1 Object Identifier tree (ИСО/МЭК 9834-1:2005 Информационные технологии. Взаимосвязь открытых систем. Процедуры для работы регистрационных органов в системе OSI. Часть 1. Общие процедуры и высшие разряды дерева идентификаторов объекта ASN.1)
     
     ISO/IEC 8824-1:2008 Information technology - Abstract Syntax Notation One (ACH.1): Specification of basic notation [ИСО/МЭК 8824-1:2008 Информационная технология. Абстрактно-синтаксическая нотация 1 (АСН.1). Часть 1. Спецификация базовой нотации]
     
     ISO/IEC 8824-2:2008 Information technology - Abstract Syntax Notation One (ACH.1): Information object specification [ИСО/МЭК 8824-2:2008 Информационная технология. Абстрактно-синтаксическая нотация 1 (АСН.1). Часть 2. Спецификация информационных объектов]
     
     ISO/IEC 8824-3:2008 Information technology - Abstract Syntax Notation One (ACH.1): Constraint specification [ИСО/МЭК 8824-3:2008 Информационная технология. Абстрактно-синтаксическая нотация 1 (АСН.1). Часть 3. Спецификация ограничений]
     
     ISO/IEC 8824-4:2008 Information technology - Abstract Syntax Notation One (ACH.1): Parameterization of ACH.1 specifications [ИСО/МЭК 8824-4:2008 Информационная технология. Абстрактно-синтаксическая нотация 1 (АСН.1). Часть 4. Параметризация спецификаций ASN-1]
     
     ISO/IEC 8825-1:2008 Information technology - АСН.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER), and Distinguished Encoding Rules (DER) [ИСО/МЭК 8825-1:2008 Информационная технология. Правила кодирования АСН.1. Часть 1. Спецификация базовых правил кодирования (BER), канонических правил кодирования (CER) и выделенных правил кодирования (DER)]
     
     ISO/IEC 8825-2:2008 Information technology - АСН.1 encoding rules: Specification of Packed Encoding Rules (PER) [ИСО/МЭК 8825-2:2008 Информационная технология. Правила кодирования АСН.1. Часть 2. Спецификация уплотненных правил кодирования (PER)]
     
     Примечания
     

1 Независимо от даты публикации ИСО вышеприведенные публикации обычно называют "АСН.1:2008".
     

2 Вышеприведенные ссылки следует понимать как ссылки на указанные международные стандарты вместе со всеми опубликованными поправками и техническими исправлениями.
     
     

2.2 Дополнительные ссылки


     ИСО/МЭК 10646:2003 Информационная технология. Универсальный набор многооктетных кодированных знаков (UCS) [ISO/IEC 10646:2003 Information technology - Universal Multiple-Octet Coded Character Set (UCS)]
     
     Примечание - Вышеприведенную ссылку следует понимать как ссылку на стандарт ИСО/МЭК 10646 вместе со всеми опубликованными поправками и техническими исправлениями.
     
     

3 Термины и определения


     В настоящем стандарте применены следующие термины с соответствующими определениями.
     
     

3.1 Определения терминов по АСН.1


     В настоящем стандарте применены термины по ИСО/МЭК 8824-1, ИСО/МЭК 8824-2, ИСО/МЭК 8824-3, ИСО/МЭК 8824-4, ИСО/МЭК 8825-1, ИСО/МЭК 8825-2.
     
     

3.2 Определения терминов, специфичных для ECN

3.2.1 точка выравнивания (alignment point): Точка в кодовой последовательности (обычно ее начало), которая служит в качестве эталонной точки, когда спецификация кодирования требует выравнивания (фазирования) до некоторой границы.

3.2.2 вспомогательное поле (auxiliairy field): Поле структуры "замена" (которая добавляется к спецификации ECN), значение которой устанавливается прямо кодером без использования какого-либо абстрактного значения, выдаваемого приложением.


     Примечание - Примером вспомогательного поля является определитель длины при кодировании целых чисел или при повторении.
     
     

3.2.3 битовое поле (bit-field): Смежные биты или октеты в кодовой последовательности, которые декодируются как целое и которые либо представляют абстрактное значение, либо содержат информацию (например, определитель длины некоторого другого поля, см. 3.2.31), необходимую для успешного декодирования, либо представляют то и другое.


     Примечание - "То и другое" часто встречается в традиционных протоколах.
     
     

3.2.4 класс битового поля (bit-field class): Класс кодирования, объекты которого определяют кодирование абстрактных значений (некоторого типа АСН.1) в биты.


     Примечание - Другие классы кодирования относятся к более общим процедурам кодирования, таким как процедуры, требующие определения конца повторений кодирования некоторого класса битового поля или определения присутствия альтернативного кодирования битового поля из некоторого набора.
     
     

3.2.5 условие границ (bound condition): Условие наличия границ для поля целых чисел (независимо от того, разрешают они отрицательные значения или нет), которое, если оно удовлетворено, означает, что должны применяться определенные правила кодирования.

3.2.6 определитель выбора (choice determinant): Битовое поле, которое определяет, какие из нескольких возможных кодовых последовательностей (каждая из которых представляет разные абстрактные значения) имеются в некотором другом битовом поле.

3.2.7 комбинированный набор объектов кодирования (combined encoding object set): Временный набор объектов кодирования, образованный путем комбинации двух наборов объектов кодирования с целью применения этих кодирований.

3.2.8 условия кодирования (conditional encoding): Кодирование, которое должно применяться только в случае, когда выполняется некоторое указанное условие границ или условие диапазона размеров.


     Примечание - Условие может быть условием границ, или условием диапазона размера, или другими более сложными условиями.
     
     

3.2.9 объемлющий тип (containing type): Тип АСН.1 (или поле структуры кодирования), у которого ограничение на содержание применяется к значениям этого типа (или к значениям, связанным с этим полем структуры кодирования).


     Примечание - Типы АСН.1, к которым может применяться ограничение на содержание (с помощью CONTAINING/ENCODED BY), - это типы "цепочка битов" и "цепочка октетов".


     

3.2.10 текущая точка применения (current application point): Точка в структуре кодирования, в которой применяется комбинированный набор объектов кодирования.

3.2.11 дифференциальное кодирование-декодирование (differential encoding-decoding): Спецификация правил для кодера, требующих приема кодовых последовательностей, которые не могут вырабатываться кодером, соответствующим текущей спецификации.


     Примечание - Дифференциальное кодирование-декодирование поддерживает спецификацию декодирования декодером (соответствующим какой-либо начальной версии стандарта), которая предназначена для создания ему возможности успешно декодировать коды, образованные последующей версией этого стандарта. Это иногда называют "поддержкой растяжимости".
     
     

3.2.12 класс кодирования (encoding class): Набор всех возможных кодовых последовательностей для конкретной части процедур, необходимых для выполнения кодирования или декодирования некоторого типа АСН.1.


     Примечание - Классы кодирования определены для кодирования простейших (примитивных) типов АСН.1, а также определены для процедур, связанных с нотацией тегов АСН.1, использованием OPTIONAL, и для конструкторов кодирования.


     

3.2.13 категория классов кодирования (encoding class category): Классы кодирования с некоторыми общими характеристиками.


     Примечание - Примерами являются категории "целочисленная", "булева" и "конкатенация".
     
     

3.2.14 конструктор кодирования (encoding constructor): Класс кодирования, объекты кодирования которого определяют процедуры кодирования для частей комбинирования, выбора и повторения (примерами являются классы #ALTERNATIVES, #CHOICE, #CONCATENATION, #SEQUENCE и др.).

3.2.15 модули определения кодирования (EDM) (Encoding Definition Modules): Модули, которые определяют кодовые последовательности для применения в модуле компоновки кодирования.

3.2.16 модуль компоновки кодирования (ELM) (Encoding Link Module): Модуль (уникальный для любого заданного применения), который применяет кодовые последовательности к типам АСН.1.

3.2.17 объект кодирования (encoding object): Спецификация некоторой части процедур, необходимой для выполнения кодирования или декодирования того или иного типа АСН.1.


     Примечание - Объекты кодирования могут определять кодирование простейших типов АСН.1, а также определять процедуры, связанные с нотацией тегов АСН.1, использованием OPTIONAL и с конструкторами кодирования.


     

3.2.18 набор объектов кодирования (encoding object set): Набор из объектов кодирования.


     Примечание - Набор объектов кодирования обычно используется в модуле компоновки кодирования для определения кодирования всех типов верхнего уровня, используемых в каком-либо применении.
     
     

3.2.19 признак кодирования (encoding property): Отрезок информации, используемый для определения кодирования с помощью нотации, описанной в разделах 23-25.

3.2.20 пространство кодирования (encoding space): Число битов (или октетов, слов, или других единиц), используемых для кодирования абстрактного значения в битовое поле (см. 9.21.5).

3.2.21 структура кодирования (encoding structure): Структура для кодирования, определенная либо из структуры определения типа АСН.1, либо в EDM с помощью классов битового поля и конструкторов кодирования.


     Примечания
     

1 Использование структуры кодирования является лишь одним (но важным) механизмом из нескольких, обеспечиваемых нотацией управления кодированием для определения кодовых последовательностей для типов АСН.1.
     

2 Определение структуры кодирования является также определением соответствующего класса кодирования.
     
     

3.2.22 явно генерируемая структура кодирования (explicitly generated encoding structure): Структура кодирования, выделенная из неявно генерируемой структуры кодирования путем использования раздела переименований в EDM.

3.2.23 растяжимость (extensibility): Положения в ранней версии стандарта, которые рассчитаны на облегчение взаимодействия реализаций этой ранней версии с ожидаемыми реализациями последующей версии этого стандарта.

3.2.24 полностью определенное имя (fully-qualified name): Ссылка на класс кодирования, объект кодирования или набор объектов кодирования, которая содержит либо имя модуля EDM, в котором этот класс, объект или набор объектов кодирования определен, либо (в случае неявно генерируемого класса кодирования) имя модуля АСН.1, в котором он был генерирован (см. также 3.2.43).


     Примечание - Полностью определенное имя (см. продукцию "ExternalEncodingClassReference" в 10.6) должно использоваться в теле модуля, если классом кодирования является неявно генерируемая структура кодирования, чье имя совпадает с зарезервированным именем класса, либо, если имя используется отдельно, вызовет неоднозначность из-за многих импортов классов с этим именем (см. А.1, 13.16).
     
     

3.2.25 генерируемая структура кодирования (generated encoding structure): Неявно или явно генерируемая структура кодирования, целью которой является определение кодовых последовательностей соответствующего типа АСН.1 путем применения кодовых последовательностей в ELM.

3.2.26 руководитель или руководящее указание (governor): Часть спецификации ECN, которая определяет синтаксическую форму (или семантику) какой-либо другой части спецификации ECN.


     Примечание - Руководитель является ссылкой на класс кодирования и указывает синтаксис, который будет использован для определения объекта кодирования (этого класса). Это понятие такое же, как понятие ссылки на тип в АСН.1, играющей роль руководителя для нотации значений АСН.1.
     
     

3.2.27 набор значений описателя (handle value set): Определенный набор всех возможных значений идентификационного описателя, присущий объекту кодирования.

3.2.28 идентификационный описатель (identification handle): Часть кодирования, которая служит для различения способов кодирования одного класса кодирования от способов кодирования других классов кодирования.


     Примечание - В базовых правилах кодирования АСН.1 используются теги для обеспечения идентифицирующих описателей в кодовых последовательностях BER.
     
     

3.2.29 неявно генерируемая структура кодирования (implicitly generated encoding structure): Структура кодирования, которая генерируется и экспортируется неявно, когда тип определен в модуле АСН.1.

3.2.30 точка начального применения (initial application point): Точка в структуре кодирования, в которой заданный комбинированный набор объектов кодирования применяется в первый раз (в ELM или в модулях EDM).

3.2.31 определитель длины (length determinant): Битовое поле, которое определяет длину другого битового поля.

3.2.32 отрицательное целочисленное значение (negative integer value): Значение, меньшее нуля.

3.2.33 неотрицательное целочисленное значение (non-negative integer value): Значение, большее нуля или равное нулю.

3.2.34 неположительное целочисленное значение (non-positive integer value): Значение, меньшее нуля или равное нулю.

3.2.35 факультативное битовое поле (optional bit-field): Битовое поле, которое иногда вставляется (для кодирования абстрактного значения), а иногда опускается.

3.2.36 положительное целочисленное значение (positive integer value): Значение, большее нуля.

3.2.37 определитель наличия (presence determinant): Битовое поле, которое указывает, присутствует ли факультативное битовое поле.

3.2.38 простейший (примитивный) класс (primitive class): Класс кодирования, который не является структурой кодирования и не может быть отнесен к другому классу (см. 16.1.14).

3.2.39 рекурсивное определение (справочного имени) [recursive definition (of a reference name)]: Справочное имя, для которого вычисление этого справочного имени или руководителя для определения справочного имени требует вычисления исходного справочного имени.


     Примечание - Рекурсивное определение класса кодирования (включая структуру кодирования) или объекта кодирования разрешается (но см. 17.1.4). Рекурсивное определение набора объектов кодирования запрещается в 18.1.3.
     
     

3.2.40 рекурсивная реализация (параметризованного справочного имени) [recursive instantiation (of a parameterized reference name)]: Создание справочного имени, для которого вычисление реальных параметров требует вычисления исходного справочного имени.


     Примечание - Рекурсивное определение класса кодирования (включая структуру кодирования) или объекта кодирования разрешается (но см. 17.1.4). Рекурсивное определение набора объектов кодирования запрещается в 18.1.3.
     
     

3.2.41 структура замены (replacement structure): Параметризованная структура, используемая для замены некоторых или всех частей конструкции перед кодированием этой конструкции.

3.2.42 саморазграничивающее кодирование (self-delimiting encoding): Кодирование набора абстрактных значений, при котором отсутствует такое абстрактное значение, которое имеет кодовую последовательность, являющуюся начальной субцепочкой кодовой последовательности другого абстрактного значения в этом наборе.


     Примечание - Это охватывает только кодовые последовательности с фиксированной длиной для ограниченного целого числа, а также кодовые последовательности, описанные обобщенно как "кодовые последовательности Хаффмана" (см. приложение Е).
     
     

3.2.43 простое справочное имя (simple reference name): Ссылка на класс, объект или набор объектов кодирования, которая не содержит ни имени модуля EDM, в котором определен этот класс, объект или набор объектов кодирования, ни (в случае неявного генерируемого класса кодирования) имени модуля АСН.1, в котором он был генерирован.


     Примечание - Простое справочное имя может использоваться лишь в случае, когда ссылка на класс кодирования недвусмысленна, в остальных случаях в теле модуля должно использоваться полностью определенное имя (см. 3.2.24).
     
     

3.2.44 условие диапазона размера (size range condition): Условие по наличию ограничений на действующий размер поля "цепочка" или "повторение" (а также включение нуля в ограничение и/или разрешение нескольких размеров), которое, если оно удовлетворяется, означает, что должны применяться определенные правила кодирования.

3.2.45 руководитель источника (или класс источника) [source governor (or source class)]: Руководитель, который определяет нотацию для указанных абстрактных значений, связанных с классом источника, при отображении их в класс цели.

3.2.46 начальный указатель (start pointer): Вспомогательное поле, указывающее на присутствие или отсутствие какого-либо факультативного битового поля, а в случае присутствия также указывающее смещение от текущего положения до этого битового поля.

3.2.47 руководитель цели (или класс цели) [target governor (or target class)]: Руководитель, который определяет нотацию для указанных абстрактных значений, связанных с классом цели, при отображении в них из класса источника.

3.2.48 тип (типы) верхнего уровня [top-level type(s)]: Такой тип (типы) АСН.1 в приложении, который используется этим приложением способом, отличающимся от способа для определения компонентов других типов АСН.1.


     Примечания
     

1 Типы верхнего уровня могут также использоваться (но обычно не используются) в качестве компонентов других типов АСН.1.
     

2 Типы верхнего уровня иногда называют "сообщениями приложения" или "протокольными блоками данных (PDU)". Эти типы обычно специально обрабатываются инструментами, так как они образуют в языке программирования верхний уровень тех структур данных, которые предоставляются приложению.
     
     

3.2.49 преобразователи (transforms): Объекты кодирования класса #TRANSFORM, которые указывают, что кодирование абстрактных значений, связанных с некоторым классом (или с композициями преобразования - см. 3.2.50), должно быть кодированием других абстрактных значений, связанных с тем же или с другим классом (или композициями преобразования).


     Примечание - Преобразователи могут использоваться, например, для указания простых арифметических операций над значениями целых чисел либо для отображения значений целых чисел в цепочки знаков или цепочки битов.
     
     

3.2.50 композиции преобразования (transform composites): Упорядоченный список элементов, которые сами могут быть источником или результатом преобразователей.


     Примечание - Необходимо, чтобы все такие элементы имели одну и ту же классификацию (см. 9.18.2).
     
     

3.2.51 кодирование значения (value encoding): Способ использования пространства кодирования для представления абстрактного значения (см. 9.21.5).
     
     

4 Сокращения


     В настоящем стандарте применены следующие сокращения:
     

АСН.1 - абстрактно-синтаксическая нотация 1;
     
     BCD - двоично-кодированное десятичное число;
     
     BER - базовые правила кодирования АСН.1;
     
     CER - канонические правила кодирования АСН.1;
     
     DER - выделенные правила кодирования АСН.1;
     
     ECN - нотация управления кодированием для АСН.1;
     
     EDM - модуль определения кодирования;
     
     ELM - модуль компоновки кодирования;
     
     PDU - протокольный блок данных;
     
     PER - уплотненные правила кодирования АСН.1.
     
     

5 Определение синтаксиса ECN

5.1 В настоящем стандарте применяется соглашение о нотации, определенное в разделе 5 ИСО МЭК 8824-1.
     

5.2 В настоящем стандарте применяется нотация для классов информационных объектов, определенная в ИСО/МЭК 8824-2 и уточненная в приложении В.
     

5.3 В настоящем стандарте приведены ссылки на продукции, определенные в ИСО/МЭК 8824-1 (с уточнениями из приложения А), ИСО/МЭК 8824-2 (с уточнениями из приложения В) и ИСО/МЭК 8824-4 (с уточнениями из приложения С).
     
     

6 Соглашения о кодировании и нотация

6.1 В настоящем стандарте определены значения каждого объекта в кодовой последовательности при помощи терминов "бит старшего порядка" и "бит младшего порядка".
     
     Примечание - В спецификациях нижнего уровня используется такая же нотация для определения порядка передачи битов в последовательной линии или для прикрепления битов к параллельным каналам.
     
     

6.2 В настоящем стандарте биты в октете пронумерованы с 8 до 1, причем бит 8 является "битом старшего порядка", а бит 1 - "битом младшего порядка".
     

6.3 В настоящем стандарте кодирование определяется в виде цепочки битов, которая начинается "начальным битом" и заканчивается "конечным битом". При передаче первые восемь битов этой цепочки битов, начинающейся с "начального бита", помещаются в первый передаваемый октет, в котором "начальный бит" будет "битом старшего порядка" у этого октета. Следующие восемь битов помещаются в следующий октет и т.д. Если в кодируемой последовательности число битов не кратно восьми, то оставшиеся биты передаются так, как будто имеются 8 битов перед последующим октетом.
     
     Примечание - Полная кодируемая последовательность ECN не обязательно всегда кратна восьми битам, но спецификация ECN может указывать на добавление заполняющих битов для обеспечения этого свойства.
     
     

6.4 В настоящем стандарте на рисунках "начальный бит" всегда показан слева.
     
     

7 Набор знаков ECN

7.1 Использование термина "знак" в настоящем стандарте относится к знакам, определенным в ИСО/МЭК 10646, причем полная поддержка всех возможных спецификаций ECN может потребовать представления всех этих знаков.
     

7.2 В спецификациях ECN, за исключением комментариев (определенных в ИСО/МЭК 8824-1, подраздел 12.6), не-ECN определений объектов кодирования (см. 17.8) и значений цепочек (строк) знаков, используются только знаки, перечисленные в таблице 1.
     

7.3 Лексические элементы, определенные в разделе 8, содержат последовательность знаков, перечисленных в таблице 1.
     
     Примечание - Дополнительные ограничения на разрешенные знаки для каждого лексического элемента указываются в разделе 8.
     
     
Таблица 1 - Знаки ECN
     

0 до 9

(ЦИФРА НУЛЬ ... ЦИФРА 9)

A до Z

(ЛАТИНСКИЕ ПРОПИСНЫЕ БУКВЫ ОТ А ДО Z)

а до z

(ЛАТИНСКИЕ СТРОЧНЫЕ БУКВЫ ОТ А ДО Z)

"

(КАВЫЧКИ)

#

(ЗНАК НОМЕРА)

&

(СОЮЗ "И")

'

(АПОСТРОФ)

(

(ЛЕВАЯ КРУГЛАЯ СКОБКА)

)

(ПРАВАЯ КРУГЛАЯ СКОБКА)

,

(ЗАПЯТАЯ)

.

(ТОЧКА)

_

(ДЕФИС, МИНУС)

:

(ДВОЕТОЧИЕ)

;

(ТОЧКА С ЗАПЯТОЙ)

<

(ЗНАК "МЕНЬШЕ, ЧЕМ")

=

(ЗНАК РАВЕНСТВА)

>

(ЗНАК "БОЛЬШЕ, ЧЕМ")

{

(ЛЕВАЯ ФИГУРНАЯ СКОБКА)

|

(ВЕРТИКАЛЬНАЯ ЧЕРТА)

}

(ПРАВАЯ ФИГУРНАЯ СКОБКА)

7.4 Типографский шрифт, размер, цвет, яркость и другие характеристики отображения не имеют значения.
     

7.5 Прописные и строчные буквы должны считаться разными знаками.
     
     

8 Лексические элементы ECN


     В дополнение к лексическим элементам, определенным в ИСО/МЭК 8824-1 [раздел 12], в настоящем стандарте использованы лексические элементы, которые определяются в последующих подразделах. В настоящем разделе применяются общие правила, определенные в ИСО/МЭК 8824-1, подраздел 12.1.
     
     Примечание - В приложении G перечислены все лексические элементы и все продукции, использованные в настоящем стандарте, с указанием тех, которые определены в ИСО/МЭК 8824-1, ИСО/МЭК 8824-2 и ИСО/МЭК 8824-4.
     
     

8.1 Справочные имена объектов кодирования


     Имя элемента - encodingobjectreference
     
     Элемент "encodingobjectreference" содержит последовательность знаков, указанную для "valuereference" в ИСО/МЭК 8824-1, подраздел 12.4. При анализе примера использования этой нотации элемент "encodingobjectreference" различается от "identifier" согласно контексту, в котором он появляется.
     
     

8.2 Справочные имена набора объектов кодирования


     Имя элемента - encodingobjectsetreference
     
     Элемент "encodingobjectsetreference" содержит последовательность знаков, указанную для "typereference" в ИСО/МЭК 8824-1, подраздел 11.2. Она не должна быть какой-либо последовательностью знаков из перечисленных в 8.4.
     
     

8.3 Справочные имена классов кодирования


     Имя элемента - encodingclassreference
     
     Элемент "encodingclassreference" содержит знак "#", за которым следует последовательность знаков, указанная для "typereference" в ИСО/МЭК 8824-1, подраздел 11.2. Она не должна быть какой-либо последовательностью знаков из перечисленных в 8.5, за исключением применения в списке импортов EDM (см. в ИСО/МЭК 8824-1, пункт 13.20 с учетом изменений из А.1) или в "ExternalEncodingCI assReference" (см. примечание в 14.11).
     
     

8.4 Элементы "зарезервированное слово"


     Имена элементов "зарезервированное слово":
     

ALL

FIELDS

PER-BASIC-UNALIGNED

AS

FROM

PER-CANONICAL-ALIGNED

BEGIN

GENERATES

PER-CANONICAL-UNALIGNED

BER

IF

PLUS-INFINITY

BITS

IMPORTS

REFERENCE

BY

IN

REMAINDER

CER

LINK-DEFINITIONS

RENAMES

COMPLETED

MAPPING

SIZE

DECODE

MAX

STRUCTURE

DER

MIN

STRUCTURED

DISTRIBUTION

MINUS-INFINITY

TO

ENCODE

NON-ECN-BEGIN

TRANSFORMS

ENCODING-CLASS

NON-ECN-END

TRUE

ENCODE-DECODE

NULL

UNION

ENCODING-DEFINITIONS

OPTIONAL-ENCODING

USE

END

OPTIONS

USE-SET

EXCEPT

ORDERED

VALUES

EXPORTS

OUTER

WITH

FALSE

PER-BASIC-ALIGNED


     Элементы с вышеприведенными именами должны содержать указанную последовательность знаков в имени.
     
     Примечание - Слова (см. в ИСО/МЭК 8824-2, подраздел 7.9), используемые в определении классов кодирования (в операторе "WITH SYNTAX") в разделе 23, не являются зарезервированными словами (см. также В.14).
     
     

8.5 Элементы "зарезервированное имя класса кодирования"


     Имена элементов "зарезервированное имя класса кодирования":
     

#ALTERNATIVES

#ENUMERATED

#PAD

#BITS

#EXTERNAL

#PrintableString

#BIT-STRING

#GeneralizedTime

#REAL

#BMPString

#GeneralString

#RELATIVE-OID

#BOOL

#GraphicString

#REPETITION

#BOOLEAN

#IA5String

#SEQUENCE

#CHARACTER-STRING

#INT

#SEQUENCE-OF

#CHARS

INTEGER

#SET

#CHOICE

#NUL

#SET-OF

#CONCATENATION

#NULL

#TAG

#CONDITIONAL-INT

#NumericString

#TeletexString

#CONDITIONAL-REPETITION

#OBJECT-IDENTIFIER

#TIME-OF-DAY

#DATE

#ObjectDescriptor

#TRANSFORM

#DATE-TIME

#OCTETS

#UniversalString

#DURATION

#OCTET-STRING

#UTCTime

#EMBEDDED-PDV

#OPEN-TYPE

#UTF8String

#ENCODINGS

#OPTIONAL

#VideotexString

#OUTER

#VisibleString


     Элементы с вышеприведенными именами должны содержать указанную последовательность знаков в имени.
     
     

8.6 He-ECN элемент


     Имя элемента - anystringexceptnonecnend
     
     Элемент "anystringexceptnonecnend" содержит один или несколько знаков из набора знаков ИСО/МЭК 10646, но не должен быть последовательностью знаков NON-ECN-END и не должен содержать внутри эту последовательность знаков.
     
     

9 Понятия ECN


     В настоящем разделе описаны главные понятия, лежащие в основе настоящего стандарта.
     
     

9.1 Спецификация нотации управления кодированием (ECN)

9.1.1 Спецификации ECN содержат один или несколько модулей определения кодирования (EDM), которые определяют правила кодирования для типов АСН.1, и один модуль компоновки кодирования (ELM), который применяет эти правила кодирования к типам АСН.1.
     

9.1.2 Наиболее важная часть ECN - это понятие определения структуры кодирования. АСН.1 используется для определения составных абстрактных значений с помощью простейших типов и конструкторов. Таким же образом составные кодовые последовательности могут определяться с помощью похожей нотации, где конструкционные механизмы используются для комбинирования простых битовых полей в более сложные кодовые последовательности и в конечном счете в полные сообщения. Это называется определением структуры кодирования. При использовании ECN совместно с АСН.1 необходимо, в принципе:
     

а) определить абстрактный синтаксис (набор абстрактных значений, подлежащих передаче и их семантику), а также
     

b) определить структуру кодирования (структуру полей), которая используется для переноса этих абстрактных значений, а также
     

c) связать компоненты абстрактного значения с полями структуры кодирования, а также
     

d) определить кодирование для каждого поля структуры кодирования, а также механизмы для распознавания повторений полей и распознавания альтернатив и т.д.
     

9.1.3 Вышеприведенный процесс обычно используется на начальных этапах. Вначале определение АСН.1 дает подробное описание конкретного абстрактного синтаксиса. Из этого автоматически генерируется предварительная структура кодирования (теоретически, внутри модуля АСН.1). Эта неявно генерируемая структура содержит только те поля, которые переносят семантику приложения, и не содержит полей для таких понятий, как определение длины, выбор альтернативы и т.п.
     

9.1.4 Эта структура может быть трансформирована с помощью нескольких механизмов в структуру полей, которая фактически нужна, включая поля, необходимые для поддержки работы декодера (определители). Эти механизмы в целом используют некоторую форму замены простого поля, переносящего прикладную семантику, на более сложную структуру. Такие замены образуют важную часть спецификации ECN.
     

9.1.5 Мы можем позже определить объекты кодирования для каждого поля в окончательной структуре. Это определит не только кодирование полей, но и способ, которым одно поле определяет длину, например, другого поля или содержит его разрешенные факультативные возможности.
     

9.1.6 Вышеприведенные определения расположены в модулях определения кодирования (EDM). Последним этапом является приложение набора определенных объектов кодирования к окончательной структуре кодирования с целью полного определения кодовой последовательности. Это делается в модуле компоновки кодирования (ELM).
     
     

9.2 Классы кодирования

9.2.1 Класс кодирования - это неявный признак всех типов АСН.1, который представляет набор всех возможных спецификаций кодирования для конкретного типа. Он дает ссылку, которая позволяет модулям определения кодирования определять правила кодирования для полей структуры кодирования, соответствующие этому типу. Имена классов кодирования начинаются со знака "#".


     Пример - Правила кодирования для предопределенного типа АСН.1 INTEGER определяются путем ссылки на класс кодирования #INTEGER, а правила кодирования для определенного пользователем типа "Му-Туре" определяются путем ссылки на класс кодирования #Му-Туре.

9.2.2 Имеются несколько семейств классов кодирования.
     

9.2.2.1 Предопределенные классы кодирования
     
     Имеются предопределенные классы кодирования, например, с именами #INTEGER и #BOOLEAN. Они позволяют определять конкретные кодирования для простейших типов АСН.1. Имеются также предопределенные классы кодирования для кодирования конструкций, таких как #SEQUENCE, #SEQUENCE-OF и #CHOICE (см. также 9.3.2), а также для определения правил кодирования при обработке факультативных возможностей с помощью #OPTIONAL. Кодирование тегов поддерживается классом #TAG. Наконец, имеются некоторые предопределенные классы (#OUTER, #TRANSFORM и другие), которые позволяют определять процедуры кодирования, составляющие часть процесса кодирования-декодирования, но не относящиеся прямо к какому-либо конкретному битовому полю или к конструкции АСН.1.

9.2.2.2 Классы кодирования для неявно генерируемых структур кодирования
     
     Они имеют имена, содержащие знак "#", за которым следует "typereference", появившаяся в "TypeAssignment" в модуле АСН.1. Такие классы кодирования неявно генерируют каждый раз, когда "typereference" (непараметризованная) присваивается в модуле АСН.1, и могут импортироваться в модуль определения кодирования, чтобы позволить определение конкретных кодовых последовательностей для соответствующего типа АСН.1. Эти классы кодирования представляют структуру кодирования АСН.1 и формируются из предопределенных классов кодирования, отражая структуру определения типа АСН.1.
     

9.2.2.3 Классы кодирования для определенных пользователей структур кодирования
     
     Эти классы кодирования определяются пользователем ECN путем указания структуры кодирования (см. 9.3) в виде некоторой структуры, объединяющей битовые поля и конструкторы кодирования. Эти структуры кодирования аналогичны неявно генерируемым структурам кодирования, но пользователь ECN полностью контролирует их структуру. Эти классы позволяют определять комплексные правила кодирования и важны для использования АСН.1 с ECN при спецификации традиционных протоколов, в которых требуются дополнительные битовые поля для кодирования определителей.
     

9.2.2.4 Классы кодирования для явно генерируемых структур кодирования
     
     Эти классы кодирования образуются из неявно генерируемых структур кодирования путем выборочного изменения имен определяемых классов, чтобы указать места, в которых нужны специализированные кодовые последовательности для факультативных возможностей ("опций"), окончаний "последовательностей-из" и т.п.
     
     

9.3 Структуры кодирования

9.3.1 Определения структур кодирования имеют некоторое сходство с определениями типов АСН.1, они имеют имя, начинающееся знаком "#" и содержащее далее прописные буквы. Каждое определение структуры кодирования определяет новый класс кодирования (набор всех возможных кодовых последовательностей этой структуры кодирования). Структуры кодирования формируются из полей, которые являются либо предопределенными классами кодирования, либо именами других структур кодирования, составленных с помощью конструкторов кодирования (которые представляют набор всех возможных правил кодирования, поддерживающих свой тип конструкционного механизма, и поэтому называются классами кодирования) (см. в D.2.8.4 пример определения структуры кодирования).

9.3.2 Самыми основными конструкторами кодирования являются #CONCATENATION, #REPETITION и #ALTERNATIVES, приблизительно соответствующие типам АСН.1 sequence ["последовательность"] (и set ["множество"]), sequence-of (и set-of ["множество-из"]), а также choice [выборочный]. Имеется также класс кодирования #OPTIONAL, который представляет факультативное присутствие кодовых последовательностей, приблизительно соответствующих маркерам АСН.1 DEFAULT и OPTIONAL.

9.3.3 Определение структуры кодирования определяет класс кодирования, основанный на структуре. Такие классы не могут иметь те же имена, что и классы кодирования, которые импортированы в модуль (см. в ИСО/МЭК 8824-1, пункт 13.13 с учетом изменений из А.1 настоящего стандарта).
     

9.3.4 Имена структур кодирования могут экспортироваться и импортироваться между модулями определения кодирования и использоваться каждый раз, когда требуется имя класса кодирования в группе категорий битовых полей (см. 9.6).
     

9.3.5 Значения типов АСН.1 (простейших или определенных пользователем) могут быть отображены в поля структуры кодирования, а правила кодирования для этой структуры затем обеспечат кодовые последовательности этого типа АСН.1 (значения, отображенные в структуры кодирования, могут затем отображаться в поля или более сложные структуры кодирования). Это обеспечивает весьма мощный механизм для определения сложных правил кодирования.
     
     

9.4 Объекты кодирования

9.4.1 Объекты кодирования представляют конкретное определение правил кодирования для заданного класса кодирования. Обычно правила относятся к конкретным битам, которые должны вырабатываться, но могут также определять процедуры, относящиеся к кодированию и декодированию, например, способ указания на присутствие или отсутствие факультативных компонентов.
     

9.4.2 Чтобы полностью определить кодирование типов АСН.1 (обычно типов верхнего уровня для какого-либо приложения), необходимо определить (или получить из стандартизованных правил кодирования) объекты кодирования для всех классов, которые соответствуют компонентам этих типов АСН.1, и для используемых конструкторов кодирования.
     

9.4.3 Для традиционных протоколов это может делаться путем определения отдельного объекта кодирования для каждого компонента типа АСН.1, но более общую возможность дает использование объектов кодирования, определяемых с помощью стандартизованных правил кодирования (например, PER).
     

9.4.4 Хотя спецификации кодирования BER и PER появились раньше, чем ECN, внутри модели ECN они просто определяют объекты кодирования для всех классов, соответствующих простейшим типам и конструкторам АСН.1 (то есть для всех предопределенных классов кодирования). BER и PER рассматриваются также при создании объектов кодирования для классов кодирования, применяемых в определении структур кодирования (см. 18.2).
     
     

9.5 Наборы объектов кодирования

9.5.1 Объекты кодирования могут группироваться в наборы таким же образом, как информационные объекты в АСН.1, причем имеются такие наборы объектов кодирования, которые применяются (в ELM) к типам АСН.1 для определения их кодирования. Руководителем, применяемым при формировании таких наборов объектов кодирования, является зарезервированное слово #ENCODINGS (см. пример в D.1.14).
     

9.5.2 Фундаментальное правило конструирования набора объектов кодирования заключается в том, что любой набор может содержать только один объект кодирования заданного класса кодирования (см. также 9.6.2). Поэтому не будет двусмысленности, когда набор объектов кодирования применяется к типу для определения его кодирования.
     

9.5.3 Наборы предопределенных объектов кодирования имеются для всех вариантов BER и PER, причем они могут использоваться для полных наборов, определенных пользователем объектов кодирования.
     
     

9.6 Определение новых классов кодирования

9.6.1 Те, кто осведомлен об АСН.1, знают, что присвоение типа может использоваться для создания новых имен (новых типов), например, из типов INTEGER и BOOLEAN. Новые имена определяют типы, которые будут теми же INTEGER или BOOLEAN, но несут другую семантику. Это понятие расширено в ECN, чтобы позволить создание (в присвоении класса - см. 16.1.1) новых имен (новых классов) для конструкторов, таких как #SEQUENCE. Новые имена определяют классы, которые выполняют такие же функции при структурировании кодовых последовательностей (например, при конкатенации), но должны иметь другие объекты кодирования, применяемые к ним. Новое имя класса, присвоенное некоторому старому классу, сохраняет определенные характеристики этого старого класса. Итак, присвоение, например, "#My-Sequence ::= #SEQUENCE" создает новое имя класса #My-Sequence, которое все еще является некоторым классом кодирования, относящимся к конкатенации компонентов. Мы говорим, что такие классы кодирования имеют одну и ту же категорию.

9.6.2 Если новый класс кодирования создан из существующего класса кодирования, то объекты кодирования как старого, так и нового классов кодирования могут появляться в одном наборе объектов кодирования.
     

9.6.3 Все предопределенные классы кодирования получаются от одного класса из небольшого числа простейших классов кодирования. Поэтому #SEQUENCE и #SET оба получены от класса #CONCATENATION, классы #INTEGER и #ENUMERATED получены от класса #INT, а классы для различных типов АСН.1 "цепочка знаков" все получены от класса #CHARS. Структура кодирования (например, неявно генерируемая из некоторого типа АСН.1) может содержать смесь разных классов, которые все получены из одного и того же простейшего класса и которые позволяют разные кодирования, применяемые, например, к #SEQUENCE и #SET.

9.6.4 Часто удобно вложить классы кодирования в категории, основанные на простейшем классе, из которого они получены. Поэтому мы говорим, что #INTEGER, #ENUMERATED и #INT (и любой класс, полученный из них в операторе присвоения класса, таком как "#My-int ::= #INT") находятся в категории "целочисленная". Имеются также группы категорий, которые содержат весьма различные классы, имеющие некоторые одинаковые характеристики. Поэтому любой класс, который может иметь абстрактные значения, прямо связанные с ним, и который, следовательно, вырабатывает биты при кодировании, будет находиться, можно сказать, в группе категорий "битовое поле". Поэтому все классы, которые находятся в категории "целочисленная", или "булева", или "цепочка знаков", относятся к группе категорий "битовое поле". Классы, которые ответственны за кодирования с группированием или повторением (например, классы в категории "альтернативы" или "повторение"), относятся к группе категорий "конструктор кодирования". Имеются также два класса, чьи объекты кодирования определяют процедуры, не относящиеся прямо к конструированию кодирования (#TRANSFORM и #OUTER): они считаются находящимися в группе категорий "процедура кодирования". Структуры кодирования определяются с помощью классов в группе категорий "битовое поле", которые комбинируются с классами из группы категорий "конструктор кодирования" вместе с классами из категорий "факультативные возможности" (представляют процедуры кодирования для разрешенных факультативных возможностей) и "тег" (представляют кодирование тегов). Все такие классы находятся в категории "структура кодирования", а также в группе категорий "битовое поле".

9.6.5 Для простейших классов категория присваивается прямо. Для классов, созданных в операторе присвоения класса кодирования, категория определяется с помощью нотации справа от символа "::=". Если эта нотация является определением структуры кодирования, то класс будет относиться как к категории "структура кодирования", так и к группе категорий "битовое поле". Если эта нотация является справочным именем простого класса, то категория нового класса будет такой же, как категория присвоенного класса.
     

9.6.6 Категориями класса кодирования (см. 16.1.3) являются:
     
     - категория "альтернативы" (alternatives) (классы, которые получены путем присвоения класса из #ALTERNATIVES);


     - категория "конкатенация" (concatenation) (классы, которые получены путем присвоения класса из #CONCATENATION);


     - категория "повторение" (repetition) (классы, которые получены путем присвоения класса из #REPETITION);


     - категория "факультативные возможности (опции)" (optionality) (классы, которые получены путем присвоения класса из #OPTIONAL);


     - категория "тег" (tag) (классы, которые получены путем присвоения класса из #TAG);


     - категории "булева" (boolean), "цепочка битов" (bitstring), "цепочка знаков" (characterstring), "целочисленная" (integer), "вырожденная" (null), "идентификатор объекта" (objectidentifier), "цепочка октетов" (octetstring), "открытый тип" (opentype), "pad" и "действительное число" (real) (категории для классов, которые получаются из соответствующих простейших классов);
     
     - категория "структура кодирования" (encoding structure) (классы, генерируемые из определений типов АСН.1 или с помощью явного определения структуры кодирования).
     

9.6.7 Определены следующие группы категорий:
     
     - "битовое поле" (bit-field) (классы, которые соответствуют реальным полям при кодировании, таким как поля в категории "целочисленная" или "булева", вместе с любым классом в категории "структура кодирования"). Классы в этой группе категорий называются также классами "битовое поле";
     
     - "конструктор кодирования" (encoding constructor) (классы, которые находятся в категориях "альтернативы", "конкатенация" или "повторение"). Классы в этой группе категорий называются также классами "конструктор кодирования";
     
     - "процедура кодирования" (encoding procedure) (классы, которые прямо не связаны с конструкторами АСН.1 и которым не могут быть присвоены новые имена - #OUTER, #TRANSFORM, #CONDITIONAL-INT, #CONDITIONAL-REPETITION). Классы в этой группе категорий называются также классами "процедуры кодирования".


     

9.7 Определение объектов кодирования


     Имеются восемь механизмов, доступных для определения объектов кодирования заданного класса кодирования. Они не все доступны для всех классов кодирования.
     

9.7.1 Первый механизм определяет объект такой же, как некоторый другой определенный объект кодирования затребованного класса. Это всего лишь обеспечение синонима для объектов кодирования.
     

9.7.2 Вторым механизмом, доступным для ограниченного набора классов кодирования, является использование определенного синтаксиса (см. 17.2) для указания информации, необходимой для определения объекта кодирования этого класса. Многое из необходимой информации является общим для всех классов кодирования, а некоторая информация всегда зависит от конкретного класса кодирования (см. в D.1.1.2 пример определения объекта кодирования класса #BOOLEAN, который содержит кодирования для булева типа АСН.1).

9.7.3 Третий механизм, доступный для всех классов кодирования - это определение объекта кодирования в виде кодовой последовательности необходимого класса, которая содержится в некотором существующем наборе объектов кодирования. Это используется главным образом при именовании объекта кодирования для отдельного класса, который будет выполнять кодирования BER или PER для этого класса.
     
     Примечание - Это часто может быть полезным, но требует знания процедур кодирования в виде стандартизованных правил кодирования.
     
     

9.7.4 Четвертый механизм - это отображение абстрактных значений, связанных с некоторым классом кодирования (например, ""), в абстрактные значения, связанные с другим (обычно более сложным) классом кодирования (например, ""), и определение объекта кодирования для "" (используя любой доступный механизм). Объект кодирования для абстрактных значений, связанных с "", может быть теперь определен как приложение объекта кодирования для "" к соответствующим абстрактным значениям, связанным с "" (см. пример D.2.8.3). Вариантов такого отображения много (см. 9.17).


     Примечание - Это является моделью, лежащей в основе определения объекта для кодирования целочисленного типа в BER. Целое число отображается в структуру кодирования, которая содержит поле какого-либо класса "тег" (UNIVERSAL, APPLICATION, PRIVATE или зависящий от контекста), примитива/конструктора булево значение, поле номера тега и часть значения, которая кодирует абстрактные значения исходного целого числа.
     
     

9.7.5 Пятый механизм - это определение объекта кодирования для некоторого класса (например, соответствующего определенному пользователем типу АСН.1) путем отдельного определения объектов кодирования для компонентов и конструктора кодирования, используемых в определении этого класса кодирования.
     

9.7.6 Шестой механизм - это определение объекта кодирования для дифференциального кодирования-декодирования (см. 9.8) с использованием двух отдельных объектов кодирования, один из которых определяет поведение кодера, а другой указывает декодеру, как должно учитываться кодирование.
     
     Примечание - Примером будет кодирование поля, которое "зарезервировано для будущего использования" в виде всех нулей, но обеспечивается прием некоторого значения при декодировании.
     
     

9.7.7 Седьмой механизм - это определение такого объекта кодирования с факультативными способами кодирования, который содержит упорядоченный список объектов кодирования одного и того же класса. Кодер может выбирать для применения объект кодирования из списка с учетом следующего ограничения: если только один факультативный способ кодирования может кодировать заданное абстрактное значение, то он будет применяться, при этом рекомендуется, чтобы использовался первый доступный способ кодирования из списка.
     
     Примечание - Объект кодирования с факультативными возможностями может, например, использоваться в спецификации кодовых последовательностей с короткой длиной, где они могут кодировать конкретную длину цепочки, используя кодовые последовательности с большой длиной, где короткая длина не может использоваться. Сейчас нет механизма для спецификатора ECN, запрашивающего использование первого доступного объекта кодирования (если более чем один объект могут кодировать абстрактное значение), кроме применения комментария.
     
     

9.7.8 Наконец, объект кодирования может быть определен с помощью не-ECN нотации. Это является средством, позволяющим использовать любую желательную нотацию (включая единственный язык) для определения объекта кодирования (см. D.2.7.3).
     
     Примечание - He-ECN нотация должна использоваться с осторожностью, так как в этом случае обычно невозможна инструментальная поддержка реализации.
     
     

9.8 Дифференциальное кодирование-декодирование

9.8.1 Дифференциальное ("различительное") кодирование-декодирование - это термин, применяемый к спецификации, которая требует реализации, принимающей (при декодировании) дополнительные битовые последовательности к тем, которые разрешены для генерирования при выполнении кодирования.
     

9.8.2 Дифференциальное кодирование-декодирование лежит в основе всей поддержки "растяжимости" (способности реализации ранней версии стандарта иметь хорошую возможность взаимодействия с реализацией поздней версии настоящего стандарта).
     

9.8.3 Дифференциальное кодирование-декодирование может быть очень сложным. Обычно оно содержит требование, чтобы декодер принимал (и молчаливо игнорировал) поля заполнения (обычно с переменной длиной), которые в последующих версиях стандарта будут использоваться для переноса информации, дополняющей ту, которая переносится в ранней версии связи.
     

9.8.4 Поддержка дифференциального кодирования-декодирования в ECN обеспечивается синтаксисом, который позволяет определять (для любого класса) такой объект кодирования, в который вложены два объекта кодирования. Каждый объект кодирования определяет правила кодирования. Первый объект кодирования определяет правила, используемые кодером. Декодер использует второй объект кодирования в качестве спецификации способа, которым было выполнено кодирование.
     
     Примечание - В ECN правила, используемые декодером (в ранней версии стандарта), всегда выражаются при помощи правил кодирования, которые, как предполагает декодер, использует его партнер по связи. Правила декодирования не даются в виде явных правил кодирования. Спецификатор ECN будет гарантировать, что такие правила декодирования обеспечат некоторую необходимую "растяжимость".
     
     

9.9 Факультативные возможности в кодовых последовательностях

9.9.1 Факультативные возможности ("опции") в протоколах обычно считаются сегодня чем-то, чего следует избегать, но ECN должна обеспечивать поддержку таких факультативных возможностей, если разработчик протокола решает (или решил ранее) применить их.
     

9.9.2 Когда значения кодируются в пространство кодирования, возможно указать, что размер пространства кодирования (см. 9.21.5) является факультативной возможностью кодера, обеспечив наличие некоторой формы определителя длины, связанного с кодированием (расширение факультативных возможностей может быть ограничено максимальным значением, которое может кодироваться в определителе длины). Это обеспечивает некоторый детальный уровень поддержки факультативных возможностей кодирования.
     

9.9.3 Более общим является механизм, похожий на поддержку дифференциального кодирования-декодирования (см. 9.8), но в этом случае объект кодирования для некоторого класса может определяться в виде выбора в кодере объекта кодирования из упорядоченного списка определенных объектов кодирования для этого класса. Дополнительно к определению списка возможных кодовых последовательностей необходимо также обеспечить спецификацию объекта кодирования для класса в категории "альтернативы" (см. 9.6). Этот объект кодирования определяет кодовые последовательности и процедуры, необходимые декодеру, чтобы определять, какой именно объект кодирования был применен кодером.
     
     

9.10 Свойства объектов кодирования

9.10.1 Объекты кодирования имеют некоторые общие свойства. В большинстве случаев они полностью определяют кодирование, но в некоторых случаях они являются конструкторами кодирования, то есть они определяют только структурные аспекты кодирования, которые затребуют объекты кодирования для компонентов структуры кодирования, чтобы завершить определение кодовой последовательности.
     

9.10.2 Другой ключевой характеристикой объекта кодирования является то, что он может затребовать информацию от вычислительной среды, в которой его правила в конечном счете применяются. Одним из аспектов такой вычислительной среды, который всегда поддерживается, является наличие границ в определении типа АСН.1, которые будут "видимыми для PER" (см. ИСО/МЭК 8825-2, подраздел 9.3).
     
     Примечание - Несколько другой (и нестандартизованной) внешней зависимостью могло бы стать определение не-ECN объекта кодирования для класса кодирования #ALTERNATIVES, который указывает выбранную альтернативу, основанную на внешних данных, например, о канале, по которому передано сообщение.
     
     

9.10.3 Третьей ключевой характеристикой является то, что объект кодирования может применять идентификационный описатель в своих кодовых последовательностях. Это является такой частью (состоящей из фиксированного набора битовых позиций) всех кодовых последовательностей, которая образует и различает свои кодовые последовательности от кодовых последовательностей других объектов кодирования (любого класса), которые применяют такой же идентификационный описатель. Идентификационные описатели должны быть видимы для декодеров, не имеющих информации о том, что было кодировано - класс кодирования или абстрактное значение (но имеющих информацию об имени используемого идентификационного описателя). Это понятие моделирует (и обобщает) использование тегов в кодированиях BER: значение тега в BER может определяться без знания класса кодирования для всех кодовых последовательностей BER и служит для указания кодовой последовательности с целью различать функциональные возможности, упорядочивать наборы и выбирать альтернативы.
     
     

9.11 Параметризация

9.11.1 Объекты кодирования, наборы объектов кодирования и классы кодирования могут быть параметризованы так же, как типы и значения АСН.1. Это является просто расширением нормального механизма АСН.1.
     

9.11.2 В первую очередь параметризация используется при определении объекта кодирования, который нуждается в идентификации некоторого определителя для завершения определения кодовой последовательности (см. 9.13.2) (см. в D.1.11.3 пример параметризованного определения ECN).
     

9.11.3 Другим важным использованием параметризации является определение структуры кодирования, которая будет использована для замены многих разных классов в кодировании (см. также 9.16.5). Например, механизмом, применяемым для обработки факультативных возможностей, часто является непосредственный (обязательный) предшествующий "бит-наличия" для каждого факультативного компонента. Параметризованная структура может быть определена включением конкатенации #BOOLEAN (используемой в качестве определителя наличия), за которой следует факультативный компонент, определенный в качестве фиктивного параметра (который должен выдаваться с компонентом, заменяющим структуру), на наличие которого указывает этот #BOOLEAN. Исходная процедура кодирования #OPTIONAL определяется теперь как замена исходного компонента с его обязательной структурой путем использования исходного факультативного компонента в качестве реального параметра (в D.3.2 приводится более полный пример этого процесса).

9.11.4 Фиктивными параметрами могут быть объекты кодирования, наборы объектов кодирования, классы кодирования, ссылки на поля структур кодирования и значения любых типов АСН.1, используемых в предопределенных классах кодирования, определяемых в разделе 23 и описанных в ИСО/МЭК 8824-4, с учетом изменений из В.10 (приложение В).
     

9.11.5 Изменение синтаксиса параметризации, указанное в приложении С, требует использования символа "{<" (без пробелов) вместо "{" для начала списка фиктивных или реальных параметров и ">}" для его окончания.


     Примечание - Это сделано для облегчения анализа ECN в компьютере и для избежания двусмысленности, когда определенные пользователем классы используются в определениях структур вместо #SEQUENCE, #CHOICE, #REPETITION, #SEQUENCE-OF или #SET-OF.

9.12 Руководители

9.12.1 Понятия "руководитель или руководящее указание" и "руководимая нотация" будут близки к нотации значения АСН.1, в которой всегда имеется определение типа, которое "руководит" нотацией значения и определяет ее синтаксис и смысл.
     

9.12.2 Это же понятие распространяется на определение объектов кодирования заданного класса кодирования. Синтаксис для определения объекта кодирования класса #BOOLEAN (к примеру) сильно отличается от синтаксиса для определения объекта кодирования класса #INTEGER (к примеру). Во всех случаях, где требуется определение объекта кодирования, имеется некоторая связанная нотация, которая определяет класс этого объекта кодирования и "руководит" синтаксисом, который следует использовать в его спецификации.

9.12.3 Синтаксис ECN нуждается в руководителях, которые являются классами кодирования и будут справочными именами классов или именами параметризованных классов.
     

9.12.4 Если руководимая нотация является справочным именем объекта кодирования, то этот объект кодирования должен быть того же класса, что и руководитель (см. 17.1.7).
     
     

9.13 Общие аспекты кодирования

9.13.1 ECN обеспечивает поддержку ряда методов, обычно используемых в определениях правил кодирования (не просто тех методов, которые использованы в BER и PER). Например, ECN признает, что факультативные возможности могут разрешаться любым из трех путей: использованием определителя наличия, использованием идентификационного описателя (см. 9.13.3) или достижением конца некоторого контейнера с ограниченной длиной (или конца PDU) перед появлением факультативного компонента.
     

9.13.2 Аналогично она признает, что разделение повторений может выполняться, например, с помощью:
     
     - какой-либо формы подсчета длины;
     
     - обнаружения конца некоторого контейнера (или PDU), в котором оно является последним элементом;
     
     - использования описателя идентификации в каждом повторении и в каждой последующей кодовой последовательности (см. 9.13.3);
     
     - некоторой оканчивающей комбинации, которая никогда не может появиться в кодировании повторяющихся серий (простым примером является цепочка знаков, оканчивающаяся нулем).
     
     - использования с каждым элементом "бита ЕЩЕ", который устанавливается в ЕДИНИЦУ для указания, что последует другое повторение, и устанавливается в НУЛЬ для указания конца повторений.
     
     ECN поддерживает все эти механизмы для разделения повторений и аналогичные механизмы для идентификации альтернатив и для разрешения функциональных возможностей.
     

9.13.3 Кроме использования в окончаниях повторений, метод идентификационного описателя может использоваться также для определения наличия факультативных компонентов или альтернатив и упорядочения наборов. Механизм одинаков во всех этих случаях. Учитывая класс кодирования, который является "возможным следующим классом", и объект кодирования, примененный к нему, любое произведенное кодирование будет содержать на некоторых битовых позициях (в описателе идентификации) битовую комбинацию, соответствующую битовой комбинации в пределах заданного набора битовых комбинаций (набора значений описателя), характеризующую этот класс, но не соответствующую ни одной битовой комбинации, характеризующей любой другой "возможный следующий класс". Все такие способы кодирования могут распознаваться декодером как кодирование "возможного следующего класса", а битовая комбинация, найденная при кодировании, будет определять, какое именно кодирование "возможного следующего класса" присутствует. Это понятие аналогично использованию тегов для таких целей в BER. Описатели идентификации имеют имена, которые должны быть уникальными в пределах спецификации ECN.
     

9.13.4 Здесь важно отметить, что ECN позволяет определять способы кодирования очень гибким способом, но не может гарантировать, что спецификация кодирования правильна, то есть что декодер сможет успешно восстановить исходные абстрактные значения из кодирования. Например, определитель ECN может назначить одну и ту же битовую комбинацию для булевых значений ИСТИНА и ЛОЖЬ. Это будет ошибкой, и в этом случае некоторый инструмент достаточно легко обнаружит ошибку. Другой ошибкой может быть утверждение, что кодирование имеет саморазграничение (и не требует определителя длины), когда фактически это не так. Эта ошибка также может быть обнаружена некоторым инструментом. В более тонких и сложных случаях, однако, инструмент может не справиться с диагностикой ошибочной спецификации (с ошибкой, которая не всегда успешно обнаруживается).
     
     

9.14 Идентификация информационных элементов

9.14.1 Многие протоколы имеют кодирование (обычно с фиксированным числом битов) для определения в протоколе того, что часто называют "информационными элементами" или "элементами данных". Такие идентификации приблизительно соответствуют тегам АСН.1, но обычно менее сложны. Они часто используются в качестве идентификационных описателей, однако используются так не всегда.
     

9.14.2 ECN содержит класс #TAG для поддержки определения кодирования идентификаторов информационных элементов путем использования нотации тегов АСН.1 (он поддерживает также включение таких элементов в структуру кодирования без ссылки на теги АСН.1).

9.14.3 Когда структура кодирования неявно генерируется из определения типа АСН.1 (см. раздел 11), первая текстуально выраженная нотация тега АСН.1 в этом определении генерирует экземпляр класса #TAG с номером тега АСН.1, связанным с этим экземпляром класса #TAG. Последующие текстуально выраженные экземпляры нотации тега АСН.1 не отображаются в классы #TAG в этой неявно генерируемой структуре, но эти теги и их значения становятся признаками этих элементов. Кодирование для этого класса кодирования может определяться таким же способом, как кодирование для класса #INTEGER, и будет кодировать номер в нотации тега.

9.14.4 Полный список тегов АСН.1 (множество тегов, каждый с классом и номером) теоретически связан со всеми абстрактными значениями тегированного типа согласно модели АСН.1. Такая информация является, однако, доступной только в существующей версии ECN с помощью не-ECN определителя объекта кодирования (см. 9.7.8). Генерация класса #TAG является отдельным механизмом, более простой и более определенной и имеет полную поддержку в ECN.

9.14.5 Важно, однако, заметить, что в целях генерации класса #TAG видимой является только текстуально выраженная нотация тегов. Теги универсального класса и теги, генерируемые автоматическим тегированием, не видны. Аналогично игнорируется класс любой текстуально выраженной нотации тегов. Для кодирования объектов класса #TAG доступен только номер тега.


     

9.15 Ссылочные поля и определители

9.15.1 Очень общим (но не единственным) способом определения наличия факультативного поля, длины повторения или выбора альтернативы является включение поля определителя (где-нибудь в сообщении). Если этот механизм применяется для определения, то должны указываться поля определителя, а это часто требует некоторого фиктивного параметра в определении объекта кодирования, обеспечивающего вместе с реальным параметром имя поля структуры кодирования в определителе, который будет выдаваться, когда объект кодирования прилагается к структуре кодирования.
     

9.15.2 Новое понятие - ссылочное поле - вводится для удовлетворения потребности в фиктивном параметре, который ссылается на поле структуры кодирования. Руководителем является зарезервированное слово REFERENCE, а разрешенной нотацией для реального параметра с этим руководителем является некоторое имя поля структуры кодирования внутри этой структуры кодирования, к которой приложен объект кодирования или набор объектов кодирования с таким параметром (см. 17.5.15) (см. в D.1.11.3 пример ссылок на имена полей структуры кодирования).
     
     

9.16 Классы и структуры замены

9.16.1 При наличии спецификаций АСН.1 для традиционных протоколов (или при генерировании специальных кодовых последовательностей для новых протоколов) считается нормальным игнорировать элементы кодирования, в частности поля определителя, которые присутствуют только для поддержки декодирования. В спецификацию АСН.1 включаются только поля, уместные для прикладного кода (переносящие прикладную семантику).
     

9.16.2 Когда в таких протоколах используется более одного механизма для поддержки (к примеру) конструкций SEQENCE OF в разных местах протокола, невозможно (либо не подходит) формально указывать это в самой АСН.1.

9.16.3 Это означает, что неявно генерируемая структура кодирования не будет различать такие конструкции и не будет содержать относящиеся к кодированию поля для определителей, и необходимо изменить ее для "решения" обеих проблем, пока недоступна некоторая структура, соответствующая требованиям кодирования.
     

9.16.4 Первым и простейшим изменением является замена некоторых экземпляров класса (внутри неявно генерируемой структуры) на имена нового класса, которые присваиваются старому классу в операторе присвоения класса. Это делается путем создания явно генерируемой структуры с использованием раздела переименований в EDM. Этот раздел импортирует неявно генерируемую структуру из модуля АСН.1 и выполняет указанные замены мест появления (текстуальных) именованных классов. Замена может быть для всех текстуальных мест в пределах списка неявно генерируемых классов (соответствующих определениям типов АСН.1 в модуле) либо в пределах компонентов одного из таких классов, либо "всех мест появления, за исключением" мест в заданном определении или заданном компоненте (см. 15.3). Здесь важно отметить, что эти замены ограничены использованием классов, которые были определены в том операторе присвоения класса кодирования, который присваивает имя класса замены старому классу (например, "#Replacement-class ::= #Old-class"), поэтому данный механизм иногда называют в разговорах "окрашиванием". Это "окрашивание" указывает те части спецификации, которым необходимы способы кодирования, отличающиеся от способов других частей (пример "окрашивания" дается в D.3.7).

9.16.5 Даже с использованием "окрашивания" явно генерируемая структура кодирования, как и неявно генерируемая структура кодирования, содержит только поля, соответствующие полям в спецификации АСН.1, а обычно необходимо изменять генерируемые структуры, чтобы добавить поля для определителей и т.п. Необходима новая структура замены (для всей или части исходной структуры) с добавленными полями. Важно также указывать (для каждого поля исходной структуры), какие именно поля структуры замены (и какие абстрактные значения такого поля) используются для переноса семантики исходных абстрактных значений. Мы говорим об отображении абстрактных значений из исходной структуры в структуру замены.
     

9.16.6 Имеется много механизмов для определения объекта кодирования существующей структуры в качестве объекта кодирования для полностью отличающейся структуры замены с определенными отображениями значений между старой структурой и структурой замены. Эти механизмы описываются в 9.17.
     

9.16.7 Однако часто встречается более простая ситуация, в которой разработчик требует от старой структуры сформировать (сохраняя свою целостность) один компонент структуры замены со всеми абстрактными значениями, отображенными из старой структуры в соответствующее значение такого компонента структуры замены. Для этого механизма, получающего всеобщее применение, структура замены нуждается в фиктивном параметре для этого одного компонента и для создания его с реальным параметром, установленным в старую структуру. Это описано в 9.11.3.
     

9.16.8 При определении объектов кодирования для какого-либо класса (любого класса) всегда возможно указать, что первым действием этого объекта кодирования будет замена класса, кодируемого им, на параметризованную структуру замены, создаваемую согласно 9.16.7, с абстрактными значениями, отображенными из старого класса в этот компонент.
     

9.16.9 Возможно также определить объекты кодирования для класса #OPTIONAL (или для любого класса категории "факультативные возможности"), который заменяет факультативный компонент на параметризованную структуру замены (часто структуру, содержащую поле #BOOLEAN в качестве определителя наличия) (пример этого приводится в D.3.2.3).

9.16.10 Для таких классов конструктора, как #CONCATENATION, #REPETITION и т.п., возможно также определить объекты кодирования, которые заменяют не полную структуру, а отдельно каждый компонент (или только обязательные, или только факультативные компоненты).

9.16.11 Более развитым, но и более мощным механизмом является требование к действию замены включать также введение определенного поля в заголовок структуры #CONCATENATION (или аналогичной структуры) (пример этого приводится в D.3.1.5).
     
     

9.17 Отображение абстрактных значений в поля структур кодирования


     Имеются шесть механизмов, предусмотренных для этой цели.
     

9.17.1 Первый механизм - это отображение указанных абстрактных значений, связанных с одним простым классом кодирования, в указанные абстрактные значения, связанные с другим простым классом кодирования. Это может использоваться многими способами. Например, значения "цепочки знаков" (цифр) могут быть отображены в целочисленные значения и т.д. (см. 19.2) (см. пример в D.1.10.2).
     

9.17.2 Второй механизм - это отображение полного поля одной структуры кодирования в поле совместимой структуры кодирования, которая может содержать дополнительные поля обычно для использования в качестве определителей длины или выбора (см. 19.3) (см. пример в D.2.8.3).
     

9.17.3 Третий механизм - это отображение путем трансформирования всех абстрактных значений, связанных одним классом кодирования, в абстрактные значения, связанные с другим (обычно, но не обязательно) классом кодирования, используя некоторый трансформирующий объект кодирования (см. 9.18). Этим механизмом возможно, например, отобразить #INTEGER в #CHARS, чтобы получить знаки, которые могут быть затем кодированы любым желательным способом (например, способом "двоично-кодированное десятичное число" или способом ASCII) (см. пример в D.1.6.3).

9.17.4 Четвертый механизм отображения - это использование указанного упорядочения абстрактных значений определенных типов и конструкций и отображение согласно этому упорядочению. Это образует очень мощные средства кодирования абстрактных значений, связанных с одним классом кодирования, как будто они были абстрактными значениями, связанными с полностью независимым классом кодирования (см. 19.5) (см. пример в D.1.4.2).
     

9.17.5 Пятый механизм - это распределение абстрактных значений (используя нотацию диапазона значений), связанных с одним классом кодирования (обычно #INTEGER), в поля другого класса кодирования (см. примеры в 19.6 и D.2.1.3).

9.17.6 Последний механизм позволяет спецификатору ECN обеспечить явное отображение целочисленных значений (которые могут быть образованы более ранним отображением, например, из класса #ENUMERATED) в биты, которые должны использоваться для кодирования таких значений. Это предназначается для поддержки кодовых последовательностей Хаффмана, где частость появления каждого значения известна (по крайней мере приблизительно) и где требуется оптимальное кодирование. В приложении Е подробно описываются коды последовательностей Хаффмана и даются примеры этого механизма, а также ссылки на программное обеспечение, которое будет генерировать синтаксис ECN для этих отображений, задавшись только относительной частостью, с которой, как ожидается, будет использоваться каждое значение целого числа (см. 19.7).
     
     

9.18 Преобразователи и композиции преобразования

9.18.1 Преобразователи - это объекты кодирования из класса #TRANSFORM. Они могут использоваться для преобразования абстрактных значений между разными классами кодирования и для определения простых арифметических функций, таких как умножение на фиксированное значение, вычитание фиксированного значения и т.п. При последовательном применении они дают возможность указывать общую арифметику (см. 19.4) (см. пример в D.2.4.2).
     

9.18.2 Преобразователь может взять одиночное значение в качестве своего источника и затем образовать одиночное значение в качестве своего результата. Ниже даются классификационные группы значений, которые могут быть источниками и результатами преобразователей:
     
     - целое число;
     
     - булево значение;
     
     - цепочка знаков;
     
     - цепочка битов;
     
     - одиночный знак;
     
     - одиночный бит (только источник, поддерживающий кодирование цепочки битов, см. 23.2).
     

9.18.3 Композиции преобразования - это упорядоченный список элементов, которые все являются одиночными значениями и имеют одну и ту же классификационную группу (из перечисленных в 9.18.2) (например, упорядоченный список одиночных знаков, или одиночных октетов, или целых чисел). Они создаются только в виде результатов преобразователей и могут использоваться только как источник последующего преобразования.
     

9.18.4 Если классификационной группой является цепочка битов, то размеры каждого значения цепочки битов в композиции будут одинаковыми и статически определяться преобразователем, который вырабатывает эту композицию (например, упорядоченный список одиночных битов или шестибитовых блоков).
     

9.18.5 Имеются преобразователи из следующих абстрактных значений в композиции:
     
     - из цепочки знаков в композицию одиночных знаков;
     
     - из цепочки битов в композицию цепочек битов (все значения цепочек битов в композиции имеют один и тот же размер);
     
     - из цепочки октетов в композицию цепочек битов (все значения цепочек битов в композиции имеют размер 8 битов).
     

9.18.6 Имеются преобразователи из следующих композиций в абстрактные значения:
     
     - из композиций одиночных знаков в значения цепочки знаков;
     
     - из композиций цепочек битов в значения цепочки битов;
     
     - из композиций цепочек битов (со значениями цепочки битов размером 8 битов) в значения цепочки октетов.
     

9.18.7 Все другие преобразователи могут принимать некоторое значение в качестве своего источника и вырабатывать новое значение (той же или другой классификационной группы). Они могут также использовать некоторую композицию преобразования в качестве своего источника и вырабатывать композицию в качестве своего результата, преобразуя каждый элемент композиции-источника в элемент композиции-результата.
     
     

9.19 Содержимое модулей определения кодирования

9.19.1 Модули определения кодирования (EDM) содержат операторы экспорта и импорта такие же, как в АСН.1 (но они могут импортировать только объекты кодирования, наборы объектов кодирования и классы кодирования из других модулей EDM или из модулей АСН.1 в случае неявно генерируемых структур кодирования).
     

9.19.2 EDM может содержать также раздел переименований (см. раздел 15), который ссылается на неявно генерируемые структуры кодирования из одного или нескольких модулей АСН.1 и генерирует путем их "окрашивания" (см. 9.16.4) явно генерируемую структуру кодирования для каждой из них. Эти явно генерируемые структуры кодирования доступны для использования внутри этого EDM, но также автоматически экспортируются для возможного импорта в модуль компоновки кодирования.
     

9.19.3 Тело модуля EDM содержит:
     
     операторы "EncodingObjectAssignment", которые определяют и именуют объект кодирования для некоторого класса кодирования (имеются восемь форм этого оператора, обсужденные в 9.7 и определяемые в разделе 17);
     
     операторы "EncodingObjectSetAssignment", которые определяют наборы объектов кодирования (см. раздел 17);
     
     операторы "EncodingClassAssignment", которые определяют и именуют новые классы кодирования (см. раздел 15).
     

9.19.4 EDM может также содержать параметризованные версии этих операторов, как определяется в разделе 14 и в С.1 (приложение С).
     

9.19.5 Объекты кодирования могут определяться для предопределенных классов кодирования внутри любого модуля EDM. Объекты кодирования могут определяться для генерируемой структуры кодирования только в модулях EDM, которые импортируют неявно генерируемую структуру кодирования из модуля АСН.1, определяющего соответствующий тип (используя раздел импортов или переименований), или которые импортируют генерируемую структуру кодирования из модуля EDM, экспортирующего ее.
     
     Примечание - Если неявно генерируемая структура кодирования случайно имеет имя, совпадающее с именем зарезервированного класса кодирования (см. 8.5), то она, тем не менее, может быть импортирована в EDM, но должна быть указана в теле EDM с использованием полностью уточненного имени (см. "ExternalEncodingClassReference" в 10.6).
     
     

9.20 Содержимое модуля компоновки кодирования

9.20.1 Все приложения нотации управления кодированием нуждаются в идентификации единственного модуля компоновки кодирования (или ELM).
     

9.20.2 Модуль ELM применяет наборы объектов кодирования к типам АСН.1 (формально, к некоторой генерируемой структуре кодирования, соответствующей типу АСН.1). Эти наборы объектов кодирования (или составляющие их объекты кодирования) импортируются в модуль ELM из одного или нескольких модулей EDM.
     

9.20.3 Имеются ограничения на применение наборов объектов кодирования, гарантирующие, что не будет двусмысленности о реальных правилах кодирования, которые применяются (см. 12.2.5). Например, в ELM не разрешается применять более одного набора объектов кодирования для определения неявно генерируемой структуры.
     

9.20.4 В простом случае возможно, что модуль ELM содержит только один элемент (за которым следует раздел импортов), который применяет набор объектов кодирования к неявно генерируемой структуре кодирования, соответствующей одиночному типу верхнего уровня в некотором приложении (см. пример в D.1.17).
     
     

9.21 Определение способов кодирования для простейших классов кодирования

9.21.1 Правила кодирования для некоторых простейших классов кодирования могут определяться с помощью дружественного к пользователю синтаксиса, который указан в командах WITH SYNTAX определений класса кодирования (см. разделы 23 и 25). Этот синтаксис может также использоваться при определении правил кодирования для классов кодирования, полученных из этих простейших классов кодирования (при помощи операторов присвоения класса кодирования).
     

9.21.2 Нотация, которая используется для определений класса кодирования в разделах 23 и 25, основана на нотации, примененной для определения класса информационных объектов. Этот синтаксис (и связанная с ним семантика) определен путем ссылки на ИСО/МЭК 8824-2 с учетом изменений из приложения В.
     

9.21.3 Определение класса кодирования указывает информацию, которая должна поставляться с целью определить правила кодирования для конкретных классов кодирования. Набор правил кодирования, который может быть определен этим способом, не охватывает, конечно, все возможные правила, но считается достаточным для спецификаций кодирования, которые потребуются, вероятно, пользователям ECN.
     

9.21.4 Эти определения класса кодирования описывают серии полей (с соответствующими типами АСН.1 и семантиками). Правила кодирования описываются путем выдачи значений этих полей. Значения этих полей фактически дают значения ряда признаков кодирования, которые совместно определяют кодирование.
     

9.21.5 Смысл признаков кодирования описывается с использованием модели кодирования (см. рисунок 1), в которой значения каждого класса битовых полей образуют кодирования значений, которые помещаются (с левым или правым выравниванием) в пространство кодирования.
     

9.21.6 Пространство кодирования может иметь свой передний край, выровненный (сфазированный) по некоторой границе (например, границе октета) путем предварительного заполнения пространства кодирования, а его размер может быть фиксированным или переменным. Код значения помещается внутри него, возможно с левым или правым выравниванием и с окружающим заполнением. Если пространство кодирования имеет переменный размер, то либо кодирование значения должно быть саморазграничивающим, либо должен быть некоторый внешний механизм, позволяющий декодеру определять размер пространства кодирования. Имеются разные механизмы для этого определения.
     

9.21.7 Наконец, полное пространство кодирования с кодом значения, с предварительным заполнением значения и последующим заполнением значения отображается в "биты в строке" с факультативным определением реверсии битов. Оно обрабатывает кодовые последовательности, которые требуют условия "старший значащий байт первым" или "старший значащий байт последним" для целых чисел либо требуют, чтобы биты в октете были реверсированы по сравнению с нормальным порядком.
     

9.21.8 Таким образом, имеются три широкие категории необходимой информации:
     
     - первая относится к пространству кодирования, в котором размещаются кодовые последовательности;
     
     - вторая относится к способу отображения абстрактного значения в биты (кодирование значения) и к размещению таких битов внутри пространства кодирования;
     
     - третья относится к какой-либо реверсии битов.
     

9.21.9 На рисунке 1 показаны пространство кодирования (с предварительным заполнением) и код значения (с предварительным заполнением значения и последующим заполнением значения). Рисунок 1 иллюстрирует также определение единицы пространства кодирования. Пространство кодирования всегда является целым, кратным этому указанному числу битов.
     
     

Рисунок 1 - Пространство кодирования, кодирование значения и понятия "заполнение"

ГОСТ Р ИСО/МЭК 8825-3-2016 Информационная технология (ИТ). Правила кодирования АСН.1. Часть 3. Спецификация нотации контроля кодирования (ECN)


Кодирование затем добавляется к "битам в строке", возможно с реверсией битов, октетов и т.п.
    
Рисунок 1 - Пространство кодирования, кодирование значения и понятия "заполнение"

9.21.10 Если пространство кодирования не имеет одного размера для всех значений, кодируемых объектом кодирования, то необходим некоторый дополнительный механизм для определения фактического пространства кодирования, используемого в экземпляре кодирования.
     

9.21.11 Возможно также указать произвольное значение предварительного заполнения кодера (за пределами, необходимыми для выравнивания), которое заканчивается, когда значение более раннего указателя старта укажет начало некоторого поля.
     

9.21.12 Определение кодирования для простейшего класса кодирования битового поля состоит из следующих шагов:
     
     - указать выравнивание (если оно есть), необходимое для переднего края пространства кодирования (относительно точки выравнивания - обычно начала кодирования типа верхнего уровня, то есть типа, к которому прикладывается набор объектов кодирования в ELM) (см. 22.2);
     
     - указать форму какого-либо необходимого заполнения для этой точки (предварительное заполнение пространства кодирования) (см. 22.2);
     
     - указать (если необходимо) поле, которое обеспечит указатель для начальной точки пространства кодирования (см. 22.3);
     
     - указать кодирование абстрактных значений в биты (кодирование значения);
     
     - указать единицы пространства кодирования (пространство кодирования всегда будет целым, кратным этим единицам) (см. 22.4);
     
     - указать размер пространства кодирования в этих единицах. Он может быть фиксированным (с использованием знания целого числа или границ размера, связанных с кодируемыми абстрактными значениями) или переменным (разным для каждого абстрактного значения). Спецификация может также (во всех случаях) указать на использование определителя длины, который должен кодироваться с длиной поля и либо создавать возможность декодирования, либо предоставлять избыточную информацию (в случае пространства кодирования с фиксированным размером), которую декодер может проверять (см. 22.4);
     
     - указать выравнивание кодирования значения внутри пространства кодирования (см. 22.8);
     
     - указать форму какого-либо необходимого заполнения от начала пространства кодирования до начала кодирования значения (предварительное заполнение значения) (см. 22.8);
     
     - указать форму какого-либо необходимого заполнения между концом кодирования значения и концом пространства кодирования (последующее заполнение значения) (см. 22.8);
     
     - указать какие-либо необходимые реверсии битов для содержания пространства кодирования до добавления битов к кодированию, сделанному ранее (см. 22.12).
     

9.21.13 Имеются признаки кодирования, поддерживающие спецификацию правил кодирования для всех этих шагов.
     

9.21.14 В реальных случаях только некоторые (или никакие!) из этих признаков кодирования могут иметь неиспользуемые значения и должны работать по умолчанию, если они не указаны (см. в D.1.3 пример определения кодирования для целого числа, имеющего выравнивание к правой стороне в фиксированном двухоктетном поле, которое начинается на границе октета).
     
     

9.22 Приложение кодирований

9.22.1 Приложение кодирований (правил кодирования) к структурам кодирования является ключевой частью работы ECN, но сильно отличается от определения правил кодирования. Окончательное приложение кодирований (к структуре кодирования, генерируемой из определения типа АСН.1) происходит только внутри модуля компоновки кодирования, но приложение кодирований к полям структуры кодирования может использоваться в определении кодирований для более широкой структуры кодирования.
     

9.22.2 Кодирования прикладываются путем ссылки на набор объектов кодирования (или на одиночный объект кодирования). Такое приложение может происходить в EDM в определении объектов кодирования для какого-нибудь класса (включая объекты кодирования для генерируемой структуры кодирования и для определяемой пользователем структуры кодирования). Такое приложение в EDM является просто определением большего числа объектов кодирования для этого класса кодирования. Определяющее приложение к реальному типу происходит только в ELM.
     

9.22.3 Когда прикладывается набор объектов кодирования, он всегда дает в результате полную спецификацию кодирования для классов кодирования, к которым эти объекты прикладываются. Если в каком-либо заданном приложении требуются кодирования для классов кодирования (имеющихся внутри кодируемой структуры кодирования), для которых нет объектов кодирования в приложенном наборе, то это будет ошибкой (см. 13.2.11).
     
     Примечание - Если бы даже спецификация правил кодирования была завершена, точная форма реального кодирования (например, наличие или отсутствие предварительного заполнения пространства кодирования или влияние значений границ, указанных в правилах кодирования) может быть определена только в случаях, когда определение кодирования применяется к типу АСН.1 верхнего уровня.
     
     

9.22.4 Имеются два исключения к 9.22.3. Первое исключение будет в случае, когда механизм параметризации (похожий на АСН.1) используется для определения параметризованного объекта кодирования. В этом случае полное кодирование будет определено только после установки реальных параметров. Второе исключение будет в случае, когда объект кодирования определен для конструктора кодирования (#CONCATENATION, #ALTERNATIVES, #REPETITION, #SEQUENCE и т.п.). В этом последнем случае правила кодирования, связанные с классом кодирования, просто определяют правила, связанные с аспектами структурирования. Полная спецификация кодирования для структуры кодирования, использующей эти классы кодирования, будет требовать также правил для кодирования компонентов этой структуры кодирования.


     Примечание - Здесь имеется различие между объектами кодирования класса #SEQUENCE (конструктора кодирования) и объектов кодирования для неявно генерируемой структуры кодирования "#Му-Туре", которая определяется с использованием типа АСН.1 SEQUENCE. Последняя не является конструктором кодирования, а объекты кодирования этого класса будут обеспечивать полные правила кодирования для кодирования значений типа "Му-Туре".


     

9.23 Комбинированный набор объектов кодирования

9.23.1 Чтобы обеспечить полное кодирование, пользователь ECN может выдать первичный набор объектов кодирования и второй набор объектов кодирования, введенный зарезервированными словами COMPLETED BY.

9.23.2 Прилагаемый набор объектов кодирования определяется как комбинированный набор объектов кодирования, формируемый путем добавления к первому набору объектов кодирования некоторого класса кодирования, для которого у первого класса не хватает некоторого объекта кодирования, а второй набор содержит его (см. 13.2). Набором для использования с COMPLETED BY часто является предопределенный набор PER-BASICUNALIGNED (см. в D.1.17 пример приложения комбинированного набора объектов кодирования).

9.23.3 Когда набор объектов кодирования может содержать только один объект кодирования, например для класса #SEQUENCE-OF, он может также содержать объект кодирования, например для класса #Special-sequence-of, который определяется как "#Special-sequence-of ::= #SEQUENCE-OF". Явно генерируемая структура кодирования может содержать в своем определении как класс #SEQUENCE-OF, так и класс #Specialsequence-of. Таким способом один комбинированный набор объектов кодирования может быть приложен для получения стандартных кодирований для некоторых исходных конструкций SEQUENCE OF и специализированных кодирований для других.


     

9.24 Точка приложения

9.24.1 В любом заданном приложении кодирований имеется определенная стартовая точка (для ELM - это генерируемая структура или структуры кодирования верхнего уровня, к которым прикладываются кодирования). Это называется "начальной точкой приложения" для структуры, которая кодируется модулем ELM.
     

9.24.2 Комбинированный набор объектов кодирования прикладывается к генерируемой структуре кодирования, и это будет кодированиями, определенными для абстрактных значений этой структуры кодирования, которая кодирует абстрактные значения типа АСН.1.
     

9.24.3 Если в комбинированном наборе объектов кодирования имеется объект кодирования, который соответствует некоторому классу кодирования с битовым полем (первоначально - некоторой генерируемой структуре кодирования) в точке приложения, то он прикладывается, и этот процесс заканчивается. В остальных случаях класс в точке приложения "расширяется" с помощью разыменования. Это расширение с помощью разыменования будет продолжаться до нахождения объекта кодирования или достижения простейшего класса. Если классом в точке приложения является конструктор кодирования и имеется объект кодирования для этого конструктора кодирования (#CHOICE, #SEQUENCE, #SEQUENCE-OF и др.), то он прикладывается, а точка приложения затем переходит к другому компоненту (в виде параллельного действия).

9.24.4 В более сложном случае может быть класс #OPTIONAL, следующий за некоторым классом компонента (и классом #TAG, предшествующим ему). Точка приложения переходит сначала к #OPTIONAL, и объект кодирования этого класса может заменить этот компонент (см. 9.16.9). Затем точка приложения переходит к тегу, а в конце - к самому компоненту.


     

9.25 Условные кодирования

9.25.1 Уже упоминался класс кодирования #TRANSFORM как средство выражения простых арифметических действий над целочисленными значениями (см. 9.17.3). Этот класс кодирования, однако, играет более фундаментальную роль в спецификации кодирований для некоторых простейших классов. Как правило, спецификация кодирований для многих предопределенных типов АСН.1 является двух- или трехстадийным процессом, использующим объекты кодирования класса #TRANSFORM и, например, класса #CONDITIONAL-INT или #CONDITIONAL-REPETITION.

9.25.2 Классы кодирования #TRANSFORM, #CONDITIONAL-INT и #CONDITIONAL-REPETITION ограничены в своем использовании. Объекты кодирования для этих классов могут быть определены только с использованием либо синтаксиса из раздела 24, подразделов 23.7 и 23.14 соответственно, либо не-ECN определения объекта кодирования, причем они могут использоваться только в определениях других объектов кодирования. Они не могут появляться в наборах объектов кодирования или применяться прямо для кодирования полей структур кодирования (см. 18.1.7).

9.25.3 Спецификация кодирования для классов кодирования в категории "целочисленная" выполняется следующим образом. Определяются кодирования (класса кодирования #CONDITIONAL-INT) для конкретного условия границ, указывающего размер контейнера (и как он разделяется), преобразование целого числа в биты (с использованием либо поразрядного дополнения до двух, либо кодирования положительных целых чисел) и способ вставления этих битов в контейнер (примером условия границ является наличие верхней границы и неотрицательной нижней границы). Это называется условным кодированием. Кодирование класса из категории "целочисленная" определяется в виде списка этих условных кодирований, а реальное кодирование, применяемое в любом заданном случае, будет тем, которое находится в начале списка и чье условие границ соблюдается (см. пример в D.1.5.4).

9.25.4 Спецификация кодирования для классов кодирования в категории "повторение" использует класс кодирования #CONDITIONAL-REPETITION, который определяет способ разделения пространства кодирования для повторяющихся элементов и способ размещения в нем повторяющихся кодирований для заданного условия диапазонов, опять образуя условное кодирование. Как и при кодировании классов в категории "целочисленная", окончательное кодирование определяется в виде упорядоченного списка условных кодирований.

9.25.5 Спецификация кодирования для классов кодирования в категории "цепочка октетов" выполняется следующим образом. Во-первых, определяются объекты кодирования #TRANSFORM для отображения одиночного октета в саморазграничивающую цепочку битов. Во-вторых, определяется один или несколько объектов кодирования #CONDITIONAL-REPETITION (при конкретных условиях диапазона размера) для взятия каждой цепочки битов (преобразованной из октета цепочки октетов) и конкатенации (сцепления) их в размеченный контейнер (определение таких объектов кодирования нехарактерно для кодирования #OCTETS). Окончательное кодирование класса в категории "цепочка октетов" определяется в виде упорядоченного списка объектов кодирования #CONDITIONAL-REPETITION (см. пример в D.1.8.2).

9.25.6 Спецификации кодирования для классов кодирования в категории "цепочка битов" выполняются следующим образом. Во-первых, определяются объекты кодирования #TRANSFORM для отображения одиночного бита в цепочку битов аналогично кодированию целого числа в биты, но в этом случае отображение бита должно быть в саморазграничивающую цепочку. Во-вторых, определяется один или несколько объектов кодирования #CONDITIONAL-REPETITION для повторения битов (это могут быть те же объекты кодирования, которые были определены для использования с классом кодирования в категориях "повторение" или "цепочка октетов"). Наконец, кодирование класса в категории "цепочка битов" определяется в виде упорядоченного списка объектов кодирования #CONDITIONAL-REPETITION (см. пример в D.1.7.3).

9.25.7 Спецификации кодирования классов кодирования в категории "цепочка знаков" выполняются следующим образом. Во-первых, определяются объекты кодирования #TRANSFORM для отображения одиночного знака в саморазграничивающую цепочку битов, используя несколько возможных механизмов для определения кодирования знака и используя, где подходит, действующее разрешенное ограничение алфавита. Во-вторых, определяется один или несколько объектов кодирования #CONDITIONAL-REPETITION и, наконец, определяется кодирование класса в категории "цепочка знаков" в виде упорядоченного списка этих объектов (см. пример в D.1.9.2).


     

9.26 Другие условия для применения кодирований

9.26.1 Существует целый ряд различных условий, которые могут быть проверены для того, чтобы выбрать соответствующий тип кодирования. К ним относятся фактическое значение и диапазон границ.
     

9.26.2 Также можно требовать, чтобы был удовлетворен целый ряд условий.
     

9.26.3 Для проверки выполнения условия используется либо одно перечислимое значение (такое как "bounded-without-negatives"), которое содержит всю проверку в спецификации одного перечислимого, или три перечислимых.
     

9.26.4 Если используются три, то первый определяет (путем перечисления) элемент, который проходит проверку (например, "test-upper-bound"), второй - природу проверки (например, "greater-than") и третий предоставляет целочисленное значение для проверки.
     
     

9.27 Управление кодированием для открытого типа

9.27.1 Открытые типы часто предоставляют средства расширяемости за счет добавления новых значений для идентификационных полей и новых типов для открытого типа в последующих версиях (и часто доступных для специализированных расширений).
     

9.27.2 Эти две возможности означают, что декодер может быть использован для декодирования открытого типа при том, что конкретная имплементация не знает ничего про тип, который был закодирован в нем.
     

9.27.3 Поддержка кодирования, предоставляемая для открытого типа, является в точности той же, что и для большинства других классов в bitfield категории, но с дополнительной возможностью указания, что другой набор объектов кодирования применяется к типу, который кодируется в открытый тип.
     
     Примечание - Это является признанием того, что многие протоколы выбирают для использования другой стиль кодирования (часто на основе type-length-value подхода) для типа, содержащегося в открытом типе, сохраняя при этом более компактный стиль кодирование для полей сообщения, содержащих открытый тип.
     
     

9.27.4 Модель, используемая для декодирования открытого типа, определяет, что декодер не будет знать, какой тип заполняет открытый тип (таблицы и реляционные ограничения не видны ни для PER, ни для ECN), но приложение может быть в состоянии определить это из какого-либо другого поля в протоколе, или в предыдущем сообщении, или (для специализированных дополнений) на основе адреса вызывающей стороны.
     

9.27.5 Модель является такой потому, что, разобравшись с любым заданным предварительным заполнением и определив пространство кодирования и любое предварительное и последующее заполнение значения, декодер запросит у приложения тип, который был закодирован (в случае инструментов приложение почти наверняка будет иметь предварительно настроенный инструмент со списком известных типов, которые могут присутствовать, и просто вернет указатель на один из них). Затем декодирование может продолжиться в обычном режиме.
     

9.27.6 Однако приложение может сказать "unknown" (см. 9.27.4), тогда декодеру нужно узнать, как определить конец такого неизвестного кодирования. Этого можно добиться за счет разрешения спецификатору ECN предоставить структуру кодирования и (опционально) объект кодирования, установленный для использования с ней, что должно использоваться декодерами для декодирования неизвестных типов. Необходимый синтаксис приведен в разделе 23.
     
     Примечание - Примером такой структуры кодирования может быть структура, определяющая широко известное "Type, Length, Value" кодирование, конец которого может быть определен без знания закодированного типа.
     
     

9.28 Изменения международных стандартов об АСН.1

9.28.1 В настоящем стандарте приведены ссылки на другие стандарты по АСН.1 с целью определения их нотации без повторения. Чтобы такие ссылки были корректными, необходимо расширить семантику этих нотаций (например, раздел об импортах, определение параметризации и информационного объекта) с целью признания справочных номеров классов кодирования, объектов кодирования и другого, что составляет часть ECN.
     

9.28.2 Имеется также необходимость в расширении нотации класса информационных объектов для разрешения полей, которые являются упорядоченными списками значений или объектов, а не просто неупорядоченными наборами объектов, с целью позволить использование этой нотации в определении синтаксиса ECN при определении объектов кодирования некоторых классов.
     

9.28.3 Правила параметризации ослабляются для разрешения использования фиктивного параметра ссылки на объект кодирования (присвоенной в операторе присвоения) в качестве реального параметра ссылки на класс кодирования, который руководит нотацией, определяющей справочное имя объекта кодирования. В частности, параметризованный класс кодирования может использоваться в качестве руководителя в операторе присвоения объекта кодирования (см. С.2, 8.4) с реальным параметром, являющимся фиктивным параметром объекта кодирования, который определяется.
     

9.28.4 Эти изменения к другим стандартам по АСН.1 определяются в приложениях А-С и предназначены только для целей настоящего стандарта.
     
     

10 Определения классов кодирования, объектов кодирования и наборов объектов кодирования

10.1 Многие продукции внутри настоящего стандарта нуждаются в определении классов кодирования, объектов кодирования или наборов объектов кодирования.
     

10.2 Для каждого из них имеются пять способов выполнения идентификации:
     

a) использование простого справочного имени;
     

b) использование предопределенного справочного имени (неприменимо к объектам кодирования, так как нет предопределенных объектов кодирования);
     

c) использование внешней ссылки (называемой также полностью определенным именем);
     

d) использование параметризованной ссылки;
     

e) инлайновое (подставляемое) определение.
     
     Примечание - Форма параметризованной ссылки может использоваться с простым справочным именем или с внешней ссылкой (см. С.3).
     
     

10.3 Имеются продукции (или лексические единицы) для всех этих средств идентификации. Имеются также продукции, которые допускают несколько альтернатив. Эти лексические единицы или имена продукций используются, где возможно, в других продукциях и определяются в остальной части этого раздела.
     

10.4 Лексическими единицами для использования простого справочного имени являются:
     
     класс кодирования "encodingclassreference" (см. 8.3);


     объект кодирования "encodingobjectreference" (см. 8.1);


     набор объектов кодирования "encodingobjectsetreference" (см. 8.2).

10.4.1 Имя "encodingclassreference":
     

a) присваивается классу кодирования в "EncodingClassAssignment" (см. раздел 16), либо
     

b) импортируется в EDM из другого EDM, из которого он экспортирован, либо
     

c) импортируется в качестве имени неявно генерируемой структуры кодирования из модуля АСН.1 (см. 14.11), либо
     

d) генерируется разделом переименований в EDM (см. раздел 15).
     
     Примечание - Только классы, которые образуют структуры кодирования, могут импортироваться в ELM (см. 12.1.8).
     
     

10.4.2 Имя "encodingclassreference" не должно импортироваться из EDM (как указано в 10.4.1), если:
     

a) оно не определено в указанном модуле или импортировано в него, а этот модуль не имеет раздела экспортов.
     
     Примечание 1 - Если указанный модуль не имеет раздела экспортов, то это эквивалентно экспортированию всего;
     
     

b) оно не определено в указанном модуле или импортировано в него, появившись в виде символа в разделе экспортов этого модуля;
     

c) оно не является одним из справочных имен, явно генерируемых разделом переименований в модуле, из которого оно было импортировано.
     
     Примечание 2 - Неявно генерируемые структуры кодирования могут импортироваться только из модулей АСН.1, которые генерируют их.
     
     

10.4.3 Ссылка на неявно генерируемую структуру кодирования никогда не появляется в разделе экспортов любого модуля АСН.1, но всегда может быть импортирована из любого модуля АСН.1, в котором соответствующий тип определен или в который он экспортирован.
     

10.4.4 Ссылка на явно генерируемую структуру кодирования (которая автоматически экспортируется разделом переименований, генерирующим ее) не должна появляться в разделе экспортов модуля EDM, в котором она генерируется, но любое ее использование в другом EDM или в ELM требует ее импортирования из этого модуля EDM.
     

10.4.5 Имя "encodingobjectreference":
     

a) присваивается объекту кодирования в "EncodingObjectAssignment" (см. раздел 17) в EDM либо
     

b) импортируется в EDM или ELM из другого EDM, в котором оно присвоено объекту кодирования или импортировано.
     

10.4.6 Имя "encodingobjectreference" не должно импортироваться из EDM, если указанный модуль имеет раздел экспорта, a "encodingobjectreference" не появляется в виде символа в этом разделе экспорта.
     
     Примечание - Если указанный модуль не имеет раздела экспортов, то это эквивалентно экспортированию всего.
     
     

10.4.7 Имя "encodingobjectsetreference":
     

a) присваивается набору объектов кодирования в "EncodingObjectSetAssignment" (см. раздел 18) в EDM либо
     

b) импортируется в EDM или ELM из другого EDM, в котором оно присвоено набору объектов кодирования или из которого оно импортировано.
     

10.4.8 Имя "encodingobjectsetreference" не должно импортироваться из EDM, если указанный модуль имеет раздел экспортов, a "encodingobjectsetreference" не появляется в виде символа в этом разделе экспортов.
     
     Примечание - Если указанный модуль не имеет раздела экспортов, то это эквивалентно экспортированию всего.
     
     

10.5 Продукциями для использования предопределенного справочного имени являются:
     
     - класс кодирования "BuiltinEncodingClassReference" (см. 16.1.6);


     - набор объектов кодирования "BuiltinEncodingObjectSetReference" (см. 18.2.1).

10.6 Продукциями для использования внешнего справочного имени являются:
     
ExternalEncodingClassReference ::=

modulereference "." encodingclassreference |

modulereference "." BuiltinEncodingClassReference

ExternalEncodingObjectReference ::=

modulereference "." encodingobjectreference

ExternalEncodingObjectSetReference ::=

modulereference "." encodingobjectsetreference

10.6.1 Имя "modulereference" определено в ИСО/МЭК 8824-1, подраздел 12.5 и указывает модуль, на который сделана ссылка в списке импортов в EDM или ELM.
     

10.6.2 Альтернатива "ExternalEncodingClassReference", содержащая "BuiltinEncodingClassReference", применяется в теле EDM, если, и только если, имеется генерируемая структура кодирования (у которой имя совпадает с именем "BuiltinEncodingClassReference"), которая:
     

a) неявно определена в модуле АСН.1, на который имеется ссылка "modulereference" (см. 11.4.1), или
     

b) импортирована в другой EDM, на который имеется ссылка "modulereference", и экспортирована из этого модуля, или
     

c) генерирована в разделе переименований в другом EDM, на который имеется ссылка "modulereference", или
     

d) генерирована в этом EDM в разделе переименований, в этом случае "modulereference" должна ссылаться на этот EDM.
     
     Примечание - Имя "BuiltinEncodingClassReference" может появляться в виде "Symbol" в разделе импортов (см. А.1).
     
     

10.6.3 Продукции, определенные в 10.6 (кроме указанной в 10.6.2), должны использоваться, если, и только если, соответствующее простое справочное имя было импортировано из модуля, указанного ссылкой "modulereference", и либо
     

a) идентичные справочные имена были импортированы из разных модулей или были генерированы в разделе переименований в этом EDM, или были как импортированы, так и генерированы, либо
     

b) простым справочным номером является "BuiltinEncodingClassReference" (см. 10.5), либо
     

c) выдерживаются оба условия.
     

10.7 Параметризованной ссылкой является справочное имя, определенное в "ParameterizedAssignment" (см. С.1) и выданное с реальным параметром согласно синтаксису из С.3. Использованными продукциями являются:
     

- классы кодирования

"ParameterizedEncodingClassAssignment" (см. С.1);


"ParameterizedEncodingClass" (см. С.3);

- объекты кодирования

"ParameterizedEncodingObjectAssignment" (см. С.1);


"ParameterizedEncodingObject" (см. С.3);

- наборы объектов кодирования


"ParameterizedEncodingObjectSetAssignment" (см. С.1);

"ParameterizedEncodingObjectSet" (см. С.3).

10.8 Продукциями, которые позволяют все формы идентификации, являются:
     
     - классы кодирования "EncodingClass" (см. 16.1.5);


     - объекты кодирования "EncodingObject" (см. 17.1.5);


     - наборы объектов кодирования "EncodingObjectSet" (см. 18.1).

10.9 Продукциями, которые позволяют все формы, кроме инлайнового определения, являются:
     
     - классы кодирования "DefinedEncodingClass" и "DefinedOrBuiltinEncodingClass";


     - объекты кодирования "DefinedEncodingObject"


     - наборы объектов кодирования "DefinedEncodingObjectSet" и "DefinedOrBuiltinEncodingObjectSet",


за исключением того, что предопределенные классы кодирования и предопределенные наборы объектов кодирования не разрешаются именами "DefinedEncodingClass" и "DefineEncodingObjectSet".
     
     Примечание - Используется также дополнительная продукция "SimpleDefinedEncodingClass". Она определена в С.3 и позволяет только "encodingclassreference" и "ExternalEncodingClassReference".
     
     

10.9.1 "DefinedEncodingClass" и "DefinedOrBuiltinEncodingClass" имеют следующий вид:
     
DefinedEncodingClass ::=

encodingclassreference

| ExternalEncodingClassReference

| ParameterizedEncodingClass

DefinedOrBuiltinEncodingClass ::=

DefinedEncodingClass

| BuiltinEncodingClassReference

10.9.2 "DefinedEncodingObject" имеет следующий вид:
     
DefinedEncodingObject ::=

encodingobjectreference

| ExternalEncodingObjectReference

| ParameterizedEncodingObject

10.9.3 "DefinedEncodingObjectSet" и "DefinedOrBuiltinEncodingObjectSet" имеют следующий вид:
     
DefinedEncodingObjectSet ::=

encodingobjectsetreference

| ExternalEncodingObjectSetReference

| ParameterizedEncodingObjectSet

DefinedOrBuiltinEncodingObjectSet ::=

DefinedEncodingObjectSet

| BuiltinEncodingObjectSetReference
     
     

11 Кодирование типов ACH.1

11.1 Общие положения

11.1.1 Для всех типов АСН.1 имеется соответствующая неявно кодируемая структура кодирования. Эта структура кодирования неявно генерируется для каждого присвоения типа АСН.1 и автоматически экспортируется из модуля АСН.1, содержащего это присвоение типа (она должна, однако, импортироваться в модуль EDM, если она должна использоваться). Именем соответствующей структуры кодирования будет имя типа, перед которым ставится знак "#". Эта структура кодирования определяет класс кодирования и называется неявно генерируемой структурой кодирования.

11.1.2 Могут быть также одна или несколько явно генерируемых структур кодирования. Они генерируются в EDM с помощью раздела переименований.
     

11.1.3 Кодирование типа АСН.1 формально определяется как результат кодирований, примененных именно к одной структуре кодирования (неявной или явной), генерируемой из типа АСН.1. Кодирования применяются с помощью операторов в ELM (см. раздел 12), используя объекты кодирования из комбинированного набора объектов кодирования. ELM применяют кодирования не более чем к одной из генерируемых структур кодирования, соответствующих заданному типу АСН.1.
     

11.1.4 Неявно генерируемая структура кодирования определяется первой упрощенной и расширенной нотацией АСН.1 (определенной в 11.3), а затем определяется отображением типов АСН.1, конструкторов типов и имен компонентов в соответствующие предопределенные классы кодирования, конструкторы кодирования и имена полей структуры кодирования.
     

11.1.5 Явно генерируемая структура кодирования определяется путем выполнения указанных изменений к неявно генерируемой структуре кодирования при помощи раздела переименований.
     

11.1.6 Каждое поле генерируемой структуры кодирования связано с полем абстрактных значений соответствующего типа и с информацией, относящейся к ограничениям и полученной из определения типа АСН.1 (см. 11.4.2). Кодирования абстрактных значений генерируемой структуры кодирования определяются в виде кодирований для соответствующих абстрактных значений исходного типа АСН.1.
     

11.1.7 Этот раздел 11 указывает:
     

a) предопределенные классы кодирования, которые используются при определении неявно кодируемых структур кодирования, соответствующих типам АСН.1 (см. 11.2).
     
     Примечание - Пункт 16.1.14 определяет дополнительные классы, которые используются при описании определенных пользователем структур кодирования;
     
     

b) преобразования синтаксиса АСН.1 (упрощение и расширение) перед выработкой неявно генерируемой структуры (см. 11.3).
     

c) неявно генерируемую структуру кодирования для любого типа АСН.1 (см. 11.4).
     
     

11.2 Предопределенные классы кодирования, используемые для неявно генерируемых структур кодирования

11.2.1 Классы кодирования, используемые для неявно генерируемых структур кодирования, и типы АСН.1 или конструкторы, которым они соответствуют, перечислены в таблице 2.
     
     
Таблица 2 - Классы кодирования для нотации АСН.1
     

Нотация АСН.1

Класс кодирования

Простейший класс

BIT STRING

#BIT-STRING

#BITS

BOOLEAN

#BOOLEAN

#BOOL

CHARACTER STRING

#CHARACTER-STRING

Определен с помощью #SEQUENCE

CHOICE

#CHOICE

#ALTERNATIVES

EMBEDDED PDV

#EMBEDDED-PDV

Определен с помощью #SEQUENCE

ENUMERATED

#ENUMERATED

#INT

EXTERNAL

EXTERNAL#EXTERNAL

Определен с помощью #SEQUENCE

INTEGER

#INTEGER

#INT

NULL

#NULL

#NUL

OBJECT IDENTIFIER

#OBJECT-IDENTIFIER

#OBJECT-IDENTIFIER

OCTET STRING

#OCTET-STRING

#OCTETS

нотация открытого типа

#OPEN-TYPE

#OPEN-TYPE

OPTIONAL

#OPTIONAL

#OPTIONAL

REAL

#REAL

#REAL

RELATIVE-OID

#RELATIVE-OID

#OBJECT-IDENTIFIER

SEQUENCE

#SEQUENCE

#CONCATENATION

SEQUENCE OF

#SEQUENCE-OF

#REPETITION

SET

#SET

#CONCATENATION

SET OF

#SET-OF

#REPETITION

TIME

#TIME

#TIME

DATE

#DATE

#TIME

TIME-OF-DAY

#TIMEh-OF-DAY

#TIME

DATE-TIME

#DATE-TIME

#TIME

DURATION

#DURATION

#TIME

GeneralizedTime

#GeneralizedTime

#CHARS

UTCTime

#UTCTime

#CHARS

ObjectDescriptor

#ObjectDescriptor

#CHARS

BMPString

#BMPString

#CHARS

GeneralString

#GeneralString

#CHARS

GraphicString

#GraphicString

#CHARS

IA5String

#IA5String

#CHARS

NumericString

#NumericString

#CHARS

PrintableString

#PrintableString

#CHARS

TeletexString

#TeletexString

#CHARS

UniversalString

#UniversalString

#CHARS

UTF8String

#UTF8String

#CHARS

VideotexString

#VideotexString

#CHARS

VisibleString

#VisibleString

#CHARS

Текстуально изложенная нотация тега

#TAG

#TAG

11.2.2 В столбце 1 приведена нотация АСН.1, которая заменяется классом кодирования в неявно генерируемой структуре кодирования. В столбце 2 приводится класс кодирования, который заменяет нотацию столбца 1. В столбце 3 приведен простейший класс, из которого получен класс столбца 2.
     
     

11.3 Упрощение и расширение нотации АСН.1 для целей кодирования

11.3.1 В ECN предполагается, что определенные синтаксические конструкции АСН.1 будут расширены (или сокращены) в эквивалентные или упрощенные конструкции.
     
     Примечание - Типы, определенные упрощенными конструкциями, способны переносить такой же набор абстрактных значений, что и исходные синтаксические структуры АСН.1, и эти абстрактные значения отображаются в упрощенные конструкции.
     
     

11.3.2 Расширениями или упрощениями синтаксических конструкций АСН.1 являются следующие:
     

a) полностью определенные в разделе 11.3.4, или
     

b) упомянутые в разделах "См. перечисление b) 11.3.2" и полностью определенные в ИСО/МЭК 8824-1 (включая приложение С) со всеми опубликованными поправками и техническими опечатками, или
     

c) упомянутые в разделах "См. перечисление с) 11.3.2" и полностью определенные в ИСО/МЭК 8824-2 со всеми опубликованными поправками и техническими опечатками, или
     

d) упомянутые в разделах "См. перечисление d) 11.3.2" и полностью определенные в ИСО/МЭК 8824-4 со всеми опубликованными поправками и техническими опечатками.
     

11.3.3 Синтаксические конструкции АСН.1, удаленные ниже при расширении и упрощении, далее в настоящем стандарте не упоминаются.
     

11.3.4 Следующие расширения и упрощения будут применимы ко всем модулям АСН.1.
     

11.3.4.1 Следующие трансформации не являются рекурсивными и, следовательно, применяются только один раз:
     

a) все "ValueSetTypeAssignment" заменяются их эквивалентами "TypeAssignment" с ограничениями на подтипы [см. перечисление b) 11.3.2];
     

b) конструкция АСН.1 INSTANCE OF расширяется в ее эквивалентный тип "последовательность" [см. перечисление с) 11.3.2];
     

c) "TypeFromObject" заменяется типом, на который дана ссылка [см. перечисление с) 11.3.2];
     

d) "ValueSetFromObjects" заменяется типом, на который дана ссылка [см. перечисление с) 11.3.2];
     

e) если экземпляр нотации тега АСН.1 дан текстуально, а за ним следуют один или несколько дальнейших экземпляров нотации тега АСН.1, то второй и последующие экземпляры нотации тега отбрасываются.
     
     Примечание - Это похоже на правила неявного тегирования в АСН.1, но применяется для любой среды тегирования. Многократное тегирование одного и того же типа, тем не менее, возможно путем использования справочных имен типа.
     

11.3.4.2 Следующие трансформации применяются рекурсивно в указанном порядке до достижения некоторой фиксированной точки:
     

a) вся параметризация АСН.1 полностью разрешается путем замены реальных параметров на холостые параметры [см. перечисление d) 11.3.2].
     
     Примечание - Это означает, что если нотация типа АСН.1 содержит экземпляр параметризованного типа АСН.1, то этот экземпляр становится инлайновым определением;
     
     

b) все "ComponentsOf" расширяются до их полных форм [см. перечисление b) 11.3.2];
     

c) все использования "SelectionType" должны быть разрешены [см. перечисление b) 11.3.2].
     

11.3.4.3 Затем применяются следующие трансформации:
     

a) списки поименованных номеров в определениях целочисленных типов удаляются. Поименованные номера для ECN не видны. ECN видит один класс #INTEGER [возможно, с границами, определенными в перечислении с) 11.3.4.3];

b) списки поименованных битов в определениях цепочек битов удаляются. Поименованные биты для ECN не видны;
     

c) все нотации ограничений, невидимых в PER, кроме ограничения на содержимое, удаляются. Ограничения, видимые в PER, должны разрешаться для обеспечения следующих значений, которые могут быть указаны в определении правил кодирования:
     

i) верхняя граница целых чисел и перечислений;
     

ii) нижняя граница целых чисел и перечислений;
     

iii) ограничения на действующий разрешенный алфавит PER и на действующий размер (см. ИСО/МЭК 8825-2, пункт 10.3);
     

d) если имеется ограничение на содержимое с конструкцией CONTAINING, то наличие ограничения на содержимое, тип содержимого и присутствие или отсутствие раздела ENCODED BY получают признаки, связанные с абстрактными значениями такого ограниченного типа "цепочка октетов" или "цепочка битов", и это ограничение затем сбрасывается. Если имеется ограничение на содержимое без конструкции CONTAINING, то оно не видно для ECN и сбрасывается.


     Примечание - Когда определяются кодирования для значений со связанным ограничением на содержимое, для кодирования типа содержимого может выдаваться отдельный комбинированный набор объектов кодирования. Это может быть определено по выбору разработчика, с отменой или без отмены существующего ENCODED BY (см. 11.3 и 13.2);
     
     

e) все тегирования, которые даны в нотации АСН.1 не текстуально, должны игнорироваться при отображении в структуры кодирования, но (для моделирования кодирований BER и процедур PER) полный список тегов типа получает признак поля структуры кодирования, в которую отображаются соответствующие значения;
     

f) текстуально представленная нотация тегов имеет класс удаленного тега [см. также перечисление е) 11.3.4.1];
     

g) значение "DEFAULT" заменяется на "OPTIONAL-ENCODING #OPTIONAL", а безусловное значение (по умолчанию) связывается с полем структуры, в которую отображен компонент АСН.1;

h) OPTIONAL заменяется на "OPTIONAL-ENCODING #OPTIONAL";

i) T61String заменяется на #TeletexString;

j) ISO646String заменяется на #VisibleString.

11.3.4.4 Далее применяются следующие трансформации:
     

a) выполняется автоматическое распределение значений по нумерациям (если это применимо). Синтаксис ENUMERATED заменяется на класс кодирования #ENUMERATED с установкой верхней и нижней границы [см. перечисление с) 11.3.4.3].


     Примечание 1 - Класс #ENUMERATED разыменует к классу #INT (см. 11.2.2), а нумерации отображаются в ограниченные целочисленные значения класса. Реальные имена нумераций для ECN не видны;


     

b) все появления "ObjectClassFieldType" (см. ИСО/МЭК 8824-2, раздел 14), которые ссылаются на поле типа, поле значения переменного типа или поле набора значений переменного типа, заменяются на класс кодирования #OPEN-TYPE [см. перечисление с) 11.3.2];
     

c) маркеры растяжимости и квадратные скобки в последовательности, наборе и конструкциях выбора удаляются, но (для моделирования кодирований BER и процедур PER) идентификация компонента как части корня или версии 1 и 2 и т.д. получает признак компонента, а наличие маркера растяжимости получает признак класса, в который конструктор отображает;
     

d) маркер растяжимости в ограничениях удаляется, но наличие маркера растяжимости получает признак класса, а если абстрактное значение находится в корне или в расширении, получает признак абстрактного значения.
     
     Примечание 2 - Признаки, упомянутые в перечислениях с) и d), опрашиваются благодаря не-ECN определению объектов кодирования в данной версии настоящего стандарта. Полная поддержка расширяемости, как ожидается, будет обеспечена в последующей версии настоящего стандарта.
     
     

11.3.5 С помощью этих трансформаций все конструкции, относящиеся к типам АСН.1, получают соответствующие классы кодирования, перечисленные в таблице 2. Неявно генерируемые структуры кодирования будут конструироваться путем отображения относящихся к типам АСН.1 конструкций из столбца 1 в классы из столбца 2 таблицы 2 (как описано в 11.4).
     
     

11.4 Неявно генерируемые структуры кодирования

11.4.1 Для каждого определения типа АСН.1 имеется неявно генерируемая структура кодирования с именем, сконструированным из справочного имени типа АСН.1 путем приставления впереди знака "#". Если для неявно генерируемой структуры кодирования требуется полностью определенное имя, то полностью определенное имя должно иметь "Moduleldentifier" модуля АСН.1, содержащего определение типа (пример неявно генерируемой структуры приведен в D.1.9.2).


     Примечание - Неявно генерируемая структура генерируется и экспортируется для каждого типа АСН.1 в модуле АСН.1 независимо от того, присутствует ли этот тип в разделе EXPORTS.


     

11.4.2 Неявно генерируемая структура кодирования имеет такую же структуру, что и определение типа АСН.1, а именно:
     

a) идентификаторы компонентов АСН.1 отображаются в имена полей структур кодирования;
     

b) нотация АСН.1 из столбца 1 таблицы 2 отображается в предопределенные классы кодирования из столбца 2 таблицы 2.
     
     Примечание - Первый текстуально представленный тег отображается в конструкцию "[#TAG]" неявно генерируемой структуры. Неявно генерируемая структура не содержит конструкций "[#TAG]" для последующих текстуально представленных тегов;


     

c) компоненты АСН.1 "DefinedType" отображаются в имя класса кодирования, полученное из имени типа путем добавления знака "#". Если тип импортирован в модуль АСН.1, то любая нотация "ExternalEncodingClassReference" к соответствующему классу в неявно генерируемой структуре должна указывать модуль АСН.1, который содержит определение указанного типа.


     Примечание - Если получающийся класс является именем предопределенного класса кодирования, то все ссылки на него в разделе переименований или в ELM будут использовать нотацию "ExternalEncodingClass Reference";
     
     

d) абстрактные значения отображаются из поля определения типа в соответствующее поле структуры кодирования;
     

e) верхняя и нижняя границы для целочисленного и перечисленного типов, все действующие ограничения на размер и действующие ограничения на разрешенный алфавит (см. ИСО/МЭК 8825-2, пункт 10.3) отображаются из определения типа в соответствующее поле структуры кодирования;
     

f) номер тега для первого текстуально представленного тега отображается в класс #TAG.
     

11.4.3 Три следующие неявно генерируемые структуры вырабатываются и экспортируются из всех модулей АСН.1. Эти структуры имеют имена #CHARACTER-STRING, #EMBEDDED-PDV и #EXTERNAL, а структуры, к которым они разыменуют, являются неявно генерируемыми структурами, соответствующими связанным типам CHARACTER STRING, EMBEDDED PDV и EXTERNAL, указанным соответственно в ИСО/МЭК 8824-1, пункты 44.5, 36.5 и 37.5.

11.4.4 Все неявно генерируемые структуры кодирования могут кодироваться предопределенными наборами объектов кодирования (см. 18.2) и будут обеспечивать те же кодирования, которые определены в соответствующих стандартах для таких кодирований, применяемых к типам АСН.1.
     
     

12 Модуль компоновки кодирования (ELM)


     Примечание - В ECN имеются две продукции верхнего уровня: "ELMDefinition", определяемая в настоящем разделе, и "EDMDefinition", определяемая в разделе 14. Они определяют синтаксис для описания модуля ELM и модулей EDM соответственно.
     
     

12.1 Структура ELM

12.1.1 Продукцией "ELMDefinition" является:
     
ELMDefinition ::=

Moduleldentifier

LINK-DEFINITIONS

"::="

BEGIN

ELMModuleBody

END

12.1.2 В любом заданном приложении ECN должен быть точно один ELM, который определяет кодирование всех сообщений, используемых в этом приложении.
     
     Примечание - Тип (типы) АСН.1, определяющие "сообщения", часто называют "типами верхнего уровня".
     
     

12.1.3 Продукция "Moduleldentifier" и ее семантика определены в ИСО/МЭК 8824-1, подраздел 13.1.
     

12.1.4 "Moduleldentifier" обеспечивает однозначную идентификацию любого модуля в совокупности всех модулей АСН.1, ELM и EDM.
     

12.1.5 Продукцией "ELMModuleBody" является:
     
ELMModuleBody ::=

Imports ?

EncodingApplicationList

EncodingApplicationList ::=

EncodingApplication

EncodingApplicationList ?
     

12.1.6 Продукция "Imports" и ее семантика определены в ИСО/МЭК 8824-1, пункты 13.1, 13.16 и 13.17 с учетом изменений из А.1.
     

12.1.7 Все справочные имена, используемые в "ELMModuleBody", импортируются в ELM.
     
     Примечание - Это является более строгим требованием, чем предъявляемое к модулям АСН.1. В модулях АСН.1 внешние ссылки могут использоваться для типов и значений, которые не были импортированы. В модуле ELM (и в модуле EDM) внешние ссылки могут использоваться только для классов кодирования, которые были указаны в разделе импортов. Цель внешних ссылок - это устранение совпадений между импортируемыми именами и предопределенными именами либо между двумя идентичными именами, импортированными из разных модулей.
     
     

12.1.8 "Imports" делает доступным внутри ELM:
     

a) неявно генерируемые структуры кодирования из модуля АСН.1;
     

b) явно генерируемые структуры из модуля EDM.
     
     Примечание - Когда ELM импортирует явно генерируемую структуру кодирования из EDM, разделы переименований в других EDM не влияют на кодирование этой структуры (см. 15.2.4);
     
     

c) объекты и наборы объектов кодирования из модуля EDM.
     

12.1.9 "EncodingApplicationList" должен содержать по крайней мере одно "EncodingApplication", так как единственной функцией ELM является применение кодирования.
     
     

12.2 Типы кодирования

12.2.1 Продукцией "EncodingApplication" является:
     
EncodingApplication ::=

ENCODE

SimpleDefinedEncodingClass "," +

CombinedEncodings
     

12.2.2 "EncodingApplication" определяет кодирование типов АСН.1, соответствующих классам "SimpleDefinedEncodingClass", которые будут генерируемыми структурами кодирования. Кодирование этих типов определяется "CombinedEncodings", применяемым к генерируемым структурам кодирования, как указано в 13.2.
     
     Примечание - Для ELM будет обычным кодировать одиночный тип одиночного модуля, но если кодируются несколько типов, то поставщики оборудования могут (но не обязательно) предполагать, что это неявно указывает на типы верхнего уровня, нуждающиеся в поддержке в генерируемых структурах данных.
     
     

12.2.3 Кодирования, применяемые к генерируемым структурам кодирования, соответствующим типу АСН.1, который определен в каком-либо модуле АСН.1, предназначены для использования только этого типа в виде прикладных сообщений. Они не имеют значения при кодировании этого типа, когда ссылка на них сделана другими типами или когда они экспортированы из этого модуля АСН.1 и импортированы в другой модуль АСН.1.
     

12.2.4 Кодированием типа в ограничениях содержимого является то, которое указано объектом кодирования, приложенным к этому ограниченному классу в категории "цепочка октетов" или "цепочка битов", а также может быть любым комбинированным набором объектов кодирования или может быть комбинированным набором объектов кодирования, который был приложен к классу, содержащемуся в этой категории "цепочка октетов" или "цепочка битов".
     

12.2.5 В ELM должно применяться только одно кодирование к одному типу АСН.1.
     
     Примечание - Правила применения кодирований (определяемые в разделе 13) означают, что "EncodingApplication" полностью описывает кодирование типа, если он не содержит экземпляра ограничения содержимого.
     
     

13 Применение кодирований

13.1 Общие положения

13.1.1 Кодирования применяются в ELM к генерируемой структуре (или независимо, к нескольким генерируемым структурам) с помощью "CombinedEncodings", определяемого в 13.1.3. Этот раздел вместе с 13.2 определяет применение "CombinedEncodings" к генерируемой структуре кодирования.
     

13.1.2 В ELM приложение выполняется к генерируемым структурам кодирования, указанным в "EncodingApplication". Последующие разделы определяют также приложение кодирований ко всем или к части определений произвольных структур кодирования. Этот раздел применим в обоих случаях.
     

13.1.3 Продукцией "CombinedEncodings" является:
     
CombinedEncodings ::=

WITH

PrimaryEncodings

CompletionClause ?

CompletionClause ::=

COMPLETED BY

SecondaryEncodings

PrimaryEncodings ::= EncodingObjectSet

SecondaryEncodings ::= EncodingObjectSet
     

13.1.4 "EncodingObjectSet" определяется в 18.1.1.
     

13.1.5 Использование "CombinedEncodings" определяется в 13.2.
     
     

13.2 Комбинированный набор объектов кодирования и его применение

13.2.1 Комбинированный набор объектов кодирования формируется из продукции "CombinedEncodings" (см. 13.1.3) следующим образом.
     

13.2.2 Если не имеется "CompletionClause", то "PrimaryEncodings" формирует комбинированный набор объектов кодирования.
     

13.2.3 В остальных случаях:
     

a) все объекты кодирования из "PrimaryEncodings" помещаются в комбинированный набор объектов кодирования, а затем
     

b) каждый объект кодирования из "SecondaryEncodings" добавляется в комбинированный набор объектов кодирования, если, и только если, в этом комбинированном наборе объектов кодирования уже нет объекта кодирования, который имеет тот же класс кодирования (см. 17.1.7 и 9.23.2).
     

13.2.4 После этого схематического конструирования начинается кодирование с именем "encodingclassreference" структур кодирования, указанных в приложении кодирования (см. 13.1.2 и 17.5).
     

13.2.5 Когда в ELM имеется несколько приложений кодирования, правила из 12.2 гарантируют, что применения не будут перекрываться. Они обрабатываются независимо. Аналогично приложения кодирований к структурам кодирования в модулях EDM (определяемые в 13.2.10) всегда не перекрываются. В последующих подразделах приведены правила применения к одиночной структуре кодирования.
     

13.2.6 Объекты кодирования из комбинированного набора объектов кодирования применяются в точке приложения. Точкой приложения является первоначально "encodingclassreference" для генерируемой структуры кодирования (когда применение происходит в ELM, как определено в 13.1.2) или компонент структуры кодирования (когда применение происходит в EDM, как определено в 17.5).
     

13.2.7 Любой класс кодирования в категориях "альтернативы", "конкатенация" и "повторение" (см. 16.1.8, 16.1.9 и 16.1.10) является конструктором кодирования.
     

13.2.8 Термин "компонент" в последующем тексте относится к любым таким элементам:
     

a) альтернативы конструктора, относящегося к категории "альтернативы";
     

b) поле, следующее за конструктором, относящимся к категории "повторение";
     

c) компоненты конструктора, относящегося к категории "конкатенация";
     

d) вложенный тип (тип, указанный в ограничении содержимого);
     

e) тип, выбранный (в экземпляре связи) для использования с классом в категории "открытый тип".
     

13.2.9 Точка приложения на последующих стадиях этих процедур может быть любым из следующих элементов:
     

a) имя класса кодирования. Это полностью подходит для кодирования с использованием спецификации в объекте кодирования того же класса (см. 17.1.7);
     

b) конструктор кодирования (см. 16.2.12). Процедуры конструирования могут быть определены спецификацией, содержащейся в объекте кодирования с классом конструктора кодирования, но этот объект кодирования не определяет кодирования этих компонентов. Спецификация применяемого объекта кодирования может потребовать, чтобы один или несколько компонентов конструктора были заменены другими структурами (параметризованными), перед тем как точка приложения перейдет к компонентам;
     

c) класс в категории "цепочка битов" или "цепочка октетов", который имеет некоторый вложенный тип в качестве признака, связанного со значениями [см. перечисление d) 11.3.4.3]. Кодирование вложенного типа зависит от того, присутствует ли ENCODED BY, и от спецификации применяемого объекта кодирования (см. 22.11);

d) класс в категории "открытый тип". Кодирование компонента открытого типа зависит от того, присутствует ли ENCODED WITH, и от спецификации применяемого объекта кодирования (см. 23.10.2);

e) компонент, который является классом кодирования (перед которым, возможно, имеются один или несколько классов в категории "тег"), за которым следует класс кодирования в категорию "факультативные возможности". Процедуры и кодирования для указания наличия или отсутствия определяются спецификацией, содержащейся в объекте кодирования классов в категории "факультативные возможности". Этот объект кодирования может также потребовать замены класса кодирования (вместе со всеми предшествующими ему классами в категории "тег") на структуру замены (параметризованную), перед тем как этот класс кодировать. Затем точка приложения переходит к первому классу в категории "тег" (если она имеется) или к компоненту, или к его заменителю;
     

f) класс кодирования, перед которым имеется класс кодирования в категории "тег". Номер тега, связанный с классом в категории "тег", кодируется с помощью спецификации в объекте кодирования с классом в категории "тег", а точка приложения переходит затем к тегированному классу;
     

g) любой другой предопределенный класс кодирования. Это полностью подходит для кодирования с использованием спецификации, содержащейся в объекте кодирования этого класса.
     

13.2.10 Кодирование продолжается следующим образом.
     

13.2.10.1 Если комбинированный набор объектов кодирования содержит объект кодирования того же класса (см. 17.1.7), что и текущая точка приложения, то применяется этот объект кодирования. Это применение может вызвать замену одного или нескольких компонентов с классом, к которому это кодирование применяется. Если же комбинированный набор объектов кодирования не содержит такого объекта кодирования, то либо:
     

а) класс кодирования в текущей точке приложения является ссылкой на другой класс кодирования; в этом случае ссылка на него убирается, а процедуры из 13.2.10 применяются рекурсивно, либо
     

b) класс кодирования в текущей точке приложения не является ссылкой на другой класс кодирования; в этом случае спецификация ECN имеет ошибку.
     

13.2.10.2 Если кодирование применено в точке приложения к классу кодирования, а он не относится к категории "факультативные возможности" или "тег" и не имеет компонентов (см. 13.2.7), то такое применение полностью определяет кодирование этого класса и заканчивает процедуру.
     

13.2.10.3 Если кодирование применено в точке приложения к классу кодирования, который относится к категории "факультативные возможности", то точка приложения переходит к факультативному компоненту (возможно, тегированному).
     

13.2.10.4 Если кодирование применено в точке приложения к классу кодирования, который относится к категории "тег", то точка приложения переходит к тегированному элементу, а процедуры из 13.2.10 применяются рекурсивно.
     

13.2.10.5 Если кодирование применимо в точке приложения к классу кодирования, который имеет компонент, относящийся к какому-либо вложенному типу, то процедуры из 13.2.10 применяются рекурсивно к каждому компоненту.
     
     Примечание - Если объект кодирования будучи применен к классу в категории "открытый тип" содержит ENCODED WITH, то это определяет набор объектов кодирования, применяемый к компоненту, в противном случае комбинированный набор объектов кодирования, применяемый к этому классу, применяется и к компоненту (см. 23.10.2).
     
     

13.2.10.6 Если кодирование применено в точке приложения к классу кодирования, который имеет компонент, относящийся к классу в категории "цепочка битов" или "цепочка октетов" с вложенным типом, связанным со значениями, то могут встретиться четыре случая:
     

a) ограничение содержимого имеет ENCODED BY, а объект кодирования для этого класса либо не содержит спецификации кодирования вложенного типа, либо указывает, что он не отменяет ENCODED BY (см. 22.11). В этом случае для вложенного типа используется спецификация ENCODED BY, а точка приложения переходит к вложенному типу с использованием этой спецификации кодирования;

b) ограничение содержимого имеет ENCODED BY, но объект кодирования для этого класса содержит спецификацию кодирования вложенного типа и указывает, что он отменяет ENCODED BY. В этом случае для вложенного типа применяется спецификация в объекте кодирования, а точка приложения переходит к вложенному типу с использованием этой спецификации кодирования;

c) ограничение содержимого не имеет ENCODED BY, а объект кодирования для этого класса содержит спецификацию кодирования вложенного типа. В этом случае к вложенному типу применяется спецификация в объекте кодирования, а точка приложения переходит к вложенному типу с использованием этой спецификации кодирования;

d) ограничение содержимого не содержит ENCODED BY, а объект кодирования для этого класса не содержит спецификации кодирования вложенного типа. В этом случае комбинированный набор объектов кодирования, прилагаемый к этому классу, применяется также к типу содержимого, а точка приложения переходит к вложенному типу с использованием этой спецификации кодирования.
     

13.2.10.7 Если в комбинированном наборе объектов кодирования нет объекта кодирования того же класса (см. 17.1.7), что и текущая точка приложения, а текущая точка приложения является справочным именем, то она разыменуется, а эти процедуры применяются рекурсивно к новой структуре кодирования.
     

13.2.10.8 В других случаях спецификация ECN будет ошибочной.
     

13.2.11 Вышеописанный алгоритм может быть суммирован следующим образом: комбинированный набор объектов кодирования применяется по принципу "сверху вниз". Если в этом процессе встречается справочное имя структуры кодирования, а в комбинированном наборе объектов кодирования имеется объект, который может кодировать его, то этот объект определяет его кодирование. В других случаях справочное имя расширяется путем разыменования. Если на какой-либо стадии потребуется (но не присутствует) кодирование для класса кодирования, который не может быть разыменован, то спецификация ECN неверна, а комбинированный класс кодирования считается неполным. Когда достигнут простейший класс битового поля, кодирование заканчивается на кодировании этого класса; однако если он имеет какой-либо вложенный тип, кодирование продолжается до генерируемой структуры кодирования, соответствующей этому вложенному типу. Когда достигнут тип с компонентами, процесс продолжается путем применения комбинированного набора объектов кодирования к каждому компоненту независимо. Когда участвуют теги и факультативные возможности, класс функциональных возможностей кодируется первым, затем кодируется класс в категории "тег" и, наконец, элемент. Когда кодирования применяются к классам конструктора, они могут вызывать замену одного или нескольких компонентов. Когда они применяются к классу факультативных возможностей, они могут вызывать замену всего элемента (отдельно от класса факультативных возможностей, но включая любой класс кодирования в категории "тег").
     

13.2.12 В процессе кодирования объекты кодирования, приложенные к конструкторам кодирования (и к классам в категории "факультативные возможности"), могут потребовать, чтобы объекты кодирования, приложенные к компонентам конструкций, определяемым этими конструкторами, показывали идентификационные описатели (заданного имени), чтобы различать альтернативы, или факультативные возможности, или прекращение повторения, или порядок в конкатенации, похожей на набор. Они могут также потребовать, чтобы объекты кодирования, применяемые для других классов кодирования (следующие за этими конструкциями), показывали такой же идентификационный описатель и чтобы наборы значений описателя всех участвующих объектов кодирования (показывающих такой же описатель) были непересекающимися. Если эти условия не соблюдаются, спецификация ECN будет ошибочной.
     
     Примечание - Эта проблема наиболее вероятно возникает в объектах кодирования BER, примененных к конструкторам кодирования, а не к их компонентам, так как BER сильно зависит от идентификационных описателей. Объекты кодирования PER не используют идентификационные описатели.
     
     

14 Модуль определения кодирования (EDM)


     Примечание - В ECN имеются две продукции верхнего уровня: "EDMDefinition", определяемая в этом разделе, и "ELMDefinition", определяемая в разделе 12. Они определяют синтаксис для описания модулей EDM и модуля ELM соответственно.
     

14.1 Продукцией "EDMDefinition" является:
     
EDMDefinition ::=

Moduleldentifier

ENCODING-DEFINITIONS

"::="

BEGIN

EDMModuleBody

END

14.2 В любом заданном приложении ECN имеются нуль, один или несколько EDM, которые определяют объекты кодирования для приложения в ELM.
     
     Примечание - Если не имеется EDM, то в ELM могут использоваться только предопределенные объекты кодирования.
     
     

14.3 Продукция "Moduleldentifier" (и ее семантика) определена в ИСО/МЭК 8824-1, пункт 13.1.
     

14.4 "Moduleldentifier" обеспечивает однозначную идентификацию любого модуля в совокупности всех модулей АСН.1, ELM и EDM.
     

14.5 Продукцией "EDMModuleBody" является:
     
EDMModuleBody ::=

Exports ?

RenamesAndExports ?

Imports ?

EDMAssignmentList ?

EDMAssignmentList ::=

EDMAssignment

EDMAssignmentList ?


EDMAssignment ::=

EncodingClassAssignment

| EncodingObjectAssignment

| EncodingObjectSetAssignment

| ParameterizedAssignment

14.6 Продукции "Exports" и "Imports" (и их семантика) определены в ИСО/МЭК 8824-1, пункт 13.1 с учетом изменений из А.1.
     

14.7 "Exports" делает доступным импорт в другие EDM (и ELM) любого справочного имени, определенного в текущем EDM или импортированного в него, кроме имени из неявно генерируемой структуры. "Symbol" в "Exports" может указывать на любой класс кодирования (кроме предопределенного класса кодирования или неявно генерируемой структуры), объект кодирования и набор объектов кодирования. Этот "Symbol" должен быть определен в этом EDM или импортирован в него.
     
     Примечание - Когда имя импортированной неявно генерируемой структуры кодирования является ссылкой на предопределенный класс кодирования, оно может использоваться внутри EDM с полностью определенным именем. Неявно генерируемая структура кодирования не может быть экспортирована из EDM (однако структуры кодирования, определенные с ее помощью, могут быть, конечно, экспортированы).
     
     

14.8 Продукция "RenamesAndExports" определяется в разделе 15.
     

14.9 Элемент "RenamesAndExports" (называемый разделом переименований) делает доступными (внутри EDM) явно генерируемые структуры кодирования, полученные из неявно генерируемых структур кодирования в указанных модулях АСН.1. Он делает также эти явно генерируемые структуры кодирования доступными для импорта в другие EDM (и в ELM) (см. раздел 15).
     

14.10 "Imports" делает доступными (внутри EDM) классы кодирования, объекты кодирования и наборы объектов кодирования, экспортированные из других EDM или автоматически экспортированные из модулей АСН.1.
     

14.11 Все модули АСН.1, которые определяют справочные имена непараметризованных типов, автоматически вырабатывают и экспортируют неявно генерируемую структуру кодирования с тем же именем, перед которым ставится знак "#". Такие классы кодирования могут быть импортированы в EDM из указанного модуля АСН.1.
     
     Примечание - Если такие имена совпадают с именами предопределенного класса кодирования, то внешняя форма, определенная в А.1, должна использоваться в теле импортируемого модуля и в любом разделе переименований.
     
     

14.12 Каждая продукция "EDMAssignment" определяет справочное имя и может использовать другие справочные имена. Каждое справочное имя, использованное в модуле, будет импортироваться в этот модуль либо будет один раз точно определено внутри этого модуля.
     
     Примечание - Это является более строгим требованием, чем предъявляемое к модулям АСН.1. В модулях АСН.1 внешние ссылки могут использоваться для типов и значений, которые не были импортированы. В модуле EDM (и в модуле ELM) внешние ссылки могут использоваться только для классов кодирования, которые были указаны в разделе импортов. Цель внешних ссылок - это только устранение совпадений между импортируемыми именами и предопределенными именами либо между двумя идентичными именами, импортированными из разных модулей.
     
     

14.13 Не требуется, чтобы любое справочное имя, использованное в одном присвоении, было определено текстуально (в другом операторе присвоения) перед его использованием.
     

14.14 Продукции из "EDMAssignment" определяются в последующих разделах:
     
     EncodingClassAssignment раздел 16;


     EncodingObjectAssignment раздел 17;


     EncodingObjectSetAssignment раздел 18;


     ParameterizedAssignment подраздел С.1.
     
     Примечание - "ParameterizedAssignment" позволяет параметризацию "EncodingClassAssignment", "EncodingObjectAssignment" и "EncodingObjectSetAssignment", как показано в С.1.
     
     

15 Раздел переименований

15.1 Явно генерируемые и экспортируемые структуры

15.1.1 Продукцией "RenamesAndExports" является:
     
RenamesAndExports ::=

RENAMES

ExplicitGenerationList ";"

ExplicitGenerationList ::=

ExplicitGeneration

ExplicitGenerationList ?

ExplicitGeneration ::=

OptionalNameChanges

FROM GlobalModuleReference

OptionalNameChanges ::=

NameChanges | GENERATES


     Примечание - Пример использования раздела переименований для создания явно генерируемых структур кодирования приведен в D.3.7.
     
     

15.1.2 Продукция "GlobalModuleReference" определена в ИСО/МЭК 8824-1, пункт 13.1; она должна указывать модуль АСН.1.
     

15.1.3 "RenamesAndExports" называется разделом переименований.
     

15.1.4 Каждый элемент "ExplicitGeneration" генерирует и экспортирует из этого модуля явно генерируемую структуру кодирования для каждой из неявно генерируемых структур кодирования модуля АСН.1, указанных в "GlobalModuleReference". Каждое поле явно генерируемой структуры кодирования имеет связанные с ним такие же значения, что и соответствующее поле неявно генерируемой структуры кодирования (той, которая связана с соответствующим полем типа АСН.1, из которого она была генерирована).
     

15.1.5 Если раздел переименований ссылается более чем на один модуль АСН.1 и в результате этих двух явно генерируемых структур получает одно и то же простое имя, то никакая структура не будет доступна для явного импорта в модуль ELM или EDM.
     
     Примечание - Эти явно генерируемые структуры, тем не менее, существуют и, вероятно, будут неявно указываться другими явно генерируемыми структурами, которые экспортированы без ограничения.
     
     

15.1.6 Основная цель раздела переименований - это обеспечение доступности явно генерируемых структур для импорта в другие модули, в частности в ELM. Однако этот раздел делает эти структуры также доступными для ссылки внутри модуля EDM, за исключением случая, указанного в 15.1.7. Если простое имя допускает неоднозначность, то в этом модуле EDM, содержащем раздел переименований, как описывается в 15.1.9, должно использоваться полностью определенное имя.
     
     Примечание - Неоднозначность может возникнуть либо из-за совпадения с именами предопределенных классов, либо из-за совпадения простых имен из структур, генерируемых из более чем одного модуля АСН.1, либо по обеим причинам.
     
     

15.1.7 Когда раздел переименований вырабатывает явно генерируемую структуру из неявно генерируемой структуры, эта неявно генерируемая структура не может импортироваться в этот модуль EDM с помощью раздела импортов, и эта неявно генерируемая структура будет недоступной в этом модуле EDM.
     

15.1.8 Эти явно генерируемые структуры кодирования имеют то же простое справочное имя, что и неявно генерируемая структура кодирования, из которой они были сформированы (но будут иметь другие классы). Если для явно генерируемой структуры кодирования требуется полностью определенное имя, то оно должно содержать "Moduleldentifier" модуля EDM, имеющего раздел переименований, как описывается в 15.1.9.
     
     Примечание - Неявно генерируемые структуры кодирования, используемые в их генерировании, имеют то же самое простое справочное имя, но их полностью определенное имя содержит "Moduleldentifier" модуля АСН.1, в котором был определен соответствующий тип.
     
     

15.1.9 Если EDM вырабатывает явно генерируемые структуры кодирования из более чем одного модуля АСН.1, то возможно, что некоторые из этих структур будут иметь одинаковые простые имена классов кодирования. Если некоторые из этих структур указаны в теле этого EDM, то такой ссылкой должна быть "ExternalEncodingClassReference", содержащая "modulereference", использованную в качестве ссылки на модуль АСН.1 в компоненте "замены" модуля EDM.
     

15.1.10 Нотация "ExternalEncodingClassReference" не используется в разделе импортов, за исключением требования из 15.1.9.
     

15.1.11 Если имя, импортированное с помощью "ExternalEncodingClassRefererence", использовано в теле модуля, то может применяться простая "encodingclassreference", когда не требуется "Extern alEncodingClassReference" согласно 15.1.9.
     

15.1.12 Если "OptionalNameChanges" является GENERATES, то все явно генерируемые структуры кодирования будут теми же структурами, что и неявно генерируемые структуры кодирования, используемые при их генерации, за исключением случаев, определенных в 15.1.14.
     
     Примечание - (Руководство) Если в модуле EDM имеются несколько структур с одинаковыми простыми справочными именами (эти имена возникли или из компонента импортов, или из компонента переименований, или из-за совпадений с предопределенными классами, или из-за любой комбинации этих причин), то используется полностью определенное имя, за исключением ссылок на предопределенный класс. Для неявно генерируемых структур полностью определенное имя всегда использует имя модуля АСН.1. Для структур, генерируемых компонентом переименований в модуле EDM, используется полностью определенное имя. Это полностью определенное имя в теле этого EDM всегда использует имя модуля АСН.1, указанное в компоненте переименований. Для структур, импортированных из другого модуля EDM, полностью определенное имя использует имя этого модуля EDM. Это всегда обеспечивает недвусмысленность, так как импортирование не разрешается, если модуль EDM генерирует несколько явно генерируемых структур с одним и тем же простым справочным именем.
     
     

15.1.13 Если "OptionalNameChanges" является "NameChanges", то все еще применяется 15.1.14, но явно генерируемые структуры кодирования затем изменяются, как описывается в 15.2.
     

15.1.14 Рассмотрим неявно генерируемую структуру кодирования (назовем ее А), которая содержит ссылку на класс кодирования некоторой другой неявно генерируемой структуры кодирования (назовем ее В). Тогда:
     

a) если этот компонент переименований (в любой из его "ExplicitGeneration") вырабатывает явно генерируемую структуру кодирования, соответствующую В (назовем ее В1), то соответствующая ссылка в явно генерируемой структуре кодирования, соответствующей А, будет ссылкой на В1;
     

b) если нет явно генерируемой структуры кодирования, соответствующей В, то ссылка в генерируемой структуре кодирования, соответствующей А, будет ссылкой на В.
     
     

15.2 Изменения имен

15.2.1 Продукцией "NameChanges" является:
     

NameChanges ::=

NameChange

NameChanges ?

NameChange ::=

OriginalClassName

AS

NewClassName

IN

NameChangeDomain

OriginalClassName ::= SimpleDefinedEncodingClass| BuiltinEncodingClassReference

NewClassName ::= encodingclassreference

15.2.2 Каждая "NameChanges" описывает, что при генерировании явно генерируемой структуры кодирования все появившиеся "OriginalClassName" внутри "NameChangeDomain" в неявно генерируемых структурах кодирования должны переименовываться в класс "NewClassName". "NameChangeDomain" определяется в 15.3; он определяет одну или более неявно генерируемых структур кодирования (или компоненты таких структур) из модуля АСН.1, указанного ссылкой "GlobalModuleReference" в "ExplicitGeneration".
     
     Примечания
     

1 Это дает возможность применения к некоторым случаям появления класса других кодирований, отличающихся от примененных к другим случаям появления этого класса.
     

2 Это означает, что "OriginalClassName" может быть только именем, неявно генерируемым из типа АСН.1, то есть именем определенного пользователем типа АСН.1 (перед которым ставится "#") или одним из имен классов, перечисленных в столбце 2 таблицы 2.
     
     

15.2.3 Ссылки в "OriginalClassName" на поля неявно генерируемой структуры кодирования, которая соответствует использованию "ExternalTypeReference" в определении типа АСН.1, должны использовать нотацию "SimpleDefinedEncodingClass" с тем же "modulereference", что и "ExternalTypeReference". В другом случае, если "DefinedType" (перед которым имеется "#") не является "BuiltinEncodingClass Reference", то должна использоваться простая "encodingclassreference". Если "typereference" (перед которой имеется "#") является "BuiltinEncodingClassReference", то должна использоваться нотация "SimpleDefinedEncodingClass" с тем же "modulereference", что у модуля АСН.1, который генерирует неявно генерируемую структуру кодирования.
     

15.2.4 Когда ELM импортирует явно генерируемую структуру кодирования из EDM, компоненты переименований в других EDM не влияют на кодирование этой структуры.
     
     Примечание - Это означает, что все "окрашивание" (см. 9.16.4), необходимое для любого конкретного сообщения, должно выполняться в одном EDM.
     
     

15.2.5 "NewClassName" должен определяться в операторе присвоения класса кодирования (см. раздел 16) в следующей форме:
     

<NewClassName> ::= <OriginalClassName>,


где "<NewClassName>" и "<OriginalClassName>" являются именами нового и исходного классов, появившихся в продукции "NameChanges". Это присвоение должно быть в модуле EDM с компонентом "переименования".
     
     Примечание - "<OriginalClassName>" требуется для того, чтобы сослаться на предопределенный класс кодирования или на внешнюю генерируемую структуру кодирования, созданную компонентом "переименования" в этом модуле. В случае неоднозначности необходимо будет использовать внешнюю ссылку в "<OriginalClassName>".
     
     

15.3 Определение области для изменений имени

15.3.1 Продукцией "NameChangeDomain" является:
     
NameChangeDomain ::=

IncludedRegions

Exception ?

Exception ::=

EXCEPT

ExcludedRegions

IncludedRegions ::=

ALL | RegionList

ExcludedRegions ::= RegionList

RegionList ::=

Region "," +

Region ::=

SimpleDefinedEncodingClass |

ComponentReference

ComponentReference ::=

SimpleDefinedEncodingClass

"."

ComponentldList

ComponentldList ::=

identifier "." +

15.3.2 Каждый "SimpleDefinedEncodingClass" должен быть именем неявно генерируемой структуры кодирования из модуля АСН.1, указанного ссылкой "GlobalModuleReference" в "ExplicitGeneration". При использовании в "Region" он определяет полное описание этой структуры кодирования.
     
     Примечание - Форма "ExternalEncodingClassReference" класса "SimpleDefinedEncodingClass" используется, когда указанный класс выделен из имени "typereference", который (когда имеет предшествующий "#") является ссылкой "BuiltinEncodingClassReference" (см. 15.2.3).
     
     

15.3.3 Каждый "identifier" должен быть "identifier" из "NamedField" неявно генерируемой структуры кодирования, указанной ссылкой "encodingclassreference" в "ComponentReference". Эта "ComponentReference" определяет полное описание указанного компонента этой структуры кодирования.
     

15.3.4 Первым "identifier" в "ComponentldList" должен быть "identifier" из "NamedField" неявно генерируемой структуры кодирования, указанной ссылкой "encodingclassreference" в "ComponentReference"; он определяет полное описание этого компонента структуры кодирования. Каждым последующим "identifier" в "ComponentldList" будет "identifier" из "NamedField" неявно генерируемой структуры кодирования, указанной предыдущей частью "ComponentldList"; он определяет полное описание этого компонента.
     

15.3.5 Определения, указанные разными "Region" в "RegionList", должны быть несвязанными. Определение указывается в "RegionList", если, и только если, оно указано в "Region" этого "RegionList".
     

15.3.6 Если "IncludedRegions" имеет значение ALL, то он указывает на все части всех неявно генерируемых структур кодирования из модуля АСН.1, указанного ссылкой "GlobalModuleReference" в "ExplicitGeneration".
     

15.3.7 Определения, указанные в "ExcludedRegions", должны быть правильным подмножеством определений, указанных в "IncludedRegions".
     

15.3.8 Спецификация "NameChangeDomain" указывает определения, в которых следует выполнить изменения имени. Определениями в "NameChangeDomain" являются определения, указанные в "IncludedRegions", но не указанные также в "ExcludedRegions".
     
     

16 Присвоения классов кодирования

16.1 Общие положения

16.1.1 Продукцией "EncodingClassAssignment" является:
     
EncodingClassAssignment ::=

encodingclassreference

"::="

EncodingClass

16.1.2 "EncodingClassAssignment" назначает "EncodingClass" для "encodingclassreference".
     
     Примечание - Любая нотация "EncodingObject", которая действительна с "EncodingClass" в качестве руководителя, будет действительной с "encodingclassreference" в качестве руководителя.
     
     

16.1.3 Любой класс кодирования будет относиться к одной из следующих категорий:
     

a) какая-либо категория из группы категорий "битовое поле" (см. 16.1.7);
     

b) категория "альтернативы" (см. 16.1.8);
     

c) категория "конкатенация" (см. 16.1.9);
     

d) категория "повторение" (см. 16.1.10);
     

e) категория "факультативные возможности" (см. 16.1.11);
     

f) категория "тег" (см. 16.1.12);
     

g) какая-либо категория из группы категорий "процедура кодирования" (см. 16.1.13).
     
     Примечание - Термин "конструктор кодирования" используется для любого класса в категориях "альтернативы", "конкатенация" и "повторение". Они называются также группой категорий "конструктор кодирования".
     
     

16.1.4 Категория для каждого предопределенного класса кодирования определена в 16.1.14.
     
     Примечание - Если классом кодирования является тегированный класс (см. 16.2.1) или класс имеет границы (см. 16.2.6), то категорией этого класса является категория класса с удаленными тегом и границами.
     
     

16.1.5 Продукцией "EncodingClass" является:
     
EncodingClass ::=

BuiltinEncodingClassReference

| EncodingStructure

16.1.6 Продукцией "BuiltinEncodingClassReference" является:
     
BuiltinEncodingClassReference ::=

BitfieldClassReference

| AlternativesClassReference

I ConcatenationClassReference

| RepetitionClassReference

| OptionalityClassReference

| TagClassReference

| EncodingProcedureClassReference

16.1.7 Продукцией "BitfieldClassReference" является:
     
BitfieldClassReference ::=

#NUL

| #BOOL

| #INT

| #BITS

| #OCTETS

| #CHARS

| #PAD

| #BIT-STRING

| #BOOLEAN

| #CHARACTER-STRING

| #EMBEDDED-PDV

| #ENUMERATED

| #EXTERNAL

| #INTEGER

| #NULL

| #OBJECT-IDENTIFIER

| #OCTET-STRING

| #OPEN-TYPE

| #REAL

| #RELATIVE-OID

| #TIME

| #DATE

| #DATE-TIME

| #TIME-OF-DAY

| #DURATION

| #GeneralizedTime

| #UTCTime

| #ObjectDescriptor

| #BMPString

| #GeneralString

| #GraphicString

| #IA5String

| #NumericString

| #PrintableString

| #TeletexString

| #UniversalString

| #UTF8String

| #VideotexString

| #VisibleString


     Для всех категорий классов, которые указывают на эти предопределенные имена (см. 16.1.14), определено, что они относятся к группе категорий "битовое поле".
     

16.1.8 Продукцией "AlternativesClassReference" является:
     
AlternativesClassReference ::=

#ALTERNATIVES

| #CHOICE

16.1.9 Продукцией "ConcatenationClassReference" является:
     
ConcatenationClassReference ::=

#CONCATENATION

| #SEQUENCE

| #SET

16.1.10 Продукцией "RepetitionClassReference" является:
     
RepetitionClassReference ::=

#REPETITION

| #SEQUENCE-OF

| #SET-OF

16.1.11 Продукцией "OptionalityClassReference" является:
     
OptionalityClassReference ::=

#OPTIONAL

16.1.12 Продукцией "TagClassReference" является:
     
TagClassReference ::=

#TAG

16.1.13 Продукцией "EncodingProcedureClassReference" является:
     
EncodingProcedureClassReference ::=

#TRANSFORM

| #CONDITIONAL-INT

| #CONDITIONAL-REPETITION

| #OUTER
     

16.1.14 Некоторые из этих классов являются простейшими и могут кодироваться только с помощью объектов кодирования своего собственного класса. Другие образуются из какого-либо простейшего класса с помощью операторов присвоения класса и могут быть разыменованы к этим классам. Их категорией будет категория класса, из которого они образованы. Ниже показаны простейшие классы, каждый из которых образован из предопределенного класса при помощи операторов присвоения класса. При определении объектов кодирования образованных классов любой синтаксис, разрешенный для соответствующего простейшего класса, может использоваться для образованного класса. Третий столбец дает категорию каждого из предопределенных классов, которые не образованы из других классов.
     

Предопределенный класс

Образован из

Категория

#ALTERNATIVES

(простейший)

alternatives

#BITS

(простейший)

bitstring

#BIT-STRING

#BITS

#BOOL

(простейший)

boolean

#BOOLEAN

#BOOL

#CHARACTER-STRING

(определен с помощью #SEQUENCE)

#CHARS

(простейший)

characterstring

#CHOICE

#ALTERNATIVES

#CONCATENATION

(простейший)

concatenation

#CONDITIONAL-INT

(простейший)

encoding procedure

#CONDITIONAL-
REPETITION
     

(простейший)

encoding procedure

EMBEDDED-PDV

(определен с помощью #SEQUENCE)

#ENUMERATED

#INT

#EXTERNAL

(определен с помощью #SEQUENCE)

#INT

(простейший)

integer

#INTEGER

#INT

#NUL

(простейший)

null

#NULL

#NUL

#OBJECT-IDENTIFIER

(простейший)

objectidentifier

#OCTETS

(простейший)

octetstring

#OCTET-STRING

#OCTETS

#OPEN-TYPE

(простейший)

opentype

#OPTIONAL

(простейший)

optionality

#OUTER

(простейший)

encoding procedure

#PAD

(простейший)

pad

#REAL

(простейший)

real

#RELATIVE-OID

#OBJECT-IDENTIFIER

#REPETITION

(простейший)

repetition

#SEQUENCE

#CONCATENATION

#SEQUENCE-OF

#REPETITION

#SET

#CONCATENATION

#SET-OF

#REPETITION

#TAG

(простейший)

tag

#TIME

(простейший)

time

#DATE

#TIME

#TIME-OF-DAY

#TIME

#DATE-TIME

#TIME

#DURATION

#TIME

#TRANSFORM

(простейший)

encoding procedure

#GeneralizedTime

#CHARS

#UTCTime

#CHARS

#ObjectDescriptor

#CHARS

#BMPString

#CHARS

#GeneralString

#CHARS

#GraphicString

#CHARS

#IA5String

#CHARS

#NumericString

#CHARS

#PrintableString

#CHARS

#TeletexString

#CHARS

#UniversalString

#CHARS

#UTF8String

#CHARS

#VideotexString

#CHARS

#VisibleString

#CHARS

16.2 Определение структуры кодирования

16.2.1 Продукцией "EncodingStructure" является:
     
EncodingStructure ::=

TaggedStructure

| UntaggedStructure

TaggedStructure ::=

"["

TagСlass

Tag Value ?

"]"

UntaggedStructure

UntaggedStructure ::=

DefinedEncodingClass

I EncodingStructureField

| EncodingStructureDefn

TagClass ::=

DefinedEncodingClass |

TagClassReference

TagValue ::=

"("number")"

16.2.2 "EncodingStructure" определяет класс кодирования на базе структуры с использованием нотации, описанной ниже. Эта нотация позволяет определять произвольные классы кодирования с помощью предопределенных классов кодирования и определенных классов кодирования (которые могут быть генерируемыми структурами кодирования) для битовых полей, конструкторов кодирования и классов "процедура кодирования" в категории "факультативные возможности". Все классы, которые определяет "EncodingStructure", относятся к категории "структура кодирования" (примеры назначения структуры кодирования, иллюстрирующие многие синтаксические структуры, приведены в D.2.8.4, а в D.2.2.3 приведен пример использования #TAG).
     
     Примечание - Синтаксис препятствует спецификации тегированного класса немедленно после другого тегированного класса в определении структуры кодирования, а также такие структуры не могут вырабатываться с несколькими текстуальными тегами в определении типа АСН.1 [см. перечисление е) 11.3.4.1].
     
     

16.2.3 "DefinedEncodingClass" определен в 10.9.1; он должен быть классом в группе категорий "битовое поле".
     

16.2.4 "DefinedEncodingClass" в "TagClass" должен быть классом в категории "тег" (см. 16.1.3).
     

16.2.5 Элемент "number" в "TagValue" указывает номер тега, который связан с классом в категории "тег".
     

16.2.6 Продукцией "EncodingStructureField" является:
     

EncodingStructureField ::=

#NUL

| #BOOL

| #INT

Bounds?

| #BITS

Size?

| #OCTETS

Size?

| #CHARS

Size?

| #PAD

| #BIT-STRING

Size?

| #BOOLEAN

| #CHARACTER-STRING

| #EMBEDDED-PDV

| #ENUMERATED

Bounds?

| #EXTERNAL

| #INTEGER

Bounds?

| #NULL

| #OBJECT-IDENTIFIER

| #OCTET-STRING

Size?

| #OPEN-TYPE

| #REAL

| #RELATIVE-OID

| #TIME

| #DATE

| #TIME-OF-DAY

| #DATE-TIME

| #DURATION

| #GeneralizedTime

| #UTCTime

| #ObjectDescriptor

Size?

I #BMPString

Size?

| #GeneralString

Size?

| #GraphicString

Size?

| #IA5String

Size?

| #NumericString

Size?

| #PrintableString

Size?

| #TeletexString

Size?

| #UniversalString

Size?

| #UTF8String

Size?

| #VideotexString

Size?

| #VisibleString

Size?

16.2.7 "EncodingStructureField" представляет все возможные кодирования цепочки битов для соответствующих типов АСН.1 и может быть назначенными значениями этих типов при отображении значения (см. раздел 19).
     

16.2.8 Значениями АСН.1, которые могут быть связаны с каждым простейшим полем, являются следующие:
     

#NUL

Значение НУЛЬ

#BOOL

Булевы значения

#INT

Целочисленные значения

#BITS

Значения цепочки битов

#OCTETS

Значения цепочки октетов

#CHARS

Значения цепочки знаков

#PAD

НЕТ

#OBJECT-IDENTIFIER

Значения идентификатора объекта

#OPEN-TYPE

Значения открытого типа

#REAL

Значения действительного числа

#TIME

Значения времени

#TAG

Номера тегов


     Примечание - Поле #PAD не может иметь связанных значений АСН.1, и его никогда не видно за пределами процедур кодирования и декодирования.
     
     

16.2.9 "Bounds" и "Size" определяют границы или ограничение на действующий размер соответственно в абстрактных значениях, которые могут отображаться в поле (см. раздел 19).
     
     Примечание - Ограничения на действующий разрешенный алфавит не могут назначаться в определении структуры кодирования. Они могут назначаться только путем отображений значения согласно разделу 19.
     
     

16.2.10 Продукциями "Bounds" и "Size" являются:
     

Bounds ::= "(" EffectiveRange ")"

EffectiveRange ::=

МinMax

| Fixed

Size ::= "(" SIZE SizeEffectiveRange ")"

SizeEffectiveRange ::=

"(" EffectiveRange ")"

MinMax ::=

ValueOrMin

".."

ValueOrMax

ValueOrMin ::=

SignedNumber |

MIN

ValueOrMax ::=

SignedNumber |

MAX

Fixed ::= SignedNumber

16.2.11 MIN и MAX указывают, что отсутствует нижняя или верхняя граница соответственно. MIN не используется в "Size". "Fixed" означает одиночное значение или одиночный размер. "SignedNumber" определен в ИСО/МЭК 8824-1, подраздел 19.1. Он должен быть неотрицательным при использовании в "Size". "ValueOrMin" и "ValueOrMax" указывают нижнюю и верхнюю границы соответственно.

16.2.12 Продукцией "EncodingStructureDefn" является:
     
EncodingStructureDefn ::=

AlternativesStructure

| RepetitionStructure

| ConcatenationStructure

16.2.13 Эти структуры кодирования определяются в следующих разделах:
     
     AlternativesStructure 16.3;


     RepetitionStructure 16.4;


     ConcatenationStructure 16.5.
     
     

16.3 Структура кодирования альтернативы

16.3.1 Продукцией "AlternativesStructure" является:
     
AlternativesStructure ::=

AlternativesClass

"{"

NamedFields

"}"

AlternativesClass ::=

DefinedEncodingClass |

AlternativesClassReference

NamedFields ::= NamedField "," +

NamedField ::=

identifier

Доступ к полной версии этого документа ограничен

Ознакомиться с документом вы можете, заказав бесплатную демонстрацию систем «Кодекс» и «Техэксперт».

Что вы получите:

После завершения процесса оплаты вы получите доступ к полному тексту документа, возможность сохранить его в формате .pdf, а также копию документа на свой e-mail. На мобильный телефон придет подтверждение оплаты.

При возникновении проблем свяжитесь с нами по адресу uwt@kodeks.ru

ГОСТ Р ИСО/МЭК 8825-3-2016 Информационная технология (ИТ). Правила кодирования АСН.1. Часть 3. Спецификация нотации контроля кодирования (ECN)

Название документа: ГОСТ Р ИСО/МЭК 8825-3-2016 Информационная технология (ИТ). Правила кодирования АСН.1. Часть 3. Спецификация нотации контроля кодирования (ECN)

Номер документа: ИСО/МЭК 8825-3-2016

Вид документа: ГОСТ Р

Принявший орган: Росстандарт

Статус: Документ в силу не вступил

Опубликован: Официальное издание. М.: Стандартинформ, 2016 год
Дата принятия: 07 ноября 2016

Дата начала действия: 01 ноября 2017
Информация о данном документе содержится в профессиональных справочных системах «Кодекс» и «Техэксперт»
Узнать больше о системах