标签: marklogic

Xquery返回地图列表而不是地图

我有以下功能

declare private function local:get-map() as map:map*
{
    let $map := map:map()

    for $chart in xdmp:directory("/charts/")
        for $panel in $chart/delphi:chart/delphi:panels/delphi:panel
            for $dataline in $panel/delphi:datalines/delphi:dataline
                let $datasetHref := $dataline/delphi:link[@rel="dataset"]/@href 
                let $axisId := $dataline/delphi:dimensions/delphi:dimension[@field="y"]/@axis
                let $label := $panel/delphi:axes[@dimension="y"]/delphi:axis[@id=$axisId]/@label

                let $l := map:get ($map, $datasetHref)
                let $updateMap := if (fn:exists ($l)) then () else map:put ($map, $datasetHref, $label)

                return $map
};
Run Code Online (Sandbox Code Playgroud)

我被迫声明返回类型,map:map*因为由于某种原因,$ map是一个地图数组而不是地图.该数组包含许多项目,其中每个项目包含我需要的相同地图.因此,当我调用此方法时,我使用第一项.问题是这不是很优雅.我不明白的是为什么我在数组中获得同一个地图的多个副本.我希望代码返回一个地图.我如何重写这个以解决问题?

xpath xquery marklogic

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

在XQuery中读取配置文件

我需要读取我本地文件系统上的xquery文件中的配置文件(XML或属性文件),即我不想将该配置文件放在marklogic数据库中.有没有办法实现这个目标?

xquery marklogic

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

Marklogic Content Pump和XSLT转换

我正在使用MarkLogic Content Pump来​​提取XML文档。我想使用“ -transform模块和-transform名称空间”选项在mlcp提取过程中转换这些xml文档。我已经为转换创建了XSLT,并将其加载到ML“模块”数据库中,但是mlcp不接受xslt文件并抛出错误:

命令:

    mlcp.sh import \
-username $username -password $passwd \
-host $host -port $port \
-input_file_path $inpath \
-input_compressed true \
-input_file_type aggregates \
-aggregate_record_element $splittag \
-aggregate_uri_id $uriid \
-aggregate_record_namespace "http://www.fda.gov/cdrh/gudid" \
-output_collections $collection \
-output_permissions my-app-role,read,my-app-role,update \
-output_uri_suffix .xml \
-transform_module /marklogic.rest.transform/xml-transform-xsl/assets/transform.xsl \
-transform_namespace "http://marklogic.com/rest-api/transform/xml-transform-xsl" \
-transform_function transform
Run Code Online (Sandbox Code Playgroud)

下面的错误抛出ERROR:

15/09/27 15:34:19 WARN mapreduce.ContentWriter: XDMP-MODNOTTEXT: Module /marklogic.rest.transform/fda-transform-xsl/assets/transform.xsl is not a text document
Run Code Online (Sandbox Code Playgroud)

我想知道mlcp是否接受xslt转换?如果没有,那有什么选择呢?

MarkLogic在模块数据库中创建等效的xqy文件。通过在“ .xqy”文件下面调用,将引发参数不匹配错误:我认为这是由于错误的返回类型造成的:

xquery version "1.0-ml";
module namespace simple-xsl = "http://marklogic.com/rest-api/transform/simple-xsl";
import module namespace …
Run Code Online (Sandbox Code Playgroud)

marklogic marklogic-8 mlcp

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

更新安全数据库,然后在xdmp:permission中访问新角色

我正在使用xdmp:invoke调用在安全数据库中创建一个新角色.作为调用调用的选项,我指定了以下选项:

<options xmlns="xdmp:eval">
  <database>{ xdmp:security-database() }</database>
  <transaction-mode>update</transaction-mode>
  <isolation>different-transaction</isolation>
  <prevent-deadlocks>false</prevent-deadlocks>
</options>
Run Code Online (Sandbox Code Playgroud)

我的想法是,这将在一个单独的事务中执行,然后我将能够访问此调用后代码中的更改.但是当我使用我刚刚创建的角色的名称为xdmp:permission()创建一个all时,我得到一个Role Does Not Exist错误.

无论如何要解决这个问题?

更新

以下代码段有效.所以我会解决更多问题,看看我的更复杂的代码中是否还有其他问题.

xquery version "1.0-ml";

import module namespace sec = "http://marklogic.com/xdmp/security"
  at "/MarkLogic/security.xqy";

