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

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

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

注2:第38章定义了指明类型BMPString(和UniveralStrlng及UTF8String)和1ASString的单个字符(大小为l的串)的许多“valuereference”。

    例如,假设当字符“乏”不能在现有媒体中表示时,我们希望为UniversalString规定“abeZdef"的值,该值也能表示如下:

    IMPORTS BasicLatin, greekCapitalLetterSigma FROM ASNl-CHARACTER-MODULE{joint-iso-itu-t asnl(1)  specification(0)  modules(0) is010646(0));

    MyAIphahet::=UniversaiString (FROM (lhsicLatin │greekCapitalLetterSigms》

    mystring MyAlphabet.:---{”abe”,greekCapitalLet terSigma,”def”}

注3:当规定UniversalString, UTF8String或BMPString类型的值时,除非能解决有类似形状的不同图形字符出现的歧义性,否则不应采用“estring"记法。

    例如t不应使用下面的“cstring”记法,因为在BASIC LATIN、CYRILLIC和BASIC GREEK字母表中出现图

    形符号’H’、’0’、’P’和’E‘并且是有歧义的。

    IMPORTS BasicLatin, Cyrillic, BasicGreek FROM ASNI-CHARACTER-MODULE

    {joint-iso-itu-t asnl(1)  specification(0)  modules(0) isoi0646(0)11

    MyAlphabett:= UniversalString (FROM (BasicLatin l Cyrillic J BasicGreek))

    mystring MyAIphabet:.=‘‘HOPE”

    无歧义定义mystring的替换项将是;

    mystring MyAlphabet (BasicLatin)::=”HOPE"

    形式上.mystring是MyAlphabet的子集的值的值引用,但是,它能通过附录B的值映射规则用于MyAlphabet内这个值需要值引用的任何地方.

记法是:

37. 11  在“CharsDefn”中的“DefinedValue”应该是引用那个类型的值。

37. 12在“Plane”、“Row"、“Cell”产生式中的“number'应该小于256,而在“Group,,产生式中,它应该

小于128。37. 13“Group”规定.UCS编码范围中的一个组,“Plane”规定组内的平面,“Row”规定平面内的行,“Cell”规定行内的字符元。这个记法标识的抽象字符是“Group”、“Plane”、“Row,,和“Cell”值规定的字符元的抽象字符。在所有情形中,允许的字符集可用分成子类型限制。

    注,当使用像GencralString、GraphicString和UniversalString等没有应用约束的开放,结尾字符串类型时,应用设计者应该仔细考虑一致性暗示.像TeletexString等有界但大的字符串类型,也需要有关一致性的详细文本。

37. 14在“TableColumn”产生式中的“number”应该是0到7的范围,而“TableRow”产生式中的“number”应该是o到15的范围。“TableColumn”规定符合GB/T 2311图1的字符代码表的列,“TableRow”规定其中的行。当代码表包含第O列和第1列中的登记登录1,以及第2列至第7列中的登记登录6时,这一记法仅用于IASString(见与转义序列使用的编码字符集的ISO国际登记)。

37. 15  BMPString是有自身唯一标记和只包含GB/T 13000.1的基本多文种平面(那些对应最先64K-2字符元的,其编码用来表示基本多文种平面之外的字符的少量字符元)中的字符的UniversalString的子类型。它有如下定义的相关类型:

    UniversalString(Bmp)

    其中Bmp在ASN.1模块ASNI-CHARACTER-MODULE(见第38章>中定义为对应GB/T 13000.1附录A中定义的“BMP'’集名称的UniversalString的子类型。

    注1。由于BMPString是固有类型,它没有在ASNI-CH ARACTER-MODUI,E中定义。

    注2t定义BMPSt ring为固有类型是为了使没有约束的编码规则(如BER)能用16位而不是32位编码。

    注3:在值记法中,所有的BMPString值是有效的UniversatString和UTFSString值.

37.16  UTFSString在抽象层是和UniversalString同义的,而且能用于使用UniversalString的地方(符合要求不同标记的规则),但是它有不同的标记,并且是不同的类型。

    注,BER和PER使用的UTF8String的编码与UniversalString的不同,而且,对于大部分文本将少有多余的词。

38   CB/T 13000.1中定义的命名字符和集

    本章规定包含取自GB/T 13000.1的每个字符的值引用名定义的ASN.1固有模块,其中,每个名称引用编号为1的UniversalString值。这个模块也包含为取自GB/T 13000.1的每个字符集的类型引用名称的定义,其中每个名称引用UniversalString类型的子集。

    注:这些值可用于UniversalString类型及其衍生的类型的值记法。在38.1规定的模块中已定义的所有值和类型引用都输出.而且必须通过采用他们的任意模块引入。

38.1  ASN.1模块“ASNl-CH ARACTER-MODULE"的规范

    该模块没有在这里全部打印,而是规定定义它的方法。

38.1.1模块以下列为开始:

    ASNl-CHARACTER-MODULE {joint-iso-itu-t asnl (1)  specification (0)modules (0)

    is010646(0)}

    DEFINITIONS::=BEGIN

    一本模块内定义的所有值引用和类型引用隐式输出,

    一而且用任何模块引入。

    一GB/T 1988控制字符:

    nul  IASString;:={0,O}

    soh  IASString::={0,1}

    stx  IASString::={0,2)

    etx  IA5String::={0,3}

    eot  IASString::={0,4)

    enq  IASString::={0,5)

    ack  IA5String::={0,6}

    bel  IA5String::={0,7)

    bs  IA5String::={0,8)

    ht  IA5String::={0,9)

    If  IA5String。:=(,0, 10)

    vt  IASString::={0, 11}

    ff  IA5String::={0, 12}

    cr  IA5String;;={0, 13)

    SO  IASString::=(0, 14}

    si  IA5String::={0, 15)

    die  IA5String::={1,0}

    dcl lA5String::={1,1)

    dc2  IASString::={1,2)

    de3  IA5String::={1,3}

    de4  IA5String::={1,4}

    nak  IASString::={1,5)

    syn  IA5String::={1,6)

    etb  IASString::={1,7)

    can  IA5String:;={1,8}

    em  IA5String::={1,9}

    sub  IA5String;:={1, 10)

    esc  IA5String::={1, 11}

    is4  IA5String;;={1, 12)

    is3  IAgString::={I, 13}

    is2  IASString::={I, 14)

    isl  IA5String::={1,15)

    del  IA5String t:={7,15)

38. 1.2对于GB/T 13000.1中第24章和第25章中给出的图形字符(glyphs)的字符名称的每个列表中的每个登录,模块包含形式陈述:

    <namedcharacter>BMPString::=<tablecell>

    一一表示字符<is010646name>,见GB/T 13000.1

    其中:

    a)  <is010646name>是从GB/T 13000.1中列出的一个表衍生出来的字符名称;

    b)< namedcharacter>通过应用38.2中规定的程序到<is010646 name>获得的串;

    c)  < tablecell>是对应列表登录的GB/T 13000.1中表字符元中的图形字符。

    例如;

    latinCapitalLetterA BMPString::={0,0,0,65)

    --表示字符LATIN CAPITAL LETTER A,见GB/T 13000.1

    greekCapitalLetterSigma BMPString l l;{0,O,3,163)

    一表示字符GREEK CAPITAL LETTER SIGMA,见GB/T 13000.1

38. 1.3对GB/T 13000.1附录A中规定的图形字符的集的每个名称,形式模块中包含陈述:

    <namedcollectionstring>l:一BMPString

    (FROM 《alternativelist》)

    一表示字符集<collectionstring>,

    一见GB/T 13000.1。

  其中

  a)<colleetionstring>是在GB/T 13000.1中指派的字符集的名称l

  b)  < namedcollectionstring>通过应用38.3的程序到<collectionstring>形成的;

  c)  < alternativelist>是像为GB/T 13000.1规定的每个字符在38.2中产生的一样,通过使用<namedcharacter>形成的。产生的类型引用,< namedcollectionstring>,形成了有限的子集。(见附录F中的指南)

  注:有限子集是规定子集中的字符表。它与选择的子集相反,是GB/T 13000.1附录A中列出的字符集加BASIC

    LATIN集。

  例如(部分):

