标签: marklogic

面对XML标记值

我想在xml标签上进行分面,并在标签值上进行子分面,我有一个像下面这样的xml文档

<TermiteJServiceResponse>
  <EntityTypeHit type="DRUG">
    <HitCollection>
      <Hit type="DRUG" id="CHEMBL1201288">
        <Name>Dantrolene</Name>
      </Hit>
      <Hit type="DRUG" id="CHEMBL286398">
        <Name>Propylene Glycol</Name>
      </Hit>
      <Hit type="DRUG" id="GXC376D7F8C0E7A0C3787E8A2384DC56E80">
        <Name>PEG400</Name>
      </Hit>
    </HitCollection>
  </EntityTypeHit>
  <EntityTypeHit type="COMPOUNDS">
    <HitCollection>
      <Hit type="COMPOUNDS" id="A-409912.5">
        <Name>A-409912.5</Name>
      </Hit>
      <Hit type="COMPOUNDS" id="A-409912">
        <Name>A-409912</Name>
      </Hit>
    </HitCollection>
  </EntityTypeHit>
  <EntityTypeHit type="GENE">
    <HitCollection>
      <Hit type="GENE" id="TRH">
        <Name>thyrotropin-releasing hormone</Name>
      </Hit>
    </HitCollection>
  </EntityTypeHit>
  <EntityTypeHit type="BIOPROC">
    <HitCollection>
      <Hit type="BIOPROC" id="BP70302">
        <Name>infusion</Name>
      </Hit>
      <Hit type="BIOPROC" id="D009200">
        <Name>Myocardial Contraction</Name>
      </Hit>
      <Hit type="BIOPROC" id="BP70198">
        <Name>cmax values</Name>
      </Hit>
      <Hit type="BIOPROC" id="D001835">
        <Name>Body Weight</Name>
      </Hit>
      <Hit type="BIOPROC" id="D062186">
        <Name>Arterial Pressure</Name> …
Run Code Online (Sandbox Code Playgroud)

marklogic marklogic-8

2
推荐指数
1
解决办法
62
查看次数

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

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

xdmp:database()HTTP/1.1 500 REST-UNSUPPORTEDPARAM: (rest:UNSUPPORTEDPARAM) Endpoint does not support query parameter: xdmp:database()
Run Code Online (Sandbox Code Playgroud)

下面是完整的curl命令

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

在上面的命令基本上我试图在目标机器上运行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"
Run Code Online (Sandbox Code Playgroud)

当我尝试传递"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 …
Run Code Online (Sandbox Code Playgroud)

ubuntu curl xquery marklogic

2
推荐指数
1
解决办法
759
查看次数

仅从 cts:reverse-query 返回 URI

更新:见结束 - 一个例子表明 cts:uris 不是一种有效的方法,因为它不会在所有情况下都返回正确的结果。

我有一个用例,在 MarkLogic 中,有时在包含 cts:reverse-query 的搜索结果中会有数十万个匹配项。有了这个,我想要返回的是与结果匹配的文档的 URI,以便我可以缓存它们并稍后通过 Corb2 处理它们。

示例代码:

xquery version "1.0-ml";


let $_ := xdmp:invoke-function(function(){
  for $val in ("foo", "bar", "baz")
    let $query := <query>{cts:element-word-query(xs:QName("what"), ($val))}</query>
    return (
              xdmp:document-insert("/test/reverse-" || $val ||".xml", $query, (), ("test-reverse")),
              xdmp:commit()
           )

},<options xmlns="xdmp:eval">
        <transaction-mode>update</transaction-mode>
      </options>
)


return for $result in cts:search(collection("test-reverse"), cts:reverse-query(<what>baz</what>))
  return xdmp:node-uri($result)
Run Code Online (Sandbox Code Playgroud)

这将返回:

/test/reverse-baz.xml
Run Code Online (Sandbox Code Playgroud)

这是预期的。

但是,我觉得我在这里做了太多处理,因为我已经有了来自 cts:search() 的文档。但话又说回来,因为 ML 是懒惰的,也许即使是现在,我真的只有一个参考,因为我没有访问文档中的任何内容..?

我想要的是使用 cts:uris() 来获得与上述相同的结果。但是,您不能将 cts:reverse-query 与 cts:uris() 一起使用

是的,我知道反向查询不一定需要作为文档存在于数据库中才能使用它(cts:包含示例),因此在某些用例中,URI 甚至不存在。但对我来说,他们做到了。

另外,我很确定我可以使用xdmp:plan()通过拉出最终计划 …

marklogic marklogic-8

2
推荐指数
1
解决办法
375
查看次数

Marklogic - 我想在json文档的数组部分中使用带有键值的java api进行元素搜索

我想从文档的数组元素部分搜索具有键值的元素.让我说我有json看起来像 -

{ 
   "name":"abc", 
   "lastName":"xyz", 
   "description":"aaaaa aaaa", 
   "dob":11-10-1988,
   "workInformation":[
       {
          "address":"kolkata", 
          "workFor":"vvv Pvt Ltd"
       },
        {
          "address":"bangalore", 
          "workFor":"www Pvt Ltd"
       }
    ]
}
Run Code Online (Sandbox Code Playgroud)

假设我想在数组属性workInformation中使用java api搜索下面提到的键和值 -

key - workFor,value - vvv私人有限公司

请让我知道,怎么做.

谢谢阅读.

marklogic marklogic-8

2
推荐指数
1
解决办法
149
查看次数

如何使用xpath获取具有属性的父元素

我已经发布了示例 XML 和预期的输出有助于获得结果。

示例 XML

<root>
  <A id="1">
    <B id="2"/>
    <C id="2"/>
  </A>
</root>
Run Code Online (Sandbox Code Playgroud)

预期输出:

<A id="1"/>
Run Code Online (Sandbox Code Playgroud)

xpath xquery marklogic

2
推荐指数
1
解决办法
2052
查看次数

MarkLogic 9 cts.parse没有正确解析查询

我正在使用MarkLogic 9开发基于Web的搜索应用程序.我有一个查询构建接口,允许用户将字符串输入到与db中文档的特定JSON属性相对应的文本框中.这个想法是用户可以输入搜索条件,就像cts.parse(我使用服务器端javascript,而不是XQuery)所期望的那样,因此他们的搜索可能是任意复杂的,我不必处理自己解析查询.然而,经过一些测试,我发现了一个关于在布尔逻辑中使用括号的奇怪现象.也就是说,当你在括号中添加像cat和(dog OR bird)这样的语句时,cts.parse会将OR误认为是搜索词.

我将从我的网站提供一个实际的例子:

我构造了一个绑定对象来将查询绑定到我的文档的元素,

var qOpts = ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded"];


var bindings = {
	main: function(operator, values, options){
		return(
				cts.orQuery([
					cts.jsonPropertyWordQuery('title',values,qOpts),
					cts.jsonPropertyWordQuery('abstract',values,qOpts),
					cts.jsonPropertyWordQuery('meshterms',values,qOpts),
					])
		);
	},	
}
Run Code Online (Sandbox Code Playgroud)

我的服务器端脚本调用,例如,

cts.parse('main:'+params.mainQuery,bind)
Run Code Online (Sandbox Code Playgroud)

以下是输入的字符串和返回的查询的一些示例:

  1. 脑或心脏或肺

