使用W3C XML Schema(3)

本文介绍了如何使用W3C XML Schema定义命名数据类型,包括简单类型和复杂类型。通过示例展示了如何限制字符串长度和定义特定模式的数据类型,如ISBN。此外还探讨了如何在元素和属性中复用这些定义好的数据类型。

定义命名类型

我们已经看到,当我们需要他们时,我们可以定义元素和属性,首先创建并引用它们(目录)。 W3C XML Schema 给我们第3 个机制, 将确定数据类型(用于PCDATA元素的简单类型或者属性或者仅用于元素的复杂类型)使用这种类型去定义我们的属性和元素。

这是通过给simpleType 和complexType 元素命名实现的,并且在元素和属性定义之外定位它们。我们也会借此机会,以显示我们如何通过在数据类型上定义约束新建一个数据类型。

例如,要定义一个名为nameType的数据类型,其为最大32个字符的字符串,我们会这样写:

<xs:simpleType name="nameType"> 
<xs:restriction base="xs:string"> 
<xs:maxLength value="32"/> 
</xs:restriction> 
</xs:simpleType> 

simpleType 元素中的name属性值为新数据类型的名称。restriction 元素表示通过应用一个约束,该数据类型源自于W3C XML Schema 名称空间(基础属性)的数据类型。例如,通过现在可能值的数字。这个maxLength 元素,即所谓的facet,说明这个约束是一个最大长度为32字符的约束条件。

另外一个功能强大的facet是pattern元素,它定义了一个必须匹配的正则表达式。例如,如果我们不关心“-”字符,我们可以定义ISBN数据类型为10个数字,因此:

<xs:simpleType name="isbnType"> 
<xs:restriction base="xs:string"> 
<xs:pattern value="[0-9]{10}"/> 
</xs:restriction> 
</xs:simpleType>

Facets,以及另外两种方式生成一个数据类型(list和union)将在下面的章节介绍。

复杂类型就像我们之前看到的那样被定义,仅仅给一个名称。

定义并且使用命名的数据类型与定义一个类兵器使用它实例化一个对象相似。一种数据类型是一个抽象的概念,可用于定义一个属性或匀速。datatype和属性以及元素的关系类似于类和对象的关系。

完整清单:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<!-- definition of simple types --> 
<xs:simpleType name="nameType"> 
<xs:restriction base="xs:string"> 
<xs:maxLength value="32"/> 
</xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="sinceType"> 
<xs:restriction base="xs:date"/> 
</xs:simpleType> 
<xs:simpleType name="descType"> 
<xs:restriction base="xs:string"/> 
</xs:simpleType> 
<xs:simpleType name="isbnType"> 
<xs:restriction base="xs:string"> 
<xs:pattern value="[0-9]{10}"/> 
</xs:restriction> 
</xs:simpleType> 
<!-- definition of complex types --> 
<xs:complexType name="characterType"> 
<xs:sequence> 
<xs:element name="name" type="nameType"/> 
<xs:element name="friend-of" type="nameType" minOccurs="0" 
maxOccurs
="unbounded"/> 
<xs:element name="since" type="sinceType"/> 
<xs:element name="qualification" type="descType"/> 
</xs:sequence> 
</xs:complexType> 
<xs:complexType name="bookType"> 
<xs:sequence> 
<xs:element name="title" type="nameType"/> 
<xs:element name="author" type="nameType"/> 
<xs:element name="character" type="characterType" minOccurs="0"/> 
<!-- the definition of the "character" element is 
using the "characterType" complex type 
--> 
</xs:sequence> 
<xs:attribute name="isbn" type="isbnType" use="required"/> 
</xs:complexType> 
<!-- Reference to "bookType" to define the 
"book" element 
--> 
<xs:element name="book" type="bookType"/> 
</xs:schema> 

下面讲的是分组、排序以及衍生如何用来实现进一步的复用以及介绍scheme的结构。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值