space BMPString

exclamationMark BMPString

quotationMark BMPString   ::={0, O, 0,3 2}

tilde BMPString          ::={O, O, 0,3 3}

BasicLatin: : = BMPString   ::= {0, O, O, 34}

         (FROM (space      ::= {0, O, O, 126}

    I exelamationMark

    I quotationMark

    I..:    一等等

    J tilde).t

    )

    一表示字符BASIC LATIN集,见GB/T 13000.1。

    ~本示例中的圆括号用来简化并且是“等等”的意思;

    一不能在实际的ASN.1模块中这样使用。

38.1.4    GB/T13000.1定义实现的三个级。默认情况下,由于这些类型没有对使用组合字符的限制,

故在ASNl-CHARACTER-MODULE中定义的所有类型,除“Levell”和“Level 2”外,都符合3级实现。“Level l”指明要求1级实现,“Level 2”指明2级实现,而“Level 3"指明3级实现。因此,ASNlCHARACTER-MODULE中定义了下列内容:

    Levell::=BMPString  (FROM  (ALL EXCEPT CombiningCharaeters》

    Level2:1=BMPString  (FROM  (ALL EXCEPT CombiningCharactersType-2》

    Level3::=BMPString

    注1:“CombiningCharacters”和“CombiningCharactersType-Z”是分别对应于GB/T 13000.1附录A中定义的“COMBINING CHARACTERS’’和“COMBINING CHARACTERS 13-2”的<namedcollectionstring>.

    注2:“Levell”和“Level2”将用于"IntersectionMark”(见第46章)之后或作为"ConstraintSpec”中唯一的约束.(示倒觅附录E.2.7.I。)

注3:有关本内容的更多信息见附录F.2.5。

38. 1.5模块以下面的语句结束:

    END

38.1.6用户定义的,和38.1.3中的示例相当的是:

    BasicLatin::一BMPString(FROM (space.. tidle))

一表示字符BASIC LATIN集,见GB/T 13000.1。

38.2  <namedcharacter>是采用<is010646name>(见38.1.2)和应用下列算法获得的串;

    a)  <isol0646name>的每个大写字母转换成对应的小写字母,除非大写字母是以SPACE开头,此时,大写字母保持不变;

    b)  每个数字和每个HYPHEN-MINUS保持不变;

    c)  删除每个SPACE。

    注:上面的算法,和GB/T 13000.1附录K中的字符命名指南一起将总是为GB/T 13000.1中列出的各个字符名产生无歧义的值记法,

    例如:取自GB/T 13000.1的O行60字符元,被命名为“LESS-THAN SIGN”并且有图形表达式“<”的字符能用less-thanSign的“DefinedValue”引用。

38.3<namedcollectionstring>是采用<collectionstring>和应用下列算法获得的串:

    a)    GB/T 13000.1集名的每个大写字母转换成对应的小写字母,除非大写字母是以SPACE开头或它是名字的第一个字母,此时,大写字母保持不变;

    b)  每个数字和每个HYPHEN-MINUS保持不变;

    c)  删除每个SPACE。

    例如:

    1  在GB/T 13000.1附录A中定义为BASIC LATIN的集有ASN.1类型引用BasicLatin

    2  由BASIC LATIN集中的字符以及BASIC ARABIC集构成的字符串类型能被定义为:

    my-Character-String.:=BMPString (FROM (BasicLatin I BasicArabic》

    注:上面的结构是必需的,因为明显的更简单结构

    my-Character-String,,一BMPSuing (FROM (BasicLatia I BasicArabic))

    将只允许是整个BASIC LATIN或BASIC ARABIC,而不是二者混合的串.

39字符的正则顺序

39.1  为了“ValueRange”分成子类型并为编码规则可使用,为UniversaiString、UTFSString、BMP-String,NumericString, PrintableString, VisibleString和IA5String规定了字符的正则顺序。

39.2仅仅因为本章,字符和代码表中的字符元一一对应,不管那个字符元被赋予字符名称或者形状,也不管它是控制字符还是印刷字符、组合还是非组合字符。

39.3抽象字符的正则顺序由GB/T 13000.1的32位表达式中其值的正则顺序定义,正则顺序中小数字首先出现和大数字最后出现。

39.4在“PermittedAlphabet”记法(或个别字符)内“ValueRanges"的结束点能用模块ASNl-CHAR-ACTER-MODULE中定义的ASN.1值引用或(这时,图形符号在规范上下文和用来表示他的媒体中是无歧义的)通过给出“cstring”中的图形符号(38.1中定义了ASNl-CHARACTER-MODULE),或通过采用37.8的“Quadruple”或“Tuple”记法规定。

39.5对于BMPString,字符元的正则顺序定义(见GB/T 13000.1)为:

    256.(行号)十(字符元号)

    整个字符集准确地包含256*256个字符。在“PermittedAlphabet”记法内(或单个字符)的“ValueRange”结束点能用模块ASNl-CHARACTER-MODULE中定义的ASN.1值引用或(规范的上下文中图形符号明确时)在“cstring"中给出图形符号来规定。不能将一个字符元规定为范围的结束点或者没有名字或图形符号赋给那个字符元时标识单个字符。

39.6对NumericString,从左到右逐步增加的正则顺序定义(见37.2的表7)为:

    (间隔)0  1  2 3 4 5 6 7 8 9

    整个字符集精确地包含11个字符。“ValueRange”(或单个字符)的结束点能用“cstring”中的图形符号规定。

    注:这个顺序与GB/T 13000.1中BASIC LATIN集中对应字符的顺序一致。

39.7对于PrintableString,从左到右和从顶到底逐步增加的正则顺序定义(见37.4的表8)为:

    (SPACE)  (APOSTROPHE)  (LEFT PARENTHESIS)  (RIGHT  PARENTHESIS)

(PLUS SIGN)  (COMMA) (HYPHEN-MINUS)  (FULL STOP)  (SOLIDUS)  0123456789 (COLON) (EQUAL SIGN) (QUESTION MARK)  ABCDEFGHUKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz

    整个字符集精确地包含74个字符。“ValueRange”(或单个字符)的结束点能用“estring”中的图形符号规定。

    注.这个顺序与GB/T 13000.1中BASIC LATIN集中对应字符的顺序一致。

39.8  对于VisibleString,字符元的正则顺序根据GB/T 1988编码(称为GB/T 1988 ENCODING)定义为。

    (GB/T 1988 ENCODING)- 32

    注:即,正则顺序与GB/T 1988代码表的字符元2/0至7/14中的字符一样。

    整个字符集精确地包含95个字符。“ValueRange”(或单个字符)的结束点能用“cstring”中的图形符号规定。

39.9对于IA5String,字符元的正则顺序根据GB/T 1988编码定义为:

    (GB/T 1988 ENCODING)

    整个字符集精确地包含128个字符。“ValueRange”(或单个字符)的结束点能用“cstring”中的图形符号或38.1.1中定义的GB/T 1988控制字符值引用规定。

40无限制字符串类型的定义

    本章定义类型值是任何字符抽象语法值的类型。在OSI环境中,该抽象语法可能是OSI定义的上下文集的一部分。否则,可为使用无限制字符串类型的每个实例直接引用。

    注1 l抽象字符语法(及一个或多个对应的字符传送语法)可由能分配ASN.1  0BJECT IDENTIFIERS的任何组织定义。

    注2.利益相同产生的外形通常将确定对CHARACTER STRING规定实例或实例组所支持的字符抽象语法和字符传送语法。在OSI应用中,它通常应包括OSl协议实现一致性声明(PICS)中引用所支持的语法。

40.1  无限制的字符串类型(见3.6.76)应该用记法“UnrestrictedCharacterStringType”引用:

    UnrestrictedCharacterStringType::=CHARACTER STRING

40.2该类型的标记是通用类别,编号为29。

40.3类型由表示下列内容的值组成:

    a)可能但不必是ASN.1字符串类型的值的字符串值;和

    b)  以下的标识(单独或一起):

       1)字符抽象语法;和

       2)字符传送语法。

