在我们上次的练习中,设计Schema所使用的方法是极其简单的。由于使用层层嵌套的的定义方法,当文档非常复杂时,由于嵌套层次过深,文档将不易阅读并且难以维护。同时这种方法和过去DTD的设计结构有非常大的差异,这使得人或者机器想把DTD转换成XML Schema时会有困难。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)因此,这里我们介绍另外一种非层次的设计方法,以上一章文档为例,我们首先定义文档中最基本的元素,然后在复杂元素中引用我们已经定义的基本元素的,这样使得我们的设计非常的简洁易懂。
?xml version="1.0" encoding="utf-8"?
xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
!-- definition of simple type elements --
xsd:element name="title" type="xsd:string"/
xsd:element name="author" type="xsd:string"/
xsd:element name="name" type="xsd:string"/
xsd:element name="friend-of" type="xsd:string"/
xsd:element name="since" type="xsd:date"/
xsd:element name="qualification" type="xsd:string"/
!-- definition of attributes --
xsd:attribute name="isbn" type="xsd:string"/
!-- definition of complex type elements --
xsd:element name="character"
xsd:complexType
xsd:sequence
!-- the simple type elements are referenced using the "ref" attribute --
xsd:element ref="name"/
!-- the definition of the cardinality is done when the elements are referenced --
xsd:element ref="friend-of" minOccurs="0" maxOccurs="unbounded"/
xsd:element ref="since"/
xsd:element ref="qualification"/
/xsd:sequence
/xsd:complexType
/xsd:element
xsd:element name="book"
xsd:complexType
xsd:sequence
xsd:element ref="title"/
xsd:element ref="author"/
xsd:element ref="character" minOccurs="0" maxOccurs="unbounded"/
/xsd:sequence
xsd:attribute ref="isbn"/
/xsd:complexType
/xsd:element
/xsd:schema