Schema: shema: shema:
三大优势:
可读性更好
支持为元素内容或属性值指定数据类型,功能更完鄯,更强大
可针对未来的需求进行扩展
DTD采用了非XML的语法 (不支持数据类型,可扩展性差,)
Schema采用XML语法 (根元素是<xs:schema>)
可分两类: (为解决XML元素名可能冲突的问题,W3C公司建议在元素名前加上公司域名全拼,中间用英文冒号隔开)
无命名空间 namespace
有命名空间
--------------------有命名空间的-----------------------------------------------------------------
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema
targetNamespace=”http://crazyit.org”
xmln=” http://crazyit.org” >
</xs:schema>
targetNamespace属性有点类似java的package语句
xmlns 作用是为命名空间起个短名 为空
为命名空间起短名时,最多只能有一个命名空间省略短名
--------------------没命名空间的-----------------------------------------------------------------
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema >
</xs:schema>
DEMO
Xml文档
<ci:图书xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
Xsi:schemaLocation=”crazyit[X1] .org first[X2] .xsd “ >
</ci:图书>
DTD也支持命名空间 DEMO
Bin 二进制
Oct 八进制
Hex 十六进制
16 bit = 2 byte 16 位每个字符占两个字节
从宏观上看,Schema支持的数据类型分为两大类:
简单类型:既适合作为元素的类型,也适合作为XML属性的类型
复杂类型:只能作为XML元素类型
简单类型:
内建类型
内建基本类型 内建派生类型[X3]
自定义类型
内建类型+限制 自定义列表类型 列表类型+限制 自定义联合类型 联合类型+限制
Schema支持的派生方式如下3种:
限制:使用<restriction.../>为原有类型增加一个或多个额外的约束
列表:使用<list.../>元素定义。也称列表类型
联合:使用<union.../>元素定义,用于将多个已有的数据类型联合起来。也称联合类型
Schema的内置类型继承关系图
Schema的内置数据类型表
Table 2. Simple Types Built In to XML Schema | ||
Simple Type | Examples (delimited by commas) | Notes |
Confirm this is electric |
| |
Confirm this is electric | see (3) | |
Confirm this is electric | see (4) | |
GpM7 |
| |
0FB7 |
| |
...-1, 0, 1, ... | see (2) | |
1, 2, ... | see (2) | |
... -2, -1 | see (2) | |
0, 1, 2, ... | see (2) | |
... -2, -1, 0 | see (2) | |
-9223372036854775808, ... -1, 0, 1, ... 9223372036854775807 | see (2) | |
0, 1, ... 18446744073709551615 | see (2) | |
-2147483648, ... -1, 0, 1, ... 2147483647 | see (2) | |
0, 1, ...4294967295 | see (2) | |
-32768, ... -1, 0, 1, ... 32767 | see (2) | |
0, 1, ... 65535 | see (2) | |
-128, ...-1, 0, 1, ... 127 | see (2) | |
0, 1, ... 255 | see (2) | |
-1.23, 0, 123.4, 1000.00 | see (2) | |
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN | equivalent to single-precision 32-bit floating point, NaN is "not a number", see (2) | |
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN | equivalent to double-precision 64-bit floating point, see (2) | |
true, false, 1, 0 |
| |
P1Y2M3DT10H30M12.3S | 1 year, 2 months, 3 days, 10 hours, 30 minutes, and 12.3 seconds | |
1999-05-31T13:20:00.000-05:00 | May 31st 1999 at 1.20pm Eastern Standard Time which is 5 hours behind Co-Ordinated Universal Time, see (2) | |
1999-05-31 | see (2) | |
13:20:00.000, 13:20:00.000-05:00 | see (2) | |
1999 | 1999, see (2) (5) | |
1999-02 | the month of February 1999, regardless of the number of days, see (2) (5) | |
--05 | May, see (2) (5) | |
--05-31 | every May 31st, see (2) (5) | |
---31 | the 31st day, see (2) (5) | |
shipTo | XML 1.0 Name type | |
po:USAddress | XML Namespace QName | |
USAddress | XML Namespace NCName, i.e. a QName without the prefix and colon | |
|
| |
en-GB, en-US, fr | valid values for xml:lang as defined in XML 1.0 | |
| XML 1.0 ID attribute type, see (1) | |
| XML 1.0 IDREF attribute type, see (1) | |
| XML 1.0 IDREFS attribute type, see (1) | |
| XML 1.0 ENTITY attribute type, see (1) | |
| XML 1.0 ENTITIES attribute type, see (1) | |
| XML 1.0 NOTATION attribute type, see (1) | |
| XML 1.0 NMTOKEN attribute type, see (1) | |
| XML 1.0 NMTOKENS attribute type, i.e. a whitespace separated list of NMTOKEN's, see (1) |
字符串数据类型
请注意,所有以下的数据类型均衍生于字符串数据类型(除了字符串数据类型本身)!
名称 | 描述 |
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 | 不包含换行符、回车或制表符、开头或结尾空格或者多个连续空格的字符串 |
日期和时间数据类型
名称 | 描述 |
date | 定义一个日期值 |
dateTime | 定义一个日期和时间值 |
duration | 定义一个时间间隔 |
gDay | 定义日期的一个部分 - 天 (DD) |
gMonth | 定义日期的一个部分 - 月 (MM) |
gMonthDay | 定义日期的一个部分 - 月和天 (MM-DD) |
gYear | 定义日期的一个部分 - 年 (YYYY) |
gYearMonth | 定义日期的一个部分- 年和月 (YYYY-MM) |
time | 定义一个时间值 |
数值数据类型
请注意,下面所有的数据类型均源自于十进制数据类型(除 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 位整数 |
XSD 元素
元素 | 解释 |
规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。 | |
annotation 元素是一个顶层元素,规定 schema 的注释。 | |
使创作者可以通过未被 schema 规定的元素来扩展 XML 文档。 | |
使创作者可以通过未被 schema 规定的属性来扩展 XML 文档。 | |
规定 annotation 元素中应用程序要使用的信息。 | |
定义一个属性。 | |
定义在复杂类型定义中使用的属性组。 | |
仅允许在 <choice> 声明中包含一个元素出现在包含元素中。 | |
定义对复杂类型(包含混合内容或仅包含元素)的扩展或限制。 | |
定义复杂类型。 | |
定义 schema 中的文本注释。 | |
定义元素。 | |
扩展已有的 simpleType 或 complexType 元素。 | |
规定 XPath 表达式,该表达式规定用于定义标识约束的值。 | |
定义在复杂类型定义中使用的元素组。 | |
向一个文档添加带有不同目标命名空间的多个 schema。 | |
向一个文档添加带有相同目标命名空间的多个 schema。 | |
指定属性或元素值(或一组值)必须是指定范围内的键。 | |
规定属性或元素值(或一组值)对应指定的 key 或 unique 元素的值。 | |
把简单类型定义为指定数据类型的值的一个列表。 | |
描述 XML 文档中非 XML 数据的格式。 | |
重新定义从外部架构文件中获取的简单和复杂类型、组和属性组。 | |
定义对 simpleType、simpleContent 或 complexContent 的约束。 | |
定义 schema 的根元素。 | |
指定 XPath 表达式,该表达式为标识约束选择一组元素。 | |
要求子元素必须按顺序出现。每个子元素可出现 0 到任意次数。 | |
包含对 complexType 元素的扩展或限制且不包含任何元素。 | |
定义一个简单类型,规定约束以及关于属性或仅含文本的元素的值的信息。 | |
定义多个 simpleType 定义的集合。 | |
指定属性或元素值(或者属性或元素值的组合)在指定范围内必须是唯一的。 |
XSD Restrictions/Facets for Datatypes
限定 | 描述 |
enumeration | 定义可接受值的一个列表 |
fractionDigits | 定义所允许的最大的小数位数。必须大于等于0。 |
length | 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。 |
maxExclusive | 定义数值的上限。所允许的值必须小于此值。 |
maxInclusive | 定义数值的上限。所允许的值必须小于或等于此值。 |
maxLength | 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。 |
minExclusive | 定义数值的下限。所允许的值必需大于此值。 |
minInclusive | 定义数值的下限。所允许的值必需大于或等于此值。 |
minLength | 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。 |
pattern | 定义可接受的字符的精确序列。 (正则表达式约束) |
totalDigits | 定义所允许的阿拉伯数字的精确位数。必须大于0。 |
whiteSpace | 定义空白字符(换行、回车、空格以及制表符)的处理方式。 |
Schema中定义类型有两种方式:
1. 匿名类型,这种方式的类型只能使用一次
2. 有名字的类型,这种方式定义的类型只能通过使用一次
定义类型<xs:simpleType>或<xs:complexType>作为Schema文档中根元素的子元素。
全局、有名字的类型:把<simpleType>作为<schema.../>子元素来定义。
局部、匿名类型。
1. 限制。12种约束。<xs:restriction
2. 列表。<xs:list 在原有类型的基础上,将它们变成复数,也就是列表。
还可对列表进行限制:
3. 联合。<xs:union [X4]
在Java语言里,使用final修饰的类将不可被继承。
Schema允许为simpleType指定final属性,该属性的值可以为:
#all:不允许派生。
restriction、list、union,这3个任意组合。
Schema允许为约束指定fixed属性,该属性用于指定派生新类型时,该约束的值不能被修改。
Schema还允许将多个Schema文档合并到一起,这也体现了Schema的可扩展性:
<include
<redefine>
<import>
这3个元素必须作为<schema>根元素的子元素,而且它们放在开始部分。
anyType 就是类似于DTD里的ANY。
复杂类型的元素可分为:
包含简单内容的复杂类型:元素不包含子元素,但它有属性。
包含复杂内容的复杂类型:元素包含了混合内容、子元素等。
定义简单类型使用simpleType
定义复杂类型使用complexType
- 包含简单内容,用<simpleContent> DEMO DEMO
- 包含复杂内容,用<complexContent>
创建复杂类型的方式:
1. 扩展简单类型。
可通过限制简单类型派生复杂类型吗? 不行!!!!
简单类型本来不是复杂类型,你还增加限制,怎么产生复杂类型?
简单类型限制的结果还是简单类型。
2. 限制包含简单内容的复杂类型。 DEMO
3. 扩展包含简单内容的复杂类型 DEMO DEMO
限制anyType派生新类型
DEMO DEMO2
包含子元素
DEMO DEMO2
使用element元素时,还可以使用minOccurs和maxOccurs两个属性,但只在如下两种情况下:
<element>元素里指定了ref属性 maxOccurs = “unbounded”
采用<element>元素定义局部元素时
空元素类型:
DEMO DEMO2
复制类型的进一步派生:
限制空元素类型DEMO
扩展空元素类型DEMO
限制包含子元素的类型DEMO
扩展包含子元素的类型EDMO
限制混合内容类型DEMO
扩展混合内容类型DEMO
阻止派生新的类型DEMO
全局属性DEMO 局部属性DEMO
元素替换: DEMO
替换元素和被替换元素都必须被全局形式来声明
要么有相同的数据类型,要么是派生类型
抽象元素 定义元素时abstract=”true” 不可以在XML文档中直接使用,只能使用它的替换元素来替换它
抽象类型 不可直接使用,如希望使用抽象类型的元素,必须为此元素sxi:type属性,指出其某个派生类型的元素DEMO
合并多个Schema元素:
Include元素 DEMO
Redefine元素 当成Include元素的增强版 DEMO
Import元素 DEMO
命名空间的名字
xsi:noNamespaceSchemaLocation="games.xsd" 无命名空间的xsd
xsd文件名
其实内建派兵类型中有3种是列表类型:
IDREFS、ENTITIED、NMTOKENS三者是采用列表方式派生的新类型。
内建派生类型中没有包含联合类型
限制联合类型:
Enumeration
pattern