??????XHTML是當前和未來的文檔標準之一,是對HTML4的重述、延伸和擴展。XHTML文檔類型是基于XML,并最終為XML客戶端服務的。
??????XHTML1.0是XHTML的第一個版本,它是作為XML1.0的應用對HTML4的三個版本的重新陳述。它將成為一種既符合XML標準,又能被HTML標準瀏覽器所識別的文檔標記語言。那些轉向XHTML的開發者將會發掘下列優點:XHTML是和XML保持一致的,同樣地,它也是能被將來的XML工具察看、編輯和驗證的。XHTML文檔在舊的基于HTML的瀏覽器中能夠表現得和在新的基于XHTML的瀏覽器中一樣出色。
??????XHTML在應用上,既能夠利用HTML的文檔對象模塊(DOM),又能利用XML的文檔對象模塊。
??????在XHTML家族的發展過程中,XHTML格式的文檔將會活躍在各類多種多樣的XHTML環境之中。
??????XHTML是英特網發展的新的一步。在逐步轉向XHTML的今日,文檔開發者們能在保持向后和向前的兼容性的同時進入XML的殿堂并享受隨之而來的種種優點。
XHTML1.0的標準定義
1. 文檔格式
1.1 嚴格定義的文檔
一份嚴格定義的XHTML文檔是一份符合下列標準的文檔:
應該通過三種之一的DTD的驗證。
文檔的根元素應該是<html>。
文檔的根元素必須通過xmlns屬性來指定XHTML詞匯表。XHTML詞匯表應該定義成http://
www.w3.org/1999/xhtml
在文檔里的根元素之前應該有文檔類型申明的語句。文檔類型申明中的public標識符必
須引用,并使用三種DTD中的一種的正式public標識符引用。改變系統標識符可以用來反
映本地的系統約定。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.
dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-t
ransitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "DTD/xhtml1-frame
set.dtd">
以下是一個短小的XHTML文檔示范
??????? <?xml version="1.0" encoding="UTF-8"?>
??????? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1
-strict.dtd">
??????? <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
??????????????? <head>
??????????????? <title>Virtual Library</title>
??????????????? </head>
??????????????? <body>
??????????????? <p>Moved to <a >vlib.org</a>.</p>
??????????????? </body>
??????? </html>
請注意,在上述例子中包含了XML申明。像上述的XML申明并不是所有XML文檔必須的。X
HTML文檔作者們強烈建議在所有文檔中使用XML申明。當字符集超出了默認的UTF-8或UT
F-16的范圍時,這樣一個申明是必須的。
1.2 XHTML和其它詞匯表一起使用
XHTML詞匯表可以和其它詞匯表一起使用,即使這樣一份文檔并不是上述嚴格定義的。今
后W3C將對這類混合使用詞匯表的文檔進行標準的格式化定義。
下面是一個在XHTML1.0中使用MATHML的例子:
??????? <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
??????? <head>
??????? <title>A Math Example</title>
??????? </head>
??????? <body>
??????? <p>The following is MathML markup:</p>
??????? <math xmlns="http://www.w3.org/1998/Math/MathML">
??????? <apply> <log/>
??????????????? <logbase>
??????????????? <cn> 3 </cn>
??????????????? </logbase>
??????????????? <ci> x </ci>
??????? </apply>
??????? </math>
??????? </body>
??????? </html>
???????
下面是XHTML1.0在其他類型的XML詞匯表中使用的例子:
??????? <?xml version="1.0" encoding="UTF-8"?>
??????? <!-- initially, the default namespace is "books" -->
??????? <book xmlns='urn:loc.gov:books'
??????? xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en">
??????? <title>Cheaper by the Dozen</title>
??????? <isbn:number>1568491379</isbn:number>
??????? <notes>
??????? <!-- make HTML the default namespace for a hypertext commentary -->
??????? <p xmlns='http://www.w3.org/1999/xhtml'>
??????????????? This is also available <a
>online</a>.
??????? </p>
??????? </notes>
??????? </book>
???????
2. 客戶端兼容性
一個和XHTML兼容的客戶端必須符合以下標準:
為符合XML1.0推薦標準,客戶端必須分析和評估XHTML文檔是否是格式化(Well-Formed
ness)的。如果是一個驗證了(validating)的客戶端,那它必須進一步按照DTD驗證文
檔是否有效(validate)。
當客戶端是申明支持本規范定義的設備(Facilities),或按照本規范進行標準的引用
,那么也必須按照規范定義來驗證設備。
當客戶端按照普通XML文檔來處理XHTML文檔時,應該只有id屬性被作為片斷標識符。
當客戶端遇到不能識別的元素時,其內容將被返回。
當客戶端遇到不能識別的屬性時,應該忽略整個屬性內容(包括屬性的名稱和值)。
當客戶端遇到不能識別的屬性的值時,應該使用默認的屬性值代替。
當客戶端遇到不能識別的實體引用(可能是在外部的未讀子集中)時,將返回用來代替
實體的字符(以&開頭,以;結尾)。
當客戶端再返回內容的時候,如果遇到能識別但不能返回的字符或字符實體引用時,客
戶端應該以一種讓用戶清晰地知道文檔難以用普通的方法返回的途徑顯示文檔。
以下字符在XML中被定義為純空字符(whitespace):
Space ( )
Tab ( )
Carriage return (
)
Line feed (
)
XML處理器將不同系統的行終止符處理成一種簡單的Line-feed字符來傳遞給應用程序。
并且在XHTML處理器中,下列字符也必須被識別為純空子符:
Form feed ( )
Zero-width space (?)
在處理元素時,當"xml:space"屬性被置為"preserve"時,所有的純空字符將被原封不動
地保留(開頭和結尾的純空字符將被刪除)。否則,純空子符將按照以下規則處理:
圍繞塊元素的純空子符將被刪除。
刪除整個注釋并不影響純空子符的處理。在注釋兩頭的純空子符將加倍處理。
在塊元素內部開頭和結尾的純空子符將被刪除。
在塊元素內部,line feed字符將被轉換成space字符("xml:space"被置成"preserve"的
情況除外)。
連續的純空字符將被置換成一個單獨的space字符("xml:space"被置成"preserve"的情
況除外)。
關于譯文,客戶端應用最適合于撰寫文檔的語言的風格來返回文檔內容。在一個以拉丁
文為主的腳本中,ASCII的空格字符被象征性地用來為拉丁語法規范的單詞分界和排字純
空字符編碼;在一個以NAGARI文為主的腳本中,語法規則中的單詞分界將被編碼成ZW空
格,而在排字輸出的時候則不會被象征性地表現出來;阿拉伯語的腳本中,排字純空字
符用space字符來做編碼,也使用ZW空格來做“內部”分界的編碼;而一個中文腳本通常
不使用上述方法編碼。
3. XHTML和HTML4的區別
3.1 文檔必須是結構化的
“結構化”是XML提出的新的概念。從本質上來說,就是所有的元素都必須有結束標簽(
或者以一種特殊的方式呈現——下述),并且符合嵌套規則。
即使交錯標簽在SGML中是非法的,可是目前很多瀏覽器仍然允許這種寫法。
正確:符合嵌套規則
<p>here is an emphasized<em>paragraph</em>.</p>
錯誤:交錯標簽
<p>here is an emphasized<em>paragraph.</p></em>
3.2 元素和屬性的名稱必須是小寫的
XHTML文檔在使用HTML的元素和屬性時必須使用小寫字母。導致這種差異的原因是,XML
區分大小些。
3.3 非空的元素必須有結束標簽
在基于SGML的HTML4中,這樣的元素被允許忽略結束標簽;在這些元素后有隱藏的結束標
簽。在基于XML的XHTML中,這種忽略是非法的。除了在DTD中申明的空元素,所有元素必
須有結束標簽。
正確:結尾了的元素
<p>here is a paragraph.</p><p>here is another paragraph.</p>
錯誤:未結尾的元素
<p>here is a paragraph.<p>here is another paragraph.
3.4 所有屬性值必須用引號引用
所有屬性值必須用引號引用,即使是屬性值為數字的屬性。
正確:使用引號的屬性值
<table rows="3">
錯誤:未使用引號的屬性值
<table rows=3>
3.5 關于簡化屬性
XHTML不支持簡化屬性。屬性-值必須成對完整出現。
正確:非簡化屬性
<dl compact="compact">
錯誤:簡化屬性
<dl compact>
3.6 關于空元素
空元素必須有結束標簽或以/>結尾。例如:<br/>或<hr></hr>
正確:結束了的空標簽
<br/><hr/>
錯誤:未結束的空標簽
<br><hr>
3.7 屬性值中純空字符的處理
在屬性值中,客戶端將跳過開始和結尾的純空字符并把連續的純空字符轉換為單一的空
格。
3.8 腳本和樣式屬性
在XHTML中,腳本和樣式屬性被申明成能包含#PCDATA類內容的屬性。結果,<和&將被處
理成標記的開始,像<和&這樣的實體將被客戶端各自處理成對于<和&的實體引用
。在一個有CDATA標記的部分外放置腳本和樣式屬性,將不支持這種擴展。
??????? <script>
??????? <![CDATA[
??????? ... unescaped script content ...
??????? ]]>
??????? </script>
???????
可以選擇使用擴展腳本和樣式元素。
3.9 SGML禁令
SGML給DTD撰寫者以禁止某些特定元素嵌套在另一元素內的能力。這在XML里是無法實現
的。例如,HTML 4 Strict DTD里禁止了在一個a元素里嵌套另一個a元素。這在XML里是
無法描述的。
3.10 伴隨元素的“id”和“name”屬性
??????HTML4 給a, applet, form, frame, iframe, img和map定義了name屬性。HTML4也推出了id屬性。它們都被用作片斷標識符。在XML中,片斷標識符是ID類型,并且每個元素只能擁有單一的ID類型。所以,在XHTML 1.0中,id屬性就被定義為了ID類型。為了確定一份XHTML文檔是結構化了的XML文檔,必須用id屬性來做片斷標識符,即使某元素曾經擁有name屬性。請注意,在XHTML1.0中,name元素是不推薦使用的,并將在以后的版本中去處。
?
PS:
另外推薦一篇文章:《HTML和XHTML常見問答》,編者是: Steven Pemberton(http://www.cwi.nl/~steven/), W3C/CWI,文章鏈接:http://www.transwiki.org/cn/xhtmlfaq.htm(中文翻譯版,送給厭煩看E文的朋友 呵呵)
posted on 2007-06-13 11:25
小立飛刀 閱讀(1262)
評論(0) 編輯 收藏 所屬分類:
XForms