最新的Web开发教程
 

XML命名空间


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


名称冲突

在XML中,元素名称是由开发人员定义。 此尝试混合来自不同的XML应用程序的XML文档时通常导致的冲突。

这个XML进行HTML表的信息:

<table>
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

这个XML中携带了表信息(a piece of furniture)

<table>
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

如果这些XML片段加在一起,就不会有名称冲突。 两者都包含一个<table>元素,但是元素有不同的内容和意义。

用户或XML应用程序将不知道如何处理这些分歧。


解决冲突的名称使用前缀

在XML名称冲突可以很容易地使用名称的前缀是可以避免的。

此XML携带关于HTML表,一件家具的信息:

<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>

在上面的例子中,将不会有冲突,因为两个<table>元件具有不同的名称。


XML命名空间-中xmlns属性

当使用以XML前缀,一个namespace的前缀必须被定义。

命名空间可以由限定xmlns中一个元素的开始标签属性。

该命名空间声明的语法如下。 xmlns: prefix =" URI "

<root>

<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>

<f:table xmlns:f="http://www.w3ii.com/furniture">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>

在上面的例子:

xmlns第一属性<table>元素给出了H:前缀合格的命名空间。

xmlns在第二个属性<table>元素给出了F:前缀合格的命名空间。

当命名空间为元素定义,与同一前缀的所有子元素都具有相同的命名空间相关联。

命名空间,也可以在XML根元素声明:

<root
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3ii.com/furniture">

<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>

</root>

Note:该命名空间URI不使用分析器来查找信息。

使用URI的目的是给命名空间一个唯一的名称。

然而,公司经常使用的命名空间作为一个指向包含命名空间信息的网页。


统一资源标识符(URI)

一个Uniform Resource Identifier (URI)是字符的字符串,用于标识互联网资源。

最常见的URI是Uniform Resource Locator (URL)标识的互联网域名地址。 URI的另一个,不那么常见的类型是Universal Resource Name (URN)


默认命名空间

定义一个默认命名空间的元素在所有的子元素使用前缀拯救我们。 它的语法如下:

xmlns="namespaceURI"

这个XML进行HTML表的信息:

<table xmlns="http://www.w3.org/TR/html4/">
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

这个XML中携带了一件家具的信息:

<table xmlns="http://www.w3ii.com/furniture">
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

在实际使用的命名空间

XSLT是可用于将XML文档转换成其他格式的语言。

下面的XML文档,是用于XML转换为HTML文档。

命名空间"http://www.w3.org/1999/XSL/Transform"标识一个HTML文档中的XSLT元素:

<?xml version="1.0" encoding="UTF-8 " ?>

<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 style="text-align:left">Title</th>
      <th style="text-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>

如果您想了解更多有关XSLT,请阅读我们的XSLT教程