Subject: Re: [xsl] Looking for a shorter mapping expression From: Dimtre Novatchev <dnovatchev@xxxxxxxxx> Date: Sun, 5 Dec 2004 23:38:40 +1100 |
On 05 Dec 2004 11:47:20 +0000, Colin Paul Adams <colin@xxxxxxxxxxxxxxxxxx> wrote: > >>>>> "Dimtre" == Dimtre Novatchev <dnovatchev@xxxxxxxxx> writes: > > >> How about: > >> > >> f:a ($pFun, $pList) > >> > >> :-) :-) :-) > >> > >> I don't understand the compactness requirement. > > > Dimtre> It can be very essential -- if the "/" operator allowed an > Dimtre> arbitrary sequence on the left, then it would be > Dimtre> preferrable to f:map() > > Dimtre> But I'm not satisfied at all with the currently (un) > Dimtre> available ways to define the type of such higher order > Dimtre> operators in XPath2. > > Don't you mean XSLT 2.0 No, "/" is an XPath operator, which is used in path expressions. It is also a higher-order operator, whose domain and codomain types are not defined (XPath has access to the datatypes of nodes -- as found in PSVI, to the types of variables (from the context if they are externally passed) , to the types of literals -- constructed during lexical analysis and to the types of externally defined functions (like xsl:function) -- as available in the context. However, "/" is not externally defined and there do not seem to be any suitable facilities to describe its type -- either in XSD or those available in XSLT 2.0. Its first (left-hand) operand may be any expression evaluating to a sequence of nodes (generally of differing types ) (sorted by document order and with no duplicates) and its second operand is even more unrestricted as it can be a function of any (suitable) type returning any type (of either a node or an atomic value). What is needed in order to define the type of such functions is a *type expression*. More specifically, I am not aware of any facility available in XSLT 2.0 to describe the type of an argument, which argument is a function -- this is not present, because higher order functions are not present in the language. > > Dimtre> Compare to the strict type definition in Haskell: > > Dimtre> map :: (a -> b) -> [a] -> [b] > > I see what you mean - for f:map you currently have: > > <xsl:function name="f:map" as="item()*"> > <xsl:param name="pFun" as="element()"/> > <xsl:param name="pList1" as="item()*"/> > > whereas what you want is: > > <xsl:function name="f:map" like="pList1"> > <xsl:param name="pFun" as="element()"/> > <xsl:param name="pList1" as="item()*"/> Actually, what would be correct is something like this: <xsl:function name="f:map" as="codomTypeVariable*"> <xsl:param name="pFun" as="function()" domain="domTypeVariable" codomain="codomTypeVariable"/> <xsl:param name="pList1" as="domTypeVariable*"/> of course, not everything can be expressed. Thus, even using Haskell's type expression it is not possible to describe in them that the result of f:map() and $pList1 should be of the same cardinality. > > which is not valid XSLT 2.0. > And I guess it's probably too late to have such a proposal considered. I guess this would be the main contribution of XPath 3.0. Cheers, Dimitre.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Looking for a shorter map, Colin Paul Adams | Thread | RE: [xsl] Looking for a shorter map, Michael Kay |
Re: [xsl] Split XML file into seper, M. David Peterson | Date | Re: [xsl] Newbie - howto write to a, Andy Ford |
Month |