web-dev-qa-db-ja.com

SGML / HTML / XMLの終了タグの目的は?

すぐに効果があるタグ(<br>)と、その間にあるものに影響するタグ(<a> </ a>)があります。

終了タグはverboseであり、私はredundantも信じています。

<tag parameters> ... </tag>

冗長

LISPのs-expresionsと比較してください。

(tag parameters)

冗長

終了タグは必要ありません。これらの言語は文脈自由であり、これはそこでは不可能です:

<tag1> <tag2> </tag1> </tag2>

基本的にこれらは同等でなければなりません:

<tag1> <tag2> </> </>
<tag1> <tag2> </tag2> </tag1>       

質問

読みやすくするために終了タグはありますか?終了タグの冗長性の目的は何ですか?私はこれのデザインの背後にある論理を理解したいと思います。ありがとう。 :)

6
user712092

XMLの場合、Tim Brayは、XML仕様の注釈付きバージョン http://www.xml.com/axml/target.html#sec-Origin-goals で設計目標の概要を説明しています。

XMLの設計目標は次のとおりです。

  1. XMLは、インターネット上で直接使用できるものでなければなりません。
  2. XMLは、さまざまなアプリケーションをサポートします。
  3. XMLはSGMLと互換性があります。
  4. XML文書を処理するプログラムを作成するのは簡単です。
  5. XMLのオプション機能の数は、最小限、理想的にはゼロに保つ必要があります。
  6. XML文書は人間が判読可能であり、合理的に明確でなければなりません。
  7. XML設計は迅速に準備する必要があります。
  8. XMLの設計は、正式で簡潔なものにする必要があります。
  9. XMLドキュメントは簡単に作成できます。
  10. XMLマークアップの簡潔さの重要性は最小限です。

目標10の注釈は次のとおりです。

Tersnessの重要性は最小限です

この目標の歴史的な理由は、簡潔さのために、SGMLの最小化の使用、つまりマークアップの一部の省略により、SGMLの複雑さと困難さが大幅に増加したことです。 XMLの場合、簡潔さと明快さの間に矛盾があるときはいつでも、明快さが勝ちました。

Rick Jelliffeの背景はもう少し http://www.oreillynet.com/xml/blog/2008/01/the_design_goals_of_xml_1.html

10
robstel

質問のタイトルでは、HTML、SGML、XMLを同じものであるかのように質問しますが、同じではありません。実際、彼らはあなたが尋ねている正確にその分野で非常に異なっています。

特に、SGMLにはNull終了タグと暗黙の終了タグ(および暗黙の要素も)の両方があり、HTMLはSGMLのアプリケーションなので、これらを継承します。

ヌル終了タグを使用すると、終了タグの名前を省略できます。の代わりに

<tag>content</tag>

あなたも書くことができます

<tag/content/

暗黙の終了タグを使用すると、終了タグが必要であることがコンテキストから明らかな場合は、終了タグを完全に省略することができます。たとえば、HTMLでは、body要素をtitleまたはhead要素内に含めることはできないため、次のように記述できます。

<html>
  <head>
    <title>The Title
  <body>

title要素とhead要素の両方が暗黙的に閉じられます。

終了タグもドキュメントの最後に含まれます。すべての要素は逆の順序で閉じられます。

暗黙の要素では、省略可能です両方開始および終了タグ:pbody内でのみ許可されているため、最初のpbodyを意味します:

<html>
  <head>
    <title>The Title
    <p>

ここでは、bodyタグがなくても、ドキュメント内にisbody要素があります。

すべてをまとめると、次のような結果になります。

<HTML /
  <HEAD /
    <TITLE / > /
    <P / >

これは完全な100%整形式で、100%有効なHTMLドキュメントです。 (まあ、DOCTYPE宣言はありませんが、追加する場合は、W3Cバリデーターを介してHTML 1.0、2.0、3.2、4.01としてStrictとしても実行できます。)

意味的には、次のXHTMLと同等です。

<html>
  <head>
    <title>
      &gt;
    </title>
  </head>
  <body>
    <p>
      &gt;
    </p>
  </body>
</html>

さて、どちらが読みやすいですか? (実際、それは深刻な問題です。私は特に、熟練したLISPプログラマーが何を言う必要があるのか​​に興味があります。)

12
Jörg W Mittag

はい。終了タグは、エラーが発生した場合の読みやすさと明確さを支援するためにあります。ドキュメントの形式が正しくなく、終了タグがない場合、開発者はどのタグが欠けているかをどのように確認しますか?

また、終了タグに名前を付けると、SAXタイプの解析に役立ち、パーサーが終了するノードのタイプを簡単に識別できるようになると思います。

3
Matthew Flynn