【问题标题】:How to post XQuery code to MarkLogic using cURL from Ubuntu?如何使用来自 Ubuntu 的 cURL 将 XQuery 代码发布到 MarkLogic?
【发布时间】:2016-05-18 05:48:12
【问题描述】:

我正在使用 Ubuntu 机器。 我正在使用 curl 命令进行 POST 调用,并将 xquery code 作为 --data 以字符串格式发送。 作为回应,我收到以下错误:

xdmp:database()HTTP/1.1 500 REST-UNSUPPORTEDPARAM: (rest:UNSUPPORTEDPARAM) Endpoint does not support query parameter: xdmp:database()

下面是完整的 curl 命令

curl -v --digest -u username --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=someid&querytype=xquery&action=eval" --data "xdmp:database()"

在上面的命令中,我基本上是在目标机器上运行 xquery 代码(host:port/endpoints/evaler.xqy)

这是传递 xquery 代码的正确方法吗?

更新:

我正在使用 ML 7

通过标头后,我能够运行 XQuery 代码,但面临另一个问题。

当我将“xdmp:database()”作为数据传递时,它工作正常(参见下面的命令),在响应中我得到了数据库 ID。

 curl -v --digest -uusername --data "xdmp:database()" --header "Content-type:text/x-www-form-urlencoded" --header "Accept: multipart/mixed; boundary=BOUNDARY" --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=dbid&querytype=xquery&action=eval"

当我尝试将“let $x := 10 return $x”作为数据传递时(如下命令所示),我得到了

x:未定义的变量

连密码都不问!!

 curl -v --digest -u username --data "let $x := 10 return $x" --header "Content-type:text/x-www-form-urlencoded" --header "Accept: multipart/mixed; boundary=BOUNDARY" --request POST "http://host:port/qconsole/endpoints/evaler.xqy?dbid=dbid&querytype=xquery&action=eval"

无法弄清楚,我做错了什么。

请帮忙。

【问题讨论】:

    标签: ubuntu curl xquery marklogic


    【解决方案1】:

    这里有一些 example bash 使用 cURL 从标准输入评估 JavaScript。 (更改为 XQuery 只需更改参数名称。)

    #!/usr/bin/env bash
    
    # Pipes stdin as the JavaScript body of a REST Client API eval request
    #
    # Usage:
    #   cat cat mycode.js | awk … | curl … @-
    #   pbpaste | awk … | curl … @-
    
    awk '{print "javascript="$0}' | curl http://localhost:8000/v1/eval --digest -u "$USER":"$PASS" -X POST -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: multipart/mixed' -d @-
    

    您需要正确设置 $USER$PASS 变量。

    【讨论】:

    • 正如其他人所指出的,/v1/eval 是在 MarkLogic 8 中引入的。如果您仍在运行 MarkLogic 7,这是升级的众多充分理由之一。
    • 是的,我正在使用 ML 7,由于某些关键原因,我无法更改为 ML 8!请帮助我完成 ML 7
    【解决方案2】:

    我认为您最好使用 REST 端点进行评估:

    http://docs.marklogic.com/REST/POST/v1/eval

    HTH!

    【讨论】:

      【解决方案3】:

      如果使用 MarkLogic 8+,那么您应该使用 /v1/eval,正如 @grtjn 所述。由于您使用了 marklogic-7 标记,因此看起来您使用的是 ML7。

      无论版本如何,最好的选择是为这段代码应该做的任何事情创建一个REST API extension,假设您不尝试支持任意 XQuery 执行。如果是,您可以创建一个模仿 /v1/eval 所做的扩展。更好的是,如果可以的话,升级到 ML8 并使用 /v1/eval 本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 2021-01-28
        • 2010-10-23
        • 1970-01-01
        • 2012-02-23
        相关资源
        最近更新 更多