您的位置:标准吧 > 标准下载 > GB 16262.1 2006 信息技术 抽象语法记法 ASN.1 第1部分:基本记法规范6 L

GB 16262.1 2006 信息技术 抽象语法记法 ASN.1 第1部分:基本记法规范6 L

时间:2012-5-28 14:42:50 作者:标准吧 来源:GB 阅读:1233次
GB 16262.1 2006 信息技术  抽象语法记法  ASN.1 第1部分:基本记法规范6 L
 

    badgeNumber,,=<AcmeBadgeNumber>2345</AemeBadgeNumber>

2.12.5文本使用带各个标记的IMPLICIT通常只能在较早的规范中找得到。使用隐式置标记时,BER产生比使用显式时更不简洁的表达式。PER在两种情况下产生同样简洁的编码。用BER和显式置标记,已编码的数据中的重要类型(INTEGER、REAL、BOOLEAN,等等)具有更好的可视性。在这样做合法的示例中,这些指南采用隐式置标记。根据编码规则,这样可能产生在某些应用程序中非常渴望的简洁表达式。在其他应用中,例如,简洁可能没有进行强类型检查的能力重要。在后面的情况下,可以采用显式置标记。

    例:

    CustomerRecord:.= SET{

    name              [0] IMPLICIT VisibleString,

    mailingAddress    [1] IMPLICIT VisibleString,

    accountNumber     [2] IMPLICIT INTEGER,

    balanceDue        [3] IMPLICIT INTEGER一以分计一)

    CustomerAttribute::=CHOICE{

    name             [0] IMPLICIT VisibleString,

    mailingAddress   [1] IMPLICIT VisibleString,

    accountNumber    [2]IMPLICIT INTEGER,

    balanceDue       [3] IMPLICIT INTEGER  一以分计一)

    )

E.2. 12.6使用引用本部分的新ASN.1规范中的标记的指南十分简单:不要用标记。将AUTOMATIC TAGS放在模块头中,然后,不必管标记。如果你需要在后面的版本中增加新的成分给SET,SEQUENCE或者CHOICE,将它们加在末尾。

E.2.13选择

