X680 13 模块定义

13 模块定义

       13.1 ModuleDefinition通过以下表达式定义:

       ModuleDefinition ::=

              ModuleIdentifier

              DEFINITIONS

              EncodingReferenceDefault

              TagDefault

              ExtensionDefault

              “::=”

              BEGIN

              ModuleBody

              EncodingControlSections

              END

 

       ModuleIdentifier ::=

              modulereference

              DefinitiveIdentification

 

       DefinitiveIdentification ::=

              | DefinitiveOID

              | DefinitiveOIDandIRI

              | empty

 

       DefinitiveOID ::=

              “{” DefinitiveObjIdComponentList ”}”

 

       DefinitiveOIDandIRI ::=

              DefinitiveOID

              IRIValue

 

       DefinitiveObjIdComponentList ::=

              DefinitiveObjIdComponent

              | DefinitiveObjIdComponentDefinitiveObjIdComponentList

 

       DefinitiveObjIdComponent ::=

              NameForm

              | DefinitiveNumberForm

              | DefinitiveNameAndNumberForm

 

       DefinitiveNumberForm ::= number

 

       DefinitiveNameAndNumberForm ::=identifier “(” DefinitiveNumberForm ”)”

 

       EncodingReferenceDefault ::=

              encodingreference INSTRUCTIONS      

              | empty

 

       TagDefault ::=

              EXPLICIT TAGS

              | IMPLICIT TAGS

              | AUTOMATIC TAGS

              |empty

 

       ExtensionDefault ::=

              EXTENSIONBILITY IMPLIED

              | empty

 

       ModuleBody ::=

              Exports Imports AssignmentList

              | empty

 

       Exports ::=

              EXPORTS SymbolsExported”;”

              | EXPORTS ALL”;”

              | empty

 

       SymbolsExported ::=

              SymbolList

              | empty

 

       Imports ::=

              IMPORTS SymbolsImported”;”

              | empty

 

       SymbolsImported ::=

              SymbolsFromModuleList

              | empty

 

       SymbolsFromModuleList ::=

              SymbolsFromModule

              | SymbolsFromModuleList SymbolsFromModule

 

       SymbolsFromModule ::=

              SymbolList FROMGlobalModuleReference

 

       GlobalModuleReference ::=

              modulereference AssignedIdentifier

 

       AssignedIdentifier ::=

              ObjectIdentifierValue

              | DefinedValue

              | empty

 

       SymbolList ::=

              Symbol

              | SymbolList”,”Symbol

 

       Symbol ::=

              Reference

              | ParameterizedReference

 

       Reference ::=

              typereference

              | valuereference

              | objectclassreference

              | objectreference

              | objectsetreference

 

       AssignmentList ::=

              Assignment

              | AssignmentList Assignment

 

       Assignment ::=

              TypeAssignment

              | ValueAssignment

              | XMLValueAssignment

              | ValueSetTypeAssignment

              | ObjectClassAssignment

              | ObjectAssignment

              | ObjectSetAssignment

              | ParameterizedAssignment

 

注1-         Exports和Imports列表中使用的ParameterizedReference在X683中定义。

注2-         ModuleBody可以在ModuleDefinition之外使用。例如本规范定义的universal类标签。

注3-         TypeAssignment,ValueAssignment, XMLValueAssignment, ValueSetTypeAssignment表达式在16章定义。

注4-         TagDefault的值只影响在模块中显示定义的类型。不影响引入的类型。

注5-         分号不在分配列表及其子表达式中使用,它保留给ASN.1工具开发者使用。

 

13.2 TagDefault如果为空,那么是EXPLICIT TAGS。

注-31.2节提供了EXPLICITTAGS, IMPLICIT TAGS 和AUTOMATIC TAGS的含义。

 

13.3 当TagDefault选择AUTOMATIC TAGS时,意味着该模块选择了自动标签,否则就是没有选择。自动标签应用与ComponentTypeLists和AlternativeTypeLists表达式,并根据模块定义依照语法改变。这个改变过程在25.8到25.10,27.3,29.2到29.5解释sequence类型、set类型和choice类型的时候分别详细介绍。

 

13.4 EXTENSIBILITY IMPLIED 选项等同于在模块的每个类型中插入扩展符(…)。隐式扩展符一般都在类型的显示扩展符之后。EXTENSIBILITY IMPLIED的缺席意味着扩展性只提供给那些具备显式扩展符模块的类型。

注-EXTESIBILITYIMPLIED只对类型有效。对对象集和子类型约束无效。

 

13.5 EncodingReferenceDefault指定encodingreference是模块的默认编码引用。如果EncodingReferenceDefault非空,那么模块的默认编码引用是TAG。

