XSD-4 Schema 面向对象之基础数据类型

XSD-4 Schema 面向对象之基础数据类型

  • 4 Schema 面向对象之基础数据类型
    • 4.1 字符串数据类型
    • 4.2 日期和时间数据类型
    • 4.3 数值数据类型
    • 4.4 杂项数据类型(Miscellaneous Data Types)

4 Schema 面向对象之基础数据类型

可以通过 XSD Schema 构建面向对象的设计模式;
*基础数据类型
首先,我们来认识 Schema 的基础数据类型:
最常用的类型是:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time

Schema 中,使用元素的 type 属性来指定该元素所使用的数据类型。

例子:
这是一些 XML 元素:

<lastname>Smithlastname>
<age>28age>
<dateborn>1980-03-27dateborn>

这是相应的简易元素定义:

<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/> 

4.1 字符串数据类型

参见:XSD 字符串
请注意,所有以下的数据类型均衍生于字符串数据类型(除了字符串数据类型本身)!

名称 描述
ENTITIES
ENTITY
ID 在 XML 中提交 ID 属性的字符串 (仅与 schema 属性一同使用)
IDREF 在 XML 中提交 IDREF 属性的字符串(仅与 schema 属性一同使用)
IDREFS language 包含合法的语言 id 的字符串
Name 包含合法 XML 名称的字符串
NCName
NMTOKEN 在 XML 中提交 NMTOKEN 属性的字符串 (仅与 schema 属性一同使用)
NMTOKENS
normalizedString 不包含换行符、回车或制表符的字符串
QName
string 字符串,字符串数据类型可包含字符、换行、回车以及制表符。
token 不包含换行符、回车或制表符、开头或结尾空格或者多个连续空格的字符串

字符串数据类型(String Data Type)
字符串数据类型可包含字符、换行、回车以及制表符。

下面是一个关于某个 scheme 中字符串声明的例子:

<xs:element name="customer" type="xs:string"/>

文档中的元素看上去应该类似这样:

<customer>John Smithcustomer>

或者类似这样:

	 John Smith	 

注释:如果您使用字符串数据类型,XML 处理器就不会更改其中的值。


规格化字符串数据类型(NormalizedString Data Type)
规格化字符串数据类型源自于字符串数据类型。

规格化字符串数据类型同样可包含字符,但是 XML 处理器会移除折行,回车以及制表符。

下面是一个关于在某个 schema 中规格化字符串数据类型的例子:

<xs:element name="customer" type="xs:normalizedString"/>

文档中的元素看上去应该类似这样:

<customer>John Smithcustomer>

或者类似这样:

<customer>	John Smith	customer>

注释:在上面的例子中,XML 处理器会使用空格替换所有的制表符。


Token 数据类型(Token Data Type)
Token 数据类型同样源自于字符串数据类型。

Token 数据类型同样可包含字符,但是 XML 处理器会移除换行符、回车、制表符、开头和结尾的空格以及(连续的)空格。

下面是在 schema 中一个有关 token 声明的例子:

<xs:element name="customer" type="xs:token"/>

文档中的元素看上去应该类似这样:

<customer>John Smithcustomer>

或者类似这样:

<customer>	John Smith	customer>

注释:在上面这个例子中,XML 解析器会移除制表符。

4.2 日期和时间数据类型

参见:XSD 日期
日期及时间数据类型用于包含日期和时间的值。

名称 描述
date 定义一个日期值
dateTime 定义一个日期和时间值
duration 定义一个时间间隔
gDay 定义日期的一个部分 - 天 (DD)
gMonth 定义日期的一个部分 - 月 (MM)
gMonthDay 定义日期的一个部分 - 月和天 (MM-DD)
gYear 定义日期的一个部分 - 年 (YYYY)
gYearMonth 定义日期的一个部分 - 年和月 (YYYY-MM)
time 定义一个时间值

日期数据类型(Date Data Type)
日期数据类型用于定义日期。

日期使用此格式进行定义:"YYYY-MM-DD",其中:

YYYY 表示年份
MM 表示月份
DD 表示天数
注释:所有的成分都是必需的!

下面是一个有关 schema 中日期声明的例子:

<xs:element name="start" type="xs:date"/>

文档中的元素看上去应该类似这样:

<start>2002-09-24start>

时区
如需规定一个时区,您也可以通过在日期后加一个 “Z” 的方式,使用世界调整时间(UTC time)来输入一个日期 - 比如这样:

<start>2002-09-24Zstart>

或者也可以通过在日期后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

2002-09-24-06:00

或者:

<start>2002-09-24+06:00start>

时间数据类型(Time Data Type)
时间数据类型用于定义时间。

时间使用下面的格式来定义:"hh:mm:ss",其中

hh 表示小时
mm 表示分钟
ss 表示秒
注释:所有的成分都是必需的!

下面是一个有关 schema 中时间声明的例子:

<xs:element name="start" type="xs:time"/>

文档中的元素看上去应该类似这样:

<start>09:00:00start>

或者类似这样:

<start>09:30:10.5start>

时区
如需规定一个时区,您也可以通过在时间后加一个 “Z” 的方式,使用世界调整时间(UTC time)来输入一个时间 - 比如这样:

<start>09:30:10Zstart>

或者也可以通过在时间后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

<start>09:30:10-06:00start>

或者:

<start>09:30:10+06:00

日期时间数据类型(DateTime Data Type)
日期时间数据类型用于定义日期和时间。

日期时间使用下面的格式进行定义:"YYYY-MM-DDThh:mm:ss",其中:

