17

はい、これはおそらく私を悩ませるべきではありません。

しかし、そうです!

なぜXMLにはそのような冗長な終了タグがあるのですか?人間にとってドキュメントが見苦しくなるだけでなく、タグの開閉が一致しない(またはスペルが間違っている)リスクが不必要に発生します。

終了タグが必要な場合でも、終了タグ内に開始タグの名前を含める必要があるのはなぜですか?外側のタグを閉じる前に最も内側のタグを閉じる必要があるため、XMLにあいまいさはありません。

例えば:

<thisIsSomewhatLong>
    Hello, world!
</thisIsSomewhatLong>

...よりもはるかに冗長です:

<thisIsSomewhatLong>
    Hello, world!
</>

また、人間にとってもコンピューターにとっても、あいまいさは解消されません

このルールの論理的根拠を知っている人はいますか?空の終了タグを禁止することでどのようなリスクを回避できますか?

4

6 に答える 6

20

XMLは読みやすさを向上させるため、効率的または簡潔ではなく、操作しやすいように</>作成されました。あいまいさを生じさせないと思われる場合は、コードをインデントしているからです。インデントを省略した場合(これは、終了タグに名前を含める場合に比べて非常に弱い制約です)、混乱します。

簡単な例?

<A><B><C><D>foo</><D>bar</></><H>baz</></></>

あなたはそれがとても読みやすいと思いますか?<H>終了タグを数えずにどこにあるかを理解するのは難しいです。

于 2010-12-06T20:13:17.157 に答える
17

私は1つの大きな利点を見ることができます:欠落している終了タグは、次のようなエラーを取得するのではなく、(人間またはコンピューターによって)すぐにキャッチされますInsufficient closing tags provided; please read through your 1000 line file and figure out where it happened.

于 2010-12-06T20:15:23.273 に答える
8

あなたが提案することはS-Expressionに相当します。あなたが知っている、すべてのLispが書かれているもの、例えば(thisisSomewhatLong Hello, world!)。実際、冗長性がはるかに少ないため、これが優れていると主張する人もいます。彼らは正しいです、それそれほど冗長ではありません。しかし、好むと好まざるとにかかわらず、この冗長性には利点もあります。最も注目すべきは、早期のエラー検出を可能にすることです。SExprsなどの場合、近いパレンがないか、パレンが多すぎると、「不一致のパレンがあります。幸運を祈ります」(運が良ければ、このようなミスを2回行うと、均等になり、簡単にすべてを台無しにする可能性があります)マークアップ-もちろん、スキーマに準拠しない構造を生成する可能性がありますが(このようなものがあると仮定すると)、わずかに優れたエラー報告が可能になります)。

「XMLはS式ではありません」も参照してください。

于 2010-12-06T20:18:08.613 に答える
3

そうでなければネット上で読むかもしれませんが、XMLは主にコンピューターで読み取り可能であるため、有効性チェックに開始タグと終了タグを使用します。

人間が読める形式です。多くのアプリケーションで使用されるデータを格納するのに効率的ですが、最終的にはこれらのタグが存在するため、パーサーはそのデータを読み取り、タグが一致するかどうかを確認し、意味のあることを実行できます。

多くの人はXMLの冗長性を好まないので、気に入らなくても心配しないでください。あなたは一人じゃない。

于 2010-12-06T20:13:31.930 に答える
2

前述のように、読みやすさのためだと思います。ただし、これはDRYの原則に違反しているため、エラーの原因となります。もちろん、ドキュメントのサイズが大きくなり、ネットワークを介してドキュメントを渡す場合は2倍になります。これは、最近では一般的に行われていることです。

確かに、終了タグを数える必要はありませんが、次のようなエラーのリスクによって相殺されます。

<color>red</colour>

常に同期を保つ必要がある冗長な定義=ストレス。そのため、私はXMLを(可能な場合は)ボイコットし、YAMLを選択します。YAMLは、この問題に悩まされることはなく、XMLと同じくらい表現力があります(DTDを除いて、これまでのところ、まだ価値を示していません)。 。

もう1つの代替手段はJSONです。これは、同様にこの冗長性の問題を回避しますが、JSONには内部参照がなく、いずれの場合もYAMLはJSONの完全なスーパーセットです。

于 2011-03-31T22:04:58.563 に答える
1

リスクはで迷子になることです

    ...
    ...
    ...
    </>
   </>
  </>
 </>
</>

ところで、エンドタグ名がなくても問題なく検証できます。

于 2010-12-06T20:16:32.967 に答える