cts.orQuery([cts.jsonPropertyWordQuery("title", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("abstract", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("meshterms", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.wordQuery("heart", ["lang=en"], 1), cts.wordQuery("lung", ["lang=en"], 1)], [])
Run Code Online (Sandbox Code Playgroud)

这个适当地为"大脑"术语的3个字段(标题,摘要,网格术语)生成jsonPropertyWordQuery,但是对于其他两个术语不能这样做,它只是生成一个cts.wordQuery().

  1. 大脑或心肺

cts.orQuery([cts.jsonPropertyWordQuery("title", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("abstract", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("meshterms", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.andQuery([cts.wordQuery("heart", ["lang=en"], 1), cts.wordQuery("lung", ["lang=en"], 1)], ["unordered"])], [])
Run Code Online (Sandbox Code Playgroud)

  1. 大脑OR(心肺)

cts.orQuery([cts.jsonPropertyWordQuery("title", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], 1), cts.jsonPropertyWordQuery("abstract", "brain", ["case-insensitive","punctuation-insensitive","whitespace-insensitive","wildcarded","lang=en"], …
Run Code Online (Sandbox Code Playgroud)

javascript marklogic marklogic-9

2
推荐指数
1
解决办法
88
查看次数

增加 xquery 请求的 Marklogic 超时

我正在使用 Marklogic 8.0.6 和 xquery 请求。

我通过应用程序服务器执行那些 xquery 请求,但似乎巨大的请求已达到超时并返回以下错误:

eval XQuery on server: cannot process response with 504 status
Run Code Online (Sandbox Code Playgroud)

您能否给出要修改的设置以增加此超时?

谢谢,罗曼:)

xquery marklogic marklogic-8

2
推荐指数
1
解决办法
651
查看次数

Marklogic - 内存节点替换问题

我正在使用mem:node-replace来替换内容。但它花费了太多时间。我遇到了超时错误。有什么替代方法吗?

找到示例 Xquery:

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
import module namespace mem = "http://xqdev.com/in-mem-update" 
  at '/MarkLogic/appservices/utils/in-mem-update.xqy';


let $uri := cts:uri-match((concat('*',$id ,'*')),(),cts:collection-query($collection))
let $data := doc($uri)
let $final := mem:node-replace($data//title[@id='2'],doc($uri1)//title[@id='2'])
return (
  xdmp:document-insert('/test/sample.xml',$final)
)
Run Code Online (Sandbox Code Playgroud)

xquery marklogic

2
推荐指数
1
解决办法
504
查看次数

仅通过传递部分节点名称获取子节点的XPath

我在MarkLogic中有以下XML存储,

<testDoc>
    <test>
        <test1>test1</test1>
        <test2>test2</test2>
        <test3>test3</test3>
    </test>
</testDoc>
Run Code Online (Sandbox Code Playgroud)

我的要求是只获得子节点的xpath,如果我将测试(部分节点名称)传递给我的xquery然后我期待

/testDoc/test/test1
/testDoc/test/test2
/testDoc/test/test3
Run Code Online (Sandbox Code Playgroud)

但是我的xquery回来了,

/testDoc
/testDoc/test
/testDoc/test/test1
/testDoc/test/test2
/testDoc/test/test3
Run Code Online (Sandbox Code Playgroud)

我在qconsole上执行的XQuery是,

 xquery version "1.0-ml";
 let $xml := document { fn:doc("/test/testDoc")}
 let $elem-name := "test"
 let $elems := $xml//*[local-name()[contains(lower-case(.), lower-case($elem-name))]]
 return $elems ! xdmp:path(.)
Run Code Online (Sandbox Code Playgroud)

请指导我达到我的要求.

marklogic marklogic-8

2
推荐指数
1
解决办法
49
查看次数

抛出错误:XDMP-UNEXPECTED:(错误:XPST0003)意外的令牌语法错误,意外的For_,期待Order_或Return_或Stable_

一旦在 qconsole Marklogic 中运行以下代码,我就会遇到以下错误

XDMP-UNEXPECTED: (err:XPST0003) 意外的令牌语法错误,意外的 For_,需要 Order_ 或 Return_ 或 Stable_

let $prices := fn:doc('/training/prices.xml')/prices
let $order := fn:doc('/training/order.xml')/order
where $prices/priceList/prod[@num=$order/item/@num]
for $kk in $prices/priceList/prod[@num=$order/item/@num]
return 
<item>
{$kk}
</item>
Run Code Online (Sandbox Code Playgroud)

谢谢..

xpath xquery marklogic

2
推荐指数
1
解决办法
149
查看次数

标签 统计

marklogic ×10

marklogic-8 ×5

xquery ×5

xpath ×2

curl ×1

javascript ×1

marklogic-9 ×1

ubuntu ×1