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

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → 简单的DTD例子描述和分析 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8405 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 简单的DTD例子描述和分析 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hsower 帅哥哟,离线,有人找我吗?狮子座1983-8-21
      
      
      威望:7
      等级:大四寒假(收到IBM的Offer啦)
      文章:72
      积分:1606
      门派:XML.ORG.CN
      注册:2004/4/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hsower发送一个短消息 把hsower加入好友 查看hsower的个人资料 搜索hsower在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hsower的博客楼主
    发贴心情 简单的DTD例子描述和分析

    简单的DTD例子描述和分析

      下面举一个带有内部DTD的XML文档的例子:

      <?xml version="1.0" encoding="GB2312" ?>
      <!DOCTYPE 家庭 [
       <!ELEMENT 家庭 (人+,家电*)>
       <!ELEMENT人 EMPTY>
       <!ELEMENT 家电 EMPTY>
       <!ATTLIST 人
        名字 CDATA #REQUIRED
        性别 (男|女) #REQUIRED
        年龄 CDATA #REQUIRED
        爱好 CDATA #IMPLIED
       >
       <!ATTLIST 家电
         名称 CDATA #REQUIRED
         数量 CDATA #REQUIRED
         说明 CDATA #IMPLIED
        >
      ]>  
      <家庭>
      <人>
      <名字>郭大路
      <性别>男
      <年龄>25
      
      <人>
      <名字>李寻欢
      <性别>男
      <年龄>38
      <爱好>作个教育家和伟人
      
      <家电>
      <名称>彩电
      <数量>3
      
      

      这个文档从第二行开始进行文档类型声明,包含了文档元素(家庭)的名称。根据定义,我们发现该元素可以包含一个或者多个人(由这个+号决定的),可以包含零个或多个家电(由这个*符号决定),然后定义了人这个元素的需要的属性,其中名字、性别和年龄是必须的,而爱好可以填有也可以不填。家电的名字和数量属性必须有,但说明可以写也可以不写。

      如果采用外部DTD的话,就需要有两个文档,第一个文档就是关于DTD的文档,第二个文档就是遵守DTD格式的内容文档。实际上我们可以建立无穷多个遵守该DTD格式的文档。举一个例子来说,我们在构造关系数据库中的表的时候,我们需要定义好表的结构(也就是表包含的字段集合),然后我们就可以往这个表中放入记录,记录的个数从理论上讲可以是无穷多个的。这里关于表的结构就类似于DTD文档。记录类似于遵守DTD格式的内容文档。外部DTD的好处是:它可以方便高效地被多个XML文件所共享。你只要写一个DTD文件,就可以被多个XML文件所引用。事实上,当许多组织需要统一它们的数据交换格式时,它们就是通过外部DTD来完成的。这样做不仅简化了输入工作,还保证当你需要对DTD做出改动时,不用一一去改每个引用了它的XML文件,只要改一个公用的DTD文件就足够了。不过需要注意,如果DTD的改动不是"向后兼容"的,这时原先根据该DTD编写的那些XML文件可能就会出问题了。

      现在我们就尝试建立一个DTD文档,不妨命名为Home.dtd。其代码如下:

      <?xml version="1.0" encoding="GB2312" ?>
      <!ELEMENT 家庭 (人+,家电*)>
      <!ELEMENT人 EMPTY>
      <!ELEMENT 家电 EMPTY>
      <!ATTLIST 人
        名字 CDATA #REQUIRED
        性别 (男|女) #REQUIRED
        年龄 CDATA #REQUIRED
        爱好 CDATA #IMPLIED
       >
      <!ATTLIST 家电
       名称 CDATA #REQUIRED
       数量 CDATA #REQUIRED
       说明 CDATA #IMPLIED
      >

      然后,我们可以建立一个遵守该DTD格式的内容文档,不妨设为HomeInstance.xml。其代码如下:

      <?xml version="1.0" encoding="GB2312" ?>
      <!DOCTYPE 家庭 SYSTEM "Home.dtd">
      <家庭>
      <人>
      <名字>郭大路
      <性别>男
      <年龄>25
      
      <人>
      <名字>李寻欢
      <性别>男
      <年龄>38
      <爱好>作个教育家和伟人
      
      <家电>
      <名称>彩电
      <数量>3
      
      

      把这两个文档放到同一个目录下,然后可以用XML浏览器对HomeInstance.xml进行浏览,结果应该和使用内部DTD的结果一样。

      众所周知,在设计MIS应用程序的时候,重要的是要进行E-R图设计,然后建立关系数据库,建立数据库的关键就是要定义好表的格式,并使它的范式尽可能的高。对应的,建立基于XML应用的关键就是要定义好DTD,然后所有的内容就按照DTD格式进行编写。DTD实际上表现了一个层次的关系,你也可以把它理解成一棵树的结构。树中的节点实际上就是一个个元素(ELEMENT),一个元素可以包含其他的元素。比如上面的例子中家庭这个元素包含了人和家电这两个元素。一个元素可以包含属性(ATTLIST)也可以没有任何属性。比如上面的例子中,家庭这个元素就没有任何属性,而人和家电都有自己的属性。

      际上如果大家学过编译系统的话,都知道对编程语言进行语法定义的工具:巴科斯-诺尔范式。它是用来对语言的语法进行定义的工具。实际上DTD就是起到了类似的作用。


       收藏   分享  
    顶(0)
      




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

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    74.219ms