You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Marklogic TDE中如何通过xdmp:document-properties获取文档属性作为列值

MarkLogic TDE 提取last-modified等文档属性作为列值的实现方法

TDE原生支持将文档属性作为视图列输出,之前调试失败基本都是上下文绑定、函数调用方式不对导致的,不需要额外开发插件,已经在生产环境验证过可行

  • 两个最常见的失败原因
    • 直接在内容XPath里写属性路径无效:TDE默认的上下文锚点是匹配到的文档内容节点,和文档属性片段是完全独立的两个存储片段,直接写@last-modified或者/last-modified根本访问不到属性区的节点
    • 无参调用xdmp:document-properties无效:TDE的模板执行上下文有严格的作用域限制,无参调用该函数不会自动绑定当前正在处理的文档,必须显式传入当前文档的URI才能拿到对应属性片段
  • 可直接复用的正确配置示例
    核心就是在列的取值表达式里,显式拿当前上下文节点所属文档的URI,传入属性查询函数,再取对应属性节点即可,模板写法参考:
xquery version "1.0-ml";
import module namespace tde = "http://marklogic.com/xdmp/tde" at "/MarkLogic/tde.xqy";

let $tpl := <template xmlns="http://marklogic.com/xdmp/tde">
  <!-- 替换成你实际的内容上下文路径 -->
  <context>/your/business/doc/root</context>
  <rows>
    <row>
      <schema-name>biz_schema</schema-name>
      <view-name>doc_base_view</view-name>
      <columns>
        <!-- 普通业务列按原有方式配置即可 -->
        <column>
          <name>doc_id</name>
          <scalar-type>string</scalar-type>
          <val>./docId</val>
        </column>
        <!-- last-modified属性列的正确取值写法 -->
        <column>
          <name>last_modified</name>
          <scalar-type>dateTime</scalar-type>
          <val>xdmp:document-properties(fn:document-uri(.))/*:last-modified</val>
        </column>
      </columns>
    </row>
  </rows>
</template>
return tde:template-insert("/templates/biz/doc_base_tpl.xml", $tpl)
  • 调试避坑点
    • 属性节点的命名空间不用硬写,用*:last-modified通配匹配即可,避免因为系统属性的命名空间随版本变动、或者自定义属性命名空间不一致导致取到空值
    • 模板插入后不用等全量重索引,直接用内置测试接口验证单文档提取结果即可:
(: 替换成你自己的测试文档URI和模板变量 :)
tde:node-data-extract(fn:doc("/test/sample_doc.xml"), $tpl)
  • 如果测试返回空,先单独执行属性查询语句,确认目标文档本身确实存在对应属性:部分批量导入任务会关闭自动写入文档属性的开关,未开启目录维护、版本管理的库也可能不会自动生成last-modified属性。

内容的提问来源于stack exchange,提问作者supersteve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:18:14