XML命名空间

XML命名空间(XML Namespaces)

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

 

18.1 命名冲突

由于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>元素,就会发生命名冲突。

 

18.2 使用前缀来避免命名冲突

此文档带有某个表格中的信息:

<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>元素。

 

18.3 使用命名空间(Namespaces)

这个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.w3school.com.cn/furniture">

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

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

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

</f:table>

不仅仅使用前缀不同,我们为 <table> 标签添加了一个 xmlns 属性,这样就为前缀赋予了一个不某个命名空间相关联的限定名称。

 

18.4 XML Namespace(xmlns)属性

XML 命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法:

xmlns:namespace-prefix="namespaceURI"

当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会不同一个命名空间相关联。

注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向某个实存的网页,这个网页包含着有关命名空间的信息。

 

18.5 统一资源标示符(Uniform Resource Identifier(URI))

统一资源标示符是一串可以标示因特网资源的字符。最常用的URI是用来标示因特网域名地址的统一资源定位器(URL)。另一个不那么常用的URI是统一资源命名(URN)。在我们的例子中,我们仅使用URL。

 

18.6 默认的命名空间(Default Namespaces)

为某个元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。

请使用下面的语法:

xmlns="namespaceURI"

这个XML文档携带着某个表格中的信息:

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

<tr>

<td>Apples</td>

<td>Bananas</td>

</tr>

</table>

此XML文档携带着有关一件家具的信息:

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

<name>African Coffee Table</name>

<width>80</width>

<length>120</length>

</table>

 

18.7 命名空间的实际应用

当开始使用XSL时,您不久就会看到实际使用中的命名空间。XSL样式表用亍将XML文档转换为其他格式,比如HTML。

如果您仔细观察下面的这个XSL文档,就会看到大多数的标签是HTML标签。非HTML的标签都有前缀xsl,且由此命名空间标示:

"http://www.w3.org/1999/XSL/Transform":

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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html>

<body>

<h2>My CD Collection</h2>

<table border="1">

<tr>

<th align="left">Title</th>

<th align="left">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>

posted on 2012-07-05 16:01  流星落  阅读(1130)  评论(0编辑  收藏  举报

导航