从 marklogic 中的二进制文档中提取元数据

extracting meta data from binary docs in marklogic

我正在尝试从二进制文件中提取元数据并将它们设置为我执行以下代码的属性。

xquery version "1.0-ml";
let $url := "/documents/test.docx"
return xdmp:document-set-properties(
  $url, 
  for $meta in xdmp:document-filter(fn:doc($the-document))//*:meta
  return element {$meta/@name} {fn:string($meta/@content)}
)

但是元数据是以字符串格式存储的,所以我无法比较日期、时间和数字。当我删除最后一行中的 fn:string() 时,元数据将存储为名称标签中名为“内容”的属性。我正在使用节点 api 与 marklogic 进行通信,因此搜索属性变得越来越困难属性并进行比较。

是否可以对代码进行任何修改,以便元数据可以存储在与原始数据相同的数据类型中?

文档属性始终存储为 XML,因此值始终存储为字符数据(使它们有效地成为字符串值)。您仍然可以在它们上创建类型化索引,前提是可以按原样相应地转换值。要从文档属性中提取类型值,您必须自己进行类型转换。

xdmp:document-get-properties($url, xs:QName("last-modified")) ! xs:dateTime(.)

HTH!