XML Schema(1)继

简单类型

 

在购买订单模式文档中,几个元素和属性被声明为简单类型,其中一些简单类型如 string decimalXML Schema 中内置的。而其他的一些则是源于( 如果使用对象技术的语言,就是继承) 内置的类型。举例来说,partNum 属性的类型称为SKU (Stock Keeping Unit) ,是源于string. 的。内置的简单类型和他们的后继版本都能够被用在所有的元素和属性声明中,下面的列表列举了所有的在XML Schema 中内置的简单类型及其相应的例子。

 

简单类型( 原子类型)

值示例

备注

string

Confirm this is electric

 

normalizedString

Confirm this is electric

参见 (3)

token

Confirm this is electric

参见 (4)

byte

-1, 126

参见 (2)

unsignedByte

0, 126

参见 (2)

base64Binary

GpM7

 

hexBinary

0FB7

 

integer

-126789, -1, 0, 1, 126789

参见 (2)

positiveInteger

1, 126789

参见 (2)

negativeInteger

-126789, -1

参见 (2)

nonNegativeInteger

0, 1, 126789

参见 (2)

nonPositiveInteger

-126789, -1, 0

参见 (2)

int

-1, 126789675

参见 (2)

unsignedInt

0, 1267896754

参见 (2)

long

-1, 12678967543233

参见 (2)

unsignedLong

0, 12678967543233

参见 (2)

short

-1, 12678

参见 (2)

unsignedShort

0, 12678

参见 (2)

decimal

-1.23, 0, 123.4, 1000.00

参见 (2)

float

-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN

等同于单精度32 位浮点数,其中”NaN ”表示”不是一个数字”。参见 (2)

double

-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN

等同于双精度64 位浮点数。参见 (2)

boolean

true, false,1, 0

 

time

13:20:00.000, 13:20:00.000-05:00

参见 (2)

dateTime

1999-05-31T13:20:00.000-05:00

这个时间表示的含义是:1999531 日美东标准时间下午1:20 ,注意后面的-05:00 表示这个时间比格林尼治时间早5 个小时。参见 (2)

duration

P1Y2M3DT10H30M12.3S

这表示经过了12 个月3 天又10 个小时30 分钟12.3

date

1999-05-31

参见 (2)

gMonth

--05--

表示5 月。参见 (2) (5)

gYear

1999

表示1999 年。参见 (2) (5)

gYearMonth

1999-02

表示19992 月,而并不关心是几号。参见 (2) (5)

gDay

---31

表示31 号。参见 (2) (5)

gMonthDay

--05-31

表示每个531 号。参见 (2) (5)

Name

shipTo

XML 1.0 的Name 类型

QName

po:USAddress

XML 命名空间的QName 类型

NCName

USAddress

XML 命名空间的NCName 类型,即一个不带命名空间前缀修饰的QName

anyURI

http://www.example.com/, http://www.example.com/doc.html#ID5

 

language

en-GB, en-US, fr

XML 1.0 中定义的合法语言代码

ID

 

XML 1.0 中定义的ID 属性类型。参见 (1)

IDREF

 

XML 1.0 中定义的IDREF 属性类型。参见 (1)

IDREFS

 

XML 1.0 中定义的IDREFS 属性类型。参见 (1)

ENTITY

 

XML 1.0 中定义的ENTITY 属性类型。参见 (1)

ENTITIES

 

XML 1.0 中定义的ENTITYS 属性类型。参见 (1)

NOTATION

 

XML 1.0 中定义的NOTATION 属性类型。参见 (1)

NMTOKEN

US, Brésil

XML 1.0 中定义的NMTOKEN 属性类型。参见 (1)

NMTOKENS

US UK, Brésil Canada Mexique

XML 1.0 中定义的NMTOKENS 属性类型,即一个使用空格作为元素分隔的NMTOKEN 列表。参见 (1)

