Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Limit number of results in xquery

Tags:

xml

xquery

I have the following Xquery code:

for $w in $words
let $freq := (count($corpus[. eq $w]) div count($content2[text() eq $w])) 
order by $freq descending
return <tr><td>{$w}</td><td>{$freq}</td></tr>

$words is some distinct words that appears (may appear multiple times) in $corpus. $content2 is some another bag of words. Variables and division is not that important.

This xquery lists some frequency calculation of words, ordered.

What I want to do is limit the results by 10. I tried to use positional values but as it gives me the position of the word in the word list, it didnt work out..

Any help?

like image 666
Ataman Avatar asked Jan 17 '12 19:01

Ataman


2 Answers

The number of results can e.g. be limited as follows:

(for $w in $words
 let $freq := (count($corpus[. eq $w]) div count($content2[text() eq $w])) 
 order by $freq descending
 return <tr><td>{$w}</td><td>{$freq}</td></tr>
)[position() = 1 to 10]
like image 190
Christian Grün Avatar answered Nov 08 '22 03:11

Christian Grün


Use subsequence($sequence, $start, $records) to return a subset of results, starting at record $start (be aware XQuery counts from 1) returning records items. Have a look at "Limiting Result Sets" XQuery Wikibooks Page. An example of how to apply the function copied from this page:

let $sorted-people :=
   for $person in collection($collection)/person
   order by $person/last-name/text()
   return $person

for $person at $count in subsequence($sorted-people, $start, $records)
return
   <li>{ $person/last-name/text() }</li>
like image 44
Jens Erat Avatar answered Nov 08 '22 03:11

Jens Erat