跳轉到內容

XQuery/基於時間的查詢

來自華夏公益教科書,開放的書籍,開放的世界

您想要根據日期時間資訊查詢集合中的專案。

預設情況下,XML 檔案使用標準 ISO dateTime 結構來儲存時間資訊。與儲存時間相關的兩種主要 XML 資料型別是

xs:date - 用於以 YYYY-MM-DD 格式儲存僅日期。xs:dateTime - 用於儲存日期和時間。

還有許多其他用於儲存僅年份、月份、日期和時間等的結構,但此示例僅涵蓋日期和日期時間。

示例事件結構

[編輯 | 編輯原始碼]

在以下示例中,我們將使用簡單的日期結構儲存“事件”資料。事件將只有一個開始日期或一個包含開始日期和結束日期的日期範圍。

<event>
   <id>6</id>
   <name>Architecture Tradeoff Analysis</name>
   <start-date>2011-04-07</start-date>
   <end-date>2011-04-21</end-date>
</event>

您可以使用以下 xquery 結構找到在任何特定時間點發生的事件。

來自 events-at-time.xq 的原始碼

{: get a URL parameter to this XQuery :)
let $date := xs:date(request:get-parameter('date', ''))
(: create a sequence of all events :)
let $events := collection('/db/apps/timelines/data')//event

return
   {: return all events that start before the date AND end after the date :)
   for $event in $events[
      xs:date(./start-date/text()) lt $date
      and xs:date(./end-date/text()) gt $date
      ]
    return $event

您還可以基於日期時間結構設定非常快速的搜尋,即使對於 100,000 個專案的大型集合也是如此,在您瞭解如何在 XML xs:dateTime 結構上配置範圍索引後。請參閱:http://www.w3.org/TR/xmlschema-2/#dateTime 日期時間結構的工作方式。

以下頁面包含有關索引的說明

http://exist-db.org/exist/apps/doc/indexing.xml

並確保閱讀有關範圍索引的第 2.2 節。

我還會在您的範圍索引中使用 xs:date 和 xs:dateTime 結構。

如果您正在跟蹤文件建立和修改日期時間,則您的集合配置檔案(請參閱 http://exist-db.org/exist/apps/doc/indexing.xml#idxconf)可能包含以下幾行

<create qname="start-date" type="xs:date"/>
<create qname="end-date" type="xs:date"/>
<create qname="created-dateTime" type="xs:dateTime"/>
<create qname="last-modified-dateTime" type="xs:dateTime"/>

請注意,所有 eXist 集合和資源在其元資料中也都有這兩個日期。您可以使用 xmdb 模組獲取這些時間戳

xmldb:created

xmldb:last-modified

其他資源

[編輯 | 編輯原始碼]
華夏公益教科書