【问题标题】:Names of special HTML construct tags特殊 HTML 构造标记的名称
【发布时间】:2016-01-18 12:32:18
【问题描述】:

在 HTML、XML 和部分 DTD 中,有两种特殊的标签结构:

  • 感叹号 <! 开头并以标准> 结尾的标签,例如<!DOCTYPE html><!--comment-->
  • 问号 <? 开头并以另一个问号?> 结尾的标签,例如<?xml version="1.0"?><?php phpinfo();?>

我的问题是,这些构造类型是否有不同的名称,还是我必须将它们称为“感叹号标签” ”和“问号标签doohicky”永远?


答案:

这个答案很大程度上是由下面kjhughes 的答案得出的。

XMLHTML 在它们的规范中都没有明确命名 <! > 构造,对于每种类型的 <!X > 结构都有不同的名称—X 代表 DOCTYPEELEMENTENTITYATTLISTNOTATION--* 或以marked section 开头的marked section *。

但是,SGML——HTML 和 XML 的基础——可以。

SGML 中,正确填充的<!X > 构造称为SGML 标记声明<!标记声明打开 分隔符而>标记声明结束分隔符。

对于<??> 构造,SGMLHTML 都定义了一个类似的<?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


【解决方案1】:

请参阅W3C Extensible Markup Language (XML) Recommendation 了解现代标记术语:

XML 建议书没有特别标注 <!<?,但对这些使用 SGML 术语是公平的:

  • <! 是一个标记声明打开分隔符,要与一个标记声明关闭分隔符匹配,>
  • <? 是一个 处理指令打开分隔符,将与 处理指令关闭分隔符匹配,?>(尽管在 SGML 中,PI 关闭分隔符是 >)。

【讨论】:

  • 感谢您的回复!我想我只是一直认为他们有更笼统的名字。让我提出这个问题的主要内容是 HTML 4.01 DTD,其中 cmets 出现在声明中。例如, 在 DTD 中似乎是可以接受的,在 HTML/SGML/XML 文件中也可能如此。事实上,根据 SGML 规范,注释实际上以“--”标记开始和结束,而不是“”标记。因此,我认为实际上还有更多的技术名称,至少对于 类型构造而言。
  • <! 是一个 标记声明打开分隔符,将与 标记声明关闭分隔符 > 匹配,但 XML 规范没有'不再显式调用它们——它们与 elementdecl 产品中的 <!ELEMENT 等相关文字绑定在一起。
  • 感谢您的澄清!对我之前评论的快速说明:SGML 评论必须位于 构造中的两个“--”标记之间,但标记不必位于构造的开头或结尾。这就是为什么在评论中使用双连字符会在 Firefox 中引发错误。
  • 另外,看到打开和关闭标记被称为标记声明打开/关闭分隔符,这意味着整个构造被称为标记声明,尽管它可能没有明确说明。现在唯一剩下的问题是显式/隐式术语或 ?> 构造是什么。
  • 类似地,<? 是一个处理指令打开分隔符,要与一个处理指令关闭分隔符匹配,?>
【解决方案2】:

这个答案很大程度上是由上面kjhughes 的答案决定的。

XMLHTML 均未在其规范中明确命名 <! > 构造,对于每种类型的 <!X > 结构都有不同的名称—X 代表 DOCTYPEELEMENTENTITYATTLISTNOTATION--* 或以[ * 开头的marked section

但是,SGML——HTML 和 XML 的基础——可以。

SGML 中,正确填充的<!X > 构造称为SGML 标记声明<!标记声明打开 分隔符而>标记声明结束分隔符。

对于<??> 构造,SGMLHTML 都定义了一个类似的<?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 中是它们自己的类别。


【讨论】:

    【解决方案3】:

    每个标签都有一个名字:

    <!DOCTYPE html> = doctype
    <!-- = comment
    <?php = php tag
    <?xml = xml tag
    

    【讨论】:

    • 虽然我很欣赏这个答案,但这些名称是按标签分配的。我正在寻找的是每个标签类型的 overall 名称。这样做的原因是,关于 doctype 声明,以下也是理论上有效的标记,至少对于 DTD 而言:-this is a comment--html>。如您所见,cmets 可以包含在 类型标记中的任何位置。这也应该是有效的:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多