ITPub博客

首页 > Linux操作系统 > Linux操作系统 > XML DTD Schema 学习-Schema 介绍

XML DTD Schema 学习-Schema 介绍

原创 Linux操作系统 作者:kirinri 时间:2008-12-01 17:17:38 0 删除 编辑

Schema 介绍:
有人会问,DTDSchema都是对XML文档的一种约束,为什么不就选其中之一,而又有Sche
ma
呢。因为DTD安全度太低了,也就是说它的约束定义能力不足,无法对XML实例文档做出

更细致的语义限制。其实细心的人会发现,在DTD中,只有一个数据类型,就是PCDATA(用
在元素中)和CDATA(用在属性中),在里面写日期也行,数字还行,字符更是没问题。而
Schema
正是针对这些DTD的缺点而设计的,Schema是完全使用XML作为描述手段,具有很强
的描述能力,扩展能力和处理维护能力等。下面让我们看一个简单的例子吧:
hello.xml
-------------------

Hello World!!

说明:
一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。

hello.xsd
----------


http://www.w3.org/2001/XMLSchema">


说明:
XML Schema
文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd
="
http://www.w3.org/2001/XMLSchema
,用元素定义实例文档中的元素,如gre
eting
xsd:string就是定义的数据类型了,其中的数据类型有很多,比如:
int,double,
dateTime,Boolean,long,integer,float,
等,总之Java等语言里有的数据类型它都有,但

要以“xsd:”开头。
让我们再看一个里面有子无素的例子:
customer.xml
-----------

teiki

No.237, Road Waitan, Shanghai


则可以写出以下的XML Schema文档:
customer.xsd
----------------
1:
2: http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:

9:

10:

11:

说明:
实例文档customer.xml中,元素含有两个子元素,在Schema中凡是有两个以上
的子元素,就认为是复杂类型的,所以我们在Schema文档中采用ComplexType来定义该元素
。表示有多个XML子元素。
sequence
表示子元素依次出现的顺序。
如果有多层子元素怎么办呢,同样的道理,有几层写几层,一直往下嵌就OK了,这里我要
说的是另一种方法,结构看上去会清晰一些。
address.xml
---------------

Teiki

<!-- address
追加一个地址子元素 -->
Zhejiang
Hangzhou
Xilu Road, No.121, 7F


下面就是采用ref元素来编写的这个Schema文档:
address2.xsd
----------------------
1:
2: http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:
9:

10:

11:

12:
13:
14:
15:
16:
17:
18:
19:

20:

21:

22:
23:

说明:
如果按正常的写法,应该把1321行的内容替换到每8行去,但这里使用ref元素可以直接
将其指向另一个模块,使文档更加具有可读性。
如果元素中包含属性怎么办呢?一样简单,只要在定义完子元素的后面再着定义属性就行
了。定义属性用“attribute”,还是举个例子吧
customer2.xml
---------------

Teiki
No.237, Road Waitan, Shanghai


这个例子和上面的一个例子差不多,只是在元素customer中设了一个属性id
customer2.xsd
------------------
1:
2: http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:
9:

10: <!--
增加属性定义 -->
11:
12:
13:
14:
15:
说明:

需要注意的一点是,属性和元素不是一家的,所以要把它放在sequence外面写,但它们都
customer的孩子,所以要写在complexType的里面。
下面再看一个例子:
order4-1.xsd
----------------------
1:
2:http://www.w3.org/2001/XMLSchema">
3:
4:
5:
6:
7:
8:

9:

10:

11:
12:
13:
14:
15:
16:
17:
18:

19:
20:

21:

22:

23:
24:
25:
26:
27:
28:
29:

30:

31:
32:
33:
34:
35:
36:

37:

38:
39:

上面的例子中,maxOccurs代表:相同元素最多出现的次数,与些相反的是minOccurs代表:
出现的最少次数。默认情况下两个都为“1”,如果把minOccurs设为“0”,表示该元素可
有可无。choice代表:可选的元素,也就是在这里面写的元素只能选其中之一,不能全写
simpleType代表自定义数据类型,也就是name里的并不是真正的数据类型,而是根据自
己的意愿定制的。restriction代表对某一数据类型做约束,也就是只能取其中范围之内符
合要求的,比如第2529行中,里面又有个元素enumeration代表枚举,也就是只能在枚举
的那几个中选一个,而下在的3636行,里面又有一对元素minInclusivemaxInclusive
代表类型的取值范围,也就是只能取大于等于minInclusive并且小于等于maxInclusive

数。
把这个Schema用在XML中是这样的:

http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSc
hemaLocation="D:\ProgramCode\Year2\XML\practice\temp.xsd">

7-5005-6450-3
3


xyb
3

<!--
注意下面这个是错的,因为超出了规定的范围 -->

7-5005-6450-3
13

从上面的注释到此,是错误的
-->

说明:

红色的部分是导入Schema的命令,绿色的是Schema文件的路径,如果用XMLSPY写时,会自
动加上。
对属性的设置,基本上和元素的差不多。比如:












这里我们讲id属性类型作为一种自定义数据类型idType。它的格式就是上面用到的也就是
类似于“7-5005-6450-3”样的。
而且,用attribute元素的use属性来定义是否是必须的属性。
required
是必须值,optional是可选值,prohibited是无属性值。default属性是默认值。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12476590/viewspace-504261/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-21

  • 博文量
    257
  • 访问量
    503346