在一次采访中,我被问到了一个我从未想过的问题,即"我们已经拥有满足编写网页所有要求的HTML,那么XHTML的需求是什么?"
我用Google搜索了很多文章并阅读了很多文章,但我无法理解为什么会引入XHTML.请向我解释.
因为它是有效的XML.这有很大帮助,因为您可以使用最初为XML设计的许多工具,例如XML解析器,XSLT,XPath,XQuery,......
普通HTML是一种SGML方言,如果不了解模式,则无法解析.
是正确的HTML,但不是正确的XML.如果你想解析它,你必须知道ul
- 必须关闭元素但li
不要关闭.
XHTML还允许您嵌入其他XML方言,如MathML,Ruby,SVG等.(如果需要,您还可以将XHTML嵌入其他XML方言中.)
如果您只是"制作网页",则不一定需要XHTML.但是,如果以编程方式生成页面,您可能会发现生成XML的工具比生成HTML的工具要好.
我实际上是在写这个问题,为什么以上三篇关于浏览器一致性和格式良好的 html的帖子都被拒绝了?
众所周知,HTML是行业标准.实现浏览器,以便它们呈现HTML标准中描述的标记内容.不幸的是,有些领域在HTML中没有很好地定义:如果用户忘记了结束标记会发生什么,或者如果找不到引用的图像该怎么办?某些浏览器使用'alt'标记来显示占位符文本项,而某些浏览器会将'alt'标记显示为工具提示.着名的"怪癖"浏览器模式是缺乏清晰度的结果.因此,很可能相同的网页在不同的浏览器上显示不同.
此外,随着HTML使用量的增长,还有一个问题:它无法扩展 - 无法添加用户定义的标记.
XHTML解决了上述问题:
采用XML来提供可扩展标签.
为Web浏览器提供"严格"标准
XHTML有关于结构的明确规则,可以以编程方式强制执行.检查各种在线"XHTML验证器".他们将告诉您XHTML是否形成良好(并突出显示问题区域).由于这些严格的规则,您的页面或多或少保证在实现XHTML的所有浏览器上看起来都一样.
[ 注意 ]如果您想验证上述内容,请参阅"Head First XHTML和CSS"一文
除了约翰内斯的答案之外,HTML的解释和容忍度过于宽松,XHTML严格的形式化否定了这一点.
容差会导致差异,从而导致浏览器不兼容,从而导致黑暗面.
来自维基:
因为它们需要格式良好,所以真正的XHTML文档允许使用标准XML工具执行自动处理 - 与HTML不同,这需要相对复杂,宽松且通常自定义的解析器.在许多方面,XHTML可以被认为是HTML和XML的交集,因为它是XML的HTML重构.
使HTML符合XML标准允许对页面进行更加一致的解析.例如,在HTML中,您可以自动使用标签test
,但是必须按照打开的顺序关闭标签.这样的事情使得DOM解析(现在在AJAX中大量使用)变得更加容易.
我相信你一定是从W3 那里遇到过这篇文章.从这篇文章中可以学到很多东西.简而言之,除了具有HTML标记集之外,XHTML还遵循xml规则.最重要的差异:
* XHTML elements must be properly nested * XHTML elements must always be closed * XHTML elements must be in lowercase * XHTML documents must have one root element
我在这里看到一堆上升的答案,这些答案对浏览器的工作原理做出了错误的假设.所以,让我就此事给出2美分.
首先,为什么XHTML存在?
从马的嘴里:
a two-day workshop was organised to discuss whether a new version of HTML in XML was needed. The opinion at the workshop was a clear 'Yes': with an XML-based HTML other XML languages could include bits of XHTML, and XHTML documents could include bits of other markup languages. We could also take advantage of the redesign to clean up some of the more untidy parts of HTML, and add some new needed functionality, like better forms.
In short, XHTML was created for two reasons:
To allow mixing other content (like mathml and svg) in the same document with clear formatting rules.
To extend and clean up HTML.
Making things easier to validate was not a design goal, and also not something that was necessary because HTML4 validators exist and are comprehensive.
Is XHTML easier to parse for browsers?
是的,不是.XML比HTML标签更易于解析,但是,除非您为XHTML页面使用xhtml + xml或application/xml mime类型,否则浏览器会使用HTML解析引擎对其进行解析.但是,如果您使用xml mime类型,IE会阻塞您的内容.在IE博客上解释了此行为.如果您使用mime类型的text/html提供服务,浏览器如何处理XHTML和HTML没有区别!
是的他们做到了!你撒谎!
确实他们这样做,但仅仅是因为文件类型.浏览器在HTML文档的顶部使用doctypes来确定它们是应该使用标准模式还是quirks模式(= bugs模式).所有有效的XHTML文档碰巧都包含触发标准模式的doctype.但是,在HTML中,您可以通过在页面顶部添加""来获得相同的结果.
所以你说XHTML没有目的吗?
一点也不.XHTML有许多优点:
它可以使用XML工具进行转换,例如XSLT
它可以在服务器端代码中更容易地解析
它可以在仍然通过验证测试的同时集成自定义标记
那么,我应该用呢?
一如既往,答案是"它取决于".
服务器端,可能有用.如果您希望获得XML的服务器端优势,那么您希望使用XHTML变体,无论是XHTML1(HTML4序列化为XML)还是XHTML5(HTML5序列化为XML).
客户端,没用.我强烈建议避免为用户提供XML mime类型.如果页面中有任何标记问题,XML解析不会与优雅的错误处理混合,只会产生"XML解析错误"而不是文档.除非你永远不会写错误,否则你需要优雅的错误处理.
HTML5怎么样?它与XHTML竞争吗?
不,不.HTML5有两个序列化,一个是HTML,另一个是XML.好处是现在都有严格的解析规则.无论您使用何种方法,您都将在所有浏览器中获得可预测的行为.但是,HTML5解析为HTML具有优雅的错误处理的好处.这就是我喜欢这种方法的原因.一如既往,YMMV.
XHTML试图鼓励开发"格式良好"的HTML.
HTML已经发展了十多年.它的实现以及解析和呈现它的浏览器的实现并不完全一致.这就是为什么跨浏览器兼容性是一个主要问题.
HTML基于SGML(标准通用标记语言).XML也源自SGML,因此它们是一种类型的表兄弟.XHTML与两者结合,提供(理论上)XML对HTML的好处.这包括一个定义良好的模式,可以可靠地验证,查询和转换.