我正在开发的软件有使用DTD在DocBook 4.2中编写的文档,我想迁移到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中实现这种机制?
答案 0 :(得分:1)
经过一番挖掘,我发现解决方案是内部DTD子集。我错误地认为DTD不应该被完全使用,但它是不正确的。
此页面解释得很好:http://www.sagehill.net/docbookxsl/Db5Entities.html。相关引言:
当你从DTD切换到RelaxNG(或W3C XML Schema,为此 但是,你失去了在模式中定义XML实体的能力。
此外:
您仍然可以在DocBook 5中使用实体,但无法声明它们 在RelaxNG架构中。相反,您必须引用您的实体 需要的每个文档的DOCTYPE声明中的声明 它们。