Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 8825-5-2013 Информационная технология (ИТ). Правила кодирования AСН.1. Часть 5. Отображение определений W3C схемы XML в AСН.1

     10.3 Формирование идентификаторов и имен ссылок типов

10.3.1 Применение данного подраздела является прямым запросом из других мест настоящего стандарта сформировать имя ссылки типа АСН.1 или идентификатор.

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

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

- символы: " " (ПРОБЕЛ), "." (ТОЧКА), и "_" (НИЖНЕЕ ПОДЧЕРКИВАНИЕ) должны все быть заменены на "-"(ДЕФИС-МИНУС);

- любой символ, кроме "A"-"Z" (от ЛАТИНСКОЙ ПРОПИСНОЙ БУКВЫ А до ЛАТИНСКОЙ ПРОПИСНОЙ БУКВЫ Z), "a"-"z" (от ЛАТИНСКОЙ СТРОЧНОЙ БУКВЫ а до ЛАТИНСКОЙ СТРОЧНОЙ БУКВЫ z), "0"-"9" (от ЦИФРЫ НОЛЬ до ЦИФРЫ ДЕВЯТЬ) и "-" (ДЕФИС-МИНУС) должны быть удалены;

- последовательность двух или более символов ДЕФИС-МИНУС должна быть заменена единственным символом ДЕФИС-МИНУС;

- символы ДЕФИС-МИНУС, стоящие в начале или в конце имени, должны быть удалены;

- если символьная строка, которая должна использоваться в качестве имени ссылки типа, начинается со строчной буквы, то первая буква должна быть преобразована в прописную; если она начинается с цифры (от ЦИФРЫ НОЛЬ до ЦИФРЫ ДЕВЯТЬ), это должно быть снабжено префиксом "X" (ЛАТИНСКАЯ ПРОПИСНАЯ БУКВА Х);

- если символьная строка, которая должна использоваться в качестве идентификатора, начинается с прописной буквы, то первая буква должна быть преобразована в строчную; если она начинается с цифры (от ЦИФРЫ НОЛЬ до ЦИФРЫ ДЕВЯТЬ), то это должно быть снабжено префиксом "х" (ЛАТИНСКАЯ СТРОЧНАЯ БУКВА х);

- если символьная строка, которая должна использоваться в качестве имени ссылки типа, пуста, то она должна быть заменена на "X" (ЛАТИНСКАЯ ПРОПИСНАЯ БУКВА Х);

- если символьная строка, которая должна использоваться в качестве идентификатора, пуста, то она должна быть заменена на "х" (ЛАТИНСКАЯ СТРОЧНАЯ БУКВА х).

10.3.4 В зависимости от вида сформированного имени применяется один из трех следующих подпунктов.

10.3.4.1 Если сформированное имя является именем ссылки типа присвоения типа АСН.1 и символьная строка, сформированная 10.3.3, идентична:

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

b) имени ссылки типа присвоения типа в модуле XSD (см. приложение А); или

c) одному из зарезервированных слов, указанных в Рекомендации МСЭ-Т Х.680 ИСО/МЭК 8824-1:2008 (п.12.38), то суффикс должен быть добавлен к символьной строке, сформированной 10.3.3. Суффикс должен состоять из символа ДЕФИС-МИНУС, сопровождаемого каноническим лексическим представлением (см. Часть 2, 2.3.1 W3C XML-схемы) целочисленной переменной (integer). Эта целочисленная переменная должна быть наименьшей положительной целочисленной переменной, чтобы новое имя отличалось от имени ссылки типа любого другого присвоения типа АСН.1, сформированного ранее (в любом модуле АСН.1).

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

10.3.4.2 Если сформированное имя является идентификатором компонента последовательности, набора или типа выбора, и символьная строка, сформированная 10.3.3, идентична идентификатору ранее сформированного компонента той же самой последовательности, набора или типа выбора, то суффикс должен быть добавлен к символьной строке, сформированной 10.3.3. Суффикс должен состоять из символа ДЕФИС-МИНУС, сопровождаемого каноническим лексическим представлением (см. Часть 2, 2.3.1 W3C XML-схемы) целочисленной переменной. Эта целочисленная переменная должна быть наименьшей положительной целочисленной переменной, чтобы новый идентификатор отличался от идентификатора любого ранее сформированного компонента этой последовательности, набора или типа выбора.

10.3.4.3 Если сформированное имя является "identifier" в "Enumerationltem" перечислимого типа (enumerated type), и символьная строка, сформированная 10.3.3, идентична "identifier" в другом "Enumerationltem", ранее сформированном в том же самом перечислимом типе, то суффикс должен быть добавлен к символьной строке, сформированной 10.3.3. Суффикс должен состоять из символа ДЕФИС-МИНУС, сопровождаемого каноническим лексическим представлением (см. Часть 2, 2.3.1 W3C XML-cxeмы) целочисленной переменной. Эта целочисленная переменная должна быть наименьшей положительной целочисленной переменной, чтобы новый идентификатор отличался от "identifier" в любом другом "Enumerationltem", уже существующем в этом перечислимом типе АСН.1.

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

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

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

В противном случае "NewName" в команде кодирования NAME должно быть именем.

Пример - высокоуровневое сложное определение типа:

<xsd:complexType name="COMPONENTS">

<xsd:sequence>

<xsd:element name="Elem" type="xsd:boolean"/>

<xsd:element name="elem" type="xsd:integer"/>

<xsd:element name="Elem-1" type="xsd:boolean"/>

<xsd:element name="elem-1" type="xsd:integer"/>

</xsd:sequence>

</xsd:complexType>


отображается в присвоении типа АСН.1: