`

(五) 使用命名空间

阅读更多

Java语言使用包来避免名字冲突。程序员可以在不同的类中使用相同的名字,只要它们不在同一个包中即可。XML也有类似的命名空间(namespace)机制,可以用于元素名和属性名。

1.命名空间是由统一资源标识符(Uniform Resource Identifier, URI) 来标识的
例:

    http://www.w3.org/2001/XMLSchema
    uuid:1c759aed-b748-475c-ab68-10679700c4f2
    urn:com:books-r-us

 
2.HTTP的URL格式是最常用的。注意,URL只能作标识符字符串,而不是一个文件的定位器。
例如:命名空间标识符

    http://www.w3.org/
    http://www.w3.org/index.html
 


表示了不同的命名空间,尽管Web服务器将为这两个URL提供相同的文档。

3.在命名空间的URI不需要有任何文档,XML解析器不会尝试去该处找到任何东西。但,人们习惯于将解释该命名空间的文档放在URL位置上。
例如,XML Schema的命名空间URL(http://www.w3.org/2001/XMLSchema),为一个描述XML Schema标准的文档。

4.使用HTTP URL作为命名空间标识符的原因,是因为这样容易确保它们是独一无二的。如果使用一个实际的URL,那么主机部分的唯一性就将由域名系统来保证。这个Java包名中的反向域名是一个原理。
为了唯一性,通常需要用长命名空间标识符,并可以通过类似Java中import机制来设定很长的包名一样,来处理长标识符。
例:

    <element xmlns="namespaceURI">
        children
    </element>

 

现在,元素和它的子元素都是给定命名空间的一部分。
子元素可以提供自己的命名空间,例:

 

    <element xmlns="namespaceURI1">
        <child xmlns="namespaceURI2">
            grandchildren
        <child>
        more children
    </element>

 

这时,第一个子元素和孙元素都是第二个命名空间的一部分。

5.无论是只需要一个命名空间,还是命名空间本质上是嵌套,这个简单机制都工作的很好。否则,就需要使用第二种机制,Java中没有类似的机制。可以拥有命名空间的别名,即为特定文档选取的一个短的标识符。
例:

 

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="gridbag" type="GridBagType"/>
        ...
    </xsd:schema>
 

下面的属性:xmlns:alias="namespaceURI"
用于定义命名空间和别名。在上述例子中,别名是xsd。xsd:schema实际上是指“命名空间http://www.w3.org/2001/XMLSchema中的schema”

6.注意:只有子元素继承了它们父元素的命名空间,而不带显示别名前缀的属性不是命名空间的一部分。
例:

    <configuration xmlns="http://namespaceURI1"
        xmlns:si="http//namespaceURI2">
        <size value="210" si:unit="mm"/>
        ...
    </configuration>

 

在这个示例中,元素configuration和size是 http://namespaceURI1 的命名空间的一部分,属性 si:unit 是 http://namespaceURI2 的一部分。然而属性值不是任何命名空间的一部分。

7.可以控制解析器对命名空间的处理,默认的,Java的DOM解析器默认不支持“命名空间”。
要打开命名空间处理特性,调用DocumentBuilderFactory类的setNamespaceAware方法 : factory.setNamespaceAware(true)
这样工厂生产的所有生成器便都支持命名空间,每个节点有三个属性:
(1)带有别名前缀的限定名(qualifield),由getNodeName和getTagName方法返回。
(2)命名空间URI,由getNamespaceURI方法来返回。
(3)不带别名前缀和命名空间的本地名(local name),由getLocalName方法返回。
例:
<xsd:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema">
限定名 = xsd:schema
命名空间URI = http://www.w3.org/2001/XMLSchema
本地名 = schema
注意:如果命名空间特性被关闭,getLocalName和getNamespaceURI方法将返回null。

分享到:
评论

相关推荐

    PHP命名空间的使用,PHP命名空间实例

    五、命名空间与自动加载 为了方便管理大量的类,PHP推荐使用命名空间配合__autoload()函数或者 spl_autoload_register() 函数实现自动加载。这样,当尝试实例化一个未定义的类时,PHP会自动加载对应的类文件,提高...

    c++ 命名空间

    这意味着,当你使用`&lt;iostream.h&gt;`时,实际上是在使用全局命名空间,类似于早期C++实现的方式;而当你使用`&lt;iostream&gt;`时,则需要明确地指出`std`命名空间。 #### 三、命名空间的使用方式 使用C++标准库的任何...

    struts2中命名空间的使用

    ### Struts2中命名空间的使用 #### 一、引言 在开发Web应用程序时,随着项目的扩大,可能会出现多个具有相同名称的动作(Action)。为了有效地管理和区分这些动作,Struts2框架引入了命名空间的概念。本文将详细...

    .net 命名空间总结

    1. **避免名称冲突**:不同的库可能定义了相同名字的类或接口,通过使用不同的命名空间可以避免这种冲突。 2. **逻辑分组**:将相关的类组织在一起,便于管理。 3. **减少全局命名空间污染**:在大型项目中,命名...

    C#命名空间.txt

    #### 五、命名空间的层次结构 命名空间可以嵌套,这意味着一个命名空间可以包含另一个命名空间。例如,`System.Collections.Generic`就是`System`命名空间内的一个子命名空间。这种结构有助于组织复杂的类库,并...

    ( .Net常用命名空间和类介绍

    - **概述**:该命名空间包含可用于生成和使用XML Web服务的类。 - **应用场景**: - Web服务开发:例如创建RESTful API。 #### 五、框架服务命名空间 1. **System.Diagnostics** - **概述**:该命名空间提供了...

    System System命名空间源码

    《深入解析.NET Framework中的System命名空间》 System命名空间是.NET Framework的核心部分,它包含了大量基础类型、系统类和接口,是所有其他命名空间的基础。本文将深入探讨System命名空间的源码,揭示其背后的...

    MySQL中的网络命名空间支持.pdf

    通过使用MySQL中的网络命名空间支持,可以有效地解决跨命名空间连接时可能出现的问题,并确保在一个高度隔离和安全的环境中运行MySQL实例。这一特性对于现代容器化和虚拟化环境尤为重要,有助于提高应用程序的安全性...

    DFS 命名空间概述.pdf

    ### DFS 命名空间概述 #### 一、DFS 命名空间简介 **DFS(分布式文件系统)**是一种由Microsoft开发的技术,用于在Windows网络环境中提供逻辑组织和访问共享文件的功能。DFS通过创建虚拟目录结构(即DFS命名空间)...

    JS命名空间的一种改进版本

    五、模块和命名空间结合 在实际应用中,可以将IIFE与ES6模块结合,既保留模块化的优势,又能实现命名空间的效果: ```javascript // namescape.js export const MyNamespace = { func1: () =&gt; {}, func2: () =&gt; ...

    C++命名空间5种常见用法实例解析

    在C++中,命名空间的使用可以带来很多好处,例如模块化应用程序、匿名命名空间、解决枚举类型成员重名问题、隐藏实现等。本文将对C++命名空间的5种常见用法进行详细解析。 一、避免名称冲突 C++命名空间最常见的...

    javascript创建命名空间的5种写法_.docx

    ### JavaScript 创建命名空间的五种方法 #### 一、通过函数创建命名空间 在JavaScript中,使用函数创建命名空间是一种常见的做法。这种方法主要是利用函数来封装命名空间内的成员,包括属性和方法。这种方式的优点...

    javascript自执行函数之伪命名空间封装法.docx

    因此,开发者通常会使用对象字面量的方式来模拟命名空间,即所谓的“伪命名空间”。这种方式可以有效地组织代码,减少全局变量的使用,使代码更加模块化。 #### 四、结合自执行函数与伪命名空间 通过结合自执行函数...

    JavaScript创建命名空间的5种写法

    为了解决这个问题,开发者通常会采用以下五种方式来创建命名空间。 1. **通过函数创建命名空间**: 这种方法通过声明一个函数来实现命名空间,将变量和方法封装在函数内部。例如: ```javascript var NameSpace ...

    PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间

    在使用命名空间时,有一点需要特别注意:如果你在命名空间中定义的函数或常量未定义,那么非限定的函数名或常量名会被解析为全局作用域中的函数名或常量名。 总结以上信息,我们可以看到PHP命名空间的强大功能和...

    javascript创建命名空间的5种写法__1.docx

    以下是五种创建JavaScript命名空间的方法: 1. **通过函数(function)创建** 这种方法通常涉及定义一个函数,然后在函数内部声明变量和方法。例如: ```javascript var namespace = namespace || {}; namespace....

    数据库命名规范(Oracle数据库)

    - 全部使用大写字母或小写字母进行命名,保持统一性。 - 单词采用单数形式。 - 使用英文单词缩写时,确保缩写的含义明确。 - 单词间用下划线连接,每个单词都为单数形式。 2. **特定情况下的命名规则:** - ...

    数据库(Oracle)命名规范

    #### 五、键值命名规范 1. **主键命名**: - 主键命名方式是采用表名加上`PK`再加一位数字的流水号(1~9),例如`DEPT_PK1`。 2. **附键命名**: - 附键命名方式是采用表名加上`AK`再加一位数字的流水号(1~9),...

Global site tag (gtag.js) - Google Analytics