XML名字空间提供了一种避免元素名冲突的方法。
b>名字冲突
由于XML中的元素名不是固定的,因此当两个不同的文档使用同样的名字描述两个不同类型的元素时就会发生名冲突。
下面这个XML文档在一个表格中携带了信息:
< table>
< tr>
< td>Apples< /td>
< td>Bananas< /td>
< /tr>
< /table>
下面这个XML文档携带了关于一个表格的信息 (关于一件家具的信息):
< table>
< name>African Coffee Table< /name>
< width>80< /width>
< length>120< /length>
< /table>
如果这两个XML文档被加在一起,就会发生一个元素名冲突,因为这两个文档都包含了一个< table>元素,而这两个元素的内容和定义都不同。
b>用一个前缀解决名冲突
下面这个XML文档在一个表格中携带了信息:
< h:table>
< h:tr>
< h:td>Apples< /h:td>
< h:td>Bananas< /h:td>
< /h:tr>
< /h:table>
而这个XML文档则携带了一件家具的信息:
< f:table>
< f:name>African Coffee Table< /f:name>
< f:width>80< /f:width>
< f:length>120< /f:length>
< /f:table>
现在就没有元素名冲突的问题了,因为两个文档分别给他们的< table>元素使用了不同的名字:(< h:table> 和 < f:table>)。 通过使用一个前缀,我们创建了两个不同类型的< table> 元素。
b>使用名字空间
下面这个XML文档在一个表格中携带了信息 :
< h:table xmlns:h="http://www.w3.org/TR/html4/">
< h:tr>
< h:td>Apples< /h:td>
< h:td>Bananas< /h:td>
< /h:tr>
< /h:table>
这个XML文档携带了一件家具的信息:
< f:table xmlns:f="http://www.w3schools.com/furniture">
< f:name>African Coffee Table< /f:name>
< f:width>80< /f:width>
< f:length>120< /f:length>
< /f:table>
在这里不是只使用前缀,在< table>标记上还增加了一个 xmlns属性,这样就给元素前缀一个与名字空间相联系的有资格的名字。
b>名字空间属性
名字空间属性放在一个元素的起始标记中,它的语法如下:
xmlns:namespace-prefix="namespace"
在上面的例子中,名字空间本身是用一个Internet 地址定义的:
xmlns:f="http://www.w3schools.com/furniture">
W3C名字空间规范规定名字空间本身应该是一个统一资源识别号 (URI)。当一个名字空间在一个元素的起始标记中被定义时,所有有相同前缀的子元素都与同样的名字空间相关。注意:分解器并不使用用来识别名字空间的地址去查找信息。这个地址唯一的目的就是给名字空间一个唯一的名字。但是,公司经常将名空间作为包含名空间信息的实际Web页面的一个指针。访问http://www.w3.org/TR/html4/试一试。
b>统一资源识别号
一个统一资源识别号(URI)是识别一个Internet资源的字符串。通常URI就是识别一个Internet域地址的URL。另外,有少数一些类型的 URI 是通用资源名(URN)。在我们的例子中只使用URL。由于我们这个家具的例子中使用一个Internet地址去识别其名字空间,我们可以肯定我们的名字空间是唯一的。