2.5.4. 根据限制定义类型

概述

XML 架构允许您通过限制 XML 架构简单类型的可能值来创建新类型。例如,您可以定义一个简单类型 SSN,它是仅包含 9 个字符的字符串。通过限制简单类型来定义的新类型,可使用 simpleType 元素来定义。

按限制划分类型的定义需要三个操作:

  1. 新类型的名称通过 simpleType 元素的 name 属性指定。
  2. 从中派生新类型的简单类型(称为 基础类型 )在 limits 元素中指定。请参阅 “指定基础类型”一节
  3. 规则(称为 facets )定义基础类型所施加的限制是作为 限制 元素的子项的子项。请参阅 “定义限制”一节

指定基础类型

基础类型是受限制来定义新类型的类型。它通过 limit 元素 来指定限制 元素是 simpleType 元素的唯一子项,并且具有一个指定 基础 类型的属性(base)。基本类型可以是任何 XML 架构简单类型。

例如,通过限制 xsd:int 的值来定义新类型,您可以使用类似 例 2.14 “使用 int 作为基础类型” 中显示的定义。

例 2.14. 使用 int 作为基础类型

<simpleType name="restrictedInt">
  <restriction base="xsd:int">
    ...
  </restriction>
</simpleType>

定义限制

定义对基本类型实施的限制的规则称为 facets。facets 是带有一条属性( value )的元素,它定义了如何强制实施 facet。可用的难题及其 有效值 设置取决于基本类型。例如,xsd:string 支持六方面面,其中包括:

  • length
  • minLength
  • maxLength
  • pattern
  • whitespace
  • 枚举

每个 facet 元素都是 限制 元素的子元素。

示例

例 2.15 “SSN 简单类型描述” 显示了一个简单类型 SSN 的示例,它代表了一个社交安全号。生成的 type 是 xxx-xx-xxxx 形式的字符串。<SSN>032-43-9876<SSN> 是此类型的元素的有效值,但 <SSN>032439876</SSN> 不可用。

例 2.15. SSN 简单类型描述

<simpleType name="SSN">
  <restriction base="xsd:string">
    <pattern value="\d{3}-\d{2}-\d{4}"/>
  </restriction>
</simpleType>