代码之家  ›  专栏  ›  技术社区  ›  jbrehr

XSLT-Saxon格式错误的URL未知协议:xmldb

  •  0
  • jbrehr  · 技术社区  · 6 年前

    transform:transform() . 在转换中,我向XSL转换传递一个参数,供Saxon用来访问数据库中的信息。

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

    一切都很好:Saxon从eXist DB中的文档检索所需的节点,XSL转换成功。

    外部 eXist数据库环境(本地驱动器,使用氧气)。因此,在XSLT文档中,我硬编码了参数:

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

    然而,当我在本地启动这个XSLT文件时(在Oxygen中,本地XSLT文件,Saxon he9.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
    

    考虑到这是以相同的方式传递给Saxon的(即 doc(concat(paramSaxondatapath,'somefile.xml') ),我很惊讶这两次的反应都不一样。

    我应该使用不同的URI吗?

    非常感谢。

    编辑:奇怪的是,如果我使用命令行进行转换(即不是由氧气触发),Saxon接受它并执行转换。它似乎和氧气有关。。。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Michael Kay    6 年前

    我的猜测是,当eXist调用Saxon时,它设置一个 URIResolver 它使用 "xmldb:exist:" 前缀并自行处理。在eXist环境之外,您需要提供自己的 尿酸分解器