XML Schema 字符串数据类型及约束详解
字符串数据类型用于包含字符字符串的值。字符串数据类型可以包含字符、换行符、回车符和制表符。
以下是模式中字符串声明的示例:
<xs:element name="customer" type="xs:string"/>
您文档中的一个元素可能如下所示:
<customer>John Smith</customer>
或者可能是这样的:
<customer> John Smith </customer>
注意:如果使用字符串数据类型,XML 处理器将不会修改值。
NormalizedString 数据类型
normalizedString
数据类型派生自 String
数据类型。
normalizedString
数据类型也包含字符,但 XML 处理器将删除换行符、回车符和制表符。
以下是模式中 normalizedString
声明的示例:
<xs:element name="customer" type="xs:normalizedString"/>
您文档中的一个元素可能如下所示:
<customer>John Smith</customer>
或者可能是这样的:
<customer> John Smith </customer>
注意:在上面的示例中,XML 处理器将用空格替换制表符。
Token 数据类型
token
数据类型也派生自 String
数据类型。
token
数据类型也包含字符,但 XML 处理器将删除换行符、回车符、制表符、前导和尾随空格,以及多个空格。
以下是模式中 token
声明的示例:
<xs:element name="customer" type="xs:token"/>
您文档中的一个元素可能如下所示:
<customer>John Smith</customer>
或者可能是这样的:
<customer> John Smith </customer>
注意:在上面的示例中,XML 处理器将删除制表符。
数据类型
请注意,以下所有数据类型均源自字符串数据类型(除了字符串本身)!
名称 | 描述 |
---|---|
ENTITIES |
|
ENTITY |
|
ID |
表示 XML 中的 ID 属性的字符串(仅与模式属性一起使用) |
IDREF |
表示 XML 中的 IDREF 属性的字符串(仅与模式属性一起使用) |
IDREFS |
|
language |
包含有效语言标识的字符串 |
Name |
包含有效 XML 名称的字符串 |
NCName |
|
NMTOKEN |
表示 XML 中的 NMTOKEN 属性的字符串(仅与模式属性一起使用) |
NMTOKENS |
|
normalizedString |
不包含换行符、回车或制表符的字符串 |
QName |
|
string |
字符串 |
token |
不包含换行符、回车、制表符、前导或尾随空格或多个空格的字符串 |
字符串数据类型的限制
可以与字符串数据类型一起使用的限制:
- 枚举
- 长度
- 最大长度
- 最小长度
- 模式(NMTOKENS、IDREFS 和 ENTITIES 不能使用此约束)
- 空白
XSD 日期和时间数据类型
日期和时间数据类型用于包含日期和时间值。
日期数据类型
日期数据类型用于指定日期。
日期以以下形式指定:“YYYY-MM-DD”,其中:
YYYY
表示年份MM
表示月份DD
表示日期
注意:所有组件都是必需的!
以下是模式中日期声明的示例:
<xs:element name="start" type="xs:date"/>
您文档中的元素可能如下所示:
<start>2002-09-24</start>
时区
要指定时区,您可以通过在时间后面添加“Z”来输入 UTC 时间的时间,如下所示:
<start>09:30:10Z</start>
或者您可以通过在时间后面添加正数或负数时间来指定 UTC 时间的偏移量,如下所示:
<start>09:30:10-06:00</start>
或
<start>09:30:10+06:00</start>
日期时间数据类型
日期时间数据类型用于指定日期和时间。
日期时间以以下形式指定:“YYYY-MM-DDThh:mm:ss”,其中:
YYYY
表示年份MM
表示月份DD
表示日期T
表示所需时间部分的开始hh
表示小时mm
表示分钟ss
表示秒
注意:所有组件都是必需的!
以下是模式中日期时间声明的示例:
<xs:element name="startdate" type="xs:dateTime"/>
您文档中的元素可能如下所示:
<startdate>2002-05-30T09:00:00</startdate>
或者可能如下所示:
<startdate>2002-05-30T09:30:10.5</startdate>
时区
要指定时区,您可以通过在时间后面添加“Z”来输入 UTC 时间的日期时间,如下所示:
<startdate>2002-05-30T09:30:10Z</startdate>
或者您可以通过在时间后面添加正数或负数时间来指定 UTC 时间的偏移量,如下所示:
<startdate>2002-05-30T09:30:10-06:00</startdate>
或
<startdate>2002-05-30T09:30:10+06:00</startdate>
持续时间数据类型
持续时间数据类型用于指定时间间隔。
时间间隔以以下形式指定:“PnYnMnDTnHnMnS”,其中:
P
表示周期(必需)nY
表示年数nM
表示月数nD
表示天数T
表示时间部分的开始(如果您要指定小时、分钟或秒,则必需)nH
表示小时数nM
表示分钟数nS
表示秒数
以下是模式中持续时间声明的示例:
<xs:element name="period" type="xs:duration"/>
您文档中的元素可能如下所示:
<period>P5Y</period>
上面的示例表示五年的周期。
或者可能如下所示:
<period>P5Y2M10D</period>
上面的示例表示五年、两个月和 10 天的周期。
或者可能如下所示:
<period>P5Y2M10DT15H</period>
上面的示例表示五年、两个月、10 天和 15 小时的周期。
或者可能如下所示:
<period>PT15H</period>
上面的示例表示 15 小时的周期。
负持续时间
要指定负持续时间,请在 P 之前输入减号:
<period>-P10D</period>
上面的示例表示负 10 天的周期。
日期和时间数据类型
名称 | 描述 |
---|---|
date |
定义日期值 |
dateTime |
定义日期和时间值 |
duration |
定义时间间隔 |
gDay |
定义日期的一部分 - 日(DD) |
gMonth |
定义日期的一部分 - 月(MM) |
gMonthDay |
定义日期的一部分 - 月和日(MM-DD) |
gYear |
定义日期的一部分 - 年(YYYY) |
gYearMonth |
定义日期的一部分 - 年和月(YYYY-MM) |
time |
定义时间值 |
日期数据类型的限制
可以与日期数据类型一起使用的限制:
- 枚举
- 最大独占
- 最大包容
- 最小独占
- 最小包容
- 模式
- 空白
XSD 数值数据类型
十进制数据类型用于表示数值。
十进制数据类型
十进制数据类型用于指定数值。
以下是模式中十进制声明的示例:
<xs:element name="price" type="xs:decimal"/>
您文档中的元素可能如下所示:
<price>999.50</price>
或者可能如下所示:
<price>+999.5450</price>
或者可能如下所示:
<price>-999.5230</price>
或者可能如下所示:
<price>0</price>
或者可能如下所示:
<price>14</price>
整数数据类型
整数数据类型用于指定没有小数部分的数值。
以下是模式中整数声明的示例:
<xs:element name="price" type="xs:integer"/>
您文档中的元素可能如下所示:
<price>999</price>
或者可能如下所示:
<price>+999</price>
或者可能如下所示:
<price>-999</price>
或者可能如下所示:
<price>0</price>
数值数据类型
请注意,以下所有数据类型均源自十进制数据类型(除了十进制本身)!
名称 | 描述 |
---|---|
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 位整数 |
数值数据类型的限制
可以与数值数据类型一起使用的限制:
- 枚举
- 小数位数
- 最大独占
- 最大包容
- 最小独占
- 最小包容
- 模式
- 总位数
- 空白
XSD 杂项数据类型
其他杂项数据类型包括布尔型、base64Binary、hexBinary、float、double、anyURI、QName 和 NOTATION。
布尔型数据类型
布尔型数据类型用于指定真值或假值。
以下是模式中布尔型声明的示例:
<xs:attribute name="disabled" type="xs:boolean"/>
您文档中的元素可能如下所示:
<price disabled="true">999</price>
注意:布尔型的合法值为 true、false、1(表示 true)和 0(表示 false)。
二进制数据类型
二进制数据类型用于表示二进制格式的数据。
我们有两种二进制数据类型:
base64Binary
(Base64 编码的二进制数据)hexBinary
(十六进制编码的二进制数据)
以下是模式中十六进制二进制声明的示例:
<xs:element name="blobsrc" type="xs:hexBinary"/>
任意 URI 数据类型
任意 URI 数据类型用于指定 URI。
以下是模式中任意 URI 声明的示例:
<xs:attribute name="src" type="xs:anyURI"/>
注意:如果 URI 包含空格,请用 %20 替换。
杂项数据类型
名称 | 描述 |
---|---|
anyURI |
|
base64Binary |
|
boolean |
|
double |
|
float |
|
hexBinary |
|
NOTATION |
|
QName |
杂项数据类型的限制
可以与其他数据类型一起使用的限制:
- 枚举(布尔型数据类型不能使用此约束)
- 长度(布尔型数据类型不能使用此约束)
- 最大长度(布尔型数据类型不能使用此约束)
- 最小长度(布尔型数据类型不能使用此约束)
- 模式
- 空白
XSD 元素
元素 | 说明 |
---|---|
all |
指定子元素可以以任何顺序出现。每个子元素可以出现 0 次或 1 次 |
annotation |
指定用于模式注释的顶级元素 |
any |
允许作者使用模式未指定的元素扩展 XML 文档 |
anyAttribute |
允许作者使用模式未指定的属性扩展 XML 文档 |
appinfo |
指定应用程序使用的信息(必须位于注释内部) |
attribute |
定义属性 |
attributeGroup |
定义用于复杂类型定义中的属性组 |
choice |
允许 |
complexContent |
定义包含混合内容或仅包含元素的复杂类型上的扩展或限制 |
complexType |
定义复杂类型元素 |
documentation |
在模式中定义文本注释(必须位于注释内部) |
element |
定义元素 |
extension |
扩展现有的 simpleType 或 complexType 元素 |
field |
指定用于定义标识约束中使用的值的 XPath 表达式 |
group |
定义用于复杂类型定义中的元素组 |
import |
将具有不同目标命名空间的多个模式添加到文档中 |
include |
将具有相同目标命名空间的多个模式添加到文档中 |
key |
指定作为键的属性或元素值(在实例文档中作为唯一、非空且始终存在的) |
keyref |
指定属性或元素值与指定键或唯一元素的值相对应 |
list |
将简单类型元素定义为值列表 |
notation |
描述 XML 文档中非 XML 数据的格式 |
redefine |
从外部模式中重新定义简单和复杂类型、组和属性组 |
restriction |
在 simpleType、simpleContent 或 complexContent 上定义限制 |
schema |
定义模式的根元素 |
selector |
指定选择一组元素以进行标识约束的 XPath 表达式 |
sequence |
指定子元素必须按顺序出现。每个子元素可以出现 0 次到任意次数 |
simpleContent |
包含仅扩展或限制文本类型复杂类型或简单类型的内容,并且不包含元素 |
simpleType |
定义简单类型并指定有关属性或仅文本元素的值的约束和信息 |
union |
将简单类型定义为指定简单数据类型的值集合(联合) |
unique |
定义元素或属性值必须在范围内是唯一的 |
XSD 数据类型的限制/特征
约束 | 描述 |
---|---|
enumeration |
定义可接受值的列表 |
fractionDigits |
指定允许的最大小数位数。必须等于或大于零 |
length |
指定允许的精确字符或列表项数目。必须等于或大于零 |
maxExclusive |
指定数值的上限(该值必须小于此值) |
maxInclusive |
指定数值的上限(该值必须小于或等于此值) |
maxLength |
指定允许的最大字符或列表项数目。必须等于或大于零 |
minExclusive |
指定数值的下限(该值必须大于此值) |
minInclusive |
指定数值的下限(该值必须大于或等于此值) |
minLength |
指定允许的最小字符或列表项数目。必须等于或大于零 |
pattern |
定义可接受的确切字符序列 |
totalDigits |
指定允许的最大数字位数。必须大于零 |
whiteSpace |
指定如何处理空格(换行符、制表符、空格和回车符) |
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注