Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ubuntu中的cURL将XQuery代码发布到MarkLogic?_Ubuntu_Curl_Xquery_Marklogic - Fatal编程技术网

如何使用Ubuntu中的cURL将XQuery代码发布到MarkLogic?

如何使用Ubuntu中的cURL将XQuery代码发布到MarkLogic?,ubuntu,curl,xquery,marklogic,Ubuntu,Curl,Xquery,Marklogic,我正在使用Ubuntu机器。 我正在使用curl命令进行POST调用,并以字符串格式发送xquery代码。 作为回应,我得到以下错误: xdmp:database()HTTP/1.1 500 REST-UNSUPPORTEDPARAM: (rest:UNSUPPORTEDPARAM) Endpoint does not support query parameter: xdmp:database() 下面是完整的curl命令 curl -v --digest -u username --req

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

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代码(主机:port/endpoints/evaler.xqy)

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

更新:

我正在使用ML7

在传递了头之后,我能够运行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"
不知道我做错了什么


请提供帮助。

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


如果使用MarkLogic 8+,则应使用/v1/eval,如@grtjn所述。因为您使用了marklogic-7标记,所以看起来您在ML7上

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

下面是一些使用cURL从stdin中评估JavaScript的方法。(更改为XQuery只是更改参数名称的问题。)


您需要适当设置
$USER
$PASS
变量。

如其他人所述,
/v1/eval
是在MarkLogic 8中引入的。如果您仍在运行MarkLogic 7,这是升级的许多好理由之一。是的,我正在使用ML 7,由于一些关键原因,我无法更改为ML 8!请帮我拿ML 7
#!/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 @-