This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: mapping (Was: Re: Re: . in for)
- From: Jeni Tennison <jeni at jenitennison dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Fri, 11 Jan 2002 16:19:41 +0000
- Subject: Re: mapping (Was: Re: [xsl] Re: . in for)
- Organization: Jeni Tennison Consulting Ltd
- References: <000301c19ab4$57569f50$465169d5@pcukmka>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Mike wrote:
>> The lambda expression syntax might be somewhat tricky to get right,
>> "expression(expr,arg,...)" may be too much like a function
>> invocation. Perhaps #(arg1,arg2,...,expr) ?
>
> Syntax is always difficult to get right! I've suggested in the past
> using
>
> [arg1, arg2; expr]
Neat. I'd like seeing predicates as a shorthand of this - [expr]
giving a lambda expression with an implicit single argument of '.'. If
this was intended as a future extension, a syntax for a simple mapping
expression could then be:
Expr ("map" "[" Expr "]")+
> (But there are people in the XQuery WG who like keyword-based syntax
> and mock this kind of thing as "line noise". Those people might
> prefer something like "with $arg1, $arg2 return expr". You could
> give examples using both syntaxes to avoid that criticism.)
<grumble>
Can we mock keyword-based syntax back? It's alright for them with
their ability to write 50 lines of this stuff in a document - we have
to put it in attributes!
</grumble>
> You get a spin-off of being able declare range variables in a predicate:
>
> customer[$c; exists($c/orders[preferred-customer=$c])]
Hubba hubba. Or that one David thought he'd solved:
$x//*[$e; not(following::*[name()=name($e)])]
> The one we are currently inventing is "distinct" (select the items in $x
> that have distinct values for f(x)). So it might be a good idea to take that
> as your exemplar, pointing to the (known) limitations of the current
> distinct-values() function.
>
> distinct(employee, [$emp; $emp/@SSN])
If you adopt sequence constructors then you can use XSLT's grouping
facility ;)
<xsl:for-each-group select="employee" group-by="@SSN">
<xsl:item select="." />
</xsl:for-each-group>
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list