40.4无限制字符串类型有相关类型。用该相关类型来支持其值和子类型记法。

40.5为值定义和分成子类型的相关类型(假设是自动标记环境)是(有标准注解):

    SEQUENCE{

    identification    CHOICE{

    syntaxes         SEQUENCE{

    abstract         OBJECT IDENTIFIER,

    transler         OBJECT IDENTIFIER)

    一抽象和传送语法客体标识符一,

    syntax           OBJECT IDENTIFIER

    一标识抽象和传送语法的单个客体标识符一.

    presentation-context-id    INTEGER

    一(仅适用于OSI环境)

    一协商的OSI表示上下文标识抽象和传送语法一

    context -negotiation    SEQUENCE{

    presentation-context-id

    trander-syntax

一(仅适用于OSI环境)

    一进程中的上下文协商、表示上下文标识符只标识抽象语法,

    一因此,应该规定传送语法一一

    transfer-syntax    OBJECT IDENTIFIER

    一值的类型(例如,是ASN.1类型的值的规范)由应用    ·

    一设计者固定(因此,发送者和接受者都了解).一

    一提供这一情况主要是支持ASN.1类型的选择一范围一加密(或其他编码转换)一

    fixed    NULL

    一数据值是固定ASN.1类型的值(因此,发送者和接受者都了解)一)

data-value-descriptor    ObjectDescriptor OPTIONAL

    一这样提供值的类别的人可读标识一

string-value                  OCTET STRING)

( WITH COMPONENTS{

……,

    data-value-descriptor  ABSENT))

    注:无限制字符串类型不允许包含与“identification”一起的“data-value-descriptor”值,然而,这里提供的相关类型

    的定义强调嵌入式pdv类型,外部类型与无限制字符串类型之间存在的共性。

40.6正文的33.6和33.7也适用于无限制字符串类型。

40.7值记法应该是相关类型的值记法,其中类型OCTET STRING的string-value成分的值表示使用“identification”中规定的传送语法的编码。

    UnrestrictedCharacterStringValue .1= SequenceValue一在40.5中定义的相关类型的值

一在40.5中定义的相关类型的值

40.8在附录E.2.8中给出了无限制字符串类型的示例。

41  第42至44章中定义的类型的记法

41.1  引用42至44章中定义的类型的记法应该是:

    UsefulType::=typereference

    其中,“typereference”是42至44章中用ASN.1记法定义的之一。

41.2每个“UsefulType"的标记在42至44章中规定。

42通用时间

42,1这一类型应该用下面名称引用:

    GeneralizedTime

42.2该类型由表示下列内容的值组成:

    a)如GB/T 7408定义的日历日期I和

    b)一天的时间,除值24不能用于小时外,精确到GB/T 7408中定义的任何程度;和

    c)  如GB/T 7408中定义的当地时差因素。

42.3该类型可用ASN.1定义如下:

    GeneralizedTime I:=[UNIVERSAL 24] IMPLICIT VisibleString

    带有“VisibleString丹的值限制在下面字符串之一:

    a)如GB/T 7408规定的、表示日历日期的串,用四位数字表示年,二位数字表示月和二位数字表示日.不使用分隔号,后随GB/T 7408中规定的表示一天时间的串,没有分隔号,而有十进制逗号或日期(如GB/T 7408中提供的),也没有终止符Z(如GB/T7408中提供的);或

    b)上面a)中的字符后面紧接大写字母Z;或

    c)上面a)中的字符后面紧接表示当地时间差的字符串,如GB/T 7408中规定的,没有分隔符。在a)的情况下,时间应表示当地时间。在b)的情况下,时间应表示国际协调时。在c)的情况下,如a)情况形成的串部分表示当地时间(f,),而时差(幻)能按下列方法确定国际协调时:

    国际协调时是t1----t2

    例如:

    情况a):

    “19851106210627.3”表示当地时间1985年11月6日下午9时6分27.3秒。

  情况b):

    “19851106210627.3Z”是上述的国际协调时。

    情况c):

    ”19851106210627.3-0500”表示例a)中的当地时间,当地时间比国际协调时晚5个h。

42.4标记应该如41.3中定义。

42.5值记法应该是42.3中定义的“VisibleString”的值记法。

43世界时间

43.1  该类型应该用下列名称引用:

    UTCTime

43.2该类型由表示下列内容的值组成:

    a)  日历日期;和

    b)精确到一分或一秒的时间;和

    c)  (可选择)与国际协调时不同的当地时间。

43.3该类型用ASN.1定义如下:

    UTCTime::=[UNIVERSAL 23]IMPLICIT VisibleString

    带有“VisibleString"的值限制为下面平行放置的字符串:

    a)  六位数字YYMMDD,其中,YY是公元年号的后两位数,MM是月份(一月记为01).DD是月中的日(Ol至31),和

    b)下面二者之一:

    1)  四位数字hhmm,其中hh是小时(oo至23),mm是分(oo至59);或

    2)  六位数字hhmmss,其中,hh和mm如上面1)中的时间,ss是秒(00至59):和

    c)下面二者之一:

    1)字符Z;或

    2)字符十或一之一,后随hhmm,其中hh是小时,mm是分。

    上面b)中的替换项允许改变时间规范内的精确度。

    在替换项e)l)中,时间是国际协调时。在替换项c)2)中,上面a)和b)规定的时间(f,)是当地时间;上面c)2)规定的时差(屯)能使国际协调时按下列来确定;

    等同的世界时间是t1----t2

    例1:如果当地时间是1982年1月2日上午7时,而国际协调时是1982年1月2日中午12时,

UTCTime值是二者之一:

    ——”8201021200Z”l或

    ——”8201020700-0500”。

    例2:如果当地时间是2001年1月2日上午7时,而国际协调时是2001年1月2日中午12时,UTCTime值是二者之一:

    ——”0101021200Z“:或

    ——“0101020700-0500“。

43.4标记应该如43.3中定义。

43.5值记法应该是43.3中定义的“VisibleString”的值记法。

44客体描述符类型

44.1该类型应该用下列名称引用:

    ObjectDescriptor    .

44.2该类型由用来描述一个客体的人们可读的文本组成。文本不是客体的无歧义标识,但是不问客体的相同文本并不常见。

    注一建议将类型OBJECT lNDENTIFIER值赋给客体的权威机构也应该将类型ObjectDescriptor的值赋给那个客体。

44.3该类型用ASN.1定义如下:

    ObjectDescriptor::=[UNIVERSAL 7] IMPLICIT GraphicString

    “GraphicString”含有描述客体的文本。

44.4标记应该如44.3中定义。

44.5值记法应该是44.3中定义的“GraphicString刀的值记法。

45受约束类型

