- 浏览: 1591777 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
有的xsd文件的开头是这样写的:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.abc.com"
xmlns:ps="http://www.abc.com"
elementFormDefault="qualified">
一个schema中声明的元素或者类型只能归到两个命名空间中的某一个去,这两个是,无名命名空间和由targetSchema属性指明的目标命名空间。而targetSchema属性只能在xs:schema的定义中声明,因而,一个schema中的定义的元素或类型只可能归属于一个有名命名空间(但是还有可能归属于无名命名空间)。
需要明白的是,elementFormDefault="?" 是有作用域的,并且是被继承的,除非在子定义中覆盖父定义。
下面三个例子说明了elementFormDefault的使用效果。红色表示属于已命名空间的元素,蓝色表示属于未命名空间的元素。
1.定义了目标命名空间, 全局elementFormDefault=“unqualified”。这时除了全局元素或者类型将归于目标命名空间外,局部元素将归于无名命名空间。
unqualified.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="aaaa" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xs:element name="c">
<xs:complexType>
<xs:sequence>
<xs:element name="c1" type="xs:double"/>
<xs:element name="c2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
unqualified.xml
<?xml version="1.0" encoding="UTF-8"?>
<n:c xmlns:n="aaaa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="aaaa unqualified.xsd">
<c1> 3.141593E0</c1>
<c2> String</c2>
</n:c>
2. 定义了目标命名空间, 全局elementFormDefault=“qualified”。这时全局元素或者类型将归于目标命名空间,局部元素将以缺省方式归于目标命名空间。
qualified.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="aaaa" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="c">
<xs:complexType>
<xs:sequence>
<xs:element name="c1" type="xs:double"/>
<xs:element name="c2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
qualified.xml
<?xml version="1.0" encoding="UTF-8"?>
<c xmlns="aaaa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="aaaa qualified.xsd">
<c1> 3.141593E0</c1>
<c2> String</c2>
</c>
3. 定义了目标命名空间, 全局elementFormDefault=“unqualified”。这时全局元素(c)或者类型将归于目标命名空间。局部元素(c1,c2)以缺省方式归于无名命名空间。局部元素(c3)在局部定义中使用form=“qualified”覆盖全局设定的 unqualified,这使得c3归于目标命名空间(如果它有子元素,子元素将以缺省方式归于目标命名空间)。
qualified2.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="aaaa" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xs:element name="c">
<xs:complexType>
<xs:sequence>
<xs:element name="c1" type="xs:double"/>
<xs:element name="c2" type="xs:string"/>
<xs:element name="c3" type="xs:integer" form="qualified" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
qualified2.xml
<?xml version="1.0" encoding="UTF-8"?>
<n:c xmlns:n="aaaa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="aaaa qualified2.xsd">
<c1> 3.141593E0</c1>
<c2> String</c2>
<n:c3> 0</n:c3>
</n:c>
相信使用过这个属性的朋友大都会被这个属性搞得比较迷惑,使用过程中经常会莫名其妙的校验报错,对照文档解释,觉得没什么错啊,如果换一种写法或者设置又可以了,但是就是说不清为什么。
关于这个属性官方文档上的语焉不详,网上网友就这个属性讨论也是各有各的看法,莫衷一是。网上比较典型的一个讨论帖子是:请问Schema中elementFormDefault="qualified"是起什么作用呀?(http://www.xml.org.cn/dispbbs.asp?BoardID=23&id=25672&replyID=17053&star=1&skin=0)
以下是在做了许多试验,对照MSDN上的说法,参照网友的讨论得出的看法
先看MSDN中elementFormDefault 属性的解释:
在该架构的目标命名空间中声明的元素的形式。该值必须是下列字符串之一:qualified 或 unqualified。默认值为 unqualified。
如果该值是 unqualified,则无须通过命名空间前缀限定目标命名空间的元素。
如果该值是 qualified,则必须通过命名空间前缀限定目标命名空间的元素。
MSDN的描述不完整,完整的应该是:
如果该值是 unqualified,实例xml的根元素必须有命名空间的的限定,这个命名空间必须是schema中定义的targetNameSpace。但是其下子元素无须也不允许用命名空间前缀限定目标命名空间。 子元素的命名空间为空命名空间。
如果该值是 qualified,实例xml根元素及其下所有子元素都必须通过命名空间前缀限定目标命名空间。这个命名空间必须是schema中定义的targetNameSpace。
再看xml实例中根元素和子元素的命名空间的设置:
1. 通过prefix定义命名空间
在根元素的属性中使用 xmlns:xxx = url 的语法来定义一个名称空间的前缀xxx,然后在需要用这个名称空间限定的元素前面加上前缀和冒号,例如:
<?xml version="1.0" encoding="UTF-8"?>
<n:c xmlns:n="aaaa">
<n:c1>3.141593E0 </n:c1>
<n:c2>String</n:c2>
<c3>0</c3>
</n:c>
这个xml实例中定义了一个叫“aaaa”的前缀,在元素名称前面加了”n:”的元素都会拥有”aaaa”的命名空间,没有加前缀的元素(c3)将没有命名空间的限定,它的命名空间属性为””。
2. 通过默认命名空间定义全部元素的命名空间
根元素的单独的xmlns 属性定义一个xml实例的默认命名空间,其下的元素除了另外设置了前缀,都将被默认命名空间限定。例如:
<?xml version="1.0" encoding="UTF-8"?>
<c xmlns ="aaaa">
<c1>3.141593E0 </c1>
<c2>String</ c2>
<c3>0</c3>
</n:c>
这个xml实例中所有元素(c,c1,c2,c3)的命名空间都是“aaaa”
总结:
elementFormDefault 属性只是用来设置xml的实例中子元素是否一定需要有命名空间限定,不控制xml实例中各元素归属哪个命名空间。xml实例中元素的命名空间由xml实例本身的设置决定。
发表评论
-
WebService与RMI的区别及协作
2014-05-19 10:18 1630区别: RMI的客户端 ... -
session和cookie的区别,如何用session和cookie访问共享用户信息
2013-09-13 18:38 1862Cookie的机制 Cookie是浏览器(Use ... -
CXF+Spring+WSDL的Webservice实现(转)
2013-01-16 10:57 1946转自:http://www.blogjava.net/sxy ... -
CXF+Spring实现Webservice(简单例子-转)
2013-01-16 10:51 1294Apache CXF 是一个开放源代码框架,提供了用于方便地 ... -
XML的基本数据类型
2011-08-09 09:36 1650String、decimal、boolean、float、do ... -
理解类8583报文协议(转)
2011-07-18 17:52 3583我刚进入金融行业时, ... -
MQ使用指南(转载的)
2011-03-08 17:03 2770一.MQ基本操作 MQ中有几个很重要的组件:队列管 ... -
Rest与RPC比较
2010-11-10 09:15 8605基本概念 1. rest和rpc架 ... -
深入浅出REST
2010-11-09 14:33 1439【原文地址】:http://www ... -
理解Restful Web Service(二)
2010-11-09 12:58 1792对于restful web service,刚开始确实是个不太 ... -
理解Restful Web Service(一)
2010-11-09 12:56 2428摘 要:本文展示了Http ... -
Schema中的命名空间
2010-09-02 17:16 2254基本的XML Schema的使用就 ... -
Schema中import和include的区别
2010-09-02 16:42 2025http://davidwang.iteye.com/blog ...
相关推荐
当elementFormDefault属性被设置为qualified时,表示所有的局部元素(即在当前schema中定义的元素)都必须使用限定名(qualified name,简称QName),也就是前面要加上命名空间的前缀。这种方式的优势在于它可以避免...
在SQL Server 2005中,为了确保存储在数据库中的XML数据的完整性与一致性,可以使用XML Schema来对XML字段进行约束。本篇将详细解释如何创建支持XML Schema约束的表、定义XML Schema以及如何在SQL Server 2005中使用...
8. **Qualified Elements**: 在XSD中,`elementFormDefault="qualified"`意味着所有元素都应该有命名空间前缀,就像XML文档中的`my:students`, `my:student`, `my:name` 和 `my:age`。 9. **Data Types**: XSD支持...
- **骆驼式命名法**:在Schema中,大多数关键字采用了骆驼式命名法,即由一个或多个单词组成,第一个单词首字母小写,后续每个单词首字母大写。例如,`elementName`。 #### 数据类型 - **String**:最基本的文本...
XML Schema中命名空间的使用是非常重要的,命名空间可以使我们能够从不同的词汇表中区分定义以及声明。目标命名空间使我们能够区分在XML Schema语言词汇表中的元素声明和在一个其他的假定的化学语言词汇表中的元素...
XML_SCHEMA教程详解 XML Schema,简称XSD,是W3C...XML Schema是XML开发中的重要工具,对于保证XML数据的准确性和一致性有着不可或缺的作用。理解和掌握XML Schema,有助于开发者创建出更加健壮和可靠的XML应用程序。
elementFormDefault="qualified"> <xs:element name="note"> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> ...
7. **模式继承与约束**:通过使用`elementFormDefault`和`attributeFormDefault`,可以控制元素和属性是否默认为限定(qualified)状态,即是否需要携带命名空间前缀。 8. **组与模式片段**:可以创建元素或属性的...
elementFormDefault="qualified"> <xs:element name="note"> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> ...
elementFormDefault="qualified"> <xs:element name="myCustomTag" type="myCustomTagType"/> <xs:complexType name="myCustomTagType"> <xs:attribute name="attr1" type="xs:string" use="required"/> ...
在XML Schema中,`elementFormDefault`和`attributeFormDefault`属性用于控制元素和属性是否需要限定在目标命名空间内。当`elementFormDefault`为`unqualified`时,全局声明的元素不会自动包含在目标命名空间内,而...
elementFormDefault="qualified"> <xs:element name="school"> <xs:element name="grade"> <xs:element name="class"> <xs:element name="student"> <xs:element name="studentId" type="xs:...
elementFormDefault="qualified"> <xs:element name="myBean"> <xs:attribute name="customName" type="xs:string" use="required"/> <xs:attribute name="customProperty" type="xs:string"/> </xs:...
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> <s:element name="HelloWorld"> <s:element name="HelloWorldResponse"> <s:element minOccurs="0" maxOccurs="1" name=...
通过使用`elementFormDefault="qualified"`和`attributeFormDefault="unqualified"`,Schema指定了元素和属性的默认形式。这有助于确保XML数据的一致性和正确性,是现代XML应用中的重要组成部分。 ### 结论 通过对...
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:xmlns:25hoursaday-com:my-bookshelf" xmlns:bk="urn:xmlns:25hoursaday-com:my-bookshelf" elementFormDefault="qualified"> ...
@XmlSchema(namespace = "http://example.com/schema", elementFormDefault = XmlNsForm.QUALIFIED, namespacePrefixMapper = MyNamespacePrefixMapper.class) @XmlJavaTypeAdapters({...}) // 如果有类型适配器的话...
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.myblogs.org" elementFormDefault="qualified" targetNamespace="http://www.myblogs.org"> <!-- 元素定义 --> ... ... ...