E.2.13.1用CHOICE来为从总数已知且适中的变量集中选择的变量建模。

    例;

    Fileldentifier,.=CHOICE{

    relativeName VisibleString,

    一文件名称(例如,“MarehProgressReport")

    absoluteName VisibleString,

    一文件名称并包含目录(例如,“<Williams>MarchProgressReport”)’

    serialNumber INTEGER

    一指派的系统的文件的标识符一)

    file Fileldentifier::=serialNumber.. 106448503

    Fileldentifier::=

    < Fileldentifier>

    < serialNumber >106448503</serialNumber>

    </Fileldentifier>

E.2. 13.2用可扩展CHOICE来为构成可能从协议的一个版本改变为另一个的变量集合中选择的变量建模。

    例:

    FiMdentifier::=CHOICE{  一Fileldentifier的第一版

    relativeName    VisibleString,

    absoluteName    VisibleString,

    )

    fileldl Fileldentifier::=relativeName. "MarchProgressReport. doc"

    fileldl::=

    < Fileldentifier>

    < relativeName>MarehProgressReport. doc</relativeName>

    </Fileldentifier>

在预料中:

    Fileldentifier.:=CHOICE{    - Fileldentifier的第二版

    relativeName    VisibleString,

    absoluteName    VisibleString,

serialNumber    INTEGER,  一第二版中增加的扩展附加

    )

    fileIdl FileIdentifier::=relativeName:”MarchProgressReport. doc"

    fileId2 FileIdentifier.:=serialNumber: 214

    iileldl::=

    < Fileldentifier>

    < relativeName>MarchProgressReport. doc</relativeName>

    < /Fileldentifier>

    Fileld::=

    < Fileldentifier>

    < serialNumber ~214~/serialNumber>

    </Fileldentifier>

且后来还有;

    Fileldentifier:.:= CHOICE{  - Fileldentifier的第三版

    relativeName    VisibleString,

    absoluteName    VisibleString,

   

    serialNumber    INTEGER,    一第二版中增加的扩展附加

    [[    一第三版中增加的扩展附加

    vendorSpecifie    VendorExt,

    unidentified    NULL

    ]],

    }

    fileldl Fihldentifier::=relativeName:”MarehProgressReport. doc"

    fileld2 Fileldentifier:1=serialNumber. 214

    fihId3 FileIdentifier::=unidentified: NULL

    fihldl::=

    < Fileldentifier>

    < relativeName>MarchProgressReport. doe</relativeName>

    < Fileldentifier>

    fileld2::=

    < Fileldentifier>

    < serialNumber >214</serialNumber>

    < FileIdentifier>

    fileld3::=

    < Fileldentifier>

    <unidentified/>

    </Fileldentifier>

E.2. 13.3预计在将来允许可能不止一种类型时,使用仅有一个类型的可扩展CHOICE.

  例:

    Greeting::一CHOICE{  --”Greeting”的第一版

    postCard    VisibleString,

    …,

    )

  在预料中:

    Greeting::=CHOICE{  -."Greeting”的第二版

    Postcard    VisibleString,

    …’

    [[2:.  一第二版中增加的扩展附加

    audio    Audio,

    video    Video

    ]],

    )

E.2. 13.4当选择值嵌套在另一个选择值内时,要求用多个冒号。

    例:

    Greeting.:=[APPLICATION 12] CHOICE(

    postCard  V.isibleString,

    recording    Voice}

    Voices:=CHOICE{

    english    OCTET STRING,

    Swahili    OCTET STRING}

    myGreeting Greeting:;=recording:English:’019838547E0'H

    myGreeting, 1 2”

    < Greeting>

    <recording><english>019838547 E0</english> </recording>

    </Greeting>

E.2. 14精选类型

E.2. 14.1  用精选类型为其类型是前面定义的CHOICE某些特定替换项的变量建模。

E.2. 14.2考虑定义:

    FileAttribute::=CHOICE{

    date-last-used  INTEGER,

    file-name    VisibleString

    然后,可能是下面的定义:

    AttributeList,:=SEQUENCE{

    first-attribute    date-last-used<FileAttribute,

    :

    second- attribute    file-name<FihAttribute)

    可能的值记法;

    listOfAttributes AttributeList::={

    first - attribute    27,

    second-attribute    ”PROGRAM”)

    listOfAttributes.::=

    < AttributeList>

    < first - attribute >27</first - attribute>

    < second- attribute >PROGRAM</second - attribute>

    </AttributeList>

E.2. 15窖体类别字段类型

E.2. 15.1  用客体类别字段类型来标识用信息客体类别(见GB/T 16262.2)定义的类型。例如,信息客体类别ATTRIBUTE的范围可用于定义类型、Attribute。

    例:

    ATTRIBUTE::=CLASS{

    &AttributeType,

    &attributeld    OBJECT IDENTIFIER UNIQUE

    )

    Attribute::=SEQUENCE{

    attributelD    ATTRIBUTE.&attributeld,  一这样通常是约束的

    attributeValue    ATTRIBUTE.&AttributeType.一这样通常是约束的

    }

    ATTRIBUTE.&attributeld和ATTRIBUTE.&AttributeType都是客体类别字段类型,因为它们是引用信息客体类别(ATTRIBUTE)定义的类型。因为类型ATTRIBUTE.&attributeld在ATTRIBUTE中显式地定义为OBJECT IDENTIFIER,因此它是固定的。然而,类型ATTRIBUTE.&-AttributeType能携带用ASN.1定义的任何类型的值,因为其类型在信息客体类别ATTRIBUTE的定义中没有固定。具有能携带任何类型值的这一特性的记法称为“开放类型记法”.即t ATTRIB-

UTE.&AttributeType是开放类型。

E.2. 16嵌入式pdv

E.2.16.1用嵌入式pdv类型来为其类型没有规定、或在不限制用来规定类型的记法的其他地方规定的变量建模。

    例

    FileContent::=EMBEDDED PDV

    DocumentList.: ----SEQUENCE OF document EMBEDDED PDV

E.2.17外部

    外部类型与嵌入式pdv类型相似,但是标识选择更少。新规范通常更愿意使用嵌入式pdv,因为其更大的灵活性和用某些编码规则对其值进行编码更有效的事实。

E.2.18单一实例

E.2. 18.1  用单一实例规定包含客体标识符字段和其类型是客体标识符确定的开放类型值的类型。如果用从TYPE-IDENTIFIER(见GB/T 16262.2的附录A和附录C)衍生来的类别的信息客体规定客体标识符值和类型之间的联系,只采用单一实例类型:

    例:

    ACCESS-CONTROL-CLASS::=TYPE-IDENTIFIER

    Get-Invoke::=SEQUENCE(

    objectClass    ObjectClass,

    objectlnstance    Objectlnstance,

    accessControl  INSTANCE OF ACCESS-CONTROL-CLASS,--这样通常是受

约束的。

    attributelD        那么,调用相当于:

    )

ATTRIBUTE.&attributelD

    Get-Invokell—SEQUENCE{

    ObjectClass -    ObjectClass,

    ObjectInstance    Objectlnstance,

    AecessControl    [UNVERSAL 8] IMPLICIT SEQUENCE{

    type-id    ACCESS-CONTROL-CLASS.&id,  一这样通常是受约束的。

    Value    [0] ACCEKS-CONTROL-CLASS.Type    -这样通常是受约束的。

    },

    attributeID ATTRIBUTE.&attributeId

      )

    单一实例类裂的真实效果要到用信息客体集合约束它才能看到,但是这样的示例超出了本部分的范围,信息客体集合的定义见GB/T 16262.3,而怎样用信息客体集合约束单二实例类型见GB/T 16262.3的附录A。

E.2.19相对客体标识符

E.2.19.1用相对客体标识符类型来在巳知客体标识符值的早期部分的上下文中以更简洁的形式转送客体标识符值。可能出现三种情况t

    a)客体标识符值的早期部分对给定规范(这是一个特定工业标准,而且所有的OIDs是相对于分配给标准化成员体的OID的)是固定的。这时,使用。RELATIVE-OID一相对客体标识符值是相对于{iso identified-organization set(22))

    b)  客体标识符值的早期部分常常是在规范的时间内已知的值,但是,通常可能是更通用的值.

    这时,使用:

    CHOICE

    {aRELATIVE-OID一值是相对{1 322)一,

    bOBJECT IDENTIFIER一任意客体标识符值一)

    c)客体标识符值的早期部分直到通信时才知道,但是,常常将是许多需要发送的值共同的,而且在规范时间总是已知的值。这时,使用,

    SEQUENCE

    { oid-root    OBJECT IDENTIFIER DEFAULT{1  3  22},

    Reloids SEQUENCE OF RELATIVE-OID   -相对于odi-root--}

E.3标识抽象语法

E.3.1常常用语义与单个ASN.1类型(在选择类型时典型)的每个值相关来定义协议。(该ASN.1类型有时非形式地引用为“应用的顶层类型”。)抽象值的集合形式上称为应用的抽象语法。抽象语法能通过给它一个ASN.1类型客体标识符的抽象语法名来标识。

