xslt-2.0 - 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 吗?
非常感谢。
编辑:奇怪的是,如果我使用命令行进行转换(即不是由氧气触发),撒克逊人会接受它并执行转换。好像和氧气有关系……
解决方案
我的猜测是,当 eXist 调用 Saxon 时,它会设置 aURIResolver
来识别带有"xmldb:exist:"
前缀的 URI 并自行处理它们。在 eXist 环境之外,您需要提供自己的URIResolver
类似功能 - 连接到数据库并检索所需的文档。
推荐阅读
- r - 在 R 中拆分向量以进行并行采样时输出尺寸错误
- python - 为什么这段代码返回一个有 2 个元素的元组?
- php - 下载 URL 的自定义路由更改
- php - 如何在 PhpSpreadSheet 中添加新行?
- sas - 我只想在 proc sql 中选择变量,前提是它们存在
- authentication - Couchdb _session POST 未从 Angular 7 应用程序返回 Chrome 中的 set-cookie 标头
- java - 修改不可变数组不起作用
- python - 将 tensorflow 模型打包为轮文件
- android - 未处理的异常:退出代码 -1073740940
- javascript - Google Sheet Script - 删除包含特定数据的行