先放下将要进行说明的例子:
data.xml
<?xml version="1.0"?>
<root xmlns="www.ljzforever.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="www.ljzforever.com xsd.xsd">
<emp>
<id>1</id>
<name>ljz1</name>
</emp>
<emp>
<id>2</id>
<name>ljz2</name>
</emp>
<emp>
<id>3</id>
<name>ljz3</name>
</emp>
<emp>
<id>4</id>
<name>ljz4</name>
</emp>
</root>
xsd.xsd
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="www.ljzforever.com"
elementFormDefault="qualified">
<element name="root">
<complexType>
<sequence>
<element name="emp" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="id" type="int" />
<element name="name" type="string" />
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
先讲schema
xmlns="http://www.w3.org/2001/XMLSchema"
其实还有另一种写法
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema
我在这里倫了个懒,把它作为了默认的命名空间,如果按照下面的一种写法,就需要在每个schema标签前都加上xs:
这是固定语法
targetNamespace="www.ljzforever.com"
表示在schema所定义的标签应作用于哪一个命名空间下。应用此schema的xml文件中如果有部分或全部标签想受此schema的控制,标签前必须使用此命名空间。
里面的www.ljzforever.com其实可以随便写,写abc都行
elementFormDefault="qualified"
有两个值:qualified和unqualified
首先要知道:运用了schema中声明的元素或者类型的Xml标签只能归到两个命名空间中的某一个去,这两个是,无名命名空间和由targetSchema属性指明的目标命名空间。
如果该值是 unqualified,实例xml的根元素必须有命名空间的的限定,这个命名空间必须是schema中定义的targetNameSpace。但是其下子元素无须也不允许用命名空间前缀限定目标命名空间。 子元素的命名空间为空命名空间。
如果该值是 qualified,实例xml根元素及其下所有子元素都必须通过命名空间前缀限定目标命名空间。这个命名空间必须是schema中定义的targetNameSpace。
说的很拗口啊,我来解释一下,这个属性与targetNameSpace相关
前面不是说了一个schema只对特定命名空间下的标签起作用,
如果是qualified,则使用此schema的xml的每个标签必须使用此命名空间,因为我在前面使用的默认的命名空间,所以不需要在每个标签的前面加上命名空间前缀
如果是unqualified,则是只能在根标签上使用此命名空间,且子标签不能使用此命名空间,使用别的命名空间是可以的。但是起不到验证作用。
我不太明白为什么要弄个起不到验证作用的unqualified参数,反正我用的一般都是qualified
下面再来谈谈xml文件的
xmlns="www.ljzforever.com"
里面的值必须和targetNameSpace内定义的一样,我是倫了个懒,写成了默认的命名空间,如果写成一般的,则需要在所有子标签前加上命名空间前缀
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
固定写法,没什么好说的
xsi:schemaLocation="www.ljzforever.com xsd.xsd">
固定写法,值由两部分组成,空格前面是与targetNameSpace内定义的一样,后面是xsd文件路径,因为我把它们放在了同一目录下,所以没有写很多路径
讲了这么多,其实你一定觉得这个命名空间很麻烦,其实xml也提供了无命名空间的解决方案:
data.xml
<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd.xsd">
<emp>
<id>1a</id>
<name>ljz1</name>
</emp>
</root>
xsd.xsd
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<element name="root">
<complexType>
<sequence>
<element name="emp" minOccurs="1" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="id" type="int" />
<element name="name" type="string" />
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
只不过把xsi:schemaLocation改成xsi:noNamespaceSchemaLocation,而后面直接跟文件路径,而不用写命名空间!
如果采取这种方式,xml文件中可以采用任意命名空间,或者不用,但是要注意保持一致:要用就用一样的,要么就都不用!
以下是我所参考的文章:
Schema中elementFormDefault="qualified"所起的作用
http://blog.csai.cn/user1/15907/archives/2007/16440.html
XSD schema文件中elementFormDefault 属性探讨
http://www.cnblogs.com/chnking/archive/2006/07/12/448849.html
XML Schema介绍之namespace
http://www.cnblogs.com/gzhnan/articles/1108442.html
还有w3school的
分享到:
相关推荐
一本关于XML Schema的打包教程,深入浅出,系统性强,并附有相应实例。
XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用...XML Schema 支持命名空间
shema基础 熟悉Schema的结构。 2、掌握Schema中的数据类型、命名空间、元素声明、属性声明。
假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后...
xml的命名空间.md
WCF返回xml格式数据时去除命名空间(比如xmlns="http://schemas.datacontract.org/2004/07/XmlRemoveNamespaceWcfService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance")
XML技术是近年来最热门的...主要内容包括:XML语法和格式良好的XML,XML命名空间,利用DTD和XML Schema进行XML验证,使用SOAP和Web服务,以及运用ADO.NET进行数据库访问等。本书还用两个案例分析来展示XML的具体应用。
XSDInferencer 的主要优点: 100% 符合 XML 和 XSD 规范,包括正确的命名空间处理。 高度可配置,因此生成的模式更适合用户需求。 模块化且易于扩展。 它不仅可以根据节点名称,还可以根据它们的上下文来推断简单和...
3.4 XML命名空间 3.5 开发工具XML Spy与XML实例 第四章 XML文档类型定义 第五章 XML Schema结构 第六章 层叠样式表 6.1 CSS简介 6.2 设置字体属性 6.3 设置色彩和背景图像属性 6.4 设置边界属性 ...
XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以 ... 命令介绍本节您将只用到Schema/WSDL视图
主要内容包括:XML语法和格式良好的XML,XML命名空间,利用DTD和XML Schema进行XML验证,使用SOAP和Web服务,以及运用ADO.NET进行数据库访问等。本书还用两个案例分析来展示XML的具体应用。 本书适合于有一定的...
书中的主题如下: *XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换 (Transformation) *SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 *DOM应用程序编程接口,...
本文实例讲述了Spring使用util:命名空间简化配置操作。分享给大家供大家参考,具体如下: 一 配置 <... xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:p=http://www.springframew
学会如何使用 DTD 和Schema验证XML 掌握命名空间的使用 学会使用XSLT 学会使用XML数据岛 了解 XML的体系结构及优势 理解格式良好且有效的 XML 文档 学会如何使用 DTD 生成 XML 文档 理解命名空间
书中的主题如下: XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层...
书中的主题为XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层和DOM ...
DTD不支持命名空间,解析器无法测试命名空间。 1、作用: 解决XML文档中命名冲突的问题,即将 XML文档与引用URI标识的名域相结合,来 限定其中的元素和属性名。 示例: <?xml version="1.0" encoding="UTF-8" ...
在.NET中使用XML <br>3.1 XML如何适合.NET 3.1.1 XML 3.1.2 文档对象模型(DOM) 3.1.3 命名空间 3.1.4 DTD和XML Schema 3.1.5 XPath 3.1.6 XSLT 3.2 .NET Framework使用XML 3.2.1 配置...
Schema声明语句,包含Schema命名空间的声明;声明一个元素名为Substation的用户自定义的复杂数据类型,并通过嵌入复杂数据类型的定义实现用户自定义的复杂数据类型;声明一个Transformer元素;各个独立子元素的声明。