2

我只是好奇。为什么“更高的权力”从未向 HTML 规范(或 XML 规范,就此而言)添加关闭包含内容的标签的速记方法,这是有原因的吗?

例如,假设我有以下 html 表:

<table>
    <tr><td>foo</td><td>bar</td><td>foo</td></tr>
    <tr><td>bar</td><td>foo</td><td>bar</td></tr>
    <tr><td>1</td><td>2</td><td>3</td></tr>
</table>

为什么不能使用速记标签来关闭每个标签?

也许是这样的:

<table>
    <tr><td>foo</><td>bar</><td>foo</></>
    <tr><td>bar</><td>foo</><td>bar</></>
    <tr><td>1</><td>2</><td>3</></>
</>

这可以节省几个字节的数据,我能看到的唯一缺点是,如果没有给出命名引用,您将无法快速判断哪个标签(或多个标签)已关闭。但是,如果您正在动态生成内容并希望在数据中保存一些字节,这可能是一个有用的选项。

我很肯定我不是第一个想到这个的人。为什么没有将此类功能添加到任何 HTML 或 XML 规范中?

4

6 回答 6

3

历史上,有人提倡在 XML 格式中允许缩写结束标签,</>事实上微软在他们的第一个 XML 解析器中允许这样做:参见http://mailman.ic.ac.uk/pipermail/xml-dev/1998-April /003204.html

我只能推测为什么最终的规范不允许这样做(并且微软从他们的产品中删除了它)——即使对于那些密切相关的人来说,发现工作组做出特定决定的真正原因也很困难。但肯定有赞成和反对的论据;XML 小组似乎更看重冗余带来的好处,而不是简洁带来的好处。

当然,HTML 是另一回事。他们对采用哪个 SGML 子集做出了截然不同的决定。

于 2012-11-08T23:32:59.450 回答
2

这是完全有效的 HTML:

<div>
    <p>My paragraph
</div>

如果我</div>用您的短标签之一替换结束标签:

<div>
    <p>My paragraph
</>

浏览器如何知道您是打算关闭<p>标签还是<div>标签?这个想法的主要问题是它引入了歧义,但显然它也降低了可读性,我相信其他人会想出其他否定!

更新

另请注意,由于您应该使用 gzip 压缩(通过在文本中查找重复字符来工作)来提供页面,因此您实际上可能会通过这样做损害在线传输大小。在http://gzipper.com上的一个非常快速的测试证实了一个小文本:

<div><div><div><div><div></div></div></div></div></div> <!-- 45% compression -->
<div><div><div><div><div></></></></></> <!-- 25% compression -->
于 2012-11-08T20:45:06.157 回答
2

HTML,如规范所定义的,包括 HTML 4.01,确实有用于关闭带有内容的元素的速记方法。这只是理论上的,但问题是为什么浏览器没有实现这些功能。这些特性在B.3.7 Shorthand markup的 HTML 4.01 规范中被提及,它们包括 NET(= Null End Tag),例如

<blockquote/foobar/

这是由等价于的正式定义

<blockquote>foobar</blockquote>

规范说:“使用它们的文档符合 SGML 文档,但不太可能与许多现有的 HTML 工具一起使用。” 这是一种轻描淡写的说法,因为没有浏览器按照这些规范实现 HTML,即作为 SGML 应用程序(尽管一些非常罕见的浏览器在这个方向上做了一些尝试)。该问题仍然反映在 HTML 验证中(在经典意义上,不包括 HTML5 验证,它按自己的规则运行);请参阅Slashed Validators的传奇。

那么为什么浏览器没有在这方面实现规范呢?从某种意义上说,采用一些现有的 SGML 解析器并将其包含到浏览器中是很容易的。但解释是浏览器是以特别的方式编写的,快速、松散且务实,很少或根本不关注诸如通用标记之类的问题。HTML 规范是在第一个浏览器出现很久之后编写的,主要是对现有实践进行标准化,但也引入了一些新原则。从形式上讲,HTML 有点像 SGML 的改进,但浏览器供应商从未认真对待这一点。

于 2012-11-08T21:20:12.040 回答
1
  1. 使用诸如(本身不正确,但(某些?)浏览器可以正确解释)之类的 gem是完全允许的。<b>foo <i>bar</b> baz</i>
  2. @JamesAllardice 的回答中描述的可选结束标签。
  3. 使用描述性结束标签(稍微)更容易捕捉嵌套错误;请记住,您的结束标签可能距离它的开始标签有几个屏幕。
  4. 在这个宽带普及的时代,“权力”更关心的是向后兼容性,而不是削减 1-2% 的 HTML 页面。
  5. “存在的权力”通常在标准制定中以长达十年的周期运作;那里很难发生任何事情。
于 2012-11-08T20:50:08.077 回答
1

具有讽刺意味的是,虽然不是一般的,但您给出的表格标记的具体示例可以写得更短,有效且完全支持浏览器,只需完全删除大部分结束标记,如下所示:

<table><tr>
  <td>foo<td>bar<td>foo<tr>
  <td>bar<td>foo<td>bar<tr>
  <td>1<td>2<td>3</table>
于 2012-11-08T22:31:23.947 回答
0

我想这取决于你在谈论什么标签。例如:

Break-Line: <br/>
Link: <link />
Input: <input />
Img: <img />

这些可以被认为是速记。

我同意你的意见。例如,当您使用另一种语言进行编程并创建代码块并且仅使用括号时,它知道哪个括号关闭代码块。

也许将来他们会做类似的事情。

于 2012-11-08T20:51:44.213 回答