let $create_role :=
  xdmp:invoke-function(
    function() {
      sec:create-role(
        'sec_test',
        'Security Test Role',
        (),
        (),
        ()
      )
    },
    <options xmlns="xdmp:eval">
      <database>{xdmp:security-database()}</database>
      <transaction-mode>update-auto-commit</transaction-mode>
      <isolation>different-transaction</isolation>
    </options>
  )

return xdmp:permission('sec_test', 'read')
Run Code Online (Sandbox Code Playgroud)

第二次更新

似乎如果我调用的函数执行create-role是在另一个xqy文件中,那么它将失败并找不到角色错误.例如,我在security-util.xqy中有以下模块.

xquery version "1.0-ml";
module namespace asu = "http://ir.abbvie.com/marklogic/authorization/lib/security-util";

import module namespace sec = "http://marklogic.com/xdmp/security"
  at "/MarkLogic/security.xqy";

declare option xdmp:mapping "false";

declare function asu:create-role-2(
  $role_name …
Run Code Online (Sandbox Code Playgroud)

marklogic marklogic-8

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

如何在Marklogic或Couchbase中进行xslt类型转换?

我正在寻找一种用于数据连接和转换到其他数据结构的noSQL解决方案 - 特别是在marklogic和couchbase.

我的问题:如何在基于json的数据库中进行xslt等转换?

marklogic nosql couchbase

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

是否有用于创建用户和添加角色的MarkLogic JavaScript API?

XQuery Security Admin API信息发布在此处.

http://docs.marklogic.com/sec:create-user

我可能会遗漏一些东西,但我没有看到等效的JavaScript安全管理API.

是这样的吗?如果是这样,我们可以在下一个MarkLogic版本中期待这一点吗?

marklogic marklogic-8

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

marklogic中element-range-index和field-range-index有什么区别?

我在MarkLogic 之间element-range-index和之间感到困惑field-range-index.

请在示例的帮助下解释差异.

indexing marklogic

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

在xquery中查找非词典值的频率

有没有办法找到没有范围索引的元素的频率?该

cts:frequency() 我使用的不支持任何不是词典的元素

xquery marklogic marklogic-8

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

法术:建议错误的命令?

spell:suggest用来查询字典.我会假设结果按距离排序.但事实并非如此,如spell:suggest-detailed以下示例所示.

例:

spell:suggest-detailed("/my-dictionary.xml", "cohn", 
  <options xmlns="http://marklogic.com/xdmp/spell">
    <distance-threshold>10</distance-threshold>
    <maximum>3</maximum>
  </options>
)
Run Code Online (Sandbox Code Playgroud)

结果:

<spell:suggestion original="cohn" dictionary="/my-dictionary.xml" xmlns:spell="http://marklogic.com/xdmp/spell">
  <spell:word distance="10" key-distance="0" word-distance="50" levenshtein-distance="1">coin</spell:word>
</spell:suggestion>
<spell:suggestion original="cohn" dictionary="/my-dictionary.xml" xmlns:spell="http://marklogic.com/xdmp/spell">
  <spell:word distance="10" key-distance="0" word-distance="50" levenshtein-distance="1">conn</spell:word>
</spell:suggestion>
<spell:suggestion original="cohn" dictionary="/my-dictionary.xml" xmlns:spell="http://marklogic.com/xdmp/spell">
  <spell:word distance="9" key-distance="1" word-distance="45" levenshtein-distance="1">crohn</spell:word>
</spell:suggestion>
Run Code Online (Sandbox Code Playgroud)

第三个结果的距离是9,小于距离为10的前两个结果的距离.排序中是否有错误?

marklogic

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

如何比较MarkLogic中的日期?

我在$ doc变量中使用了以下XML

 let $doc := <root>
              <date>12/31/2016</date>
             </root>
Run Code Online (Sandbox Code Playgroud)

我想把这个日期与今天的日期进行比较.它应该归还给我,但它却让我失意.

我使用以下代码 -

let $doc := <root>
              <date>12/31/2016</date>
             </root>


let $date := $doc/date/text()
let $today :=fn:format-date(fn:current-date(),"[M01]/[D01]/[Y0001]")
return $date le $today
Run Code Online (Sandbox Code Playgroud)

有什么建议 ?

xquery marklogic

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

标签 统计

marklogic ×10

marklogic-8 ×4

xquery ×4

couchbase ×1

indexing ×1

mlcp ×1

nosql ×1

xpath ×1