Třída informačního objektu (ASN.1) - Information Object Class (ASN.1)

ASN.1 Třída informačního objektu je koncept široce používaný ve specifikacích ASN.1 k řešení problémů souvisejících se specifikací protokolu podobných problémům řešeným specifikacemi CORBA / IDL.

Třídy informačních objektů se používají například k určení protokolu ROSE (Remote Operations Service Element) v ASN.1.

Zkratky

Zkratky použité v tomto článku:

ASN.1
Abstract Syntax Notation One
MOV
Třída informačního objektu
IOS
Sada informačních objektů
IO
Informační objekt
SQL
strukturovaný dotazovací jazyk
ZA
Zabalená pravidla kódování
BER
Základní pravidla kódování
IDL
Jazyk definice rozhraní
CORBA
Společná architektura zprostředkovatele požadavků na objekty
IIOP
Internet Inter-ORB Protocol

Úvod

Nejjednodušší způsob uvažování o třídách informačních objektů ASN.1 je považovat je za způsob, jak reprezentovat specifikaci IDL v ASN.1 pomocí konceptů odvozených z teorie relačních databází a zejména syntaxe SQL.

Koncepty používané v ASN.1 jsou pružnější než koncepty používané v IDL, protože při pokračování v analogii umožňují „přizpůsobit gramatiku“ „specifikace IDL“. Pravidla kódování ASN.1 se používají jako syntaxe přenosu pro vzdálená vyvolání, která se podobají CORBA / IIOP.

Ve světle tohoto srovnání můžeme nakreslit přibližnou analogii mezi koncepty používanými ve třídách informačních objektů a koncepty SQL a IDL, jak je znázorněno v tabulce 1.

Tabulka 1: Analogie mezi koncepty ve třídách informačních objektů ASN.1, SQL a IDL
ASN.1 termínAnalogie v SQLAnalogie v IDL

Třída informačních objektů (IOC)

Deskriptor struktury tabulky SQL (příkaz CREATE TABLE)

Specifikace gramatiky IDL (pravidla BNF)

Deklarace pole IOC

Deskriptor sloupce tabulky SQL v příkazu CREATE TABLE (typ sloupce)

Výroba gramatiky IDL

Informační objekt (IO)

Řádek tabulky SQL (příkaz INSERT INTO)

Deklarace operace IDL

Definice pole IO

Buňka řádku tabulky SQL v příkazu INSERT INTO (hodnota buňky)

Část deklarace operace IDL, obvykle související s deklarací kódu typu operace, seznamu parametrů, návratové hodnoty operace nebo seznamu výjimek

Sada informačních objektů (IOS) (sbírka informačních objektů)

Kompletně definovaná tabulka SQL (kolekce řádků) (viz poznámka 1)

Definice rozhraní IDL (kolekce operací)

Datový typ ASN.1 využívající odkazy na pole IOC parametrizovaná pomocí IOS (obvykle soubor sémanticky souvisejících typů označujících požadavek, odpověď a výjimku, všechny parametrizované se stejným IOS)

-

Formát na vysoké úrovni (specifikace gramatiky) rámce (vyrovnávací vyrovnávací paměť) nesoucí požadavek, odpověď nebo výjimku CORBA

Pravidla kódování ASN.1 a syntaxe přenosu (BER, PER)

-

Nízkoúrovňové kódování požadavků, odpovědí a indikátorů výjimek vhodných pro fyzický přenos přes médium

Poznámka 1. Analogie mezi IOS a tabulkou SQL není zcela správná. SQL povoluje pouze jednu instanci tabulky daného typu (OPERACE v níže uvedeném příkladu), zatímco ASN.1 umožňuje více sad informačních objektů odvozených ze stejné třídy informačních objektů, což by mělo nejsprávněji souviset s více instancemi stejné tabulky v podmínky SQL (PROVOZ v níže uvedeném příkladu).

Analogie příkladem

Tabulka 2 ilustruje na příkladu korespondenci konceptů ASN.1 s podobnými konstrukcemi nalezenými v SQL a IDL.

Tabulka 2: Analogie mezi koncepty ve třídách informačních objektů ASN.1, SQL a IDL, ilustrovaná příkladem
ASN.1 termínPříklad ASN.1Analogie v SQLAnalogie v IDL

MOV

