xyz*_*xyz 0 html xml xhtml doctype
就Web标准和页面验证而言,我知道DOCTYPE的目的(以及该行上的每个url /标识符是什么),但我不确定它在XML文档的上下文中实际上是什么"是".
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它是实际XML文档结构的一部分,还是某种类似注释的"提示",然后被删除?
"!"的意义是什么?在名字之前?这是否表示一种特殊类型的"元素"?他们叫什么?
我发布的示例是Web上的XHTML,但DOCTYPE是否也用于通用XML文档?
DOCTYPE已经从SGML"继承"了(它应该指向解释如何解析文件的DTD文件),但是不言自明的XML语法和命名空间使它变得无关紧要.XML中DOCTYPE/DTD的唯一实际用途是定义允许的命名实体(例如 ).
XML规范甚至允许完全忽略DTD文件的"非验证"解析器(Web浏览器使用这样的解析器,除非您陷入text/html陷阱,在这种情况下根本不使用XML解析器).
DTD 很难用于验证(很难为多个嵌套级别指定规则,无法指定超出几个预定义类型的属性类型).Schema,RelaxNG可以更精确.
DTD也没有完全支持命名空间,这导致了像XHTMLplusMathMLplusSVG DOCTYPE这样荒谬的变通方法.
在Web浏览器中,某些DOCTYPE具有触发符合标准的呈现模式的期望副作用.这比使用DOCTYPE更多的是黑客攻击.
如果您正在使用真正的XHTML(application/xhtml+xml- 根本不在IE中打开的那个),那么根本不要使用DOCTYPE(来自XHTML 5的建议).无论DOCTYPE如何,XML模式都将触发符合标准的渲染.
如果您正在使用text/html模式,请使用<!DOCTYPE html>.这是HTML 5 DOCTYPE,它是最短的,可以在所有浏览器中触发最佳渲染.浏览器不会将DOCTYPE用于任何其他目的,因此您不会错过任何内容.
如果您正在使用XML解析器(外部浏览器)处理XHTML文件,那么请不要忘记正确设置DTD目录,否则您的解析器可能是DoS-ing w3.org每次尝试获取DTD.如果您不能使用DTD目录,则在解析器中禁用"externals"或省略DOCTYPE并且不使用命名实体(即使用 而不是 )