eXist-db – XSLT 中的路径
eXist-db – paths in XSLT
我需要抓取几张图片并将它们放入通过 Apache FOP 生成的 pdf 中。在 eXist 之外,我没有任何问题。使用 eXist,模板无法正常工作,输出中没有图像——可能路径有问题。
“文件”的结构是:
project/data/file.xml
project/data/img/*pictures.jpg
测试来源:
<figure>
<graphic url="img/tealover.jpg"/>
</figure>
<figure>
<graphic url="./img/tealover.jpg"/>
</figure>
<figure>
<graphic url="/db/apps/karolinum-apps/data/img/tealover.jpg"/>
</figure>
模板:
<xsl:template match="tei:figure/tei:graphic">
<fo:block>
<fo:external-graphic src="{@url}" xsl:use-attribute-sets="images"/>
</fo:block>
<xsl:apply-templates/>
</xsl:template>
问题出在哪里?我是否缺少 eXist 的某些设置?在ePub制作过程中采集图片时,这个是没有问题的。
更新
XSL-FO 输出:
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="img/tealover.jpg"/>
</fo:block>
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="./img/tealover.jpg"/>
</fo:block>
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="/db/apps/karolinum-apps/data/img/tealover.jpg"/>
</fo:block>
XSL-FO 处理器不知道如何从那些 URL 中检索图像,因为它不知道在哪里解析这些路径。
您应该使用 URL 处理器可以取消引用的绝对 URLs,例如,如果您的图像存储在 eXist 中的这个路径中:
/db/apps/karolinum-apps/data/img/tealover.jpg
您应该改用 URL:
http://localhost:8080/exist/rest/db/apps/karolinum-apps/data/img/tealover.jpg
.
我假设 eXist 在 localhost
端口 8080
上 运行,如果不是,则只需调整上面的 URL 以反映您的设置。
这似乎可以解决问题:
<xsl:template match="tei:figure/tei:graphic">
<fo:block>
<fo:external-graphic src="url('{resolve-uri(@url, base-uri(.))}')" xsl:use-attribute-sets="images"/>
</fo:block>
<xsl:apply-templates/>
</xsl:template>
更新
有意思!起初它就像一个魅力。后来稍微调整了一下工程结构(不过文档附近的环境几乎是一样的),现在不行了。它记录:
exerr:ERROR Exception while transforming node: Base URI {} is not an absolute URI [at line 11, column 19] In function:
fop:render-pdf(node()*) [12:5:/db/apps/karolinum-apps/modules/create-pdf.xqm]
但问题显然出在这行代码中。
即使我尝试 <xsl:value-of select="resolve-uri(@url, base-uri(.))"/>
,它也会抱怨
exerr:ERROR Exception while transforming node: Base URI {} is not an absolute URI [at line 16, column 9]
暂时无法理解如此微小的细节。
我需要抓取几张图片并将它们放入通过 Apache FOP 生成的 pdf 中。在 eXist 之外,我没有任何问题。使用 eXist,模板无法正常工作,输出中没有图像——可能路径有问题。
“文件”的结构是:
project/data/file.xml
project/data/img/*pictures.jpg
测试来源:
<figure>
<graphic url="img/tealover.jpg"/>
</figure>
<figure>
<graphic url="./img/tealover.jpg"/>
</figure>
<figure>
<graphic url="/db/apps/karolinum-apps/data/img/tealover.jpg"/>
</figure>
模板:
<xsl:template match="tei:figure/tei:graphic">
<fo:block>
<fo:external-graphic src="{@url}" xsl:use-attribute-sets="images"/>
</fo:block>
<xsl:apply-templates/>
</xsl:template>
问题出在哪里?我是否缺少 eXist 的某些设置?在ePub制作过程中采集图片时,这个是没有问题的。
更新
XSL-FO 输出:
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="img/tealover.jpg"/>
</fo:block>
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="./img/tealover.jpg"/>
</fo:block>
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="/db/apps/karolinum-apps/data/img/tealover.jpg"/>
</fo:block>
XSL-FO 处理器不知道如何从那些 URL 中检索图像,因为它不知道在哪里解析这些路径。
您应该使用 URL 处理器可以取消引用的绝对 URLs,例如,如果您的图像存储在 eXist 中的这个路径中:
/db/apps/karolinum-apps/data/img/tealover.jpg
您应该改用 URL:
http://localhost:8080/exist/rest/db/apps/karolinum-apps/data/img/tealover.jpg
.
我假设 eXist 在 localhost
端口 8080
上 运行,如果不是,则只需调整上面的 URL 以反映您的设置。
这似乎可以解决问题:
<xsl:template match="tei:figure/tei:graphic">
<fo:block>
<fo:external-graphic src="url('{resolve-uri(@url, base-uri(.))}')" xsl:use-attribute-sets="images"/>
</fo:block>
<xsl:apply-templates/>
</xsl:template>
更新
有意思!起初它就像一个魅力。后来稍微调整了一下工程结构(不过文档附近的环境几乎是一样的),现在不行了。它记录:
exerr:ERROR Exception while transforming node: Base URI {} is not an absolute URI [at line 11, column 19] In function:
fop:render-pdf(node()*) [12:5:/db/apps/karolinum-apps/modules/create-pdf.xqm]
但问题显然出在这行代码中。
即使我尝试 <xsl:value-of select="resolve-uri(@url, base-uri(.))"/>
,它也会抱怨
exerr:ERROR Exception while transforming node: Base URI {} is not an absolute URI [at line 16, column 9]
暂时无法理解如此微小的细节。