XSLT-撒克逊格式错误的URL未知协议:xmldb

时间:2018-11-13 12:07:41

标签: xslt-2.0 saxon exist-db oxygenxml

在eXist 4.4 / XQuery 3.1中,我使用transform:transform()执行XSL 2.0转换。在转换中,我将一个参数传递到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')包装)传递给Saxon的,我很惊讶这两次都没有以相同的方式做出反应。

我应该使用其他URI吗?

非常感谢。

编辑:奇怪的是,如果我使用命令行进行转换(即未由氧气触发),Saxon会接受它并执行转换。看来与氧气有关...

1 个答案:

答案 0 :(得分:0)

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