我正在寻找合理的方法从xml文件填充docbook表。目标是拥有docbook文件,其中包含对所需数据的某种最小参考。将docbook文件处理为最终发布时,此引用应替换为从xml文件中检索的数据。
以下是进一步说明这一点的具体示例。它非常详细,因为我第一次尝试提出这个问题太模糊了。
源document.docbook
<?xml version="1.0" encoding="utf-8"?>
<article xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="en">
<info><title/></info>
<table><title/><tgroup cols="2"><tbody>
<row>
<entry>good in comparative</entry>
<entry>
<phrase role="populateme">
<phrase>good</phrase>
<phrase>ADJ COMP</phrase>
</phrase>
</entry>
</row>
<row>
<entry>good in superlative</entry>
<entry>
<phrase role="populateme">
<phrase>good</phrase>
<phrase>ADJ SUPL</phrase>
</phrase>
</entry>
</row>
</tbody></tgroup></table>
</article>
源database.xml
<?xml version="1.0" encoding="utf-8"?>
<database>
<row>
<cell>good</cell>
<cell>ADJ POST</cell>
<cell>good</cell>
</row>
<row>
<cell>better</cell>
<cell>ADJ COMP</cell>
<cell>good</cell>
</row>
<row>
<cell>best</cell>
<cell>ADJ SUPL</cell>
<cell>good</cell>
</row>
</database>
处理
Makefile包含从publication.pdf
和source-document.docbook
生成source-database.xml
的配方。 (目前我选择的工具是xsltproc和fop,但可以推荐其他工具。)
publication.pdf
正常的docbook准备了pdf出版物,并有以下替代:
<phrase role="populateme">
<phrase>good</phrase>
<phrase>ADJ COMP</phrase>
</phrase>
上面会生成better
而不是goodADJ COMP
。
<phrase role="populateme">
<phrase>good</phrase>
<phrase>ADJ SUPL</phrase>
</phrase>
上面会生成best
而不是goodADJ SUPL
。
最后评论
<phrase role="populateme"><phrase>ref</phrase><phrase>ref2</phrase></phrase>
上面的“语法”非常麻烦但是,我还没有想到更好的有效的docbook。
XInclude标记
xslt预处理转换
python预处理脚本
其他什么?
关于我应该采取哪种方式以及为什么欢迎的任何输入。以及完整的代码示例等。
答案 0 :(得分:2)
这是一个XSLT样式表:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:db="http://docbook.org/ns/docbook"
exclude-result-prefixes="db"
version="1.0">
<xsl:variable name="database" select="document('source-database.xml')"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="db:entry[db:phrase[@role='populateme']]">
<xsl:element name="entry" namespace="http://docbook.org/ns/docbook">
<xsl:value-of select="$database//row[cell[3] = current()/db:phrase/db:phrase[1]
and cell[2] = current()/db:phrase/db:phrase[2]]/cell[1]"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
样式表在 source-database.xml 中执行查找。当它应用于 source-document.docbook 时,会生成以下结果文档:
<article xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="en">
<info><title/></info>
<table><title/>
<tgroup cols="2">
<tbody>
<row>
<entry>good in comparative</entry>
<entry>better</entry>
</row>
<row>
<entry>good in superlative</entry>
<entry>best</entry>
</row>
</tbody>
</tgroup>
</table>
</article>
这个文件(我们称之为 publication.docbook )然后你可以变成一个PDF( publication.pdf )。
我认为你正在寻找这样的东西。我是对的吗?