注意:

   1. 为了在XML SchemaXML 1.0 DTD 之间保持兼容,简单类型IDIDREFIDREFSENTITYENTITIESNOTATIONNMTOKEN (表由一个或多个字母,数字,句点(.) ,连字号(-) 或底线(_) 所组成的一个名称,除第一个字符外,其属性设置值中也可以包含冒号(:) )、NMTOKENS 只能用在属性定义中;

   2. 这个类型的值能够表示为不止一种格式,如1001.0E2 都是有效的float 格式,它们都表示”一百”这个数值。然而,对于这个类型而言,已经为其定义了规范的格式规则。

   3. 换行符、制表符和回车符在normalizedString 中将会在处理前被转化成空格字符

   4. 作为normalizedString ,相邻的空格字符将会被合并为一个空格字符,第一个和最后的空格将被移走

   5. “g ”前缀表示罗马历的时间和年代。

 

新的简单类型通过从现有的简单类型( 内置的简单类型以及源于内置简单类型的简单类型) 引出定义。特别的,我们通过重新约束一个现存的简单类型来引出一个新的简单类型。换句话说,新类型的合法值范围是现有类型的值范围的子集。我们使用 simpleType 元素来定义和命名新的简单类型,我们使用 restriction 元素来指出现有的基类型。并且用它来标识约束值范围的细节 。

 

假设我们希望建立一个新的整数类型称为myInteger ,他的值范围为1000099999 。我们的定义应当基于简单类型integer ,然后定义他的值范围为1000099999 。为了定义myInteger ,我们这样来约束integer 的范围:

使用基类型来定义新的简单类型

<xsd:simpleType name="myInteger">
  <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="10000"/>
    <xsd:maxInclusive value="99999"/>
  </xsd:restriction>
</xsd:simpleType>
 

上面的例子显示了一个由一个基本类型定义和两个值域区间方面描述的组合,通过这三个要素来对myInteger 实施了定义。

 

而先前的购买订单模式文档则包含了其他的更详细的定义简单类型的例子。一个叫SKU 的新简单类型( 见下清单) 是从( 通过约束) 简单类型string 引出的。此外,我们使用一个称为pattern 的描述以及pattern 的正则表达式值"\d{3}-[A-Z]{2}" 来约束SKU 的值。其中,该正则表达式值的语义为:3 个数字后面跟着一个连字号接着跟着两个大写的英文字母"

<xsd:simpleType name="SKU">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="\d{3}-[A-Z]{2}"/>
  </xsd:restriction>
</xsd:simpleType>

XML Schema 定义了15 种用于简单类型定义描述的词汇。在这些词汇中, enumeration 是特别有用的,他能够被用于约束除boolean 类型之外的几乎每一个简单类型。 enumeration 限制简单类型的值为一系列不同的枚举值。举例来说,我们可以使用enumeration 来定义一个新类型称为 USState( 参见下例)USState 是从string 引出的,同时它的值必须为美国州的缩写。

<xsd:simpleType name="USState">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="AK"/>
    <xsd:enumeration value="AL"/>
    <xsd:enumeration value="AR"/>
    <!-- and so on ... -->
  </xsd:restriction>
</xsd:simpleType>
 

USState 将会在现在使用的state 元素声明中成为string 类型的一个非常好的替换品。通过使用这个替换品可以使state 元素具有合法值的校验能力。举例来说,billToshipTo 元素的子元素state ,将会被限制在AKALAR 等等中。注意到对于特定类型的列举值必须是唯一的。

 

列表类型(List Type)

 

除了在前面描述简单类型的那个表格中列出的原子类型( 这些原子类型可用于组合成绝大多数的其他类型,包括其他的简单类型和复合类型) 外,XML Schema 中在简单类型范畴中还有列表类型的概念。( 原子类型、列表类型以及组合类型,总称为简单类型 ) 。一个原子类型的值在XML Schema 中是不可分割的。举例来说,NMTOKENUS 是不可分割的,US 的任何部分,如字母S 本身都是没有意义的。与之相比较,列表类型则是由一组原子类型组成 ,因此它的每一个部分( 原子) 本身都是有意义的。举例来说NMTOKENS 是个列表类型。这个类型的元素将是NMTOKEN 的列表,不同的 NMTOKEN 值间使用空格分隔,如"US UK FR"XML Schema 有三个内置的列表类型,他们是NMTOKENSIDREFSENTITIES

 

