这个html声明是重复的

问题描述:

我有一个doctype声明,如前两行所示。这个html声明是重复的

在第三行中,html标签也有一些xmlns声明和xml:lang和lang。是否有任何这些xmlns,xml:lang或lang重复?他们是否从文档类型中复制任何内容?我想保留文档类型并在第三行删除所有声明,如果它们是重复的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

</html> 

他们不重复。 XHTML的XML名称空间和doctype声明不一样。 xml:langlang属性都没有。 XHTML 1.0 specification要求包括所有这些。

如由XHTML 1.0 Strict DTD描述的<html>元件的属性列表如下:

<!ATTLIST html 
    %i18n; 
    id   ID    #IMPLIED 
    xmlns  %URI;   #FIXED 'http://www.w3.org/1999/xhtml' 
    > 

(其中%i18n是代表xml:langlangdir国际属性内部实体,见下文)

注意第四行。它说xmlns是给定URI值的属性,并且修复了该名称空间URL的。这意味着,如果您省略该属性或给它一个不同的名称空间,那么您的文档就是无效严格的XHTML。

%i18n实体对应于这些属性:

<!-- internationalization attributes 
    lang  language code (backwards compatible) 
    xml:lang language code (as per XML 1.0 spec) 
    dir   direction for weak/neutral text 
--> 
<!ENTITY % i18n 
"lang  %LanguageCode; #IMPLIED 
    xml:lang %LanguageCode; #IMPLIED 
    dir   (ltr|rtl)  #IMPLIED" 
    > 

lang属性是为了向后兼容(即HTML≤4.01),并xml:lang由XML 1.0(因此命名空间xml这里看到)中所述。我不太确定xml:lang应该在lang之前的确切原因,但是鉴于XHTML仅仅是HTML“重写”成XML语法(可以这么说),所以它是有意义的。

如果未指定,dir属性默认为ltr(从左到右的文本),因此它不是必需的属性。

要符合严格的XHTML标准为您的DOCTYPE指示,你必须指定xmlns属性。

文档的根元素必须 指定使用 xmlns属性[XMLNAMES] XHTML命名空间。用于XHTML的 名称空间指示符是 “http://www.w3.org/1999/xhtml”。

参考点#3从http://www.w3.org/TR/xhtml11/conformance.html

+0

事实上,点#4 – developmentalinsanity 2010-10-27 10:11:40

+1

XHTML 1.0规范的链接是http://www.w3.org/TR/xhtml1/#docconf – BoltClock 2010-10-27 10:13:15

不,doctype和xml文档的命名空间是不同的东西。

不,没有像重复。

我们可以提到langxml:lang属性。 xml:lang属性的值优先于

xmlns如果Doctype处于严格模式,则该值必须存在。

如果您使用的是XHTML,那么(根据这里的其他评论),您需要指定所有这些东西。所有页面都必须符合规范(如果XHTML页面不符合规范,则XHTML页面将失败)。

但是你的问题表明你想简化你的代码。就目前来看,使用XHTML,你不能。但是,如果你切换到HTML5规范,那么你可以大大简化事情。

HTML5不需要复杂的文档类型,也不需要任何XML名称空间声明。一个HTML5文档应该是这样的:

<!DOCTYPE html> 
<html> 
.... 
</html> 

我相信你会同意,这是更简单,更易于阅读。

好消息是,你可以做到这一点,而不会改变任何东西或失去任何功能。所有当前的浏览器都可以使用这些代码,即使它们不明确与HTML5兼容。