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章定義。

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