Schema 教程.docx

上传人:b****6 文档编号:8152728 上传时间:2023-01-29 格式:DOCX 页数:66 大小:38.19KB
下载 相关 举报
Schema 教程.docx_第1页
第1页 / 共66页
Schema 教程.docx_第2页
第2页 / 共66页
Schema 教程.docx_第3页
第3页 / 共66页
Schema 教程.docx_第4页
第4页 / 共66页
Schema 教程.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

Schema 教程.docx

《Schema 教程.docx》由会员分享,可在线阅读,更多相关《Schema 教程.docx(66页珍藏版)》请在冰豆网上搜索。

Schema 教程.docx

Schema教程

目录

XSD首页2

XMLSchema简介2

为什么要使用XMLSchema?

3

如何使用XSD?

4

XSD-元素6

XSD简易元素8

XSD属性9

XSD限定/Facets10

XSD复合元素16

XSD复合空元素19

XSD复合类型-仅含元素20

XSD仅含文本复合元素20

XSD带有混合内容的复合类型22

XSD复合类型指示器23

XSD元素28

XSD元素30

XSD元素替换(ElementSubstitution)31

一个XSD实例33

XSD字符串数据类型40

XSD日期及时间数据类型(DateandTimeDataTypes)42

XSD数值数据类型(NumericDataTypes)45

XSD杂项数据类型(MiscellaneousDataTypes)47

您已经学习了XMLSchema,下一步学习什么呢?

48

XMLSchema参考手册48

XSD首页

XMLSchema是基于XML的DTD替代者。

XMLSchema描述XML文档的结构。

XMLSchema语言也称作XMLSchema定义(XMLSchemaDefinition,XSD)。

在此教程中,你将学习如何在应用程序中读取和创建XMLSchema语言,XMLSchema为何比DTD更加强大,以及如何在您的应用程序中使用XMLSchema。

XMLSchema简介

XMLSchema是基于XML的DTD替代者。

XMLSchema可描述XML文档的结构。

XMLSchema语言也可作为XSD(XMLSchemaDefinition)来引用。

您应当具备的基础知识

在继续学习之前,您需要对下面的知识有基本的了解:

●HTML/XHTML

●XML以及XML命名空间

●对DTD的基本了解

什么是XMLSchema?

XMLSchema的作用是定义XML文档的合法构建模块,类似DTD。

XMLSchema:

●定义可出现在文档中的元素

●定义可出现在文档中的属性

●定义哪个元素是子元素

●定义子元素的次序

●定义子元素的数目

●定义元素是否为空,或者是否可包含文本

●定义元素和属性的数据类型

●定义元素和属性的默认值以及固定值

XMLSchema是DTD的继任者

我们认为XMLSchema很快会在大部分网络应用程序中取代DTD。

理由如下:

●XMLSchema可针对未来的需求进行扩展

●XMLSchema更完善,功能更强大

●XMLSchema基于XML编写

●XMLSchema支持数据类型

●XMLSchema支持命名空间

XMLSchema是W3C标准

XMLSchema在2001年5月2日成为W3C标准。

为什么要使用XMLSchema?

XMLSchema比DTD更强大。

XMLSchema支持数据类型

XMLSchema最重要的能力之一就是对数据类型的支持。

通过对数据类型的支持:

●可更容易地描述允许的文档内容

●可更容易地验证数据的正确性

●可更容易地与来自数据库的数据一并工作

●可更容易地定义数据约束(datafacets)

●可更容易地定义数据模型(或称数据格式)

●可更容易地在不同的数据类型间转换数据

编者注:

数据约束,或称facets,是XMLSchema原型中的一个术语,中文可译为“面”,用来约束数据类型的容许值。

XMLSchema使用XML语法

另一个关于XMLSchema的重要特性是,它们由XML编写。

由XML编写XMLSchema有很多好处:

●不必学习新的语言

●可使用XML编辑器来编辑Schema文件

●可使用XML解析器来解析Schema文件

●可通过XMLDOM来处理Schema

●可通过XSLT来转换Schema

XMLSchema可保护数据通信

当数据从发送方被发送到接受方时,其要点是双方应有关于内容的相同的“期望值”。

通过XMLSchema,发送方可以用一种接受方能够明白的方式来描述数据。

一种数据,比如"03-11-2004",在某些国家被解释为11月3日,而在另一些国家为当作3月11日。

但是一个带有数据类型的XML元素,比如:

2004-03-11,可确保对内容一致的理解,这是因为XML的数据类型"date"要求的格式是"YYYY-MM-DD"。

XMLSchema可扩展

XMLSchema是可扩展的,因为它们由XML编写。

通过可扩展的Schema定义,您可以:

●在其他Schema中重复使用您的Schema

●创建由标准类型衍生而来的您自己的数据类型

●在相同的文档中引用多重的Schema

形式良好是不够的

我们把符合XML语法的文档称为形式良好的XML文档,比如:

