欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

XML文档类型定义DTD

发布时间:2025/7/14 asp.net 89 豆豆
生活随笔 收集整理的这篇文章主要介绍了 XML文档类型定义DTD 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

DTD概述

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

DTD的引用

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

[html] view plaincopy
  • <?xml version="1.0" encoding="UTF-8"?>  
  • <!ELEMENT 班级 (学生+)>  
  • <!ELEMENT 学生 (ID, 姓名, 年龄?, 住址?, 电话*)>  
  • <!ELEMENT ID (#PCDATA)>  
  • <!ELEMENT 姓名 (#PCDATA)>  
  • <!ELEMENT 年龄 (#PCDATA)>  
  • <!ELEMENT 住址 (#PCDATA)>  
  • <!ELEMENT 电话 (座机*, 手机?)>  
  • <!ELEMENT 座机 (#PCDATA)>  
  • <!ELEMENT 手机 (#PCDATA)>  
  • 嵌入的DTD

    [html] view plaincopy
  • <?xml version="1.0" encoding="UTF-8"?>  
  • <!DOCTYPE 班级 [  
  •     <!ELEMENT 班级 (学生+)>  
  •     <!ELEMENT 学生 (ID, 姓名, 年龄?, 住址?, 电话*)>  
  •     <!ELEMENT ID (#PCDATA)>  
  •     <!ELEMENT 姓名 (#PCDATA)>  
  •     <!ELEMENT 年龄 (#PCDATA)>  
  •     <!ELEMENT 住址 (#PCDATA)>  
  •     <!ELEMENT 电话 (座机*, 手机?)>  
  •     <!ELEMENT 座机 (#PCDATA)>  
  •     <!ELEMENT 手机 (#PCDATA)>  
  • ]>  
  • <班级>  
  •     <学生>  
  •         <ID>001</ID>  
  •         <姓名>王刚</姓名>  
  •         <年龄>2</年龄>  
  •         <电话>  
  •             <手机>234345456</手机>  
  •         </电话>  
  •     </学生>  
  • </班级>  
  • 外部DTD-SYSTEM
    在XML文档中声明使用外部DTD文档 <!DOCTYPE 根元素名称 SYSTEM “DTD文档URL”>
     例如,XML文档student.xml的内容如下:

    [html] view plaincopy
  • <?xml version="1.0" encoding="UTF-8"?>  
  • <!DOCTYPE 班级 SYSTEM “student.dtd”>  
  • <班级>  
  •     <学生>  
  •         <ID>001</ID>  
  •         <姓名>王刚</姓名>  
  •         <年龄>2</年龄>  
  •         <电话>  
  •             <手机>234345456</手机>  
  •         </电话>  
  •     </学生>  
  • </班级>  
  • 外部DTD-PUBLIC
    在XML文档中声明使用公共DTD文档 <!DOCTYPE 根元素名称 PUBLIC “公共标识符” “URI” 公共标识符的格式为:  标准//作者//类型和版本//语言 例如,XML文档student.xml的内容如下:

    [html] view plaincopy
  • <?xml version="1.0" encoding="UTF-8"?>  
  • <!DOCTYPE 班级 PUBLIC “-//WeiDP//Example 1.0//ZH-CN” “student.dtd”>  
  • <班级>  
  •     <学生>  
  •         <ID>001</ID>  
  •         <姓名>王刚</姓名>  
  •         <年龄>2</年龄>  
  •         <电话>  
  •             <手机>234345456</手机>  
  •         </电话>  
  •     </学生>  
  • </班级>  
  • 元素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 电话 (座机|手机)>

    [html] view plaincopy
  • <?xml version="1.0" encoding="GB2312" standalone="no"?>  
  • <!DOCTYPE 我的电脑 [  
  •     <!ELEMENT 我的电脑 (CPU, 内存+, 硬盘+)>  
  •     <!ELEMENT CPU EMPTY>  
  •     <!ELEMENT 内存 (描述*)>  
  •     <!ELEMENT 分区 (名称, 操作系统)>  
  •     <!ELEMENT 名称 (#PCDATA)>  
  •     <!ELEMENT 操作系统 (#PCDATA)>  
  •     <!ELEMENT 硬盘 (分区+, 描述*)>  
  •     <!ELEMENT 描述 ANY>  
  • ]>  
  • <我的电脑>  
  •     <CPU/>  
  •     <内存><描述>="512MB"</描述></内存>  
  •     <内存/>  
  •     <硬盘>  <分区>  
  •             <名称>系统盘</名称>  
  •             <操作系统>Windows 2003</操作系统>  
  •         </分区>  
  •         <描述>关于系统盘的任何描述信息</描述>  
  •     </硬盘>  
  • </我的电脑>  
  • 属性列表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 “固定值”:属性是可选的;若出现,属性值必须取固定值;若不出现,则验证后自动隐含该固定值
    例如:

    [html] view plaincopy
  • <?xml version="1.0" encoding="GB2312"?>  
  • <!—该文件保存为computer.dtd-->  
  • <!ELEMENT 我的电脑 (CPU, 内存+, 硬盘+)>  
  • <!ELEMENT CPU EMPTY>  
  • <!ATTLIST CPU  
  •     厂商 (AMD | Intel | Other) “Intel"  
  •     序列号 CDATA #IMPLIED  
  •     工作频率 CDATA #REQUIRED  
  • >  
  • <!ELEMENT 内存 (描述*)>  
  • <!ATTLIST 内存  
  •     容量 CDATA #REQUIRED  
  • >  
  • <!ELEMENT 分区 (名称, 操作系统)>  
  • <!ATTLIST 分区  
  •     盘符 NMTOKEN #REQUIRED  
  • >  
  • <!ELEMENT 名称 (#PCDATA)>  
  • <!ELEMENT 操作系统 (#PCDATA)>  
  • <!ELEMENT 硬盘 (分区+, 描述*)>  
  • <!ATTLIST 硬盘  
  •     容量 CDATA #REQUIRED  
  • >  
  • <!ELEMENT 描述 ANY>  
  • xml

    [html] view plaincopy
  • <?xml version="1.0" encoding="GB2312" standalone="no"?>  
  • <!DOCTYPE 我的电脑 SYSTEM "computer.dtd">  
  • <!--以上部分称为XML文档的“序言”(Prolog)-->  
  • <我的电脑>  
  •     <CPU 厂商="AMD" 工作频率="1.5GHz"/>  
  •     <内存 容量="512MB">  
  •         <描述>Kingmax DDR 4000</描述>  
  •     </内存>  
  •     <内存 容量="512MB"/>  
  •     <硬盘 容量="80GB">  
  •         <分区 盘符="C">  
  •             <名称>系统盘</名称>  
  •             <操作系统>  
  •                 <![CDATA[> Windows 2003 <]]>  
  •             </操作系统>  
  •         </分区>  
  •     </硬盘>  
  • </我的电脑>  
  • 示例二

    [html] view plaincopy
  • <?xml version="1.0" encoding="UTF-8"?>  
  • <!DOCTYPE 班级 [  
  •     <!ELEMENT 班级 (学生+, 班长?)>  
  •     <!ELEMENT 班长 EMPTY>  
  •     <!ATTLIST 班长 学号 IDREF #REQUIRED>  
  •     <!ELEMENT 学生 (姓名, 年龄?, 住址?, 电话*)>  
  •     <!ATTLIST 学生  
  •         学号 ID #REQUIRED  
  •         性别 (男 | 女) "男"  
  •         系别 CDATA "计算机"  
  •     >  
  •     <!ELEMENT 姓名 (#PCDATA)>  
  •     <!ELEMENT 年龄 (#PCDATA)>  
  •     <!ELEMENT 住址 (#PCDATA)>  
  •     <!ELEMENT 电话 (座机*, 手机?)>  
  •     <!ELEMENT 座机 (#PCDATA)>  
  •     <!ELEMENT 手机 (#PCDATA)>  
  • ]>  
  • xml

    [html] view plaincopy
  • <班级>  
  •     <学生 学号="s05601" 性别="女">  
  •         <姓名>王刚</姓名>  
  •         <年龄>2</年龄>  
  •         <电话>  
  •             <手机>234345456</手机>  
  •         </电话>  
  •     </学生>  
  •     <学生 学号="S05046" 性别="男" 系别="材料">  
  •         <姓名>孙俊</姓名>  
  •         <住址>203房间</住址>  
  •     </学生>  
  •     <学生 学号="s05603">  
  •         <姓名>孙俊</姓名>  
  •         <住址>203房间</住址>  
  •         <电话>  
  •             <座机>45655656  
  •         </座机>  
  •             <座机>465675</座机>  
  •         </电话>  
  •     </学生>  
  •     <班长 学号="s05601"/>  
  • </班级>  
  • 注记notation
    XML文档可以包含非XML数据(不能由解析器直接处理),例如图像、声音等,需要告知解析器如何调用外部程序处理这些数据,否则就会出错。
    NOTATION将非XML数据描述为一种能够被外部程序处理的形式
    格式:<!NOTATION 名称 SYSTEM “系统标识符”>
    例如:<!NOTATION jpg SYSTEM “image/jpeg”>
    notation实例

    [html] view plaincopy
  • <?xml version="1.0" encoding="GB2312"?>  
  • <!ELEMENT 相册 (照片)+>  
  • <!ELEMENT 照片 (#PCDATA)>  
  • <!NOTATION jpg SYSTEM "image/jpeg">  
  • <!NOTATION gif SYSTEM "image/gif">  
  • <!NOTATION png SYSTEM "image/png">  
  • <!ATTLIST 照片  
  •     名称 NMTOKEN #REQUIRED  
  •     文件类型 NOTATION (jpg | gif | png) #IMPLIED  
  • >  
  • 实体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文档

    [html] view plaincopy
  • <?xml version="1.0" encoding="GB2312"?>  
  • <内容简介>适合计算机专业本科学习</内容简介>  
  • [html] view plaincopy
  • <?xml version="1.0" encoding="GB2312"?>  
  • <!DOCTYPE 图书 [  
  •     <!ENTITY copyright "版权所有,2007">  
  •     <!ENTITY intro SYSTEM "book_intro.xml">  
  •     <!ELEMENT 图书 (书名, 作者, 内容简介)>  
  •     <!ELEMENT 书名 (#PCDATA)>  
  •     <!ELEMENT 作者 (#PCDATA)>  
  •     <!ELEMENT 内容简介 (#PCDATA)>  
  • ]>  
  • <图书>  
  •     <书名>计算概论(©right;)  
  • </书名>  
  •     <作者>张三</作者>  
  •     &intro;  
  • </图书>  
  • 未解析实体

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

    [html] view plaincopy
  • <?xml version="1.0" encoding="GB2312"?>  
  • <!DOCTYPE IMAGE [  
  •     <!ELEMENT IMAGE (PIC)>  
  •     <!NOTATION gif SYSTEM "image/gif">  
  •     <!ENTITY pic SYSTEM "office.gif" NDATA gif>  
  •     <!ELEMENT PIC EMPTY>  
  •     <!ATTLIST PIC src ENTITY #REQUIRED>  
  • ]>  
  • <IMAGE>  
  •     <PIC src="pic"/>  

  • 总结

    以上是生活随笔为你收集整理的XML文档类型定义DTD的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。