一、什么事Schema(XSD)

  XML Schema是微软定义的一套用来验证XML技术。是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。

  DTD的局限性:

  1、DTD不遵循XML语法。

  2、DTD的数据类型有限,与数据库类型不一致。

  3、DTD不可以扩展。

  4、DTD是不支持命名空间的。

  Schema的优势:

  1、Schema是一种XML语法结构,编写更加方便。

  2、Schema可以支持数据类型。

  3、Schema是可以扩展的。

  4、Schema支持命名空间。

二、Schema文档结构

  Schema文档本身是一个XML文档,所以必须满足XML文档结构。在每个Schema文档中必须包含一个根元素<xs:schema>。  

<?xml version="1.0"?>
<!--每个Schema中都必须包含xs:schema根节点,然后在根节点中定义内容!-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
定义内容
</xs:schema>

  说明:

  xmlns:xs="http://www.w3.org/2001/XMLSchema":显 示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:

  targetNamespace="http://mynamespace/myschema" :显示被此 schema 定义的元素验证的XML来自的命名空间。

  xmlns="http://www.w3school.com.cn" :指定默认的命名空间是 。

  elementFormDefault="qualified" :指目标XML是否遵循本Schema,qualified表示遵循,unqualified表示不遵循。

  

三、在XML中引用Schema文档  

<?xml version="1.0"?>
<!--引用Schema文档-->
<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

  说明:

  xmlns="http://www.w3school.com.cn" :规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。

  xsi:schemaLocation="http://www.w3school.com.cn note.xsd":指定文件路径。

四、Schema数据类型:

  Schema中支持丰富的数据类型,可以简单分为简单类型和复合类型。

  1、简单类型包括:

    1)内置的数据类型。

      a、基本的数据类型

基本的数据类型
数据类型 描述
string 字符串
boolean  布尔类型 
decimal  特定精度的数字 
float  单精度浮点数 
double  双精度浮点数 
duration  表示持续时间/日期格式 
dateTime  完整日期格式
time 代表时分秒 
date  代表日期 

      b、扩展的数据类型     

扩展的数据类型
数据类型 描述
ID 用于唯一表示元素
IDREF 应用ID元素的属性或属性
ENTITY
实体类型
long
表示长整型:-9223372036854775808~9223372036854775807
int 表示整型:-2147483648~--2147483647
short 表示短整型:-32768~32767
byte
整型:-128~127

    2)用户自定义的简单类型(通过simpleType定义)

  2、复合类型(通过complexType定义)

  

五、Schema中的元素类型

  1、根元素:schema。

  包含已经定义的schema。

  属性:

  xmlns:schema的命名空间。

  targetNamespace:要验证的XML文件的命名空间。

  elementFormDefault:要验证的XML是否遵循当前的验证命名空间。

  2、用于定义元素和属性的元素:element、attribute、group、attributeGroup。

  1)element:声明一个元素

  属性:

  name:需要限定XML文档元素的名称。

  type:需要限定XML文档元素的类型。

  ref:引用外部定义的元素

  minOccurs:元素最小出现的次数。

  maxOccurs:元素最大出现的次数。

  例:声明student节点,类型为string类型,最小出现1次,最多出现3次。

  <xs:element name="student" type="xs:string" minOccurs="1" maxOccurs="unbounded" />

 

  2)group:声明一个分组

  将多个元素声明放到一个分组中,然后在其他元素中通过group引用。

  属性:name分组的名称

  例:将name和age定义为一个分组,然后在student中引用这个分组。

<!--外部定义一个标记-->
<xs:element name="student">
<xs:complexType>
<!--引用分组标记-->
<xs:group ref="stuinfo" maxOccurs="unbounded"></xs:group>
</xs:complexType>
</xs:element> <!--定义一个分组标记-->
<xs:group name="stuinfo">
<xs:sequence>
<!--自定义的子元素:name和age,name类型为string,age类型为byte,只能出现1次-->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="age" type="xs:byte"></xs:element>
</xs:sequence>
</xs:group>

  3)attribute元素:

  用于声明一个属性:

  属性:

  name:属性名称

  type:属性类型

  user:是否必选,required必选,optional可选,默认可选

  default:默认值

  fixed:固定值

  注意:默认值和固定值不能同时出现。

  示例:属性的用法

  Schema文档: 

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element name="student" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="age" type="xs:byte" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

  XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd">
