Schema初学者进阶(3)自定义数据类型

80酷酷网    80kuku.com

  初学|数据|数据类型

 

 

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

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

例如:假如我们要定义一个名为"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>


 



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: