Класс информационного объекта (ASN.1)
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
ASN.1 Класс информационных объектов — это концепция, широко используемая в спецификациях ASN.1 для решения проблем, связанных со спецификацией протокола, аналогичных проблемам, решаемым спецификациями CORBA/IDL.
Классы информационных объектов используются, например, для указания протокола ROSE (элемент службы удаленных операций) в ASN.1.
Сокращения
[ редактировать ]Сокращения, используемые в этой статье:
- АСН.1
- Обозначение абстрактного синтаксиса один
- МОК
- Класс информационного объекта
- iOS
- Набор информационных объектов
- ИО
- Информационный объект
- SQL
- Язык структурированных запросов
- ПЕР
- Правила упакованного кодирования
- БЕР
- Основные правила кодирования
- МВУ
- Язык определения интерфейса
- КОРБА
- Общая архитектура брокера объектных запросов
- МИОП
- Интернет-протокол Inter-ORB
Введение
[ редактировать ]Самый простой способ рассматривать классы информационных объектов ASN.1 — рассматривать их как способ представления спецификации IDL в ASN.1 с использованием концепций, полученных из теории реляционных баз данных и, в частности, синтаксиса SQL.
Концепции, используемые в ASN.1, более гибкие, чем те, которые используются в IDL, поскольку, продолжая аналогию, они позволяют «настраивать грамматику» «спецификации IDL». Правила кодирования ASN.1 используются в качестве синтаксиса передачи для удаленных вызовов, напоминающих CORBA/IIOP.
В свете этого сравнения мы можем провести приблизительную аналогию между концепциями, используемыми в классах информационных объектов, и концепциями SQL и IDL, как показано в таблице 1.
Термин АСН.1 | Аналогия в SQL | Аналогия в IDL | |
---|---|---|---|
Класс информационных объектов (IOC) |
Дескриптор структуры таблицы SQL ( CREATE TABLE Оператор ) |
Спецификация грамматики IDL (правила BNF) | |
Полевая декларация МОК |
Дескриптор столбца таблицы SQL в Оператор CREATE TABLE (тип столбца) |
Создание грамматики IDL | |
Информационный объект (ИО) |
Строка таблицы SQL ( INSERT INTO Оператор ) |
Декларация операции IDL | |
Определение поля ввода-вывода |
Ячейка строки таблицы SQL в INSERT INTO Инструкция (значение ячейки) |
Часть объявления операции IDL, обычно связанная с объявлением кода типа операции, списка параметров, возвращаемого значения операции или списка исключений. | |
Набор информационных объектов (IOS) (коллекция информационных объектов) |
Полностью определенная таблица SQL (набор строк) (см. примечание 1). |
Определение интерфейса IDL (набор операций) | |
Тип данных ASN.1 с использованием ссылок на поля IOC, параметризованные с помощью IOS (обычно коллекция семантически связанных типов, обозначающих запрос, ответ и исключение, параметризованных с помощью одного и того же IOS) |
— |
Формат высокого уровня (спецификация грамматики) кадра (буфера сортировки), содержащего запрос, ответ или исключение CORBA. | |
Правила кодирования ASN.1 и синтаксис передачи (BER, PER) |
— |
Низкоуровневое кодирование запросов, ответов и индикаторов исключений, подходящее для физической передачи по среде | |
Примечание. Аналогия между IOS и таблицей SQL не совсем корректна. SQL допускает только один экземпляр таблицы данного типа (ОПЕРАЦИЯ в примере ниже), в то время как ASN.1 допускает несколько наборов информационных объектов, полученных из одного и того же класса информационных объектов, что наиболее правильно должно быть связано с несколькими экземплярами одной и той же таблицы в терминах SQL (ОПЕРАЦИЯ в примере ниже). |
Аналогия на примере
[ редактировать ]Таблица 2 иллюстрирует пример соответствия концепций ASN.1 аналогичным конструкциям, встречающимся в SQL и IDL.
Термин АСН.1 | Пример АСН.1 | Аналогия в SQL | Аналогия в IDL |
---|---|---|---|
МОК |
OPERATION ::= CLASS
{
&operationCode INTEGER UNIQUE,
&InvocationParsType,
&ResponseParsAndResultType,
&ExceptionList ERROR OPTIONAL
}
|
CREATE TABLE OPERATION
(
operationCode integer not null unique,
InvocationParsType type_info not null,
ResponseParsAndResultType type_info not null,
ExceptionList ref_to_table(ERROR)
)
(См. примечание 1, поясняющее |
Это примерно аналогично части описания BNF некоторого псевдо-IDL-синтаксиса следующей формы (обратите внимание, что в последующих примерах мы будем использовать реальный синтаксис IDL, а не воображаемый синтаксис, определенный BNF ниже): OPERATION ::= operationCode InvocationParsType ResponseParsAndResultType ExceptionList
operationCode ::= Integer
InvocationParsType ::= Type
ResponseParsAndResultType ::= Type
ExceptionList ::= ERROR
где |
ИО |
getCustomersNum OPERATION ::=
{
&operationCode get-customers-num-op-type-code,
&InvocationParsType Get-customers-num-req-pars-type,
&ResponseParsAndResultType Get-customers-num-ind-pars-type,
&ExceptionList { wrong-product | wrong-department }
}
|
INSERT INTO OPERATION VALUES ( $get_customers_num_op_type_code, Get_customers_num_req_pars_type, Get_customers_num_ind_pars_type, Get_customers_num_exc_list )
(Токены, начинающиеся с $, считаются переменными (например, в PHP), и они должны быть заменены реальным значением переменной.) |
MyType1 getCustomersNum(
in MyType2 par1,
inout MyType3 par2,
out MyType4 par3)
raises (ExcType1, ExcType2);
|
iOS |
MyWarehouseOps OPERATION ::=
{
getCustomersNum |
getPiecesNum |
appendItem
}
|
Таблица SQL, определенная с помощью последовательности операторов INSERT. |
IDL-интерфейс (сборник операций). |
Типы данных ASN.1 |
Request ::= SEQUENCE
{
invokeId INTEGER,
opcode OPERATION. &operationCode ({MyWarehouseOps}),
req-pars OPERATION. &InvocationParsType ({MyWarehouseOps} {@opcode})
}
Response ::= SEQUENCE
{
invokeId INTEGER,
opcode OPERATION. &operationCode ({MyWarehouseOps}),
rsp-pars OPERATION. &ResponseParsAndResultType ({MyWarehouseOps} {@opcode})
}
Exception ::= SEQUENCE
{
err-code ERROR. &errorCode ({MyErrorSet}),
err-body ERROR. &ErrorBody ({MyErrorSet} {@err-code})
}
(См. примечания 2, 3.) |
— |
Формат высокого уровня кадра, содержащего запрос, ответ или исключение CORBA. |
БЕР, ПЕР и т. д. |
0110 0111 0010 110... |
— |
Низкоуровневое кодирование запросов, ответов и индикаторов исключений. |
Примечание 1 . The The Примечание 2 . Обозначение @ (например, Примечание 3 . Пример спецификации типов данных ASN.1 не определяет никакого формального соответствия между Таким образом, пример спецификации формально не обеспечивает соблюдения каких-либо сценариев последовательности сообщений. В отличие от определения операции IDL, соответствие между кадрами не является обязательным и является чисто семантическим, хотя оно может использоваться инструментом ASN.1 в зависимости от инструмента. |
Параметризация
[ редактировать ]Если вы внимательно изучите пример ASN.1, представленный в таблице 2, и сравните его с концепциями IDL, вы увидите одно важное ограничение со стороны ASN.1.
Наши примеры типов данных ASN.1, которые мы согласились сравнить со спецификацией синтаксиса передачи CORBA/IDL высокого уровня, ограничены определением такого синтаксиса передачи только для одного экземпляра того, что мы сравнивали с интерфейсом IDL (набор информационных объектов в ASN). .1 условия).
Другими словами, такой синтаксис передачи не является универсальным и не подлежит повторному использованию.
С помощью текущего набора известных инструментов вы не можете определить такой синтаксис передачи общим способом, скажем, в спецификации A ASN.1, а затем повторно использовать его в спецификациях B и C ASN.1, которые определяют конкретные «IDL-интерфейсы» для конкретных приложений. ", от которого А не зависит.
Причина текущего ограничения заключается в том, что в настоящее время мы жестко запрограммировали наш набор информационных объектов ( MyWarehouseOps
в случае OPERATION
, или MyErrorSet
в случае ERROR
) в наши типы данных ASN.1 (спецификация синтаксиса передачи высокого уровня).
Теперь нам нужно сделать последний шаг, чтобы получить полноценную и полностью функционирующую систему. Нам необходимо представить концепцию параметризации типов с использованием набора информационных объектов в качестве формального параметра типа.
Вот наш Request
type переписан с учетом концепции параметризации:
Request {OPERATION : OpSet} ::= SEQUENCE
{
invokeId INTEGER,
opcode OPERATION.&operationCode ({OpSet}),
req-pars OPERATION.&InvocationParsType ({OpSet} {@opcode})
}
Теперь дескриптор синтаксиса передачи высокого уровня Request
может быть параметризован любым произвольным набором информационных объектов («интерфейс IDL»), соответствующим спецификации класса информационных объектов («грамматика IDL»).
Следовательно, теперь мы можем создать его экземпляр для любого набора информационных объектов следующим образом:
Request1 ::= Request{MyWarehouseOps}
Request2 ::= Request{MyOtherSetOfOps}
-- etc.
Предложение With SYNTAX
[ редактировать ]Предложение With SYNTAX фактически представляет собой крошечный грамматический язык, используемый для выражения способов синтаксического определения информационных объектов.
Рассмотрим следующий пример:
OPERATION ::= CLASS
{
&opcode INTEGER UNIQUE,
&InvocationParsType,
&ResponseParsAndResultType,
&ExceptionList ERROR OPTIONAL
}
WITH SYNTAX
{
OPCODE &opcode
REQUEST ARGUMENTS &InvocationParsType
RESPONSE ARGUMENTS &ResponseParsAndResultType
[ERRORS &ExceptionList]
}
Заключение в квадратные скобки ([]) означает необязательность синтаксических конструкций, содержащихся в [].
Опциональность может быть вложенной.
Токены, все с заглавной буквы, означают ключевые слова, токены, начинающиеся с &, означают продукцию, требующую замены соответствующего объекта вместо токена (значение, тип ASN.1 или набор информационных объектов, либо их экземпляр, либо ссылка), в зависимости от класса информационных объектов. к которому относится это поле.
Теперь то, что иначе мы бы написали так:
getCustomersNum OPERATION ::=
{
&operationCode get-customers-num-op-type-code,
&InvocationParsType Get-customers-num-req-pars-type,
&ResponseParsAndResultType Get-customers-num-ind-pars-type,
&ExceptionList { wrong-product | wrong-department }
}
при наличии предложения With SYNTAX можно переписать следующим образом:
getCustomersNum OPERATION ::=
{
OPCODE get-customers-num-op-type-code,
REQUEST ARGUMENTS Get-customers-num-req-pars-type,
RESPONSE ARGUMENTS Get-customers-num-ind-pars-type,
-- according to BNF in the WITH SYNTAX clause, the following line can be omitted
ERRORS { wrong-product | wrong-department }
}
Чтобы полностью понять концепцию грамматики, лежащую в основе предложения With SYNTAX, представьте, что мы написали определение класса информационных объектов OPERATION следующим образом:
OPERATION ::= CLASS
{
&opcode INTEGER UNIQUE,
&InvocationParsType,
&ResponseParsAndResultType,
&ExceptionList ERROR OPTIONAL
}
WITH SYNTAX
{
&opcode
&InvocationParsType
&ResponseParsAndResultType
[&ExceptionList]
}
Тогда соответствующий экземпляр информационного объекта для приведенного выше определения должен быть определен следующим образом:
getCustomersNum OPERATION ::=
{
get-customers-num-op-type-code
Get-customers-num-req-pars-type
Get-customers-num-ind-pars-type
{ wrong-product | wrong-department }
}
Ссылки
[ редактировать ]Сноски
[ редактировать ]Общий
[ редактировать ]- В этой статье используются материалы из OpenTTCN Wiki статьи «Классы информационных объектов (ASN.1)», лицензированной по лицензии GNU Free Documentation License.
Внешние ссылки
[ редактировать ]- РЕКОМЕНДАЦИЯ МСЭ-Т X.681 , Абстрактная синтаксическая нотация номер один (ASN.1): Спецификация информационного объекта
- ASN.1 Made Simple — дополнительные темы от OSS Nokalva