45.1“ConstrainedType”记法允许对(双亲)类型加以约束,约束其值集为双亲的某些子类型或(在集合或序列类型内)规定成分关系适用于双亲类型的值,以及同一集合或序列值中某些其他成分的值。它也允许有与约束有关的例外标识符。

    ConstrainedType::=

    Type Constraint   

    TypeWithConstraint

    在第一个替换项中,双亲类型是“Type”,而且该约束由45.6中定义的“Constraint”规定。第二个替换项在45.5中定义。

45.2当“Constraint"记法紧接单一集合或单一序列类型记法之后时,它适用于(最里面的)单一集合或单一序列记法中的“Type”,而不适合单一集合或单一序列类型。

    注:例如,下面的约束“(SIZE(I..64))”适用于VisibleString,但不适用于SEQUENCE OF:

    NamesOfMemberNations l l—SEQUECNCE OF VisibleString (SIZE (1.. 64》

45.3当“Constraint”记法紧接精选类型记法之后时,它也适用于选择类型,但不适用于所选替换项的类型。忽略这样的约束(见29.2)。

    注:在下面的示例中,约束(WITH COMPONENTS{一.,a ABSENT})适用于CHOICE类型T,但不适用于所选的SEQUENCE类型,而且不影响V的值.

    T::= CHOICE(

    a SEQUENCE{

      a  INTEGER OPTIONAL,

      b BOOLEAN

    },

    b.NULL

    }’

    V::=a<T (WITH COMPONENTS(…,a ABSENT})

45.4当“Constraint”记法紧接“TaggedType”记法之后时,全部记法的解释一样,无论“TaggedType"或“Type”是否认为是双亲类型。

45.5作为45.2中规定的解释的结果,提供特定的记法来允许约束适用于单一集合或单一序列类型。

这就是“TypeWithConstraint”:

    TypeWithConstraint::=

SET Constraint OF Type

SET SizeConstraint OF Type

SEQUENCE Constraint OF Type

SEQUENCE SizeConstraint OF Type

SET Constraint OF NamedType

SET SizeConstraint OF NamedType

SEQUENCE Constraint OF NamedType

    SEQUENCE SizeConstraint OF NamedType

    在第一和第二个替换项中,双亲类型是“SET OF Type",而在第三个和第四个中,它是“SEQUENCE OF Type”。在第五和第六个替换项中,双亲类型是“SET OF NamedType",而在第七个和第八个中,它是“SEQUENCE OF NamedType"。在第一、第三、第五和七个替换项中,约束是“Constraint"(见45.6),而在第二、第四、第六和第八个中,它是“SizeConstraint”(见47.5)。

    注:尽管“Constraint”替换项包括了对应的“SizeConstraint”替换项,由于历史的原因提供了“SizeConstraint”替换项。

45.6  由记法“Constraint"规定的约束:

    Constraint ::=”(“ConstraintSpec ExceptionalSpee”)”

    ConstraintSpec::=

SubtypeConstrain

GeneralConstraint

    “ExceptionalSpee”在49中定义。除非与“extension marker”(见第48章)一起使用,否则,它仅表示“ConstraintSpee”是否包括"DummyReference”(见GB/T 16262.4的8.3)或者是“UserDefinedConstraint”(见GB/T 16262.3的第9章)的事件。在GB/T 16262.3的8.1中定义了“GeneralConstraint"。

45.7  记法“SubtypeConstraint”是通用“ElementSetSpees”记法(见第46章):

    SttbtypeConstraint .1= ElementSetSpees

    在这里的上下文中,元素是双亲类型的值(元素集的支配者是双亲类型)。在集中至少应该有一个元素。

46元素集规范

46.1在某些记法中,可以规定某些标识类型或信息客体类别(支配者)的元素集。这时,使用记法“ElementSetSpec":

    ElementSetSpecs ::=

    RootElementSetSpee   

    RootElementSetSpec”,””…” 

    RootElementSetSpec”,””…””,”AdditonalElementSetSpec

    RootElementSetSpec::=ElementSetSpee

    AdditonalElementSetSpec::=ElementSetSpec

    ElementSetSpec:.=Unions 

    ALL Exclusions

    Unions:.=Intersections 

    UElems UnionMark Intersections

    UElems::=Unions

    Intersections.1=IntersectionElement 

    IElems lntersectionMark IntersectionElements

    IElems.:=Intersections

    IntersectionElements::=Elements I Elems Exclusions

    Elems::=Elements

    Exclusions::=EXCEPT Elements

    UnionMark..---- "1"  lUNION

    InterseetionMark::=”“‘l INTERSECTION

    注1脱字字符“”和单词INTERSECTION同义。字符”I”和单词UNION同义。建议,作为格式问题,字符或单词能用于整个用户规范.EXCEPT能以任一种形式使用。

    注2从最高到最低的优先顺序是tEXCEPT、““、“I。。注意,规定了“ALL EXCEPT”以便它不能用没有把“ALLEXCEPT xxx"圆括号括起来的其他约束打断。

    注3;任何有“Elements"的地方,会出现没有圆括号的约束[例如,INTEGER (1..4)]或圆括号括起来的子类型约束[例如,INTEG.ER 《1..4 1 9))]。

    注41注意,两个“EXCEPT"运算符必须用”l“、”“、”(“或”)”分开,因此.(A EXCEPT B EXCEPT C)是不允许的。它必须改成 《A EXCEPT B)  EXCEPT C)或(A EXCEPT (B EXCEPT C)) 。

    注5:注意.《A EXCEPT B) EXCEPT C)与(A EXCEPT(B I C》是相同的。

    注6:"ElementSetSpees”引用的元素是“RootElementSetSpee”和“AdditonalElementSetSpee”(出现时)引用的元素的联合。

    注7:当元素是信息客体时(即,支配者是信息客体类别),使用如GB/T 16262.2的12.3中定义的记法“ObjectSetElements”.

46,2形成集的元素是:

    a)  如果选择“ElementSetSpecs”的第一个替换项,“Unions”中规定的那些内容[见b)],除了“Ex-elusions”的“Elements”记法中规定的那些内容外,支配者的所有其他元素;

    b)如果选择“Unions”的第一个替代项,那么是“Intersections”[见c)]中规定的那些内容,在“UElems”或”Intersections”中至少规定一次;

    c)  如果选择“Intersections”的第一个替代项,那么是“IntersectionElements”[见d)]中规定的那些内容,否则是也由“IntersectionElements”规定的“IElems”规定的那些内容;

    d)  如果选择“lntersectionElements”的第一个替代项,则为“Elements"中规定的那些内容,除了在“Exclusions”中规定外,应在“Elems”中规定。

46.3如果下面的条件有效,定义值集为可扩展的:

    a)  对于“Elements”l在较外面的层有扩展标志,

    注:即使双亲的所有值包含在新受限类型的根中这也适用。

    b)对于“Unions”:至少一个“UElems”是可扩展的;

    c)  对于“Intersections”:至少一个“IElems卸是可扩展的;

    d)  对于“Exclusions”:EXCEPT之前的元素集是可扩展的。

    否则,值的集不是可扩展的(也见G.4)。

46.4如果值的集是可扩展的,如46.2中规定的,通过只用集算法中包含的值集的根值形成集算法能够确定根值。通过采用由扩展附加增加的根值形成值集能够确定扩展附加,对集算法中包含的每个值集,随后排除确定为根值的值。

