是的,這是可能的,只是將它們添加到文檔中,您正在使用它們。 但我強烈建議不要使用實體,以包含其他文檔(零件)!不久或將來,您將遇到困難,文件(零件)中的一個(或多個)不可用。你的文件不會渲染和搜索導致它很討厭的問題。更好的解決方案是使用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 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 macros?
帶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
是使用回退,所以如果xi:include
的href
屬性不能被解決,回退渲染到文件(這將顯示出它與FIXME一個段落。這裏實際使用一個實體,引用文檔(位置)。這是偉大的,因爲可參照隨後在href
和FIXME部分使用!
小心參考回到實體文件../entities.ent
這又何時能給予嚴重錯誤無法解析。
太棒了!使用XInclude是一個更好的解決方案。這樣每個片段將自成一體。將實體分解爲「entities.ent」也應該提高可維護性。謝謝! – 2010-06-07 15:40:36
實體本身的位置是否可以包含在實體中? – Vadi 2013-07-17 22:17:00
@Vadi是的,這是可能的(在以前的項目中做過)。 – Verhagen 2013-08-21 11:40:48