首页 > 解决方案 > XSLT - Saxon 格式错误的 URL 未知协议:xmldb

问题描述

在 eXist 4.4/XQuery 3.1 中,我使用transform:transform(). 在转换中,我将一个参数传递给 XSL 转换,以供 Saxon 用于访问数据库中的信息。

<param name="paramSaxondatapath" value="xmldb:exist:///db/apps/deheresi/data/"/>

一切正常:Saxon 从 eXist-DB 中的文档中检索所需的节点,并且 XSL 转换成功。

现在,我正在尝试从eXist-DB 环境(本地驱动器,使用 Oxygen)外部执行相同的操作。因此,在 XSLT 文档中,我对参数进行了硬编码:

<xsl:param name="paramSaxondatapath">xmldb:exist:///db/apps/deheresi/data/</xsl:param>

然而,当我在本地关闭这个 XSLT 文件(在 Oxygen、本地 XSLT 文件、Saxon-HE 9.6.0.7 中)时,Saxon 向我抛出了一个异常unknown protocol: xmldb

FODC0002: Exception thrown by URIResolver: 
Malformed URL 
xmldb:exist:///db/apps/deheresi/data/bibliography.xml
(base file:/Users/foo/Desktop/De_Heresi/deheresi_TEI/fo_dep_single.xsl): 
unknown protocol: xmldb

考虑到这是以相同的方式传递给撒克逊人(即包裹在 中doc(concat(paramSaxondatapath,'somefile.xml')),我很惊讶这两次的反应方式都不同。

我应该使用不同的 URI 吗?

非常感谢。

编辑:奇怪的是,如果我使用命令行进行转换(即不是由氧气触发),撒克逊人会接受它并执行转换。好像和氧气有关系……

标签: xslt-2.0saxonexist-dboxygenxml

解决方案


我的猜测是,当 eXist 调用 Saxon 时,它会设置 aURIResolver来识别带有"xmldb:exist:"前缀的 URI 并自行处理它们。在 eXist 环境之外,您需要提供自己的URIResolver类似功能 - 连接到数据库并检索所需的文档。


推荐阅读