46,5“Elements"记法定义为:

    Elements::=

    SubtypeElements 

    ObjectSetEhments 

    “¨“

    ”(“EiementSetSpec”)”

    本记法规定的元素是:

    a)如果使用“SubtypeElements”替换项,则在下面第47章描述。该记法应仅用于支配者是类型,而且包括的实际类型应进一步约束记法的可能性时。在这一上下文中,支配者称为双亲类型;

    b)  如果采用“Obj ectSetElements"记法,则在GB/T 16262.2的12.10中描述。该记法仅用于当支配者是信息客体类别时

    c)如果采用第三种替换项,是“ElementSetSpec”规定的那些内容。

46.6当支配类型是可扩展的,形成子类型约束或值集内的集算法时,集算法中只采用支配类型的扩展根中的抽象值。这时,集算法中所用的所有值记法(包括值引用)实例要求引用支配类型的扩展根的抽象值。要求范围约束的结束点引用在支配类型的扩展根中出现的值,而整个范围规范引用全部(且只有)是支配类型扩展根内范围中的那些值。

46.7当形成含有信息客体集的集算法时,所有信息客体都用于集算法中。如果贡献给集算法的任何

信息客体集是可扩展的,或如果在“ElementSetSpec”最外层有扩展标志,则集算法的结果是可扩展的。

46.8如果子类型约束通过可扩展约束的应用连续地应用到可扩展的双亲类型上,其中用的值记法不应引用不在双亲类型的扩展根中的值。只要约束应用于没有扩展标志和可能扩展附加的双亲类型,第二个(连续应用的)约束的结果定义为是一样的。

    例如:

    Foo:== INTEGER(1—6,…,73,..80)

  Bar:.= Foo (73)  -非法的

  foo Foo::一73  一合法,因为它是Foo的值记法,不是约束的一部分。

  由于73不在Foo的扩展根中,Bar是非法的。如果73已经在Foo的扩展根中,示例将是合法的,而且Bar将约束73的单个值。

47子类型元素

47.1概述

    对“SubtypeElements"提供了许多不同形式的记法。他们标识如下,而且将他们的语法和语义在下面各条中定义。表9概括了哪种记法适用于哪种双亲类型。

    SubtypeElements::==

SingleValue

ContainedSubtype

ValueRange

PermittedAlphabet

SizeConstraint

TypeConstraint

InnerTypeConstraint

PatternConstraint

表9子类型值集的适用性

类型(或通过置标记

  或分成子类型从该类

    型派生的)

Single

Value

 

Contained

 Subtype

 

  Value

  Range

 

   Size

Constraint

 

Permitted

Alphabet

 

Type

Constraint

 

InnerType

Constraint

 

 Pattern

Constraint

 

 Bit String

    是

    是

    否

    是

    否

    否

    否

    否

Boolean

    是

    是

    否

    否

    否

    否

    否

    否

Choice

    是

    是

    否

    否

‘  否

    否

    是

    否

Embedded-pdv

    是

    否

    否

    否

    否

    否

    是

    否

Enumerated

    是

    是

    否

    否

    否

    否

    否

    否

External

    是

    否

    否

    否

    否

    否

    是

    否

Instance-of

    是

    是

    否

    否

    否

    否

    是

    否

  Integer

    是

    是

    是

    否

    否

    否

    否

  、否

NuIl

    是

    是

    否

    否

    否

    否

    否

 否

Object class field type

    是

    是

    否

    否

    否

    否

    否

    否

Object Descriptor

    是

    是

    否

    是

    是

    否

    否

    否

Object Identifier

    是

    是

    否

    否

    否

    否

    否

    否

Octet String

    是

    是

.  否

    是

    否

    否

    否

    否

Open type

    否

    否

    否

    否

    否

    是

    否

    否

Real

    是

    是

    是

    否

    否

    否

    是

    否

Relative Object

Identifier

    是

 

    是

 

    否

 

    否

 

    否

 

    否

 

    否

 

    否

 

 


表9(续)

  类型(或通过置标记

  或分成子类型从该类

 

    型派生的)

 

Single

Value

 

 

Contained

 Subtype

 

 

  Value

  Range

 

 

   Size

Constraint

 

 

Permitted

Alphabet

 

 

   Type

Constraint

 

 

InnerType

Constraint

 

 

 Pattern

Constraint

 

Restricted Character

String Type

    是

 

    是

 

    是‘

 

    是

 

    是

 

    否

 

    否

 

    是

 

~equence

    是

    是

    否

    否

    否

    否

    是

    否

Sequence-of

    是

    是

    否

    是

    否

    否

    是

    否

Set

    是

    是

    否

    否

    否

    否

    是

  :否

Set-of

    是

    是

    否

    是

    否

    否

    是

    否

Time Types

    是

    是

    否

    否

    否

    否

    否

    否

Unrestricted Character

$tringType

    是

 

    否.

 

    否

 

    是

 

    否

 

    否

 

    是

 

    否

 

    8  只允许在BMPString、IA5Sttiag、NumericString、PrintableString、VisibleString、UTFSStfing和Universal-String的“PermittedAlphabet”内。

    b  约束或值集中所有相对客体标识符类型或值的开始节点应该与支配者的开始节点相同.

 

47.2单位

47.2.1  “SingleValue”记法应该是:

    SingleValue.:=Value其中,“Value”是双亲类型的值记法。

47.2.2“SingleValue”规定由“Value”规定的双亲类型的单值。

47.3包含子类型

47.3.1  “ContainedSubtype”记法应该是:

    ContainedSubtype::=Includes Type

    Includes::=INCLUDES │empty

    当“ContainedSubtype”中的“Type”是空类型的记法时,不应该使用“Includes"产生式的“empty”替换项。

47.3.2“ContainedSubtype”规定也在“Type"根中的双亲类型的根中的所有值。要求“Type”从作为双亲类型的相同固有类型派生而来。

47.3.3包含的子类型约束中使用的可扩展“Type"引用的值集不从“Type”中继承扩展标志。忽略不在那一类型扩展根中的“Type"中的任何值,而且,不贡献给受约束类型的值。

    注。使用可扩展“Type”本身不会使受约束类型扩展.

47.4值范围

47.4.1  “ValueRange"记法应该是

    ValueRange:,=LowerEndpoint“..”UpperEndpoint

47.4.2“ValueRange"规定通过规定范围结束点的值指定的值范围内的值。这一记法仅适用于整数类型、某些受限制字符串类型(只有IA5String、NumericString、PrintableString、VisibleString、BMP-

String、UniversalString和UTF8String)的“PermittedAlphabet"和实数类型。要求“ValueRange"中规定的所有值是在双亲类型根中。

    注。为了分成子类型,PLUS-INFINITY超过所有的实值和MINUS-INFINITY小于所有的实值.

47.4.3范围的每个结束点是封闭(这时规定了那个结束点)或者是开放(这时没有规定结束点)的。在开放时,结束点规范包含一个小于符号(“<”):

    LowerEndpoint::= LowerEndValue │LowerEndValue”<”

    UpperEndpoint::=UpperEndValue │”<”UpperEndValue

47.4.4也可以不规定结束点,这时在那个方向延伸到双亲类型允许的范围。

    LowerEndValue:.=Value │MIN

    UpperEndValue =:=Value │MAX

    注l当ValueRange用作。PermittedAIphabet”时,“LowerEndpoint”和“UpperEndpoint”的大小应为1.

47.5大小约束

47.5.1  “SizeConstraint”的记法应该是:

    SizeConstraint::=SIZE Constraint

47.5.2“SizeConstraint”只适用于位串类型√L位位组串类型、字符串类型、单一集合类型或单一序列类型。

47.5.3“Constraint”为被规定值的长度规定允许的整数值,并采用适用于下列双亲类型的任何约束形式:

    INTEGER(0..MAX)

    “Constraint修应该用“SubtypeConstraint”替代“ConstraintSpec”。

