一脚踩进java之xml04——约束之schema
一、XML Schema 简介
1.1 XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性
1.2 XML Schema VS DTD:
1)XML Schema符合XML语法结构。
2)DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
3)ML Schema对名称空间支持得非常好。
4)XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
5)XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
6)XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。
1.3 XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。 XML Schema规定XML文档实例的结构和每个元素/属性的数据类型
1.4 Schema相对于DTD的明显好处是,XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法
二、Schema一些概念
2.1 XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd
2.2 和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema
2.3 应用schema约束 开发xml 过程
2.4 编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,这个URI地址叫namespace名称空间,以后XML文件就可以通过这个URI(即名称空间)引用绑定指定名称空间的元素
三、Schema入门案例
3.1 book.xsd文件
<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn" elementFormDefault="qualified"> <xs:element name='书架' > <xs:complexType> <xs:sequence maxOccurs='unbounded' > <xs:element name='书' > <xs:complexType> <xs:sequence> <xs:element name='书名' type='xs:string' /> <xs:element name='作者' type='xs:string' /> <xs:element name='售价' type='xs:string' /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
3.2 book.xml
<?xml version="1.0" encoding="UTF-8"?> <itcast:书架 xmlns:itcast="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://www.itcast.cn book.xsd"> <itcast:书> <itcast:书名>九阴真经</itcast:书名> <itcast:作者>郭靖</itcast:作者> <itcast:售价>28.00元</itcast:售价> </itcast:书> </itcast:书架>
3.3 在XML Schema文档中声明名称空间
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www. itcast.cn" elementFormDefault="qualified" attributeFormDefault="qualified" > <xs:schema>
1)targetNamespace元素用于指定schema文档中声明的元素属于哪个名称空间。
2)elementFormDefault元素用于指定局部元素是否受到该schema指定targetNamespace所指定的名称空间限定
3)attributeFormDefault元素用于指定局部属性是否受到该schema指定targetNamespace所指定的名称空间限定
3.4 使用名称空间引入Schema
1)为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:
<itcast:书架 xmlns:itcast="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://www.itcast.cn book.xsd">
2)schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。
3)注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。
3.5 使用默认名称空间
1)基本格式:
xmlns="URI"
2)举例:
<书架 xmlns=" http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=“http://www.itcast.cn book.xsd"> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> <书架>
3.6 使用名称空间引入多个XML Schema文档
文件清单:xmlbook.xml
<?xml version="1.0" encoding="UTF-8"?> <书架 xmlns="http://www.it315.org/xmlbook/schema" xmlns:demo="http://www.it315.org/demo/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.it315.org/xmlbook/schema http://www.it315.org/xml/book.xsd http://www.it315.org/demo/schema http://www.it315.org/demo.xsd"> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价 demo:币种=”人民币”>28.00元</售价> </书> </书架>
3.7 Schema元素:简单类型和复杂类型
1)XML Schema规范中将元素分为两种类型
①简单类型元素:简单类型元素只能包含字符内容。这些字符可以被约束为特殊的预定义类型或派生类型。例如,可以指定一个简单元素的内容必须是日期、整数、字符串或者仅仅是一个字符或者一系列字符。type属性
②复杂类型元素:复杂类型元素是包含子元素内容或者属性的元素
<complexType> <sequence> 子元素
四、参看w3c文档