除了使用内置的列表类型之外,你还可以通过引用现有的原子类型来建立新的列表类型( 你不可以使用现有的列表类型来建立新的列表类型。也不能使用复合类型来建立新的列表类型 ) 。举例来说,我们可以建立一个名为myInteger 的列表类型,并在实例文档中使用它( 参见下图) 。其中下例中的后半部分即为实例文档中与列表类型 listOfMyIntType 相一致的实例元素。

<!-- Schema Fragment -->
<xsd:simpleType name="listOfMyIntType">
  <xsd:list itemType="myInteger"/>
</xsd:simpleType>
<!-- Instance Fragment -->
<listOfMyInt>20003 15037 95977 95945</listOfMyInt>

 一些用于描述的参数能够被应用到列表类型的定义中,它们是:lengthminLengthmaxLengthenumeration 。举例来说,如果我们想定义一个列表,这个列表正好包含了六个美国的州名(SixUSStates) 。我们首先从USState 定义了一个新的列表类型,称为 USStateList ,然后我们通过限制USStateList 只有六个项来导出SixUSStates 。具体的定义可参见下例。

<!-- Schema Fragment -->
<xsd:simpleType name="USStateList">
 <xsd:list itemType="USState"/>
</xsd:simpleType>
<xsd:simpleType name="SixUSStates">
 <xsd:restriction base="USStateList">
  <xsd:length value="6"/>
 </xsd:restriction>
</xsd:simpleType>
<!-- Instance Fragment -->
<sixStates>PA NY CA NY LA AK</sixStates>
 

类型为SixUSStates 的元素必须有六个项,他们中的每一个必须是一个枚举类型USState 的原子类型,在上例后半部分的实例文档中就是一个具体的应用例子。

 

此时,需要注意的是,可以从原子类型string 导出一个列表类型,然而,在一个string 中也许会带有空格,而空格在一个列表类型实例中是作为分隔符使用的。所以当在使用基类型为string 的列表类型时,应当格外小心 。举例来说,假设我们定义了一个length 取值为3 的列表类型,同时这个列表类型是基于类型string 。以下由三个元素组成的列表是合法的:"Asie Europe Afrique" ,而下面的由三个元素组成的列表则是不合法的:"Asie Europe Am érique Latine"

 

即使"Am érique Latine" 在列表外可以作为单独的一个字符串存在,但当它包含在列表中,在Am ériqueLatine 之间的空格使得第四个项被有效地生成了,因此后面的那个例子不符合只有三个项的列表类型定义。

 

联合类型(Union Type)

 

应用原子类型和列表类型,一个元素或者属性的值可以为一个或者多个原子类型( 列表类型) 的实例。与之相比较,如果应用联合类型,一个联合类型包含了多个原子类型或者列表类型,而应用了联合类型的元素或是属性的值可以是这些原子类型或列表类型中的一个类型的实例。为了显示这点,我们建立一个用于表示美国的州的,为两个字母缩写或者数字列表的联合类型。zipUnion 联合类型由一个原子类型和一个列表类型构成的( 参见下例)

<!-- Schema Fragment -->
<xsd:simpleType name="zipUnion">
  <xsd:union memberTypes="USState listOfMyIntType"/>
</xsd:simpleType>
<!-- Instance Fragment -->
<zips>CA</zips>
<zips>95630 95977 95945</zips>
<zips>AK</zips>
 

当我们在定义一个联合类型时,元素unionmemberTypes 属性的值包含了联合类型中所有类型的列表 。现在,假定我们声明了一个zipUnion 类型的元素,称为zipszips 元素有效的实例可参见上例。

 

 

此外,对于联合类型而言,还有两个描述性质的参数patternenumeration 也可以应需要使用

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值