DTD文件应该使用UTF-8或Unicode编码。
XML文档通过使用 DOCTYPE 声明语句来指明它所遵循的DTD文件,
外部文档声明
DOCTYPE 声明语句紧跟在XML文档声明语句后面,有两种格式:
<!DOCTYPE 根元素名 SYSTEM "DTD文件的URL">(本地文件)
<!DOCTYPE 根元素名 PUBLIC "DTD名称" "DTD文件的URL">,访问URL可以下载对应的DTD
例如:
(1)<!DOCTYPE 书架 SYSTEM "file:///E:/workspace2/SencondDemo/src/book.dtd">
(2)<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
当然也可以在XML文档中直接嵌入DTD定义语句 ,定义格式
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 根元素名 [
DTD定义语句
……
]>
例
<?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>
DTD - XML 构建模块
元素 :元素是 XML 以及 HTML 文档的主要构建模块。HTML 元素的例子是 "body" 和 "table"
属性 :
实体 :实体是用来定义普通文本的变量,当文档被 XML 解析器解析时,实体就会被展开。
如预定义实体:< < > > & & " " ' '
PCDATA :PCDATA 的意思是被解析的字符数据(parsed character data)
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本
CDATA:CDATA 的意思是字符数据(character data) 在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开
DTD - 元素
声明一个元素
<!ELEMENT 元素名称 类别>(空元素,PCDATA元素)或<!ELEMENT 元素名称 (子元素内容)>
空元素
<!ELEMENT 元素名称 EMPTY>
只有 PCDATA 的元素
<!ELEMENT 元素名称 (#PCDATA)>
带有子元素(序列)的元素
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。
声明子元素的次数
<!ELEMENT 元素名称 (子元素名称+?*)>
+代表最少出现一次,?代表零次或一次,*代表零次或多次的元素 | 代表非.../既...
DTD - 属性
声明属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
例:<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型的选项
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
默认值参数可使用下列值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值固定为value
普通文本 属性的默认值
例:
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
列举属性值
<!ATTLIST 元素名称 属性名称 (en1|en2|..) 默认值>
<!ATTLIST payment type (check|cash) "cash">
DTD - 实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体声明
<!ENTITY 实体名称 "实体的值">
一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
例:<!ENTITY writer SYSTEM "&writer;http://www.w3school.com.cn/dtd/entities.dtd"><author>&writer;</author>