2014-08-27 72 views
2

我一直在閱讀有關W3C推薦和維基百科的這些主題。我不確定我是否完全理解了它們。有人能夠向我清楚地解釋DTD中的外部實體和符號嗎?他們的用途究竟是什麼?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 > 

糾正我,如果我錯了。一般的內部實體用聲明的字符串替換文檔正文中的實體名稱(&ent;)。外部實體是否將實體名稱替換爲外部文檔的全部內容?

回答

3

是的,你正確理解。實體引用(如&open-hatch;)是對在ENTITY聲明中定義的任何內容的引用。

符號用於指定非XML(未分析的)數據。在上面的例子中,ENTITY聲明指定OpenHatch.gif的內容是符號gif。還需要對gif進行相應的NOTATION聲明。 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的實體。該實體是對文件cgm/test-image.cgm的引用,它是符號cgm。該實體由graphic元素的src屬性引用。如何使用所有這些信息取決於應用程序使用哪些數據。