0

我不明白为什么我们需要!EntitiesDTD 以及 HTML 之类的标记。

例如,我看到一个实体定义为<!ENTITY copy "©">.

如果我们可以清楚地使用©符号,为什么我们在标记中使用它时需要使用实体?为什么不像我们在这里那样直接输入呢?

是不是每个键盘上都没有某些符号?如果是这样,那么当每个键盘都有一个&符号时,为什么我们有一个&符号实体。

还有一个问题 - 如何在 & 实体的定义中使用 & 符号!

如果有人能为我解决所有这些困惑,我将不胜感激。

4

2 回答 2

2

假设您想避免到处都是丑陋的 CDATA 部分,您需要一个实体 for <,因为它在 XML 中具有特殊含义。鉴于您首先需要实体并且它们以 开头&,因此您还需要一个实体。然后,您需要有一种方法将两者都'放入"属性值中,因此您至少需要一个实体用于其中一个。

除此之外,如果您需要以只能传输 Unicode 子集的编码传输数据,您可能需要实体(当然不一定要命名,数字就可以)。Unicode 编码(例如 UTF-8)在您可以使用时非常有用,但在“现实世界”中可能并不总是一种选择。

那么,实体也不一定代表单个字符。例如,您可以让您的 XML 文件包含一些您一遍又一遍地拥有的文本块,方法是在 DTD 中定义它们并在文件本身中添加&legalBlurp;或。&logo;将此类信息放在一个地方进行更改是一件好事。

于 2013-04-24T19:54:51.233 回答
2

浏览器实际上并不读取 DTD。理论上,它们可以,并且在处理 XML 文档时实际上可能会这样做,但 HTML 规范中的实体定义实际上只是描述浏览器应该知道的内置符号的一种方式。当然,XML 处理器可能会读取 DTD,但我想那是另一回事了。

所以这归结为一个问题,为什么我们会使用实体引用,如&copy;. 以下是可能的原因列表:

  1. 使用非 Unicode 字符编码时,您需要使用实体引用或字符引用(如&#xa9;)来表示直接可表示范围之外的所有字符。
  2. 您可能希望使用实体引用,因为您没有直接输入字符的便捷方式。很多时候,人们这样做只是因为他们懒得去学习一种输入特殊字符的方法。
  3. 有些字符是不可见的或看起来像一个空格。字符串“1 234”(有一个不间断空格)大部分显示方式与“1 234”(有一个正常空格)相同,所以写作1&nbsp;234会更清楚地表明有一个不间断空格。
  4. 有些字符很难从视觉上与其他可能更常见的字符区分开来。你看到“-”和“-”之间的区别了吗?在 HTML 源代码中使用&minus;&ndash;使差异更加突出。
  5. 至少在某些情况下,当要作为数据字符出现时,必须使用实体引用或字符引用来编写一些字符。这适用于<and&和(带有属性值)到"and '

关于&copy;,几乎总是只有原因 2 可能适用。

& 符号有一个实体,因为它打开了一个实体或字符引用,所以当它用作数据字符时,它本身可能需要被“实体化”。在 HTML 规范中,它被正式定义为

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

所以没有歧义或永恒的循环:实体,就像在 HTML 中定义的所有实体一样,是根据字符引用定义的,它使用数字。

于 2013-04-24T20:22:06.797 回答