<!DOCTYPEhtml PUBLIC "-//W3C//DTD XTHML 1.0 Transitional//EN""DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
</html>
DOCTYPE声明指明了DTD,用来处理实体引用。没有它,能使用的实体引用就只有:
&: &
<:<
&ht;: >
': '
"::"
加上DOCTYPE声明后,就能够使用HTML实体引用的全集,如©;、 ;、é;等。但添加DOCTYPE声明会使很多浏览器关闭怪异模式。
XHTML有3中DTD:框架型(frameset)、过渡型(transitional)和严格型(strict)。
框架型DTD允许页面可以包含框架;
过渡型DTD保留了不推荐使用的表现性元素,如i、b、u、iframe和applet等;
严格型DTD删除了所有不推荐使用而应该交给CSS去做的表现性元素和属性。很多元素内容模型也更严格,比如在严格型的XHTML总,blockquote和body都不允许直接包含纯文本,他们都要求包含块级元素。
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
浏览器会检查这个公共的标示符来确定正确处理HTML类别。但绝不会从指定的URL中载入DTD,事实上,它们已经知道具体内容,并且不必每次都载入。
在实践中,浏览器永远不会去读DOCTYPE声明引用的DTD,它们知识简单地检查一下这个公共标示符,以确保它们处理的事HTML的哪个变量。因此,没有不要担心它会指向外部服务器上的外部文件,它不会降低浏览器显示文档的速度。
但XML解析器和其他XML工具会读DTD,如果使用了这些工具中的一个,可以吧DTD指向本地的一个副本,比如:
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/dtds/xhtml1-transitional.dtd">
这个DOCTYPE声明会告诉浏览器,相关的XHTML规范存放在本地服务器的/dtds目录下,有需要的话可以去那里获取。