【问题标题】:What is the default namespace for HTML / HTML5? [closed]HTML / HTML5 的默认命名空间是什么? [关闭]
【发布时间】:2015-12-22 02:13:57
【问题描述】:

根据某个名为“w3c”的用户的page,HTML 的默认命名空间是:

http://www.w3.org/1999/xhtml

他显然错了,因为 xhtml 被用于失败的基于 XML 的 HTML4 标准。我应该使用什么正确的命名空间?

背景: 我正在编写一个使用 XML 的应用程序。我希望能够使用命名空间将数据保存在 XML 节点上。例如,

<s:Button width="100" height="100" html:color="blue" color="black" /> 

XML 解析器需要一个命名空间以使“html”前缀有效。

【问题讨论】:

  • "by some user named "w3c"" 这是在开玩笑吗?
  • XHTML 没有失败,仍在大量使用,并且不是基于 HTML4。如果您使用 XML,并计划将其转换为 HTML,则必须使用 XHTML。但是你的第一行让我觉得你不认真所以这是评论而不是答案。
  • @torazaburo HTML5 序列化为 XML 确实是 XML。此外,由于 HTML 5 是根据命名空间 DOM 定义的,因此命名空间也适用于“普通”HTML 5,尽管总是相同的常量 http://www.w3.org/1999/xhtml 命名空间无需说明,svgmath 除外元素。
  • @1.21gigawatts W3C,即 WWW 联盟,是最先定义 HTML 的人。
  • 我认为更明确的答案是 HTML 没有命名空间,因为命名空间是用于 XML 的。

标签: xml html xml-namespaces


【解决方案1】:

正如 W3C 所记录的,他们是 XML 和 HTML 规范背后的主体(WHATWG 有一个单独的 HTML 5 规范,但是虽然它在某些方面与 W3C 规范不同步,但 WHATWG 仍然认为它是 W3C 的将规范标准化为 REC 的角色),与 XML 序列化(有时称为 XHTML)一起使用时 HTML 的命名空间是 http://www.w3.org/1999/xhtml

这个命名空间涵盖了迄今为止已指定的具有 XML 序列化的所有 HTML 版本,包括十多年来大量使用的 XHTML 1.0 和 1.1,引入了几个模块化思想但可以说更重要的 XHTML 2.0多个想法的孵化器,而不是实现版本,以及“HTML5 序列化为 XML”,有时称为 XHTML5。

由于关于如何指定 HTML 5 的另一方是 WHATWG,您可能会注意到他们还说,如果您将 HTML5 序列化为 XML,那么您必须使用命名空间 http://www.w3.org/1999/xhtml 并使用另一种序列化要么不使用命名空间,要么使用该命名空间。每https://wiki.whatwg.org/wiki/FAQ#What_is_the_namespace_declaration.3F

在 XHTML 中,您需要指定命名空间。

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

在 HTML 中,当前允许在任何 HTML 元素上使用 xmlns 属性,但前提是它的值为“http://www.w3.org/1999/xhtml”。它根本不做任何事情,只是允许从 XHTML1 轻松迁移。它实际上不是 HTML 中的命名空间声明,因为 HTML 还不支持命名空间。请参阅问题是否支持 HTML 中的命名空间。

下一个常见问题解答也与此相关:

HTML 是根据 DOM 定义的,在解析 text/html 期间,所有 HTML 元素将自动放入 HTML 命名空间http://www.w3.org/1999/xhtml。但是,与 XHTML 序列化不同的是,HTML 序列化中没有真正的名称空间语法可用(参见上一个问题)。换句话说,您不需要像在 XHTML 中那样在 HTML 标记中声明名称空间。但是,只要命名空间是http://www.w3.org/1999/xhtml,您就可以在每个 HTML 元素上放置一个 xmlns 属性。

此外,HTML 语法提供了一种嵌入 MathML 和 SVG 元素的方法。放置在容器元素mathsvg 内的元素将被解析器分别自动放入 MathML 命名空间或 SVG 命名空间。命名空间语法不是必需的,但如果 xmlns 属性的值是正确的命名空间,则再次允许它。

总之,虽然 HTML 不允许 XML 命名空间语法,但有一种方法可以嵌入 MathML 和 SVG,并且 xmlns 属性可以在给定约束下的任何元素上使用,其方式与 DOM 相当兼容等级。

【讨论】:

【解决方案2】:

XHTML

以下默认命名空间声明是 XHTML 中的 required,用于严格符合文档:

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

文档的根元素必须包含一个 xmlns 声明 XHTML 命名空间 [XMLNS]。 XHTML 的命名空间定义为 http://www.w3.org/1999/xhtml

HTML5

相同的默认命名空间声明在 HTML5 中为 optional

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

... 你不需要在 HTML 标记中声明命名空间,因为你 在 XHTML 中做。但是,您可以将 xmlns 属性放在 每个 HTML 元素,只要命名空间是 http://www.w3.org/1999/xhtml

【讨论】:

  • 好的,为什么不更新为http://www.w3.org/2015/html?它们显然是指两种不同的语义。
  • 与 MathML 命名空间继续为 http://www.w3.org/1998/Math/MathML 的原因相同; SVG 命名空间继续为http://www.w3.org/2000/svg; XSLT 命名空间继续为http://www.w3.org/1999/XSL/Transform;等:连续性.
  • ...这只是“遗产”的委婉说法
  • 但是,我认为他们用错了?!?根据 MDN,“这个问题的真正答案是 XML 内容通过给标签明确的“命名空间声明”来告诉用户代理标签名称属于哪种方言。 developer.mozilla.org/en-US/docs/Web/SVG/…。每个 HTML 版本都应该有自己的命名空间。所以如果 SVG 2.0 在 2010 年问世,那就是 w3.org/2010/svg
  • 经验表明,当您迁移到规范的新版本时更改命名空间会导致比它解决的问题要多得多,尤其是当新标准与旧标准高度兼容时。在大多数情况下,如果您保持命名空间不变,旧应用程序将继续工作,但如果您更改命名空间,那么所有旧应用程序都会失败。传统的看法是最好保持命名空间不变,但添加一个“版本”属性来指示正在使用的规范版本。
猜你喜欢
  • 2013-06-04
  • 1970-01-01
  • 2014-08-10
  • 2013-03-11
  • 1970-01-01
  • 2021-05-22
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多