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: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Wed, 28 Aug 2013 22:07:13 -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


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