web-dev-qa-db-ja.com

XML / HTML:終了タグに要素名が必要ですか?

他のシリアライゼーション言語と比較して、XMLに対する主な批判の1つはその冗長性です。ほとんどの場合、JSONはより簡潔で読みやすいですが、すべてではありません。

しかし、終了タグから名前を取り除くだけで、XMLから余分な部分を大幅に削減できるように思えます。適切なインデントがあれば、読みやすさは問題になりません(私に尋ねればそれは改善になるはずです)。また、構造的には必要ないため、適切なXMLエディター/ビューアーを簡単に削除/非表示または追加できます。 このように、2つの形式は完全に等価で交換可能である必要があります。

以下を比較してください(ソースは http://www.w3schools.com/xml/simple.xml から取得):

<breakfast_menu>
    <food>
        <name>Belgian Waffles</name>
        <price>$5.95</price>
        <description>
                    Two of our famous Belgian Waffles with plenty of real maple syrup
        </description>
        <calories>650</calories>
    </food>
    <food>
        <name>Strawberry Belgian Waffles</name>
        <price>$7.95</price>
        <description>
                    Light Belgian waffles covered with strawberries and whipped cream
        </description>
        <calories>900</calories>
    </food>
    <food>
        <name>Berry-Berry Belgian Waffles</name>
        <price>$8.95</price>
        <description>
                    Light Belgian waffles covered with an assortment of fresh berries and whipped cream
        </description>
        <calories>900</calories>
    </food>
    <food>
        <name>French Toast</name>
        <price>$4.50</price>
        <description>
                    Thick slices made from our homemade sourdough bread
        </description>
        <calories>600</calories>
    </food>
    <food>
        <name>Homestyle Breakfast</name>
        <price>$6.95</price>
        <description>
                    Two eggs, bacon or sausage, toast, and our ever-popular hash browns
        </description>
        <calories>950</calories>
    </food>
</breakfast_menu>

そして

<breakfast_menu>
    <food>
        <name>Belgian Waffles</>
        <price>$5.95</>
        <description>
                        Two of our famous Belgian Waffles with plenty of real maple syrup
        </>
        <calories>650</>
    </>
    <food>
        <name>Strawberry Belgian Waffles</>
        <price>$7.95</>
        <description>
                        Light Belgian waffles covered with strawberries and whipped cream
        </>
        <calories>900</>
    </>
    <food>
        <name>Berry-Berry Belgian Waffles</>
        <price>$8.95</>
        <description>
                        Light Belgian waffles covered with an assortment of fresh berries and whipped cream
        </>
        <calories>900</>
    </>
    <food>
        <name>French Toast</>
        <price>$4.50</>
        <description>
                        Thick slices made from our homemade sourdough bread
        </>
        <calories>600</>
    </>
    <food>
        <name>Homestyle Breakfast</>
        <price>$6.95</>
        <description>
                        Two eggs, bacon or sausage, toast, and our ever-popular hash browns
        </>
        <calories>950</>
    </>
</>
3

XML形式を変更できますか(つまり、冗長性の問題がない新しい言語を作成します)?はい、できます。

「より良いXML」(BETXMLと呼びましょう)に完全に移行するには、次のことが必要です。

  • すべてのパーサーを再実装し、

  • 現在XMLを使用しているすべてのアプリケーションを書き換えます。

  • XMLに基づいてすべてのプロトコルを書き換えます。

または、すべてを適切な場所に保ち、新しい言語を発明して、どこにでも適応し始めるまで待つこともできます。唯一の問題は、新しい言語の利点が非常に限られていることです。詳細度の低い言語を必要とするアプリケーションは、すでにJSONを使用しています。 BETXMLがXMLより優れていることを人々にどのように説得しますかand JSON?

12

</>バリアントで大きな利益が見られません。人間の目の読みやすさについて話していますか?その場合、ファイルの真ん中に次のようなものが表示されたときにコードが何を伝えようとしているのかを理解するのではなく、いつでも通常のXMLを使用します。

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

XMLファイルはデータコンテナです。 canをテキストエディタで手動で読んで編集したからといって、必ずしもそうするのが得策であるとは限りません。これは主に、あるアプリケーションから別のアプリケーションにデータを伝達することを目的としています(または、はい、単にstoreデータに)。

実際のファイルサイズを意味しているのでしょうか?まあ、それが非常に重要な場合は、おそらく、とにかく最も適切なファイル形式を使用していません。

しかし、XMLをそのまま維持するさらに重要な理由は、real XMLファイルに構造エラーがある場合、XMLのタグ/終了タグの設計により、パーサーは非常に簡単に問題のある場所を特定し、それによってファイルの残りの部分を引き続き使用できるかどうかを確認します。

</>バリアントに終了タグがない場合、パーサーが問題の原因を見つけるのがはるかに困難になります。また、適切なDTDがない場合、パーサーは、ファイルの最後に到達し、(うまくいけば)レベルの不均衡があることを検出するまで、何も問題がないことを認識しません。そして、その時点では、エラーがどこにあるのかを伝える方法がないため、ファイル全体を拒否する以外に何もできません。

8
Boise