XQuery/量化表示式
外觀
< XQuery
您有一個序列中的專案列表,您想要測試以檢視任何或所有專案是否匹配某個條件。對序列進行測試的結果將為真或假。
量化表示式與 FLWOR 表示式的格式非常相似,但有以下兩點變化
- 您將使用 some 或 every 而不是 for
- 您將使用 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 表示式更易讀。