0

xdmp:document-filter(doc(uri))用来从文档中获取元数据。当我在其中一个文档上运行此命令时,我得到以下结果:-

xdmp:document-filter(doc("/Vision.doc"))//*:meta[@name eq "Creation_Date"]/@content

<?xml version="1.0" encoding="UTF-8"?>
<results warning="attribute node">
  <warning warning="attributes cannot be root nodes" content="17-05-2012 00:48:00"/>
</results>

当我在另一个文档上运行这个命令时,我得到了这个: -

<?xml version="1.0" encoding="UTF-8"?>
<results warning="attribute node">
  <warning warning="attributes cannot be root nodes" content="2012-06-03T13:45:00Z"/>
</results>

您可以看到两个输出中的日期格式不同。在 Marklogic Server 中上传的文档中可能有不同的日期格式。但我想以某种固定格式显示文档的创建日期(例如 2012 年 5 月 16 日)。如何将不同的日期格式转换为固定的日期格式?而且我想将这些日期与用户输入的日期进行比较。匹配搜索条件的文档应由搜索查询返回。所以我在这里有两个问题:-

  1. 如何将特定文档的创建日期转换为某种固定格式并在 UI 中显示。
  2. 如何将此创建日期与用户输入的日期(格式为“mm/dd/yyyy”)进行比较,以便获得正确的结果。
4

2 回答 2

2

您将不得不解析 dateTime 值。例如:

let $dt := "17-05-2012 00:48:00"
return
  if ($dt castable as xs:dateTime)
  then xs:dateTime($dt)
  else xdmp:parse-dateTime("[Y01]-[M01]-[D01] [h01]:[m01]:[s01]", $dt)

这将返回一个xs:dateTime原子值,可以在 UI 中进行比较和显示。如果您想支持其他格式,则需要创建其他解析“图片”字符串,以便它们也可以转换为xs:dateTime. xdmp:parse-dateTime()有关更多信息,请参阅文档。

于 2012-07-25T21:05:45.433 回答
1

作为一个更大的开源项目的一部分,我制作了一个日期解析库,它可以处理至少 20 种不同格式的 6 种不同语言。如果尚未定义格式,您也可以提供自己的格式。它的工作方式是将日期作为任何已定义格式的字符串提供给它,xs:dateTime如果它能够成功解析它,则返回一个。你可以在这里找到图书馆:

https://github.com/marklogic/Corona/blob/master/corona/lib/date-parser.xqy

要使用它:

import module namespace dateparser="http://marklogic.com/dateparser" at "date-parser.xqy";

dateparser:parse($filteredDocument//*:meta[@name eq "Creation_Date"]/@content)

这将允许您规范化二进制文档可以具有的各种日期格式。我会注意到不同的二进制格式(Word、PDF、JPEG 等)将使用不同的名称来表示创建日期。因此,仅查找“Creation_Date”元数据可能会留下一些漏洞,具体取决于您在 MarkLogic 中存储的格式。

另请注意,如果您只想要没有时间部分的日期信息,您可以xs:dateTimexs:date. 这样做将保留时区信息,这可能是一件好事。

至于你的第二个问题……</p>

有许多不同的方法可以做到这一点,阅读一些 MarkLogic 文档是一个很好的起点。我建议看看:

http://docs.marklogic.com/guide/search-dev/rangequery

希望这将对您的查询需要的外观有所了解。以最简单的形式,您可能必须首先解析用户提供的日期。这也可以使用日期解析库来完成,因此用户可以输入大量不同的日期格式(例如:2012 年 11 月 13 日,甚至是西班牙文 Noviembre 13th, 2012)。然后使用解析的日期在 MarkLogic 中构建日期范围查询。

如果那没有帮助,我会在此处发布另一个问题,说明您挂断电话的具体位置。

于 2012-11-13T19:36:54.953 回答