xml命名空间详解

 在研究spring security的时候,里面提到了一个重要的感念就是命名空间,当时以为是spring的一个什么特殊功能,后来研究后才发现是xml的一个知识点,顺便又研究了一下这个知识,找到一篇文章感觉挺好,在此做个记录。

 

转自:http://bbs.actionscript3.cn/thread-1556-1-1.html

关于命名空间有很多人回避。认为太难。其实命名空间使用很普遍,在xml中也大量存在。初学as3者搞不清楚是因为关于这方面的教程少且as3帮助文件中也没有从基础讲起。而从一本厚厚的xml书籍中查询或者看官方网站的介绍又是一种非常苦的事情。这里我把我学习和理解的过程总结下,尽量用通俗的语言写出来。希望能够帮助初学者过这个难关,利益他人。


什么是XML的命名空间:
为了避免XML的标签同名。XML也拥有命名空间。标签可以放入命名空间中,不同的命名空间中的相同名称标签是不同的标签。

xml文件中,命名空间的定义如下:
<d:student xmlns:d=”http://www.develop.com/student>;
其中student 是命名空间的标签。http://www.develop.com是命名空间的标识。d是命名空间的前缀。

命名空间标签:
由于命名空间采取元素属性的定义方式,所以需要一个标签。

命名空间标识:
命名空间标识是命名空间最重要的属性,重要到当输出一个命名空间时就直接转换为它的标识。标识有个规范的称呼:URI(统一资源定位符)URI的最大特点是唯一性。如果不唯一就失去了辨识的意义。实际上相同URI不同的命名空间被看成同一个命名空间。URI分为两种类型:


URL(统一资源定位器):
通俗的说URL就是网页地址。因为每个网页在internat上都是唯一的。

URN(统一资源名称)
可以不使用网页地址而使用唯一名称来定义。如:
urn:2007-12-9/workgrop/xin/projiectname
urn:E7f73B13-05FE-44ec-81CE-F898C4A6CDB4
这个编号是在系统中注册的控件编号,因此是唯一的。


前缀:
前缀用于在XML中作为URI的简化引用。因为URI太长了。如:
<d:student xmlns:d="http://www.develop.com/student">

<d:id>3235329</d:id>


<d:name>Jeff Smith</d:name>

</d:student>
使用前缀把标签放入对应的命名空间中。


有了命名空间区分后相同标签名可以不会被错误解析。实际上命名空间加上元素名叫做QNameQName有两个属性:urilocalName,分别获取命名空间名和本地名称。这个QName可以使用xmlname()方法得到。如上例子中的xml文件可以使用如下代码访问:

  1. var ns:Namespace=xml.namespace();
  2. var node:XMLList=xml.ns::id;
  3. var qNameName=node.name();
  4. trace(qName.uri);
  5. trace(qName.localName);



命名空间不一点要定义在根节点。可以在任何标签中定义,但只有定义了后才能使用。命名空间还可以嵌套或者被重定义。但这样会增加复杂性。一般用的比较少。一个xml文件中可以拥有多个命名空间。使用命名空间前缀可以轻松处理它们。如:
  1. <x:transform version=”1.0” xmlns:x=http://www.w3.org/1999/XSL/Transform
  2. xmlns:d=”urn:dm:student”>
  3. <x:template match=”student”/>
  4. <d:template match=”name”/>
  5. </x:transform>

使用默认命名空间:
xml文档中,可以使用以下语句定义默认命名空间:
xmlns=<namespace identifier>
使用默认命名空间后,如果不加前缀则引用默认命名空间。使用默认命名空间会降低xml结构的清晰度。要慎用。

你可能感兴趣的:(spring,xml,Security,url,文档,语言)