新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → 趣味XML Schema入门 (1) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 155547 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 趣味XML Schema入门 (1) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     98900969r 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      等级:大四寒假(收到MIT的Offer啦)
      文章:235
      积分:1555
      门派:XML.ORG.CN
      注册:2005/11/2

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给98900969r发送一个短消息 把98900969r加入好友 查看98900969r的个人资料 搜索98900969r在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看98900969r的博客楼主
    发贴心情 趣味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编辑过]

       收藏   分享  
    顶(1)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/23 5:07:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/23 18:40:11

    本主题贴数55,分页: [1] [2] [3] [4]... [6]

     *树形目录 (最近20个回帖) 顶端 
    主题:  趣味XML Schema入门 (1)(5347字) - 98900969r,2005年12月23日
        回复:  很形象,谢谢了(14字) - xiaoxiaojn,2011年10月25日
        回复:  写得好~~(8字) - arena_zp,2008年11月29日
        回复:  谢谢,学到了很多哦,好论坛(26字) - lamp,2008年10月19日
        回复:  哪有MM程序员啊(14字) - Seu_why,2008年7月11日
        回复:  学习(4字) - jingwan,2008年6月28日
        回复:  3Q(2字) - 1500053,2008年5月10日
        回复:  很好,很强大(12字) - lshaohe,2008年4月25日
        回复:  不错,有见解!(14字) - yuwei5000,2008年3月27日
        回复:  写的还行,鼓励下(16字) - jinscott,2008年3月21日
        回复:  呵呵.写的不错!(14字) - xiaridexue,2008年3月20日
        回复:  Good article. It is no strange to me that you are..(66字) - maiyude,2008年3月16日
        回复:  呵呵,还是看不明白了,(22字) - lct10,2008年3月16日
        回复:  (2字) - 86版dingpin,2008年2月24日
        回复:  (2字) - 86版dingpin,2008年2月24日
        回复:  好文章!能用通俗的话写出高深的道理,佩服!!(44字) - vip_oyqd,2008年2月23日
        回复:  想不通为什么要给XML文件加个schema或DTD(38字) - dandanyidian,2007年11月3日
        回复:  果然有趣,初学都来顶一下,如果可以highlight重点的句子就更加very good 了,s..(111字) - liguicheng,2007年10月26日
        回复:  高啊。幽默。真后悔。学习Schema的第一遍文章没有看你的(52字) - PrimoJin,2007年10月9日
        回复:  好不容易看完了。。还是不太明白,,,,嘻嘻,,(46字) - 乌云,2007年10月8日

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