文章目录
  1. 1. 使用方式
  2. 2. 为什么使用DTD
  3. 3. 构建模块
  4. 4. 元素
    1. 4.1. 声明
    2. 4.2. 空元素
    3. 4.3. 只有 PCDATA 的元素
    4. 4.4. 带有任何内容的元素
    5. 4.5. 带有子元素(序列)的元素
    6. 4.6. 声明只出现一次的元素
    7. 4.7. 声明最少出现一次的元素
    8. 4.8. 声明出现零次或多次的元素
    9. 4.9. 声明出现零次或一次的元素
    10. 4.10. 声明“非…/既…”类型的内容
    11. 4.11. 声明混合型的内容
  5. 5. 属性
    1. 5.1. 默认值参数
    2. 5.2. 列举属性值
  6. 6. 实体
    1. 6.1. 内部声明
    2. 6.2. 外部声明

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

使用方式

  1. 内部DOCTYPE 声明

    <!DOCTYPE 根元素 [元素声明]>
    

    例子:

    <?xml version="1.0"?>
    <!DOCTYPE note [
      <!ELEMENT note (to,from,heading,body)>
      <!ELEMENT to      (#PCDATA)>
      <!ELEMENT from    (#PCDATA)>
      <!ELEMENT heading (#PCDATA)>
      <!ELEMENT body    (#PCDATA)>
    ]>
    <note>
      <to>George</to>
      <from>John</from>
      <heading>Reminder</heading>
      <body>Don't forget the meeting!</body>
    </note>
    
  2. 外部文档声明

    <!DOCTYPE 根元素 SYSTEM "文件名">
    

    例子:

    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM "note.dtd">
    <note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    </note> 
    

为什么使用DTD

  1. 通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。
  2. 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
  3. 而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
  4. 还可以使用 DTD 来验证您自身的数据。

构建模块

XML文档均由一下构建模块构成:

  1. 元素
  2. 属性
  3. 实体
  4. PCDATA :被解析的字符数据(parsed character data),是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
  5. CDATA :字符数据(character data),是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

元素

声明

<!ELEMENT 元素名称 类别>

或者

<!ELEMENT 元素名称 (元素内容)>

空元素

<!ELEMENT 元素名称 EMPTY>

只有 PCDATA 的元素

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

带有任何内容的元素

<!ELEMENT 元素名称 ANY>

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

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

或者

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

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。

声明只出现一次的元素

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

声明最少出现一次的元素

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

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

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

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

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

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

<!ELEMENT note (to,from,header,(message|body))>

声明混合型的内容

<!ELEMENT note (#PCDATA|to|from|header|message)*>

属性

在 DTD 中,属性通过 ATTLIST 声明来进行声明

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

默认值参数

1. 值            属性的默认值
2. #REQUIRED     属性值是必需的
3. #IMPLIED     属性不是必需的
4. #FIXED value     属性值是固定的

列举属性值

<!ATTLIST 元素名称 属性名称 (en1|en2|..) 默认值>

例子:

<!ATTLIST payment type (check|cash) "cash">

实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量,实体引用是对实体的引用,实体可在内部或外部进行声明。

内部声明

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

例子:

<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">

<author>&writer;&copyright;</author>
// 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。

外部声明

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

例子:

<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
文章目录
  1. 1. 使用方式
  2. 2. 为什么使用DTD
  3. 3. 构建模块
  4. 4. 元素
    1. 4.1. 声明
    2. 4.2. 空元素
    3. 4.3. 只有 PCDATA 的元素
    4. 4.4. 带有任何内容的元素
    5. 4.5. 带有子元素(序列)的元素
    6. 4.6. 声明只出现一次的元素
    7. 4.7. 声明最少出现一次的元素
    8. 4.8. 声明出现零次或多次的元素
    9. 4.9. 声明出现零次或一次的元素
    10. 4.10. 声明“非…/既…”类型的内容
    11. 4.11. 声明混合型的内容
  5. 5. 属性
    1. 5.1. 默认值参数
    2. 5.2. 列举属性值
  6. 6. 实体
    1. 6.1. 内部声明
    2. 6.2. 外部声明