Schema初学者进阶(2)

作者:不详 来源: 日期:2002-8-8
简化Schema的设计 


在我们上次的练习中,设计Schema所使用的方法是极其简单的。由于使用层层嵌套的的定义方法,当文档非常复杂时,由于嵌套层次过深,文档将不易阅读并且难以维护。同时这种方法和过去DTD的设计结构有非常大的差异,这使得人或者机器想把DTD转换成XML Schema时会有困难。 


因此,这里我们介绍另外一种非层次的设计方法,以上一章文档为例,我们首先定义文档中最基本的元素,然后在复杂元素中引用我们已经定义的基本元素的,这样使得我们的设计非常的简洁易懂。 


<?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>



引用的方法是非常有用的,就象是上面例子所示,我们可以先定义一些基本的元素和属性,然后在文档中的另一个位置通过引用机制进行复制。在下一章中我们将给大家展示我们如何定义"types",它使我们能够重用元素定义! 
相关文章