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

时间:2017-12-31 03:15:40

标签: xquery exist-db

如何使用REST API在exists-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()]

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您的XQuery中存在语法错误:

  1. 您有两个名为local:toto()的函数。每个函数都必须具有不同的名称。
  2. 功能定义后面没有分号,即}应为};
  3. 此外,您应该删除return表达式,因为没有先前的绑定。
  4. 另一种选择是参数化输入文件,例如:

    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