X680 5 標識-7 編碼規則的可擴展項要求

 

5 標識

5.1 概述

       5.1.1 ASN.1標識由在第11章定義的ASN.1字符集組成。

       5.1.2 每個ASN.1標識所包含的來自ASN.1字符集的字符被分爲詞項類。12章定義了所有字符集組成詞項,併爲他們命名。

       5.1.3 第13章及後續章節詳細闡述和命名了構成ASN.1標識的有效實例的詞項序列,並每個序列的使用場景。

       5.1.4 爲詳細闡述有效詞項序列,本規範在後續章節使用了一個形式上的標識。

5.2 表達式

       5.2.1 所有的詞項和有效詞項序列都被命名。(詳見12章)

       5.2.2 一個新的(更復雜的)有效詞項序列通過表達式進行定義。這個過程使用了詞項名稱、有效詞項序列名稱形成一個新的有效詞項序列。

       5.2.3 每個表達式按照順序包含以下幾個部份:

              a) 新的有效詞項序列的名稱;

              b) ::= 字符;

              c) 一個或多個在5.3中定義的詞項,使用字符|分開。

       5.2.4 一個詞項序列在新的有效詞項序列中作爲一個或多個可選項出現。新的有效詞項序列通過本規範的5.2.3 a)的名稱被引用。

       注:如果同一詞項序列在可選集中出現多次,結果標識的歧義在相關文本中進行解決。

5.3 可選集

       5.3.1 每個表達式中的可選集(詳見5.2.3 c))由一系列名稱定義。每個名稱既可以是詞項的名稱,也可以是通過其他表達式定義和命名的有效詞項序列。

     5.3.2 有效詞項序列包含每個由所有與第一個名稱相關的序列組成的可選項,連接第二個名稱相關的序列,知道包含最後一個名稱的可選序列。

5.4 非空指示符

       如果非空指示符“&”在生產序列之間插入,那麼在他之前和在他之後的詞項都不可以是空白字符。

5.5 表達式舉例

       5.5.1 表達式:

              ExampleProduction ::=

                     bstring

                     | hstring

                     | “{” IdnetifierList ” }”

       “ExampleProduction”可獲取以下詞項序列:

a)     任意”bstring”(一個詞項);或

b)     任意”cstring”(一個詞項);或

c)     任意與“IdentifierList”相關的詞項序列

注:“{}”包含單一詞項名稱(詳見12.37)

       5.5.2 在本例中,“IdentifierList”在其他地方進行定義,可能在定義“ExampleProduction”之前,也可能在定義“ExampleProduction”之後。

5.6 佈局

       本規範定義的表達式之後都包含一個空行。表達式之內不存在空行。表達式可以是單列的,也可以是多列的。佈局樣式並不重要。

5.7 複用

       本規範的表達式經常複用。表達式經常複用直到新的表達式被建立。

       注:在一些情況下,一些重複結果可能包含在無線詞項序列中,一些序列可能包含無限詞項。這並不是錯誤。

5.8 詞項序列引用

本規範通過引用表達式“::=”前的名稱來引用詞項序列;這個名稱使用單引號包圍和日常文本進行區分,除非它作爲表達式的一部分出現。

5.9 詞項引用

       本規範通過使用詞項名稱來引用詞項。並使用單引號來與日常文本進行區分。

5.10 簡化標識

       爲使標識看起來更簡明,以下的簡化標識在定義詞項序列時被使用。

a)     *號跟隨在A和B之後,表示空詞項或和A有關的詞項序列或A和B的交集詞項序列。

因此,C ::= A B * 相當於:

C ::= D | empty

D ::= A | A B D

D是一個輔助名稱,不在其他表達式的中出現。

例如-“C ::= A B *”是以下C的可選項的簡寫:

Empty

A

A B A

A B A B A

b)     +號是*號的簡化版,除了空詞項被排除。因此,

E ::= A B + 相當與

E ::= A | A B E

例如-“E ::= A B +”是以下E的可選項的簡寫:

A

A B A

A B A B A

c)     ?號跟在一個名稱之後表示空詞項或和A有關的詞項序列。因此,

