Subject: Re: [xsl] Challenge: do better than my implementation of "update map" and "print map" From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx> Date: Thu, 29 Aug 2013 08:12:22 +0200 |
Perl lets you assign a list with an even number of elements to a map, using it as a sequence of key-value pairs. Providing an f:add-entries-to-map wouldn't be difficult. As for f:print-map: what if the value is another map? ;-) -W On 29/08/2013, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: > Sean, > >> I think his purpose was to unit-test the f:add-entry-to-map(). If you >> never >> call it, it is not being tested. > > It may be so. On the other side, it is good to know that > chain-addition maybe less efficient than adding all of the single > entries in a single operation. > >> Also, In his original version f:print-map() returns xs:string. I think >> that >> is what he wants: a "printing" function that returns a string. > > Again, this may be the case, but I don't want to be guessing. Instead, > it is good to know that there is a similar function with more general > signature, that > > > On Wed, Aug 28, 2013 at 9:54 PM, <sean@xxxxxxxxxxxxxxxxx> wrote: >> Dimitre, >> >> I think his purpose was to unit-test the f:add-entry-to-map(). If you >> never >> call it, it is not being tested. >> >> Also, In his original version f:print-map() returns xs:string. I think >> that >> is what he wants: a "printing" function that returns a string. >> >> Faithfully, >> Sean B. Durkin >> >> >> >> On 2013-08-28 21:55, Dimitre Novatchev wrote: >>> >>> In addition, instead of creating N intermediate maps as in the provided >>> code: >>> >>>> <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> >>>> >>>> <xsl:variable name="m1" select="f:add-entry-to-map('Sally', >>>> 'Betsy', $m)" /> >>>> <xsl:variable name="m2" select="f:add-entry-to-map('Barb', >>>> 'Sue', >>>> $m1)" /> >>>> <xsl:variable name="m3" select="f:add-entry-to-map('Nadia', >>>> 'Valerie', $m2)" /> >>>> <xsl:variable name="m4" select="f:add-entry-to-map('Faye', >>>> 'Carol', $m3)" /> >>>> >>> >>> Just do: >>> >>> <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> >>> <xsl:variable name="m1" select="map:entry('Sally', 'Betsy')" /> >>> <xsl:variable name="m2" select="map:entry('Barb', 'Sue')" /> >>> <xsl:variable name="m3" select="map:entry('Nadia', 'Valerie')" >>> /> >>> <xsl:variable name="m4" select="map:entry('Faye', 'Carol')" /> >>> >>> <xsl:sequence select="f:print-map(map:new(($m, $m1, $m2, $m3, >>> $m4)))" /> >>> >>> Also, it is possible to get rid of the concat() function in the >>> definition of f:print-map(). >>> >>> Instead of: >>> >>> <xsl:sequence select="map:keys($m) ! concat(., '-', map:get($m, >>> .))"/> >>> >>> Just do: >>> >>> <xsl:sequence select="map:keys($m) ! (., '-', map:get($m, .))"/> >>> >>> So, the complete code now is: >>> >>> <xsl:stylesheet version="3.0" >>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >>> xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f="function" >>> xmlns:map="http://www.w3.org/2005/xpath-functions/map"> >>> <xsl:output method="text"/> >>> >>> <!-- Test the two map functions --> >>> <xsl:template match="/"> >>> <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> >>> <xsl:variable name="m1" select="map:entry('Sally', 'Betsy')" /> >>> <xsl:variable name="m2" select="map:entry('Barb', 'Sue')" /> >>> <xsl:variable name="m3" select="map:entry('Nadia', 'Valerie')" >>> /> >>> <xsl:variable name="m4" select="map:entry('Faye', 'Carol')" /> >>> >>> <xsl:sequence select="f:print-map(map:new(($m, $m1, $m2, $m3, >>> $m4)))" /> >>> </xsl:template> >>> >>> <xsl:function name="f:add-entry-to-map" as="map(xs:anyAtomicType, >>> item()*)"> >>> <xsl:param name="key" as="xs:string" /> >>> <xsl:param name="value" as="item()" /> >>> <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> >>> >>> <xsl:sequence select="map:new(($m, map:entry($key, $value)))" >>> /> >>> </xsl:function> >>> >>> <xsl:function name="f:print-map" as="item()*"> >>> <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> >>> >>> <xsl:sequence select="map:keys($m) ! (., '-', map:get($m, >>> .))"/> >>> </xsl:function> >>> </xsl:stylesheet> >>> >>> >>> Cheers, >>> Dimitre >>> >>> >>> On Wed, Aug 28, 2013 at 7:49 PM, Dimitre Novatchev >>> <dnovatchev@xxxxxxxxx> >>> wrote: >>>> >>>> What about this: >>>> >>>> <xsl:stylesheet version="3.0" >>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >>>> xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f="function" >>>> xmlns:map="http://www.w3.org/2005/xpath-functions/map"> >>>> >>>> <xsl:output method="text"/> >>>> >>>> <!-- Test the two map functions --> >>>> <xsl:template match="/"> >>>> <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> >>>> >>>> <xsl:variable name="m1" select="f:add-entry-to-map('Sally', >>>> 'Betsy', $m)" /> >>>> <xsl:variable name="m2" select="f:add-entry-to-map('Barb', >>>> 'Sue', $m1)" /> >>>> <xsl:variable name="m3" select="f:add-entry-to-map('Nadia', >>>> 'Valerie', $m2)" /> >>>> <xsl:variable name="m4" select="f:add-entry-to-map('Faye', >>>> 'Carol', $m3)" /> >>>> >>>> <xsl:sequence select="f:print-map($m4)" /> >>>> </xsl:template> >>>> >>>> <xsl:function name="f:add-entry-to-map" as="map(xs:anyAtomicType, >>>> item()*)"> >>>> <xsl:param name="key" as="xs:string" /> >>>> <xsl:param name="value" as="item()" /> >>>> <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> >>>> >>>> <xsl:sequence select="map:new(($m, map:entry($key, $value)))" >>>> /> >>>> </xsl:function> >>>> >>>> <xsl:function name="f:print-map" as="item()*"> >>>> <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> >>>> >>>> <xsl:sequence select="map:keys($m) ! concat(., '-', >>>> map:get($m, >>>> .))"/> >>>> </xsl:function> >>>> </xsl:stylesheet> >>>> >>>> Cheers, >>>> Dimitre >>>> >>>> >>>> On Wed, Aug 28, 2013 at 2:52 PM, Costello, Roger L. >>>> <costello@xxxxxxxxx> >>>> wrote: >>>>> >>>>> >>>>> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >>>>> xmlns:map="http://www.w3.org/2005/xpath-functions/map" >>>>> xmlns:xs="http://www.w3.org/2001/XMLSchema" >>>>> xmlns:f="function" >>>>> version="3.0"> >>>>> >>>>> <!-- Test the two map functions --> >>>>> >>>>> <xsl:template match="/"> >>>>> <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> >>>>> >>>>> <xsl:variable name="m1" select="f:add-entry-to-map('Sally', >>>>> 'Betsy', $m)" /> >>>>> <xsl:variable name="m2" select="f:add-entry-to-map('Barb', >>>>> 'Sue', $m1)" /> >>>>> <xsl:variable name="m3" select="f:add-entry-to-map('Nadia', >>>>> 'Valerie', $m2)" /> >>>>> <xsl:variable name="m4" select="f:add-entry-to-map('Faye', >>>>> 'Carol', $m3)" /> >>>>> >>>>> <xsl:sequence select="f:print-map($m4)" /> >>>>> >>>>> </xsl:template> >>>>> >>>>> <xsl:function name="f:add-entry-to-map" as="map(xs:string, >>>>> item())"> >>>>> <xsl:param name="key" as="xs:string" /> >>>>> <xsl:param name="value" as="item()" /> >>>>> <xsl:param name="m" as="map(xs:string, item())" /> >>>>> >>>>> <xsl:sequence select="map:new((for $i in map:keys($m) return >>>>> map:entry($i, map:get($m, $i)), map:entry($key, $value)))" /> >>>>> >>>>> </xsl:function> >>>>> >>>>> <xsl:function name="f:print-map" as="xs:string*"> >>>>> <xsl:param name="m" as="map(xs:string, item())" /> >>>>> >>>>> <xsl:for-each select="map:keys($m)"> >>>>> <xsl:value-of select="." /> >>>>> <xsl:text> - </xsl:text> >>>>> <xsl:value-of select="map:get($m, .)" /> >>>>> </xsl:for-each> >>>>> </xsl:function> >>>>> >>>>> </xsl:stylesheet> >>>> >>>> >>>> >>>> >>>> >>>> -- >>>> Cheers, >>>> Dimitre Novatchev >>>> --------------------------------------- >>>> Truly great madness cannot be achieved without significant >>>> intelligence. >>>> --------------------------------------- >>>> To invent, you need a good imagination and a pile of junk >>>> ------------------------------------- >>>> Never fight an inanimate object >>>> ------------------------------------- >>>> To avoid situations in which you might make mistakes may be the >>>> biggest mistake of all >>>> ------------------------------------ >>>> Quality means doing it right when no one is looking. >>>> ------------------------------------- >>>> You've achieved success in your field when you don't know whether what >>>> you're doing is work or play >>>> ------------------------------------- >>>> Facts do not cease to exist because they are ignored. >>>> ------------------------------------- >>>> Typing monkeys will write all Shakespeare's works in 200yrs.Will they >>>> write all patents, too? :) >>>> ------------------------------------- >>>> I finally figured out the only reason to be alive is to enjoy it. >>> >>> >>> >>> >>> -- >>> Cheers, >>> Dimitre Novatchev >>> --------------------------------------- >>> Truly great madness cannot be achieved without significant intelligence. >>> --------------------------------------- >>> To invent, you need a good imagination and a pile of junk >>> ------------------------------------- >>> Never fight an inanimate object >>> ------------------------------------- >>> To avoid situations in which you might make mistakes may be the >>> biggest mistake of all >>> ------------------------------------ >>> Quality means doing it right when no one is looking. >>> ------------------------------------- >>> You've achieved success in your field when you don't know whether what >>> you're doing is work or play >>> ------------------------------------- >>> Facts do not cease to exist because they are ignored. >>> ------------------------------------- >>> Typing monkeys will write all Shakespeare's works in 200yrs.Will they >>> write all patents, too? :) >>> ------------------------------------- >>> I finally figured out the only reason to be alive is to enjoy it. >> > > > > -- > Cheers, > Dimitre Novatchev > --------------------------------------- > Truly great madness cannot be achieved without significant intelligence. > --------------------------------------- > To invent, you need a good imagination and a pile of junk > ------------------------------------- > Never fight an inanimate object > ------------------------------------- > To avoid situations in which you might make mistakes may be the > biggest mistake of all > ------------------------------------ > Quality means doing it right when no one is looking. > ------------------------------------- > You've achieved success in your field when you don't know whether what > you're doing is work or play > ------------------------------------- > Facts do not cease to exist because they are ignored. > ------------------------------------- > Typing monkeys will write all Shakespeare's works in 200yrs.Will they > write all patents, too? :) > ------------------------------------- > I finally figured out the only reason to be alive is to enjoy it.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Challenge: do better than, Dimitre Novatchev | Thread | RE: [xsl] Challenge: do better than, Costello, Roger L. |
Re: [xsl] Challenge: do better than, Dimitre Novatchev | Date | RE: [xsl] Challenge: do better than, Costello, Roger L. |
Month |