47.5.4测量单位依赖于双亲类型,如下:

    类型    测量单位

    位串    位

    八位位组串    八位位组

    字符串    字符

    单一集合    成分值

    单一序列    成分值

    注:本条中为确定字符串值大小规定的字符数计数应该清楚地与八位位组计数区别开来。字符计数应该根据用于类型的,特别是与引用标准、表或能在这种定义中出现的登记中的登记数有关系的字符集的定义来解释。

47.6类型约束

47.6.1  “TypeConstraint”记法应该是:

    TypeConstraint::;Type

47.6.2这一记法仅适用于开放类型记法,而且约束开放类型为“Type”的值。

47.7允许字母表

47.7.1  “PermittedAlphabet”记法应该是;

    PermittedAlphabet;z=FROM Constraint

47.7.2“PermittedAlphabet”规定能用双亲串的子字母表构成的全部值。这一记法仅能用于受限制字符串类型。

47.7.3除了那些应该用“SubtypeConstraint”替代“ConstraintSpec蚪外,“Constraint"是所有能适用于双亲类型(见表9)的约束。子字母表精确地包括那些出现在“Constraint”允许的双亲串类型的一个或多个值中的字符。

47,7.4如果“Constraint圩是可扩展的,那么允许字母表约束选择的值集是可扩展的。根中的值集是“Constraint”的根允许的那些,而且扩展附加是根与“Constraint"扩展附加一起允许的那些,但不包括已经在根中的那些值。

47.8内部子类型

47.8.1  “InnerTypeConstraint”记法应该是:

    InnerTypeConstraint::=

    WITH COMPONENT SingleTypeConstraint │

    WITH COMPONENTS MultiTypeConstraints

47.8.2“InnerTypeConstraint”只规定那些满足约束出现的集合的值和/或双亲类型成分的值。除非满足明显或隐含的所有约束(见47.8.6),否则,不规定双亲类型的值。这一记法可适用于单一集合、单一序列、集合、序列和选择类型。

    注:通过COMPONENT OF转换来忽略适用于集合或序列类型的“InnerTypeConstraint”(见24.4和26.2)。

47.8.3对于按照单个其他(内部)类型(单一集合和单一序列)定义的类型,提供了采用子类型值规范形式的约束。它的记法是“SingleTypeConstraint”t

    SingleTypeConstraint::=Constraint

    “Constraint"定义单个其他(内部)类型的子类型。如果且只有每个内部值属于将“Constraint”用于内部类型获得的子类型,才规定双亲类型的值。

47.8.4对于按照多个其他(内部)类型(选择、集和序列)定义的类型,提供了这些内部类型的许多约束。它的记法是“MultipleTypeConstraints”:

    MultipleTypeConstraints::=

    FullSpeeification │

    PartialSpecifieation

    FullSpecifieation::=”{”TypeConstraints”}”

    PartialSpeeifieation::=”{””…””,”TypeConstraints”)”

    TypeConstraints::一

    NamedConstraint │

    NamedConstraint”,”TypeConstraints

    NamedConstraint::=

    Identifier ComponentConstraint

47.8.5“TypeConstraints”包含对双亲类型的成分类型的约束列表。对于序列类型,约束必须按顺序出现。约束作用的内部类型用其标识符标识。对予给出的成分,最多应该有一个“NamedConstraint”。

47.8.6  “MuhipleTypeConstraints”由“FullSpecifieation”或者“PartialSpecifieation’’组成。.当使用“FullSpeeification”时,应该在能约束为缺失(见47.8.9)且没有明显列出的所有内部类型中有“ABSENCE"的隐式出现约束。采用“PartialSpeeifieation"时,没有隐式约束且能从列表中忽略任何内部类型。

47.8.7特定的内部类型可以按照它的出现(在双亲类型的值中)、它的值或两者约束。记法是“ComponentConstraint":

    ComponentConstraint::=ValueConstraint PreseneeConstraint

47.8.8  内部类型值的约束用记法“ValueConstraint”表示:

    ValueConstraint::=Constraint l empty

    如果且只有内部值属于作用于内部类型的“Constraint”规定的子类型时,双亲类型的值满足这一约束。

47.8.9内部类型出现的约束应该用记法“PresenceConstraint”表示;

    PreseneeConstraint::=PRESENT I ABSENT{OPTIONAL I empty

    这些候选项的意义以及允许他们的情形在47.8.9.1至47.8.9.3中定义。

47.8.9.1  如果双亲类型是序列或集合,标记为OPTIONAL的成分类型可约束为PRESENT(这时,如果也只有对应的成分值出现才满足约束)或者为ABSENT(这时,如果也只有对应的成分值缺失才满足约束)或者为“OPTIONAL”(这时,对应的成分值出现上没有加以约束)。

47.8.9.2如果双亲类型是选择,成份类型可约束为ABSENT(此时,如果也只有对应的成分类型没有用在值中才满足约束),或PRESENT(此时,如果也只有对应的成分类型用在值中才满足约束);在 “MultiTypeConstraints"中最多应该有一个PRESENT关键宇。

    注:解释示伪见附录E的E.4.6。

47.8.9.3空“PresenceConstraint”的意义依赖于是采用“FullSpeeification”还是“PartialSpedfication”:

    a)  在“FullSpecification”中,它相当于对标记OPTIONAL的集合或序列成分的PRESENT约束,且不强加进一步的约束f

    b)  在“PartialSpecification“中,不强加约束。

47.9  模式约束

47.9.1  "PatternConstraint"记法应该是:

    PatternConstraint:1=PATTERN Value

47.9.2“Value"应该是包含附录A中定义的ASN.1常规表达式的类型UniversalString(或引用这种字符串)的“cstring”。“PatternConstraint”选择满足ASN.1常规表达式的双亲类型的那些值。整个值应该满足整个ASN.1常规表达式,即,“PatternConstraint"不选择其开头字符与(整个)ASN.1常规表达式相配但包括进一步结尾字符的值。

    注l“Value”形式上定义为类型UniversalString的值,但是类型UniversalString和UTFSString的值集是相同的(见37.16).因此,全部相当的定义可能已经说明“Value”是类型UTFSString的值.

48扩展标志

 

    注.像一般的约束记法一样,扩展标志不影响ASN.1的某些编码规则,例如,基本编码规则,但是对某些有影响,例

如,紧缩编码规则。它对用ECN定义的编码的影响由ECN规范确定。

48.1扩展标志,省略号,是希望扩展附加的指示。它不说明怎样处理这种附加而是它们在解码期间不应该当错误处理。

48.2扩展标志和例外标识符一起使用(见第49章)是希望的扩展附加的指示并且如果约束违规时提供标识由应用采取的行动的方法。建议该记法用在那些使用储存和向前或者任何其他中继形式的情形,以指明(例如)任何未识别的扩展附加回到可重新编码和中继的应用。

48.3包括可扩展子类型约束、值集或信息客体集的集算法的结果在第46章中规定。

48.4如果用可扩展约束定义的类型在“ContainedSubtype”中引用,则新定义的类型不继承扩展标志或任何他的扩展附加(见47.3.3)。可通过在其“ElementsSetSpecs"的最外层包含扩展标志使新定义的类型可扩展(也见46.3)。例如:

    A::=INTEGER(0—10,…,12)  -A是可扩展的。

    B::=INTEGER (A)    -B是不可扩展的且约束为0-10。

    C::= INTEGER (A,…)  -C是可扩展的且约束为0-10。

