我有一个doctype声明,如前两行所示。
在第三行中,html标签还有一些xmlns声明和xml:lang和lang。这些xmlns,xml:lang或lang中的任何一个是重复的吗?他们是否重复了doctype中的任何内容。我想保留doctype并删除第三行的所有声明,如果它们是重复的。
<!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>
答案 0 :(得分:1)
要符合DOCTYPE指示的严格XHTML标准,您必须指定xmlns
属性。
的参考点#3文档的根元素必须 使用指定XHTML命名空间 xmlns属性[XMLNAMES]。该 XHTML的命名空间标识符是 “http://www.w3.org/1999/xhtml”。
答案 1 :(得分:1)
他们不是重复的。 XHTML的XML名称空间和doctype声明是不一样的。 xml:lang
和lang
属性都不是。{1}}和<html>
属性。 XHTML 1.0 specification要求包含所有这些内容。
XHTML 1.0 Strict DTD描述的<!ATTLIST html
%i18n;
id ID #IMPLIED
xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
>
元素的属性列表如下:
%i18n
(其中xml:lang
是代表lang
,dir
和xmlns
国际化属性的内部实体,见下文)
注意第四行。它表示%i18n
是给定URI值的属性,并且在该命名空间URL处 fixed 。这意味着如果省略该属性或为其指定不同的名称空间,则您的文档是无效的严格XHTML。
<!-- 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
xml:lang
属性用于向后兼容(即HTML≤4.01),而xml
由XML 1.0描述(因此此处显示xml:lang
命名空间)。我不太确定lang
应该在dir
之前的确切原因,但是由于XHTML仅仅是HTML“重写”为XML语法(可以这么说),所以它是有道理的。
如果未指定,ltr
属性默认为{{1}}(从左到右文本),因此它不是必需属性。
答案 2 :(得分:1)
不,xml文档的doctype和命名空间是不同的东西。
答案 3 :(得分:1)
如果您正在使用XHTML,那么(根据此处的其他评论)您需要指定所有这些内容。您的页面必须符合规范(如果XHTML页面不符合规范,则会失败)。
但是,您的问题表明您希望简化代码。事实上,使用XHTML,你不能。但是,如果你切换到HTML5规范,那么你可以大大简化。
HTML5不需要复杂的doctype,也不需要任何XML名称空间声明。 HTML5文档如下所示:
<!DOCTYPE html>
<html>
....
</html>
我相信你会同意,这更容易阅读。
好消息是,您可以在不改变任何其他内容或丢失任何功能的情况下执行此操作。所有当前浏览器都可以使用此代码,即使它们没有明确地与HTML5兼容。
答案 4 :(得分:0)
不,没有什么比重复了。
我们可以提及lang
和xml:lang
属性。
xml:lang
属性的值优先
xmlns
必须在那里。