●它必须以XML声明开头

●它必须拥有唯一的根元素

●开始标签必须与结束标签相匹配

●元素对大小写敏感

●所有的元素都必须关闭

●所有的元素都必须正确地嵌套

●必须对特殊字符使用实体

即使文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。

请考虑下面的情况:

您订购的了5打激光打印机,而不是5台。

通过XMLSchema,大部分这样的错误会被您的验证软件捕获到。

如何使用XSD?

XML文档可对DTD或XMLSchema进行引用。

一个简单的XML文档:

请看这个名为"note.xml"的XML文档:

xmlversion="1.0"?

>

George

John

Reminder

Don'tforgetthemeeting!

DTD文件

下面这个例子是名为"note.dtd"的DTD文件,它对上面那个XML文档的元素进行了定义:

ELEMENTnote(to,from,heading,body)>

ELEMENTto(#PCDATA)>

ELEMENTfrom(#PCDATA)>

ELEMENTheading(#PCDATA)>

ELEMENTbody(#PCDATA)>

第1行定义note元素有四个子元素:

"to,from,heading,body"。

第2-5行定义了to,from,heading,body元素的类型是"#PCDATA"。

XMLSchema

下面这个例子是一个名为"note.xsd"的XMLSchema文件,它定义了上面那个XML文档的元素:

xmlversion="1.0"?

>

schemaxmlns:

xs="http:

//www.w3.org/2001/XMLSchema"

targetNamespace=""

xmlns=""

elementFormDefault="qualified">

elementname="note">

complexType>

sequence>

elementname="to"type="xs:

string"/>

elementname="from"type="xs:

string"/>

elementname="heading"type="xs:

string"/>

elementname="body"type="xs:

string"/>

sequence>

complexType>

element>

schema>

note元素是一个复合类型,因为它包含其他的子元素。

其他元素(to,from,heading,body)是简易类型,因为它们没有包含其他元素。

您将在下面的章节学习更多有关复合类型和简易类型的知识。

对DTD的引用

此文件包含对DTD的引用:

xmlversion="1.0"?

>

DOCTYPEnoteSYSTEM"

George

John

Reminder

Don'tforgetthemeeting!

对XMLSchema的引用

此文件包含对XMLSchema的引用:

xmlversion="1.0"?

>

xmlns=""

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="note.xsd">

George

John

Reminder

Don'tforgetthemeeting!

 

XSD-元素

元素是每一个XMLSchema的根元素。

元素

元素是每一个XMLSchema的根元素:

xmlversion="1.0"?

>

schema>

...

...

schema>

元素可包含属性。

一个schema声明往往看上去类似这样:

xmlversion="1.0"?

>

schemaxmlns:

xs="http:

//www.w3.org/2001/XMLSchema"

targetNamespace=""

xmlns=""

elementFormDefault="qualified">

...

...

schema>

代码解释:

下面的片断:

xmlns:

xs="http:

//www.w3.org/2001/XMLSchema"

显示schema中用到的元素和数据类型来自命名空间"http:

//www.w3.org/2001/XMLSchema"。

同时它还规定了来自命名空间"http:

//www.w3.org/2001/XMLSchema"的元素和数据类型应该使用前缀xs:

这个片断:

targetNamespace=""

显示被此schema定义的元素(note,to,from,heading,body)来自命名空间:

""。

这个片断:

xmlns=""

指出默认的命名空间是""。

这个片断:

elementFormDefault="qualified"

指出任何XML实例文档所使用的且在此schema中声明过的元素必须被命名空间限定。

在XML文档中引用Schema

此XML文档含有对XMLSchema的引用:

xmlversion="1.0"?

>

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="note.xsd">

George

John

Reminder

Don'tforgetthemeeting!

代码解释:

下面的片断:

xmlns=""

规定了默认命名空间的声明。

此声明会告知schema验证器,在此XML文档中使用的所有元素都被声明于""这个命名空间。

一旦您拥有了可用的XMLSchema实例命名空间:

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

您就可以使用schemaLocation属性了。

此属性有两个值。

第一个值是需要使用的命名空间。

第二个值是供命名空间使用的XMLschema的位置:

xsi:

schemaLocation="note.xsd"

XSD简易元素

XMLSchema可定义XML文件的元素。

简易元素指那些只包含文本的元素。

它不会包含任何其他的元素或属性。

什么是简易元素?

简易元素指那些仅包含文本的元素。

它不会包含任何其他的元素或属性。

不过,“仅包含文本”这个限定却很容易造成误解。

文本有很多类型。

它可以是XMLSchema定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。

您也可向数据类型添加限定(即facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。

定义简易元素

定义简易元素的语法:

elementname="xxx"type="yyy"/>

此处xxx指元素的名称,yyy指元素的数据类型。

XMLSchema拥有很多内建的数据类型。

最常用的类型是:

●xs:

string

●xs:

decimal

●xs:

integer

●xs:

boolean

●xs:

date

●xs:

time

例子:

这是一些XML元素:

Smith

28

1980-03-27

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

elementname="lastname"type="xs:

string"/>

elementname="age"type="xs:

integer"/>

elementname="dateborn"type="xs:

date"/>

简易元素的默认值和固定值

简易元素可拥有指定的默认值或固定值。

当没有其他的值被规定时,默认值就会自动分配给元素。

在下面的例子中,缺省值是"red":

elementname="color"type="xs:

string"default="red"/>

固定值同样会自动分配给元素,并且您无法规定另外一个值。

在下面的例子中,固定值是"red":

elementname="color"type="xs:

string"fixed="red"/>

XSD属性

所有的属性均作为简易类型来声明。

什么是属性?

简易元素无法拥有属性。

假如某个元素拥有属性,它就会被当作某种复合类型。

但是属性本身总是作为简易类型被声明的。

如何声明属性?

定义属性的语法是:

attributename="xxx"type="yyy"/>

在此处,xxx指属性名称,yyy则规定属性的数据类型。

XMLSchema拥有很多内建的数据类型。

最常用的类型是:

●xs:

string

●xs:

decimal

●xs:

integer

●xs:

boolean

●xs:

date

●xs:

time

实例

这是带有属性的XML元素:

Smith

这是对应的属性定义:

attributename="lang"type="xs:

string"/>

属性的默认值和固定值

属性可拥有指定的默认值或固定值。

当没有其他的值被规定时,默认值就会自动分配给元素。

在下面的例子中,缺省值是"EN":

attributename="lang"type="xs:

string"default="EN"/>

固定值同样会自动分配给元素,并且您无法规定另外的值。

在下面的例子中,固定值是"EN":

attributename="lang"type="xs:

string"fixed="EN"/>

可选的和必需的属性

在缺省的情况下,属性是可选的。

如需规定属性为必选,请使用"use"属性:

attributename="lang"type="xs:

string"use="required"/>

对内容的限定

当XML元素或属性拥有被定义的数据类型时,就会向元素或属性的内容添加限定。

假如XML元素的类型是"xs:

date",而其包含的内容是类似"HelloWorld"的字符串,元素将不会(通过)验证。

通过XMLschema,您也可向您的XML元素及属性添加自己的限定。

这些限定被称为facet(编者注:

意为(多面体的)面,可译为限定面)。

您会在下一节了解到更多有关facet的知识。

XSD限定/Facets

限定(restriction)用于为XML元素或者属性定义可接受的值。

对XML元素的限定被称为facet。

对值的限定

下面的例子定义了带有一个限定且名为"age"的元素。

age的值不能低于0或者高于120:

elementname="age">

simpleType>

restrictionbase="xs:

integer">

minInclusivevalue="0"/>

maxInclusivevalue="120"/>

restriction>

simpleType>

element>

对一组值的限定

如需把XML元素的内容限制为一组可接受的值,我们要使用枚举约束(enumerationconstraint)。

下面的例子定义了带有一个限定的名为"car"的元素。

可接受的值只有:

Audi,Golf,BMW:

elementname="car">

simpleType>

restrictionbase="xs:

string">

enumerationvalue="Audi"/>

enumerationvalue="Golf"/>

enumerationvalue="BMW"/>

restriction>

simpleType>

element>

上面的例子也可以被写为:

elementname="car"type="carType"/>

simpleTypename="carType">

restrictionbase="xs:

string">

enumerationvalue="Audi"/>

enumerationvalue="Golf"/>

enumerationvalue="BMW"/>

restriction>

simpleType>

注释:

在这种情况下,类型"carType"可被其他元素使用,因为它不是"car"元素的组成部分。

对一系列值的限定

如需把XML元素的内容限制定义为一系列可使用的数字或字母,我们要使用模式约束(patternconstraint)。

下面的例子定义了带有一个限定的名为"letter"的元素。

可接受的值只有小写字母a-z其中的一个:

elementname="letter">

simpleType>

restrictionbase="xs:

string">

patternvalue="[a-z]"/>

restriction>

simpleType>

element>

下一个例子定义了带有一个限定的名为"initials"的元素。

可接受的值是大写字母A-Z其中的三个:

elementname="initials">

simpleType>

restrictionbase="xs:

string">

patternvalue="[A-Z][A-Z][A-Z]"/>

restriction>

simpleType>

element>

下一个例子也定义了带有一个限定的名为"initials"的元素。

可接受的值是大写或小写字母a-z其中的三个:

elementname="initials">

simpleType>

restrictionbase="xs:

string">

patternvalue="[a-zA-Z][a-zA-Z][a-zA-Z]"/>

restriction>

simpleType>

element>

下一个例子定义了带有一个限定的名为"choice的元素。

可接受的值是字母x,y或z中的一个:

elementname="choice">

simpleType>

restrictionbase="xs:

string">

patternvalue="[xyz]"/>

restriction>

simpleType>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1