在一次采访中,我被问到一个我从未想过的问题,即“我们已经拥有满足编写网页所有要求的HTML,那么对XHTML的需求是什么?”
我搜索了很多内容并阅读了很多文章,但我无法正确理解为什么会引入XHTML。请向我解释。
答案 0 :(得分:33)
因为它是有效的XML。这有很大帮助,因为你可以使用最初为XML设计的许多工具,例如XML解析器,XSLT,XPath,XQuery,......
普通HTML是一种SGML方言,如果不了解架构,则无法解析。
<ul>
<li>one
<li>two
<li>three
</ul>
是correct HTML但不是正确的XML。如果你想解析它,你必须知道ul
- 必须关闭元素,但li
不能。
答案 1 :(得分:26)
XHTML还允许您嵌入其他XML方言,如MathML,Ruby, SVG等(您也可以将XHTML嵌入其他XML方言中,如果 期望的。)
如果您只是“制作网页”,则不一定需要 XHTML。但是,如果您以编程方式生成页面,则可能 发现用于生成XML的工具比那些更好 生成HTML。
答案 2 :(得分:23)
我实际上是在写这个问题,为什么以上三篇关于浏览器一致性和格式良好 html的帖子已经被拒绝了?
众所周知,HTML是行业标准。实现浏览器,以便它们呈现HTML标准中描述的标记内容。不幸的是,有些领域在HTML中没有很好地定义:如果用户忘记了结束标记会发生什么,或者如果找不到引用的图像该怎么办?某些浏览器使用'alt'标记来显示占位符文本项,而某些浏览器会将'alt'标记显示为工具提示。着名的“怪癖”浏览器模式是缺乏清晰度的结果。因此,相同的网页很可能在不同的浏览器上以不同的方式显示。
随着HTML使用量的增长,还有一个问题:它无法扩展 - 无法添加用户定义的标记。
XHTML解决了上述问题:
XHTML有关于结构的明确规则,可以以编程方式强制执行。检查各种在线“XHTML验证器”。他们将告诉您XHTML是否形成良好(并突出显示问题区域)。由于这些严格的规则,您的页面或多或少保证在实现XHTML的所有浏览器上看起来都一样。
[注意]如果您想验证上述内容,请参阅“Head First XHTML and CSS”一文
答案 3 :(得分:19)
除了约翰内斯的回答,HTML的解释和容忍度过于宽松,XHTML严格的形式化否定了这一点。
容差会导致差异,导致浏览器不兼容,从而导致黑暗面。
答案 4 :(得分:14)
来自Wiki:
因为他们需要格式良好, 真正的XHTML文档允许 要执行的自动处理 使用标准XML工具 - 与HTML不同, 这需要相对复杂, 宽松的,通常是自定义解析器。 XHTML可以被认为是 很多HTML和XML的交集 尊重,因为这是一个重新制定 XML中的HTML。
使HTML符合XML标准,可以更加一致地解析页面。例如,在HTML中,您被允许使用无法使用的标记<b><u>test</b></u>
,但是必须按照它们打开的顺序关闭它们。这样的事情使DOM解析(现在在AJAX中大量使用)更多更容易。
答案 5 :(得分:8)
我相信你肯定遇到过W3的this文章。从这篇文章中可以学到很多东西。简而言之,除了具有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
答案 6 :(得分:6)
我在这里看到一堆上升的答案,这些答案对浏览器的工作方式做出了错误的假设。所以,让我就此问题给出2美分。
首先,为什么存在XHTML?
组织了为期两天的研讨会,讨论是否需要使用XML的新版HTML。研讨会上的意见是明确的“是”:使用基于XML的HTML,其他XML语言可能包含一些XHTML,而XHTML文档可能包含其他一些标记语言。我们还可以利用重新设计来清理一些更不整洁的HTML部分,并添加一些新的功能,例如更好的表单。
简而言之,XHTML的创建有两个原因:
使事情更容易验证不是设计目标,也不是必需的东西,因为HTML4验证器存在且是全面的。
XHTML是否更易于解析浏览器?
是和否。 XML比HTML标签更易于解析,但是,除非您为XHTML页面使用xhtml + xml或application / xml mime类型,否则浏览器会使用HTML解析引擎对其进行解析。但是,如果您使用xml mime类型,IE会阻塞您的内容。 IE博客上的这个behavior is explained。 如果您使用mime类型的text / html提供XHTML和HTML,浏览器如何处理它们没有区别!
是的,他们这样做!你撒谎!
确实他们这样做,但仅仅是因为doctype。浏览器在HTML文档的顶部使用doctypes来确定它们是应该使用标准模式还是quirks模式(= bugs模式)。所有有效的XHTML文档碰巧都包含触发标准模式的doctype。但是,在HTML中,您可以通过添加“&lt;!doctype html&gt;”获得相同的结果在页面顶部。
你是说XHTML没有用途?
完全没有。 XHTML有许多优点:
那么,我应该使用它吗?
与往常一样,答案是“它取决于”。
HTML5怎么样?它与XHTML竞争吗?
不,不。 HTML5有two serializations,一个用作HTML,另一个用作XML。好处是现在都有严格的解析规则。无论您使用何种方法,您都将在所有浏览器中获得可预测的行为。但是,HTML5解析为HTML具有优雅的错误处理的好处。这就是我喜欢这种方法的原因。一如既往,YMMV。
答案 7 :(得分:5)
XHTML试图鼓励开发“结构良好”的HTML。
HTML已经发展了十多年。它的实现以及解析和呈现它的浏览器的实现并不完全一致。这就是为什么跨浏览器兼容性是一个主要问题。
HTML基于SGML(标准通用标记语言).XML也是从SGML派生的,因此它们是一种类型的表兄弟。 XHTML与两者结合,提供(理论上)XML对HTML的好处。这包括一个定义良好的模式,可以可靠地验证,查询和转换。
答案 8 :(得分:3)
为什么要创建XHTML?
成功有多好?
对XHTML有什么需求?
XHTML有着值得称赞的目标,也许它将来能够实现。我不能推荐XHTML用于可能它可能提供的未来优势,而现在HTML更容易。如果以前的代码或工具强迫您使用,那么您应该只使用XHTML。
答案 9 :(得分:2)
我认为它可以帮助浏览器正确显示html,而无需假设标签应该关闭的位置。任何时候浏览器假定你知道发生了什么。
答案 10 :(得分:2)
XHTML强制您编写更清晰的代码,这些代码更易于维护,呈现更一致,更容易挂钩到DOM。将XHTML与HTML进行比较就像将强类型的编程语言与松散类型的编程语言进行比较。
如上所述,XHTML允许您使用SVG和MathML。我想将RDFa添加到该列表中。 RDFa允许您向微格式未涵盖的内容添加语义。我个人在都柏林核心和朋友之友中做了很多。
答案 11 :(得分:1)
XHTML只是关于系统之间的通信。 HTML很难解析,因为对于形成良好的内容,可能会出现多种变化。由于XML在解释上是严格的,因此该问题已被删除。
考虑RESTful架构。如果URL是项目的永久位置,那么想要访问此项目的系统应该能够使用从访问URL返回的信息。 XHTML本身并不能实现这一点,因为系统已经可以解析HTML并检索必要的信息。 XML只是让这更容易。没有限制的预定义标记集使得难以对文档中的数据进行分类(尽管从技术上讲,您可以在HTML中执行此操作,因为浏览器会忽略它)。您可以使用任何想要分类的数据进行分类。
答案 12 :(得分:1)
简而言之:只要您想在服务器端使用基于XML的工具来操作/转换/生成HTML页面,XHTML通常只对HTML有用而且更受欢迎。
许多示例都可以在基于组件的MVC框架中找到,例如 Sun Oracle JSF,它使用Facelets作为基于XHTML的视图技术。服务器端组件在XSD中定义,页面使用SAX parser进行解析。您甚至可以在页面顶部添加<!DOCTYPE html>
,让Facelets生成“纯”有效且严格的HTML5。 Microsoft ASP.NET MVC具有类似的视图技术。
当你手写HTML时,XHTML并没有带来太多好处,或者必须推迟使用(过度)炒作技术的“酷”。
答案 13 :(得分:0)
如果我想抓取您的网站并解析其内容,我只能在它是XML的情况下才能这样做。
解析HTML是一场噩梦。
答案 14 :(得分:0)
XML是一种数据交换格式 - 这非常适合构建网站,因为毕竟我们正在处理信息,而这些信息需要被计算机(例如搜索引擎)抓取和理解。
答案 15 :(得分:-2)
因为XHTML更有意义!
关键是,即使某些东西可能无法提供更多的技术可能性,如果它被重新制作只是为了更清晰和合乎逻辑,它仍然是一种改进。这就是为什么代码重构是一个好主意,即使它没有改变任何功能。这就是为什么Brainfuck不是一个好的编程语言,即使它具有Java的所有功能。
XHTML更有意义,因为标记及其属性的底层结构始终是一致的 - 不依赖于标记语义。一旦你熟悉它与HTML的区别,它更有意义的方式很明显,但是例如标签总是有序嵌套,所有标签必须关闭,名称必须小写,属性值必须有限制字符。