X680 25 Sequence類型標識

25 Sequence類型標識

25.1 定義sequence類型(詳見3.8.67)的標識是SequenceType:

       SequenceType ::=

              SEQUENCE “{” “}”

              | SEQUENCE “{”ExtensionAndException OptionalExtensionMarker “}”

              | SEQUENCE “{” ComponentTypeLists “}”

 

       ExtensionAndException ::= “…” | “…”ExceptionSpec

 

       OptionalExtensionMarker ::= “,” “…” |empty

 

       ComponentTypeLists ::=

              RootComponentTypeList

              | RootComponentTypeList “,”ExtensionAndException ExtensionAdditions OptionalExtensionMarker

              | RootComponentTypeList “,”ExtensionAndException ExtensionAdditions ExtensionEndMarker “,”ROotComponentTypeList

              | ExtensionAndExceptionExtensionAdditions ExtensionEndMarker “,” RootComponentTypeList  

              | ExtensionAndExceptionExtensionAdditions OptionalExtensionMarker

 

       RootComponentTypeList ::= ComponentTypeList

 

       ExtensionEndMarker ::= “,” “…”

 

       ExtensionAdditions ::= “,”ExtensionAdditionList

              | empty

 

       ExtensionAdditionList ::=

              ExtensionAddition

              | ExtensionAdditionList “,” ExtensionAddition

 

       ExtensionAddition ::=

              ComponentType

              | ExtensionAdditionGroup

 

       ExtensionAdditionGroup ::= “[[” VersionNumberComponentTypeList “]]”

 

       VersionNumber ::= empty | number “:”

 

       ComponnentTypeList ::=

              ComponentType

              | ComponentTypeList “,”ComponentType

 

       ComponentType ::=

              NamedType

              | NamedType OPTIONAL

              | NamedType DEFAULT Value

              | COMPONENTS OF Type

 

       25.2 出於以下目的,PrefixedType被用於定義一個原本加標籤了的類型:

       a) PrefixedType是一個TaggedType;或

       b) PrefixedType中的Type是一個已經存在的被加標籤了的類型。

 

       25.3 當ComponentTypeLists表達式所在的模塊使用自動標籤模式的時候,ComponentType的任意三個NamedType選項都不是已經被加標籤的類型,那麼自動標籤功能被使用與整個ComponentTypeList,否則沒有使用。

       注1- 在定義sequence類型的組件列表時使用TaggedType標識爲定義者提供了標籤控制功能,這與自動標籤機制的自動分配功能正好相反。例如:

       T ::= SEQUENCE {a INTEGER, b [1] BOOLEAN,c OCTET STRING}

對於組件a,b,c 即使sequence類型T定義模塊選擇了自動標籤模式,它們也不會被自動標籤。

       注2- 只有那些使用自動標籤模塊的ComponentTypeLists表達式可以使用自動標籤轉換功能。

 

       25.4 是否使用自動標籤轉換功能由每個ComponentTypeList自行決定,並且是在25.5.定義的COMPONENTOF之前。然而,在25.8到25.10的定義中,自動標籤轉換定義在COMPONENT OF轉換定義之後生效。

       注- 應用是否使用自動標籤功能取決與ComponentTypeList中是否存在標籤,而不是取決與COMPONENT OF之後的Type中的標籤。

 

       25.5 COMPONENTS OF Type的Type應該是一個sequence類型。COMPONENTSOF Type標識應該用於定義以下內容:除可能出現在Type中的任何擴展標誌和擴展增加之外的當前組件列表,被引用的類型的所有組件類型(至少1個)。(只有RootComponentTypeList中的COMPONENT OF Type的Type包含的;擴展標記和額外擴展被COMPONENT OF Type標識忽視。)被引用類型的子類型約束被該轉換忽視。

       注- 該轉換邏輯上滿足以下章節的要求。

 

       25.6 以下章節定義了一系列根ComponentType或擴展ComponentType或同時的事件。25.6.1應適用於所有場景。

 

       25.6.1 當一個或多個ComponentType被標誌爲OPTIONAL或DEFAULT,那些ComponentType和後續組件的標籤應該是不同的(詳見31.2)。如果選擇自動標籤,那麼要求標籤必須在自動標籤生效後必須完全不同,並且永遠有效。

 

       25.6.2 25.6.1節必須適用於根ComponentType場景。

 

       25.6.3 25.6.1節必須根或擴展ComponentType所有場景,在原有類型定義順序中。(忽視版本號和省略符標識)(詳見52.7)

 

       25.7 當ComponentTypeList使用第三或第四選項,在額外擴展中的所有ComponentType應該包含唯一的標籤,並且和其他原有的ComponentType的標籤都不同。直到第一個沒有被標誌爲OPTIONAL或DEFAULT的在RootComponentTypeList尾部的ComponentType爲止。(詳見52.7)

 

       25.8 ComponentTypeLists觸發自動標籤轉換邏輯上是在25.5定義的轉換之後,但是如果25.3決定它應該適用於ComponentTypeLists的時候才執行。自動標籤轉換通過覆蓋ComponentTypeLists中的每個ComponentType的舊NamedType表達式來實現,詳見25.10定義。

 

       25.9 如果使用自動標籤機制,並且擴展根的ComponentType沒有包含標籤,那麼在ExtensionAdditionList中的任意ComponentType都不應該是預先標籤類型。

 

       25.10 如果使用自動標籤,TaggedType替換定義如下:

       a) 替換的TaggedType標識使用Tag Type選項;

       b) 替換的TaggedType的類型爲空(如,標籤是context-specific);

       c) RootComponentTypeList的第一個ComponentType的替換TaggedType的ClassNumber的標籤值爲0,第二個是1等等,升序計數;

       d) 如果RootComponentTypeList缺失,那麼ExtensionAdditionList中的第一個ComponentType的TaggedType的ClassNumber的值爲0,否則它比RootComponentTypeList的最大的ClassNumber大1,ExtensionAdditionList的下一個ComponentType的ClassNumber的值比第一個大1等等,升序計數;

       e) 替換的TaggedType中的Type是被替換的原有的Type。

       注1- TaggedType替換隱式標籤或顯示標籤在規則在31.2.7節提供。自動標籤一般都是隱式標籤,除非Type是choice類型或一個開放類型標識,或DummyReference(詳見X683)等顯示標籤。

       注2- 當25.8被滿足,組件標籤完全被定義,將不會再被修改即使當sequence類型引用另外一個使用自動標籤轉換的ComponentTypeLists。例如:

       T ::= SEQUENCE {a Ta, b Tb, c Tc}

       E ::= SEQUENCE {f1 E1, f2 T, f3 E3}

       對於E的組件的自動標籤不會影響T的組件a,b,c的標籤,不管任何T的標籤環境。如果T被定義使用自動標籤環境,E不是自動標籤環境,自動標籤同樣適用於T的組件a,b,c。

       注3- 當sequence 、類型作爲COMPONENTOF Type的Type出現,它的每個ComponentType在可能的應用自動標籤之前被應用複製至被引用的sequence type。例如:

       T ::= SEQUENCE {a Ta, b SEQUENCE {b1 T1, b2T2, b3 T3}, c Tc }

       W ::= SEQUENCE {x Wx, COMPONENTS OF T, yWy}