YYYY 表示年份
MM 表示月份
DD 表示日
T 表示必需的时间部分的起始
hh 表示小时
mm 表示分钟
ss 表示秒
注释:所有的成分都是必需的!

下面是一个有关 schema 中日期时间声明的例子:

<xs:element name="startdate" type="xs:dateTime"/>

文档中的元素看上去应该类似这样:

<startdate>2002-05-30T09:00:00startdate>

或者类似这样:

<startdate>2002-05-30T09:30:10.5startdate>

时区
如需规定一个时区,您也可以通过在日期时间后加一个 “Z” 的方式,使用世界调整时间(UTC time)来输入一个日期时间 - 比如这样:

<startdate>2002-05-30T09:30:10Zstartdate>

或者也可以通过在时间后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

<startdate>2002-05-30T09:30:10-06:00startdate>

或者:

<startdate>2002-05-30T09:30:10+06:00startdate>

持续时间数据类型(Duration Data Type)
持续时间数据类型用于规定时间间隔。

时间间隔使用下面的格式来规定:"PnYnMnDTnHnMnS",其中:

P 表示周期(必需)
nY 表示年数
nM 表示月数
nD 表示天数
T 表示时间部分的起始 (如果您打算规定小时、分钟和秒,则此选项为必需)
nH 表示小时数
nM 表示分钟数
nS 表示秒数
下面是一个有关 schema 中持续时间声明的例子:

<xs:element name="period" type="xs:duration"/>

文档中的元素看上去应该类似这样:

<period>P5Yperiod>

上面的例子表示一个 5 年的周期。

或者类似这样:

<period>P5Y2M10Dperiod>

上面的例子表示一个 5 年、2 个月及 10 天的周期。

或者类似这样:

<period>P5Y2M10DT15Hperiod>

上面的例子表示一个 5 年、2 个月、10 天及 15 小时的周期。

或者类似这样:

<period>PT15Hperiod>

上面的例子表示一个 15 小时的周期。

负的持续时间
如需规定一个负的持续时间,请在 P 之前输入减号:

<period>-P10Dperiod>

上面的例子表示一个负 10 天的周期。

4.3 数值数据类型

参见:XSD 数值
请注意,下面所有的数据类型均源自于十进制数据类型(除 decimal 本身以外)!

名字 描述
byte 有正负的 8 位整数
decimal 十进制数
int 有正负的 32 位整数
integer 整数值
long 有正负的 64 位整数
negativeInteger 仅包含负值的整数 ( …, -2, -1.)
nonNegativeInteger 仅包含非负值的整数 (0, 1, 2, …)
nonPositiveInteger 仅包含非正值的整数 (…, -2, -1, 0)
positiveInteger 仅包含正值的整数 (1, 2, …)
short 有正负的 16 位整数
unsignedLong 无正负的 64 位整数
unsignedInt 无正负的 32 位整数
unsignedShort 无正负的 16 位整数
unsignedByte 无正负的 8 位整数

十进制数据类型
十进制数据类型用于规定一个数值。

下面是一个关于某个 scheme 中十进制数声明的例子。

<xs:element name="prize" type="xs:decimal"/>

文档中的元素看上去应该类似这样:

<prize>999.50prize>

或者类似这样:

<prize>+999.5450prize>

或者类似这样:

<prize>-999.5230prize>

或者类似这样:

<prize>0prize>

或者类似这样:

<prize>14prize>

注释:您可规定的十进制数字的最大位数是 18 位。


整数数据类型
整数数据类型用于规定无小数成分的数值。

下面是一个关于某个 scheme 中整数声明的例子。

<xs:element name="prize" type="xs:integer"/>

文档中的元素看上去应该类似这样:

<prize>999prize>

或者类似这样:

<prize>+999prize>

或者类似这样:

<prize>-999prize>

或者类似这样:

<prize>0prize>

4.4 杂项数据类型(Miscellaneous Data Types)

参见:XSD 杂项

名称 描述
anyURI anyURI 数据类型用于规定 URI。
base64Binary Base64 编码的二进制数据
boolean 逻辑数据性用于规定 true 或 false 值。
double
float
hexBinary hexBinary (十六进制编码的二进制数据)
NOTATION
QName

逻辑数据类型(Boolean Data Type)
逻辑数据性用于规定 true 或 false 值。

下面是一个关于某个 scheme 中逻辑声明的例子:

<xs:attribute name="disabled" type="xs:boolean"/>

文档中的元素看上去应该类似这样:

<prize disabled="true">999prize>

注释:合法的布尔值是 true、false、1(表示 true) 以及 0(表示 false)。


二进制数据类型(Binary Data Types)
二进制数据类型用于表达二进制形式的数据。

我们可使用两种二进制数据类型:

base64Binary (Base64 编码的二进制数据)
hexBinary (十六进制编码的二进制数据)
下面是一个关于某个 scheme 中 hexBinary 声明的例子:

<xs:element name="blobsrc" type="xs:hexBinary"/>

AnyURI 数据类型(AnyURI Data Type)
anyURI 数据类型用于规定 URI。

下面是一个关于某个 scheme 中 anyURI 声明的例子:

<xs:attribute name="src" type="xs:anyURI"/>

文档中的元素看上去应该类似这样:

<pic src="http://www.w3school.com.cn/images/smiley.gif" />

注释:假如某个 URI 含有空格,请用 %20 替换它们。


上一章:XSD-3 Schema 的简单使用
目录:学习 JAXB
下一章:XSD-5 Schema 面向对象之 SimpleType


你可能感兴趣的:(JAXB)