曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
義但又不是真正的文檔內容的元數據。注釋可能出現在文檔中除其他標記部分以外的任何地方。
X M L注釋的基本語法是:
其中“ comment text ”部分可以是任何不包含“ - -”的字符串(這主要是為了保證對
S G M L的兼容性)。此外,“. . .”部分不能以連字號(“-”)結尾,因為這可能造成結束分隔符
的混亂。
注釋并不是文檔的字符數據的組成部分!在注釋部分當中,實體不可能展開,任何標記也
不會被解釋。
XML 1.0規范允許,但并不要求X M L處理器為應用程序提供一種方法來獲取注釋的文本。
因此, X M L應用程序永遠不能依靠使用注釋來傳輸特殊指令(而這卻是一個相當流行的H T M L
技巧)。
讓我們來看一些例子:
36使用XML 高級編程
下載
程序清單2 - 7
下面是一些不合法的注釋(它們不能出現在一個元素標記中;“ - -”除非是注釋分隔符的一
部分,否則不能使用):
程序清單2 - 8
下面,我們看一看避開大塊文本的辦法。
2.9 CDATA部分
C D ATA部分是一種用來包含文本的方法,其對象是那些其中的字符如果不如此處理就會被
識別為標記的文本。這項特性對于希望在自己的文檔中包含X M L標記的使用舉例的作者來說是
最有用的,就像本書中的舉例。但這可能是在文檔中包含C D ATA部分的唯一說得過去的理由,
因為在使用這些部分時X M L幾乎所有的優勢都喪失殆盡。
C D ATA部分并不是在X M L文件中包含二進制數據的好辦法!這些數據永遠不能包含三字節
的序列“5D 5D 3E”(“] ] >”的十六進制表示),因為這個序列可能被解釋為C D ATA部分的結尾。
二進制數據可以用B a s e 6 4或其他什么技術編碼,只要它能夠保證被編碼的數據沒有包含大于符
號(>)。但是,如果用了這種方法,用B a s e 6 4編碼的二進制數據就可以包含在任何元素的內容
當中,因此C D ATA部分也就不必要了。
只要有字符數據出現的地方就可能出現C D ATA部分,但它們不能夠嵌套。在C D ATA部分中
唯一能夠被識別的標記字符串就是它的結束分隔符(“] ] >”)—小于符號和&符號可能以字符
形式出現;它們不必(也不能)被忽略。
C D ATA部分的基本語法如下:
在這里,“. . .”部分可以是任何字符串,只要不包含字符串“ ] ] >”。
如果你希望包含一個連續的標記塊,其中有X M L文檔中的實體引用(無需X M L解析器展開
實體或解釋元素標記),可以使用下面兩種方法的任意一種:
程序清單2 - 9
第2章XML 語法使用37
下載
或者:
程序清單2 - 1 0
從解析器輸出到應用程序的字符串在兩種情況下是一樣的:
第一種方法明顯要易于讀寫一些,而且還有一個額外的好處,就是允許在任何地方都可以
直接剪切粘貼X M L代碼。后一種方法僅僅是用正確的實體引用來代替兩個標記字符,這樣在解
析時它們就不會被錯誤地解釋為元素標記或實體引用(如果希望詳細了解解析和解析器,參見
后面的章節)。
2.10 文檔結構
根據你可能希望完成的操作,我們已經零敲碎打地了解到可能在X M L文檔中使用的許多語
法,下面讓我們來看一看文檔的整體邏輯結構。
2.10.1 序言
X M L文檔是以序言開頭的。它用來表示X M L數據的開始,描述字符的編碼方法,為X M L解
析器和應用程序提供其他一些配置線索。
序言的組成包括:一個可選的X M L聲明(下面就會介紹),可能緊跟著幾個(或者沒有)注
釋、處理指令、空白字符,其后可能有一個可選的文檔類型聲明(再帶著幾個可選的注釋、處
理指令和空白字符)。由于這些內容都是可選擇的,所以就意味著序言可以被省略,而文檔仍然
是格式正規的(參見XML 1.0推薦標準的2 . 8節)。
讓我們先來看一看序言的第一個組成部分。
1. XML聲明
所有的X M L文檔可能(也應該!)由一個X M L聲明(XML Declaration)開始。雖然文檔聲
明使用的是同指令處理類似的語法,但從技術上講,根據X M L推薦標準它們并不是一回事,因
為聲明是X M L中的保留部分。
如果包括X M L聲明,它必須處在文檔最前面—前面不允許有任何空白或注釋。嚴格地講,
在X M L當中這種聲明并不是必須的,但我們后面會看到,當處理文檔時,它確實會起到一些優
化的作用。
X M L早期的草案并沒有要求名稱大小寫敏感,所以許多早期實現者,包括微軟在內,用
的都是聲明的大寫版本(“<?XML ... ?>”)。但是,最終的W 3 C推薦標準提出了大小寫敏
感的要求,并將“ x m l”規定為小寫。這樣一來,某些所謂的X M L文檔就不再是合法的
XML 1.0數據。
38使用XML 高級編程
下載
下面的例子是一個X M L聲明的完整語法(包括可選的屬性e n c o d i n g和s t a n d a l o n e):
這些屬性已經在XML 1.0規范中做出了定義:
• version—不能省略;值必須為“ 1 . 0”;該屬性用來保證對X M L未來版本的支持。
• e n c o d i n g—可選;值必須是一種合法的字符編碼,例如“ U T F - 8”、“U T F - 1 6”或者
“I S O - 8 8 5 9 - 1”(即L a t i n - 1字符編碼)。所有X M L解析器都要求至少支持U T F - 8和U T F - 1 6。
如果沒有包含這個屬性,就假設是“ U T F - 8”或“ U T F - 1 6”編碼,這取決于開始的
“< ? x m l”字符串的格式。參見本章后面的字符編碼部分。
• s t a n d a l o n e—可選;值必須是“ y e s”或“n o”;如果是“y e s”就意味著所有必須的實體
聲明都包含在文檔中,如果是“ n o”就意味著需要外部的D T D。(參見第3章關于D T D的部
分。)
中國航空網 m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(16)