我不明白为什么我们需要!Entities
DTD 以及 HTML 之类的标记。
例如,我看到一个实体定义为<!ENTITY copy "©">
.
如果我们可以清楚地使用©
符号,为什么我们在标记中使用它时需要使用实体?为什么不像我们在这里那样直接输入呢?
是不是每个键盘上都没有某些符号?如果是这样,那么当每个键盘都有一个&符号时,为什么我们有一个&符号实体。
还有一个问题 - 如何在 & 实体的定义中使用 & 符号!
如果有人能为我解决所有这些困惑,我将不胜感激。
假设您想避免到处都是丑陋的 CDATA 部分,您需要一个实体 for <
,因为它在 XML 中具有特殊含义。鉴于您首先需要实体并且它们以 开头&
,因此您还需要一个实体。然后,您需要有一种方法将两者都'
放入"
属性值中,因此您至少需要一个实体用于其中一个。
除此之外,如果您需要以只能传输 Unicode 子集的编码传输数据,您可能需要实体(当然不一定要命名,数字就可以)。Unicode 编码(例如 UTF-8)在您可以使用时非常有用,但在“现实世界”中可能并不总是一种选择。
那么,实体也不一定代表单个字符。例如,您可以让您的 XML 文件包含一些您一遍又一遍地拥有的文本块,方法是在 DTD 中定义它们并在文件本身中添加&legalBlurp;
或。&logo;
将此类信息放在一个地方进行更改是一件好事。
浏览器实际上并不读取 DTD。理论上,它们可以,并且在处理 XML 文档时实际上可能会这样做,但 HTML 规范中的实体定义实际上只是描述浏览器应该知道的内置符号的一种方式。当然,XML 处理器可能会读取 DTD,但我想那是另一回事了。
所以这归结为一个问题,为什么我们会使用实体引用,如©
. 以下是可能的原因列表:
©
)来表示直接可表示范围之外的所有字符。1 234
会更清楚地表明有一个不间断空格。−
和–
使差异更加突出。<
and&
和(带有属性值)到"
and '
。关于©
,几乎总是只有原因 2 可能适用。
& 符号有一个实体,因为它打开了一个实体或字符引用,所以当它用作数据字符时,它本身可能需要被“实体化”。在 HTML 规范中,它被正式定义为
<!ENTITY amp CDATA "&">
所以没有歧义或永恒的循环:实体,就像在 HTML 中定义的所有实体一样,是根据字符引用定义的,它使用数字。