跳到内容

XQuery/资源时间线

来自维基教科书,开放的书籍,为开放的世界

您想使用集合的创建和修改日期来创建时间线。

许多文件系统和 XML 数据库(如 eXist 数据库)会自动为每个资源保留两个日期。一个是创建日期,另一个是资源上次修改的日期。这些日期对于执行资源增量备份的许多系统都是必需的。

我们可以使用这些日期来自动创建一个或多个集合的时间线报告。这些报告可以作为审计跟踪,并可以帮助您找出谁在何时修改了什么。

以下是我们将在这两个示例中使用的两个函数

  xmldb:last-modified($collection as item(), $resource as xs:string) xs:dateTime?
  xmldb:created($collection as xs:string, $resource as xs:string) xs:dateTime

请注意,您也可以使用带有单个参数的 created 函数来查看集合的创建日期。

我们的查询将接受一个参数,即我们要创建时间线集合的数据库路径表达式。然后,我们的时间线将显示此集合的创建日期和修改日期。

以下是一个示例查询片段,它列出集合中所有资源的子项,并根据时间线事件 XML 结构格式化数据。

let $collection := '/db/test'
 
return
<data date-time-format="iso8601">{
   for $child in xmldb:get-child-resources($collection)
   return (
     <event start="{xmldb:created($collection, $child)}" isDuration="false">{$child} created</event>,
     <event start="{xmldb:last-modified($collection, $child)}" isDuration="false">{$child} last-modified</event>
     )
}</data>

这将返回一个格式如下面的文件

<data date-time-format="iso8601">
    <event start="2009-02-17T12:50:55.992-06:00" isDuration="false">foo.xq created</event>
    <event start="2009-02-18T15:12:47.529-06:00" isDuration="false">foo.xq last-modified</event>
    <event start="2008-11-25T13:53:23.877-06:00" isDuration="false">bar.xq created</event>
    <event start="2008-11-25T14:22:27.798-06:00" isDuration="false">bar.xq last-modified</event>
    <event start="2008-11-25T15:39:40.445-06:00" isDuration="false">foo.xhtml created</event>
    <event start="2008-11-25T15:41:51.547-06:00" isDuration="false">bar.xhtml last-modified</event>
    <event start="2009-02-06T14:24:34.74-06:00" isDuration="false">hello-world.xml created</event>
    <event start="2009-02-06T15:13:24.251-06:00" isDuration="false">hello-world.xml last-modified</event>
    <event start="2008-11-25T14:07:00.273-06:00" isDuration="false">test.xml created</event>
    <event start="2008-11-25T14:07:00.273-06:00" isDuration="false">test.xml last-modified</event>
</data>
华夏公益教科书