如果您查看某些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文档中元素的规则。
要在XML文档中使用DTD,需要声明它。 DTD可以是内部的(写入正在使用的文档中),也可以是外部的(位于另一个文档中)。
使用!DOCTYPE
声明在XML文档的顶部(在prolog
中)声明了一个DTD。 基本语法是:
<!DOCTYPE rootname [DTD]>
其中,rootname
是根元素,[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的文档中定义)。示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">