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