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 の短縮された終了タグを の形式で許可することを支持する人がいて</>、実際、Microsoft は最初の XML パーサーでこれを許可しました: http://mailman.ic.ac.uk/pipermail/xml-dev/1998-Aprilを参照してください/003204.html

なぜ最終仕様でこれが許可されなかったのか (そして Microsoft が製品から削除したのか) を推測することしかできません。ワーキング グループが特定の決定を下した本当の理由を発見することは、密接に関係している人々にとっても難しい場合があります。しかし、確かに賛否両論があります。また、XML グループは、簡潔さから得られる利点よりも、冗長性から得られる利点を重視しているように見えました。

もちろん、HTML は別の話です。彼らは、SGML のどのサブセットを採用するかについて、まったく異なる決定を下しました。

于 2012-11-08T23:32:59.450 に答える
2

これは完全に有効な HTML です。

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

</div>終了タグをあなたの短いタグの 1 つに置き換えるとしたら、次のようになります。

<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 を含む仕様で定義されているように、要素をコンテンツで閉じるための簡略メソッドがあります。これは単なる理論上の話ですが、問題は、ブラウザがそのような機能を実装しなかった理由です。これらの機能は、とりわけ HTML 4.01 仕様のB.3.7 Shorthand markupで言及されており、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

ここでの皮肉なことに、一般的ではありませんが、テーブルマークアップの特定の例は、次のように、ほとんどの終了タグを完全に削除するだけで、有効に、またブラウザで完全にサポートされて、さらに短く記述できます。

<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 に答える
1
  1. (それ自体は正しくありませんが、(いくつかの?) ブラウザーによって正しく解釈されます) のような gem を使用することは大まかに許容されます。<b>foo <i>bar</b> baz</i>
  2. @JamesAllardiceの回答で説明されているオプションの終了タグ。
  3. ネスティング エラーの検出は、説明的な終了タグを使用すると (わずかに) 簡単です。終了タグは、開始タグから数画面離れている可能性があることを覚えておいてください。
  4. ブロードバンドが普及したこの時代に、HTML ページを 1 ~ 2% 削減することよりも、「有力者」は下位互換性に関心を持っています。
  5. 「権力者」は通常、標準開発において10 年間のサイクルで機能します。そこで何かが起こるのは非常に難しいです。
于 2012-11-08T20:50:08.077 に答える
0

それはあなたが話しているタグに依存すると思います。例えば:

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

これらは省略形と見なすことができます。

私はあなたに同意します。たとえば、別の言語でプログラミングしていて、コードのブロックを作成し、ブラケットのみを使用している場合、どのブラケットがコードのブロックを閉じているかを認識します。

たぶん将来、彼らは似たようなことをするでしょう。

于 2012-11-08T20:51:44.213 に答える