0

!EntitiesHTMLのようなマークアップだけでなく、DTDでも必要な理由がわかりません。

たとえば、 として定義されたエンティティを見ました<!ENTITY copy "©">

シンボルを明確に使用できる場合©、マークアップで使用するときにエンティティを使用する必要があるのはなぜですか? ここで行ったように直接入力してみませんか?

すべてのキーボードに特定の記号がないのは問題ですか? もしそうなら、すべてのキーボードにアンパサンドがあるのに、なぜアンパサンドのエンティティがあるのでしょうか。

もう 1 つの質問 - アンパサンド記号をアンパサンド エンティティの定義に使用するにはどうすればよいでしょうか。

誰かが私のためにこのすべての混乱を解決できれば、本当に感謝しています.

4

2 に答える 2

2

ブラウザーは実際には DTD を読み取りません。理論的には可能であり、XML ドキュメントを処理するときに実際にそうする可能性もありますが、HTML 仕様のエンティティ定義は、実際には、ブラウザーが組み込みとして知っているはずの表記法を記述する方法にすぎません。もちろん、XML プロセッサは DTD を読み取ることもできますが、それは別の話だと思います。

したがって、これは、なぜ のようなエンティティ参照&copy;を使用するのかという問題に要約されます。考えられる理由のリストを次に示します。

  1. 非 Unicode 文字エンコーディングを使用する場合、エンティティ参照または文字参照 ( など&#xa9;) を使用して、直接表現可能な範囲外のすべての文字を表す必要があります。
  2. 文字を直接入力する便利な方法がないため、エンティティ参照を使用したい場合があります。多くの場合、特殊文字を入力する方法を学ぶのに苦労することができないという理由だけで、これを行います。
  3. 一部の文字が見えないか、スペースのように見えます。文字列「1 234」(改行なしスペースあり) は、「1 234」(通常のスペースあり) とほとんど同じように表示されるため、書く1&nbsp;234と、改行禁止スペースがあることがより明確になります。
  4. 一部の文字は、他の一般的な文字と視覚的に区別するのが難しい場合があります。「-」と「-」の違いがわかりますか?とを使用する&minus;&ndash;、HTML ソース コードでの違いがより顕著になります。
  5. いくつかの文字は、少なくともいくつかの条件下では、データ文字として表示される場合、エンティティ参照または文字参照を使用して記述する必要があります。これは<および&および (属性値を含む) に"およびに適用されます'

に関して&copy;は、ほとんどの場合、理由 2 のみが該当します。

アンパサンドはエンティティまたは文字参照を開くため、エンティティを持ちます。そのため、データ文字として使用する場合はそれ自体を「エンティティ化」する必要がある場合があります。HTML 仕様では、正式に次のように定義されています。

<!ENTITY amp     CDATA "&#38;">

したがって、あいまいさや永遠のループはありません。エンティティは、HTML で定義されたすべてのエンティティと同様に、数字を使用する文字参照の観点から定義されます。

于 2013-04-24T20:22:06.797 に答える
2

醜い CDATA セクションをいたるところに配置することを避けたいと仮定すると<、XML では特別な意味を持つため、 のエンティティが必要になります。そもそもエンティティが必要であり、それらが で始まることを考えると、そのためにもエンティティが必要&です。'次に、属性値の中にとの両方を配置する方法が"必要なので、少なくともそれらの 1 つのエンティティが必要です。

それを超えて、Unicode のサブセットのみを転送できるエンコーディングでデータを転送する必要がある場合は、エンティティが必要になる場合があります (もちろん、必ずしも名前が付けられているわけではなく、数値でも問題ありません)。UTF-8 などの Unicode エンコーディングは、使用できる場合には優れていますが、「現実の世界」では常に使用できるとは限りません。

それから、エンティティも必ずしも単一の文字を表すとは限りません。たとえば、DTD でテキスト ブロックを定義し、ファイル自体に&legalBlurp;またはを追加するだけで、XML ファイルにテキスト ブロックを含めることができます。&logo;この種の情報を 1 か所にまとめて変更を加えるのは良いことです。

于 2013-04-24T19:54:51.233 に答える