人们普遍认为,验证HTML的最佳理由是确保所有浏览器都能一致且可预测地对待它.
但是,HTML 5草案包含两个规范.首先是作者规范,描述HTML作者应该使用的元素和属性,以及它们之间的相互关系.HTML 5页面的验证基于此规范.包含的元素和属性不是直接从HTML 4中提取的,而是需要从第一原则开始证明,这意味着某些HTML 4功能,例如
上的summary属性,上的longdesc和profile属性在上,目前不会出现在此草稿中.这些功能不被视为已弃用,它们根本不包含在内.(他们缺席草案仍然存在争议,尽管很快就会将其纳入其中.)
其次,草案定义了一个浏览器处理规范,该规范试图准确定义浏览器的解析器将如何处理它给出的任何字节流,而不管HTML的形成和有效性如何.这意味着当浏览器完全支持HTML 5时,可以预测任何浏览器如何处理HTML以获得更广泛的输入,而不仅仅是那些通过验证的输入.
特别是,因为HTML 5被定义为100%向后兼容当今的Web,所有有效的HTML 4和所有无效但常用的标记将继续处理与现在完全相同,无论是否HTML 5有效与否.
因此,至少,使用HTML 5,HTML 4或任何以前版本的HTML以及许多专有扩展的任何功能的任何人都可以确信他们的HTML将在所有浏览器中获得一致且可预测的处理.
鉴于此,将HTML 5限制为将验证的是否有任何意义,以及我们将从中获得哪些实际好处?
1> hsivonen..:
首先,HTML5解析算法中存在与"解析错误"相对应的有效层.该层类似于XML格式良好.避免在此层上的文档中出错的最重要原因是您可能会得到一个令人惊讶的解析树.如果您的文档在此层上没有错误,那么在编写与DOM一起使用的JS或CSS时,您可以减少调试的难度.
作为上述图层的一个特例,有HTML5 doctype :
. 人们希望遵守这一原因的原因是尽可能以最简单的方式获得标准模式.这是你可以记住的东西,不像你需要每次查找和复制粘贴的HTML 4.01或XHTML 1.0文档类型.当然,你想要标准模式的原因是CSS层上的惊喜更少.
关注高于解析算法的层验证的主要原因是捕获你的拼写错误,这样你就可以花更少的时间来调试你的页面无法正常工作的原因.
前一点并没有解释为什么你应该关注验证,当你没有拼错的给定元素或属性被浏览器作为遗留问题支持但HTML5规范仍然避免它.这就是为什么HTML5已经废弃了这样的语法:
HTML5使用obsoletion向作者发出信号,表明某些功能浪费了他们的时间.这些包括longdesc
,summary
和profile
.(请注意,人们不同意这些是否真的浪费时间,但正如目前的草案,HTML5使它们过时了.)也就是说,如果你有足够的资源来改善可访问性,你的有限资源最好花在longdesc
和其他东西上.summary
.如果您的语义纯度资源有限,那么您的资源最好花在除了确保您拥有正确的咒语之外的其他内容上profile
.
HTML5废弃了一些可以在CSS中复制的表现功能,以指导作者使用CSS为自己的利益.这样,不考虑可维护性的作者应该被引导到更易于维护的代码.就个人而言,我更愿意将更多遗留的表现性内容整合在一起,并将其留给作者自己来决定哪种方式对他们有效.
有些事情因政治原因而被淘汰.该
元素已被淘汰,因为使其符合要求会使反
标准主义者认为HTML5人已经疯狂,这可能导致糟糕的公关.
被淘汰主要是因为没有给某个特定插件提供特殊标记.在classid
上属性
被废弃,因为它在实践中的ActiveX特定的.
有些东西在语言设计美学的基础上被淘汰了.这包括name
属性on
和language
属性on
.
(我开发了Validator.nu HTML5验证器,它也是W3C验证器使用的HTML5验证引擎.)
2> Konrad Rudol..:
鉴于此,将HTML 5限制为将验证的是否有任何意义,以及我们将从中获得哪些实际好处?
当然是.你忘了未来是不固定的.特别是,您隐含地假设HTML 5规范永远不会更改,并且永远不会弃用任何功能.当然,这只会巩固现状.绝对需要长期取消对某些功能的支持,以便更容易进行新的开发(特别是如果这些可能相互冲突).
生成有效的HTML 5可能没有直接的好处(除了它仍然使验证更容易).但是,如果大多数网站的质量提高,那么可能会有一个长期的好处,因为它使得超越当前技术和标准更容易.
3> 小智..:
即使在HTML5开始之前,验证从来都不是为了在浏览器之间获得一致的结果.那些不理解他们所谈论的人的传播是神话,即使他们认为他们这样做了.
验证的真正原因始终是纯粹的质量保证问题.这只是一种检测错误的方法.即使任何给定错误的结果可能或可能很快变得一致,但浏览器中的结果仍然可能,结果本身仍然不是预期的.
对于作者而言,能够捕获代码中的错误非常重要,因为更简洁,无错误的标记更易于使用和维护,尤其是在团队环境中工作时.虽然大多数个别错误可能最终是良性的并且不会导致任何重大问题,但有些错误可能会产生意外结果.例如,错误地,重叠或未闭合的元素在某些情况下可能会导致意外的布局问题,并让验证器告诉您错误的位置,有助于纠正问题.但如果结果充满了许多其他良性错误,那么它可能会使检测和处理变得更加困难.
推荐阅读
-
如何解决《WPF从C#代码设置文本框边框颜色》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《番石榴RatelimitertryAcquire仅在第一次调用(任意数量的许可)时返回true?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《require.main和module之间有什么区别?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何检测设备上是否启用了"开发人员设置"?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Python-全球有什么优先权?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《保存gtk窗口位置》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《如何在Python中将元素(字符串)转换为元组中的整数》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Ruby的CSV.open缓冲到内存并一次写入所有内容吗?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《SpringsseEmitter,在调用方法发送后不会立即发送事件》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《从另一个脚本运行python脚本永远重复》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《与CloudFront结合使用时,AWSS3标准不频繁访问与减少冗余存储类别?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《适用于匿名移动应用程序的正确护照策略》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《Laravel不会将我的域名传递给MailGun驱动程序,因此我无法发送邮件》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《通过this.history.pushState()传递状态》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Flask/Apache中的PyMySQL有时返回空结果》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《需要退货声明吗?-新编码》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《使用Scalaz(或Shapeless)为每个子类创建Monoids》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《有人可以解释这种语法吗?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何使用dplyr获得两列的平均值?》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《如何将HoverTool添加到数据表(Bokeh,Python)》经验,为你挑选了1个好方法。 ...
[详细]