XQuery/安装 XSL-FO 模块
您可能需要与 eXist 系统管理员合作,首先在您的系统上启用 XSL-FO XQuery 模块,以便这些示例能够运行。您可以使用以下步骤完成此操作。
编辑 $EXIST_HOME 目录下的 conf.xml 文件。您必须取消 xslfo 模块的注释。
<module class="org.exist.xquery.modules.xslfo.XSLFOModule" uri="http://exist-db.org/xquery/xslfo" />
如果您的 eXist 不是从源代码构建的,那么 fo 模块和支持的 fop.jar 文件也必须包含在所有生产系统中的 exist-modules.jar 文件中。这可以通过下载 eXist 源代码并更改 build.properties 文件设置来完成。有关详细信息,请参阅 eXist 构建说明
$EXIST_HOME lib/extensions/build.properties 或 $EXIST_HOME extensions/build.properties
# XSL FO transformations (Uses Apache FOP) include.module.xslfo = true
如果您运行的是 eXist 1.4 版本,则引用的 Apache FOP 版本可能不再可用。如果您的 build-properties 中包含以下类似的代码行
include.module.xslfo.url = http://apache.cs.uu.nl/dist/xmlgraphics/fop/binaries/fop-0.95-bin.zip
您会发现 Apache 项目已经删除了旧的二进制文件(并不总是最佳实践)。
这是应该替换的新的代码行。
include.module.xslfo.url = http://apache.cs.uu.nl/dist/xmlgraphics/fop/binaries/fop-1.0-bin.zip
此外,将 $EXIST_HOME extensions/modules/build.xml 中对已弃用版本的引用更改为指向较新版本。例如
<!-- Apache FOP --> <get src="${include.module.xslfo.url}" dest="fop-1.0-bin.zip" verbose="true" usetimestamp="true" /> <unzip src="fop-1.0-bin.zip" dest="${top.dir}/${lib.user}"> <patternset> <include name="fop-1.0/build/fop.jar"/> <include name="fop-1.0/lib/batik-all-*.jar"/> <include name="fop-1.0/lib/xmlgraphics-commons-*.jar"/> <include name="fop-1.0/lib/avalon-*.jar"/> </patternset> <mapper type="flatten"/> </unzip> <delete file="fop-1.0-bin.zip"/>
下次您运行构建时,这将从 Apache 网站下载 Apache FOP jar 文件。
cd $EXIST_HOME/extensions/modules ant -version ant prepare-libs-xslfo
构建日志示例
prepare-libs-xslfo: [echo] Load: true [echo] ------------------------------------------------------ [echo] Downloading libraries required by the xsl-fo module [echo] ------------------------------------------------------ [get] Getting: http://apache.cs.uu.nl/dist/xmlgraphics/fop/binaries/fop-1.0-bin.zip [get] To: C:\ws\eXist-1.4dev\extensions\modules\fop-1.0-bin.zip [get] .................................................... [get] last modified = Thu Jul 31 09:47:44 CDT 2008 [unzip] Expanding: C:\workspace\exist\extensions\modules\fop-1.0-bin.zip in to C:\workspace\exist\lib\user
请注意,除了 fop 二进制文件外,FOP 处理器还需要以下 jar 文件。
$EXIST-HOME/lib/user/xmlgraphics-commons-1.3.1.jar
在 UNIX 上
$ sudo cp -v xmlgraphics-commons-1.4.jar $EXIST_HOME/lib/user `xmlgraphics-commons-1.4.jar' -> `/usr/local/exist/lib/user/xmlgraphics-commons-1.4.jar'
这可以从 Apache XML Graphics Commons Distribution Mirror 下载
将 $EXIST-HOME/lib/user/fop.jar 和新的 $EXIST-HOME/lib/extensions/exist-modules.jar 中的 jar 文件复制到您的生产系统中。请注意,您应该确保源系统和目标系统是相同版本。
如果要使用 fop 对文本进行断字,请将 fop-hyphen.jar 放入 $EXIST-HOME/lib/user/ 中,并重新启动 eXist。如果在您的 fo 或 xsl 文件中,将 hyphenate 属性设置为 true,那么 fo:blocks 将会断字,如果您添加了 language 属性到 fo:page-sequence 中。许多语言的断字模式可以在这里找到:http://sourceforge.net/projects/offo/
请注意,您的 exist-modules.jar 文件随后可以放在没有源代码的系统上。目前没有不下载源代码的情况下使用 FOP 的方法。另外请注意,您可以通过运行以下命令来验证您的 exist-modules.jar 文件中是否包含 XSLFO 类。
现在,您可以检查 jar 文件是否已正确安装在用户库目录中
$ ls -l $EXIST_HOME/lib/user/*.jar
这将返回
total 7480 -rwxrwxrwx 1 root root 56290 Nov 3 2009 activation-1.1.1.jar -rw-rw-r-- 1 ec2-user ec2-user 3318083 Jul 12 2010 batik-all-1.7.jar -rw-rw-r-- 1 ec2-user ec2-user 3079811 Jul 12 2010 fop.jar -rwxrwxrwx 1 root root 434812 Nov 3 2009 mail-1.4.2.jar -rwxrwxrwx 1 root root 117470 Nov 3 2009 nekohtml-1.9.11.jar -rw-r--r-- 1 root root 569113 Nov 12 17:28 xmlgraphics-commons-1.4.jar
在 shell 中键入以下命令
$ ./build.{sh|bat} extension-modules
如果构建失败,并出现以下错误
"$EXIST_HOME/build/classes" does not exist or is not a directory
,创建 classes 文件夹会有所帮助,之后构建将会成功。
mkdir $EXIST_HOME/build/classes
$ jar tf exist-extensions.jar
或者在 Windows 系统上,您可以将 jar 文件的文件名更改为以 .zip 结尾,解压缩并检查 xslfo 类是否在 exist-modules 文件中。