RE: [xsl] Reference to variable cannot be resolved.

Subject: RE: [xsl] Reference to variable cannot be resolved.
From: "Andrew Welch" <AWelch@xxxxxxxxxxxxxxx>
Date: Fri, 14 Feb 2003 12:09:22 -0000
As I understand it, variables are scoped using a 'variable stack' - when a new template is matched, a new 'layer' is added to the stack that will contain the variables declared in that template.  Should a new template be called/applied in the middle of that template, then a new layer is added to the stack.  As each template ends, so a layer is popped off the stack.  Therefore only the variables at the top of the 'variable stack' are in scope.

Of course, variables that are defined as top-level-elements are handled slightly differently, as they are in scope at all times, but will be overridden by variables with same name in the current template should a conflict occur.

(this is just from a very limited knowledge of compilers - Im presuming its the same in xslt processors)

cheers
andrew

> -----Original Message-----
> From: Mike Brown [mailto:mike@xxxxxxxx]
> Sent: 14 February 2003 11:12
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Reference to variable cannot be resolved.
> 
> 
> David Carlisle wrote:
> > 
> > 
> > > Explaining to people why that's legal, after telling them 
> they can only
> > > assign x once, is a nice challenge :)
> > 
> > You can only assign a value to a variable once but you can have two
> > variables with the same name, but only one in scope at any 
> point in the
> > program.
> 
> 2 buts in one sentence... you're sounding like me now. One 
> possible reading of
> your explanation would be that when one variable binding 
> occurs at the top
> level and the other occurs in a template, they are different 
> variables with
> the same name, whereas if both bindings occur at the top 
> level, or if both
> occur within a single template, they are binding the same variable.
> 
> Perhaps a simpler way to look at it is that the variable 
> binding element
> (xsl:variable or xsl:param) is just creating/importing an 
> object and giving it
> a name. The name is then in scope among all following 
> siblings and their
> descendants. The name can be one that is already in scope 
> only if the other
> binding that used that name was made at the top level and 
> this binding is
> being made in a template.
> 
> No matter how you explain it, there's nothing really 
> intuitive about it; it's
> just the way things are; you have to state that the top-level 
> bindings are 
> global, yet overridable within a template, no?
> 
> Mike
> 
> -- 
>   Mike J. Brown   |  http://skew.org/~mike/resume/
>   Denver, CO, USA |  http://skew.org/xml/
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 
> 
> 
> 
> 
> ---
> Incoming mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.454 / Virus Database: 253 - Release Date: 10/02/2003
>  
> 

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.454 / Virus Database: 253 - Release Date: 10/02/2003
 

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


Current Thread