空DTD元素与额外的信息

时间:2017-09-17 13:33:07

标签: html dtd xml-dtd

我知道DTD是如何工作的,当我想宣布<br>(或<br/>)时,我必须这样做:

<!ELEMENT br EMPTY>

但是在这个文件(https://www.w3.org/MarkUp/html-spec/html.dtd)中,我发现了以下一行:

<!ELEMENT BR    - O EMPTY>

我发现大多数都相同,但-O有什么区别?我在哪里可以了解更多信息?

由于

1 个答案:

答案 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称这些为“空元素”,还有其他元素,例如imghr )。传统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的更多信息