传知_6_xml_schema_
来源:互联网 发布:unity3d 3dsmax 编辑:程序博客网 时间:2024/06/05 06:18
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=” http://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的内置类型继承关系图
www.w3.org/TR/xmlschema-2/
Schema的内置数据类型表
www.w3.org/TR/xmlschema-0/
Table 2. Simple Types Built In to XML Schema
Simple Type
Examples (delimited by commas)
Notes
string
Confirm this is electric
normalizedString
Confirm this is electric
see (3)
token
Confirm this is electric
see (4)
base64Binary
GpM7
hexBinary
0FB7
integer
...-1, 0, 1, ...
see (2)
positiveInteger
1, 2, ...
see (2)
negativeInteger
... -2, -1
see (2)
nonNegativeInteger
0, 1, 2, ...
see (2)
nonPositiveInteger
... -2, -1, 0
see (2)
long
-9223372036854775808, ... -1, 0, 1, ... 9223372036854775807
see (2)
unsignedLong
0, 1, ... 18446744073709551615
see (2)
int
-2147483648, ... -1, 0, 1, ... 2147483647
see (2)
unsignedInt
0, 1, ...4294967295
see (2)
short
-32768, ... -1, 0, 1, ... 32767
see (2)
unsignedShort
0, 1, ... 65535
see (2)
byte
-128, ...-1, 0, 1, ... 127
see (2)
unsignedByte
0, 1, ... 255
see (2)
decimal
-1.23, 0, 123.4, 1000.00
see (2)
float
-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)
double
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
equivalent to double-precision 64-bit floating point, see (2)
boolean
true, false, 1, 0
duration
P1Y2M3DT10H30M12.3S
1 year, 2 months, 3 days, 10 hours, 30 minutes, and 12.3 seconds
dateTime
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)
date
1999-05-31
see (2)
time
13:20:00.000, 13:20:00.000-05:00
see (2)
gYear
1999
1999, see (2) (5)
gYearMonth
1999-02
the month of February 1999, regardless of the number of days, see (2) (5)
gMonth
--05
May, see (2) (5)
gMonthDay
--05-31
every May 31st, see (2) (5)
gDay
---31
the 31st day, see (2) (5)
Name
shipTo
XML 1.0 Name type
QName
po:USAddress
XML Namespace QName
NCName
USAddress
XML Namespace NCName, i.e. a QName without the prefix and colon
anyURI
http://www.example.com/,
http://www.example.com/doc.html#ID5
language
en-GB, en-US, fr
valid values for xml:lang as defined in XML 1.0
ID
XML 1.0 ID attribute type, see (1)
IDREF
XML 1.0 IDREF attribute type, see (1)
IDREFS
XML 1.0 IDREFS attribute type, see (1)
ENTITY
XML 1.0 ENTITY attribute type, see (1)
ENTITIES
XML 1.0 ENTITIES attribute type, see (1)
NOTATION
XML 1.0 NOTATION attribute type, see (1)
NMTOKEN
US,
Brésil
XML 1.0 NMTOKEN attribute type, see (1)
NMTOKENS
US UK,
Brésil Canada Mexique
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 元素
元素
解释
all
规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。
annotation
annotation 元素是一个顶层元素,规定 schema 的注释。
any
使创作者可以通过未被 schema 规定的元素来扩展 XML 文档。
anyAttribute
使创作者可以通过未被 schema 规定的属性来扩展 XML 文档。
appInfo
规定 annotation 元素中应用程序要使用的信息。
attribute
定义一个属性。
attributeGroup
定义在复杂类型定义中使用的属性组。
choice
仅允许在 <choice> 声明中包含一个元素出现在包含元素中。
complexContent
定义对复杂类型(包含混合内容或仅包含元素)的扩展或限制。
complexType
定义复杂类型。
documentation
定义 schema 中的文本注释。
element
定义元素。
extension
扩展已有的 simpleType 或 complexType 元素。
field
规定 XPath 表达式,该表达式规定用于定义标识约束的值。
group
定义在复杂类型定义中使用的元素组。
import
向一个文档添加带有不同目标命名空间的多个 schema。
include
向一个文档添加带有相同目标命名空间的多个 schema。
key
指定属性或元素值(或一组值)必须是指定范围内的键。
keyref
规定属性或元素值(或一组值)对应指定的 key 或 unique 元素的值。
list
把简单类型定义为指定数据类型的值的一个列表。
notation
描述 XML 文档中非 XML 数据的格式。
redefine
重新定义从外部架构文件中获取的简单和复杂类型、组和属性组。
restriction
定义对 simpleType、simpleContent 或 complexContent 的约束。
schema
定义 schema 的根元素。
selector
指定 XPath 表达式,该表达式为标识约束选择一组元素。
sequence
要求子元素必须按顺序出现。每个子元素可出现 0 到任意次数。
simpleContent
包含对 complexType 元素的扩展或限制且不包含任何元素。
simpleType
定义一个简单类型,规定约束以及关于属性或仅含文本的元素的值的信息。
union
定义多个 simpleType 定义的集合。
unique
指定属性或元素值(或者属性或元素值的组合)在指定范围内必须是唯一的。
XSD Restrictions/Facets for Datatypes
参阅 XSD 限定 / Facets
限定
描述
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
- 传知_6_xml_schema_
- 传知_10_struts2
- 传知_1
- 传知_2_mysql
- 传知_3_jdbc
- 传知_4_ajax
- 传知_5_xml_dtd_
- 传知_7_xml_
- 传知_8_ant
- 传知_9_svn___
- 传知_11_strus1
- 传知_12_dwr
- 传知_13_hibernate
- 传知_14_jpa
- 传知_14_ejb3
- 传知_15_spring
- 传知_10_struts2_A
- 传知_10_struts2_B
- 传知_2_mysql
- 传知_3_jdbc
- 传知_4_ajax
- expressjs 源码研究
- 传知_5_xml_dtd_
- 传知_6_xml_schema_
- 传知_7_xml_
- 传知_8_ant
- 传知_9_svn___
- 发在在
- 传知_11_strus1
- 传知_12_dwr
- 几个常用的 WinDbg 命令
- 传知_13_hibernate