html中的根标签

307 阅读3分钟

hello,大家好!欢迎和我一起认识html元素。

之前我们已经了解过html中的标签根据其语义可以划分为根元素、元数据脚本、文本语义、分组内容、Forms表单、文档块、表格数据、交互元素、嵌入内容元素9种类型。今天我们重点来看一下根元素,即html元素。

两个方面来把握html元素,一是元素含义,二是元素属性

元素含义:html元素表示一个 HTML 文档的根(顶级元素),所以它也被称为根元素。所有其他元素必须是此元素的后代。通常它的内容包括有一个head元素,后跟一个body元素。

元素属性:除了全局属性外,它只有一个属性:xmlns。它的作用是指派文档的 XML命名空间。这在由 XML解析器解析的文档中是必需的,而在 text/html 文档中是可选的。

关于元素属性xmlns的解释,可能有点难理解。大白话翻译一下是这样的:如果该html文档期望符合xml的规范(把html文档当做xml使用),那么在由xml解析器解析时,必须得使用xmlns属性,以指定整个文档所使用的命名空间。如果是text/html 类型的文档,就不用指定xmlns属性了。

显然,我们需要搞清楚为什么xml文档需要使用xmlns属性指定其命名空间呢?

先简单了解一下xml:xml和html很类似,它是被设计用于数据传递的标记语言(HTML被设计用于显示数据),它不会用来做任何事情,而是用来结构化,存储以及传输信息,xml标签具有自我描述性,没有被预定义,需要自行定义标签。

在xml中,元素是可以自定义的,当两个不同的xml文档使用相同的元素名时,就会发生命名冲突

比如,假如下面这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的table元素,就会发生命名冲突。

<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

XML 解析器无法确定如何处理这类冲突,于是需要使用前缀来避免命名冲突,就像下面这样:

<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
  
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

当在 XML 中使用前缀时,一个所谓的用于前缀的命名空间必须被定义。同时为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。解决命名冲突后的代码如下:

<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table xmlns="//www.dba.cn/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

于是,通过为元素添加xmlns属性,解决了xml的命名冲突的问题。

进而,通过给html标签添加xmlns属性,可以在它被当做xml文档解析时,指派文档的命名空间,避免命名冲突的问题。

感谢大家的阅读!