博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(五) 使用命名空间
阅读量:4047 次
发布时间:2019-05-25

本文共 1854 字,大约阅读时间需要 6 分钟。

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机制来设定很长的包名一样,来处理长标识符。
例:

children

 

现在,元素和它的子元素都是给定命名空间的一部分。

子元素可以提供自己的命名空间,例:

 

grandchildren
more children

 

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

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

 

...
 

下面的属性:xmlns:alias="namespaceURI"

用于定义命名空间和别名。在上述例子中,别名是xsd。xsd:schema实际上是指“命名空间http://www.w3.org/2001/XMLSchema中的schema”
6.注意:只有子元素继承了它们父元素的命名空间,而不带显示别名前缀的属性不是命名空间的一部分。
例:

...

 

在这个示例中,元素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。

转载地址:http://nayci.baihongyu.com/

你可能感兴趣的文章
嵌入式及手机开发[笔试题目]
查看>>
Sony Ericsson Z610i
查看>>
MTK的暗码
查看>>
LCD的接口分类
查看>>
LCD点屏心得
查看>>
可重入函数
查看>>
C语言嵌入式系统编程修炼之道
查看>>
linux内核驱动开发笔试题
查看>>
XX公司招聘C笔试题
查看>>
×××公司linux内核驱动开发招聘笔试题
查看>>
驱动版Hello World
查看>>
sizeof,终极无惑(上)
查看>>
常考--宏与内联函数
查看>>
C语言面试题大汇总
查看>>
C/C++ 笔试、面试题目大汇总
查看>>
One Of My True Dreams
查看>>
我看无损音频APE和FLAC
查看>>
dBm, dBi, dBd, dB, dBc 详解
查看>>
堆(heap)和栈(stack)的区别
查看>>
关于jtag接口
查看>>