带有额外信息的空 DTD 元素
Empty DTD Element with extra info
我知道 DTD 是如何工作的,当我想声明 <br>
(或 <br/>
)时,我必须这样做:
<!ELEMENT br EMPTY>
但是在这个文件 (https://www.w3.org/MarkUp/html-spec/html.dtd) 中,我发现了以下行:
<!ELEMENT BR - O EMPTY>
我看大部分是一样的,但是-
和O
有什么区别呢?我在哪里可以了解更多信息?
谢谢
-
和 O
(字母 O)字符是 SGML 标记省略指示符,并声明(对 SGML 解析器)开始- and/or 结束标记,分别,因为元素可以省略(如果 O
)或必须存在(如果 -
)。第一个 -
或 O
字符用于开始元素标记,第二个字符用于结束元素标记。
例如,有效的 HTML 文档可能如下所示(为清楚起见,其中 "public identifier" 缩短为 ...
):
<!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 调用这些 "void elements",并且还有其他元素,例如 img
和 hr
)。在传统的 SGML 中,声明内容 EMPTY
的元素根本不允许有结束元素标记,使用结束标记省略指示符是多余的,甚至是误导性的。
对于现代 HTML(W3C HTML 5 和 5.1)的完整 SGML DTD,请参阅我从 http://sgmljs.net/blog/blog1701.html 链接的 project/paper。
请注意,HTML,自第 5 版起,不再发布 SGML DTD 或其他正式语法,也不再正式引用 SGML 标准 (ISO 8879) 作为规范参考。您偶然发现的声明可能来自旧的 HTML 4 规范。
编辑:还想澄清一下,对于在 XML 中使用 <br/>
,您不必声明它 EMPTY
;事实上,您根本不需要申报任何东西;另外,既然你要求它,你可以去(我们的网站)http://sgmljs.net/docs/sgmlrefman.html 了解更多关于 SGML
我知道 DTD 是如何工作的,当我想声明 <br>
(或 <br/>
)时,我必须这样做:
<!ELEMENT br EMPTY>
但是在这个文件 (https://www.w3.org/MarkUp/html-spec/html.dtd) 中,我发现了以下行:
<!ELEMENT BR - O EMPTY>
我看大部分是一样的,但是-
和O
有什么区别呢?我在哪里可以了解更多信息?
谢谢
-
和 O
(字母 O)字符是 SGML 标记省略指示符,并声明(对 SGML 解析器)开始- and/or 结束标记,分别,因为元素可以省略(如果 O
)或必须存在(如果 -
)。第一个 -
或 O
字符用于开始元素标记,第二个字符用于结束元素标记。
例如,有效的 HTML 文档可能如下所示(为清楚起见,其中 "public identifier" 缩短为 ...
):
<!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 调用这些 "void elements",并且还有其他元素,例如 img
和 hr
)。在传统的 SGML 中,声明内容 EMPTY
的元素根本不允许有结束元素标记,使用结束标记省略指示符是多余的,甚至是误导性的。
对于现代 HTML(W3C HTML 5 和 5.1)的完整 SGML DTD,请参阅我从 http://sgmljs.net/blog/blog1701.html 链接的 project/paper。
请注意,HTML,自第 5 版起,不再发布 SGML DTD 或其他正式语法,也不再正式引用 SGML 标准 (ISO 8879) 作为规范参考。您偶然发现的声明可能来自旧的 HTML 4 规范。
编辑:还想澄清一下,对于在 XML 中使用 <br/>
,您不必声明它 EMPTY
;事实上,您根本不需要申报任何东西;另外,既然你要求它,你可以去(我们的网站)http://sgmljs.net/docs/sgmlrefman.html 了解更多关于 SGML