ASN.1情報オブジェクト クラスは、 CORBA/IDL 仕様で対処される問題と同様のプロトコル仕様に関連する問題に対処するために ASN.1仕様で広く使用されている概念です。
情報オブジェクト クラスは、たとえば ASN.1 で ROSE (Remote Operations Service Element) プロトコルを指定するために使用されます。
略語
この記事全体で使用されている略語:
- 1.1 の
- 抽象構文記法 1
- IOC
- 情報オブジェクトクラス
- iOS版
- 情報オブジェクトセット
- IO
- 情報オブジェクト
- 構文
- 構造化クエリ言語
- パー
- パックされたエンコーディング規則
- ベラルーシ
- 基本的なエンコードルール
- 国際言語
- インターフェース定義言語
- コルバ
- 共通オブジェクトリクエストブローカーアーキテクチャ
- 国際オプ
- インターネット ORB 間プロトコル
導入
ASN.1 情報オブジェクト クラスを最も簡単に考える方法は、リレーショナル データベース理論と特に SQL 構文から派生した概念を使用して、ASN.1 で IDL 仕様を表現する方法と見なすことです。
ASN.1 で使用される概念は、IDL で使用される概念よりも柔軟性が高く、類推を続けると、「IDL 仕様」の「文法をカスタマイズ」できます。ASN.1 エンコーディング ルールは、CORBA/IIOP に似たリモート呼び出しの転送構文として使用されます。
この比較を踏まえると、表 1 に示すように、情報オブジェクト クラスで使用される概念と SQL および IDL の概念の間には、おおよその類似点が見られます。
例による類推
表 2 は、ASN.1 の概念と SQL および IDL の同様の構成要素との対応を例で示しています。
パラメータ化
表 2 に示されている ASN.1 の例を注意深く調べ、IDL の概念と比較すると、ASN.1 側の重要な制限が 1 つあることがわかります。
高レベルの CORBA/IDL 転送構文仕様と比較することに合意した ASN.1 データ型の例は、IDL インターフェイス (ASN.1 用語では情報オブジェクト セット) と比較した単一のインスタンスに対してのみ、そのような転送構文の定義に制限されています。
言い換えれば、このような転送構文は汎用的ではなく、再利用できません。
現在知られているツールのセットでは、たとえば ASN.1 仕様 A でそのような転送構文を汎用的に定義し、それを A が依存しない具体的なアプリケーション固有の「IDL インターフェイス」を定義する ASN.1 仕様 B および C で再利用することはできません。
現在の制限の理由は、情報オブジェクト セット (MyWarehouseOpsの場合OPERATION、またはMyErrorSetの場合ERROR) が ASN.1 データ型 (高レベルの転送構文仕様) にハードコードされているためです。
ここで、完全かつ完全に機能するシステムを実現するために、最後のステップを踏む必要があります。情報オブジェクト セットを型の仮パラメータとして使用して、型パラメータ化の概念を導入する必要があります。
Requestパラメータ化の概念を念頭に置いて書き直した型は
次のとおりです。
リクエスト{ OPERATION : OpSet } ::= SEQUENCE { invokeId INTEGER ,
オペコードOPERATION . &operationCode ({ OpSet }),
req-parsオペレーション。&InvocationParsType ({ OpSet } { @ opcode }) }
現在、高レベルの転送構文記述子は、Request情報オブジェクト クラス仕様 (「IDL 文法」) に準拠した任意の情報オブジェクト セット (「IDL インターフェイス」) を使用してパラメーター化できます。
したがって、次のようにして任意の情報オブジェクト セットに対してインスタンス化できるようになりました。
リクエスト1 ::=リクエスト{ MyWarehouseOps }リクエスト2 ::=リクエスト{ MyOtherSetOfOps }
-- など
WITH SYNTAX句
WITH SYNTAX 句は、実質的には、情報オブジェクトの構文定義の方法を表現するために使用される小さな文法言語です。
次の例を考えてみましょう。
操作::=クラス{ &opcode INTEGER UNIQUE 、&InvocationParsType 、&ResponseParsAndResultType 、&ExceptionList ERROR OPTIONAL }構文{ OPCODE &opcode要求引数&InvocationParsType応答引数&ResponseParsAndResultType [エラー&ExceptionList ] }
角括弧 ([]) で囲まれた部分は、[] 内に含まれる構文構造がオプションであることを意味します。
オプションはネストできます。
すべて大文字のトークンはキーワードを意味し、& で始まるトークンは、このフィールドが参照する情報オブジェクト クラスに応じて、トークンの代わりに対応するエンティティ (ASN.1 値、タイプ、または情報オブジェクト セット、そのインスタンスまたは参照) を置き換える必要がある生成を意味します。
そうでなければ、次のように記述されます。
getCustomersNumオペレーション::= { &operationCode get-customers-num-op-type-code ,
&InvocationParsType Get-customers-num-req-pars-type 、
&ResponseParsAndResultType Get-customers-num-ind-pars-type 、
&ExceptionList {間違った製品|間違った部門} }
WITH SYNTAX 句が存在する場合は、次のように書き直すことができます。
getCustomersNumオペレーション::= { OPCODE get-customers-num-op-type-code ,
リクエスト引数Get-customers-num-req-pars-type 、
応答引数Get-customers-num-ind-pars-type 、
-- BNF に従って、WITH SYNTAX 句では、次の行を省略できます
ERRORS { wrong-product | wrong-department } }
WITH SYNTAX 句の背後にある文法概念を完全に理解するには、OPERATION 情報オブジェクト クラス定義を次のように記述したと想像してください。
操作::=クラス{ &opcode INTEGER UNIQUE 、&InvocationParsType 、&ResponseParsAndResultType 、&ExceptionList ERROR OPTIONAL }構文{ &opcode &InvocationParsType &ResponseParsAndResultType [ &ExceptionList ] }
上記の定義に対応する情報オブジェクトインスタンスは次のように定義されます。
getCustomersNumオペレーション::= { get-customers-num-op-type-code
顧客数と要件のパースタイプを取得
顧客番号とインデックスの取得タイプ
{間違った製品|間違った部門} }
参考文献
脚注
一般的な
- この記事は、GNU フリー ドキュメンテーション ライセンスに基づいてライセンスされた OpenTTCN Wiki 記事「情報オブジェクト クラス (ASN.1)」の資料を使用しています。
外部リンク
- ITU-T勧告X.681、抽象構文記法1(ASN.1):情報オブジェクト仕様
- ASN.1 を簡単に — OSS Nokalva の高度なトピック
