我的客户过去常常使用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;>
感谢您的帮助。
答案 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">