我有一个自定义的dtd,其中包含对远程dtd的引用,如:
<!ENTITY % table.model PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN" "http://www.docbook.org/sgml/4.2/soextblx.dtd">
但是,docbook网站在2011年3月中旬至少停用了1天,我们的内容无法验证。所以我在考虑制作soextblx.dtd的本地副本并更改引用可能会有所帮助,例如:
<!ENTITY % table.model PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN" "soextblx.dtd">
假设我已将“soextblx.dtd”放在与自定义dtd相同的文件夹中。我已经使用XmlSpy对其进行了验证,并且已经过验证,但我不确定这是否是将来可能发生的此类服务器故障问题的正确或最佳解决方案。
感谢您的帮助。
答案 0 :(得分:1)
有趣的方法@ mzjn - 似乎XML目录是公共/系统概念的抽象。
回到原来的问题 - 是根据DTD ref regarding the External Entity declaration以正确的方式进行操作。
相关摘录:
因此,URI可能相对于 文件实体,到实体 包含外部DTD子集,或 到其他一些外部参数 实体。试图检索 由URI标识的资源可以是 重定向到解析器级别(for 例如,在实体解析器中)或 下面(在协议级别,为 例如,通过HTTP位置: 头)。在没有额外的情况下 超出此范围的信息 资源中的规范, 资源的基URI始终是 返回的实际资源的URI 。 换句话说,它是的URI 毕竟检索资源 已经发生了重定向。
答案 1 :(得分:0)
此类问题的最佳解决方案是使用XML catalog。简而言之,目录提供从通用标识符到特定(本地)文件或URI的映射。
以下是两篇关于目录的好文章(对DocBook用户特别有用):