E.3.2  能用GB/T 16262.2中定义的固有信息客体类别ABSTRACT-SYNTAX完成抽象语法的客体标识符赋值。这也用来清楚地标识应用层的顶层类型。

E.3.3下面是可能在应用规范中出现的文本示例:

    例:

    Application-ASNl DEFINITIONS::=

BEGIN

EXPORTS Application-PDU;

Application -PDU ::=CHOICE{

          eonnect-pdu  ......  ,

          data-pdu CHOICE{

……,

………,

    END

    Abstract-Syntax-Module DEFINITIONS::=

    BEGIN

    IMPORTS Application -PDU FROM Application -ASNl;

  ..    一本应用定义下面的抽象语法:

    Abstract-Syntax ABSTRACT-SYNTAX::=

    ( Application -PDU IDENTIFIED BY

    application-abstract-syntax-obj ect-id

    application-abstract-syntax-object-id OBJECT IDENTIFIER::=

    {jolnt-iso-itu-t asnl(1) examples(123) application-abstract-syntax(3))

    一对应的客体描述符是:

    application -abstract-syntax-descriptor ObjectDescriptor::=

    ”Example Application Abstract Syntax"

    一ASN.1客体标识符和客体描述符值:

    一一编码规则客体标识符

    一一编码规则客体描述符

    一指派给GB/T 16263.1或GB/T 16263.2的编码规则能用作和

    一这一传送语法一起的传送语法标识符。

    END

E.3.4  为了保证能互工作,标准可能额外地标识一个强制传送语法(典型是,GB/T 16263.1或GB/T 16263.2或ISO/IEC 8825-3的编码规则中定义的那些之一)。

E.4子类型

E.4.1  用子类型限制特殊情况下允许的现存类型的值。

    例;

    AtomicNumber:1=INTEGER (1.. 104)

    TouchToneString::=IA5String

    (FROM(”0123456789"│”*”│”#”))  (size(1..63))

    ParameterListt:=SET SIZE (1.. 63) OF Parameter

    SmallPrime.: =INTEGER (2j31517111113L 17119123129)

E.4.2用可扩展子类型约束来为允许的值集小且很好定义了,但预计会增加的INTEGER类型建模。

    例:

    SmallPrimet, =INTEGER(2 │3,…)一SmallPrime的第一版

在预料中:

    SmallPrime,,=INTEGER(2│3,...,5│7│11)

    一SmallPrime的第二版的

且以后还有;

    SmallPrime l l=INTEGER(2│3,...5│7│11│13│17│19)

    - SmallPrime的第三版

    注:对于某些类登,某些编码规则(如PER)为子类型约束扩展根值(即:。…”之前出现的值)提供极好的优化编码,而为子类型约束扩展附加值(即。“…”之后出现的值)提供较少的优化编码,而在某些其他编码规则(如BER)

    中子类型约束不影响编码..3当两个或多个相关的类型有重要共性时,考虑显性定义其共同的双亲为一个类型而对单独的类型使用子类型。这样使其关系和共性清楚,并鼓励(尽管不强迫)这样随类型发展而继续进行。因此,他便于采用处理这些类型的值的共同实现方法。

    例

    Envelope::=SET{

    typeA TypeA,

    typeB    TypeB    OPTIONAL,

    typeC    TypeC    OPTIONAL}

    一共同的双亲

    ABEnvelope::= Envelope (WITH  COMPONENTS

    {…,

    typeB PRESENT,  typeC ABSENT})

    一typeB必须总是出现,而typeC不能出现

    ACEnvelope,,=Envelope (WITH  COMPONENTS

    {.,.,

    typeB  ABSENT,  typeC PRESENT})

    - typeC必须总是出现,而typeB不能出现

    后者的定义能用下面的表达式替换。

    ABEnvelope::=Envelope (WITH COMPONENTS {typeA, typeB})

    ACEnvelope::=Envelope (WITH COMPONENTS{typeA, typeC})

    根据双亲类型中成分数量、以及那些可选择的数量、个体类型之间差异的程度和可能发展的策略等因素考虑替换项之间的选择。  .

E.4.4用子类型来部分地定义值,例如,在测试仅关心PDU的某些成分时,一致性测试中用来测试的协议数据单元。

    例。

    Given:

    PDU::=SET

    {alpha    INTEGER,

    beta    IA5String  OPTIONAL,

    gamma    SEQUENCE OF Parameter,

    delta    BOOLEAN)

    那么在要求布尔为假和整数为负的综合测试中,写作:

    TestPDU:: =PDU(WITH COMPONENTS

    {…,

    delta(FALSE),

    alpha(MIN.. <0)))

    而进一步,如果IASString,beta出现,而且长度为5或12个字符,则写成:

FurtherTestPDU:::TestPDU (WITH COMPONENTS{…,beta (SIZE(5 1 12》PRESENT

E.4.5如果一般目的数据类型已经被定义为

类型.

    例:

SEQUENCE OF,用子类型来定义一般类型的受限制子

    Text-blockz,=SEQUENCE OF VisibleString

    Address::=Texvblock(SIZE(l.. 6)) (WITH COMPONENT (SIZE (1.. 32)) )

E.4.6如果一般目的数据类型已经被定义为CHOICE,用子类型来定义一般类型的受限制子类型。

    例:

    Z::=CHOICE{

    a    A,

    b    B.

    c    C.

    d    D,

    e    E

    )

    V::=Z (WITH COMPONENTS{…,aABSENT,bABSENT))-a和b必须缺失,

    -c,d或e可在值中出现.

    W.-=Z (WITH COMPONENTS{...,a PRESENT))一只有a能出现(见47.8.9.2).

    X,.=z(WITH COMPONENTS{a PRESENT})-只有a能出现(见47.8.9.2).

    Y,:=z(WITH COMPONENTS{a ABSENT, b,c})  -  a.d和e必须缺失,

    -b或c可在值中出现。

    注sW和X语义相同.

E.4.7用包含的子类型来从现存的子类型中形成新子类型。

    例2

    Months..=ENUMERATED{

    january    (1)’

    february    (2),

    march    (3),

    april    (4),

    may    (5).

    june    (6)’

    july    (7),

    august    (8)’

    september    (9)’

    october    (10),

    november    (11),

    december    (12))

    First-quarter:: =Months(january│february│march)

 

Second-quarter::= Months (april (may │june)

Third-quarter. ::=Months (july [ august│september)

Fourth-quarter::= Months (october │november│december)

First-halt::=  Months(First-quarter] Second-quarter)

Second-halt::= Months(Third-quarter [ Fourth-quarter)

 

附录F

(资料性附录)

ASN.1字符串的辅导附录

F.1 ASN.1中的字符串支持

F.I.1  在ASN.1中有四个字符串支持组。这四个组是;

    a)  基于与转义序列一起使用的编码字符集的ISO国际登记(即:基于GB/T 1988的结构)和相关编码字符集国际登记的,以及类型VisibleString、IA5String、TeletexString、VideotexString、GraphicString和GeneralString提供的字符串类型}

b)  基于GB/TI3000.1的,用有GB/T 13000.1中定义的子集的UniversalString、UTF8String或BMPString类型的分成子集或用已命名字符提供的字符串类型

    c)提供本部分中规定的字符的简单小集的,以及预定特殊用途的字符串类型.这些是Numeric-String和PrintableString类型,

    d)使用类型CHARATER STRING,与所用的字符集协商(或宣称使用的集)’它允许实现采用赋给了OBJECT IDENTIFIERs(包括与转义序列一起使用的编码字符集的ISO国际登记)、ISO/IEC 7350、GB/T 13000.1的字符集和编码的任意集合,以及字符和编码的专用集合(文件可能强制要求或限制所用的字符集·字符抽象语法)。

F.2 UnlversalString,UT瑚String和BMPString类型

F.2.1  UniversalString和UTF8String类型携带取自GB/T 13000.1的任何字符。GB/T 13000.1中的字符集对于所要求的意义相一致的场合通常太大,而且正常情况下,应该分成GB/T 13000. 1--1993附录A中字符的标准集合组合的子集。

F.2.2 BMPString类型携带取自GB/T 13000.1基本多文种平面的任何字符。正常情况下,基本多文种平面应该分成GB/T 13000.1附录A中字符的标准集合组合的子集。

F.2.3对于GB/T 13000.1附录A中定义的集合,存在固有ASN.1模块“ASNI-CHARACTERMODULE~(见第38章)中定义的类型引用。“子类型约束”机制允许定义现存子类型组合的UniversalString的新子类型。

F.2.4在ASNI-CHARACTER-MODULE中定义的类型引用的示侧与它们对应GB/T 13000.1的汇集名是:

    BasicLatin    BASIC LATIN

    Latin-1 Supplement    LATIN-1 SUPPLEMNT

    LatinExtended-a    LATIN EXTENDED-A

    LatinExtended-b    LATIN EXTENDED-B

    IpaExtensions    IPA EXTENSIONS

    SpacingModifierLetters    SPACING MODIFIER LETTERS

    CombiningDiacriticalMarks    COMBINING DIACRITICAL MARKS

 F.2.5    GB/T 13000.1规定三个“实现级一,并要求GB/T 13000.1的所有用法规定实现级。

    实现级与为字符汇中组合用字符给出支持的程度有关,因此,用ASN.1术语,定义UniversalString和BMPString受限字符串类型的子集。

    在1级实现中,不允许组合字符,而且通常ASN.1字符串中的抽象字符与串的物理表现中的打印字符一一对应。

    在2级实现中,可以使用某些组合用字符(列于GB/T 13000.1附录B中),但是也有禁止其使用的其他情况。

    在3级实现中,不限制使用组合用字符。

F.2.6用如下的子类型记法能限制BMPString和UniversalString排除所有的控制功能:

VanillaBMPString::=BMPString(FROM (ALL EXCEPT({0,0,0,0)..{0,0,0,31)

    {O,O,O,128)一{0,O,O,159))))

    或相当的:

    CO::= BMPString(FROM({0,0,O,0}..{0,0,0,31)))  -CO控制功能

    CI::= BMPString(FROM({O,O,O,128)..{0,0,0,159}》  - C1控制功能

    VanillaBMPString::----BMPString (FROM (ALL EXCEPT (CO I Cl》)

F.3关于GB/T 13000.1一致性要求

    使用ASN.1类型定义中UniversalString、BMPString或UTF8String(或其子类型)要求指出GB/T 13000.1的一致性要求。

    这些一致性要求需要使用这种ASN.1类型的标准(例如X)实现者为其标准X的实现提供GB/T 13000.1合适的子集和实现级(支持组合字符)的声明。

    使用规范中UniversalString、BMPString或UTF8String的ASN.1子类型要求实现支持那个ASN.1子类型中包括的全部GB/T 13000.1字符,也就是,实现的合适子集中(至少)出现那些字符。也要求对所有那种ASN.1子类型支持陈述的级。

    注;ASN.1规范(缺少抽象语法参数和例外规范)确定被传输的(最大)字符集和收到后进行处理的(最小)字符集.被采用的GB/T 13000.1的集要求不传输超过这个集的字符,而且收方支持这个集内的所有字符,因此.采用的集要求确切地是ASN.1规范允许的所有字符的集.下面讨论抽象语法有参数的情形。

F.4对ASN.1用户的GB/T 13000.1--致性建议

    ASN.1用户应该清楚,如果满足他们的标准的实现,将形成采用的实现子集(和要求的实现水平)的GB/T 13000.1字符集。

    通过定义包含标准需要的所有字符的UniversalString、UTFSString或BMPString的ASN.1子类型可以方便地完成这一任务,如果合适的话,并通过限制它到“Level l"或“Level 2"。这个类型的方便名字可能是“ISO-10646-String"。

    例:

    ISO-10646-String::=BMPString

    (FROM (Level2 INTERSEL-'TION(13aaicLatin UNION HebrewExtended UNION Hiragana)) )

    一一这是定义为实现级实现该标准采用的子集中字符最小集的类型。

    一要求该次至少是2级。

    在OSI环境中,OSI协议实现一致性声明那时将包含一个简单的声明:采用的GB/T 13000.1子集是“IS&10646-String"定义的、有限子集(和级),而且,“ISO-10646- String”(可能分成了子类型)将在包含ISO/IEC 10646-1串的整个标准中使用。

    EXAMPLE COMFORMANCE STATEMENT

    采用的GB/T 13000.1子集是由模块<模块名称>中定义的ASN.1类型“ISO-10646-String"中的所有字符组成的i有限子集,悬布2级实现。

    EXAMPLE USE IN PROTOCOL

    Message::= SEQUENCE{

first-field ISO-10646-String,  一采用子集中的所有字符会出现

second--field ISO-10646-String

   (FROM (latinSmallLetterA.. latinSmallLetteZ))-只有小写拉丁字母

   Third-field ISO-10646-String,(FROM  (digitZero  digiNine))-只有数字)

F.5 用子集作为抽象语法的参数

 GB/T13000.1要求显示地定义采用的自己和级数。当ASN.1用户不希望约束被定义标准的某些部分的GB/T13000.1字符字段时,这可以通过定义ISO-10646-String(例如)为UniversalString BMP String 的子类集,它们带由(或包括)留下作为抽象语法的参数的ImportantorsSubset构成的子类型约束。

   告诫ASN.1用户,在这样的情况下,合格的发送者不能被接受者处理的字符给合格的接收者,因为他们处于接受者(实现依赖)采用的子集或级数之外,同时建议在这样的情况下,ISO-10646-String定义中包括里外处理规范。

 例:

ISO-10646-String{UniversalString:ImplementorsSubset,ImplementorsLevel}::= UniversalString(FROM((ImplementorsSubse UNION BasicLain)

INTERSECTION ImplementationLevel)!characterSetProblem)

  __GB/T 13000.1采用的子集应包括“BasicLatin”但可能也包括抽象语法参数。

---“ImplementorsSubset”中规定的任何附加字符。抽象语法参数“ImplementorsLevel”

---定义实现级数。合格的接受者必须准备接收它采用的子集和实现级数之外的字符。

---这时,调用关于“characterSetProblem”的第<这里增加你的章号>章规定的另外处理。

---注意,如果通信实例中采用的实际字符限制为“BasicLatin”

---合格的接收者从不可能调用它。

---my Level2 String ::=ISO 10646 String{{HebrewExtended UNION Hiragana,}level2}

 

F6CHARACTER STRING 类型

F6.1

 F6 CHARACTER STRING 类型给出字符集的选择和编码方法中的完整灵活性

注:当单个连接提供端到端数据传送(无中锋)时,而且使用ISO协议,那么,所用的字符集协商及其编码能作为字符抽象语法的ISO表达式上下文的定义的一部分完成。否则,由一对客体标识符值声明抽象和传送字符语法(字符表和编码)

F 6.2 在形式术语中,字符抽象语法是对可能值(它们是所有字符串,而且确实是取自字符的某些集合形成的所有字符串)有某些限制的抽象语法。因此,对字符抽象和传送语法的客体标识符值的分配以普通的方式进行。

F.6.3 CHARACTER STRING编码要声明所用字符汇中的抽象和传送语法(即,字符集和编码)在OSI环境中,这两种语法都可能协商。

F.6.4 字符抽象语法(和对应的字符传送语法)已经在许多我国标准,ITU-T建议和国际标准中定义,而且任何能分派客体标识符的组织能定义附加字符抽象语法(和/或字符传送语法)。

F.6.5 在GB/T 13000.1中,具有为整个字符集合,为每个子集(BASIC  LATIN,BASIC SYMBOLSN 等等)定义的字符集合,以及为字符集合定义的每个肯能组合所定义的字符抽象语法(和分派的客体标识符)。还定义了两个字符传送语法来标识GB/T 13000.1中的各种选择(特别是16位和32位)

 

附录G

(资料性附录)

类型扩展ASN.1的辅助附录

G.1概述

0.1.1 ASN.1类型可能会随着时间的过去通过称为扩展附加的系列扩展的手段从extension root类型转变而来。

G.1.2能进行特定实现的ASN.1类型可能是扩展根类型,或可能是扩展根类型加一个或多个扩展附加。每个这种包含扩展附加的ASN.1类型也包含所有前面定义的扩展附加。

G.1.3将本系列中的ASN.1类型定义说成是相关扩展(“相关扩展”的更精确定义见3.6.32),而且要求编码规则以下面的方式对相关扩展类型编码。如果两个系统使用相关扩展的两个不同类型.在两个系统之间的转换将成功地传送两个系统共同的相关扩展类型那部分的信息内容。也要求不属于两个系统共同的那部分能解除限制并在后面的传输中重新传输(也许对第三方),倘若使用相同的传送语法.

    注,发送者可能用扩展附加系列中较旱或者较晚的类型.

G.1.4逐步增加根类型获得的系列类型称为扩展系列。为了这些编码规则有合适的准备来传输相关扩展类型(可能要求行里有多位),这种类型(包括扩展根类型)需要语法上加标志。标志是一个省略号(…),并称作扩展标志。

    例:

  Extension root type    lstnextension    2ndextension    3rdextension

    A:,=SEQUENCE{A::=SEQUENCE{A:,=SEQUENCE{  A,,=SEQUENCE{

    a INTEGER,    a INTEGER,    a INTEGER,    a INTEGER,

…'

b BOOLEAN,      b BOOLEAN,    b BOOLEAN,

 

c INTEGER         c INTEGER,    c INTEGER,

                 d SEQUENCE{   d SEQUENCE{  d SEQUENCE{

                               e INTEGER,  e INTEGER,

 

 

                                          g BOOLEAN OPTIONAL,

                                            h BMPString,

                  f IA5String

 

                                               f IA5String

 

                          )

                                 )

G.1.5将序列、集和选择类型中的所有扩展附加插入在扩展标志对之间。允许有单个扩展标志,只要(在扩展根类型中)它在类型中作为最后一项出现,这时,假设一个匹配的扩展标志正好在类型的结束括号之前存在I在这些情况下,将所有扩展附加插入在类型的末尾。

G.1.6有扩展标志的类型能嵌套在没有的类型内,或能嵌套在扩展根中的类型内,或者能嵌套在扩展附加类型内.在这些情况下,应独立地对待扩展系列,而且有扩展标志的被嵌套类型没有与它嵌套其中的类型相冲突。在任何规定的结构中只能出现一个扩展插入点(如果使用单个扩展标志,则在类型末尾,或者如果使用一对扩展标志,则刚好在第二个扩展标志之前)。

G.1.7单个扩展附加组(一个或多个嵌套在“[[艄]]修内的类型)或单个加在扩展插入点上的类型的术语中定义了扩展系列中的新扩展附加。在下面的示例里,第一种扩展定义了扩展附加组,其中b和c必须在类型“A"的值中同时出现或同时缺失。第二种扩展定义了单个成分类型d,它可能在类型“A”的值中缺失。第三种扩展定义了扩展附加组,其中只要值中出现新增加的扩展附加组,h必须在类型“A”的值中出现。

    例l

  Extension root type    1“extension2nd extension    3d extension

    A::=SEQUENCE{A::一SEQUENCE{A:,=SEQUENCE{  A.,=SEQUENCE{

    a INTEGER,    a INTEGER,    a INTEGER,    a INTEGER,

                          [[            [[   [[

    b BOOLEAN,    b BOOLEAN,    b BOOLEAN,

                       c INTEGER      c INTEGER      c INTEGER

]]                   ]]              ]]

                                        d SEQUENCE {  d SEQUENCE {

                                           e INTEGER,      e INTEGER,

  

                                                             ]],      

                                             

                                    f IASStriag    g BOOLEAN OPTIONAL,

                                                    h BMPString,

                                                   f IASString

    )

    )

G.1.8也可能为版本括号增加新的版本号,但是只有它出现在模块内的所有括号中,而且只有模块中的所有扩展在版本括号内时才如此.建议使用版本号.省略号码和版本括号的能力是历史的原因.(本部分的较早版本中不允许有版本括号和版本号。)(也见G.3。)

G.1.9随着时间的过去,对扩展附加将增加正常实用时,重要的ASN.1模块和规范不包括时间。如果一个能通过扩展附加从另一个“生成”,则这两个类型是相关扩展。也就是,一个包含另一个的所有成分。可能有在相反方向(尽管不太可能)“生成”的类型.随着时间的过去,它甚至可能是一个以许多逐步删去的扩展附加开头的类型。ASN.1及其编码规则关注的一切是一对扩展规范是否是相关扩展。如果它们是,那么所有ASN.1编码规则保证它们的用户之间能互工作。

G.1.10我们从一个类型开始,然后,如果我们后来要扩展它,决定是否要与较早的版本实现互工作。如果是的话,我们要包含现在的扩展标志。然后,我们能增加后面的扩展附加给带通过较早的系统定义好处理扩展值的类型。然而,注意增加一个扩展标志给以前没有(或删去扩展标志)的类型可能阻碍互工作。

    注:当使用ECN时,在第二版中可能在第一版中没有扩展标志的地方增加扩晨,而且,在第一版与第二版之间仍然保持互工作.

G.1.11表G.1表明能形成ASN.1扩展系列的扩展根类型的ASN.1类型,以及那一类型(当然,连续或作为扩展组一起能够成多扩展附加)允许的单个扩展附加的性质。

表G.1  扩展附加

    扩展根类型

    扩展附加性质

 

ENUMERATED

 

在。AdditionalEnumeration一后面附加单个进一步枚举,用比已经增加的任何枚举的都大的枚举值

 

SEQUENCE和SET

 

在。ExtensionAdditionList”后面附加单个类型或扩展附加组,是扩展附加(不包含在扩展附加组中)的。ComponentType”不要求被标志OPTIONAL或DEFAULT.尽管这将是经常发生的情况

CHOICE

在"ExtensionAdditionAiternativesList”后面附加单个。NamedType”

约束记法

将草个“AdditionalElementSetSpec”附加刭“ElementSetSpees”记法中

 

G.2版本号的意义

G.2.1在BER和PER编码中不使用版本号。由ECN规范确定它们在ECN编码中的用途(如果有的话).

G.2.2当它们与解码完整PDU的方式而不是与单个的类型相关时版本号最有用,类型用作几个协议的成分并且因此贡献给不同的完整PDU时,那个类型的附加通常要求增加它贡献的所有PDU的版本号.

G.2.3当用来提供被开发系统间的互工作时,版本号应该以下面的方式用在扩展附加组被开发的系统有带给出版本号(不管它们在协议内哪里出现)的所有扩展附加组的语法和语义知识,以及带较早版本号的所有扩展附加组的知识。ECN规定者通常将假设已经按照这一原则分配了版本号(给适用于ECN的类型的所有部分)。

G.3编码规则要求  .

G.3.1  抽象语法能定义为可扩展类型的单个ASN.1类型的值。然后,它含有所有能用加上或删去扩展附加获得的值。这样的抽象语法称作相关扩展抽象语法。

G.3.2相关扩展抽象语法的很好形成的编码规则集满足G.3.3至G.3,5中描述的附加要求。

    注;所有ASN.1编码规则满足这些要求.

G.3.3将抽象值转换成编码来传输和将收到的编码转换成抽象值的程序定义应该认识到,发送者和接收者使用不等同,但均为相关扩展的抽象语法的可能性。

G.3.4在这种情况下,编码规则应保证发送者有比接收者在扩展系列中较早的类型规范时.发送者的值应该以接收者能确定扩展附加不出现的方式传送。

G.3.5编码规则应该保证发送者有比接收者在扩展系列中更晚的类型规范时,应能将那个类型的值传送到接受者。

G.4(可能可扩展的)约束的组合

G.4.1模块

G.4,1,1应用约束的基本ASN.1模块是简单的:类型是抽象值集,而且加在其上的约束选择这些抽象值的子集.如果未约束的类型是不可扩展的,那么产生的类型如果且只有所应用的约束被定义为可扩展的时才定义为可扩展的。。

G.4.1.2即使在这种简单的情况下,要澄清一个特点.类型可能在形式上可扩展,即使从来不可能有任何扩展附加。考虑-A::= INTEGER (MIN—MAX,...,I.. 10)

    像本附录中给出的许多示倒一样,这是没人曾经写过的东西,但是哪个工具零售商都必须写代码,因为ASN.1标准给出的是简单和通用的,而因此,这个示例是合法的ASN.1。在这个示倒中,A在形式上是可扩展整数,芳具有根中整数值的整个范围.

G.4.1.3复杂性的三个主要来源;,.

    一约束应用于已经有可扩展约束作用于它的类型(约束的系列应用——见G.4.2)

    ——用UNION和INTERSECTION和EXCEPT组合可扩展约束(集算法——见G.4.3)

    一当类型引用去引用可扩展类型时(也许有实际扩展附加——见G.4.4),使用约束的集算法中的类型引用(包含的子类型)。

G.4.2约束的系列应用

G.4.2.1  当类型受到约束(在类型引用的赋值中)和类型引用随后与应用于它的进一步约束一起使用时,出现约束的系列应用。.

G.4.2.2当类型以系列的方式有多种约束直接应用于它时,它也能出现,但是不常见。本附录中的很多示例采用后面的形式,但是类型引用链接两个(或多个)约束的情况是实际规范中通常出现系列应用的形式。

G.4.2.3在约束的系列应用中有以下两个重点,    ,

    ——如果受约束类型是可扩展的(和也许已扩展的),如果随后系列应用进一步约束,则丢弃“可扩展”标志和所有扩展附加。受约束类型(和任何扩展附加)的可扩展性仅仅依赖于所用的最后约束,能只引用要进一步受约束(双亲类型)的类型的根中的值。在根中或结果类型的扩展附加中包含的值只能是双亲类型根中的值。

    ——约束的系列应用(对复杂的情况)与集算法交叉不一样,即使在不包括可扩展性时也如此.首先,解释MIN和MAX的环境,其次是能在第二个约束中引用的抽象值在系列应用中与规定

    两个约束为取自共同双亲的交叉值时的情况完全不同.

    注:在整数类型的约束中使用20.. 28这样的范围是合法的,如果(也只有)20和28都在双亲类筮(根)中,但是该范围规范引用的值仅仅是双亲(根)中的那些.因此,如果已经约束拌除值24和25,则范圈20..28只引用20至23和26至28.

    下面有一些示例:

    A1::=INTEGER (I 32,-,,33.. 128)

    一A1是可扩展的,并且包含值l至218,1至32在根中,而且33至128作为扩展附加.

    B1 ,,=AI(1..128).

    一或相当的

    BI::=INTEGER(1..32,…,33.. 128) (1.. 128)

    一这些是非法的,因为128不在双亲类型中,当进一步约束它时失去它的扩展附加

    B2::=A1(1..16)

    一这是合法的.B2不是可扩展的,而且包含1至16。

    A2::=INTEGER( I.. 32) (IIN.. 63)

    --MIN是1,而63是非法的。

    A3., =INTEGER((1..32)  INTERSECTION (MIN.. 63》

    一这是合法的。MIN是负无穷,而A3包含1至32。

G.4.3使用集算法

G.4.3.1结果在很大程度上凭直觉,并遵循交叉、联合和集差(EXCEPT)的通常数学规则。特别是,交叉和联合都是可交换的,即:

     《some set l of values> INTERSECTION <some set 2 0f values>

     《some set 2 0f values>INTERSECTION< some set l ot values>

对于UNION类似地一样。

G.4.3.2可交换性是真实的,不管什么值集是可扩展的,也不管出现什么扩展附加。

G.4.3.3  如果交叉不能使扩展附加值存在将出现误解。这与INTEGER (MIN.. MAX.…)情况类似。

G.4.3.4例如:

    A::一INTEGER((1..256,... ,B)  INTERSECTION (1.. 256》

    -A总是(只)包含值1..256,不管B包含什么值,但是在形式上仍然可扩展。

G.4.3.5记住这点也很重要:在进一步、且包含的子类型失去其可扩展性和扩展附加时,只要双亲类型失去其可扩展性和扩展附加,集算法中直接规定的值集既不失去其可扩展性也不失去其扩展附加。

G. 4.3.6由集算法产生的值集可扩展性规则已在46.4和46.4中清楚地陈述了,而且不依赖于集算法是否可能产生实际的扩展附加。

G.4.3.7这里,为了完整而总结了规则,其中用E指明有“可扩展”标志集的值集,用N指明在形式上无可扩展的值集。用R指明每个集的根中的值,用R指明扩展附加(若有的话),而且为每种情况给出产生的内容。

    注1:为了本附录的目的,并为了简化说明,如果值集不是可扩展的,那么我们将它的各个值都描述为根值.

    注2:如果系列应用约束中使用的值的任何产生集的根是空,这是非法的规范。

    注3 :为避免在下面冗长,在“扩展附加”更正确的地方使用“扩展”.

G.4.3.8这些规则是:

    N1 INTERSECTION N2=>N

    Root, R1 INTERSECTION R2

    N1 INTERSECTION E2=>E

    Root:R1 INTERSECTION R2, Extensions. R1 INTERSECTION X2

    E1 INTERSECTION E2=>E

              Root, R1 INTERSECTION R2, Extensions:((R1 UNION Xl)

                       INTERSECTION

                        (R2 UNION XZ)

                         EXCEPT

                        (R1 INTERSECTION R2)

    N1 UNION N2=>N

        Root, R1 UNION R2

    N1 UNION E2=>E

        Root. R1 UNION R2, Extensions. X2

    E1 UNION E2 =>E

        Root, R1 UNION R2, Extensions: (R1 UNION Xl UNION R2 UNION X2)

    EXCEPT

    (RI UNION R2)

    N1 EXCEPT N2=>N

         Root. R1 EXCEPT R2

    NI EXCEPT EZ=>E

         Root., RI EXCEPT R2

    E1 EXCEPT N2=>E

         Root. R1 EXCEPT R2, Extensions.. (Xl EXCEPT R2)

    (R1 EXCEPT R2)

    E1  EXCEPT E2-->E

          Root: R1 EXCEPT R2, Extensions: (X1EXCEPT (R2 UNION X2)

    EXCEPT

    (R1EXCEPTR2)

    N1…N2=>E

          Root: R1, ExtensionstR2 EXCEPT R1

    E1N2一>E

          Root: R1, ExtensionszXl UNION R2

    EXCEPT

    R1

    N1... E2=>E

             Root, R1, Extensions: R2 UNION X2

    EXCEPT

    R1

    E1...E2= >E

            Root. R1, Extensions: Xl UNION R2 UNION E2

    EXCEPT

    R1

    注:如果值的可扩展集的集算法结果没有实际的扩展附加,或者甚至决不可能有实际扩晨附加(不管什么扩展附加加到可扩展输人上),对于上面的结果E,其结果在形式上仍然被定义为可扩展的.

G.4.4包含的子类型可能是可扩展的,也可能不是可扩展的,但是当它用在集算法中时,它常常当作不可扩展的来处理,而且所有它的扩展附加被丢弃。

附录H

(资料性附录)

ANS.1记法总结

在第11章中定义的下列词法项:

    typereference

    identifier

    valuereference

    modulereference

    comment

    empty

    number

    realnumber

    bstring

    hstring

    cstring

    “true”

    "false"

    “::="

    "[[“

    “]]” 

    “..”

    ¨  … ”

”</”

”/>”

¨{"

¨)¨

“(”

“]”

"[“

”:”

”=”

“””(QUOTATION MARK)

" '" (APOSTROPHE)

" " (SPACE)

 “;”

 “@”

 “│”

 “^”

ABSENT

ABSTRACT-SYNTAX

ALL

APPLICATION

AUTOMATIC

BEGIN

BIT

BMPString

BOOLEAN

BY

CHARACTER

CHOICE

CLASS

COMPONENT

COMPONENTS

CONSTRAINED

CONTAINING

DEFAULT

DEFINITIONS

EMBEDDED

ENCODED

END

ENUMERATED

EXCEPT

EXPLICIT

EXPORTS

EXTENSIBILITY

EXTERNAL

FALSE

FROM

GeneralizedTime

GeneralString

GraphicString '

IASString

IDENTIFIER

IMPLICIT

IMPLIED

IMPORTS

INCLUDES

INSTANCE

INTEGER

INTERSECTION

IS0646String

MAX

MIN

MINUS-INFINITY

NULL

NumericString

OBJECT

ObjectDescriptor

OCTET

OF

OPTIONAL

PATTERN

PDV

PLUS-INFINITY

PRESENT

PrintableString

PRIVATE

REAL

RELATIVE-OID

SEQUENCE

SET

SIZE

STRING

SYNTAX

1233
国家标准下载

下载说明:
1.请先分享,再下载
2.直接单击下载地址,不要使用“目标另存为”
3.压缩文件请先解压
4.PDF文件,请用PDF专用软件打开查看
5.如果资料不能下载,请联系本站
最新评论
发表评论
大名:
联络: QQ 或者 邮箱
内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。

验证码: 4874