eXist-db - XSLT中的路径

时间:2016-01-22 13:07:54

标签: xslt exist-db

我需要抓取几张图片并将它们放入通过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>

2 个答案:

答案 0 :(得分:1)

XSL-FO处理器不知道如何从这些URL中检索图像,因为它不知道在哪里解析这些路径。

您应该使用XSL-FO处理器可以取消引用的绝对URL,例如,如果您的图像以此路径存储在eXist中:

/db/apps/karolinum-apps/data/img/tealover.jpg

您应该使用网址:

http://localhost:8080/exist/rest/db/apps/karolinum-apps/data/img/tealover.jpg

我假设eXist正在localhost端口8080上运行,如果没有,那么只需调整上面的网址即可反映您的设置。

答案 1 :(得分:0)

看来这就是诀窍:

<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]

目前无法理解这些微小的细节。