HTML/HTML5的默认命名空间是什么?

1.2*_*tts 5 html xml html5 xml-namespaces

根据这个名为"w3c"的用户的页面,HTML的默认命名空间是:

http://www.w3.org/1999/xhtml
Run Code Online (Sandbox Code Playgroud)

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

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

<s:Button width="100" height="100" html:color="blue" color="black" /> 
Run Code Online (Sandbox Code Playgroud)

XML解析器需要"html"前缀的命名空间才有效.

Jon*_*nna 14

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

这个命名空间涵盖了迄今为止已经指定的包含XHTML 1.0和1.1的XML序列化的所有HTML版本,这些XHTML 1.0和1.1已经使用了十多年,XHTML 2.0引入了几个模块化的想法,但可以说它更像是一个孵化器.几个想法而不是实现版本,"HTML5序列化为XML",有时称为XHTML5.

由于WHATWG中有另外一个关于如何指定HTML 5的马匹,你可能会注意到,如果你将HTML5序列化为XML,那么你必须使用命名空间http://www.w3.org/1999/xhtml和其他序列化不使用命名空间,或使用那个.按https://wiki.whatwg.org/wiki/FAQ#What_is_the_namespace_declaration.3F:

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

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

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

下一个FAQ也与此相关:

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

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

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


kjh*_*hes 5

XHTML

对于严格符合规范的文档,XHTML 中需要以下默认命名空间声明:

<html xmlns="http://www.w3.org/1999/xhtml">
Run Code Online (Sandbox Code Playgroud)

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

HTML5

相同的默认命名空间声明在 HTML5 中是可选的:

<html xmlns="http://www.w3.org/1999/xhtml">
Run Code Online (Sandbox Code Playgroud)

...您不需要像在 XHTML 中那样在 HTML 标记中声明名称空间。但是,只要命名空间为 http://www.w3.org/1999/xhtml ,您就可以在每个 HTML 元素上放置 xmlns 属性

  • 经验表明,当您迁移到新版本的规范时,更改命名空间会导致比它解决的问题多得多的问题,特别是当新标准与旧标准高度兼容时。在大多数情况下,如果您保持命名空间不变,旧应用程序将继续工作,但如果更改命名空间,则所有旧应用程序都将失败。传统观点是最好保持命名空间不变,但添加一个“version”属性来指示正在使用哪个版本的规范。 (4认同)