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

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

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4135 个阅读者  浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Document Type Definition 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     chendx 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:3
      积分:68
      门派:XML.ORG.CN
      注册:2007/6/26

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

    目录
    DTD综述: 2
    DTD的引入: 3
    DTD中定义XML元素: 4
    DTD中定义XML属性: 6
    DTD中定义XML的实体: 8


    DTD综述:
    DTD就是Document Type Definition的缩写,它主要对与之相关联的XML文档中的元素、属性、实体、记号进行定义,以确保关联的文档在修改时能够维持文档结构和内容的合法性。但是XML Schema与DTD的作用是一样的,更为可观的是,XML Schema能够提供对数据类型和名词空间的支持。所以,在不久的将来,DTD应该会被XML Schema所取代。就我个人对DTD的使用感觉而言,这并非一个很好的XML结构观察工具,因为DTD对XML中的各个部分的定义显得松散而凌乱,完全没有学到XML的层次感,并不适合用于非常复杂的XML文档。

    DTD的引入:
    一个DTD文档可以定义在与之相关的XML文档的内部也可以作为一个单独的文件被一个或是多个XML文档所关联:
    1. 引入内部DTD:
    <?xml version="1.0"  encoding=”UTF-8” standalone=”Yes”?>
    <!DOCTYPE note [   //DOCTYPE后空格接该XML的根节点
      <!ELEMENT note (to,from,heading,body)>
      <!ELEMENT to      (#PCDATA)>
      <!ELEMENT from    (#PCDATA)>
      <!ELEMENT heading (#PCDATA)>
      <!ELEMENT body    (#PCDATA)>
    ]>
    <note>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend</body>
    </note>

    2. 引入外部DTD:
    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM "note.dtd">  //SYSTEM是关键字,还有PUBLIC
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
    </note>
    概念:DTD是Document Type Definition 的缩写,它定义了与之相关的XML文档所有合法的元素和属性。



    DTD中定义XML元素:
    DTD中一共可以把元素分为五种类型:
    1. 空元素
    <!ELEMENT element-name EMPTY>
    Example:
    <!ELEMENT br EMPTY>
    XML example:
    <br />

    2. 已解析的字符内容的元素
    <!ELEMENT element-name (#PCDATA)>
    Example:
    <!ELEMENT from (#PCDATA)>

    3. 任意内容的元素
    <!ELEMENT element-name ANY>
    Example:
    <!ELEMENT note ANY>

    4. 内容为子元素的元素
    <!ELEMENT element-name (child1,child2,...)>
    Example:
    <!ELEMENT note (to,from,heading,body)>
    注意:子元素必须按其在父元素中出现的顺序依次出现

    4.1  每个子元素出且仅出现一次:
    <!ELEMENT element-name (child1,child2,...)>
    Example:
    <!ELEMENT note (to,from,heading,body)>

    4.2  每个子元素至少出现一次:
    <!ELEMENT element-name (child1+,child2+,...)>
    Example:
    <!ELEMENT note (to+,from+,heading+,body+)>

    4.3  每个子元素可以出现任意次(包括不出现):
    <!ELEMENT element-name (child1*,child2*,...)>
    Example:
    <!ELEMENT note (to*,from*,heading*,body*)>

    4.4  只可能不出现或是出现一次的元素:
    <!ELEMENT element-name (child1?,child2?,...)>
    Example:
    <!ELEMENT note (to?,from?,heading?,body?)>

    4.5  不可同时出现的子元素:
    <!ELEMENT element-name (child1 | child2 | ,...)>
    Example:
    <!ELEMENT note (to,from,(heading | body))>

    5. 混合内容的元素
    Example:
    <!ELEMENT note (#PCDATA|to|from|header|message)*>


    DTD中定义XML属性:
    通用的语法格式:
    <!ATTLIST element-name attribute-name attribute-type default-value>
    DTD example:
    <!ATTLIST payment type CDATA "check">
    XML example:
    <payment type="check" />

    属性的类型(attribute-type)有如下几种:
    Type Description
    CDATA 字符串值,如 “check”
    (en1|en2|..) 只能从en1到enn中任选一值
    ID ID类型的属性是全局唯一的
    IDREF 它的取值必须是前面已经出现过的ID值
    IDREFS 它的取值必须是前面已经出现过的ID值们,用空格分隔
    NMTOKEN The value is a valid XML name
    NMTOKENS The value is a list of valid XML names
    ENTITY The value is an entity
    ENTITIES The value is a list of entities
    NOTATION The value is a name of a notation
    xml: The value is a predefined xml value

    属性自身的属性(default-value):
    Value Explanation Example
    Default Value 属性的默认值 DTD:
    <!ELEMENT square EMPTY>
    <!ATTLIST square width CDATA "0">
    Valid XML:
    <square width="100" />
    #REQUIRED 属性必须在XML文档中出现 DTD:
    <!ATTLIST person number CDATA #REQUIRED>
    Valid XML:
    <person number="5677" />
    Invalid XML:
    <person />
    #IMPLIED 属性可以不在XML文档中出现 DTD:
    <!ATTLIST contact fax CDATA  #IMPLIED>
    Valid XML:
    <contact fax="555-667788" />
    Valid XML:
    <contact />

    #FIXED value 属性的值固定了 DTD:
    <!ATTLIST sender company CDATA #FIXED "Microsoft">
    Valid XML:
    <sender company="Microsoft" />
    Invalid XML:
    <sender company="W3Schools" />


    DTD中定义XML的实体:
    实体可以分为一般实体和参数实体,而一般实体又可以分为内部实体和外部实体:
    1. 一般实体
    1.1 内部实体
    定义的语法:<!ENTITY entity-name "entity-value">
    DTD Example:
    <!ENTITY writer "Donald Duck.">
    <!ENTITY copyright "Copyright W3Schools.">
    XML example:
    <author>&writer;&copyright;</author>

    1.2 外部实体
    定义的语法:<!ENTITY entity-name SYSTEM "URI/URL">
    DTD Example:
    <!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
    <!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">
    XML example:
    <author>&writer;&copyright;</author>
    外部已分析实体的写法:
    <?xml  version=”1.0” encoding=”TF-8”>
    entity-value
    注意,version属性是可选的,没有standalone的属性,只有entity-value的内容才会用来替换。

    2. 参数实体
    参数实体不能在XML文档中出现,只能在单独的DTD文档中被定义和使用(部的DTD不能定义和使用)。它能出现在所有tag出现的同阶位置,而且在DTD中以% y-name;的形式被引用。
    定义的语法:<!ENTITY  % y-name "entity-value">


       收藏   分享  
    顶(0)
      





    关闭广告显示
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/6/28 0:08:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/8/26 2:32:05

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

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