欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DTD

程序员文章站 2022-05-30 13:15:33
...

1 DTD简介

1.1 DTD概述

DTD是对指定XML文档中元素结构和属性的描述,DTD是一种描述性的语言。

1.2 DTD构成

文档声明、对XML元素的描述和对XML属性的描述。

2 声明

2.1 元素声明

<!ELEMENT 元素名 EMPTY/(子元素内容)/(混合内容)/ANY/#PCDATA>

常见分类为以上5种,具体分类如下:

  • 空元素:<!ELEMENT 元素名 EMPTY>
  • 只有字符数据的元素:<!ELEMENT 元素名 #PCDATA>
  • 可以包含任何内容的元素:<!ELEMENT 元素名 ANY>
  • 带有子元素的元素:<!ELEMENT 元素名 (子元素列表)>
  • 子元素:<!ELEMENT 元素名 ()>
  • 只出现一次的元素:<!ELEMENT 元素名 (子元素名称)>
  • 至少出现一次的元素:<!ELEMENT 元素名 (子元素名称+)>
  • 出现零至多次的元素:<!ELEMENT 元素名 (子元素名称*)>
  • 出现零或一次的元素:<!ELEMENT 元素名 (子元素名称?)>
  • 混合类型的元素:<!ELEMENT 元素名 (#PCDATA|head|body)>

2.2 属性声明

<!ATTLIST 元素名 属性名 属性类型 属性附加条件>
属性类型 含义 示例
CDATA 字符数据,即没有标记的文本 <!ATTLIST 学生 姓名 CDATA #REQUIRED>
枚举 备选属性值的值列表 <!ATTLIST 学生 性别 (男|女) "男">
ID 该属性在文档中具有唯一性 <!ATTLIST 学生 学号 ID #REQUIRED>
IDREF 文档中元素的ID类型属性的值
IDREFS 由空格分隔的元素的多个ID
ENTITY 在DTD中声明的实体的名称
ENTITYIES 在DTD中声明的由空格分隔的多个实体的名称
NMTOKEN XML名称记号
NMTOKENS 由空格分隔的多个XML名称记号
NOTATION 在DTD中声明的记法的名称
属性缺省值 含义
#REQUIRED 元素每个实例必须具有该属性
#IMPLIED 元素实例不必须包含该属性
#FIXED+固定值 属性值被指定为固定值,用户不能改变该属性值
缺省值 如果元素不包含该属性的属性值,那么缺省值将作为属性值

3 例子 - 水果信息DTD

C:/test.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 水果与季节 (季节+,水果+)>

<!ELEMENT 季节 (#PCDATA)>
<!ATTLIST 季节 id ID #REQUIRED>
<!ATTLIST 季节 名称 CDATA #REQUIRED>

<!ELEMENT 水果 (#PCDATA)>
<!ATTLIST 水果 f_id IDREF #REQUIRED>
<!ATTLIST 水果 名称 CDATA #REQUIRED>

C:/test.xml

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE 水果与季节 SYSTEM "test.dtd">
<水果与季节>
	<季节 id="f1" 名称="春天"></季节>
	<季节 id="f2" 名称="夏天"></季节>
	<水果 f_id="f1" 名称="草莓"></水果>
	<水果 f_id="f2" 名称="西瓜"></水果>
</水果与季节>

4 引用DTD

4.1 引用内部DTD

将DTD直接写在XML文档中。

4.2 引用外部DTD

  • 使用SYSTEM 关键字引用
  • 使用PUBLIC关键字引用外部DTD文件
  • 都需要设置 standalone="no"
相关标签: DTD XML