[xquery-talk] sorting not working
Michael Kay
mhk at mhk.me.uk
Fri Nov 18 15:39:38 PST 2005
As someone else spotted and I didn't, $copies//printdate is not going to
select anything when $copies is an attribute node.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: talk-bounces at xquery.com
> [mailto:talk-bounces at xquery.com] On Behalf Of Cindy Girard
> Sent: 18 November 2005 15:26
> To: talk at xquery.com
> Subject: Re[2]: [xquery-talk] sorting not working
>
> 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
>
> _______________________________________________
> talk at xquery.com
> http://xquery.com/mailman/listinfo/talk
>
More information about the talk
mailing list