我知道DTD是如何工作的,当我想宣布<br>
(或<br/>
)时,我必须这样做:
<!ELEMENT br EMPTY>
但是在这个文件(https://www.w3.org/MarkUp/html-spec/html.dtd)中,我发现了以下一行:
<!ELEMENT BR - O EMPTY>
我发现大多数都相同,但-
和O
有什么区别?我在哪里可以了解更多信息?
由于
答案 0 :(得分:1)
-
和O
(字母O)字符是SGML标记省略指示符,并且(分别向SGML解析器)声明元素的开始和/或结束标记可省略(如果O
)或必须存在(如果-
)。第一个-
或O
字符用于start-element标记,第二个字符用于end-element标记。
例如,有效的HTML文档可能如下所示(为了清楚起见,“公共标识符”缩写为...
):
<!DOCTYPE html PUBLIC "...">
<title>A valid HTML document</title>
<p>Body Text
SGML使用HTML DTD(包含HTML的元素和属性声明)来推断省略的标记,以便将示例标记解析为
<!DOCTYPE html PUBLIC "...">
<html>
<head>
<title>A valid HTML document</title>
</head>
<body>
<p>Body Text</p>
</body>
</html>
使用标记省略指示符的元素声明会使SGML解析器到达推断和规范标记
<!ELEMENT html O O (head,body)>
<!ELEMENT head O O (title)>
<!ELEMENT body O O (#PCDATA,p)+>
<!ELEMENT p - O (#PCDATA)>
br
元素的情况很特殊,因为它是EMPTY
元素(HTML称这些为“空元素”,还有其他元素,例如img
和hr
)。传统SGML中声明内容为EMPTY
的元素不允许具有结束元素标记,并且使用结束标记省略指示符是多余的,甚至是误导性的。
对于现代HTML(W3C HTML 5和5.1)的完整SGML DTD,请参阅从http://sgmljs.net/blog/blog1701.html链接的项目/论文。
请注意,自版本5开始,HTML不再发布SGML DTD或其他正式语法,并且未正式引用SGML标准(ISO 8879)作为规范性引用。您偶然发现的声明可能来自较旧的HTML 4规范。
修改:还想澄清一下,在XML 中使用<br/>
,您不必声明它EMPTY
;事实上,你根本不需要申报任何东西;此外,既然您要求它,您可以访问(我们的网站)http://sgmljs.net/docs/sgmlrefman.html以了解有关SGML的更多信息