Schema 教程Word格式.docx
《Schema 教程Word格式.docx》由会员分享,可在线阅读,更多相关《Schema 教程Word格式.docx(66页珍藏版)》请在冰豆网上搜索。
XMLSchema描述XML文档的结构。
XMLSchema语言也称作XMLSchema定义(XMLSchemaDefinition,XSD)。
在此教程中,你将学习如何在应用程序中读取和创建XMLSchema语言,XMLSchema为何比DTD更加强大,以及如何在您的应用程序中使用XMLSchema。
XMLSchema简介
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比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元素,比如:
<
datetype="
date"
>
2004-03-11<
/date>
,可确保对内容一致的理解,这是因为XML的数据类型"
要求的格式是"
YYYY-MM-DD"
。
XMLSchema可扩展
XMLSchema是可扩展的,因为它们由XML编写。
通过可扩展的Schema定义,您可以:
●在其他Schema中重复使用您的Schema
●创建由标准类型衍生而来的您自己的数据类型
●在相同的文档中引用多重的Schema
形式良好是不够的
我们把符合XML语法的文档称为形式良好的XML文档,比如:
●它必须以XML声明开头
●它必须拥有唯一的根元素
●开始标签必须与结束标签相匹配
●元素对大小写敏感
●所有的元素都必须关闭
●所有的元素都必须正确地嵌套
●必须对特殊字符使用实体
即使文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。
请考虑下面的情况:
您订购的了5打激光打印机,而不是5台。
通过XMLSchema,大部分这样的错误会被您的验证软件捕获到。
XML文档可对DTD或XMLSchema进行引用。
一个简单的XML文档:
请看这个名为"
note.xml"
的XML文档:
?
xmlversion="
1.0"
note>
to>
George<
/to>
from>
John<
/from>
heading>
Reminder<
/heading>
body>
Don'
tforgetthemeeting!
/body>
/note>
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文档的元素:
xs:
schemaxmlns:
xs="
http:
//www.w3.org/2001/XMLSchema"
targetNamespace="
xmlns="
elementFormDefault="
qualified"
elementname="
note"
<
complexType>
sequence>
to"
type="
string"
/>
from"
heading"
body"
/xs:
element>
note元素是一个复合类型,因为它包含其他的子元素。
其他元素(to,from,heading,body)是简易类型,因为它们没有包含其他元素。
您将在下面的章节学习更多有关复合类型和简易类型的知识。
对DTD的引用
此文件包含对DTD的引用:
DOCTYPEnoteSYSTEM"
对XMLSchema的引用
此文件包含对XMLSchema的引用:
note
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
note.xsd"
元素
元素是每一个XMLSchema的根元素。
元素是每一个XMLSchema的根元素:
...
元素可包含属性。
一个schema声明往往看上去类似这样:
代码解释:
下面的片断:
显示schema中用到的元素和数据类型来自命名空间"
同时它还规定了来自命名空间"
的元素和数据类型应该使用前缀xs:
这个片断:
显示被此schema定义的元素(note,to,from,heading,body)来自命名空间:
"
指出默认的命名空间是"
指出任何XML实例文档所使用的且在此schema中声明过的元素必须被命名空间限定。
在XML文档中引用Schema
此XML文档含有对XMLSchema的引用:
notexmlns="
规定了默认命名空间的声明。
此声明会告知schema验证器,在此XML文档中使用的所有元素都被声明于"
这个命名空间。
一旦您拥有了可用的XMLSchema实例命名空间:
您就可以使用schemaLocation属性了。
此属性有两个值。
第一个值是需要使用的命名空间。
第二个值是供命名空间使用的XMLschema的位置:
XSD简易元素
XMLSchema可定义XML文件的元素。
简易元素指那些只包含文本的元素。
它不会包含任何其他的元素或属性。
什么是简易元素?
简易元素指那些仅包含文本的元素。
不过,“仅包含文本”这个限定却很容易造成误解。
文本有很多类型。
它可以是XMLSchema定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。
您也可向数据类型添加限定(即facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。
定义简易元素
定义简易元素的语法:
xxx"
yyy"
此处xxx指元素的名称,yyy指元素的数据类型。
XMLSchema拥有很多内建的数据类型。
最常用的类型是:
●xs:
string
decimal
integer
boolean
date
time
例子:
这是一些XML元素:
lastname>
Smith<
/lastname>
age>
28<
/age>
dateborn>
1980-03-27<
/dateborn>
这是相应的简易元素定义:
lastname"
age"
integer"
dateborn"
简易元素的默认值和固定值
简易元素可拥有指定的默认值或固定值。
当没有其他的值被规定时,默认值就会自动分配给元素。
在下面的例子中,缺省值是"
red"
:
color"
default="
固定值同样会自动分配给元素,并且您无法规定另外一个值。
在下面的例子中,固定值是"
fixed="
XSD属性
所有的属性均作为简易类型来声明。
什么是属性?
简易元素无法拥有属性。
假如某个元素拥有属性,它就会被当作某种复合类型。
但是属性本身总是作为简易类型被声明的。
如何声明属性?
定义属性的语法是:
attributename="
在此处,xxx指属性名称,yyy则规定属性的数据类型。
实例
这是带有属性的XML元素:
lastnamelang="
EN"
这是对应的属性定义:
lang"
属性的默认值和固定值
属性可拥有指定的默认值或固定值。
固定值同样会自动分配给元素,并且您无法规定另外的值。
可选的和必需的属性
在缺省的情况下,属性是可选的。
如需规定属性为必选,请使用"
use"
属性:
use="
required"
对内容的限定
当XML元素或属性拥有被定义的数据类型时,就会向元素或属性的内容添加限定。
假如XML元素的类型是"
,而其包含的内容是类似"
HelloWorld"
的字符串,元素将不会(通过)验证。
通过XMLschema,您也可向您的XML元素及属性添加自己的限定。
这些限定被称为facet(编者注:
意为(多面体的)面,可译为限定面)。
您会在下一节了解到更多有关facet的知识。
XSD限定/Facets
限定(restriction)用于为XML元素或者属性定义可接受的值。
对XML元素的限定被称为facet。
对值的限定
下面的例子定义了带有一个限定且名为"
的元素。
age的值不能低于0或者高于120:
simpleType>
restrictionbase="
minInclusivevalue="
0"
maxInclusivevalue="
120"
restriction>
对一组值的限定
如需把XML元素的内容限制为一组可接受的值,我们要使用枚举约束(enumerationconstraint)。
下面的例子定义了带有一个限定的名为"
car"
可接受的值只有:
Audi,Golf,BMW:
enumerationvalue="
Audi"
Golf"
BMW"
上面的例子也可以被写为:
carType"
simpleTypename="
注释:
在这种情况下,类型"
可被其他元素使用,因为它不是"
元素的组成部分。
对一系列值的限定
如需把XML元素的内容限制定义为一系列可使用的数字或字母,我们要使用模式约束(patternconstraint)。
letter"
可接受的值只有小写字母a-z其中的一个:
patternvalue="
[a-z]"
下一个例子定义了带有一个限定的名为"
initials"
可接受的值是大写字母A-Z其中的三个:
[A-Z][A-Z][A-Z]"
下一个例子也定义了带有一个限定的名为"
可接受的值是大写或小写字母a-z其中的三个:
[a-zA-Z][a-zA-Z][a-zA-Z]"
choice的元素。
可接受的值是字母x,y或z中的一个:
choice"
[xyz]"
/xs