有的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">

可是去掉elementFormDefault="qualified"好象也没什么影响呀?

一个 XML schema 中 elementFormDefault="?" 这一属性用来指示 XML Schema 处理程序把这个 XML schema 中定义的元素或者类型放到哪个命名空间。

一个schema中声明的元素或者类型只能归到两个命名空间中的某一个去,这两个是,无名命名空间和由targetSchema属性指明的目标命名空间。而targetSchema属性只能在xs:schema的定义中声明,因而,一个schema中的定义的元素或类型只可能归属于一个有名命名空间(但是还有可能归属于无名命名空间)。

当elementFormDefault="qualified" 时,所有全局元素的子元素将被以缺省方式放到目标命名空间,连同全局元素或者类型一起;

而当elementFormDefault="unqualified" 时,所有全局元素的子元素将被以缺省方式放到无名命名空间。而属性的命名空间类似地由attributeFormDefault="?"来指明。

需要明白的是,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"所起的作用的更多相关文章

  1. 对XSD schema文件中elementFormDefault属性的理解

    Schema中的elementFormDefault elementFormDefault取值:qualified 或者 unqualified 在http://www.velocityreviews ...

  2. BizTalk开发系列(十五) Schema设计之Qualified 与Unqualified

    XML Schema中的命名空间前缀限定包括对元素(Element)或属性(Attribute)的限定,即常见的如 “<ns0:root>...</ns0:root>”之类的格 ...

  3. schema中属性声明

    <attribute name="属性名"   default="默认值"  fixed="固定值" use="option ...

  4. SChema中group指示器的使用

    <?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSpy v2011 (h ...

  5. bootstrap中table的colspan不起作用

    bootstrap中table的colspan不起作用,即在不指定宽度的条件下,各个td宽度不符合colspan指定的宽度. 添加table0layout:fixed后显示正常. table{ tab ...

  6. jquery 中的 return false 不起作用

    jquery  中的 return false 不起作用 $(".lcId").each(function(e) { if ($(this).attr("checked& ...

  7. GCD中的dispatch_apply的用法及作用

    GCD中的dispatch_apply的用法及作用 (一)dispatch_apply的基本用法 dispatch_apply函数是dispatch_sync函数和Dispatch Group的关联A ...

  8. spring中的BeanFactory与ApplicationContext的作用和区别?

    BeanFactory类关系继承图 1. BeanFactory类结构体系: BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂, ...

  9. Nhibernate中 Many-To-One 中lazy="proxy" 延迟不起作用的原因

    2010-07-15 12:10 by 彭白洋, 322 阅读, 0 评论, 收藏, 编辑 NHibernate中 Many-To-One 中lazy="proxy" 延迟不起作用 ...

随机推荐

  1. Python3NumPy——ndarray对象

    Python3NumPy——ndarray对象 1.前沿 推荐导入语法:import numpy as np NumPy中使用ndarray对象表示数组,ndarray是NumPy库的核心对象 2.创 ...

  2. 潭州课堂25班:Ph201805201 第十二课 new方法,定制属性访问,描述符与装饰器 (课堂笔记)

    1,new方法: 类每次实例化时都会创建一个新的对象, class Textcls: # cls 是指类本身, def __new__(cls, *args, **kwargs): # 在 __ini ...

  3. c/c++中int main(int argc,char *argv[])的具体含义

    int main(int argc,char * argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[ ] or: char argv[ ][ ...

  4. Convert a VMDK (VMWare) file to VHDX (Hyper-V)

    https://www.meziantou.net/2016/09/09/convert-a-vmdk-vmware-file-to-vhdx-hyper-v Microsoft provides a ...

  5. ParallaxNode视差节点实现远景近景的不同层次移动

    Cocos2d-x有ParallaxNode视差节点,视察顾名思义,就是造成不同的移动速率的效果. 我想大家都玩过刀塔传奇,他的背景有远景和近景之分,而且你滑动屏幕的时候远景和近景是按照不同的速率移动 ...

  6. linux <<eof

    在平时的运维工作中,我们经常会碰到这样一个场景:执行脚本的时候,需要往一个文件里自动输入N行内容.如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢 ...

  7. 读写锁--DEMO

    package com.demo.read.write.lock; import java.util.HashMap; import java.util.Map; import java.util.c ...

  8. C# 获取文件名及扩展名【转】

    https://www.cnblogs.com/libushuang/p/5794976.html C# 获取文件名及扩展名 string aFirstName = aFile.Substring(a ...

  9. 读懂isi get的结果

    你想知道的一切,在这里: Isi Get & Set https://community.emc.com/community/products/isilon/blog/2018/02/21/i ...

  10. DbContext SQLite配置文件

    <?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...