12 ASN.1詞項
12.1 基本規則
12.1.1以下章節定義了詞項使用的字符集。每個詞項名稱是由構成詞項的字符集組成的。
12.1.2詞項的定義在本章中進行定義。除了多行註釋,bstring,hstring,cstring,其他詞項不應該包含空白字符。(詳見:12.6,12.10, 12.12和12.14)
12.1.3每行的長度不限制。
12.1.4多個詞項之間可以通過一個或多個空白字符(詳見12.1.6)或除了使用非空指示符“&”外的註釋(詳見12.6)區分。在XMLTypedValue表達式中(詳見16.2),空白字符可以出現在詞項之間,但是禁止使用comment詞項。
注:這樣可以避免在xmlcstring詞項中出現臨近的連字符或星號和斜槓。在XMLTypedValue中,這些字符不會被用來標識comment詞項。
12.1.5如果後續詞項是之前詞項的許可字符,那麼兩個詞項之間應該通過空白字符或註釋區分。
12.1.6本規範使用詞彙換行和空格。在機器可識別規範中空格和換行的描述由以下字符組合而成(以下每個字符使用Unicode標準)。
空白字符:
HORIZONTALTABULASTION(9)
LINEFEED(10)
VERTICALTABULASTION(11)
FORMFEED(12)
CARRIAGERETURN(13)
SPACE(32)
換行:
LINEFEED(10)
VERTICALTABULASTION(11)
FORMFEED(12)
CARRIAGERETURN(13)
注-所有的換行字符同樣是有效的空白字符。
12.2 類型名稱
詞項名稱-typereference
12.2.1typereference應由任意多個字母,數字和連字符組成,首字符大寫。連字符不能是最後一個字符。連字符之後不能再跟一個連字符。
注-有關連字符的規則是爲了避免與註釋歧義。
12.2.2typereference不應該使用12.38列出的保留字符集。
12.3 標識符
詞項名稱-identifier
identifier應由任意多個字母,數字和連字符組成。首字符大寫。連字符不應該是最後一個字符。連字符不應該緊跟另一個連字符。
注-有關連字符的規則是爲了避免與註釋歧義。
12.4 值名稱
詞項名稱-valuereference
valuereference應該由12.3定義identifier的字符序列組成。在分析使用該標識的實例時,valuereference和identifier是通過它出現的上下文語境來區分。
12.5 模塊引用
詞項名稱-modulereference
modulereference應該由12.2定義的一系列typereference組成。在分析使用該標識的實例時,上下文中modulereference和typereference的區別是他們出現的地方。
12.6 註解
詞項名稱-comment
12.6.1 comment不在ASN.1標識中引用。它可以在任何詞項之間出現,並沒有任何意義。
注-雖然如此,在使用ASN.1的標準語境中,一個ASN.1comment或許包含與應用環境相關的標準文本,或語法約束。
12.6.2 comment有兩類格式:
a)在12.6.3中定義的單行註釋,起始符“--”
b)在12.6.4中定義的多行註釋,起始符“/*”
12.6.3任何時候,當comment由雙連字符開始,它應該結束與下一個雙連字符或者本行的末尾。comment不應該包含雙連字符,否這comment結束。如果comment起始與“--”,包含字符串“/*”或“*/”,他們沒有特別的意義,被認爲是comment的一部分。comment可以包含不在11.1中的字符集。
12.6.4當comment起始與“/*”,它應該終止與“*/”,不管“*/”是否在同一行中。如果另外一個”/*”在發現“*/”之前被發現,那麼comment在每一個“*/”匹配“/*”之後結束。如果起始於“/*”的comment包含雙連字符“--”,那麼這些雙連字符沒有特別的意義,只是作爲comment的一部分。comment或許包含不在11.1中的字符集。
注-這樣允許使用者通過簡單的在起始插入“/*”和在末尾插入“*/”註釋掉ASN.1的部分已經包含註釋的模塊(不管他們是起始與“--”還是“/*”),確保在“/*”和“*/”之外的字符串不被註釋掉。
12.7 空白詞項
詞項名稱-empty
empty詞項不包含字符。用於第五章當表達式序列可選集被指定時標識所有可選項都缺席是可能的。
12.8 數字
詞項名稱-number
number應包含一個或多個數字。首位不能爲0除非number是單個數字。
注-number詞項通常映射爲整形值,並解析爲十進制標識。
12.9 實數
詞項名稱-realnumber
realnumber應包含一個或多個數字組成的整數部分,和可選的小數點。小數點之後的小數部分可跟隨一個或多個數字。整數部分,小數點,小數部分都可以跟隨e或者E和可選的由一個或多個數字組成的指數冪。指數冪首字符不應該爲0,除非是單字符的。
12.10 二進制字符串
詞項名稱-bstring
bstring可以包含隨意多個0和1,並可能混雜着空格,由撇號包圍並跟隨字符B。
例如:’11010101’B
bstring中空格是否出現並不重要。
12.11 XML二進制字符串
詞項名稱-xmlbstring
xmlbstring應包含隨意多個0、1和空格。空格是否出現在xmlbstring並不重要。
例如-01100000
這個字符集在xmlhstring和xmlcstring中同樣有效。在分析xmlbstring標識實例的時候,通過上下文來區分xmlbstring、xmlhstring、xmlcstring。
12.12 十六進制字符串
詞項名稱-hstring
12.12.1 hstring應包含隨意多個以下字符:
A B C D E F 0 1 2 3 4 5 6 7 8 9
可能包含多個空格,並使用撇號包圍,最後跟隨H字符。
例如-‘AB0196’H
空格是否出現並不重要。
12.12.2 每個十六進制字符用來表示半個字節的值。
12.13 XML十六進制字符串
詞項名稱-xmlhstring
12.13.1xmlhstring應包含任意數量的以下字符:
01 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
或空格。空格在xmlhstring中出現沒有任何意義。
例如-Ab0912
12.13.2每個十六進制字符用於表示半個字節的值。
12.13.3一些xmlhstring的實例通常是xmlbstring和xmlcstring的有效實例。在分析xmlhstring實例時候,需要根據上下文區分xmlhstring、xmlbstring、xmlcstring。
12.14 字符串
詞項名稱-cstring
12.14.1cstring應該包含任意數量的來自於字符串類型字符集的圖形符號和空格,並且由雙引號包圍。如果字符串中包含雙引號字符,那麼之後應該緊跟一個雙引號。cstring可能包含多行數據,出現在字符串中的控制符將被忽視。
注1-cstring只能被用於唯一的展現字符串,字符串中的每個字符都應該是圖形字符或空格。當字符串包含控制字符的想要展現時,可選的ASN.1句法詳見39章。
注2-cstring包含圖形字符和空白字符。在cstring之前或之後的空白字符是被忽略的。包含在cstring中的空白字符或不可打印字符,那麼這個cstring在打印呈現時是有歧義的。
12.14.2當字符是一個組合字符,在cstring中應該作爲單獨字符展示。它不應該作爲組合字符打印。(這樣可以保證組合字符可以確保唯一的打印版本)。
12.15 XML字符串項
詞項名稱-xmlcstring
12.15.1xmlcstring應該包含任意數量的ISO/IEC 10646字符:
a) 橫向製表符(9)
b) 換行符(10)
c) 回車符(13)
d) 在32-55295之間的所有ISO/IEC10646字符;
e) 在57344-65533之間的所有字符;
f) 在65536-1114111之間的所有字符;
注-在使用實例中應該只包含控制字符類型所許可的字符,額外的約束要求被強加給xmlcstring。
12.15.2“&”、“<”、“>”應該作爲定義在12.15.4或12.15.5定義的字符序列的一部分出現。
12.15.3xmlcstring用於呈現受限字符串的值(詳見41.9),可以直接的或通過以下定義的轉義字符間接的展現ISO/IEC 10646的所有字符組合。
注1-xmlcstring不可以用來展現不在ISO/IEC10646規範中的字符,例如一些可以在GeneralString中展現的控制字符,也不可以展現大於10ffff的ISO/IEC 10646字符。
注2-換行符(10)和回車符(13)以及他們的組合在確認xml進程中不被識別。
12.15.4如果“&”、“<”、“>”需要在xmlcstring中展現,他們應該通過以下途徑的某一類途徑展現:
a) 定義在12.15.8的轉義字符;或
b) 分別使用“&;”、“<;”、“>;”。這些轉義字符不應該包含空格。(詳見12.15.6)
12.15.5如果一個ISO/IEC 10646字符在表3的第一列,那麼他在xmlcstring中的展現方式在表3的第二列展現。這些字符串不應該包含空格(詳見12.1.6)。
注-表3中字符不包含十進制的字符9、10和13,所有字符都是小寫。
表3略。有時間再補上
12.15.6當xmlcstring在XMLTypedValue中作爲XER編碼的一部分使用,他或許包含雙連字符。當在ASN.1模型中作爲XML值標識實例使用時,xmlcstring不應該包含雙連字符。如果這個字符串是作爲ASN.1模型中的xmlcstring的一個抽象值展現,那麼至少一個連字符應該通過12.15.8定義的轉義字符方式呈現。
12.15.7當xmlcstring在XMLTypedValue中作爲XER編碼的一部分使用時,它可能包含星號和斜槓符號。當在ASN.1模型中作爲XML值標識實例的時候,他不應該包含星號和斜槓符號。如果字符串是作爲抽象字符串呈現,那麼至少一個星號和一個斜槓符號應該通過12.15.8定義的轉義字符方式呈現。
12.15.8任何可以在xmlcstring中直接呈現的字符也可以通過轉義字符格式“&#n;”(n是十進制)或“&#xn;”(n是十六進制)呈現。這些轉義字符不應該包含空白字符(詳見12.1.6)。
注1-0開頭在十進制和十六進制中都是允許的。大寫或小寫的a-f都可以在十六進制中使用。
注2-如果使用的轉義字符不在基本多國語言中(BMP),那麼n會大於65535。
12.16 單個字符詞項
詞項名稱-simplestring
simplestring應該包含任意數量的字符編碼在32到126之間的ISO/IEC 10646字符並使用雙引號包圍。simplestring不應該包含雙引號。simplestring可能包含多行文本,每行末字符應該作爲間隔字符對待。在分析標識的使用實例時,simplestring和cstring的區別在上下文中區分。
注-simplestring詞項只在時間類型的子標識中使用。
12.17 時間字符串
詞項名稱-tstring
tstring應該包含以下任意數量的字符:
01 2 3 4 5 6 7 8 9 + - : . , / C D H M R P S T W Y Z
並使用雙引號包圍。
注-tstring詞項只在時間類型的子標識使用。
12.18 XML時間字符串
詞項名稱-xmltstring
xmltstring應該包含以下任意數量的字符:
01 2 3 4 5 6 7 8 9 + - : . , / C D H M R P S T W Y Z
注-xmltstring詞項只在時間類型的XML值標識中使用。
12.19 屬性和集合名稱詞項
詞項名稱-psname
psname應該包含任意數量的字母、數字和連字符。首字母大寫。連字符不應該是最後一個字符,連字符不應該緊跟連字符。
注-psname應該是作爲simplestring的內容用於時間類型的子標識。
12.20 分派詞項
詞項名稱-“::=”
該詞項由以下字符組成:
::=
注-該序列不包含空格(詳見12.1.2)
12.21 一系列符號
詞項名稱-“..”
該詞項由以下字符串組成:
..
注-該序列不包含空格(詳見12.1.2)
12.22 省略符號
詞項名稱-“…”
該詞項由以下字符串組成:
…
注-該序列不包含空格(詳見12.1.2)
12.23 左版本括號
詞項名稱-“[[”
該詞項由以下字符串組成:
[[
注-該序列不包含空格(詳見12.1.2)
12.24 右版本括號
詞項名稱-“]]”
該詞項由以下字符串組成:
]]
注-該序列不包含空格(詳見12.1.2)
12.25 編碼引用
詞項名稱-encodingreference
encodingreference由12.2的typereference定義的所有字符序列組成,除了不包含小寫字符。
注-當前定義的編碼引用在本規範的附錄E中列出,它闡述了對應編碼說明的句法和語義。encodingreference應該只包含在未來版本的本規範的附錄E中列出。
12.26 整型值Unicode標籤
詞項名稱-integerUnicodeLabel
該詞項包含任意數量的數字0-9來識別國際對象標識符樹的節點。它不應該0起始,除非他是個單字符並且關聯的國際對象標識符樹的相關節點基本值是0。
12.27 非整型值Unicode標籤
詞項名稱-non-integerUnicodeLabel
該詞項應該包含任意數量的ISO/IEC10646字符,並且按照X660約束定義,用於識別國際歸降標識符樹的節點。爲了詞項解析方便,他不應該只包含可以識別爲integerUnicodeLabel的字符。
12.28 XML終止符起始
詞項名稱-“</”
該詞項由以下字符串組成:
</
注-該序列不包含空格(詳見12.1.2)。
12.29 單一XML標籤終止符
詞項名稱-“/>”
該詞項由以下字符串組成:
/>
注-該序列不包含空格(詳見12.1.2)。
12.30 XML 布爾真
詞項名稱-“true”
12.30.1該詞項由以下字符串組成:
true
12.30.2在分析本標識使用實例時,true和valuereference、identifier、XML擴展true的區別在於他們的上下文。
注-該序列不包含空格。(詳見12.1.2)。
12.31 XML布爾真擴展
詞項名稱-extended-true
12.31.1該詞項由以下字符串組成:
true
或單個字符:
1(數字1)
12.31.2在分析本標識使用實例時,extended-true和valuereference、identifier、XML“true”的區別在於他們的上下文。
注-該序列不包含空格(詳見12.1.2)。
12.32 XML布爾假
詞項名稱-false
12.32.1該詞項有以下字符串組成:
false
12.32.2在分析本標識使用實例時,false和valuereference、identifier、XML擴展false之間的區別在於上下文。
注-該序列不包含空格(詳見12.1.2)。
12.33 XML布爾假擴展
詞項名稱-extended-false
12.33.1 該詞項由以下字符串組成:
false
或單個字符:
0(數字0)
12.33.2 在分析本標識使用實例時,extended-false和valuereference、identifier、XML false之間的區別在於他們的上下文。
注-該序列不包含空格(詳見12.1.2)。
12.34 XML非數字項
詞項名稱-“NaN”
12.34.1該詞項有以下字符串組成:
NaN
12.34.2在分析本標識使用實例時,NaN和其他詞項的區別在於他是以大寫字母開頭的。
注-該序列不包含空格(詳見12.1.2)。
12.35 XML無窮大項
詞項名稱-INF
12.35.1該詞項由以下字符串組成:
INF
12.35.2在分析本標識使用實例時,INF和其他詞項的區別在於他是以大寫字母開頭的。
注-該序列不包含空格(詳見12.1.2)。
12.36 XML ASN.1類型的標籤名稱
詞項名稱-xmlasntypename
12.36.1本規範在Asn.1內嵌類型使用XML標籤名稱時使用xmlasntypename。
12.36.2表四列出了17.2列出的每個ASN.1內嵌類型的xmlasntypename。表4第一列列出了ASN內嵌類型的表達式名稱。表4第二列列出了xmlasntypename字符串。
12.36.345.1節的UsefulType的xmlasntypename應該是typereference中定義。
12.36.4ObjectClassFieldType和InstanceOfType的xmlasntypename字符串在x681和附錄C中定義。
12.36.5如果ASN.1內嵌類型是PreFixedType,那麼決定xmlasntypename的類型應該是PreFixedType(詳見31.1.5)中的類型。如果該類型還是PreFixedType,那麼12.36.5應該被嵌套調用。
注-26.10節定義Type可以被使用爲SelectionType和ConstainedType。
表4略
12.37 單字節詞項
詞項名稱-
“{”
“}”
<
>
,
.
/
(
)
[
]
-
:
=
“
‘
“ ”(空格)
;
@
|
!
^
以上詞項名稱都不包含雙引號。
12.38 保留關鍵字
保留關鍵字-略
以上詞項名稱應該由字符串組成,並且是保留的字符串。
注1- 空格不出現在以上字符串中。
注2- 關鍵字CLASS,CONSTRAINTED,CONTAINING,ENCODED,INSTANCE,SYNTAXH和UNIQUE不是在本規範中使用;他們在X681,X682,X683中使用。