AW: AW: Conditional processing based on option



> -----Ursprüngliche Nachricht-----
> Von: Norm Tovey-Walsh <ndw@nwalsh.com>
> Gesendet: Freitag, 22. November 2024 13:42
> An: Maier, Denis Christian (UB) <denis.maier@unibe.ch>
> Cc: xproc-dev@w3.org
> Betreff: Re: AW: Conditional processing based on option
> 
> >> You have to put the whole step in the when/otherwise branches.
> >> This should work, though I haven’t tested it :-)
> >
> > Unfortunately it doesn't.
> > Error in XPath expression 'c:file/@name': Context item is needed, but not
> provided: 11 items found.
> 
> Sorry. Something like this:
> 
>   <p:option name="sorted-files" select="'true'" />
>   <p:directory-listing …>
>   <p:for-each>
>     <p:choose>
>       <p:when test="$sorted-files = 'false'">
>         <p:identity>
>           <p:with-input select="//*:file => sort((), function($file) {  analyze-string
> ($file!@name, '[0-9]+')!descendant::*[not(*)]!(if (.
>                       instance of element(fn:match)) then number(.) else string(.)) })"/>
>         </p:identity>
>       </p:when>
>       <p:otherwise>
>         <p:identity>
>           <p:with-input select="//*:file"/>
>         </p:identity>
>       </p:otherwise>
>     </p:choose>
>   </p:for-each>
> 

Ok, this is works. I'm still struggling to understand what exactly might be happeing in these two cases. Am I understanding this correctly that this here is sorting the complete list, which then gets passed to the next p:for-each step? Whereas in Martin's solution, sorting happens inside a single p:for-each step together with the actual processing of the individual files? In Martin's solution, is it correct to assume that the sorting doesn't return a complete sorted list, but just the next item to be processed?

Received on Friday, 22 November 2024 13:56:49 UTC