DTD <!DOCTYPE>
精华
小牛编辑
126浏览
2023-03-14
如果您查看某些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>
- 关键字
SYSTEM
表示它是私有DTD(不适用于公开发布)。 URL
和[DTD]
的存在表明这是一个外部和内部DTD(DTD的一部分在位于URL的文档中定义,另一部分在XML文档中定义)。
示例
<!DOCTYPE tutorials SYSTEM "tutorials.dtd">
<!DOCTYPE rootname SYSTEM URL [DTD]>
- 关键字
SYSTEM
表示它是私有DTD(不适用于公开发布)。 URL
和[DTD]
的存在表明这是一个外部和内部DTD(DTD的一部分在位于URL的文档中定义,另一部分在XML文档中定义)。
示例
<!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">