2. A Notação para Sintaxe Abstrata Um


ASN.1 ou Abstract Syntax Notation One é uma notação que permite definir tipos de dados simples e complexos e especificar valores que estes tipos podem assumir.

Os valores que são transmitidos podem ser de diversos tipos. Existem os tipos simples e outros, mais complexos, que são formados de vários tipos simples combinados. Cada tipo recebe uma denominação que o distingue, de forma inequívoca de todos os demais tipos. Algumas das maneiras de definir novos tipos são:

  1. uma sequência (ordenada) de tipos existentes
  2. uma sequência não ordenada de tipos existentes
  3. uma seleção de um dentre um conjunto de tipos

Estes são denominados tipos estruturados. Cada tipo recebe um rótulo ("tag"). Um mesmo rótulo pode ser atribuído a mais de um tipo cuja particular identificação será decidida pelo contexto em que o rótulo for usado.

Existem quatro classes de rótulos:

/----------------------------------------------------------------------\
|  TABELA A.1 Rotulo atribuídos na classe universal             
|								       |
|----------------------------------------------------------------------|
|  UNIVERSAL 1            | tipo booleano                              |
|  UNIVERSAL 2            | tipo inteiro                               |
|  UNIVERSAL 3            | tipo string de bits                        |
|  UNIVERSAL 4            | tipo string de octetos                     |
|  UNIVERSAL 5            | tipo nulo                                  |
|  UNIVERSAL 6            | tipo identificador de objeto               |
|  UNIVERSAL 7            | tipo descritor de objeto                   |
|  UNIVERSAL 8            | tipo externo                               |
|  UNIVERSAL 9-15         | reservados para adendos ao padrão   
|  UNIVERSAL 16           | tipo SEQUENCE e SEQUENCE-OF                |
|  UNIVERSAL 17           | tipo SET e SET-OF                          |
|  UNIVERSAL 18-22, 25-27 | tipos string de conjuntos de caracteres    |
|  UNIVERSAL 23-24        | tipo hora                                  |
|  UNIVERSAL 28-...       | reservados para adendos ao padrão   
\----------------------------------------------------------------------/

O valor do rótulo é especificado indicando-se sua classe e o número dentro da classe (que deve ser inteiro não negativo), em notação decimal.

As regras de codificação sempre conduzem o rótulo do tipo, explícita ou implicitamente, bem como alguma representação do valor do tipo.

ASN.1 ou Abstract Syntax Notation One e uma notação que permite definir tipos complexos e especificar valores destes tipos. As regras de codificação constituem outro padrão que aplicadas ao valor de um certo tipo definido pela ASN.1 resultam na especificação completa dos valores daquele tipo durante a transferência. As regras de codificação sempre forçam a transmissão do rótulo de um tipo, implícita ou explicitamente, juntamente com a representação do seu valor.

Supondo que a definição de um registro de funcionário tenha sido definido e recebido a denominação de DADOS-PESSOAL. Os campos pertinentes a tal tipo de registro poderiam ser como os seguintes:

Nome: Joao P. Silva
Cargo: Diretor
Numero: 51
Data de admissão: 17 de setembro de 1971
Nome da esposa: Maria Silva
Numero de filhos: 2

Informações sobre filhos
Nome: Rafael Silva
Data de nascimento: 11 de novembro de 1957
Informações sobre filho
Nome: Suzana Silva
Data de nascimento: 17 de julho de 1959

A descrição formal deste registro, usando a notação ASN.1 seria:

         Registro pessoal::- [APPLICATION 0] IMPLICIT SET
         { Nome,
           Cargo [0] ISO646 String,
           NumeroEmpregado,
           DataIngresso [1] Date,
           NomeEsposa   [2] Name,
           Filhos         [3] IMPLICIT SEQUENCE OF
                              InformaçãoFilho DEFAULT { }}

         Informaçãofilho::- SET
         { Nome,
           DataNascimento [0] Date}

         Nome ::- [APPLICATION 1] IMPLICIT SEQUENCE
          { Nome ISO646 String,
            Inicial ISO646 String,
            Sobrenome ISO646 String,
   
          NumeroEmpregado::- [APPLICATION 2] IMPLICIT INTEGER
          Date ::- [APPLICATION 3] IMPLICIT ISO 646 String -- AAAAMMDD
   
          O valor ou conteudo de um registro deste tipo seria:
          { nome "Joao", inicial "P", sobrenome "Silva"},

Os detalhes desta especificação serão apresentados na próxima sessão.