是的,这是可能的,只需将它们添加到文档中,您正在使用它们。但我强烈反对使用实体,包括其他文件(部分)!迟早你会遇到困难,即一个(或多个)文档(部分)不可用。您的文档将不会呈现并搜索导致它的问题是相当讨厌的。一个更好的解决方案是使用 XInclude 来包含文档。
ENTITY 条目的解决方案
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
[
<!ENTITY section1 SYSTEM "../fragments/section1.xml">
<!ENTITY section2 SYSTEM "../fragments/section2.xml">
<!ENTITY section3 SYSTEM "../fragments/section3.xml">
]>
<book>
<chapter>
<title>Chapter 1</title>
§ion1;
§ion2;
§ion3;
</chapter>
</book>
和另一个文档文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"
[
<!ENTITY section3_a SYSTEM "../fragments/section3_a.xml">
<!ENTITY section3_b SYSTEM "../fragments/section3_b.xml">
<!ENTITY section3_c SYSTEM "../fragments/section3_c.xml">
]>
<section id="Section3">
<title>Section 3</title>
§ion3_a;
§ion3_b;
§ion3_c;
</section>
提示:您甚至可以将实体一起从文档中移出,请参阅我在DocBook 宏这个问题上写的答案?
XInclude 解决方案
下面是一个如何使用 XInclude 设置文档的示例。实体条目用于小字符串。并使用 XInclude,用于文件包含。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY maven.project.version "(not set)">
<!ENTITY % entities SYSTEM "entities.ent" >
%entities;
]>
<book>
<title>&product.name;</title>
<subtitle>Release Notes</subtitle>
<bookinfo>
<date>&product.release.date;</date>
<releaseinfo><?eval ${project.version}?></releaseinfo>
</bookinfo>
<!-- Include chapters -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changes/chapter-release-2.0.xml" />
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="changes/chapter-release-2.1.xml" />
</book>
一个章节文件(放在目录中changes
),它包含在上一个文档中。xi:include
如上使用则停止渲染,如果无法解决该属性href
。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"[
<!ENTITY section-changes "section-changes-v2.0.xml">
<!ENTITY % entities SYSTEM "../entities.ent">
%entities;
]>
<chapter id="release-2.0">
<title>Release 2.0</title>
<para>
Information given in this chapter applies for <emphasis>&product.name; v2.0</emphasis>.
</para>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="§ion-changes;">
<xi:fallback><para>FIXME File not found: "§ion-changes;"</para></xi:fallback>
</xi:include>
</chapter>
这里xi:include
使用了一个后备,所以如果无法解决该href
属性,则将后备呈现到文档中(这将显示一个带有 FIXME 的段落。这里实际上使用了一个实体,用于引用文档(位置) xi:include
. 这很好,因为该参考可以在href
和 FIXME 部分中使用!
小心引用实体文件../entities.ent
当它无法解决时,这又会产生令人讨厌的错误。