通过schema来解决DTD的不足,dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型,比如 年龄只能是整数,在schema可以直接定义一个整数类型,schema语法更加复杂,schema目前还不能替换dtd。
schema快速入门:
1、创建一个schema文件,后缀名为”.xsd”,特别注意的一点是,在myelipse的new - >other 搜索不到.xsd,其实xsd也是一个xml文件,故搜索xml既可以。
<?xml version="1.0" encoding="UTF-8"?> <!-- 在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间(targetNamespace)用一个唯一的URI表示 --> <!-- 表示当前xml文件是一个约束文件,这是一个w3c提供的一个严格限制xml的约束文件, 一般固定不变xmlns="http://www.w3.org/2001/XMLSchema" --> <!-- 使用schema约束文件,直接通过这个地址引入约束文件,外部的xml使用该约束文件是通过该命名空间, 可以随便你写,但是习惯写一个URL地址 targetNamespace="http://www.atguigu.cn" --> <!-- 质量良好的 elementFormDefault="qualified" --> <!-- 可以不写的,:tns值得是别名,取别名为tns.xmlns:tns="http://www.atguigu.cn" --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.atguigu.cn" 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="string"></element> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
2)看简单元素和复杂元素,法则:有多少个元素就有多少个< element>
<!-- 复杂元素 --> <element name="书架"> <complexType> <sequence maxOccurs="unbounded"> <element name="书"> <complexType> <sequence> <!-- 简单元素 --> <element name="书名" type="string"></element> <element name="作者" type="string"></element> <element name="价格" type="string"></element> </sequence> </complexType> </element> </sequence> </complexType> </element>
3)在被约束的文件xml中引入该 约束的文件xsd
<?xml version="1.0" encoding="UTF-8"?> <!-- 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。 --> <!-- schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。 --> <!-- 注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。 --> <!-- 表示这个xml是一个被约束的文件,特别注意这里的xmlns与约束文件不一样,差后面的instance部分 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance --> <书架 xmlns="http://www.atguigu.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.atguigu.cn book.xsd"> <书> <书名>JavaScript</书名> <作者>劳动</作者> <价格>12.0元</价格> </书> </书架>