XSD概要
XSD是什么
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)
就是一个xml的文档约束
XSD有什么用
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD
- 定义可出现在文档中的元素
- 定义可出现在文档中的属性
- 定义哪个元素是子元素
- 定义子元素的次序
- 定义子元素的数目
- 定义元素是否为空,或者是否可包含文本
- 定义元素和属性的数据类型
- 定义元素和属性的默认值以及固定值
XSD相对于DTD的优势
- 可针对未来的需求进行扩展
- 基于XML编写
- 支持命名空间
- 支持数据类型定义
- 更容易地描述允许的文档内容
- 更容易地验证数据的正确性
- 更容易地与来自数据库的数据一并工作
- 更容易地定义数据约束(data facets)
- 更容易地定义数据模型(或称数据格式)
- 更容易地在不同的数据类型间转换数据
XSD中元素及属性的定义
xsd文件的定义,包含一个根元素<schema></schema>
<?xml version="1.0"?>
<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://www.w3school.com.cn" 显示被此 schema 定义的元素,来自命名空间:"http://www.w3school.com.cn"。
xmlns="http://www.w3school.com.cn" 指出默认的命名空间是 "http://www.w3school.com.cn"
elementFormDefault="qualified"> 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
...
...
</xs:schema>
解析:
xmlns="http://www.w3school.com.cn"
规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间
一旦拥有了可用的xml schema命名空间:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:xsi:schemaLocation="http://www.w3school.com.cn note.xsd"
如何定义XSD文件
简单类型的元素
简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性
<xs:element name="xxx" type="yyy"/>
此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型
XSD常用的声明元素的类型
- xs:string
- xs:decimal
- xs:integer
- xs:boolean
- xs:date
- xs:time
例如:
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>
简易元素可拥有默认值和固定值
简易元素可拥有指定的默认值或固定值,当没有其他的值被规定时,默认值就会自动分配给元素。
<xs:element name="color" type="xs:string" default="red"/>
固定值同样会自动分配给元素,且无法分配其他值
<xs:element name="color" type="xs:string" fixed="red"/>
XSD属性
简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的
声明一个XSD属性:
<xs:attribute name="xxx" type="yyy"/>
在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。常用的就上面说的几种数据类型。