<student name="zhangsan" age="29"/>
<student name="lisi" age="19"/>
</students>

  4)attributeGroup属性组

  和前面的元素组类型,在外部定义属性组,然后在元素中引用属性组。

  示例:

  Schema文档:

<!--定义属性组:stuattgroup-->
<xs:attributeGroup name="stuattgroup">
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="age" type="xs:byte"/>
</xs:attributeGroup> <!--引用属性组-->
<xs:element name="student" maxOccurs="unbounded">
<xs:complexType>
<xs:attributeGroup ref="stuattgroup"></xs:attributeGroup>
</xs:complexType>
</xs:element>

  

  3、用于定义简单类型:simpleType。

  它决定了元素和属性值得约束和相关信息。

  属性:name

  常用的两种方式:

  1)restriction:约束

  对现有类型进行扩充

  示例:设置年龄必须在18-100之间

<xs:attributeGroup name="stuattgroup">
<xs:attribute name="name" type="xs:string"/>
<!--将原来的xs:int换位age类型-->
<xs:attribute name="age" type="age"/>
</xs:attributeGroup>
<!--扩展int类型,设置int取值只能是18到100,包含18和100-->
<xs:simpleType name="age">
<xs:restriction base="xs:int">
<xs:minInclusive value="18" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>

  2)list:列表

  从一个特定的数据类型的集合中选择定义一个简单类型元素。

  Schema文档:

<!--Schema文档-->
<!--定义列表数据,其每项子元素为自定义扩展类型-->
<xs:simpleType name="stuScore">
<xs:list itemType="stuScoreItem"></xs:list>
</xs:simpleType>
<!--定义扩展类型限定0-100之间-->
<xs:simpleType name="stuScoreItem">
<xs:restriction base="xs:int">
<xs:minInclusive value="0" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
<!--声明Scores节点,包含list格式数据-->
<xs:element name="scores" type="stuScore">
</xs:element> <!--XML文档中的数据-->
<scores xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="scores.xsd">
10 20 300
</scores>

  4、用于定义复杂类型:complexType。

  需要使用在节点下包含子节点的情况。

  Schema文档:  

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<!--通过ref来应用student标记 maxbounded表示不限定出现的次数-->
<xs:element ref="student" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element> <!--外部定义一个标记-->
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<!--自定义的子元素:name和age,name类型为string,age类型为byte,只能出现1次-->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="age" type="xs:byte"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

  XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd">
<student>
<name>张三</name>
<age>20</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</students>

  

  5、用于进行约束:choice、list、sequence、restriction。

  1)choice

  把一组属性声明组合到一起,一边被复合类型所应用,XML中只能出现限定选项中的一个元素。

  例:

  Schema文档:

<!--设定交通工具只能是自行车,小汽车,摩托车中的一项-->
<xs:element name="交通工具">
<xs:complexType>
<xs:choice>
<xs:element name="自行车" type="xs:string"></xs:element>
<xs:element name="小汽车" type="xs:string"></xs:element>
<xs:element name="摩托车" type="xs:string"></xs:element>
</xs:choice>
</xs:complexType>
</xs:element>

  XML文档:

<交通工具 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vehicle.xsd">
<自行车></自行车>
<!--
<小汽车></小汽车>
<摩托车></摩托车>
包含任意一个,包含多个会报错!
-->
</交通工具>

  

  2)sequence

  表示元素必须按照规定的序列进行显示。

