[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