48.5如果用“ElementsSetSpecs”进一步约束以可扩展约束来定义类型,则产生的类型既不继承扩展标志也不继承可能在前面的约束中出现的任何扩展附加(见46.8)。例如:

    A::=INTEGER(0..10,…)一A是可扩展的。

    B::=A(2..5)--B是不可扩展的。

    C::=A--C是可扩展的。

48.6不应该出现约束为缺失的集、序列或选择类型的成分,无论集、序列或选择类型是否是可扩展类型。

    注:内部类型约柬不影响可扩展性.

    例如:

    A...=SEQUENCE{

    a INTEGER

    b    BOOLEAN OPTIONAL.

    )

    B::=A(WITH COMPONENTS{bABSENT))-B是可扩展的,但是b不应该以它的任何值出现。

48.7当本部分要求不同标记(见24.5至24.6、26.3和28.3)时,进行标记唯一性检查前应概念性应用下面的转换:

48.7.1下列情况下,在扩展插入点概念性增加新元素或替换项(称作概念增加元素,见48. 7.2):

    a)没有扩展标志但在模块开头隐含可扩展性,然后,增加扩展标志而且在扩展标志之后增加新元素作为第一个附加;或者

    b)在CHOICE或SEQUENCE或SET中有单个扩展标志,然后,在紧贴结束括号之前的CHOICE或SEQUENCE或SET后面增加新元素;或者

    c)在CHOICE或SEQUENCE或SET中有两个扩展标志,那么,新元素加在紧贴第二个扩展标志之前。

48.7.2这一概念增加元素只是通过规则的应用来检查要求不同标记(见24.5至24.6、26.3和28.3)盼合法性。它是在应用自动标记(如果适用的话)和COMPONENTS OF扩大之后概念增加的。

48.7.3这一概念增加元素定义具有与所有正常ASN. 1类型的标记不同的标记,但是,与所有这样的概念增加元素的标记匹配而且如CB/T16262.2的14.2注2中规定的,与开放类型的不确定标记匹配。

    注.必须有与概念增加元素和开放类型相关的标记唯一性规则以及要求不同标记的规则(见24.5至24.6、26.3和28.3)并足以保证:

    a)当BER编码被解码时,任何未知的扩展附加能无歧义地归因于单个插入点;和

    b)  未知的扩展附加绝不可能与OPTIONAL元素混淆.

    在PER中,上面的规则足以保证这些特性,但不是必需的,尽管如此,他们仍然用作ASN.1的规刚以保证记法与编码规则独立.

48.7.4如果要求不同类型的规则由于这些概念增加元素而违规,那么规范非法使用了可扩展性记法。

    注.上面规则的目的是精确约束使用插入点(特别是不在各个SEQUENCE或SET或CHOICE尾部的那些).设计这些约束来保证在BF_.R、DER和cER中版本1系统收到的未知元素可能无歧义地归因子规定的插入点.如果例外处理这种附加元素对不同插入点是不同的,这样做将很重要.

48.8示例

48.8.1例1

    A::=SET{

    a    A.

    bCHOICE{

    c    C,

    d    D,

    ...’

       }

    )

是合法的,因为,像任何附加的材料必须是“b”的部分一样无歧义。

48. 8.2例2

    A::=SET{

    a    A,

    bCHOICE{

    c    C,

    d    D.

    …,

    ),

    …,

    d    D

    ).

是非法的,因为,附加的材料可能是“b”的部分,‘或可能在“A”的较外面层,而版本1系统不能告诉是哪一个。

48.8.3例3

    A ::=SET{

    a    A.

    bCHOICE{

    c    C.

    ),

    dCHOICEf

    e    E,

    }

    }

也是非法的,因为附加的材料可能是b或d的部分。

48.8.4用可扩展选择内的可扩展选择或标志为OPTIONAL或DEFAULT的序列元素内的可扩展选择能够构成更复杂的示例,但是上面的规则是必需的而且足以保证版本1中不出现的元素能由版本1系统无歧义地归因于精确的一个插入点。

49例外标识符

49.1在复杂的ASN.1规范中,在许多地方需要特别指出解码器应处理其中没有完全规定的材料。这些情况特别出现在使用用抽象语法参数定义的约束中(见GB/T 16262.4--2006第10章)。

49.2在这些情况下,应用设计者需要标识干扰某些依赖实现约束时采取的行动。提供例外的标识符作为引用ASN.1规范部分的无歧义手段以便指出采取的行动。标识符由“!”字符构成,紧接着是可选的ASN.1类型和那个类型的值。在没有类型时,则假设INTEGER是值的类型。

49.3如果出现“ExeeptionSpec”,它指明标准正文的文本中有说明怎样处理与“!”字符有关的约束干扰。如果没有,那么,实现者要么需要标识描述他们采取的行动的文本,要么当出现约束干扰时,将采取依赖实现的行动.

49.4“ExceptionSpee”的记法定义如下:

    ExceptionSpec::=“!”Exceptionldentifieation l empty

    Exceptionldentification.::=

    SignedNumber    }

    DefinedValue    │

    Type”:”Val ue

    最初两个替换项指明类型整数的例外标识符。第三个替换项指明任意类型(“Type")的例外标识符(“Value")。

49.5用多重约束来约束类型时,不止一个有例外标识符,在最外约束中的例外标识符应该认为是那个类型的例外标识符。

49.6当用于集合算法的类型里出现例外标志时,应该忽略例外标识符而且不应该由被约束的类型作为集合算法的结果继承。

附录A

(规范性附录)

ASN.1常规表达式

A.1  定义

A.I.1  ASN.1常规表达式是描述其格式符合模式本身的串集的模式。常规表达式本身是串;它与算法表达式类似,通过使用各种运算符将较小的表达式组合。最小的表达式(通常)由一个或两个字符组成,是表示字符集的占位符。

A.1.2大部分字符,包括全部字母和数字,是与它们本身匹配的常规表达式。

    例如:

    常规表达式“fred”只与串“fred”相匹配。

A.1.3可以拼接两个常规表达式}产生的常规表达式与通过拼接两个分别与子表达式相匹配的子串形成的任意串相匹配。

A.2元字符.

A.2.1元字符序列(或元字符)是一个或多个在常规表达式上下文中有特定意义的相邻字符的集合。下面的列表包含所有的元字符序列。它们的意义在下面各条中解释。

    []    与用“-”指明范围的集合中的任意字符匹配.

                 开括号之后的“^“坤补充紧跟其后的集合。

  g,p,r,c)    标识GB/T 13000.1字符的四元组(见37.8)

  \N{名称)     如38,1中定义,与已命名字符(或已命名字符集的任意字符)匹配与任意字符匹配(除非它是11.1.6中定义的换行字符之一)

  \d    与任何数字匹配(相当于“[0---9]”)

  \w    与任何字母数字字符匹配(相当于“[a~zA~ZO~9]”)

  \t    与HORIZONTAL TABULATION(9)字符匹配(见11.1.6)

  \n    与11.1.6中定义的任意一个换行字符匹配

  \r    与CARRIAGE RETURN(J3)字符匹配(见11.1.6)

  \s    与任意一个空白字符匹配(见11.1.6)

  \b    与单词边界匹配

  \    (前缀)    引用文本元字符并使它扶字面上解释

  \\    与REVERSE SOLIDUS(92)字符“\”匹配

  ””    与QUOTATION MARK(34)字符(”)匹配

  │    (中缀)    两个表达式之间的替换项

  ()                封闭表达式的分组

  *    (后缀)    与前面表达式匹配O、1或几次

  十    (后缀)    与前面表达式匹配1或几次

  ?    (后缀)    与前面表达式匹配1或一次也没有

  #n    (后缀)    与前面表达式准确地匹配n次(n是单个数字)

  #(n)  (后缀)    与前面表达式准确地匹配n次

  #(n,) (后缀)    与前面表达式匹配至少n次

  #(n,m)(后缀)    与前面表达式匹配至少n次但不超过m次

  #(,m) (后缀)    与前面表达式匹配不超过m次

    注1字符CIRCUMFLEX ACCENT(94)“.”和HYPHEN-MINUS(45)“一”是A.2,2中定义的串中某些位置上的附加元字符。

    注2本附录中字符名称后的圆括号内的值是GB/T 13000.1中字符的十进制值.

    注3该记法不提供元字符“^”和“$”来分别与串的开始和结尾匹配。因此,串应该整体上与常规表达式相匹配,除如果后者在它的开头,结尾或者两端包括“*”之外.

    注4除非空白出现在紧接换行之煎或之后,否则,下面元字符序列不能包含空白<见11, 1,8)。

    {g.p.r.c}

    \N{名称)

    #n

    #(n)

    #(n,)

    #(n,m)

    #(.m)

    如果常规表达式包含换行、紧接换行之前或之后出现的任何间隔字符没有意义且与什么也不匹配(见11.14.1)。

