HTML和XHTML常見問答

TransWiki - W3CHINA.ORG開放翻譯計劃(OTP)


譯文 HTML和XHTML常見問答(http://www.transwiki.org/cn/xhtmlfaq.htm (http://www.transwiki.org/cn/xhtmlfaq.htm)
原文 HTML and XHTML Frequently Answered Questions(http://www.w3.org/MarkUp/2004/xhtml-faq (http://www.w3.org/MarkUp/2004/xhtml-faq)
說明
  • 本文檔是根據2004年7月21日發佈的HTML and XHTML Frequently Answered Questions (http://www.w3.org/MarkUp/2004/xhtml-faq)進行翻譯的。
  • 本文檔的英文版 (http://www.w3.org/MarkUp/2004/xhtml-faq)是唯一的正式版本。
  • 雖然譯者已爲翻譯之精確付出努力,不足之處仍難免存在。歡迎指正 (http://www.transwiki.org/cn/xhtmlfaq-edit.htm)
  • 譯註的內容是非正式的,僅代表譯者個人觀點。
  • 著作權聲明位於:

http://www.w3.org/Consortium/Legal/copyright-documents.html
Copyright  © 1998 W3C® (MIT, INRIA, Keio ), All Rights

Reserved. W3C liability, trademark, document use and software licensing rules apply.

  • 中文版的版權聲明:轉載本文,請註明譯者、原鏈接及出處爲“W3CHINA.ORG 開放翻譯計劃(OTP)”
譯者
  • 徐涵 (http://bbs.w3china.org/dispuser.asp?name=admin)(Collin Hsu) collin<at>w3china.org。

致謝

感謝所有關注本次翻譯活動和給與幫助的朋友,並感謝由W3CHINA.ORG (http://www.w3china.org/)主辦的開放翻譯計劃(OTP) (http://wiki.w3china.org/)爲本次翻譯計劃提供翻譯與討論平臺。


HTML和XHTML常見問答


編者: Steven Pemberton (http://www.cwi.nl/~steven/), W3C/CWI
版本日期: 2004年7月21日
其他相關FAQ:

如有對本文檔的建議或提議增加新的問題,請發送電子郵件至[email protected] (mailto:[email protected])(請在郵件主題中加入“FAQ”字樣)。





爲什麼需要XHTML?HTML還不夠好嗎?

HTML也許是全球最成功的文檔標記語言(markup language)。不過,在XML被提出之後,有一個兩天的研討會討論了是否需要一個基於XML的新版HTML。該研討會的意見是明確的:即需要一個基 於XML的HTML,這樣其他XML語言可以包含XHTML片斷,而XHTML文檔也可以包含其他標記語言的片斷。我們還能利用重複設計 (redesign)以去除HTML中某些較不整齊的部分並添加一些新需要的功能(比如更好的表單)。

XHTML比HTML有哪些優點?

如果你的文檔僅是純XHTML 1.0的(不包含其他標記語言),那麼你還不能體會到較多的不同。但是,隨着越來越多XML工具(比如用於文檔轉換的XSLT)的出現,你將能體會到使用 XHTML的優點。比如,XForms使你可以用便捷的方式來編輯XHTML文檔(或其他類型的XML文檔)。語義Web應用也將得以從XHTML文檔獲 利。

如果你的文檔不僅是XHTML 1.0,比如還包含了MathML、SMIL或SVG,那麼優點將是立竿見影的:用HTML你是不可能完成這些事的。

我可以把XML聲明放到已有的HTML文檔頂部嗎?我可以把HTML 4.01和XHTML文檔混雜在一起嗎?

不可以。HTML並不是基於XML格式的。你必須對HTML文檔作必要的修改才能使之成爲正確的XML文檔。

HTML文檔轉換到XHTML的最容易的方法是什麼?

你可以利用HTML Tidy (http://tidy.sourceforge.net/)將HTML文檔轉換爲一個XHTML文檔。另外,Amaya (http://www.w3.org/Amaya/)也是一個可以把HTML文檔保存爲XHTML的瀏覽器和編輯器。

爲什麼瀏覽器對XML的處理如此嚴格,而對HTML則較容易接受?

這是當然的。HTML瀏覽器接受任何輸入(正確的或不正確的),並試圖使之得以正常顯示。這種錯誤糾正使得瀏覽器程序的編寫變得很難,尤其是在所有 瀏覽器都被期望具有相同的顯示結果時。這也意味着大量的HTML文檔是不正確的,因爲它們可以在瀏覽器中正常顯示,所以文檔作者未能注意到錯誤的存在。這 使得新的用戶代理(user agents)[譯註//瀏覽器是一種用戶代理]的編寫變爲驚人的困難,因爲聲稱符合HTML的文檔通常存在着很多錯誤。

我的HTML文檔在我的瀏覽器中顯示正常,爲什麼我還要關心它是不是正確的HTML?

所有的瀏覽器都知道應如何去處理正確的HTML,但是對於不正確的HTML文檔,瀏覽器必須要去修正它。而各種瀏覽器的修復方式是不統一的,這就造 成了差異。於是你的文檔在不同的瀏覽器中將會呈現出不同的顯示結果和行爲方式。由於目前的瀏覽器種類繁多,而且還在不斷增多(除PC機的瀏覽器以外,還有 PDA、手機、電視、打印機甚至電冰箱上的瀏覽器),因此不可能在每一種瀏覽器上對你的文檔進行測試。如果你使用的是不正確的HTML,並且不能在某種瀏 覽器上正常打開它的話,這將是你的過錯;如果你使用的是正確的HTML,而不能正常打開的話,那就是瀏覽器的bug了。

我在哪裏可以驗證文檔所使用的標記是否正確?

W3C提供了一個對文檔進行驗證的服務,該服務位於http://validator.w3.org/ (http://validator.w3.org/)Amaya (http://www.w3.org/Amaya/)是一個瀏覽器和編輯器,也可用它來確保標記的正確使用。

爲什麼本文各處都用“用戶代理(user agent)”這個詞,而不用“瀏覽器(browser)”?

儘管瀏覽器確實是HTML和XHTML的重要用戶,但是也存在其他讀取HTML和XHTML的程序和系統。比如,搜索引擎也讀取HTML和XHTML,但是它並不是瀏覽器。通過使用“用戶代理(user agent)”這個詞,我們試圖提醒人們這裏存在着區別。
比如,當你使用Google搜索引擎的時候,你也許會經常在某些搜索結果的下方看到一些諸如“本Web頁面使用了框架,而你的瀏覽器不支持框架。”之類的 文字,這無疑將使一些用戶不敢恭維並放棄點擊那個鏈接。因爲那些網站的作者沒有意識到不僅僅是瀏覽器會讀它的網頁[譯註//Google的搜索結果是由 spider讀取的,而Google的spider作爲一種用戶代理是不支持框架的],他們應在<noframes>中寫入更恰當的文字,以 至於不會顯得如此尷尬。

爲什麼在XHTML裏我必須使用命名空間?

在HTML時代的早期,不同的組織和公司隨意地在HTML中添加新的元素和屬性,這成爲導致由不可互操作的各種HTML版本造成混亂的潛在因素。 XML(其中的X代表Extensible,即可擴展的)允許人們使用來自不同語言的元素和屬性,但是爲了使瀏覽器或其他用戶代理可以知道哪個元素歸屬哪 個語言,你必須對此加以說明。而命名空間聲明(namespace declarations)就是用於這一目的的。

爲什麼允許以text/html發送XHTML 1.0文檔?

XHTML是一種XML格式。這表明,嚴格地說應該用一個XML相關的媒體類型(meida type)(如application/xhtml+xml、application/xml或text/xml)來發送XHTML。不過XHTML 1.0是經過精心設計的,XHTML文檔只要在製作時略加註意便可在傳統的HTML用戶代理上工作。只需你遵守一些簡單的規則,你就可以使許多XHTML 1.0文檔能夠在傳統的瀏覽器上工作。可是,傳統的瀏覽器僅能理解text/html媒體類型,於是你必須使用text/html來發送XHTML 1.0文檔。不過需要注意的是,以text/html發送XHTML文檔意味着那些瀏覽器將把它們作爲HTML文檔,而不是作爲XHTML文檔來處理。

哪些瀏覽器可以支持application/xhtml+xml媒體類型?

我們所知道的支持application/xhtml+xml的瀏覽器包括:所有基於Mozilla的瀏覽器(如Mozilla、Netscape 5或更高版本、Galeon和Firefox)、Opera、Amaya、Camino、Chimera、DocZilla、iCab、Safari,以 及所有接受WAP2的手機瀏覽器。實際上,任何最新的瀏覽器都將支持application/xhtml+xml媒體類型。大多數瀏覽器也接受以 application/xml發送的XHTML文檔。更多細節請參見XHTML媒體類型測試 (http://www.w3.org/People/mimasa/test/xhtml/media-types/results)

微軟的IE瀏覽器支持application/xhtml+xml媒體類型嗎?

不支持。不過有一個技巧可以讓你把XHTML 1.0文檔以application/xml提供給IE瀏覽器。
將下列粗體部分列於你的文檔頭部:

 <?xml version="1.0" encoding="iso-8859-1"?>

<?xml-stylesheet type="text/xsl" href="copy.xsl"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>



這裏的copy.xsl是一個包含下列內容的文件:

 <stylesheet version="1.0"

xmlns="http://www.w3.org/1999/XSL/Transform">

<template match="/">

<copy-of select="."/>

</template>

</stylesheet>


注意:該文件必須與引用它的文檔存在於同一目錄下。
儘管你把該文檔作爲XML提供給瀏覽器,並能夠作爲XML被解析,但是瀏覽器認爲它收到的是text/html,因此你的XHTML 1.0文檔必須遵守一些規則以被傳統瀏覽器所接受。

CSS有許多特別的規則僅應用於HTML。這些規則也應用於XHTML嗎?

不。僅應用於HTML的CSS規則將只會應用於以text/html發送的文檔。

document.write可以在XHTML中用嗎?

不。根據XML的定義方式,不允許使用任何這類手法:即當解析器還在解析標記時,用腳本來生成標記。

你仍可以取得相同的效果,只是你必須用DOM來增加或刪除元素。

爲什麼不允許以text/html發送XHTML 1.1文檔?

XHTML 1.1是純XML的,並旨在僅作爲XML。它不能確保被髮送到傳統瀏覽器上。因此XHTML 1.1文檔必須以一個XML相關的媒體類型(比如application/xhtml+xml)來發送。

爲什麼XHTML 1.1中去掉了target屬性?

不是。XHTML 1.0存在三種版本:strict(嚴格式)、transitional(過渡式)和frameset(框架式)。這三種版本都儘量地在XML允許範圍內保持與HTML 4.01接近。XHTML 1.1是對XHTML 1.0 strict的 更新,而target屬性沒有包含在任何HTML strict的版本中。XHTML 1.1沒有對XHTML 1.0的其他兩種版本(transitional和frameset)進行更新。如果你要使用target屬性的話,那麼請使用XHTML 1.0 transitional。

什麼是XHTML模塊化的使用?

XHTML模塊化(XHTML Modularization)不是針對常規XHTML用戶的,而是針對基於XHTML的語言的設計者的。已經注意到,各個公司和組織在設計他們自己版本 的HTML和XHTML時有一種趨勢,即這些HTML和XHTML常常不能在基本程度上互操作。XHTML模塊化將XHTML劃分爲許多個模塊 (module),在定義一個新的語言時,這些模塊可被各自地選取;這樣,任何使用table的基於XHTML的語言都能確保使用同樣的table的定 義,而不是各種不同版本的table。模塊化也明確了哪裏可以插入新元素(element),哪裏不可以。

爲什麼需要XHTML 2?XHTML 1還不夠好嗎?

雖然HTML和XHTML已經做得很不錯,但是仍有許多可改進的方面。已經受到特別關注的方面包括:更優結構化的可能性、去除與XML重複的特徵、 易用性(usability)、可用性(accessibility)、國際化(internationalization)、設備獨立性、更好的表單 (form)以及減少腳本書寫量等。

在XHTML 2中,<img>將會被<object>所取代嗎?

不。雖然<img>在XHTML2中會被取代,但不是被<object>而是被其他標籤所取代(不過如果你願意的話,也可以使用<object>)。
<img>的設計在HTML中存在許多問題:

  • 沒有備選(fallback)[譯註//即當用戶代理不能處理某種類型的圖像時,可將備選內容作爲顯示結果]的可能性,因此如果你使用了PNG圖像,而瀏 覽器不支持該類型圖像的話,那麼瀏覽器只能用img元素的alt文本作爲顯示結果。這一狀況導致了在許多方面強於GIF和JPG圖像的PNG圖像不能被採 用,因爲人們總會採用最廣爲接受的格式以確保圖像能被正常顯示。
  • 不能對alt文本作標記,因此如果要使用alt文本的話,你只能得到純文本。
  • 雖然可以在img元素中使用longdesc屬性引用一個對圖像作描述的鏈接,以幫助不能看到圖片的人,但是該屬性很少被實際使用。

在XHTML 2中是這樣做的:所有圖像都與某個元素的內容片斷相等價。XHTML 2允許在任何元素(element)上使用src屬性來引用一個圖像。如果該圖像可用[譯註//比如可以獲得相應的圖片文件],並且瀏覽器可以處理它,那 麼就使用該圖像,否則就使用該元素的內容。下面是一個例子:

 <p src="map.png">Exit from the station, turn left, 

go straight on to <strong>High Street</strong>,

and turn right</p>



這樣的優點是,當圖像由於某些原因不可用時(比如由於網絡故障),或者瀏覽器不能顯示該類型的圖像時,你的文檔仍然有友好的顯示結果。如果你要提供多種類型的圖像,你可以這樣做:

 <p src="map.png"><span src="map.gif">Exit from station...</span></p>


其實更好的方法是使用內容協商,如果你的服務器支持的話(大多數服務器是支持的):

 <p src="map">Exit from station...</p>


這樣服務器將與瀏覽器協商使用一種瀏覽器所支持的圖像類型,並提供該類型的圖像給瀏覽器。如果沒有可用的圖像,那麼瀏覽器將使用元素的內容。這樣做的另一個優點是,你可以稍後在服務器上增加更多圖片類型,而不必對網頁作修改。

爲什麼XHTML 2不用XLink?

XLink和XHTML對鏈接有不同的需求,而且它們在需求間的差異是不可調和的。

爲什麼XHTML 2不是向後兼容的?

XHTML不是向後兼容的,但這只是與早前版本的HTML在向後兼容的方式上不同而已。
由於更早的HTML版本是一些特定用途的語言,因此必然要保證在某種程度上與新版本保持向後兼容性,以確保新文檔在老的瀏覽器上仍然可以顯示。比如,<meta>元素把信息放到屬性而不是元素內容里正是由於這個原因。

但是,由於有了XML和樣式表,因此不再需要這種嚴格的元素方面的向後兼容性了。因爲一個基於XML的瀏覽器,在任何時候都意味着當前95%以上的瀏覽器不必更新即可處理新的標記語言。許多XHTML 2已能夠在現有的瀏覽器中運行 (http://w3future.com/weblog/gems/xhtml2.xml), 而這些瀏覽器並不是爲了接受XHTML 2而事先設計的。雖然大部分XHTML 2在目前瀏覽器上可以工作,但也有部分特性還不行:在表單(form)和表格(table)被加入HTML時,人們必須要等待新版本的瀏覽器;同樣地, XHTML 2的一些部分,比如XForms和XML Events還需要能夠理解這些功能的用戶代理。

爲什麼在XHTML中所有元素的xml:space屬性都被設定爲“preserve”?我不想在輸出中看到多餘的空格怎麼辦?

xml:space屬性是關於“輸入(input)”的:也就是說,它控制DOM(即瀏覽器內部的文檔內部版本)中是否將有空格;它沒有對屏幕上將 出現的東西作任何陳述。輸出空白是由CSS屬性“whitespace”控制的。將它設爲“pre”,DOM中的空格將在輸出中被保留;將它設爲 “normal”,空白將被壓縮(CSS3將有更多屬性對此進行更強的控制)。

這就是爲什麼在XHTML2中所有元素都被設爲xml:space=“preserve”的原因。



Copyright © 2004 W3C ® (MIT, ERCIM, Keio (http://www.keio.ac.jp/)), All Rights Reserved. W3C liability (http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer), trademark (http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks), document use and software licensing rules apply. Your interactions with this site are in accordance with our public (http://www.w3.org/Consortium/Legal/privacy-statement#Public) and Member (http://www.w3.org/Consortium/Legal/privacy-statement#Members) privacy statements.

  <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
發佈了36 篇原創文章 · 獲贊 0 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章