有朋友问:不明白为什么有了 DOCTYPE 还要 namespace,他俩不是一个作用么?
其实不然,先让我们看看网上对它们的定义:
什么是 DOCTYPE?
DOCTYPE 是 document type (文档类型)的简写,用来说明你用的 XHTML 或者 HTML 是什么版本。其中的 DTD 叫文档类型定义,里面包含了文档的规则,浏览器就根据你定义的 DTD 来解释你页面的标识,并展现出来。
要建立符合标准的网页,DOCTYPE 声明是必不可少的关键组成部分;除非你的 XHTML 确定了一个正确的 DOCTYPE,否则你的标识和 CSS 都不会生效。
什么是namespace?
由于 XML 允许你自己定义自己的标识,你定义的标识和其他人定义的标识有可能相同,但表示不同的意义。当文件交换或者共享的时候就容易产生错误。为了避免这种错误发生,XML 采用名字空间声明,允许你通过一个网址指向来识别你的标识。
通俗的解释是:名字空间就是给文档做一个标记,告诉别人,这个文档是属于谁的。只不过这个”谁”用了一个网址来代替。
XHTML 是 HTML 向 XML 过渡的标识语言,它需要符合 XML 文档规则,因此也需要定义名字空间。又因为 XHTML1.0 不能自定义标识,所以它的名字空间都相同,就是”http://www.w3.org/1999/xhtml”。
对于 DOCTYPE 和 namespace ,我们可以这样来比方,DOCTYPE 相当于是宪法,而 namespace 相当于是地方法,两者之间互补而不矛盾,并遵循一定的规则。
但至少到现在 namespace 在 xhtml 中的作用还没显现,“XHTML1.0 不能自定义标识,所以它的名字空间都相同”,或许可以理解是为了预留向后兼容。