一、什么是Schema。
1.XML Schema是以XML语言为基础的,它用于可替代DTD。
2.一份XML Schema文件描述了XML文档的结构。
2.1 定义了可以出现在文档里的元素 。
2.2 定义了可以出现在文档里的属性。
2.3 定义了哪些元素是子元素 。
2.4 定义了子元素的顺序。
2.5 定义了子元素的数量。
2.6 定义了一个元素应是否能包含文本,或应该是空的。
2.7 定义了元素和属性的数据类型。
2.8 定义了元素和属性的默认值和固定值。
3.XML Schema语言也被称为XML Schema Definition (XSD) (Schema定义)。
二、如何使用XML Schema。
1.XML Schema的最好用的地方之一就是它支持数据类型
支持数据类型所带来的好处:
1.1 更易于描述被允许的文档内容。
1.2 更易于检验数据的正确性。
1.3 更易于与数据库中的数据一起协同工作。
1.4 更易于定义数据的使用面(关于数据的限制)。
1.5 更易于定义数据样式(数据格式)。
1.6 更易于把数据转换成不同的数据类型。
2. XML Schema另一个好处就是他们是用XML编写成的。
用XML编写的好处是:
2.1 可以不需要在学一种新语言。
2.2 可以用XML编辑器来编辑Schema文件。
2.3 可以用XML解析器解析Schema文件。
2.4 可以用XML DOM处理Schema。
2.5 可以用XST转换Schema。
3.XML Schema是文件时由XML编写的,所以他们是可扩展的。
Schema可扩展意味着你可以:
3.1 在别的Schema文件里再次用到你的Schema。
3.2 从标准的数据类型中派生出你自己的数据类型。
3.3 在相同的文档中参考多种Schema。
4.规范的XML文档是符合XML语法规则的文档。
4.1 开头必须有XML声明。
4.2 必须有一个独特的根目录元素。
4.3 开始标签(start-tag)必须和结束标签(end-tag)匹配。
4.4 元素是有大小写区分的。
4.5 元素必须有结束。
4.6 所有的元素必须被合理嵌套。
4.7 所有属性值必须在引号里面。
4.8 用特殊字符时必须用到实体。
三、如何制定 XSD。
列如: <?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
四、什么是简单元素?
4.1 简单元素是只含有文本的XML元素,它不可以含有其他元件或属性
但是,“只含文本” 这个限定条件是非常容易引起误解的,文本
可以有很多的不同类型,它可以是XML Schema定义里的文本类型之一
(逻辑值,字符串,日期,等等),也可以是自定义文本类型。
4.2 一个简单的简明元素定义。
例如: <xs: element name="xxx" type="yyy"/>
name 是指元素名称, type 是指元素的数据类型。
常见的数据类型:xs:string,xs:decimal,xs:integer,xs:boolean,xs:date,xs:time
例如1: XML元素
<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>
下面是相应的简单元素定义
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>
4.3简单元素的默认值和固定值。
默认值:值没有被指定时,属性自动会设置成默认值. default="xxx";
固定值:是自动分派给属性的. fixed="yyy"
4.4首先在我们要约束的元素中添加一个simpleType的标签
4.5然后在simpleType中添加一个restricetion标签,这个标签中有一个重要的属性:base,需要填入我们这个信息类型是基于哪一种类型的。
4.6在restricetion标签中,我们就可以加入我们对信息内容的一个具体的约束了:
4.6.1枚举约束 enumeration
4.6.2对大小值的限定 mininclusive 设定最小值,这种包含最小值的
minEnclusive 设定最小值,但是不包含最小值
maxinclusive 设定最大值,包含最大值
maxEnclusive 设定最大值,但是不包含最大值
4.6.3样式约束
[a-zA-Z]这一位字符,在a-z的大小写中任选一个填入
male|female这里需要多选一来填入信息内容
([a-z][0-9])+ 这里小写字母+一位数字的格式重复(可以1次可以多次)
五、什么是复合元素?
复合元素(Complex Elements)是含有其他元素和/或属性的XML元素。
有四种复合元素:
1. 空元素
2. 只含有其他元素的元素
3. 只含有文本的元素
4. 含有文本的其他元素的元素
5.1复合元素的约束:
5.1.1 首先我们在要约束的元素中添加一个complexType的标签。
5.1.2 然后我们要填入指示器(eq:sequence)。
5.1.3 添加子元素,子元素可以使复合元素也可以使简单元素。
5.2 属性定义
5.2.1 定义的格式:<xs:attribute name="xxx" type="yyy"/>
5.2.2 属性定义可以定义在complexType中
5.2.3 属性定义中use表示这个属性是否需要出现在元素中
optional:可出现可不出现
prohibited:不能出现
required:必须出现
5.2.4 如果要在简单元素中添加属性,还是需要complexType,只是我们需要在这个标签中使用simplecontent标签,其中使用extension标签,用来扩展我们的简单元素,添加属性。
5.3顺序指示器
5.3.1 1sequence:指定了子元素必须出现并且要按照定义的顺序依次出现。
5.3.2 all:指定了子元素可以以任意顺序出现,只出现一次。
5.3.3 choice:指定子元素中,仅可以出现一个(可以使用maxOccurs修改)。
5.4数量指示器
这种指示器不是以元素(标签)的形式出现,而是以子元素的属性的方式出现。 minOccurs 设置出现的最少次数;maxOccurs设置出现的最多次数