schema
通过schema来解决DTD的不足,dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型,比如 年龄只能是整数,在schema可以直接定义一个整数类型,schema语法更加复杂,schema目前不能替代dtd
schema快速入门
1)创建一个schema文件,后缀名为”.xsd”,特别注意的一点是,在myelipse的new - >other 搜索不到.xsd,其实xsd也是一个xml文件,故搜索xml既可以。看图
//分析里面的属性
//表示当前xml文件是一个约束文件,这是一个w3c提供的一个严格限制xml的约束文件,一般固定不变
xmlns="http://www.w3.org/2001/XMLSchema"
// 使用schema约束文件,直接通过这个地址引入约束文件,外部的xml使用该约束文件是通过该命名空间,可以随便你写,但是习惯写一个URL地址
targetNamespace="http://xiaozheng/20161213"
//质量良好的
elementFormDefault="qualified"
//可以不写的,:tns值得是别名,取别名为tns
xmlns:tns="http://www.example.org/2"
2)看简单元素和复杂元素,法则:有多少个元素就有多少个< element>
//简单元素:是要写在复杂元素里面的额
<element name="name" type="string"></element>
//复杂元素
<element name="person" type="string">
<complexType>
<sequnce>
//简单元素
<element name="name" type="string"></element>
</sequnce>
</conplexType>
</element>
//上代码
1.xsd
<?xml version="1.0" encoding="UTF-8"?> //声明文档类型
<schema xmlns="http://www.w3.org/2001/XMLSchema" //引入约束文件
targetNamespace="http://xiaozheng/20161213" //约束的命名空间
elementFormDefault="qualified"> //质量良好的
<element name="person"> //有一个复杂元素,名字为person
<complexType> //固定写法,没什么可以说的
<sequence> //固定写法,没什么可以说的
<element name="name" type="string"></element> //有一个简单的元素,name,约束为string类型
<element name="age" type="int"></element>//有一个简单元素,age,约束为int类型
</sequence>
</complexType>
</element>
</schema>
3)在被约束的文件xml中引入该 约束的文件xsd
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xiaozheng/20161213"
xsi:schemaLocation="http://xiaozheng/20151111 1.xsd">
//表示这个xml是一个被约束的文件,特别注意这里的xmlns与约束文件不一样,差后面的instance部分
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
//是约束文档里面 targetNamespace
xmlns="http://xiaozheng/20161213"
//targetNamespace 空格 约束文档的地址路径,指明路径
xsi:schemaLocation="http://xiaozheng/20161213.xsd"
【注意:】
如果说,引入之后,在写person的时候,没有任何的效果的话,可能就是你的xsd文件有错误,或者是引入的时候写错代码了,才会导致没有提示的
schema属性讲解
<sequence>:表示元素的出现的顺序
<all>: 元素只能出现一次
<choice>:元素只能出现其中的一个
maxOccurs="unbounded": 表示元素的出现的次数
<any></any>:表示任意元素
//上代码
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xiaozheng/20151111"
elementFormDefault="qualified">
<element name="person">
<complexType>
<sequence> //这个值是可以修改的额,all,choice,之类的额
<!-- <all> -->
<!-- <choice> -->
<!-- <any> -->
<element name="name" type="string" maxOccurs="unbounded"></element>
<element name="age" type="int"></element>
<!-- </choice> -->
<!-- </all> -->
<!-- </any> -->
</sequence>
</complexType>
</element>
</schema>
schema 的约束属性
//写在复杂元素里面,也就是</complexType>之前
<attribute name="id1" type="int" use="required"></attribute>
name: 属性名称
属性类型 int stirng
use:属性是否必须出现 required
<element name="person">
<complexType>
<sequence>
<element name="age" type="int"></element>
</sequence>
<attribute name="id1" type="int" use="required"></attribute>
</complexType>
</element>
扩展:如果引入复杂的xsd文件,起别名呗
<company xmlns = "http://www.example.org/company"
xmlns:dept="http://www.example.org/department"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd"
看个小小案例