2011-04-04 19 views
0

請原諒我,如果這太簡單的問題,因爲我只是這個領域的初學者。關於如何引用不同的DTD的小問題

我的客戶曾經使用過一個叫做「article.dtd」的dtd很長一段時間。現在他們決定將這個dtd稍微擴展一些,並添加一些元素,並將其重命名爲「project.dtd」。由於添加到article.dtd的新元素只有幾行,因此他們不希望每次創建project.dtd時都複製article.dtd中的所有內容。

因此,我正在尋找一種方法,如果可以從新創建的project.dtd中引用article.dtd,並且在project.dtd中,我們只需要放入文章中未包含的那些行。 DTD?

僅供參考,這些都是在project.dtd添加四行:

<!ELEMENT project (title, keywords?, feature?, related-terms?, abstract?, classification?, contributor*, reviewer?, materials?, body, related-links?, questions?)>  
<!ATTLIST project %common-atts; %status-atts; %profile-atts;> 

<!ELEMENT abstract ((%para-elems;)+)> 
<!ATTLIST abstract %common-atts;> 

感謝提前的幫助。

回答

2

是的,你可以用參數實體來做到這一點。 (看起來您已經使用了很多參數實體。)

您需要添加參數實體聲明(<!ENTITY % entity-name ...>)和參數實體參考(%entity-name;)。

下面是使用實體名稱article-dtd的示例。這將是您的完整project.dtd

<!ENTITY % article-dtd SYSTEM "article.dtd"> 
%article-dtd; 

<!ELEMENT project (title, keywords?, feature?, related-terms?, abstract?, classification?, contributor*, reviewer?, materials?, body, related-links?, questions?)>  
<!ATTLIST project %common-atts; %status-atts; %profile-atts;> 

<!ELEMENT abstract ((%para-elems;)+)> 
<!ATTLIST abstract %common-atts;> 

我只在實體聲明中使用的系統標識符,但你也可以添加一個公共標識符。

實施例:

<!ENTITY % article-dtd PUBLIC "-//SO//Stackoverflow Test//EN" "article.dtd">