如果您查看某些XML文档,可能已经注意到一行以<!DOCTYPE
开头出现在文档顶部附近。
如果您查看过(有效)XHTML文件的源代码,可能会看到如下所示的行:
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
此行的目的是声明文档类型定义(DTD)。 实际上,是使用了!DOCTYPE
声明来定义实体。DTD指定了有关XML文档中元素的规则。
1. DOCTYPE语法
要在XML文档中使用DTD,需要声明它。 DTD可以是内部的(写入正在使用的文档中),也可以是外部的(位于另一个文档中)。
使用!DOCTYPE
声明在XML文档的顶部(在prolog
中)声明了一个DTD。 基本语法是:
<!DOCTYPE rootname [DTD]>
其中,rootname
是根元素,[DTD]
是实际定义。
实际上,根据DTD是内部还是外部(或两者),公共或私人,有一些细微的变化。 它们概述如下。
DTD的变化
<!DOCTYPE rootname [DTD]>
这是一个内部DTD(DTD在XML文档中的方括号之间定义)。
示例
<!DOCTYPE tutorials [
<!ELEMENT tutorials (tutorial)+>
<!ELEMENT tutorial (name,url)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ATTLIST tutorials type CDATA #required>
]>
<!DOCTYPE rootname SYstem URL>
示例
<!DOCTYPE tutorials SYstem tutorials.dtd>
<!DOCTYPE rootname SYstem URL [DTD]>
示例
<!DOCTYPE tutorials SYstem tutorials.dtd [
<!ELEMENT tutorial (summary)>
<!ELEMENT summary (#PCDATA)>
]>
<!DOCTYPE rootname PUBLIC identifier URL>
- 关键字
PUBLIC
表示它是公共DTD(用于公共分发)。 URL
的存在表明这是一个外部DTD(DTD在位于URL的文档中定义)。- 标识符表示正式的公共标识符,在使用公共DTD时是必需的。
示例
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>