以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  趣味XML Schema入门 (1)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=25813)


--  作者:98900969r
--  发布时间:12/23/2005 5:07:00 AM

--  趣味XML Schema入门 (1)
(这是一种尝试,不喜欢的朋友请多包涵,

XML schema 是什么?
一个XML schema,或者叫XML模式,是对一个(或一组)XML文件的结构的说明,它也可以对其内容进行一些约束性和语义上的说明。

熟悉数据库的人可以把XML schema看成是数据库中数据模式在XML技术中的对应物。

为什么要给XML文件加个schema?
给一个(或一组)XML文件关联一个schema有不少好处,甚至可以说是必须的。没有哪个程序或者人,可以以一种有意义的方式处理任意的XML文件。每个程序都要假定它所要处理的XML文件具有特定的结构和内容,当给它处理的文件不是这种结构或内容时,它就处理不了。例如,把一个svg文件给没有安装svg插件的浏览器,浏览器无法呈现这个svg所表示那幅图画。

反过来说,当我们想使用以XML文件形式接收输入的某个程序时,那我们就得按照这个程序所能接受的格式来准备XML文件。我们不想把这个程序的源代码拿来看,来分析它究竟要接受什么样的格式,我们希望这个程序提供一个简洁而严格的关于它所接受的输入格式的说明书。这个说明书可以写成电视机的使用说明书那样,告诉我们怎么用电视机。只有一点不好,万一我们看了说明书之后,还是出了点什么错把电视机搞坏了,没有人赔。假设我们是一家给别人准备数据的公司,如果我们看了客户提供的数据格式说明,还是出了错,那就要么会挨骂,要么失去一个客户,说不定还得付出赔偿。所以问题在于,我们需要的不仅仅是数据格式的说明,还希望能在我们把数据呈交给客户或者某个程序去处理之前就看看数据到底符合不符合这个格式。这说明,这个格式不能象电视机说明书那样只能给人读一读,它得能被计算机处理,被计算机拿去检验数据的格式是不是有错。

这样一种能被计算机处理的关于XML文件结构和内容的说明,就是一个XML schema。所以,它的用处就在于提供一个可以被计算机付诸检验的数据格式说明。而拿XML schema去检验XML文件的程序叫做schema处理程序。所以,需要记住,不是一个schema自己去验证XML文件,它只是规定XML文件的格式,然后被拿去验证XML文件。

你可能要说,又不是schema可以检验数据,那为什么不直接写个程序去验证数据,还搞个schema出来,这不是多此一举吗!得记住,我们是一家数据公司,我们有很多客户,每个客户的数据格式都不一样。我们呢,只有5个人,而且只有一个mm会写程序,如果要她为每个客户的数据格式都写验证程序,那她不睡觉也写不完,而我们没钱再多请几个程序员,因为程序员对薪水的要求一般都很高。而其他四个人呢,常常没事做,帮不上,正好偷懒。老板很精明,他让这个mm程序员写一个通用的数据验证器,这个验证器针对不同客户的数据格式要求去检验他们各自的数据。mm说可以,但是得把每个客户的数据格式告诉这个程序。程序终于写出来了。这个时候其他四个人就帮得上忙了,就不能偷懒了。他们不用写程序,他们只要写数据格式说明就行了。

好了,我们不只五个人,我们有几个mm程序员,她们愿意加班加点的写程序,就是不想写个通用的验证器。她们很聪明,知道那样的话等于是自掘坟墓。问题是这个世界上又牛又傻的程序员做出来了那样的通用程序。我们不用不行,不用我们的公司就会倒闭,因为我们验证数据的成本比别人高得多。我们得用才能保住饭碗。倒也好,mm们现在不用加班加点了,轻轻松松写schema。

XML schema是怎样规定数据格式的
一个XML schema把XML 中的数据项列出来,指明哪个在外面,哪个在里面;哪个在前面,哪个在后面;哪些是一定得有的,哪些是可以没有的;哪个有的时候,另外某一个就一定得有,或者一定没有;哪个得是正数,哪个不能大于1000,等等,等等,这样的事。

我决定用schema了,怎么写啊?--- DTD与W3C XML Schema
那些傻牛人已经发明了几种用来说明XML文件格式的办法,其中听得比较多的是DTD和(W3C)XML Schema。W3C是World Wide Web Consortium 的缩写,因为有3个W开头,就成了W3。这和“披头四”有点象,Beatles乐队的音译,而他们是四个人,也译作“披头士”。

DTD是Document Type Definition的缩写,即文档类型定义。它出现在(W3C)XML Schema之前。之所以有这么个奇怪的名字,是因为它本来就不是用来说明XML数据文件格式的,它是用来说明XML文档格式的。搞什么怪啊,XML数据文件不就是XML文档吗?不骗你,真的很有些不一样!

如果我们写一篇文章,敲到计算机里面去,存下来,得到一个文档,如果这个文档是XML格式的,那就是XML文档。你要说,别唬人了,有谁用XML做文档啊,地球人都用word。非也!有很多人用XML做文档,XML的前身就是专门用来做文档的,而DTD实际上是给那个前身用的,后来也给XML用。那个前身我们就不多说了,省得跑题。另外一个例子,我们有很多人做网页,网页是什么?文档,而且可以说是XML文档,因为HTML是XML的那个前身的一个文档类型(或者说格式)而已。而XTHML就更是XML文档了,真真正正的XML文档。

有DTD就好了,干么要弄几个办法来写格式说明,这不是添乱嘛!当然不是。刚刚说了DTD不是用来说明数据格式的。如果把DTD拿来做数据格式说明并非完全不行,但是它有两个不足的地方。它只能说明“哪个在外面,哪个在里面;哪个在前面,哪个在后面;哪些是一定得有的,哪些是可以没有的;哪个有的时候,另外某一个就一定得有,或者一定没有;”这样结构方面的事情,不能说明“这个不能是负数,那个不能大于100,这个的名字得是英文的,那个的名字得是中文的”这些事情。用计算机术语来说,DTD没有提供数据类型,或者说它只提供了一种数据类型,文本。所以它很自觉地把自己叫做文档类型定义,而不敢自称为数据模式定义。另外一个问题是数据类型问题的引申。我们现在都用面向对象的东西了,我们希望数据格式也是面向对象的。而DTD有点老派,它被发明的时候,面向对象还在实验室里。

XML把自己定位在通用数据交换技术这样一个地位,却没办法准确定义数据格式,这很尴尬。所以W3C急忙忙要推出XML Schema。XML从一出世就被大家追捧,而它那时其实还不象大家说的那么好(可能现在也不是,但是它的确是个好东东,可以更好)。不能让大家失望啊,赶紧弥补先天不足。就有了XML Schema(和其他等等XML技术)。XML Schema 解决了上面说的那两个问题。对第一个问题,它解决得很漂亮。而对第二个问题,还有争议。争议归争议,大家已经迫不及待地用开了。

[此贴子已经被作者于2005-12-23 7:07:52编辑过]

--  作者:vampire_shirley
--  发布时间:12/23/2005 4:19:00 PM

--  
呵呵,有意思
--  作者:fengzhiyi
--  发布时间:12/29/2005 4:23:00 PM

--  
好文章、推荐,呵呵,那个前身好像是sgml,不用调大家胃口了。
--  作者:jimgreen2002
--  发布时间:1/4/2006 11:40:00 AM

--  
不知所云
--  作者:victorwish
--  发布时间:1/5/2006 11:15:00 AM

--  
很好的文章,幽默好懂。
--  作者:gyz2
--  发布时间:1/11/2006 6:46:00 PM

--  
写的不错啊
--  作者:半粒沙
--  发布时间:1/16/2006 9:55:00 AM

--  
可以说,XML目前还不像HTML这样的流行,在中国可以说就更少了,我们都是“先行者”啊,一起努力吧~!
--  作者:Afanty
--  发布时间:4/19/2006 11:57:00 AM

--  
说的很清晰,看来对XML Schema理解的相当透彻了!
--  作者:nkdanfer
--  发布时间:4/22/2006 3:28:00 PM

--  
不错不错。读起来轻松幽默直白
--  作者:ba_yni
--  发布时间:5/3/2006 5:01:00 PM

--  
一个XML Schema 入门者给你致敬了!
--  作者:zhouzhou
--  发布时间:5/22/2006 9:09:00 AM

--  
写的很好噢,很有个性的。好喜欢,相信以后这样的文章多点,既轻松又好懂
--  作者:作毕设
--  发布时间:5/26/2006 2:49:00 PM

--  
一个字——透!
--  作者:ydiandian
--  发布时间:6/12/2006 8:09:00 AM

--  
我也谢过了
--  作者:dongdong
--  发布时间:6/12/2006 9:59:00 AM

--  
辛苦 辛苦。
受益了,呵呵……
--  作者:wyguanshui
--  发布时间:6/15/2006 12:32:00 PM

--  
踩踩
--  作者:meim
--  发布时间:6/20/2006 5:59:00 PM

--  
太好了!!
--  作者:kicochen
--  发布时间:6/21/2006 10:12:00 AM

--  
讲得相当透彻,一看就懂...不错不错...就是少了些实例...还是非常感谢...
--  作者:nancyln
--  发布时间:6/29/2006 1:04:00 PM

--  
偶是个初学者,看着很有趣!不枯燥了!
--  作者:iamlinzi
--  发布时间:9/9/2006 7:03:00 PM

--  
very good
--  作者:ywjnet
--  发布时间:9/11/2006 11:47:00 AM

--  
好文章,通俗易懂,多写些呀!
--  作者:zhugy666
--  发布时间:9/12/2006 11:55:00 AM

--  
好文章
--  作者:eoeac
--  发布时间:9/19/2006 2:46:00 PM

--  
收益非浅,谢谢楼

--  作者:snowbeer
--  发布时间:10/6/2006 4:16:00 PM

--  
好!
--  作者:chyzw
--  发布时间:11/4/2006 10:36:00 PM

--  
辛苦楼主了。。
希望继续出好东西。。
--  作者:onionppp
--  发布时间:11/6/2006 4:19:00 PM

--  
写的透彻,而又有幽默。。学习中。。。。
--  作者:落地尘埃
--  发布时间:11/25/2006 2:23:00 PM

--  
不错啊,能学到些东西
--  作者:jvfans
--  发布时间:12/3/2006 8:28:00 PM

--  
有没有后续文章啊
写的很好啊,收了
--  作者:coco-cat
--  发布时间:12/7/2006 4:37:00 PM

--  
这两天刚开始学习schema,说的很浅显,适合我等初学者!
谢了,期待……
--  作者:huidian
--  发布时间:12/29/2006 2:11:00 PM

--  
不知道SOAP WSDL等在哪里能找到?
--  作者:YinglongMa
--  发布时间:2/2/2007 7:46:00 PM

--  
thanks for your explanation in a humoristic manner.
--  作者:handsom
--  发布时间:8/30/2007 4:46:00 PM

--  
好文章,看后就明白xml schema是什么了,非常感谢呀!只是想知道gml究竟是干什么的

--  作者:lish
--  发布时间:9/12/2007 4:07:00 PM

--  
thans very much
--  作者:lish
--  发布时间:9/12/2007 4:08:00 PM

--  
thans very much
--  作者:枫飘天涯
--  发布时间:9/21/2007 10:45:00 PM

--  
楼主讲的不错 
明白了
--  作者:wzhm0301
--  发布时间:9/23/2007 4:13:00 PM

--  
厉害哦,刚开始学,来了个好地方啊
--  作者:gg256
--  发布时间:9/25/2007 5:22:00 PM

--  
说道点子上了!
--  作者:乌云
--  发布时间:10/8/2007 10:22:00 PM

--  
好不容易看完了。。还是不太明白,,,,嘻嘻,,
--  作者:PrimoJin
--  发布时间:10/9/2007 11:04:00 AM

--  
高啊。幽默。真后悔。学习Schema的第一遍文章没有看你的
--  作者:liguicheng
--  发布时间:10/26/2007 9:52:00 PM

--  
果然有趣,初学都来顶一下,
如果可以highlight重点的句子就更加very good 了,
so,我可以understand什么是XML schema了
--  作者:dandanyidian
--  发布时间:11/3/2007 3:13:00 PM

--  
想不通为什么要给XML文件加个schema或DTD
--  作者:vip_oyqd
--  发布时间:2/23/2008 9:53:00 PM

--  
好文章!能用通俗的话写出高深的道理,佩服!!
--  作者:86版dingpin
--  发布时间:2/24/2008 8:46:00 PM

--  

--  作者:86版dingpin
--  发布时间:2/24/2008 8:47:00 PM

--  

--  作者:lct10
--  发布时间:3/16/2008 12:50:00 PM

--  
呵呵,还是看不明白了,
--  作者:maiyude
--  发布时间:3/16/2008 3:58:00 PM

--  
Good article. It is no strange to me that you are selected by mit.
--  作者:xiaridexue
--  发布时间:3/20/2008 11:27:00 AM

--  
呵呵.写的不错!
--  作者:jinscott
--  发布时间:3/21/2008 10:46:00 PM

--  
写的还行,鼓励下
--  作者:yuwei5000
--  发布时间:3/27/2008 10:05:00 PM

--  
不错,有见解!
--  作者:lshaohe
--  发布时间:4/25/2008 4:16:00 PM

--  
很好,很强大
--  作者:1500053
--  发布时间:5/10/2008 9:12:00 PM

--  
3Q
--  作者:jingwan
--  发布时间:6/28/2008 7:06:00 PM

--  
学习
--  作者:Seu_why
--  发布时间:7/11/2008 3:26:00 PM

--  
哪有MM程序员啊
--  作者:lamp
--  发布时间:10/19/2008 5:16:00 PM

--  
谢谢,学到了很多哦,好论坛
--  作者:arena_zp
--  发布时间:11/29/2008 1:56:00 AM

--  
写得好~~
--  作者:xiaoxiaojn
--  发布时间:10/25/2011 11:02:00 AM

--  
很形象,谢谢了
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
173.828ms