Subject: RE: 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: 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 |
|
Andrew Welch - Fri, 14 Feb 2003 07:07:19 -0500 (EST) <=
Andrew Welch - Fri, 14 Feb 2003 08:05:49 -0500 (EST)
Dimitre Novatchev - Fri, 14 Feb 2003 10:11:22 -0500 (EST)
|
|