XML的schema约束
* XML的schema约束
* schema和DTD的对比(面试题):
* DTD约束只能引进一个文件,schema可以引进多个。
* schema符合XML的语法结构。
* 可以解析schema文档。
* schema对名称空间支持的好。(名称空间可以理解为java中的包结构java.utli.sql之类的)
* schem支持更多的数据类型,自定义的数据类型。
* 预先定义元素和属性
* schema的后缀名是.xsd
* 只能有一个根节点,根节点名称就是schema。
* schema约束的开发步骤
1、 开发schema的约束文档
* 首先引入W3C的名称空间(固定的值),然后可以使用其提供的标签了。
* 在根节点上,使用属性xmlns(xml namespace:XML名称空间)
* xmlns="http://www.w3.org/2001/XMLSchema"
* 定义元素
* <element name="书架"></element>
* 判断是否是复杂还是简单的元素
* 如果是简单元素,则 在element处有属性type="数据的类型"
* 如果是复杂
* 声明标签是复杂的元素 <complexType></complexType>
* 子元素之间的关系 <sequence></sequence>
* 起名:targetNamespace 目标名称空间
* 值是任意的切不能重复:http://www.itcast.cn/1110
* elementFormDefault : 代表(xx.xml文档中)元素书写的格式
* qualified(使用) :质量好的
* unqualified :质量不好的
2、在XML文档中引入自己编写的schema文档
* 引入W3C名称空间,告知我是实例文档。
* xmlns="http://www.w3.org/2001/XMLSchema-instance"
* 引入自己编写的schema的文档
* xmlns="http://www.itcast.cn/1110"
* 问题:元素上不能有相同的属性名称
* 解决:起别名-- :aa
* 技巧:在出概率小的标签上起别名
* 引入自己编写的schema文档的地址
* schemaLocation属性是W3C提供的,如果W3C名称空间要是有别名,先把别名写上。
*引进自己写的sehema文档地址: 别名:schemaLocation=
即:xsi;schemaLocation=”{namespace} {location} -->
xsi:schemaLocation="名称空间 + schema文件的地址"
* 名称空间的概念
* 编写完schema文档,起唯一的名称空间。
* 在编写XML文档,通过xmlns来引入名称空间。
schema约束文件book.xsd
<?xml version="1.0" encoding="UTF-8"?> <!-- * 引入W3C的名称 * 在根节点上,使用属性xmlns(xml namespace) * xmlns="http://www.w3.org/2001/XMLSchema" * 定义元素 * <element name="书架"></element> * 判断是否是复杂还是简单的元素 * 如果是简单 在element有属性 type="数据的类型" * 如果是复杂 * 声明标签是复杂的元素 <complexType> * 子元素之间的关系 <sequence> * 起名:targetNamespace 目标名称空间(起名) * 值是任意的:http://www.itcast.cn/1110 * elementFormDefault : * qualified(使用) :质量好的 * unqualified :质量不好的 * 编写属性 * <attribute name="出版社" type="string" use="required" ></attribute> * name 属性名称 * type 属性类型 * user 属性约束 --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn/1110" elementFormDefault="qualified"> <!-- 复杂元素 --> <element name="书架"> <!-- 复杂元素 --> <complexType> <!-- 有顺序的 --> <sequence maxOccurs="unbounded"> <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> <!-- 书的属性 --> <attribute name="出版社" type="string" use="required" ></attribute> </complexType> </element> </sequence> </complexType> </element> </schema>
配置文件book.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- * 引入W3C名称空间,我是实例文档。 * xmlns="http://www.w3.org/2001/XMLSchema-instance" * 引入自己编写的schema的文档 * xmlns="http://www.itcast.cn/1110" * 问题:元素上不能有相同的属性名称 * 解决:起别名 :aa * 技巧:在下面出现标签的概率小起别名 * 引入自己编写的schema文档的地址 * schemaLocation属性是W3C提供的,如果W3C名称空间要是有别名的话,先把别名写上。 xsi:schemaLocation="名称空间 schema文件的地址" --> <书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itcast.cn/1110" xsi:schemaLocation="http://www.itcast.cn/1110 book.xsd" > <书 出版社="清华出版社"> <书名>javaweb开发大全</书名> <作者>班长</作者> <售价>99.8</售价> <简介>这是不错啊</简介> </书> <书 出版社="清华出版社"> <书名>javaweb开发大全</书名> <作者>班长</作者> <售价>99.8</售价> <简介>这是不错啊</简介> </书> <书 出版社="清华出版社"> <书名>javaweb开发大全</书名> <作者>班长</作者> <售价>99.8</售价> <简介>这是不错啊</简介> </书> </书架>