[英]How to post XQuery code to MarkLogic using cURL from Ubuntu?
我正在使用Ubuntu机器。 我正在使用curl命令进行POST调用,并以字符串格式将xquery代码作为--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代码(主机:端口/端点/ 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"
无法弄清楚,我做错了什么。
请帮忙。
下面是一些使用cURL从stdin中评估JavaScript的示例bash 。 (更改为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
变量。
如果使用MarkLogic 8+,则应使用/ v1 / eval,如@grtjn所述。 由于您使用了marklogic-7标记,因此它看起来像是在ML7上。
无论版本如何,最重要的选择是为这个代码应该做的任何事情创建一个REST API扩展 ,假设你没有尝试支持任意XQuery执行。 如果是,您可以创建一个模仿/ v1 / eval所做的扩展。 更好的是,如果可以的话,升级到ML8并使用/ v1 / eval本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.