OPERATION :: = CLASS {& operationCode INTEGER UNIQUE, & InvocationParsType, & ResponseParsAndResultType, & ExceptionList ERROR OPTIONAL}
VYTVOŘIT STŮL ÚKON(operationCode celé číslo ne nula unikátní,InvocationParsType typ_info ne nula,ResponseParsAndResultType typ_info ne nula,Seznam výjimek ref_to_table(CHYBA))

(Viz Vysvětlení poznámky 1 typ_info a ref_to_table.)

To je přibližně analogické s částí popisu BNF některé pseudo-IDL syntaxe následující formy (všimněte si, že v následujících příkladech budeme používat skutečnou syntaxi IDL, spíše než imaginární definovanou níže BNF):

ÚKON ::= operationCode InvocationParsType ResponseParsAndResultType ExceptionListoperationCode ::= IntegerInvocationParsType ::= TypeResponseParsAndResultType ::= TypeExceptionList ::= CHYBA

kde Celé číslo výroba se vyřeší na celočíselnou hodnotu, Typ vyřeší odkaz na typ a Seznam výjimek vyřeší instanci sady informačních objektů odvozenou z CHYBA Třída informačního objektu (nebo seznam výjimek v případě IDL).

IO

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 | špatné oddělení}}
VLOŽIT DO ÚKON HODNOTY ( $get_customers_num_op_type_code, Get_customers_num_req_pars_type, Get_customers_num_ind_pars_type, Get_customers_num_exc_list )

(Tokeny začínající na $ se považují za proměnnou (např. V PHP) a budou nahrazeny skutečnou hodnotou proměnné.)

MyType1 getCustomersNum (v MyType2 par1, inout MyType3 par2, mimo MyType4 par3) vyvolává (ExcType1, ExcType2);

IOS

MyWarehouseOps OPERATION :: = {getCustomersNum | getPiecesNum | appendItem}

Tabulka SQL definovaná pomocí posloupnosti příkazů INSERT.

Rozhraní IDL (kolekce operací).

Datové typy ASN.1

Request :: = SEQUENCE {invokeId INTEGER, opcode OPERATION. & operationCode ({MyWarehouseOps}), vyžaduje OPERACE. & InvocationParsType ({MyWarehouseOps} {@opcode})} Response :: = SEQUENCE {invokeId INTEGER, opcode OPERATION. & operationCode ({MyWarehouseOps}), rsp-pars OPERATION. & ResponseParsAndResultType ({MyWarehouseOps} {@opcode})} Výjimka :: = SEKVENCE {CHYBA chybového kódu. & errorCode ({MyErrorSet}), err-body ERROR. & ErrorBody ({MyErrorSet} {@ err-code})}

(Viz poznámky 2, 3.)

-

Formát na vysoké úrovni rámce nesoucího požadavek, odpověď nebo výjimku CORBA.

BER, PER atd.

0110 0111 0010 110...

-

Nízkoúrovňové kódování požadavků, odpovědí a indikátorů výjimek.

Poznámka 1. The typ_info a ref_to_table Datové typy SQL jsou imaginární datové typy. V SQL neexistují a byly zavedeny uměle, aby lépe vysvětlily koncepty ASN.1.

The typ_info datový typ znamená, že jeho hodnota je odkazem na typ ASN.1.

The ref_to_table datový typ znamená, že jeho hodnota je odkazem na jinou instanci tabulky SQL (v tomto případě tabulka CHYBA). I když víme, že v reálném SQL nemůžeme mít více instancí stejné tabulky, představme si pro účely přesnosti našeho popisu, že to vlastně můžeme.

Poznámka 2. Znak @ (např. @opcode) definuje korespondenci mezi poli na základě sady informačních objektů používaných k parametrizaci daného datového typu. Například, @opcode říká, že pokud operační kód pole obsahuje určitou hodnotu, pak další pole SEQUENCE závislá na operační kód pole musí být v souladu s operační kód hodnota. V podmínkách SQL musí kombinace typů a hodnot, které tvoří legální instanci tohoto typu, patřit do jednoho řádku tabulky.

Poznámka 3. Příklad specifikace datových typů ASN.1 nedefinuje žádnou formální korespondenci mezi nimi Žádost, Odezva, a Výjimka typy, i když ÚKON Třída informačního objektu použitá ve všech třech typech definuje korelaci na sémantické úrovni mezi požadavkem, odpovědí a možnými chybovými podmínkami, zatímco definice operace IDL tak činí formálně.

Proto specifikace příkladu formálně nevynucuje žádné scénáře sekvence zpráv. Na rozdíl od definice operace IDL je korespondence mezi snímky nezávazná a je čistě sémantická, i když ji lze využít pomocí nástroje ASN.1 způsobem specifickým pro daný nástroj.

