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