XML 教程

XML 教程 XML 简介 XML 用途 XML 树结构 XML 语法 XML 元素 XML 属性 XML 命名空间 XML Display XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLink XML 验证器 XML DTD XML Schema XML 服务器 XML 实例 XML 测验

XML AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 实例

XML DOM

DOM 简介 DOM 节点 DOM 访问节点 DOM 节点信息 DOM 节点列表 DOM 节点遍历 DOM 节点导航 DOM 获取节点 DOM 更改节点 DOM 删除节点 DOM 替换节点 DOM 创建节点 DOM 添加节点 DOM 克隆节点 DOM 实例

XPath 教程

XPath 简介 XPath 节点 XPath 语法 XPath 轴(Axes) XPath 运算符 XPath 实例

XSLT 教程

XSLT 简介 XSL 语言 XSLT 转换 XSLT <template> XSLT <value-of> XSLT <for-each> XSLT <sort> XSLT <if> XSLT <choose> XSLT Apply XSLT 客户端 XSLT 服务端 XSLT 编辑 XML XSLT 实例

XQuery 教程

XQuery 简介 XQuery 实例 XQuery FLWOR 表达式 XQuery FLWOR + HTML XQuery 术语 XQuery 语法 XQuery 添加元素和属性 XQuery 选择和过滤 XQuery 函数

XML DTD

DTD 简介 DTD 构建模块 DTD 元素 DTD 属性 DTD 元素 vs. 属性 DTD 实体 DTD 实例

XSD Schema

XSD 简介 XSD How To XSD <schema> XSD 元素 XSD 属性 XSD 限制

XSD Complex

XSD 复杂元素 XSD 空元素 XSD 仅限元素 XSD 纯文本元素 XSD 混合 XSD 指示器 XSD <any> XSD <anyAttribute> XSD 替换 XSD 实例

XSD 数据类型

XSD 字符串 XSD 日期 XSD 数值 XSD 杂项 XSD 参考手册

Web Services

XML Services 简介 XML WSDL XML SOAP XML RDF XML RSS

参考手册

DOM 节点类型 DOM 节点 DOM NodeList DOM NamedNodeMap DOM 文档 DOM 元素 DOM 属性 DOM 文本 DOM CDATA DOM 注释 DOM XMLHttpRequest DOM 解析器 XSLT 元素 XSLT/XPath 函数


XML 命名空间

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


命名冲突

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

XML 解析器无法确定如何处理这类冲突。


使用前缀来避免命名冲突

使用名称前缀可以很容易地避免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>

现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <table> 元素 (<h:table> 和 <f:table>)。

通过使用前缀,我们创建了两种不同类型的 <table> 元素。



XML Namespace (xmlns) 属性

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

xmlns:namespace-prefix="namespaceURI"

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

<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="https://www.w3ccoo.com/furniture">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>

在上例中:

第一个 <table> 元素中的xmlns属性为h:prefix 提供了一个限定的命名空间。

第二个 <table> 元素中的xmlns属性为f:prefix 提供了一个限定的命名空间。

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

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

<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="https://www.w3ccoo.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>

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

请访问 http://www.w3.org/TR/html4/


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

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


默认的命名空间(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="https://www.w3ccoo.com/furniture">
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

命名空间的实际应用

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

如果您仔细观察下面的这个 XSL 文档,就会看到大多数的标签是HTML标签。非 HTML 的标签都有前缀 xsl,并由此命名空间标示:"http://www.w3.org/1999/XSL/Transform":

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

<?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 教程