【发布时间】:2016-01-18 12:32:18
【问题描述】:
在 HTML、XML 和部分 DTD 中,有两种特殊的标签结构:
- 以感叹号
<!开头并以标准>结尾的标签,例如<!DOCTYPE html>和<!--comment--> - 以问号
<?开头并以另一个问号?>结尾的标签,例如<?xml version="1.0"?>和<?php phpinfo();?>
我的问题是,这些构造类型是否有不同的名称,还是我必须将它们称为“感叹号标签” ”和“问号标签doohicky”永远?
答案:
这个答案很大程度上是由下面kjhughes 的答案得出的。
XML 和 HTML 在它们的规范中都没有明确命名 <! > 构造,对于每种类型的 <!X > 结构都有不同的名称—X 代表 DOCTYPE 、ELEMENT、ENTITY、ATTLIST、NOTATION、--* 或以marked section 开头的marked section *。
但是,SGML——HTML 和 XML 的基础——可以。
在SGML 中,正确填充的<!X > 构造称为SGML 标记声明,<! 是标记声明打开 分隔符而> 是标记声明结束分隔符。
对于<??> 构造,SGML 和HTML 都定义了一个类似的<?X > 结构,称为处理指令(X 表示处理指令目标)。在这种情况下,<? 被称为处理指令打开分隔符,并与处理指令关闭分隔符配对,这是一个单独的>。
SGML 和 HTML 都没有使用 ? 作为处理指令关闭分隔符的一部分,本质上使 ?> 关闭标记无效。
但是,XML appears to extend 是原始的 SGML 规范,并使用 ?> 而不是 > 来关闭处理指令,这就是为什么在 XML 文档中可以找到这种形式的原因。
但是要在汤中添加一些头发,<? 后跟不区分大小写的 x m l 并以 ?> 结尾是保留的,并且是 技术上不是处理指令。这种形式目前仅用于XML declarations,尽管可以说 XML 声明只是为 XML 解析器本身处理指令。
TL;DR:
- 完整的
<!>是一个SGML 标记声明,但在HTML** 或XML*** 中没有明确命名 - 完整的
<??>是 XML 中的处理指令,但在 SGML 和 HTML 中以>结束。
注意事项:
*HTML 2.0 specification 将 cmets 称为“注释声明”。 Taken together with SGML,这意味着每个有效的<!X > 表单的名称都以单词“declaration”结尾。
**HTML 4 recommendation 的措辞确实暗示 cmets 仍然是标记声明的子结构,但它不像 HTML 2.0 那样将 cmets 称为“注释声明”。
***XML does name 标记声明;但是,该定义不包括 cmets 或标记部分,它们在 XML 中是它们自己的类别。
【问题讨论】:
-
这个问题可能对第一个问题有帮助:stackoverflow.com/questions/16321081/…。第二部分的另一个:stackoverflow.com/questions/3335067/…
-
谢谢!那么,如果我理解正确,第一个称为“标记声明”标签,第二个称为“处理指令”标签?这些是正式的、编纂的名称,还是只是社区术语?换句话说,核心 SGML/XML 开发人员如何称呼他们?
-
说实话,我只是使用它们,并没有过多考虑它们的名称。在 PHP 的特殊情况下,我称之为“开放标签”,但我不知道这是否是技术名称。
标签: html xml tags comments dtd