2017-04-20 5 views
1

Zum Beispiel, sagen wir mal ich so etwas wie folgt definieren:Unterstützt ASN.1 eine Form der Vererbung?

World-Schema DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN 
    Human ::= SEQUENCE { 
    name UTF8String, 
    first-words UTF8String DEFAULT "Hello World", 
    age INTEGER (1..150) OPTIONAL, 
    height INTEGER (120..200) 
} 
END 

Jetzt möchte ich eine ShortHuman definieren, die genau das gleiche ist aber height ist begrenzt auf 150. Kann ich wiederverwenden irgendwie die definierte bereits Human und verfeinern diese Beschreibung?

Antwort

2

Ich bin nicht sicher, wie Sie Vererbung definieren, aber man kann menschliche ShortHuman zu definieren wie folgt verwenden:

ShortHuman :: = Human (mit Komponenten {height (120..150)})

Dies wird die Höhe einschränken, wie Sie es wünschen.

Eigentlich ist es wahrscheinlich besser, die folgenden zu verwenden:

ShortHuman :: = Human (mit Komponenten {..., Höhe (120..150)})

Eine partielle Spezifikation nicht Legen Sie Einschränkungen für Komponenten fest, die nicht aufgeführt sind, während die vollständige Spezifikation (ohne ...,) optionale Komponenten, die nicht aufgeführt sind (wie z. B. das Alter), nicht enthalten würde.

+0

Vielen Dank. Genau das habe ich gesucht. Vielleicht ist die Vererbung in diesem Fall nicht der passendste Name. –

0

ASN.1 verwendet selbst nicht den Begriff "Vererbung". Anhang C, "Regeln für die Typ- und Wertkompatibilität" in X.680, behandelt die Beziehungen zwischen ASN.1-Typen, wenn Sie sie lesen möchten.

Sie könnten Parametrisierung verwenden Mensch und ShortHuman zu definieren, etwa so:

HumanBase { INTEGER : maxHeight } ::= SEQUENCE { 
    name UTF8String, 
    first-words UTF8String DEFAULT "Hello World", 
    age INTEGER (1..150) OPTIONAL, 
    height INTEGER (120..maxHeight) 
} 

Human ::= HumanBase { 200 } 

ShortHuman ::= HumanBase { 150 } 

Parametrierung ist eine häufig verwendete ASN.1-Funktion für „Wiederverwendung“ Definitionen, die einige Muster passen. Beachten Sie, dass Sie auch Parameter haben können, die Typen sind, so dass Sie als ungewöhnliches Beispiel für "Name" im Typ Mensch vs. Kurzmensch verschiedene Zeichenkettentypen verwenden könnten. X.683 umfasst die Parametrierung.