XMLSchema验证
一、什么是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
表示元素必须按照规定的序列进行显示。
XMLSchema验证的更多相关文章
- sax解析xml,验证格式并支持自定义标签
一.sax简介 SAX是事件驱动型的XML解析方式.顺序读取XML文件,生成事件,传播到用户定义的回调方法中来处理XML文件. 优点: 分段处理xml,而不是将整个xml一次加载进内存,内存占用少,速 ...
- jquery.validate.js表单验证
一.用前必备官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassist ...
- XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...
- ANDROID调用webservice带soapheader验证
最近的一个项目中调用webservice接口,需要验证soapheader,现将解决方法记录如下:(网上资料出处太多,就不做引用,原作者如看到,如有必要添加请通知) 1.先看接口 POST /webs ...
- XmlSpy / XSD 以及 验证
很早以前看过一句话:“XML就象空气”,在企业应用开发中XML是一个重要的数据交换标准.而XSD则可以用来校验XML的数据格式是否正确. 一个典型的XSD文件如下: <?xml version= ...
- jQuery.Validate验证库详解
一.用前必备官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassist ...
- 使用架构(XSD)验证XML文件
假使说XML是一个数据库,那么XSD就是这个数据库的结构.由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,如果你将XML数据 ...
- android下身份验证方式调用webservice
在企业开发领域,webservice还是经常被用到的服务体系,因为他对安全事务支持都比较好. 有时候,我们就需要在android下调用后端的webservice服务,因为在内部网络环境下,所有需要ba ...
- XML Schema验证
XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模 ...
随机推荐
- C#中的foreach和yield
1. foreach C#编译器会把foreach语句转换为IEnumerable接口的方法和属性. foreach (Person p in persons) { Console.WriteLine ...
- input date 对 placeholder 的支持问题
正常情况下,text 的 input 会显示 placeholder 中的值,date 类型的 input 对其支持不好.实例代码如下: <input type="text" ...
- centos 6.5 设置屏幕保护
设置屏幕保护:System -> Preferences -> Screensaver.如果需要取消屏幕保护的锁定功能,将Lock screen when screensaver is a ...
- 如何通过http接口使用f12b实现批量提交链接
这里我们分别叙述了如何在浏览器直接使用此接口,以及通过java和python如何使用此接口. 一.以浏览器为例 (一)提交一个指令 serverURL=http://120.79.247.23/f12 ...
- centos 源码安装php5.5
系统环境: CentOS 6.5 / 7.0 x86_64 Fedora 20 x86_64下载 PHP 源码包 # wget http://cn2.php.net/distributions/php ...
- Efficient Vector Representation for Documents through Corruption-by Minmin Chen阅读
关键词: 词向量.文档向量.文档表示 地址:https://openreview.net/forum?id=B1Igu2ogg¬eId=B1Igu2ogg 首先,论文解决的是Word2V ...
- Elasticsearch6.0简介入门介绍
Elasticsearch简单介绍 Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库 ...
- Start and Use the Database Engine Tuning Advisor
https://docs.microsoft.com/en-us/sql/relational-databases/performance/start-and-use-the-database-eng ...
- 1.java实现——正规表达式判断
目标:这个代码仅局限于所展示的正规表达式判断,也就是这是一个较单一的正规表达式判断(简易版). 既然是简易版的,所以若要修改这个正规表达式也是非常容易的,只要将二维数组中的数组修改即可.数组数据依据, ...
- Linux嵌入式 -- Bootloader , Uboot
1. Bootloader作用 PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成.BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交 ...