A.2.2用“["和“]”封闭的字符列表与该列表中的任意单个字符相匹配。如果列表中的第一个字符是脱字符号“”,那么它与不在列表中的任意字符匹配。通过给出第一个和最后一字符、用连字符隔开(根据39.3中定义的顺序关系)可以规定字符的范围。除“]"和“\”外,所有元字符序列失去它们在列表内的特殊意义。为了包括文字CIRCUMFLEX ACCENT(94)“‘”,将它放在除第一个位置外的任何位置或在它前放置反斜线。为了包括文字HYPHE-N-MINUS(45)“一”,将它放在列表的最前或最后,或在它前放置反斜杠。为了包括文字CLOSING SQUARE BRACKET(93)“]”,将它放在最前面,如果列表中的第一个字符是脱字符号“”,那么当它们紧接在那个脱字符号之后时,字符“一”和“]一也与它们自身相匹配。A. 2.3、A. 2.4、A. 2.6和A.2.7中定义的元字符序列能用于它们保持其意义的方括号之间。

    例如:

    常规表达式“[0123456789]”,或相当的“[O~9]”与任何单个数字相匹配。

    常规表达式“[-03”与除O之外的任何单个字符相匹配。

    常规表达式“[\d‘.-]”与任何单个数字、脱字符号、连字符或句号相匹配.

A.2.3为了避免有相同图形字符的两个GB/T 13000.1字符之间的任何歧义,提供了两个记法.形式“{组、面、行、字符元)”的记法引用按照37.8中定义的“四元组”产生式的(单个)字符。

A.2.4如果“valuereference"是引用当前模块中定义或引入的大小为1(见第37章)的受限制字符串值,则形式“\N{ valuereference)”的记法与引用的字符相匹配。如果“typereference"是引用当前模块中定义的“RestrictedCharaterStringType”的子类型或第37章中定义的“RestrictedCharaterStringType”之一,则形式“\N{ typereference}”的记法与引用的字符集的任何字符相匹配.

    注:在特定情况下.“va[uercference”或“typereference”可能是模块ASNI-CHARACTER-MODULE(见38.1)中定义和引入刘当前模块(见37.8)的引用之一,

    例如:

    常规表达式“\N{ greekCapitalLetterSigma)”与GREEK CAPITAL LETTER SIGMA相匹配。

    常规表达式“\N{ BasicLatin}”与BASIC LATIN字符集的任意(单个)字符相匹配。

    “[\N{ BasicLatin}\N{ Cyrillic)\N{ BasicGreek)]+”,或相当的“(\N(BasicLatin)I\N{eyfillic}I\N{ BasicGreek})+”是与任何取自规定的三个字符集字符的(非空)数字构成的串相匹配的常规表达式。

A.2.5句号“.”除非是11.1.6中定义的换行字符之一,否则,它与任意单个字符楣匹配。

A.2.6符号“\d”与“[0-93”同义,即:它与任意单个数字相匹配。符号“\”一与字符HORIZONTALTABULATION(9)相匹配。符号“\w一与“[a~zA~Z0~9]”同义,即:它与任意单个(大写或小写)字符或任意单个数字相匹配。

    例如:

    常规表达式“\w+(\s\w+)*\,”与至少一个(字母数字)词相匹配。该词用11.1.6中定义的一个空白字符分隔。结束句号前没有空白字符。

A.2.7符号“\r,,与CARRIAGE RETURN(13)相匹配。符号“\n"与11.1.6中定义的任意一个换行字符相匹配。符号“\s”与11.1.6中定义的任意一个空白字符相匹配。符号“\b”与词开始或结束的空串相匹配。

    例如;

    常规表达式“.*\bfred\b.*”与包含词“fred"(该词不仅仅是一串四个字符│它是划界了的)的任意串相匹配。因此,它与“fred”或“I am fred the first”等类似的串相匹配,但不与“My name is freddy"或“I am afred I don't know how to spell afraid!”等类似的串相匹配。

A.2.8通常用作元字符的字符能通过用“\”作其前缀来字面说明。如果常规表达式包含QUOTATIONMARK(34),该字符应该用一对QUOTATION MARK字符表示。

    例如:

    常规表达式“\.”与(单个)串“.”相匹配,但不与任何单个字符的任何串相匹配。 

    常规表达式“”””与包含单个QUOTATION MARK的串相匹配。

    常规表达式“\)”与串“)”相匹配.

    常规表达式“\a”与字符“a”相匹配.

    注:第四个示例表明,允许反斜线在非元字符的字符前,但是不赞成这种用法(因为在本部分将来的版本中会允许其他元字符)。

A.2.9通过中缀操作符“│”可以合并两个或多个常规表达式。产生的常规表达式与每个子表达式相匹配的任意串相匹配。

A.2.10常规表达式可后接重复操作符.如果操作符是“?”,则前面的项是可选的而且最多匹配一次.如果操作符是“*",则前面的项将匹配零或多次。如果操作符是“+",则前面的项将匹配一次或多次.如果操作符是“#(n)"的形式,则前面的项准确地匹配n次l在这一特定情况下,如果n由一位数字组成,则可以省略圆括号。如果它是“#(n,)”的形式,则项匹配n或更多次。如果它是“#(,m)”的形式,则项是可选的而且匹配最多m次。如果它是“#(n,m)”的形式,则项匹配至少n次,但不超过m次

    注:将元字符“*”、“+”、“?”或“#”用作常规表达式的第一个字符是非法的。将元字符“#一或“I一用作常规表达式的最后一个字符也是非法的.

    例如:,

    “555-1212”这样的电话号码是通过常规表达式“\d#3-\d# 4"来相匹配的,或者相当于“\d#(3)-\

d#(4)”。    “$12345.90"这样的美元价格是通过常规表达式“$\d#(1,)(\.\d#(1,2))?”来相匹配的。注意,当“#竹符号后接范围时要求有圆括号”。

    “123-45-5678”这样的社会保险号码是通过常规表达式“\d#3.?\d#2.?\d#4"来相匹配的。

A.2.11  重复(见A.2.10)优先于拼接(见A. 1.3).而按顺序优先于交替(见A.2.9)。全部子表达式可包围在圆括号中以打破这些优先规则。

A.2.12当常规表达式包含圆括号中的子表达式时,每个(非引用的)开圆括号从常规表达式的左边到右边连续地赋予不同的(严格地讲正)整数。然后每个子表达式能够被引用到有像使用相关整数的“\l”、“\2”等记法的注解中去。不允许空的子表达式“()"。

    例如:

1716
国家标准下载

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

验证码: 8302