XML Schema验证的更多相关文章

  1. XML&DTD&XML Schema学习

    XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...

  2. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  3. [讨论] Window XP 安装msxml6后,load xml时提示schema验证失败

    现象:在windows XP x64下,使用用户安装的msxml6库加载xml文件时失败. 进一步说明: 该xml文档使用了W3C的名称空间 xmlns:xsi= "http://www.w ...

  4. 单点登录(十一)-----遇到问题-----cas启用mongodb验证方式报错--Unable to locate Spring NamespaceHandler for XML schema na

    cas启用mongodb验证方式报错--Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.sp ...

  5. 28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html XML Schema 语言也称作 XML Schema 定义(XML S ...

  6. Eclipse关闭XML文件验证的方法

    XML的编写是否符合规范,可以通过XML Schema或DTD进行验证,但有时候电脑本来就很卡,而且XML的某些错误并未导致程序无法运行的情况下,暂时关闭XML的验证也算不错的选择. 如web.xml ...

  7. C#与XML Schema的问题

    http://bbs.csdn.net/topics/50493564 weileily: 用XmlSchema.Read方法读取了一个xsd文件,请问如何遍历检索器中的ComplexType与Sim ...

  8. XML Schema的基本语法(转)

    XML Schema的基本语法(转) XSDL(XML Schema定义语言)由元素.属性.命名空间和XML文档种的其他节点构成的. 一.XSD中的元素 XSD文档至少要包含:schema根元素和XM ...

  9. XML的验证模式

    XML文件的验证模式保证了XML文件的正确性,而比较常用的验证模式有两种:DTD和XSD. DTD与XSD区别 DTD(Document Type Definition)即文档类型定义,是一种XML约 ...

随机推荐

  1. POJ2947Widget Factory(高斯消元解同模方程)

    http://poj.org/problem?id=2947 题目大意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下:p start enda1,a2......ap (1<=ai&l ...

  2. How Tomcat Works(十三)

    本文分析tomcat容器的安全管理,servlet技术支持通过配置部署描述器(web.xml文件)来对受限内容进行访问控制:servlet容器是通过一个名为验证器的阀来支持安全限制的,当servlet ...

  3. mahout算法源码分析之Itembased Collaborative Filtering(四)共生矩阵乘法

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 经过了SimilarityJob的计算共生矩阵后,就可以开始下面一个过程了,这个过程主要是共生矩阵的乘法 ...

  4. Gartner: Hype Cycle for Emerging Technologies-2012 (技术成熟度曲线) [转]

      英文稿: The “Hype Cycle for Emerging Technologies” report is the longest-running annual Hype Cycle, p ...

  5. c#实现word,winWordControl 文档不允许复制、粘贴、隐藏工具栏、快捷保存

    1.隐藏工具栏 //隐藏工具栏 ; i <= winWordControl1.document.CommandBars.Count; i++) { winWordControl1.documen ...

  6. Oracle主键自增的实现

    create sequence seq_字段名_表名 minvalue 1 maxvalue 999999999999999999999999999 start with 1 increment by ...

  7. Windows Server Backup 2008 R2 备份Hyper-V

    要备份 Hyper-V 虚拟机从父分区在 Windows Server 2008 上使用 Windows 服务器备份,您必须注册 Microsoft Hyper-V VSS 编写器 Windows 服 ...

  8. ITEXT学习手册

    本系列内容来自<iText in Action 2nd>,希望有时间的读者能够自己读一遍这本书 所有的文章相关的例子:IText.7z ITEXT基础 ITEXT学习手册——创建一个简单的 ...

  9. 我的javascript学习之路(一)对象之基础

    做了2个多月的ajax项目,对js的学习觉得了深入了不少,把自己的一些学习的经验贴出来,希望对初学者有所帮助,也希望大家能指出我的错误之处或者不当之处. javascript 是基于对象的语言,为什么 ...

  10. influxdb Measurements

    第一次看influxdb的代码实例时不明白influxdb Measurements是什么意思.经过研究总结一下. 1)measurement,相当于关系数据库中的table,包含tag,field, ...