F ::= A ? 相當於

F ::= empty | A

注:在表達式序列中簡化標識符號優先與並列的詞項。

5.11 值引用和值類型

       5.11.1 ASN.1值分配標識可以給特定類型的值賦予名稱。這個名稱可以在需要使用的地方進行使用。附錄C定義和解釋了使用第一個特定類型的值引用名稱來識別一個值的第二類型的機制。

       5.11.2 在ASN.1標準中,通用英語文本被用來註釋包含一個以上類型的結構體的合法使用方法。這些合法性使用說明通常包含2個以上類型兼容。例如,用於定義值引用的類型應該兼容與值引用被使用的控制類型。附錄C使用值映射概念來提供關於ASN.1結構體是否合法的精確聲明。

 

6 ASN.1的類型擴展模型

       對擴展類型進行解碼的時候,解碼者可能會偵測到:

a)     在序列或集合中缺少期望的擴展類型;或

b)     在序列或集合中存在不被期望的擴展類型,或未知的選項在選擇類型中,或未知的枚舉項在枚舉類型中,或不被預期長度或值的類型約束是擴展的。

在正式情況下,擴展類型x定義的抽象語法,不僅包含類型x的值,還包含與x擴展相關的值,因此,當a或b的任意情況被檢測出來的時候,解碼進程不會報錯。以上狀態的處理方式由ASN.1指定。

注:通常會忽視不期望的額外擴展;缺席期望的擴展項時,使用默認值或“丟失”指示符。

如果隨後的傳輸語法是一致的,被解碼者檢測出來的不期望的擴展項可以在隨後的那個類型的編碼中把不期望的擴展項編碼進去(用於回傳給發送者或第三方)。

 

7 編碼規則的可擴展性要求

注:這些要求適用與對標準編碼規則。不適用與使用ECN定義的編碼規則。

7.1 ASN.1編碼規則應允許擴展類型x的編碼後的值使用和x相關的擴展類型y進行解碼。進一步說ASN.1編碼規則應允許y解碼之後重新編碼的值可以被和y相關(同樣和x相關)的擴展類型進行解碼。

       注:類型x,y,z可以出現任何擴展順序。

       如果擴展類型x的值被編碼,然後傳輸給其他應用,並使用擴展類型y進行解碼,那麼使用擴展類型y的解碼者可以獲取到以下抽象值:

a)     擴展根類型的抽象值;

b)     類型x和y共有的抽象值;

c)     只在擴展類型x中包含的抽象值的編碼將受限。

如果應用有需求,選項C中包含的編碼應能夠被包含與擴展類型y的編碼中。這樣的編碼對於擴展類型x應該是一個有效的編碼。

指導實例:系統A使用的擴展根類型x是一個包含了一個可選整型類型擴展的序列類型或集合類型。系統B使用的是相關擴展類型y,包含了兩個可選整型類型擴展項。B傳輸給A一個類型y的缺少第一個可選整型值的值應該能夠被A所識別。此外,如果應用協議要求,A必須能夠重新編碼一個x類型的第一個可選整型值存在的值,並附上從B得到的第二個整型值,傳輸回系統B。

7.2 所有ASN.1編碼規則應該支持枚舉類型和選擇類型的編碼和解碼。特別是如果傳輸值是在一系列擴展中,應該能夠被順利解碼,否則,解碼者應該能夠限制編碼範圍,並把不能識別的擴展值作爲一個不能識別擴展。

7.3 所有ASN.1編碼規則應支持對待擴展約束的類型的編碼和解碼。如果編碼和解碼者都包含待傳輸值擴展時,它可以成功解碼,如果解碼者沒有待傳輸的擴展類型時,解碼者應該能夠限制編碼範圍,然後把不能識別的擴展值作爲一個不能識別擴展。

       綜上所述,額外擴展是否存在應不影響之後的在其他類型中的其他擴展。

注1-         所有BER和PER編碼格式應都滿足這些要求,但是ECN不確定一定會滿足這些要求。

注2-         BER和PER不使用版本號來編碼擴展項。ECN可能會使用這樣的識別機制。

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