曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
要理解H T M L和X M L之間的差異,最重要的是理解它們共同的發展根源: S G M L。
1. HTML不是X M L
S G M L是通用標記語言標準( Standard Generalized Markup Language)的縮寫。S G M L是第
一個被廣泛使用的標記語言系統,如今在許多商業領域仍然廣泛使用,特別是需要頻繁處理文
檔的領域(例如:出版公司)。與H T M L這種純粹的標記語言不同, S G M L實際上是一種定義標
記語言的方式。S G M L的這一特征與X M L非常類似,但是S G M L嵌套標記和定義信息的方式更加
靈活。H T M L是一種特殊的S G M L實現,它遵守S G M L的語法規則,但是它包含允許在H T M L文
檔中出現的特定的元素和屬性定義。實際上,有一個S G M L的D T D(文檔類型定義)描述了
H T M L的詞匯表和規則。地址h t t p : / / w w w. w 3 . o rg / T R / h t m l 4 0 / s g m l / d t d . h t m l提供了這個D T D的完整
內容。
第5章文檔對象模型使用117 下載
另一方面, X M L是S G M L的直接子集。X M L設計的主要目標是創建一種能夠保持S G M L靈
活性但更加易于解析的標記定義語言。因此,許多在S G M L中有效的結構對于X M L文檔來說是
無效的(因此H T M L也不是有效的X M L文檔)。
2. HTML DOM存在的問題
就HTML DOM為開發人員提供的訪問H T M L文檔內容的方式而言,它不是十分靈活。特別
是由于它要支持被非正式地稱為“ DOM Level 0 ”的一組特征—Internet Explorer 3.0 和
Netscape 3.0中實現的功能,它是在標準化用于定義H T M L頁面行為的對象模型之前提出的。僅
僅為了向后兼容, HTML DOM必須實現一些功能。另外, HTML DOM支持S G M L的特殊實現
(依賴于是否存在用于說明文檔可能布局的預定義D T D)。
3. Internet的未來:X H T M L
W 3 C正在研究一個關于X M L實現的建議—X H T M L。它將遵守X M L的所有語法規則(正
確嵌套的元素,引號包含的屬性,等等),同時它也符合H T M L的詞匯表(可用的元素和屬性,
以及它們之間的關系)。雖然目前尚未出現專門支持X H T M L的瀏覽器,但是H T M L解析器和
X M L解析器都能夠解析正確的X H T M L文檔。當你編寫H T M L時,最好遵守以下規則,使得文檔
也能夠被X H T M L的規則正確解析:
• 文檔必須是格式正規的,所有元素必須正確結束(每個< TA G >必須有對應的< / TA G >,或
者對于空元素,必須在起始標記的末尾增加“ /”以表示結束)。
• 元素必須正確嵌套—即:每個結束標記必須作為最近的處于打開狀態的標記的結束符
(不允許交錯)。
• 元素和屬性名稱必須是小寫的。
• 空元素必須有結束標記,或者以“ /”結尾的起始標記。
• 屬性-值對必須顯式定義。
• 腳本元素和樣式元素應該包含在C D ATA部分,以免被錯誤地解析。
• id屬性應該用于保存元素標識符。
下面我們詳細說明這些規則。
(1) 文檔必須是格式正規的,所有元素必須正確結束,元素必須正確嵌套
H T M L的某些元素不需要顯式結束,例如:段落元素< P >。解析器通過檢查后面的元素判斷
段落元素應該在何處結束。例如,以下H T M L片段在X H T M L中是無效的:
在X H T M L中,應該使用以下代碼:
(2) 元素和屬性名稱必須是小寫的
X M L是區分大小寫的,它將僅僅大小寫不同的標記視為不同的標記。XHTML DTD規定所
有元素和屬性都應該使用小寫標記, X H T M L文檔必須遵守這條規則。
因此,對于以下代碼:
118使用XML 高級編程
下載
應該改為:
注意,我們在標記結尾增加了斜杠。這就是下一條規則。
(3) 空元素必須有結束標記,或者在起始標記末尾增加“ /”
在X M L中,所有元素都必須是閉合的;如果某個元素定義為E M P T Y(它只可能包含屬性,
而不會有其他相關的信息),它可以以獨立的結束標記結束,或者在起始標記的末尾增加斜杠。
當然,在H T M L中允許某些元素不指定結束標記,例如< P >—遇到的下一個起始標記意味著前
一個標記塊的結束。為了盡可能與以前的瀏覽器兼容,應該使用獨立的結束標記表示整個標記
的結束,而不應該使用帶斜杠的起始標記—有些瀏覽器不能正確地解析末尾的斜杠。
(4) 屬性-值對必須顯式定義
如果元素有缺省的屬性,指定該屬性的值時必須包含屬性的名稱。
以下代碼:
應該改為:
(5) 腳本元素和樣式元素應該包含在C D ATA部分中,以免被錯誤地解析
由于s c r i p t和s t y l e元素在XHTML DTD中被聲明為# P C D ATA元素,因此解析器會將<和&視
作標記的開始。為了避免這種誤會, s c r i p t和s t y l e元素應該包含在C D ATA部分中,使它們能夠直
接包括非轉義文本。
以下代碼:
應該改為:
(6) id屬性應該用于保存元素標識符
在XHTML DTD中,i d屬性的類型是I D;因此,應該使用i d屬性而不是n a m e屬性標識元素。
在將來的X H T M L實現中,n a m e屬性將被逐步淘汰。
由于X H T M L是一種正在形成的標準,目前許多可視化的H T M L編輯工具都不支持這些規則,
因此如果使用它們編輯文檔,很可能無意中破壞X H T M L文檔的正確性。在你創建X H T M L文檔
時,要牢記這一事實。當你對編輯工具表示懷疑時,最好使用文本編輯器修改文檔,而不要使
用F r o n t P a g e或Microsoft Visual InterDev等工具。
謹遵這些建議,你將保證你的文檔與未來轉向X H T M L的瀏覽器最大限度的兼容。另外,你
所創建的X H T M L文檔可能會以M I M E類型的H T M L或X M L的形式發送給客戶端,使得客戶端在
第5章文檔對象模型使用119 下載
文檔的顯示和操作上擁有最大程度的靈活性。客戶端可以直接使用XML DOM操作X H T M L文檔
的內容。
5.2 使用DOM
我們已經討論過D O M是如何結構化的,它將X M L文檔轉化為可以通過程序訪問的節點樹。
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(50)