使用url在eXist db中调用自定义xquery函数

使用url在eXist db中调用自定义xquery函数,xquery,exist-db,Xquery,Exist Db,如何使用RESTAPI在exist db中调用自定义xquery函数? xquery文件中是否可以有多个函数 declare function local:toto() as node() { return doc("/db/ProjetXML/alice.xml")/raweb/identification/projectName) }; declare function local:pomme() as node() { return doc("/db/ProjetXML/

如何使用RESTAPI在exist db中调用自定义xquery函数? xquery文件中是否可以有多个函数

declare function local:toto() as node() {
    return doc("/db/ProjetXML/alice.xml")/raweb/identification/projectName)
};

declare function local:pomme() as node() {
    return doc("/db/ProjetXML/carmen.xml")/raweb/identification/projectSize);
};
如果我用以下方式来称呼它:

http://localhost:8080/exist/rest/db/ProjetXML/orange.xqy?_query=local:toto()
我得到以下错误:

err:XPST0017 Call to undeclared function: local:toto [at line 1, column 1, source: local:toto()]

非常感谢您的帮助。

您的XQuery中有语法错误:

  • 您有两个名为
    local:toto()
    的函数。每个函数必须有一个不同的名称
  • 函数定义后面没有分号,即
    }
    应该是
    }
  • 此外,还应该删除
    return
    表达式,因为前面没有绑定
  • 另一个选项是参数化输入文件,例如:

    import module namespace request="http://exist-db.org/xquery/request";
    
    declare function local:toto($name as xs:string) as node() {
      let $doc :=
          if($name eq "carmen")then
            doc("/db/ProjetXML/carmen.xml")
          else
            doc("/db/ProjetXML/alice.xml")
      return
        $doc/raweb/identification/projectName);
    };
    
    local:toto(request:get-parameter("name", "alice"))
    
    然后,您可以使用如下URL通过REST服务器调用此函数:

      http://localhost:8080/exist/rest/db/ProjetXML/orange.xqy?name=carmen
    

    您好,我已经修复了问题中的语法错误,但真正的问题是使用url调用给定的xquery函数。我只是修改了我的答案以显示如何通过REST调用它