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://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry>
<bean class="org.springframework.context.support.SimpleThreadScope"/>
</entry>
</map>
</property>
</bean>
<bean id="bar" class="x.y.Bar" scope="thread">
<property name="name" value="Rick"/>
<aop:scoped-proxy/>
</bean>
</beans>
这段代码摘自spring框架的某段配置代码。
稍微分析一下:该段xml代码中的诸多元素没有使用任何前缀,因为它们的默认命名空间是 “http://www.springframework.org/schema/beans”, 该命名空间所对应的schema的地址:http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
这段代码还有另外一个以aop为前缀的命名空间"http://www.springframework.org/schema/aop", 该命名空间对应的schema地址:http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
<aop:scoped-proxy/> 这段代码就使用了以aop为前缀的scoped-proxy元素。
其他元素包括beans,bean,property,map等元素都是通过schema来定义的,下面我们就简单看下schema的知识。
XML schema介绍
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
上面文字摘自W3C中对Schema的介绍。 没错,XML Schema就是用来描述XML文档结构的。
下面我们就来简单写个schema文件:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.gogogo.com"
xmlns="http://www.gogogo.com"
elementFormDefault="qualified">
<xs:element name="name" type="xs:string"/>
<xs:element name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element ref="name"/>
<xs:element name="age" type="xs:int"/>
<xs:element name="birth" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这个简单的schema表示的意思就是定义一个名字为Employee的复杂类型。 该元素分别拥有顺序为id,name,age,birth这4个元素子元素。
XML 命名空间介绍
XML 命名空间提供避免元素命名冲突的方法。
上面文字摘自W3C中对XML 命名空间的介绍。
怎么理解呢。其实这个命名空间跟.Net中的命名空间或Java中的package的概念是一样的,就是用来解决一些命名冲突的。
举个例子:
比如在A.xsd和B.xsd这2个Schema文件中都定义了Employee这个类型的元素。 那么如何区别这2个不用类型相同名字的Employee元素? 答案就是使用命名空间进行区分。
下面我们来分析一下本文定义的schema中的代码:

下面我们通过另外一种方式重新写下这段schema代码:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.gogogo.com"
xmlns:my="http://www.gogogo.com"
elementFormDefault="qualified">
<xs:element name="name" type="xs:string"/>
<xs:element name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element ref="my:name"/>
<xs:element name="age" type="xs:int"/>
<xs:element name="birth" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
代码没什么变化,只是不使用默认的命名空间了。将该schema对外的命名空间地址用在my前缀下。这样ref name的时候就必须使用my前缀了,因为已经没有了默认的命名空间,schema不知道怎么去找 "name" 这个元素。
看了2段代码,总结一下schema中命名空间的使用:
xml:你的前缀="你的命名空间地址"
examples:
xml:my="http://www.my.org", xml:omg="http://www.omg.org", xml:java="http://www.java.org" ........
参考资料
http://www.w3school.com.cn/schema/index.asp
http://www.w3school.com.cn/xml/xml_namespaces.asp
Xml命名空间浅析的更多相关文章
- Atitit xml命名空间机制
Atitit xml命名空间机制 命名冲突1 使用前缀来避免命名冲突2 使用命名空间(Namespaces)2 XML Namespace (xmlns) 属性2 默认的命名空间(Default Na ...
- BizTalk开发系列(十六) XML命名空间
BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath ...
- XML 命名空间(XML Namespaces)
XML 应用程序 XML CDATA XML 命名空间提供避免元素命名冲突的方法. 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 X ...
- XML 命名空间
XML 命名空间 一.XML命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 XML 文档携带着某个表格中的信息: <table& ...
- 雷林鹏分享:XML 命名空间
XML 命名空间 XML 命名空间提供避免元素命名冲突的方法. 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 XML 携带 HTML ...
- xml命名空间
https://yq.aliyun.com/articles/40353 ************************************* 摘要: 相信很多人和我一样,在编写Spring或者 ...
- XML命名空间详解
http://happylongnv.blog.hexun.com/48859954_d.html 目的:解决同一个元素在相同文件中代表不同含义的问题.因为XML文档中使用的元素不是固定的,那么两个不 ...
- 全栈JavaScript之路( 二十四 )DOM2、DOM3, 不涉及XML命名空间的扩展
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/hatmore/article/details/37658167 (一)DocumentType 类型 ...
- python通过LXML库读取xml命名空间
xml实例版本: <a> <city:table xmlns:city="city"> <heilongjiang name="citys& ...
随机推荐
- Entity Framework做IN查询
开发中遇到的Too high level of nesting for select错误 项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的 ...
- JavaScript Patterns 2.11 Writing Comments
Document all functions, their arguments and return values, and also any interesting or unusual algor ...
- Linux Shell 02 流程控制语句
一.if语句格式:支持if/elif/else形式,支持嵌套 1. command执行成功(及退出状态为0)时,执行command2 2. 当判断条件为test命令时,判断结果为true时,执行com ...
- centos升级mysql至5.7
1.备份原数据库 [root@www ~] #mysqldump -u root –p -E –all-database > /home/db-backup.sql 加-E是因为mysqldum ...
- jquery实践案例--验证手机号码
如果要做手机号的验证,那么我们需要知道手机号码的号段. 182 183 187 188 155 156 176 186 189 //移动运营商:170 移动: 2G号段(GSM):134-139.15 ...
- 入门 ARM 汇编(一)—— 知识铺垫
我读着史铁生的散文,零碎的牵扯起我生命中不曾出现过的记忆,一如北方的黄山厚土之中悠忽而来的忧伤的信天游,那些灿若信仰一样的阳光以及阳光下虔诚的子民.我想有一次远行,于细碎流淌的时光与路途之中,观察所有 ...
- three Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- python实现插入排序
代码如下@.·.@ # *-* coding: utf- *-* if __name__ == '__main__': def insert_sort(l): ,len(l)): tmp = l[i] ...
- ant+jenkins+testng+selenium集成环境搭建
一.前序工作 下载ant:http://ant.apache.org/bindownload.cgi 下载jenkins:http://jenkins-ci.org/ 下载testng:http:// ...
- 06-图2 Saving James Bond - Easy Version
题目来源:http://pta.patest.cn/pta/test/18/exam/4/question/625 This time let us consider the situation in ...