Rechnernetze
Home Nach oben

Tagged Typen in ASN.1

In ASN.1 hat ein Tag die Aufgabe, einen Datentyp zu identifizieren. Dabei kann er zum einen benutzt werden, um einen Standardtyp auszuwählen (universal tag, siehe Tabelle), oder man unterscheidet innerhalb eines Moduls verschiedene Tags (application) oder in einer SEQUENCE oder SET (context-specific) oder innerhalb einer Anwendung bzw. Unternehmung (private-use). Um in einer Typspezifikation eine Tagnummer anzugeben, wird diese in eckigen Klammern hinter dem Zuweisungszeichen '::=' geschrieben.

  Typ1 ::= [APPLICATION 2] OCTET STRING
  Typ2 ::= [4] INTEGER
  Typ3 ::= [PRIVATE 4] BOOLEAN
  Typ4 ::= [2] IMPLICIT OCTET STRING

Beim Typ1 wurde das Schlüsselwort APPLICATION hinzugefügt. Damit wird eine neue Tagnummer vergeben, anhand derer der Wert eindeutig identifiziert werden kann. Beim Typ2 wurde dieses Schlüsselwort fortgelassen. Dieses bedeutet, dass es sich um ein kontext-abhängiges Tag handelt. Dürfen z.B. in einem CHOICE zwei verschiedene Werte verwendet werden, so lässt sich anhand der Tagnummer sofort erkennen, welcher Wert tatsächlich gespeichert ist.

Job ::= CHOICE{ [1] JobNumber INTEGER;
                 [2] JobName OCTET STRING }

Dies ist besonders dann wichtig, wenn beide Werte den gleichen Typ haben.

Temperature ::= CHOICE{ [1] DegreeCelsius INTEGER;
                        [2] DegreeFahrenheit INTEGER }

Beim Typ4 wurde das Schlüsselwort IMPLICIT verwendet. Es bedeutet, dass (innerhalb einer SEQUENCE) der Typ dieses Datums in der Kodierung (in BER) nicht erneut angegeben werden muss; er ist aus der Stellung des Datums implizit bekannt. Die abstrakte Syntaxnotation stellt offenbar auch sprachliche Mittel zur Verfügung, die eigentlich nur für die konkrete Syntax relevant sind.