T中的a,b,c的標籤應該和W中的a,b,c的標籤不一樣,如果W被定義爲自動標籤環境,但是b1,b2,b3的標籤在T和W中是一樣的。換句話說,自動標籤轉換隻適用於提供的ComponentTypeLists。

       注4- 子類型不影響自動標籤。

       注5- 當使用自動標籤時,在擴展插入點之外的其他地方插入一個新的組件可能該表其他組件,導致標籤改變的副作用,可能導致與老版本的定義交互出現問題。

 

       25.11 如果DEFAULT或OPTIONAL出現,那麼在新類型的值中對應的值可能缺失。

      

       25.12 如果DEFAULT出現,該類型缺失的值應該等於Value指定的值,Value應該定義與NamedType表達式序列,Type定義的類型的值。

 

       25.13 ExtensionAdditionGroup(所有組件)對應的值是可選的。然後如果該值存在,那麼對應的ComponentTypeList的沒有被標誌爲OPTIONAL或DEFAULT的組件的值必須存在。

 

       25.14 (連同從COMPONENTS OF獲取的)ComponentTypeLists中的NamedType表達式中的identifier應該是唯一的。

 

       25.15 除非所有的額外擴展類型和根擴展類型中的沒有被標誌爲OPTIONAL或DEFAULT的額外類型都指定了值以後,否則其他額外擴展類型的值不能指定值。

       注1- 當類型中根擴展版本1通過增加額外擴展上升到版本2、版本3時,在版本3編碼中要求包含版本2的所有沒有被標誌爲OPTIONAL或DEFAULT的編碼。

       注2- 如果ComponentType沒有標誌爲OPTIONAL或DEFAULT並且是額外擴展,但不在ExtensionAdditionGroup中,那麼通常應該被編碼,除非發送者使用一個較早的ComponentType沒有定義的版本發送的。

       注3- 推薦使用ExtensionAdditionGroup表達式,因爲:

a)     基於編碼規則,它能夠提供更加嚴密的編碼(例如:PER);

b)     它明確的指定如果額外擴展組被編碼的時候,定義在ExtensionAdditionList中的沒有標誌爲OPTIONAL或DEFAULT的類型的值應該進行編碼(對照第一點),這使得句法更加周密。

c)     在ExtensionAdditionList中的類型必須作爲一個組被應用支持,使得句法更加明確。

 

       25.16 VersionNumber只有在所有ExtensionAdditions和ExtensionAdditionAlternatives在ExtensionAdditionGroup中,或在攜帶VersionNumber的ExtensionAdditionAlternativesGroup中使用。ExtensionAdditionGroup中的VersionNumber的number應該大於等於2,並且應該大於插入點先前的ExtensionAdditionGroup的number。

       注1- 這裏使用的協議約定沒有額外擴展組是版本1,第一個額外擴展組的數字應該大於或等於2。當單一的ExtensionAddition被ExtensionAdditions需要,那麼ExtensionAdditionGroup可以使用單個的ExtensionAddition。

       注2- VersionNumber的使用約束僅限於針對單個模塊,對於引入類型沒有任何約束。

 

       25.17 sequence類型標籤是universal類型,值16。

       注- Sequence-of類型包含同樣的標籤。

 

       25.18 定義sequence類型的值應該使用SequenceValue,或當使用XMLValue時,使用XMLSequenceValue定義。表達式如下:

       SequenceValue ::=

              “{” ComponentValueList “}”

              | “{” “}”

 

       ComponentValueList ::=

              NamedValue

              | ComponentValueList “,”NamedValue

 

       XMLSequenceValue ::=

              XMLComponentValueList

              | empty

 

       XMLComponentValueList ::=

              XMLNamedValue

              | XMLComponentValueListXMLNamedValue

 

       25.19 “{” “}”或empty標識只有在以下情況下使用:

       a) SequenceType中的所有ComponentType都標誌爲DEFAULT或OPTIONAL,並且所有的值都缺失;或

       b) 類型標識是 SEQUENCE{}。

 

       25.20 對於SequenceType中的NamedType,必須至少有一個NamedValue或XMLNamedValue不是標識爲OPTIONAL或DEFAULT,並且值對應NamedType序列應該是同一順序的。

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