[英]Is this html declaration repetitive
我有一个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>
为了符合DOCTYPE指示的严格XHTML标准,您必须指定xmlns
属性。
文档的根元素必须使用xmlns属性[XMLNAMES]指定XHTML命名空间。 XHTML的名称空间指示符是“ http://www.w3.org/1999/xhtml”。
它们不是重复的。 XHTML的XML名称空间和doctype声明不同。 xml:lang
和lang
属性都不是。 XHTML 1.0规范要求包括所有这些。
XHTML 1.0 Strict DTD描述的<html>
元素的属性列表如下:
<!ATTLIST html
%i18n;
id ID #IMPLIED
xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
>
(其中%i18n
是表示xml:lang
, lang
和dir
国际化属性的内部实体,请参见下文)
注意第四行。 它说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
(从左到右文本),因此它不是必需的属性。
不,XML文档的doctype和名称空间是不同的东西。
如果您使用的是XHTML,则(按照此处的其他注释),您需要指定所有这些内容。 您的页面必须符合规范(如果XHTML页面不符合规范100%,则XHTML页面将失败)。
但是,您的问题表明您想简化代码。 事实证明,使用XHTML不能。 但是,如果您切换到HTML5规范,则可以大大简化事情。
HTML5不需要复杂的doctype,也不需要任何XML名称空间声明。 一个HTML5文档如下所示:
<!DOCTYPE html>
<html>
....
</html>
我相信您会同意的,这更容易阅读。
好消息是您可以执行此操作而无需更改任何其他功能或丢失任何功能。 当前所有的浏览器都可以使用此代码,即使它们不是明确兼容HTML5的也是如此。
不,没有什么像重复。
我们可以同时提及lang
和xml:lang
属性。 xml:lang
属性的值优先
如果Doctype处于严格模式,则xmlns
必须存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.