【问题标题】:Marklogic using xPath on managed documents results in all versions of this documentsMarklogic 在托管文档上使用 xPath 会生成此文档的所有版本
【发布时间】:2020-02-10 12:01:15
【问题描述】:


在托管 (dls:document-insert-and-manage(...) ) 文档上使用 xpath 时,我想使用 此文档上的 xpath 表达式仅检索实际文档,尤其是对于其他用户。

使用 xpath,我可以得到文档的所有版本或没有文档。

我尝试设置文档的权限。
限制 URI 只是为了创建。
保护路径无济于事,因为所有版本的 xpath 都是相同的。

是否有可能限制某些用户仅获取最新版本?

我们正在使用 Marklogic 9.0.8

示例:

设置文档

xquery version "1.0-ml";
import module namespace dls = "http://marklogic.com/xdmp/dls" at "/MarkLogic/dls.xqy";

declare variable $uri :="/smtextdocuments/9114.xml";
declare variable $document := document {
<envelope>
  <instance>
    <smtextdocuments>
      <uri>/smtextdocuments/9114.xml</uri><id>9114</id>
      <documentcontent>MyText</documentcontent>
    </smtextdocuments>
  </instance>
</envelope>
};

let $d := dls:document-insert-and-manage($uri,fn:true(), $document,
        "Manage textdocuments",
        (
         xdmp:permission("dls-user", "read"),
         xdmp:permission("dls-internal", "read"),
         xdmp:permission("dls-internal", "update")),
        ()
        )
return $d

在检索文档时导致 2 个或无元素,具体取决于实际用户的权限

xquery version "1.0-ml";
<queryresult>
  <byxPath>{
    for $i in //smtextdocuments[id=9114]
    return (<uri>{fn:base-uri($i)}</uri>,$i)
    }
  </byxPath>
</queryresult>

【问题讨论】:

    标签: marklogic marklogic-9


    【解决方案1】:

    您正在使用 DLS 并行存储文档的多个版本,因此如果您查询整个数据库(如果您使用像 //xxx 这样的裸绝对路径会发生这种情况),您将获得该文档的所有匹配版本文件。

    我建议改用cts:search,例如结合dls:documents-query()。如果您还添加了smtextdocuments/id 的路径索引,则可以准确定位您的文档:

    import module namespace dls = "http://marklogic.com/xdmp/dls" 
      at "/MarkLogic/dls.xqy";
    
    cts:search(collection(), cts:and-query((
      dls:documents-query(),
      cts:range-query(
        cts:path-reference('smtextdocuments/id'),
        '=',
        9114
      )
    ) 
    

    HTH!

    【讨论】:

    • 那么有没有可能限制绝对路径的结果?
    • 有很多方法,但更笨拙。使用搜索作为基础还可以实现更好的扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多