我一直在阅读W3C推荐和维基百科中的这些主题。我不确定我是否完全了解它们。有人可以清楚地向我解释DTD中的外部实体和符号是什么吗?它们的用途是什么?
以下是外部实体声明的一些示例:
<!ENTITY open-hatch SYSTEM
"http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY open-hatch PUBLIC
"-//Textuality//TEXT Standard open-hatch boilerplate//EN"
"http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY hatch-pic SYSTEM
"../grafix/OpenHatch.gif"
NDATA gif >
如果我错了,请纠正我。一般的内部实体用声明的字符串替换文档正文中的实体名称(&amp; ent;)。外部实体是否将实体名称替换为外部文档的全部内容?
答案 0 :(得分:3)
是的,你理解正确。实体引用(如&open-hatch;
)是对ENTITY声明中定义的内容的引用。
表示法用于指定非XML(未解析)数据。在上面的示例中,ENTITY声明指定OpenHatch.gif
的内容是符号gif
。 NOTATION
还需要相应的gif
声明。 XML处理器或应用程序可以使用它来查找可以处理该表示法数据的另一个应用程序。
此外,实体并不总是需要通常的&entity-name;
方法引用。属性也可以指定为类型ENTITY
。您可以通过图形等符号数据(NDATA)看到这一点。
例如......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE doc [
<!ELEMENT doc (graphic)>
<!ELEMENT graphic EMPTY>
<!ATTLIST graphic
src ENTITY #REQUIRED>
<!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN">
<!ENTITY test-image SYSTEM "cgm/test-image.cgm" NDATA cgm>
]>
<doc>
<graphic src="test-image"/>
</doc>
在上面的示例中,我有一个名为test-image
的ENTITY。该实体是对文件cgm/test-image.cgm
的引用,它是符号cgm
。该实体由src
元素的graphic
属性引用。如何使用所有这些信息取决于消耗数据的应用程序。