Parametrizace

Pokud pečlivě prozkoumáte příklad ASN.1 uvedený v tabulce 2 a porovnáte jej s koncepty IDL, uvidíte jedno důležité omezení na straně ASN.1.

Náš příklad datových typů ASN.1, které jsme se dohodli porovnat se specifikací syntaxe přenosu CORBA / IDL na vysoké úrovni, jsou omezeny na definici takové syntaxe přenosu pouze pro jednu instanci toho, co jsme porovnali s rozhraním IDL (Informační objektová sada v ASN .1 termíny).

Jinými slovy, taková syntaxe přenosu není obecná a není opakovaně použitelná.

Se současnou sadou známých nástrojů nemůžete definovat takovou syntaxi přenosu obecným způsobem, řekněme ve specifikaci ASN.1 A a poté ji znovu použít ve specifikacích ASN.1 B a C, které definují konkrétní IDL rozhraní specifická pro aplikaci „na kterém A nezávisí.

Důvodem současného omezení je, že aktuálně napevno kódujeme naši sadu informačních objektů (MyWarehouseOps v případě ÚKONnebo MyErrorSet v případě CHYBA) do našich datových typů ASN.1 (specifikace syntaxe přenosu na vysoké úrovni).

Nyní musíme udělat poslední krok, abychom měli kompletní a plně funkční systém. Musíme zavést koncept parametrizace typu pomocí sady informačních objektů jako formálního parametru typu.

Tady je naše Žádost přepsaný typ s ohledem na koncept parametrizace:

Žádost o {OPERATION: OpSet} :: = SEQUENCE {invokeId INTEGER, opcode OPERATION. & OperationCode ({OpSet}), req-pars OPERATION. & InvocationParsType ({OpSet} {@opcode})}

Nyní deskriptor syntaxe přenosu na vysoké úrovni Žádost lze parametrizovat libovolnou sadou informačních objektů („rozhraní IDL“), která odpovídá specifikaci třídy informačních objektů („gramatika IDL“).

Proto jej nyní můžeme vytvořit instanci pro libovolnou sadu informačních objektů takto:

Request1 :: = Request {MyWarehouseOps} Request2 :: = Request {MyOtherSetOfOps} - atd.

Klauzule WITH SYNTAX

Klauzule WITH SYNTAX je ve skutečnosti malý gramatický jazyk používaný k vyjádření způsobů syntaktických definic informačních objektů.

Zvažte následující příklad:

OPERATION :: = CLASS {& opcode INTEGER UNIQUE, & InvocationParsType, & ResponseParsAndResultType, & ExceptionList ERROR OPTIONAL} WITH SYNTAX {OPCODE & opcode REQUEST ARGUMENTS & InvocationParsType RESPONSE ARGUMENTS & Response ARGUMENTS & Response ARGUMENTS & Response

Příloha v hranatých závorkách ([]) znamená volitelnost syntaktických konstruktů obsažených v [].

Možnost lze vnořit.

Tokeny vše v kapitále znamenají klíčová slova, tokeny začínající & střední produkce vyžadující nahrazení odpovídající entity místo tokenu (hodnota ASN.1, typ nebo sada informačních objektů, jejich instance nebo reference), v závislosti na třídě informačních objektů na které toto pole odkazuje.

Nyní by to, co bychom jinak napsali, bylo:

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 | špatné oddělení}}

za přítomnosti klauzule WITH SYNTAX lze přepsat takto:

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, - dle na BNF v klauzuli WITH SYNTAX, lze vynechat následující řádek CHYBY {špatný produkt | špatné oddělení}}

Abychom plně porozuměli konceptu gramatiky za klauzulí WITH SYNTAX, představte si, že jsme naši definici třídy OPERATION Information Object Class napsali takto:

OPERATION :: = CLASS {& opcode INTEGER UNIQUE, & InvocationParsType, & ResponseParsAndResultType, & ExceptionList ERROR OPTIONAL} WITH SYNTAX {& opcode & InvocationParsType & ResponseParsAndResultType [& ExceptionList]}

Poté je třeba definovat odpovídající instanci informačního objektu pro výše uvedenou definici takto:

getCustomersNum OPERACE :: = {get-customers-num-op-type-code Get-customers-num-req-pars-type Get-customers-num-ind-pars-type {špatný-produkt | špatné oddělení}}

Viz také

ASN.1

Reference

externí odkazy