曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費(fèi)者
在將用非驗(yàn)證型的解析器解析的、格式正規(guī)但并不有效的文檔中,它們可能在一個獨(dú)立的X M L
數(shù)據(jù)對象中的內(nèi)部子集中聲明,而不需要使用外部D T D或模式。
(1) 外部子集引用
有兩種形式的引用D T D的外部子集的文檔類型聲明:
r o o t _ e l e m e n t _ n a m e是D T D的附著點(diǎn)。X M L文檔的元素樹中的所有子元素都繼承這個根節(jié)點(diǎn)
的D T D聲明。
S Y S T E M(上面例子中的“ s y s t e m _ i d e n t i f i e r”)和P U B L I C(上面的“ p u b l i c _ i d e n t i f i e r”)標(biāo)
識符的值都是U R I(Uniform Resource Identifier,統(tǒng)一資源標(biāo)識符)。在本文撰寫時,在大多數(shù)
實(shí)踐中, U R I都可以和U R L等同看待;雖然它的形式是“ h t t p : / / w w w. w r o x . c o m / m y f i l e . d t d”—
但實(shí)際上可以是任何能夠被負(fù)責(zé)處理的應(yīng)用程序識別出來的唯一名稱。
P U B L I C標(biāo)識符是用來引用某些D T D的,而它們是使用某些在X M L中沒有定義的方法來分
類和檢索的,但這只能是一個結(jié)構(gòu)中的某種標(biāo)準(zhǔn),或者是交換X M L數(shù)據(jù)的團(tuán)隊(duì)之間的協(xié)議。這
種不會像U R L那樣成為一種盲目的引用,但它的缺點(diǎn)在于其適用范圍不能超出相關(guān)機(jī)構(gòu)的范圍。
X M L解析器會試圖使用P U B L I C標(biāo)識符生成U R I。但如果做不到這一點(diǎn),就會使用S Y S T E M
標(biāo)識符的U R I。這種形式的缺點(diǎn)在于U R I可能失去作用(域名和文件路徑可能改變,或者被廢棄)
而D T D也找不到了。
由于通常使用的分段標(biāo)識符(字符#)并不真正是U R I的組成部分,所以如果在S Y S T E M標(biāo)
識符中出現(xiàn)分段標(biāo)識符時可能會提示錯誤。任何包含非A S C I I字符的U R I都必須用U T F - 8中的字
符表示(可能用一個或多個字節(jié)),然后使用標(biāo)準(zhǔn)的U R I“% H H”轉(zhuǎn)義序列來處理它們當(dāng)中的每
一個字節(jié)(這里“H H”是十六進(jìn)制值)。
下面是兩個引用外部D T D的實(shí)例:
程序清單2 - 11
或:
程序清單2 - 1 2
第2章XML 語法使用41
下載
“標(biāo)識符”是X M L從S G M L繼承過來的另一小部分內(nèi)容。
S G M L的“公共標(biāo)識符”提供了一種方法,允許文檔引用一個本地目錄(或者使用其他更
好的辦法)來查找D T D。這當(dāng)然是一個非常有用的技術(shù),但是在設(shè)計(jì)X M L時,并沒有就
解決公共標(biāo)識符的通用辦法達(dá)成一致。結(jié)果是, X M L允許使用公共標(biāo)識符,但需要系統(tǒng)
標(biāo)識符作為備份引用。
(2) 內(nèi)部子集聲明如果沒有外部D T D可用,X M L數(shù)據(jù)對象可以仍然使用實(shí)體引用,只要它
們在D T D的內(nèi)部子集中聲明過,后者是通過使用< ! D O C T Y P E . . . >的擴(kuò)充形式來實(shí)現(xiàn)的。D T D語
法是下一章的主題,所以屆時將揭示出更多的細(xì)節(jié)信息。作為基本常識,我們應(yīng)該知道內(nèi)部子
集的聲明是在< ! D O C T Y P E . . . >使用中括號[ . . . ]分隔的,而< ! E N T I T Y. . . >聲明則用來定義實(shí)體引用
的擴(kuò)充部分。
下面是一個內(nèi)部子集聲明的簡單例子,它涉及三個符號字符實(shí)體和兩個“文本宏”或“樣
板”實(shí)體:
程序清單2 - 1 3
上面的例子如果在I E 5中顯示的話(如果用戶沒有指定使用的樣式單),會得到如圖2 - 8所示
的畫面。
圖2-8
42使用XML 高級編程
下載
X M L文檔可能使用包含內(nèi)部和/或外部子集的D T D。如果兩種子集同時使用,而且有同一個
元素類型或?qū)嶓w的兩個聲明,內(nèi)部子集優(yōu)先。
現(xiàn)在我們已經(jīng)講解完了語言的語法和格式正規(guī)的文檔的核心語法,下面我們很快地瀏覽一
下X M L的第三個部分。
2.10.2 尾聲
X M L尾聲可能包含注釋、P I和/或空白。P I不一定非要應(yīng)用到文檔中尾聲之前或接下來的數(shù)
據(jù)中(如果有的話)的元素中。
這種方案可能本身就是自找麻煩,或者說它本身就存在著問題。因?yàn)閄 M L沒有定義任何文
檔結(jié)束指示符號,所以大多數(shù)應(yīng)用程序把文檔元素的結(jié)束標(biāo)記用于這種目的。這樣一來,網(wǎng)絡(luò)
鏈路可能在遇到根元素的結(jié)束標(biāo)記時就關(guān)閉了,而不再對尾聲進(jìn)行任何處理。而且,文檔之間
的處理指令在某種程度上也有些模糊不清。
尾聲被Tim Bray(XML 1.0推薦標(biāo)準(zhǔn)的作者之一)認(rèn)為是一個“真正的設(shè)計(jì)錯誤”—如果
沒有很好地利用,使用它可能是一種錯誤,我們應(yīng)當(dāng)注意到它不太可能具備與其他X M L應(yīng)用程
序的互操作性。
下面,我們應(yīng)該好好回顧一下我們已經(jīng)學(xué)到的關(guān)于X M L的語法了。
2.11 XML語法小結(jié)
X M L標(biāo)記的形式參見表2 - 5。
表2 - 5
語法組件
< t a g n a m e > 元素起始標(biāo)記
<tagname attribute=“value”> 帶有屬性的起始標(biāo)記
< / t a g n a m e > 結(jié)束標(biāo)記
< t a g n a m e / > 空元素標(biāo)記
<tagname attr1=“value1” 帶有兩個屬性的空元素標(biāo)記
a t t r 2 = “ v a l u e 2 ” / >
特殊的X M L指令和聲明參見表2 - 6。
表2 - 6
語法組件
<?xml version=“1.0” encoding=“UTF-8” standalone=“yes” ?> X M L聲明
<?name string ?> 用于X M L應(yīng)用程序的處理指令( P I)
<! - - string - -> 注釋,供撰寫者或編輯者使用
< ! [ C D ATA[string . . . ]]> 未解析的字符數(shù)據(jù)(C D ATA)部分
<!DOCTYPE string . . .> 文檔類型聲明(不是D T D)
X M L實(shí)體引用參見表2 - 7。
第2章XML 語法使用43
下載
表2 - 7
語法組件
& # d e c i m a l ; 使用十進(jìn)制數(shù)字表示的字符編號的引用
例如: ®
& # x H E X ; 使用十六進(jìn)制數(shù)字表示的字符編號的引用
例如: ૴
& r e f ; 對預(yù)先定義的X M L實(shí)體(如文本宏)的引用
現(xiàn)在我們了解了可能在格式正規(guī)的文檔中使用的各個部分,下面讓我們討論一下“格式正
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(18)