原文:http://www.456bereastreet.com/archive/200501/the_perils_of_using_xhtml_properly/
作者:Roger Johansson
翻译:Neo (http://www.omemo.net/neo)
修正:JunChen
JunChen注:omemo.net网站似乎已经挂掉,链接都失效了。文章写得非常不错,一直是Best of 456 Berea Street。在这里发布的时候我进行了少量代码上和翻译上的修改,以忠实原著。
我使用
XHTML有些年了,但直至去年夏天我才着眼于如何正确使用,那就是说,以application/xhtml+xml的
MIME类型来伺服(server)它。虽然我遇到了这些问题,但我知道问题远非如此。就如你即将发现的一样,当你开始使用真正的
XHTML,你会遭遇很多似乎细小但让人困惑的问题。
请注意这不是一篇讨论支持或反对使用
XHTML的文章。我只是写下我所知道的潜在的易犯错误,并且让你自己来决定自己的选择:
HTML 4.01,为所有浏览器伺服为text/html的
XHTML 1.0或者为能够处理其的浏览器伺服为application/xhtml+xml而其他浏览器则伺服为text/html的
XHTML 1.0。否则有些东西会完全不一样。
只有在问题发生的时候,我才有机会去了解和认识这些东西。有些情况下我必须花很多时间来查找问题和求助于其他人,来寻求一个解决方案。但我在其中学到不少东西,我会把我已经使用 XHTML后应该知道的都告诉你。
注意我这里提及的问题只会发生在能正确处理application/xhtml+xml
MIME类型的用户代理中,而因此
XHTML被作为
XML。这也可能是这里不提及
XHTML的早期使用的原因——很少有人使用这样的浏览器,所以几乎不会有人因只伺服为text/html的
XHTML所烦忧。
今天,实际上把
XHTML伺服为application/xhtml+xml正慢慢变得平常。我所知道的理由有两个:
text/html的时候。如果你参与了任何一次讨论,你知道我在说什么。 假如你,像我,决定实现某些类型的content negotiation和在传送 XHTML的时候使用正确的媒体类型,你需要知道什么能(和将)在你发布的文档中发生,并且知道怎样避免问题的发生。对于对content negotiation同进行content negotiation的脚本例子有兴趣的读者,我推荐你阅读Content Negotiation和Serving up XHTML with the correct MIME type。还有很多这种类型的文章,但这是我读到的最精彩的两篇。
每一个基本的教程都有一些
HTML和
XHTML的明显区别:元素和属性名字使用小写,属性值总要用引号。不要使用简化属性,确保所有的元素都有结束标签和没有不正确的嵌套等等。但是,当
XHTML伺服为application/xhtml+xml时还需要知道更多东西。
良好的结构是必须的
文档必须是良好的结构(well-formed)的 XML(跟合法的(valid) XHTML不必然相同)。就是必须,不是可能。
如果文档结构不好,符合标准的浏览器(当前我知道Mozilla,Firefox,Netscape,Camino,Opera,Safari和OmniWeb——相当多的浏览器除了IE)将会显示错误信息并且以某种方式中止处理文档。
此外,这还意味着不再使用未编码的"&"号。