Třída informačního objektu (ASN.1) - Information Object Class (ASN.1)
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
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.
ASN.1 termín | Analogie v SQL | Analogie 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.
ASN.1 termín | Příklad ASN.1 | Analogie v SQL | Analogie 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 | 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 |
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 The The Poznámka 2. Znak @ (např. Poznámka 3. Příklad specifikace datových typů ASN.1 nedefinuje žádnou formální korespondenci mezi nimi 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ě ÚKON
nebo 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é
Reference
- Tento článek používá materiál z OpenTTCN Wiki článek "Třídy informačních objektů (ASN.1)" licencováno na základě licence GNU Free Documentation License.
externí odkazy
- DOPORUČENÍ ITU-T X.681 „Abstract Syntax Notation One (ASN.1): Specifikace informačního objektu
- ASN.1 Made Simple - Pokročilá témata od OSS Nokalva