一.Schema的概述
Schema,即XML Schema,XSD (XML Schema Definition, 可扩展标记语言 )是W3C于2001年5月发布的推荐标准,指出如何形式描述XML文档的元素。XSD是许多XML Schema 语言中的一支。XSD是首先分离于XML本身的schema语言,故获取W3C的推荐地位。而其一个重要的特点就是:可拓展。而可拓展就是通过XML Schema实现的。Schema就是架构、结构的意思。所以,XML Schema就是描述XML结构的语言。
DTD存在的缺陷(Scherma的优势)
(I) DTD不是用XML语言编写的,需要不同的分析器技术。
(2) DITD不支持名称空间。
(3) DTD在支持继承和子类方面存在局限性。
(4) DTD没有数据类型的概念,无法对特定元素施加数据类型。
二.schema的基本使用
1.定义没有命名空间
下面这个例子是名为 “books.xsd” 的schema文件,没有指定命名空间。不指定命名空间,该schema所申明的所有元素会默认归于无命名空间
<?xml version='1.0' encoding='UTF-8'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="books">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="book" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
<xsd:element name="price" type="xsd:decimal"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
代码解释:
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
显示 schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema”。同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xsd,当然这个前缀可以自定义,xsd就是代表XML Schema Definition,所以很多框架会使用这个前缀。另外对于任何一个XML Schema架构文档(XSD)都有一个最顶层的schema 元素。而且该schema元素定义必须包含这个名称空间:http://www.w3.org/2001/XMLSchema。即此名称空间是由XML模式规范定义的标准名称空间-所有XML模式元素必须属于该名称空间。
2.引用没有名称空间
下面的xml文件会引入上面"books.xsd" 的schema约束,引入没有目标名称空间的模式文档需要用noNamespaceSchemaLocation属性指定文件位置,另外该模式文档的元素都是无命名空间的,所有使用不需要xmlns申明名称空间,直接使用:
<?xml version="1.0" encoding="UTF-8" ?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="books.xsd">
<book>
<name>java编程思想</name>
<price>11.22</price>
</book>
<book>
<name>head first设计模式</name>
<price>22.44</price>
</book>
</books>
代码解释:
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” 是任何XML实例文档固有的XML模式实例名称空间,它由XML模式规范定义。
三.XML Schema的数据类型
XML文档元素分为两大类:简单元素和复杂元素。
简单元素:只包含文本的元素,分为XML Schema内置的简单数据类型(44种),自定义的简单数据类型(simpleType)。
复杂元素:是指包含子元素和属性,或文本子元素的混合形式。用户自定义复杂数据类型,用关键字complexType。
XML Schema的数据类型分为:简单数据类型:内置数据类型(44种),自定义的简单数据类型(simpleType定义)。
四.简单元素的声明
定义简单元素可以通过<element>元素来完成。格式为:
<xsd:element name="元素名称" type="数据类型" />
在DTD中,定义元素的方式为:
<!ELEMENT 元素名称 (#PCDATA)>
1.Schema简单类型声明
XML Schema中,使用<xs: simpleType>元素定义符合用户需要的简单类型元素,为XML文档元素和属性值自定义简单数据类型的语法格式为:
<xs:simpleType >
<xs:restriction base=" xs:数据类型">
<xs:数据类型细节描述value=' value' />
……
</xs:restriction>
</xs: simpleType>
2.Schema复杂类型声明
顺序问题:Schema提供了all(任意顺序)、sequence(先后顺序)和choice(选择顺序)三种指示符来解决这个问题。
Schema中,<complexType>定义复杂类型元素,语法格式为:
< xsd:element name= "元素名称" type= "数据类型" / >
<xsd:complexType name= "数据类型">
<!--子元素描述部分-->
<xsd:sequence>
......
</xsd:sequence>
</xsd:complexType>
五、XML有效性的验证
格式良好的XML文档要遵守以下语法规则:
●XML文档必须有根元素
●XML文档必须有关闭标签
●XML标签对大小写敏感
●XML元素必须被正确的嵌套
●XML属性必须加引号
一个格式良好的XML文档,不一定是一个有效的XML文档,只有符合下面的要求时,一个格式良好的XML文档,才是一个有效的XML文档:
●必须遵守与之相关联的DTD中定义的规则;
●必须遵守与之相关联的XML Schema中定义的规则。
●XML文档的有效性验证方法有两种,一种是使用开发工具进行验证,另一种是编程进程验证。