Re: [xsl] Challenge: do better than my implementation of "update map" and "print map"

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