[译]HTML验证的价值探讨

作者:

原文:http://www.nczonline.net/blog/2010/08/17/the-value-of-html-validation/

这篇文章我已经酝酿了很久,期间还拜读了 关于 Remy Sharp’s site这篇大作。我和Chris曾就这个话题多次交换意见,最终我们彼此的观点都有所改变,接受了一些过去无法接受的意见。我曾经在公开的、私下的各种场合直言不讳地表示过,目前的HTML验证状况对我来说纯粹是浮云。要了解我的看法,你需要先明白HTML验证到底是什么。

 

什么是HTML验证

是对你的网页代码执行一系列验证任务,主要包括:

  1. 代码语法验证 - 检查语法错误。从技术上说,尽管 *不是HTML规范中的一个标签* 在语法上也是正确的,所以语法验证唯一的作用就是确保编写出合法的HTML代码。
  2. 标签嵌套验证 - 检查标签是否正确地按照打开的先后顺序关闭。比如一个

<

div>标签没有被正确关闭的话,在这项检查中就会报错。
3. DTD定义验证 - 检查你的代码是否遵循了指定的DTD的定义。这项验证检查的内容包括标签名称、属性名称、以及标签包含关系(某个标签是否允许被嵌套在另一个内部)。
4. ****异常实体验证***** - 检查是否存在DTD规范中不曾提及的任何东西。通常自定义标签和自定义属性就会在这一项验证中报错。 (*译者注:关于原文中的Outlier Validation,指的是对不属于DTD定义范围内的实体的验证。在数学上,把这种游离于基准之外的值成为离群值,因而在数学上有Outlier Validation - 离群验证的概念。但是在HTML中,对于DTD中的元素、属性,均是实体,这项验证要做的是找出不在定义范围内的异常实体,因此暂译为“异常实体验证”,若您有更好的翻译方案,欢迎探讨。

请记住:以上这四项验证任务只是为了便于理解而进行的逻辑划分,而不一定是验证器真正的实现方式。如果在某个验证任务上失败了,就说明HTML代码在该项对应的方面存在问题,是不符合规范的。

关于HTML验证的争论

HTML验证的支持者的主要观点是:HTML验证能够保证网页在不同浏览器下的互用性。不同核心的浏览器拥有不同的语法分析器以及HTML验证的具体实现。只有同时满足所有浏览器的要求,你的代码才能始终正常工作。由于每个浏览器在其语法分析器中各自以不同方式来实现纠错功能,因此对于不规范的代码,我们无法预计浏览器会如何呈现它。

而HTML验证的反对者则认为:HTML验证过于严格,而且没有考虑到浏览器的真实工作情况。HTML中的某些情况虽然从技术角度看可能是不合规范的,但是所有的浏览器都能按照相同的方式处理它们(注:并不总是相同的方式)。如果我自己能对自己编写的不规范代码负责,那我就不需要担心什么HTML验证——我真正关注的只是让这个网页正确呈现。

 

我的观点

我很少会就某个争论的问题公开表态,这恰好是其中之一,希望你喜欢。基于“HTML验证过份严格,不符合实际工作场景”的原因,我一直都属于反对HTML验证的阵营。有一些被浏览器广泛支持的东西(里面的