XML 命名空间

XML 和 HTML 的根本区别在于:HTML 中的各种标记是已经定义好的、固定的,而 XML 的标记是自定义的、可扩充的。在大型而复杂的 XML 文档中,很可能会出现标记名称相同,然而其所代表的元素意义却各不相同的现象。尤其是将多个 XML 文档组合使用时,出现这种标记名混乱的现象几乎是不可避免的。

一个命名空间通常是和一个特定的 DTD 对应起来的,某个 DTD 中定义的元素名称集合就是其对应的命名空间中的元素名称集合。在 XML 文档中,对于不同命名空间的区分非常简单,即对于每一套特定应用的 DTD,赋予它一个独一无二的标识符来代表,如果在文档中使用某个 DTD 中定义的元素,就将该 DTD 的标识符作为元素名或属性名的前导符,这就相当于指明了这些元素的标记名称来自什么地方,或者说归属于哪个命名空间。

由于是通过在元素的标记名前添加一个独特的标识符来表明该标记的归属,因而这个标识符在 XML 文档中应该是唯一的。当然,每一个命名空间本身也应该是唯一的。在 XML 规范中,对命名空间的定义采用了一种相当巧妙的方法,即采用 Web 上某个唯一的 URI 来定义不同的命名空间。这个 URI 可以是 URL,也可以是 URN,并将其与某个特定的命名空间标识符对应起来。

定义命名空间

命名空间通过给标识名加一个网址(URL)定位的方法来区分这些名称相同的标识。命名空间的定义一般放在元素的开始标记处,其使用的语法格式:

<标记名 xmlns:标识符="URI">

对上面代码中各名词的含义说明如下:

  • “标记名”是用户要在其中定义命名空间的某个元素标记的名称。
  • “xmlns”是定义命名空间时所使用的固定词语,与其后面的标识符之间必须有冒号分割。
  • “标识符”是用户为命名空间定义的对应标识名称,此名称在文档中应该是唯一的,而且不能含有冒号。
  • “URI”即统一资源标识符,通常是这个命名空间的元素在 Web 上所归属的文档的 URL 或 URN。

需要注意的是,命名空间的标识符不允许使用 xml、html、xsl、xmlns 等保留字。此外,定义语句中的 URI 通常只起一个标识的作用,并不是真的要从该网络资源得到什么,所以它的精确性并不重要,甚至根本就不存在。

示例:

<?xml version="1.0" encoding="GB2312"?>
<Films xmlns:films="http:www.bb.com" xmlns:director="http:www.dd.com">
    <Film>
        <films:NAME>钢铁侠</films:NAME>
        <director:NAME>沙恩•布莱克</firector:NAME>
        <Starring>小罗伯特•唐尼</Starring>
    </Film>
</Films>

默认命名空间

在实际编程的过程中,对于一个很长的 XML 文档来说,如果需要为文档中的每一个元素都添加命名空间标识将会是一个很麻烦的事,所以,可以将文档中使用较多的命名空间定义为默认命名空间,并设法使这个默认命名空间与某个元素及其子元素相关联。这样的话,在 XML 文档中为某个元素定义了默认命名空间后,该元素及其所有未加命名空间标识符的子元素都归属于这个默认命名空间,除非它们另外拥有指定的命名空间标识符。

默认命名空间也是在元素的起始标记内进行定义的,与定义一般命名空间不同的是,默认命名空间的定义不使用标识符,具体的定义语法格式如下:

<标记名 xmlns="URI">

示例:

<?xml version="1.0" encoding="GB2312"?>
<Films xmlns="http:www.bb.com" xmlns:director="http:www.dd.com">
    <Film>
        <NAME>钢铁侠</NAME>
        <director:NAME>沙恩•布莱克</firector:NAME>
        <Starring>小罗伯特•唐尼</Starring>
    </Film>
</Films>

一个默认命名空间的作用范围仅限于定义这个命名空间的元素,及其子元素。需要指出的是,定义默认命名空间之后,可以作用到有关的元素,但无法作用到元素所包含的属性。换句话说,对元素的属性来说是不存在默认命名空间的。

本文节选自:《XML 实用教程》 陈作聪、苏静、王龙等编著

时间: 2024-11-05 19:28:37

XML 命名空间的相关文章

全栈JavaScript之路( 二十四 )DOM2、DOM3, 不涉及XML命名空间的扩展

(一)DocumentType 类型的变化新增三个属性: publicId,systemId,internalSubset(内部子集) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" [<!ELEMENT name (#PCDATA)>] > 通过, document.doc

全栈JavaScript之路( 二十三 )DOM2、DOM3, 涉及XML命名空间的扩展(一)

<!DOCTYPE html> <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"> <head> <title>Example XHTML page</title> </head> <body> <s:svg xmlns:s="http://www.w3.org/2000/svg" version="1.1&

System.Xml 命名空间

XML 已经成为一种流行的数据格式,其原因很多,对于大多数人来说,这是一种很方便表示数据的格式,文件有可读性.程序员的处理文件既有非结构化的,即不遵循一种模式,或者是结构化的,即数据符合 XSD 架构定义的约定:还希望方便地用 XPath 查询数据,即,为了处理一种新的数据格式而编写自定义的解析程序,很少需要,文件可以在不同的 XML 格式之间快速转换,用强大的 XSLT 语言转换数据. System.Xml 命名空间处理 XML 文件的类所有的方法很多,有这里描述的,但不止这些,我们将学习的方

Atitit xml命名空间机制

命名冲突1 使用前缀来避免命名冲突2 使用命名空间(Namespaces)2 XML Namespace (xmlns) 属性2 默认的命名空间(Default Namespaces)2 命名空间的语法如下   xmlns:[prefix]="[url of name]"3 XML 命名空间提供避免元素命名冲突的方法. 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 XML 文档携带着某个表格中的信息: <tabl

XML 命名空间(XML Namespaces)

XML 命名空间提供避免元素命名冲突的方法. 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 XML 文档携带着某个表格中的信息: <table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> 这个 XML 文档携带有关桌子的信息(一件家具): <table> <nam

BizTalk开发系列(十六) XML命名空间

BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath选取节点的时候不知道要不要加上命名空间前缀,或者是什么时候该加什么时候不该加.为此, 做一个Sample来校验一下XML命名空间在XML操作过程中的影响. 名称空间是W3C推荐标准提供的一种统一命名XML文档中的元素和属性的机制.使用名称空间可以明确标识和组合XML文档中来自不同标记词汇表的元素和属

XML命名空间

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/

Xml命名空间浅析

XML实例 在介绍xml命名空间之前,我们先来看段xml代码: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http:/

SpringMVC源代码学习外传(一)xml命名空间的解析NamespaceHandler

以下内容基于书:<看透SpringMVC-源代码分析与实践> 基本照搬...用于自己查阅备忘. 加上外传关键字的是讨论一些SpringMVC的特定类的使用方法, 非外传的是对启动流程/请求处理流程,我们可以看作主线剧情. 我们知道springMVC的配置都是写在xml文件里的,这些配置是怎么从xml读取的呢? 解析它们的是一个接口 位置在spring-beans-RELEASE.jar内org.springframework.beans.factory.xml.NamespaceHandler