注-附录E包含了允许编码引用列表,与本规范一同定义了编码指南的结构和含义。

 

       13.6 ModuleIdentifier表达式中定义的modulereference被成为模块名称。

       注-在单个ASN.1模块中定义多个ModuleBody,并使用同一个modulereference在以前版本的规范中是允许的。但是在本版本的规范中是禁止的。

 

       13.7 模块名称在模块定义领域中只使用一次(13.10定义除外)。

 

       13.8 如果DefinitiveIdentification非空,那么对象标识符和其他任意IRIValue值应该唯一的表示OID树的同样节点用于识别已定义的模块。没有被定义的值或许可能被用于定义对象标识符的值。IRIValue表达式在34.3中定义。

       注1-强烈推荐至少一个对象标识符值(最好是一个对象标识符值加国际资源标识符值)分配给模块,以便于其他用户可以唯一的引用模块。

       注2-模块要求使用一个新的DefinitiveIdentification不在本规范中讨论。

 

       13.9 如果AssignedIdentifier非空,那么ObjectIdentifierValue和DefinedValue应该分别可以在引入名称中识别模块。当AssignedIdentifier选择DefinedValue,它应该是对象类型标识符的值。AssignedIdentifier中的每个valuereference应该符合以下规定中的一条:

       a) 已经在已定义的模块的AssignmentList中定义,并且所有的出现在右侧的valuereference也已经符合本规则a或下一条规则b。

       b) 它作为AssignmentList中不包含任何valuereference的SymbolsFromModule的一个Symbol出现。

       注1-推荐指定对象标识符已方便其他人可以唯一的引用模块。

       注2-本句法并没有提供包含一个国际资源标识符引用给被引用模块,但是推荐包含在一个ASN.1注释中。

 

       13.10 SymbolsFromModule中的GlobalModuleReference应该包含在另一模块的ModuleDefinition中,除非他包含一个非空的DefinitiveIdentification,modulerefernce在两者之间可能是不同的。

       注-只有在从两个模块中引用相同名称的symbol时,不同的modulereference在其他的模块中才可能被使用。截然不同的名字使得这些名称在模块体中可以使用。

 

       13.11 当modulereference和非空的AssignedIdentifier同时使用与引用模块,那么后者应该被认为是权威的。

 

       13.12 如果被引用的模块包含一个非空的DefinitiveIdentification,那引用那个模块的GlobalModuleReference应该包含一个非空的AssignedIdentifier。

 

       13.13 如果Exports选择SymbolsExported:

       a) 每个SymbolsExported中的Symbol应该符合且只符合一下条件中的一条:

              i) 在模块创建时定义;或

              ii) 在Imports的SymbolsImported中出现且仅出现一次。

       b) 每个从模块外引用的Symbol应该通过SymbolsExported,并且只有这些Symbol可以从外部模块引用进来(服从于13.14的约束);

       c) 如果没有Symbol,那么SymbolsExported应该选择empty。

 

       13.14 如果Exports选择empty或EXPORTS ALL,那么模块定义的所有Symbol和从其他模块引用的的Symbol服从13.13a定义的约束。

       注-Exports包含empty选项是为了向后兼容。

 

       13.15如果在NamedNumberList,Enumeration,NamedBitList中的标识符的引用类型是输出或一个输出类型的组件,那么该标识符是被隐性输出的。

 

       13.16 如果Imports选择SymbolsImported:

       a) SymbolsFromModule应该定义在模块体中,或出现模块通过GlobalModuleReference在SymbolsFromModule指定的Imports部分。只有在Symbol不是定义在被引入的模块中,而且Symbol在那个从句中是唯一的的情况下允许通过引入模块的Imports部分引入Symbol。

       注1-这并不禁止在两个不同的模块中定义一样的记号名称,并引用到第三个模块中。然而如果模块A中如果在Imports部分出现Symbol名称一样的情况,那么那个Symbol名称不可以从模块A引入到模块B。

b) 如果SymbolsFromModule的Exports选择了以GlobalModuleReference为符号的SymbolsExported,Symbol应该在SymbolsExported中定义。

       c) 只有SymbolsFromModule中的SymbolList中定义的Symbol可能作为任意modulereference使用GlobalModuleReference指定的External<X>Reference的记号。

       d) 如果Symbol为空,那么SymbolsImported选择empty。

       注2- c) 和 d)对IMPORTS的声明隐含着模块不能包含External<X>Reference。

e) SymbolsFromModuleList中的SymbolsFromModule应该包含与GlobalModuleReference:

       i) 包含的modulereference应该是不同的,且与模块引入的也不同;

       ii) AssignedIdentifier如果非空,那么应该相互是不同的,且与模块引入的也不同。

 

     13.17 如果Imports选择的是empty,模块依然可以通过External<X>reference引用其他模块定义的Symbols。

       注-Imports保留empty选项是为向后兼容。

 

       13.18 如果在NamedNumberList,Enumeration,NamedBitList中的标识符的引用类型是引入的或作为组件或子组件的引入类型的,那么该标识符被隐性引入。

 

       13.19 SymbolsFromModule中的Symbol可能作为Reference出现在ModuleBody。Symbol的意义是它在模块中对应与GlobalModuleReference。

 

       13.20 如果Symbol出现在AssignmentList中,或出现在SymbolsFromModule的一个或多个实例中,它应该只用于External<X>Reference。如果Symbol不出现,他应该直接作为Reference使用。

 

       13.21 Assignment的众多选项在本规范或其他规范中定义:

              TypeAssignment        16.1

              ValueAssignment      16.2

              XMLValueAssignment              16.2

              ValueSetTypeAssignment  16.6

              ObjectClassAssignment    X681 9.1

              ObjectAssignment             X681 11.1

              ObjectSetAssignment        X681 12.1

              ParameterizedAssignment      X683 8.1

 

       13.22 EncodingControlSections在第54章定义。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章