[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Re: Re: A question about the expressive power and

Subject: Re: Re: Re: A question about the expressive power and limitations of XPath 2.0
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Sun, 13 Jan 2002 10:27:31 +0000
xpath power function
Hi Dimitre,

>> OK, let me think... a higher-order distinct function is an example.
>> You have structured identifiers of the form "group.subgroup" and
>> you want to return a unique set of nodes based on the "group" part
>> of the identifier (note that Mike said they were discussion how to
>> support this already, so perhaps there'll be a new 'distinct'
>> clause added to the for expression to solve it). A recursive
>> solution would be:
>> 
>> <xsl:function name="my:distinct">
>>   <xsl:param name="nodes" type="node*" select="()" />
>>   <xsl:param name="distinct" type="node*" select="()" />
>>   <xsl:variable name="new-distinct"
>>     select="if ($nodes[1] and
>>                 some $n in ($distinct)
>>                 satisfies (substring-before($n/@id, '.') =
>>                            substring-before($nodes[1]/@id, '.')))
>>             then ($distinct | $n)
>>             else $distinct" />
>>   <xsl:result select="if ($nodes)
>>                       then my:distinct($nodes[position() > 2],
>>                                        $new-distinct)
>>                       else $distinct
>> </xsl:function>
>
> I'm sorry, but it's not absolutely obvious. Let's have an example:

Sorry. I was imagining $nodes contains:

  <function id="str.concat">...</function>
  <function id="regexp.match">...</function>
  <function id="math.power">...</function>
  <function id="math.sin">...</function>
  <function id="str.tokenize">...</function>
  <function id="str.pad">...</function>

You need to group the functions by the initial part of their @id, and
get back a sequence of function elements that have unique values for
that part of their @id.

You can do it if you're generating a result using xsl:for-each-group:

  <xsl:for-each-group select="function"
                      group-by="substring-before(@id, '.')">
    ...
  </xsl:for-each-group>

But this doesn't help if you need to get hold of the function elements
themselves (because you need to select the first two in document
order, for example).

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.