Subject: Re: [xsl] Challenge: do better than my implementation of "update map" and "print map" From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Wed, 28 Aug 2013 22:04:23 -0700 |
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 is useful in variety of cases, including the original case. Cheers, Dimitre. 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, sean | Thread | Re: [xsl] Challenge: do better than, Dimitre Novatchev |
Re: [xsl] Challenge: do better than, sean | Date | Re: [xsl] Challenge: do better than, Dimitre Novatchev |
Month |