02 XML DTD

02 XML DTD


一、DTD 简介

DTD (Document Type Definition 文档类型定义)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

二、DTD 文档声明

  • 内部声明
    基本格式: <!DOCTYPE 根元素 [元素声明]>

    <?xml version="1.0"?>
    <!DOCTYPE note [
    <!ELEMENT note (to,from)>
    <!ELEMENT to      (#PCDATA)>
    <!ELEMENT from    (#PCDATA)>
    ]>
    <note>
    <to>George</to>
    <from>John</from>
    </note>
    

    以上 DTD 解释如下:
    !DOCTYPE note (第二行)定义此文档是 note 类型的文档。
    !ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body”
    !ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型
    !ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型

  • 外部引用
    基本格式:<!DOCTYPE 根元素 SYSTEM "文件名">

    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM "note.dtd">
    <note>
    <to>George</to>
    <from>John</from>
    </note>
    

    外部引用文件:note.dtd

    <!ELEMENT note (to,from)>
    <!ELEMENT to      (#PCDATA)>
    <!ELEMENT from    (#PCDATA)>
    

三、DTD - XML 构建模块

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student id="001">
        <name>张三</name>
        <age>18</age>
        <hobby>篮球</hobby>
    </student>
    <student id="002">
        <name>李四</name>
        <age>25</age>
        <hobby>足球</hobby>
    </student>
</students>

XML 构建模块构成:

  1. 元素
    students 、student 、name 、age 、hobby都是元素
  2. 属性
    id="001",其中id是属性,"001"是属性值
  3. PCDATA

    PCDATA 的意思是被解析的字符数据(parsed character data)。
    可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
    PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
    文本中的标签会被当作标记来处理,而实体会被展开。
    不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。

  4. CDATA

    CDATA 的意思是字符数据(character data)。
    CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

四、DTD 元素

  1. 声明一个元素

    <!ELEMENT 元素名称 类别>
    或者
    <!ELEMENT 元素名称 (元素内容)>

  2. 空元素

    <!ELEMENT 元素名称 EMPTY>

  3. 只有 PCDATA 的元素

    <!ELEMENT 元素名称 (#PCDATA)>

  4. 带有任何内容的元素

    <!ELEMENT 元素名称 ANY>

  5. 带有子元素(序列)的元素

    <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

  6. 声明最少出现一次的元素

    <!ELEMENT 元素名称 (子元素名称+)>

  7. 声明出现零次或多次的元素

    <!ELEMENT 元素名称 (子元素名称*)>

  8. 声明出现零次或一次的元素

    <!ELEMENT 元素名称 (子元素名称?)>

  9. 声明“非…/既…”类型的内容

    <!ELEMENT note (to,from,header,(message|body))>
    上面的例子声明了:“note” 元素必须包含 “to” 元素、“from” 元素、“header” 元素,以及非 “message” 元素既 “body” 元素。

  10. 声明混合型的内容

    <!ELEMENT note (#PCDATA|to|from|header|message)*>
    上面的例子声明了:“note” 元素可包含出现零次或多次的 PCDATA、“to”、“from”、“header” 或者 “message”。

五、DTD 属性

  1. 属性声明

    属性声明使用下列语法:
    <!ATTLIST 元素名称 属性名称 属性类型 默认值>

  2. 属性类型的选项

类型描述
CDATA值为字符数据 (character data)
(en1en2
ID值为唯一的 id
IDREF值为另外一个元素的 id
IDREFS值为其他 id 的列表
NMTOKEN值为合法的 XML 名称
NMTOKENS值为合法的 XML 名称的列表
ENTITY值是一个实体
ENTITIES值是一个实体列表
NOTATION此值是符号的名称
xml:值是一个预定义的 XML 值
  1. 默认值参数可使用值
解释
属性的默认值
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXED value属性值是固定的

六、DTD 实体

  1. 内部实体定义

    <!ENTITY 实体名称 "实体的值">

    示例:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE note [
        <!ELEMENT note (name)>
        <!ELEMENT name (#PCDATA)>
        <!ENTITY write "张三">
        ]>
    <note>
    <name>&write;</name>
    </note>
    
    //一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
    
    
  2. 外部引用实体

    <!ENTITY 实体名称 SYSTEM "URI/URL">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值