1. schema约束:
1.1*schema和DTD的对比(面试题):
1.schema符合XML的语法结构。
2.可以解析schema文档。
3.schema对名称空间支持的好。
4.schem支持更多的数据类型,自定义的数据类型。
1.2* 预先定义元素和属性
1.3 * schema的后缀名是.xsd
1.4* 只能有一个根节点,名称是schema。
2.开发步骤
2.1开发schema的约束文档
1* 引入W3C的名称
* 在根节点上,使用属性xmlns(xml namespace)
* xmlns="http://www.w3.org/2001/XMLSchema"
2* 定义元素
* <element name="书架"></element>
3* 判断是否是复杂还是简单的元素
* 如果是简单 在element有属性 type="数据的类型"
* 如果是复杂
1.* 先声明标签是复杂的元素 <complexType>
2.* 子元素之间的关系 <sequence>
4* 起名:targetNamespace 目标名称空间(起名)
值是任意的:http://www.itcast.cn/1110
5* elementFormDefault :
* qualified(使用) :质量好的
* unqualified :质量不好的
2.2在XML文档中引入自己编写的schema文档
1.* 引入W3C名称空间,我是实例文档。
* xmlns="http://www.w3.org/2001/XMLSchema-instance"
2* 引入自己编写的schema的文档
* xmlns="http://www.itcast.cn/1110"
3.* 问题:元素上不能有相同的属性名称
1)* 解决:起别名 :aa
2)* 技巧:在下面出现标签的概率小起别名
4* 引入自己编写的schema文档的地址
* schemaLocation属性是W3C提供的, 如果W3C名称空间要是有别名的话,先把别名写上。
2.3 一个实例:
book.xsd
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn/1110" elementFormDefault="qualified"> <!-- 复杂元素 --> <element name="书架"> <complexType> <sequence> <element name="书"> <!-- 复杂的元素标志标签 --> <complexType> <!-- 有顺序的 --> <sequence> <!-- 简单元素 --> <element name="书名" type="string"></element> <element name="作者" type="string"></element> <element name="售价" type="double"></element> <element name="简介" type="string"></element> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>book.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itcast.cn/1110" xsi:schemaLocation="http://www.itcast.cn/1110 book.xsd"> <书> <书名>java-web开发大全</书名> <作者>班长</作者> <售价>99.8</售价> <简介>这是不错啊</简介> </书> </书架>
2.4总结:
3.名称空间的概念
* 编写完schema文档,起唯一的名称空间。
* 在编写XML文档,通过xmlns来引入名称空间。