ГОСТ Р ИСО/М ЭК 8824-1-2001
С.2.12 Т е г и р о в а н и е
До введения конструкции AUTOMATIC TAGS спецификации АСН.1 часто содержали тега. Ниже опи
сывается способ, с которым обычно применялось тегирование. С введением конструкции AUTOMAT IC TAGS в
новых спецификациях АСИ.1 нет необходимости исполыовагь обозначения тегов, хотя при модификациях
старой нотации следует позаботиться о тегах.
0.2.12.1 Тети универсального класса используются только в настоящем стандарте. Например нотация
(UNIVERSAL 30) предназначена исключительно для обеспечения точности в определении международно стан
дартизованных полезных типов. Иначе она нс должна использоваться.
С.2.12.2 Часто встречающийся стиль использования тегов —присвоение тега прикладного класса ровно
один раз во всей спецификации и использование его для идентификации типа, который широко используется
во всей спецификации. Тег прикладного класса также часто используется в качестве тега тина в самом внешнем
выборе CHOICE приложения, обеспечивая идентификациюотдельных сообщений через тег прикладного класса.
Пример использования тега в последнем случае:
FileNamc :: « (APPLICATION S] SEQUENCE (
directoryNameVisiblcString.
directoryRelative File NameVisiblcString I
C.2.12.3 Контекстно зависящее тегирование часто применяется алгоритмическим образом ко всем ком
понентам множества SET. последовательности SEQUENCE или выбора CHOICE. Олнако с помощью возмож
ности AUTOMATIC TAGS ЭТОделается намного проще.
П р и м е р
CustomcrRecord :: =• SET (
name|0| VisiblcString,
maillingAddrcss11) VisiblcStnng.
accountNumber|2| INTEGER,
balanceDue|3| INTEGER
\
CustomcrAltnbutc ::CHOICE {
name(0( VisiblcString,
maillingAddrcss111VisiblcStnpg.
accountNumbcr(2) INTEGER.
balunceDuc|3| INTEGER}
C.2.12.4 Тегирование пользовательского класса обычно не используется в спецификациях стандартов
(хотя это и не запрещается). Приложения, созданные производителями, обычно будут использовать теги при
кладного и контекстно зависящего классов. Однако в редких случаях спецификация конкретного производите ля
будет расширять спецификацию стандарта, и в этих случаях использование тегов пользовательского класса
может дать некоторые преимущества в части зашиты спецификации производителя от изменений специфика
ции стандарта.
П р и м е р
Acme BadgeNumber : : - (PRIVATE 2| INTEGER
badgcNumber AcmeBadgcNumbcr : : ■=■2345
С.2.12.5 Текстуальное использование IMPLIC1T с каждым тегом можно найти только встарых специфи
кациях. Когда используется явное тегирование, правила BER создают менее компактное представление, чем
при неявном тегировании. Правила PER создают одинаково компактное тегирование в обоих случаях. При
использовании правил BER и явного тс
1
ирования в закодированных данных лучше видны нижележащие типы
(INTEGER. REAL. BOOLEAN и прочие). В примерах настоящего руководства, когда возможно, используется
неявное тегирование. Ото может, в зависимости от правил кодирования, привести к компактному представле
нию. которое весьма желательно в некоторых приложениях. Вдругих приложениях компактность может быть
менее важна, чем. например, возможность осуществлять строгую проверку типов. В таком случае может ис
пользоваться явное тегирование.
П р и м е р
CustomcrRecord :: ■»SET {
name|0| IMPLICITVisiblcString.
maillingAddrcss111IMPLICITVisiblcString.
accountNumbcr[2| IMPLICITINTEGER.
balanccDuc(3| IMPLICITINTEGER }
CustomerAttribute :: ■»CHOICE (
name(0| IMPLICITVisiblcString.
maillingAddrcss|l| IMPLICITVisiblcString.
accountNumbcr|2| IMPLICITINTEGER.
balanccDuc13| IMPLICITINTEGER J
C.2.12.6 Руководство по использованию тегов в новых спецификациях АСН.1. ссылающихся на настоя
щий стандарт, очень простое: НЕ ИСПОЛ ЗУЙТЕ ТЕГИ. Вставьте в заголовок модуля AUTOMATIC TAGS —
75