Schema初学者进阶(一)

2002-9-9 14:47:59【作者】 畅享网 【进入论坛】
广告

Schema初学者进阶(一)


 
我们的第一个Schema

让我们从这个关于书的简单XML文档开始,如果您对XML的语法不是很清楚的话,我建议您先学习XML文档的写法,因为这样会使您比较容易理解下面关于Schema的叙述。

<?xml version="1.0" encoding="utf-8"?>

<book isbn="0836217462">

<title>Being a Dog Is a Full-Time Job</title>

<author>Charles M. Schulz</author>

<character>

<name>Snoopy</name>

<friend-of>Peppermint Patty</friend-of>

<since>1950-10-04</since>

<qualification> extroverted beagle </qualification>

</character>

<character>

<name>Peppermint Patty</name>

<since>1966-08-22</since>

<qualification>bold, brash and tomboyish</qualification>

</character>

</book>

如何写这个XML文档的Schema呢?我们可以简单的依照它的结构来定义它的每个元素。首先我们加入一个xsd:schema元素.

<?xml version="1.0" encoding="utf-8"?>

<xsd:schema xmlns:xsd="
http://www.w3.org/2000/10/XMLSchema">

从"schema"元素开始我们Schema文档,在每个Schema文档中,它只能有一个,它控制着Schema所使用的名域和另外几个选项,我们知道现在的Schema标准有好几种,因此它是非常重要的!关于它的细节我们都将在下面的章节里学到。

对应着XML文档的"book"标记,我们同样也定义一个名为"book"的元素(element).因为这个元素有属性(attributes)和非文本的子元素(non-text children),因此我们认为它是一个复杂类型(complexType)(因为简单类型,只能有值,而不能有子元素或者属性)。同时我们还注意到"book"元素下的子元素,都是按照一定的顺序排列,因此我们使用顺序元素(sequence element)来描述它们。

<xsd:element name="book">

<xsd:complexType>

<xsd:sequence>

顺序元素(sequence element)是一个定义子元素排列顺序的元素,在下面的章节,我们还将看到两个其它的类似的元素,选择(choice)和全选(all)。

接着我们定义"title"和"author",它们都是xsd:string类型的简单元素,因为他们没有属性(attributes)或者子元素,xsd:string是一个已经在名域中预定义了的XML Schema类型中的一个。

<xsd:element name="title" type="xsd:string"/>

<xsd:element name="author" type="xsd:string"/>

接着,我们来处理"character"元素,它也是一个复杂类型。注意它的基数的定义!

<xsd:element name="character" minOccurs="0" maxOccurs="unbounded">

<xsd:complexType>

<xsd:sequence>

同其它Schema定义语言不一样,W3C XML Schema允许我们定义一个元素的使用基数,我们能指定元素的minOccurs(最小数)和maxOccurs(最大数。这里我们设置maxOccurs为"unbounded",这意味能有任意多的"character"元素。这两个属性的默认值都是一。下面,我们用同样的方法定义其它的子元素。

<xsd:element name="name" type="xsd:string"/>

<xsd:element name="friend-of" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>

<xsd:element name="since" type="xsd:date"/>

<xsd:element name="qualification" type="xsd:string"/>

下面我们封闭complexType和element等元素:

</xsd:sequence>

</xsd:complexType>

</xsd:element>

这样"character"元素就完成了。然后我们封闭"book"的sequence元素。

</xsd:sequence>

现在,声明"book"元素的属性,我们通常是在最后这么做。这样做没有什么特别的原因,只不过W3C XML Schema工作组认为在元素后定义属性感觉更加自然。

<xsd:attribute name="isbn" type="xsd:string"/>

最后,关闭所有剩下的元素。

</xsd:complexType>

</xsd:element>

</xsd:schema>

好了,我们的第一个Schema已经完成了。在这其中,最关键的在于根据文档的上下关系来定义每一个元素和属性,并且允许有多个同名元素带有不同的内容。这了这个目的,W3C XML Schema 是被设计成一种有作用域的语言,它的每一个定义只能被它定义的子元素所看见。

下面是完整的第一个例子:library1.xsd

<?xml version="1.0" encoding="utf-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">

<xsd:element name="book">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="title" type="xsd:string"/>

<xsd:element name="author" type="xsd:string"/>

<xsd:element name="character" minOccurs="0" maxOccurs="unbounded">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="name" type="xsd:string"/>

<xsd:element name="friend-of"

type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>

<xsd:element name="since" type="xsd:date"/>

<xsd:element name="qualification" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:sequence>

<xsd:attribute name="isbn" type="xsd:string"/>

</xsd:complexType>

</xsd:element>

</xsd:schema>

下一节,我们将学习如何细分元素,使它们更具可读性,而且方便维护。

浏览:Schema初学者进阶(二)

Schema初学者进阶(三)

如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐
jill.jiang@amteam.org | 021-51096826-112 | 在线联系
老孙的IT运维管理之道[原创]用户的BSM用户的IT业务管..

从企业实际的IT运营角度来看,BSM是推动IT与业务融合,实现、改善WCNG司IT管理和治理的最佳实践之一。

吕建伟 专栏和CIO问答软件项目实施管理

现实中很少能按照正规流程来的,所以只能把流程中的各个环节拆开,个个击破,以后就可以见招拆招了。

节能与优化IT 企业CIO过冬良策

当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良……

观08软件并购风潮 议09巨头何处生花

2008,似乎注定是不平静的一年。有人说2008是并购年。业内人士表示,在全球软件行业,并购一直是大企业谋求做大做强的捷径之一,包括甲骨文、SAP,微软等全球软件巨头都为了扩大自己……