加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML文档类型定义DTD

发布时间:2020-12-16 06:19:35 所属栏目:百科 来源:网络整理
导读:DTD概述 DTD用来定义XML文档的结构,它包含一系列规则说明,以确保XML文档的一致性和有效性 DTD定义了XML文档可用的词汇(元素和属性的名称)和结构: 元素名称,包括根元素 元素的属性及属性的数据类型和取值方式 子元素的名称、顺序、出现次数 元素是否拥

DTD概述

DTD用来定义XML文档的结构,它包含一系列规则说明,以确保XML文档的一致性和有效性
DTD定义了XML文档可用的词汇(元素和属性的名称)和结构:
元素名称,包括根元素
元素的属性及属性的数据类型和取值方式
子元素的名称、顺序、出现次数
元素是否拥有子元素,是否能拥有文本内容,等等
可以用DTD验证XML文档
发现书写错误(命名错误)
检查结构和顺序
检查是否使用了规定的规范文档

DTD的引用

DTD可以是被XML引用的独立的外部文档,也可以嵌入到XML文档中
DTD文档是特殊格式的XML文档 例如,DTD文档student.dtd的内容如下:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!ELEMENT班级(学生+)>
  3. <!ELEMENT学生(ID,姓名,年龄?,住址?,电话*)>
  4. <!ELEMENTID(#PCDATA) <!ELEMENT姓名(#PCDATA) <!ELEMENT年龄(#PCDATA) <!ELEMENT住址(#PCDATA) <!ELEMENT电话(座机*,手机?) <!ELEMENT座机(#PCDATA) <!ELEMENT手机(#PCDATA)>

嵌入的DTD

copy
    <!DOCTYPE班级[
  1. <!ELEMENT班级(学生+) <!ELEMENT学生(ID,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> <!ELEMENTID(#PCDATA) <!ELEMENT姓名(#PCDATA) <!ELEMENT年龄(#PCDATA) <!ELEMENT住址(#PCDATA) <!ELEMENT电话(座机*,248)"> <!ELEMENT座机(#PCDATA) <!ELEMENT手机(#PCDATA) ]<班级 <学生<ID>001</<姓名>王刚</姓名<年龄>2</年龄<电话<手机>234345456</手机</电话</学生</班级>

外部DTD-SYSTEM
在XML文档中声明使用外部DTD文档 <!DOCTYPE 根元素名称 SYSTEM “DTD文档URL”>
例如,XML文档student.xml的内容如下:

copy
    <!DOCTYPE班级SYSTEM“student.dtd” 外部DTD-PUBLIC
    在XML文档中声明使用公共DTD文档 <!DOCTYPE 根元素名称 PUBLIC “公共标识符” “URI” 公共标识符的格式为: 标准//作者//类型和版本//语言 例如,XML文档student.xml的内容如下:

    copy
      <!DOCTYPE班级PUBLIC“-//WeiDP//Example1.0//ZH-CN”“student.dtd”>

    元素Element

    ANY:内容中可包含子元素
    格式:<!ELEMENT 元素名称 ANY>
    示例:<段落>使用<关键词>XML</关键词>技术</段落>
    EMPTY:不能包含任何内容
    格式:<!ELEMENT 元素名称 EMPTY>
    示例:<paper color=“red”/>
    #PCDATA:不能包含子元素
    格式:<!ELEMENT 元素名称 (#PCDATA)>
    示例:<book author=“Black”>C Language</book>
    子元素的顺序和出现频率
    <!ELEMENT 元素名称 (子元素名称[修饰符][,…])>
    其中,修饰符为:
    省略:必须出现,且只能出现1次
    +:至少出现1次
    ?:最多出现1次
    *:可以不出现,也可以出现多次
    示例:<!ELEMENT cpu (厂商,型号+,工艺?,价格*)>
    子元素的选择
    <!ELEMENT 元素名称 (子元素[|子元素]…]) >
    示例: <!ELEMENT 电话 (座机|手机)>

    copy
      xmlversion="1.0"encoding="GB2312"standalone="no" <!DOCTYPE我的电脑[
    1. <!ELEMENT我的电脑(CPU,内存+,硬盘+) <!ELEMENTCPUEMPTY <!ELEMENT内存(描述*) <!ELEMENT分区(名称,操作系统) <!ELEMENT名称(#PCDATA) <!ELEMENT操作系统(#PCDATA) <!ELEMENT硬盘(分区+,描述*) <!ELEMENT描述ANY ]<我的电脑CPU/>
    2. <内存><描述>="512MB"</描述</内存<硬盘><分区<名称>系统盘</名称<操作系统>Windows2003</操作系统</分区>关于系统盘的任何描述信息</硬盘</我的电脑 属性列表ATTLIST

      ATTLIST定义元素的属性的名称、类型和默认值,可以限制出现次数但不能限制出现顺序
      语法:<!ATTLIST 元素名称 属性1名称 属性类型 属性值声明 属性2名称 属性类型 属性值声明 ……>
      属性类型
      CDATA:一般文本
      ID:具有ID属性值,不能重复(唯一性)
      IDREF:对ID属性值的引用
      IDREFS:对ID属性值列表的引用(用空白分割)
      ENTITY:引用未解析的外部实体
      ENTITIES:引用ENTITY列表(用空白分割)
      NMTOKEN:包含一个有效的XML名称
      NMTOKENS:NMTOKEN列表
      (属性值[[|属性值]…]):属性为NMTOKEN类型,只能取列表中的值
      NOTATION (属性值[[|属性值]…]):属性为NOTATION(已定义的),取值任选其一
      属性值说明
      #REQUIRED:该属性必须出现
      #IMPLIED:该属性是可选的
      “默认值”:属性是可选的;若不出现,在验证文档后,元素将隐含该属性,取默认值
      #FIXED “固定值”:属性是可选的;若出现,属性值必须取固定值;若不出现,则验证后自动隐含该固定值
      例如:

      copy
        xmlversion="1.0"encoding="GB2312" <!—该文件保存为computer.dtd-- <!ATTLISTCPU
      1. 厂商(AMD|Intel|Other)“Intel"
      2. 序列号CDATA#IMPLIED
      3. 工作频率CDATA#REQUIRED
      4. <!ELEMENT内存(描述*) <!ATTLIST内存
      5. 容量CDATA#REQUIRED
      6. <!ATTLIST分区
      7. 盘符NMTOKEN#REQUIRED
      8. <!ELEMENT名称(#PCDATA) <!ELEMENT操作系统(#PCDATA) <!ELEMENT硬盘(分区+,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> <!ATTLIST硬盘
      9. xml

        copy
          <!DOCTYPE我的电脑SYSTEM"computer.dtd" <!--以上部分称为XML文档的“序言”(Prolog)-->
        1. CPU厂商="AMD"工作频率="1.5GHz"<内存容量="512MB">KingmaxDDR4000<硬盘容量="80GB"<分区盘符="C" <![CDATA[>Windows2003<]]>
        2. 示例二

          copy
            <!ELEMENT班级(学生+,班长?) <!ELEMENT班长EMPTY <!ATTLIST班长学号IDREF#REQUIRED <!ELEMENT学生(姓名,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> <!ATTLIST学生
          1. 学号ID#REQUIRED
          2. 性别(男|女)"男"
          3. 系别CDATA"计算机"
          4. copy
              <学生学号="s05601"性别="女"<学生学号="S05046"性别="男"系别="材料">孙俊<住址>203房间</住址<学生学号="s05603"<座机>45655656
            1. </座机>465675<班长学号="s05601"/>
            2. 注记notation
              XML文档可以包含非XML数据(不能由解析器直接处理),例如图像、声音等,需要告知解析器如何调用外部程序处理这些数据,否则就会出错。
              NOTATION将非XML数据描述为一种能够被外部程序处理的形式
              格式:<!NOTATION 名称 SYSTEM “系统标识符”>
              例如:<!NOTATION jpg SYSTEM “image/jpeg”>
              notation实例

              copy
                <!ELEMENT相册(照片)+ <!ELEMENT照片(#PCDATA) <!NOTATIONjpgSYSTEM"image/jpeg" <!NOTATIONgifSYSTEM"image/gif" <!NOTATIONpngSYSTEM"image/png" <!ATTLIST照片
              1. 名称NMTOKEN#REQUIRED
              2. 文件类型NOTATION(jpg|gif|png)#IMPLIED
              3. 实体ENTITY

                逻辑上,一个XML文档只有一个根元素,根元素包含所有子元素和内容。但XML文档中可以引用来自其他文档(文件)中的数据(内容),这就是实体。例如,可以将论文标题定义为实体,就可以在文中多次引用,而不必重复输入,也便于修改标题。
                实体存储的内容有形式规范的XML、其他形式的文本或二进制数据。实体可以是文件、数据记录或任何包含数据的项目。除了文档实体外,多数实体都有名称。
                实体定义在DTD中,在与该DTD关联的XML文档中通过实体引用使用这些实体,XML解析器会在解析标记时,用实体的内容替换实体引用。

                普通实体
                内部普通实体
                <!ENTITY 实体名称 “实体内容”>
                例如,<!ENTITY UPC “中国石油大学”>
                外部普通实体
                <!ENTITY 实体名称 SYSTEM “URI”>
                例如,<!ENTITY UPC SYSTEM “/XML/upc.xml”>
                <!ENTITY 实体名称 PUBLIC FPI “URI”>
                其中,FPI是经认可的全球唯一的公共标识符,形如“前缀//使用者标识//文本类//文本描述//语言”
                例如,<!ENTITY hello PUBLIC “-//ISO9//me//Hello//EN” “/xml/hello.xml”>
                book_intro.xml文档

                copy
                  <内容简介>适合计算机专业本科学习</内容简介>
                copy
                  <!DOCTYPE图书[
                1. <!ENTITYcopyright"版权所有,2007" <!ENTITYintroSYSTEM"book_intro.xml" <!ELEMENT图书(书名,作者,内容简介) <!ELEMENT书名(#PCDATA) <!ELEMENT作者(#PCDATA) <!ELEMENT内容简介(#PCDATA)<图书<书名>计算概论(?right;)
                2. </书名<作者>张三</作者 &intro;
                3. </图书 未解析实体

                  外部未解析实体可以将非XML文档数据引入XML文档进行处理
                  引入XMl文档
                  <!ENTITY 名称 SYSTEM “URI”>
                  URI对应XML文档
                  引入非XML文档
                  <!ENTITY 名称 SYSTEM “URI” NDATA 类型声明>
                  类型声明用于描述文档类型

                  copy
                    <!DOCTYPEIMAGE[
                  1. <!ELEMENTIMAGE(PIC) <!NOTATIONgifSYSTEM"image/gif" <!ENTITYpicSYSTEM"office.gif"NDATAgif <!ELEMENTPICEMPTY <!ATTLISTPICsrcENTITY#REQUIREDIMAGEPICsrc="pic"/>

                  (编辑:李大同)

                  【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读