3

考虑 test.xml 中的 DocBook 文章,其中包含<informaltable>在每个部分的开头重复的一个。还要考虑到<informaltable>实际上比这个例子显示的要复杂得多。

<informaltable>这个例子使用外部<!ENTITY ... SYSTEM ...>声明实现了复杂的重用。复杂<informaltable>的是在另一个名为reusedtable.xml 的文件中。

测试.xml

<!DOCTYPE article [<!ENTITY ReusedTable SYSTEM "reusedtable.xml">]>

<article xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
    <title>Article Template Title</title>
</info>
<section>
    <title>first title</title>
    &ReusedTable;
</section>
<section>
    <title>Second Title</title>
    &ReusedTable;
</section>
</article>

重用table.xml

包含重用表的文件。

<informaltable>
    <tgroup cols='2'>
        <tbody>
            <row>
                <entry>YES</entry>
                <entry>NO</entry>
            </row>
        </tbody>
    </tgroup>
</informaltable>

这是输出的样子

这种方法有效,但似乎有点尴尬和有限。所以它给我留下了以下问题:

  1. 有没有办法在<informaltable>不创建第二个 .xml 文件的情况下完成我的重用?
  2. 有没有办法完成我的重用,<informaltable>以便我可以参数化表格?

例如,我希望能够在我的 docbook 文章中表达一个 ReusedTable 实例的存在,其中填充了不同的内容,如下所示,

test2.xml

<article xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
    <title>Article Template Title</title>
</info>
<section>
    <title>first title</title>
    <ReusedTable>
        <firstcol>true</firstcol>
        <seccol>false</seccol>
    </ReusedTable>    </section>
<section>
    <title>Second Title</title>
    <ReusedTable>
        <firstcol>yes</firstcol>
        <seccol>no</seccol>
    </ReusedTable>
</section>
</article>

并让发布的输出看起来像这样,其中 ReusedTable 的设计被定义一次,每个 ReusedTable 实例中的单元格内容来自表格将出现的文章中的标记。

4

2 回答 2

1

包含复杂表(或其他部分)的更好方法可能是通过 XInclude 另请参阅此问题和答案Can ENTITY 声明可以嵌套在引用的 XML 文件中吗? 由于每个表格的内容不同,因此在渲染过程中无法动态更新该内容。如果这确实是您需要的,那么解决问题的一种方法是通过一个小程序将(复杂)表生成为单独的 xml 文件。并通过 XInclude 将这些单独的 xml 文件包含在您的文档中。

于 2012-10-04T18:08:43.013 回答
1
  1. 有没有办法在<informaltable>不创建第二个 .xml 文件的情况下完成我的重用?

是的,也可以通过声明一个实体但通过在声明中<informaltable>省略SYSTEM关键字来放置内联。这完全消除了对另一个文件的需要。原始问题中的 Test.xml 看起来像这样,内联实体声明:

测试.xml

<!DOCTYPE article [
<!ENTITY ReusedTable "
<informaltable>
    <tgroup cols='2'>
        <tbody>
            <row>
                <entry>YES</entry>
                <entry>NO</entry>
            </row>
        </tbody>
    </tgroup>
</informaltable>
">
]>

<article xmlns="http://docbook.org/ns/docbook"
    xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
    <info>
        <title>Article Template Title</title>
    </info>
    <section>
        <title>first title</title>
        &ReusedTable;
    </section>
    <section>
        <title>Second Title</title>
        &ReusedTable;
    </section>
</article>
于 2012-07-30T19:08:41.380 回答