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