关于如何引用不同DTD的一个小问题

时间:2011-04-04 16:23:12

标签: xml dtd

如果这个问题太简单,请原谅我,因为我只是这个领域的初学者。

我的客户过去常常使用dtd,名为“article.dtd”。现在他们决定稍微延长那个dtd,增加一些元素并将其重命名为“project.dtd”。由于添加到article.dtd的新元素只有几行,因此每次创建project.dtd时都不希望从article.dtd复制所有内容。

因此,我正在寻找一种方法,如果可以从新创建的project.dtd引用article.dtd,而在project.dtd中,我们只需要放入那些未包含在article.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;>

感谢您的帮助。

1 个答案:

答案 0 :(得分: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;>

我只在实体声明中使用了SYSTEM标识符,但您也可以添加PUBLIC标识符。

示例:

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