跳转至内容

XQuery/安装 XSL-FO 模块

来自维基教科书,开放的书籍,开放的世界

您可能需要与 eXist 系统管理员合作,首先在您的系统上启用 XSL-FO XQuery 模块,以便这些示例能够运行。您可以使用以下步骤完成此操作。

步骤 1:启用 XSLFO XQuery 模块

[编辑 | 编辑源代码]

编辑 $EXIST_HOME 目录下的 conf.xml 文件。您必须取消 xslfo 模块的注释。

<module class="org.exist.xquery.modules.xslfo.XSLFOModule" uri="http://exist-db.org/xquery/xslfo" />

步骤 2:编辑 extensions build.properties 文件

[编辑 | 编辑源代码]

如果您的 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 中包含以下类似的代码行

步骤 3:更新配置文件中新的 XSL-FO zip 文件路径

[编辑 | 编辑源代码]
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"/>

步骤 4:下载新的 XSLFO 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

步骤 5:验证新的 XSLFO 库是否可用

[编辑 | 编辑源代码]

请注意,除了 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 下载

步骤 6:复制 Java 文件

[编辑 | 编辑源代码]

将 $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 文件是否在正确的位置

[编辑 | 编辑源代码]
  $ jar tf exist-extensions.jar

或者在 Windows 系统上,您可以将 jar 文件的文件名更改为以 .zip 结尾,解压缩并检查 xslfo 类是否在 exist-modules 文件中。

华夏公益教科书