命名空间(Naming Space)

原创 2012年03月24日 09:46:22

命名空间(Naming Space)

XML 命名空间提供了一种避免元素命名冲突的方法。

命名冲突

因为XML文档中使用的元素不是固定的,那么两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生。而这种情况又往往会导致命名冲突。请看下面两个例子

这个 XML 文档在table元素中携带了水果的信息:

<table>

<tr>

<td>Apples</td>

<td>Bananas</td>

</tr>

</table>

这个 XML 文档在table元素中携带了桌子的信息(家具,不能吃的哦):

<table>

<name>African Coffee Table</name>

<width>80</width>

<length>120</length>

</table>

如果上面两个XML文档片断碰巧在一起使用的话,那么将会出现命名冲突的情况。因为这两个片断都包含了<table>元素,而这两个table元素的定义与所包含的内容又各不相同。

使用前缀解决命名冲突问题

下面的XML文档在table元素中携带了信息:

<h:table>

<h:tr>

<h:td>Apples</h:td>

<h:td>Bananas</h:td>

</h:tr>

</h:table>

下面的XML文档携带了家具table的信息:

<f:table>

<f:name>African Coffee Table</f:name>

<f:width>80</f:width>

<f:length>120</f:length>

</f:table>

现在已经没有元素命名冲突的问题了,因为这两个文档对各自的table元素使用了不同的前缀,table元素在两个文档中分别是(<h:table> 和<f:table>)。

通过使用前缀,我们创建了两个不同的table元素。

使用命名空间

下面的XML文档在table元素中携带了信息:

<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文档携带了家具table的信息:

<f:table xmlns:f="http://www.w3s.com/furniture">

<f:name>African Coffee Table</f:name>

<f:width>80</f:width>

<f:length>120</f:length>

</f:table>

在上面两个例子中除了使用前缀外,两个table元素都使用了xmlns属性,使元素和不同的命名空间关联到一起。

命名空间属性

命名空间属性一般放置在元素的开始标记处,其使用语法如下所示:

xmlns:namespace-prefix="namespace" 

在上面的例子中,命名空间定义了一个Internet 地址:

xmlns:f="http://www.w3s.com/furniture" 

W3C 命名规范声明命名空间本身就是一个统一资源标示符,Uniform Resource Identifier (URI)。

当我们在元素的开始标记处使用命名空间时,该元素所有的子元素都将通过一个前缀与同一个命名空间相互关联。

注意:用来标识命名空间的网络地址并不被XML解析器调用,XML解析器不需要从这个网络地址中查找信息,该网络地址的作用仅仅是给命名空间一个唯一的名字,因此这个网络地址也可以是虚拟的,然而又很多公司经常把这个网络地址值象一个真实的Web页面,这个地址包含了关于当前命名空间更详细的信息。

可以访问http://www.w3.org/TR/html4/.

统一资源标识符

通用资源标识符(A Uniform Resource Identifier (URI))是一个标识网络资源的字符串。最普通的URI应该是统一资源定位符Uniform Resource Locator (URL)。URL用于标识网络主机的地址。另一方面,另一个不常用的URI是通用资源名字Universal Resource Name (URN)。在我们的例子中,一般使用的是URLs。

既然前面的例子使用的URL地址来标识命名空间,我们可以确信这个命名空间是唯一的。

默认的命名空间

定义一个默认的XML命名空间使得我们在子元素的开始标记中不需要使用前缀。他的语法如下所示:

<element xmlns="namespace"> 

下面的XML文档在table元素中包含了水果的信息:

<table xmlns="http://www.w3.org/TR/html4/">

<tr>

<td>Apples</td>

<td>Bananas</td>

</tr>

</table>

下面的XML文档包含了家具table的信息:

<table xmlns="http://www.w3s.com/furniture">

<name>African Coffee Table</name>

<width>80</width>

<length>120</length>

</table>

使用命名空间

文档开始使用XSL的时候,就会发现命名空间使用的是如此频繁。XSL样式单主要用于将XML文档转换成类似于HTML文件的格式。

如果看一下下面的XSL文档,就会发现有很多标记都是HTML标记。那些标记并不是HTML标记,是加了前缀的XSL,这个XSL前缀由命名空间"http://www.w3.org/TR/xsl"所标识: 

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">

<xsl:template match="/">

<html>

<body>

<table border="2" bgcolor="yellow">

<tr>

<th>Title</th>

<th>Artist</th>

</tr>

<xsl:for-each select="CATALOG/CD">

<tr>

<td>

<xsl:value-of select="TITLE" />

</td>

<td>

<xsl:value-of select="ARTIST" />

</td>

</tr>

</xsl:for-each>

</table>

</body>

</html>

</xsl:template>

</xsl:stylesheet> 


相关文章推荐

xml命名空间

  • 2017年11月22日 13:40
  • 465KB
  • 下载

x命名空间学习代码

  • 2014年02月18日 22:09
  • 118KB
  • 下载

Spring4.3.x 浅析xml配置的解析过程(10)——解析aop命名空间之aspectj-autoproxy标签

概述Spring的AOP命名空间提供了、和三大标签。前两个标签的作用是想指定pointcut(切点)提供adivce(增强)处理,而的作用是对生命周期短的bean提供装饰,使生命周期短的bean能被生...
  • chyohn
  • chyohn
  • 2017年02月09日 12:35
  • 587

Namespace 命名空间

  • 2011年10月25日 15:04
  • 3.65MB
  • 下载

spring各种命名空间实例

  • 2010年07月18日 08:49
  • 302KB
  • 下载

NSString笔记与OC"命名空间"

NSString的创建方式有 1、也是最简单的一种方式, NSString *str0 = @"HelloWorld"; 2、第二种赋值方式跟第一种很像 NSString *s...
  • a72524
  • a72524
  • 2015年06月03日 22:27
  • 1385

.net命名空间解释列表

  • 2010年04月19日 10:46
  • 51KB
  • 下载

C++在命名空间中声明类和成员函数

C++在命名空间中声明类和成员函数 [大] [中] [小]发布人:圣才学习网  发布日期:2013-09-10 16:41  共2433人浏览 来源:网络 作者:未知 虽...

.NET2.0类库的命名空间名称

  • 2008年05月20日 19:05
  • 38KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:命名空间(Naming Space)
举报原因:
原因补充:

(最多只允许输入30个字)