[xquery-talk] sorting not working
Cindy Girard
clm6u at virginia.edu
Fri Nov 18 10:26:17 PST 2005
OK - a little more info:
We're using eXist.
The three document segments:
nnr.b.xml
<compdate value="1788.B">c. 1788</compdate>
<printdate value="1794.A">c. 1794</printdate>
nnr.l.xml
<compdate value="1788.B">c. 1788</compdate>
<printdate value="1795">c. 1795</printdate>
nnr.g.xml
<compdate value="1788.B">c. 1788</compdate>
<printdate value="1794.C">c. 1794</printdate>
The order it comes out as is:
nnr.g, nnr.b, nnr.l
and it should be:
nnr.b, nnr.g, nnr.l
(Is the '.A' '.C' throwing it off? We use the same ordering in another
place and it works fine.)
I've changed the code to this:
order by ($copies//compdate)[1]/@value, ($copies//printdate)[1]/@value
with no change.
original code:
{for $copies in collection($g:collection)/bad[starts-with(@id, $workid)]/@id
let $bad :=collection($g:collection)/bad[@id = $copies]
let $copyversion := string($bad/@copy),
$comporder :=$bad[@id = $copies]//compdate[1]/@value,
$printorder :=$bad[@id = $copies]//printdate[1]/@value,
$printdate := $bad[@id = $copies]//printdate/text(),
$repository := $bad//repository/institution/text(),
$repcount := count($repository)
order by $copies//compdate[1]/@value, $copies//printdate[1]/@value
return
if ($copies != $copyid)
then
<option value="{$copies}"><striptags>{if(exists($copyversion))then
<wrap>{$copyversion}, </wrap>else ""} {string($printdate)}
({if($repcount = 1) then $repository else <wrap>Multiple
({$repcount}) Institutions</wrap> })</striptags></option>
else ""
}
Thanks,
Cindy
MK> It would help to (a) provide a sample source document, and (b) to say what
MK> product you are using.
MK> Also "not working" is very unspecific: what output/error do you get?
MK> The only thing I can see that's questionable is the repeated use of
MK> x//compdate[1]
MK> This selects every compdate descendant that is the first compdate child of
MK> its parent. I suspect you intended to select the first descendant compdate
MK> element, which can be written
MK> (x//compdate)[1]
MK> or
MK> x/descendant::compdate[1]
MK> Michael Kay
MK> http://www.saxonica.com/
>> -----Original Message-----
>> From: talk-bounces at xquery.com
>> [mailto:talk-bounces at xquery.com] On Behalf Of Cindy Girard
>> Sent: 17 November 2005 20:46
>> To: talk at xquery.com
>> Subject: [xquery-talk] sorting not working
>>
>> Hi.
>>
>> Is there another way I can word this? I'm just not sure where the
>> error is.
>>
>> Thanks,
>> Cindy
>>
>> -------------------------------------
>>
>> {for $copies in collection($g:collection)/bad[starts-with(@id
>> , $workid)]/@id
>> let $bad :=collection($g:collection)/bad[@id = $copies]
>> let $copyversion := string($bad/@copy),
>> $comporder :=$bad[@id = $copies]//compdate[1]/@value,
>> $printorder :=$bad[@id = $copies]//printdate[1]/@value,
>> $printdate := $bad[@id = $copies]//printdate/text(),
>> $repository := $bad//repository/institution/text(),
>> $repcount := count($repository)
>> order by $copies//compdate[1]/@value,
>> $copies//printdate[1]/@value
>> return
>> if ($copies != $copyid)
>> then
>> <option
>> value="{$copies}"><striptags>{if(exists($copyversion))then
>> <wrap>{$copyversion}, </wrap>else ""} {string($printdate)}
>> ({if($repcount = 1) then $repository else <wrap>Multiple
>> ({$repcount}) Institutions</wrap> })</striptags></option>
>> else ""
>>
>> }
>>
>>
>>
>> _______________________________________________
>> talk at xquery.com
>> http://xquery.com/mailman/listinfo/talk
>>
MK> _______________________________________________
MK> talk at xquery.com
MK> http://xquery.com/mailman/listinfo/talk
--
- Cindy
More information about the talk
mailing list