This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: remaining problem w/ dyn var scoping, as proposed (and solution?)


Matt,

I agree that implicit parameters should be scoped by a namespace
just like tags should so there would not be conflicts. I'm not
sure if namespaces should be used for the parameter name or if
the scope attribute should carry the name of the scope. Actually,
I personally like your scope attribute more, but wouldn't namespaces
be more according to common practice?

The neat thing about the scope attributes is that they make
it very straightforwardly clear how to implement this:
Just make each named 'scope' an association list. Using deep
binding is not a problem here because it can be expected that
only a few hand full of variable names would be in each 'scope'.

I also like your proposal for requiring implicit parameters to be
passed on once they are 'caught.' That results in even less dark
magic happening behind the scene without the explicit agreement
by the programmer. It would make implicit parameter even more
closely aligned to explicit parameters.

I don't care if parameter passing is verbose in XSL, everything
is verbose in XML, so I better get used to that :-) The only
purpose of implicit parameters is to pass them through templates
that don't care about them.

Here is an example of all of this:

<xsl:template ...>
   <!-- all implicit parameters used must be declared in the
        current lexical scope. -->
   <xsl:param scope='foo' name='text-color' select="'black'"/>
   <xsl:param scope='foo' name='text-indent' select="''"/>
   <xsl:param scope='foo' name='text-size' select="10pt"/>

   <out color="{$text-color}"/>

   <xsl:apply-templates ...>
     <!-- all implicit parameters declared in this lexical
	 scope must be passed forward explicitly. -->
     <xsl:with-param scope='foo' name='text-indent'
                     select="concat($text-indent,'  ')"/>
     <xsl:with-param scope='foo' name='text-size'
                     select="$text-size"/>
   </xsl:apply-templates>
</xsl:template>

The only funny thing with this pass-forward requirement is that
it is actually more work to implement, because the XSLT engine
needs to positively find out which parameters of the current
lexical scope (including the global scope!) are not on the
with-parameter list and then assign a 'NULL value' to those such
that their current binding would not be retrievable in an inner
dynamic scope. That may be more work for little additional
benefit?

regards
-Gunther

[Cutting out my formal signature :-)]


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]