如何在 Java Web 应用程序中嵌入 DocBook XSLT 转换?

问题描述 投票:0回答:1

我正处于将一些 DocBook → PDF 转换构建为 Web 应用程序的概念验证阶段。基本要求是:

  • 它必须“从 JAR 中运行”——在应用程序服务器的文件系统上设置样式表作为文件不是我所追求的。
  • 不是基于Spring,所以我正在寻找一个更通用的Java解决方案。
  • 我们当前正在使用 DocBook 1.79.2 样式表,但如果更合适的话,可能可以使用 xslt20 样式表
  • 我们目前在概念验证中使用 Saxon-HE 12.3,但绝对可以将其升级到商业版本。

TLDR 是:如何将 DocBook XSLT 样式表封装在 JAR 中(不需要需要将 JAR 分解到文件系统上的文件中)?

正如最近在 docbook-apps 邮件列表中讨论的那样,我可以从 src/main/resources/xsl 中的样式表开始(在该级别进行一些自定义,然后是

src/main/resources/xsl/docbook-xsl-1.79.2
中的 DocBook 样式表) ,一个这样开头的目录:
<?xml version="1.0" encoding="utf-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
   <uri name="file:/xsl/juno-driver.xsl"
         uri="classpath:/xsl/juno-driver.xsl" />
   <uri name="file:/xsl/header-footer.xsl"
         uri="classpath:/xsl/header-footer.xsl" />
   <uri name="file:/xsl/table.xsl"
         uri="classpath:/xsl/table.xsl" />
   <uri name="file:/xsl/titlepage.xsl"
         uri="classpath:/xsl/titlepage.xsl" />
   <uri name="file:/xsl/docbook-xsl-1.79.2/fo/docbook.xsl"
         uri="classpath:/xsl/docbook-xsl-1.79.2/fo/docbook.xsl" />
   <uri name="file:/xsl/docbook-xsl-1.79.2/VERSION.xsl"
         uri="classpath:/xsl/docbook-xsl-1.79.2/VERSION.xsl" />
   <uri name="file:/xsl/docbook-xsl-1.79.2/fo/param.xsl"
         uri="classpath:/xsl/docbook-xsl-1.79.2/fo/param.xsl" />

(并继续将每个 
.xsl

.xml
.ent
.dtd
文件映射到其
classpath:
URI 等效项),以及类似这样的一些代码:
DOMResult result = new DOMResult();
TransformerFactory factory = TransformerFactory.newInstance();
InputStream is = XmlTest.class.getResourceAsStream("/xsl/juno-driver.xsl");
Source source = new StreamSource(is, "file:/xsl/juno-driver.xsl");
Transformer transformer = factory.newTransformer(source);
transformer.transform(new DOMSource(document), result);
return (Document) result.getNode();

几乎

让我们到达那里,但失败了: Error at char 9 in expression in xsl:param/@select on line 18 column 57 of l10n.xsl: FODC0002 I/O error reported by XML parser processing file:///xsl/docbook-xsl-1.79.2/common/l10n.xsl. Caused by java.io.FileNotFoundException: /xsl/docbook-xsl-1.79.2/common/l10n.xsl (No such file or directory) at parameter local.l10n.xml on line 18 column 57 of l10n.xsl: invoked by global parameter local.l10n.xml at file:///xsl/docbook-xsl-1.79.2/common/l10n.xsl#18

该行涉及对 
document('')

的调用:

<xsl:param name="local.l10n.xml" select="document('')"/>

看起来它坚持从文件加载自身,然后(显然)在该 URI 中找不到它。我们如何告诉正在解析对 
document()

函数的调用的人使用类路径?

我还愿意寻求有关“任何其他方法”的建议来完成此任务,以满足帖子顶部的限制列表!

正如我在私人电子邮件中指出的那样,DocBook xslTNG 样式表“开箱即用”地做到了这一点。我正在旅行(意外地),但我会尽力尽快跟进更多详细信息。

java xslt saxon docbook-xsl
1个回答
0
投票

© www.soinside.com 2019 - 2024. All rights reserved.