Schema初学者进阶(三)

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

Schema初学者进阶(三)


 
自定义数据类型

我们已经看过我们用层层嵌套式和非层次式两种方法定义元素和元素属性的方法。W3C XML Schema还有第三种设计方法--自定义数据类型,自定义数据类型可以定义我们自己需要的数据类型,它既可以是象PCDATA一样的简单类型,也可以是含有多个元素的复杂类型。

在simpleType和complexType元素中给出自定义数据类型的名字,然后定义子元素或者属性。下面我们将展现如何定义一个长度受限的字符串类型。

例如:假如我们要定义一个名为"nameType",最大长度为32个字符的数据类型。我们可以这样写:

<xsd:simpleType name="nameType">

<xsd:restriction base="xsd:string">

<xsd:maxLength value="32"/>

</xsd:restriction>

</xsd:simpleType>

在simpleType元素中定义新的元素的名字,而restriction元素表示这个元素是来源于W3C XMLSchema名域中的"string"类型,并且对这个字符串应用了约束,例如:可以限制该元素能使用的数值。maxLength元素,称之为"facet",它说明这个自定义数据类型的约束条件是字符串最大长度不超过32。

另外一非常有用的facet是"pattern"元素,它定义一个必须要被匹配的规则表达式。例如:如果不介意"-"标记,我们可以象下面一样定义一个10个数字ISBN类型:

<xsd:simpleType name="isbnType">

<xsd:restriction base="xsd:string">

<xsd:pattern value="[0-9]{10}"/>

</xsd:restriction>

</xsd:simpleType>

Facets有两种方法取得一个数据类型(列表和结合体), 我们将在下面的章节讨论更深层的内容。

Complex自定义数据类型同我们已经看过simpleType的一样,首先给了元素名字。

定义使用数据类型和定义类并使用类建立对象是非常相似的。自定义数据类型用于定义元素或者属性的抽象概念。它所扮演的角色同类在对象扮演的角色相同。

下面是完整的实例:

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

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

<!-- definition of simple types -->

<xsd:simpleType name="nameType">

<xsd:restriction base="xsd:string">

<xsd:maxLength value="32"/>

</xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name="sinceType">

<xsd:restriction base="xsd:date"/>

</xsd:simpleType>

<xsd:simpleType name="descType">

<xsd:restriction base="xsd:string"/>

</xsd:simpleType>

<xsd:simpleType name="isbnType">

<xsd:restriction base="xsd:string">

<xsd:pattern value="[0-9]{10}"/>

</xsd:restriction>

</xsd:simpleType>

<!-- definition of complex types -->

<xsd:complexType name="characterType">

<xsd:sequence>

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

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

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

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

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="bookType">

<xsd:sequence>

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

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

<!-- the definition of the "character" element is using the "characterType" complex type -->

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

</xsd:sequence>

<xsd:attribute name="isbn" type="isbnType" use="required"/>

</xsd:complexType>

<!-- Reference to "bookType" to define the "book" element -->

<xsd:element name="book" type="bookType"/>

</xsd:schema>

下一个章节里,我们将显示在Schemas中如何更好的利用组合,排序及引用来重用定义。

浏览: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,微软等全球软件巨头都为了扩大自己……