传知_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属性有点类似javapackage语句

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

定义对 simpleTypesimpleContent 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:不允许派生。

restrictionlistunion,这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元素时,还可以使用minOccursmaxOccurs两个属性,但只在如下两种情况下:

         <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种是列表类型:

IDREFSENTITIEDNMTOKENS三者是采用列表方式派生的新类型。

内建派生类型中没有包含联合类型

限制联合类型:

Enumeration

pattern

原创粉丝点击