0

我正在开发的软件有用 DocBook 4.2 和 DTD 编写的文档,我想迁移到 5.0 并放弃 DTD。大部分内容都已迁移,但最后剩下的一件事是版本宏。我曾经有一个名为 version.ent 的文件(由 Makefile 生成):

<!ENTITY __VERSION__ "1.2.3-git">

然后在我想要包含软件版本的每个文件中引用该文件一次:

<!ENTITY % version SYSTEM "version.ent">
%version;
]>

有了这些,就可以做这样的事情:

Welcome to the User's guide of foo version &__VERSION__.

在不使用 DTD 的情况下,应该如何在 DocBook 5.0 中实现这种机制?

4

1 回答 1

1

经过一番挖掘,我发现解决方案是内部 DTD 子集。我错误地认为不应该完全使用 DTD,但这是不正确的。

这个页面解释得很好: http: //www.sagehill.net/docbookxsl/Db5Entities.html。相关报价:

当您从 DTD 切换到 RelaxNG(或 W3C XML Schema,就此而言)时,您将失去在架构中定义 XML 实体的能力。

还:

您仍然可以在 DocBook 5 中使用实体,但不能在 RelaxNG 模式中声明它们。相反,您必须在需要它们的每个文档的 DOCTYPE 声明中引用您的实体声明。

于 2018-02-06T18:12:27.800 回答