Hi Christian, This weekend I tried to make a query which counts the number of times a certain combination of terms occurs in my repository of xml-files. I didn't succeed in finding a way to count the number of occurrences. Could you help me with this? I have attached the result-file from the query to this mail. As you have said in your last mail, the found letters have to be put in a sequence. After that the items in the sequence have to be counted. I was thinking of a method like: let $sequence := ( a method to get the items from the result) let $count := count($sequence) return <results> <count>{$count}</count> <items> {for $item in $sequence return <item>{$item}</item> } </items> </results> let $range := 1 to 800 for $doc in collection('brievenvangogh') let $uri := base-uri($doc), $num := substring($uri, string-length($uri) - 6, 3) where $num castable as xs:integer and xs:integer($num) = $range return <document uri='{$uri}'>{ for $n score $s in $doc//*[text() contains text {'gauguin','pissarro'}all ] return <hit score='{ $s }'>{ $n, count($n) }</hit> } </document> In my count($n) I get only the number 1. Thank you very much in advance! Regards, Wiard 2011/5/20 Wiard Vasen <wiard.vasen@gmail.com>
Oke Christian,
I learned a lot from you. Have a nice weekend.
Regards,
Wiard
2011/5/20 Christian Grün <christian.gruen@gmail.com>
XQuery is a functional language; as such, you can never update variables that have already been assigned. The count() function gives you the number of items in a sequence:
<hit score='{ $s }'>{ $n, count($n) }</hit> ___________________________
On Fri, May 20, 2011 at 5:05 PM, Wiard Vasen <wiard.vasen@gmail.com> wrote:
Hi Christian, I would like to make a counter for the number of documents containing the terms from the query. I made one in blue in the following query. let $range := 1 to 800 for $doc in collection('brievenvangogh') let $uri := base-uri($doc), $num := substring($uri, string-length($uri) - 6, 3) where $num castable as xs:integer and xs:integer($num) = $range return <document uri='{$uri}'>{ let $t := 0 for $n score $s in $doc//*[text() contains text {'gauguin','pissarro'}all ] return $t:=+1; return <hit score='{$s}'>{$n}{$t} }</hit> } </document> Could you help me make this counter work? Thank you in advance. Regards, Wiard 2011/5/20 Wiard Vasen <wiard.vasen@gmail.com>
Hi Christian, The query works. Thanks a lot! Regards, Wiard
2011/5/20 Wiard Vasen <wiard.vasen@gmail.com>
You are probably right. That would be funny. I am going to figure it out. Regards.
2011/5/20 Christian Grün <christian.gruen@gmail.com>
> $doc//*[text() contains text {'gauguin','pissarro','monet'}all ]
I would assume that none of the text nodes in your document contains all three names.