跳轉到內容

XQuery/量化表示式

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

您有一個序列中的專案列表,您想要測試以檢視任何或所有專案是否匹配某個條件。對序列進行測試的結果將為真或假。

量化表示式與 FLWOR 表示式的格式非常相似,但有以下兩點變化

  1. 您將使用 someevery 而不是 for
  2. 您將使用 satisfies 而不是 where/order/return

量化表示式始終以序列作為輸入,並返回布林值真/假作為輸出。

以下是一個量化表示式的示例,它檢查是否有任何書籍包含單詞“cat”。

假設您有一組書籍,每本書都只有一個帶有 title 屬性的 XML 檔案,例如:

<book>
   ...
   <title>The Cat With Nine Lives</title>
   ...
</book>

量化表示式的示例

[編輯 | 編輯原始碼]

限制標題中包含字串“cat”的書籍的 XQuery 表示式將是

測試集合中至少有一本“cat 書”

some $book in collection($collection)/book
satisfies (contains(lower-case($book/title), 'cat'))

只要有一本書的標題中包含單詞“cat”,此表示式將返回真。

測試所有書籍都是貓書

every $book in collection($collection)/book
satisfies (contains(lower-case($book/title), 'cat'))

此表示式僅在所有書籍的標題中都包含字串“cat”時才返回真。

請注意,量化表示式不能用於指示哪本書的標題包含單詞“cat”,而只能指示單詞“cat”是否出現在您的集合中的至少一個標題中。

量化表示式通常可以透過帶謂詞的單個 XPath 表示式重寫。在上述情況下,表示式將是

let $has-a-cat-book := exists(collection($collection)/book/title[contains(lower-case(., 'cat')])

如果任何書籍包含單詞“cat”,則變數 $has-a-cat-book 將設定為 true()。

一些 XQuery 解析器可以更好地最佳化量化表示式,有些人認為量化表示式比單個 XPath 表示式更易讀。

華夏公益教科書