[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Variable Scope

Subject: RE: Variable Scope
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 12 May 2005 08:34:03 +0100
select from recordset
That's the simplified version?

What's the actual error message you are getting?

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: Karl Stubsjoen [mailto:kstubs@xxxxxxxxx] 
> Sent: 11 May 2005 21:12
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re:  Variable Scope
> 
> Ok, Templates are:
> validate_base.xsl  (base template)
> validate_sped.xsl  (imports validate_base; includes incl_GradAge.xsl)
> incl_GradeAge.xsl (included file with MAX_DATE problem)
> 
> (much code has been removed)
> Also, below you'll find comments for the LIST with the 
> following syntax:
> 
> <!-- LIST LOOK HERE:  ... -->
> 
> validate_base.xsl
> ========================================
> <xsl:stylesheet 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
> 	xmlns:sd="http://ade.az.gov/studentdetail"
> 	xmlns:dt="urn:schemas-microsoft-com:xslt">
> 	
> <xsl:output method="xml" encoding="UTF-8"/>
> <xsl:param name="STEP">1</xsl:param>
> 
> <!-- copy root -->
> 	<xsl:variable name="CURRENT" select="/"/>
> 	
> <!-- global lookups -->
> 	<xsl:variable name="TRACE" 
> select="/root/StudentDetail/@Trace" />
> 	<xsl:variable name="VERBOSE">
> 		<xsl:choose>
> 		<xsl:when 
> test="string(/root/StudentDetail/@Verbose)"><xsl:value-of
> select="/root/StudentDetail/@Verbose" /></xsl:when>
> 		<xsl:otherwise>1</xsl:otherwise>
> 		</xsl:choose>
> 	</xsl:variable>
> 	<xsl:variable name="FISCAL_YEAR" 
> select="/root/StudentDetail/@FiscalYear" />
> 	<xsl:variable name="REGULAR_AZ_COUNTIES"
> select="$sd_lookups//recordset[@rsName='Counties']/record[fiel
> d[@fieldname='regular-az-county']
> = '1']" />
> 	<xsl:variable name="PUBLIC_REFTYPES"
> select="$sd_lookups//recordset[@rsName='RefTypes']/record[fiel
> d[@fieldname='DOR-Type']='PUBLIC']/field[@fieldname='RefTypeID']"/>
> 	<xsl:variable name="CHARTER_REFTYPES"
> select="$sd_lookups//recordset[@rsName='RefTypes']/record[fiel
> d[@fieldname='DOR-Type']='CHARTER']/field[@fieldname='RefTypeID']"/>
> 	<xsl:variable name="NEEDS"
> select="$sd_lookups//recordset[@rsName='NeedCodes']/record/fie
> ld[@fieldname='NeedCode']"/>
> 
> <!-- global constants -->
> 	<xsl:variable name="REFTYPE_ACCOMMODATION">1029</xsl:variable>
> 	<xsl:variable name="COUNTYTYPE_OUTOFSTATE">353</xsl:variable>
> 	<xsl:variable 
> name="ACCOMMODATION">01</xsl:variable><!-- this is the
> "T" value of CTDS -->
> 	<xsl:variable name="ELEMENTARY">04</xsl:variable><!-- 
> this is the "T"
> value of CTDS -->
> 	<xsl:variable name="HIGHSCHOOL">05</xsl:variable><!-- 
> this is the "T"
> value of CTDS -->
> 	<xsl:variable 
> name="D_LEVEL_ACCOMMODATION">00</xsl:variable><!-- this
> is the "D" value of CTDS -->
> 
> <!-- LIST LOOK HERE:  this is the global variable which loses 
> scope -->
> 	<xsl:variable name="MAX_DATE">
> 		<xsl:call-template name="CreateNewDate">
> 			<xsl:with-param name="start_year" 
> select="$FISCAL_YEAR" />
> 			<xsl:with-param 
> name="start_month">06</xsl:with-param>
> 			<xsl:with-param 
> name="start_day">30</xsl:with-param>
> 		</xsl:call-template>
> 	</xsl:variable>
> 	
> 	<!-- DOA -->
> 	<xsl:variable name="DOA_REFTYPE"
> select="root/recordset[@rsName='EntityOwnerInfo']/record/field
> [@fieldname='RefTypeID']"
> />
> 	<xsl:variable name="DOA_ENTITYID"
> select="root/recordset[@rsName='EntityOwnerInfo']/record/field
> [@fieldname='EntityID']"
> />
> 	<xsl:variable name="DOA_CTDS"
> select="root/recordset[@rsName='EntityOwnerInfo']/record/field
> [@fieldname='CTDS']"
> />
> 	<xsl:variable name="DOA_COUNTY"
> select="root/recordset[@rsName='EntityOwnerInfo']/record/field
> [@fieldname='RefCountyID']"
> />
> 
> 	<!-- ENTITY -->
> 	<xsl:variable name="ENTITY_NATURE"
> select="root/recordset[@rsName='EntityInfo']/record/field[@fie
> ldname='Nature']"
> />
> 	<xsl:variable name="ENTITY_REFTYPE"
> select="root/recordset[@rsName='EntityInfo']/record/field[@fie
> ldname='RefTypeID']"
> />
> 	<xsl:variable name="ENTITY_ENTITYID"
> select="root/recordset[@rsName='EntityInfo']/record/field[@fie
> ldname='EntityID']"
> />
> 	<xsl:variable name="ENTITY_CTDS"
> select="root/recordset[@rsName='EntityInfo']/record/field[@fie
> ldname='CTDS']"
> />
> 	<xsl:variable name="ENTITY_COUNTY"
> select="root/recordset[@rsName='EntityInfo']/record/field[@fie
> ldname='RefCountyID']"
> />
> 
> <!-- 
> 	resulting xml source should resemble
>     	<results>
>         	<result rule="name of rule" pass="1 | 0"  1 = 
> pass, 2 = fail
> | non-existent may not be tested">
>             	
>             </result>
>         </results>
> 		
> -->
> 
> 
> <xsl:template match="/">
> 	<xsl:element name="results">
> 	
> 	<xsl:choose>
> 		<xsl:when test="$STEP=1">
> 
> <!-- LIST LOOK HERE:  this is the default step to follow (and only
> implemented step so far) -->
> 			<xsl:call-template name="STEP_1"/>		
> 			
> 		</xsl:when>
> 	<!-- .. code removed -->
> 
> 	</xsl:choose>
> 	
> 	</xsl:element>	
> </xsl:template>
> 
> 	<!-- .. code removed -->
> 
> <xsl:template name="calculatestudentage">
> 	<xsl:param name="student_dob"/>
> 	<xsl:param name="date_of_occurrence"/>
> 	
> 	<xsl:choose>
> 		<xsl:when test="not(string($student_dob)) or
> not(string($date_of_occurrence))">
> 			<xsl:text>-1</xsl:text>
> 		</xsl:when>
> 		<xsl:otherwise>
> 			<xsl:variable name="Yr1" 
> select="dt:format-date($student_dob,'yyyy')"/>
> 			<xsl:variable name="Yr2"
> select="dt:format-date($date_of_occurrence,'yyyy')"/>
> 			<xsl:variable name="MoDa1"
> select="concat(dt:format-date($student_dob,'MM'),dt:format-dat
> e($student_dob,'dd'))"/>
> 			<xsl:variable name="MoDa2"
> select="concat(dt:format-date($date_of_occurrence,'MM'),dt:for
> mat-date($date_of_occurrence,'dd'))"/>
> 
> 			<!-- year diff calculation -->
> 			<xsl:variable name="sYrDiff" 
> select="$Yr2 - $Yr1"/>
> 			
> 			<!-- final age calculation consider 
> month and day of birth -->
> 			<xsl:variable name="student_age">
> 				<xsl:choose>
> 					<xsl:when test="$MoDa1 
> &gt; $MoDa2">
> 						<xsl:value-of 
> select="$sYrDiff - 1"/>
> 					</xsl:when>
> 					<xsl:otherwise>
> 						<xsl:value-of 
> select="$sYrDiff"/>
> 					</xsl:otherwise>
> 				</xsl:choose>
> 			</xsl:variable>
> 		
> 		<!-- return result -->
> 			<xsl:value-of select="$student_age"/>
> 		</xsl:otherwise>
> 	</xsl:choose>
> </xsl:template>
> 
> <!-- LIST LOOK HERE:  if you stumble upon this, I could use help with
> a better date adder function : ) -->
> <xsl:template name="fn_date_add">
> 	<xsl:param name="current_date"/>
> 	<xsl:param name="days"/>
> 	
> 	<xsl:variable name="Yr" 
> select="dt:format-date($current_date,'yyyy')"/>
> 	<xsl:variable name="Mo" 
> select="dt:format-date($current_date,'MM')"/>
> 	<xsl:variable name="Da"
> select="number(dt:format-date($current_date,'dd')) + $days"/>
> 	
> 	<xsl:value-of select="concat($Yr, '-', $Mo, '-', $Da)"/>
> 	
> </xsl:template>
> 
> 
> 
> </xsl:stylesheet>
> ========================================
> 
> validate_sped.xsl
> ========================================
> <xsl:stylesheet 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
> 	xmlns:sd="http://ade.az.gov/studentdetail"
> 	xmlns:fx="urn:schemas-microsoft-com:xslt">
> 	
> 	<xsl:import href="../../ValidationTemplates/validate_base.xsl"/>
> 
> <!-- LIST LOOK HERE:  this is the included file which references
> MAX_DATE, look below for execution/flow -->
> 	<xsl:include href="SPED/fn_Concurrency.xsl"/>
> 	
> 	
> 	<!-- <xsl:include 
> href="SupportPrograms/incl_JohnsonOMalley.xsl" /> -->
> 
> 	<xsl:include href="SPED/incl_DistrictOfAttendance.xsl"/>
> 	<xsl:include href="SPED/incl_SchoolLevelCheck.xsl"/>
> 	<xsl:include href="SPED/incl_DistrictOfResidence.xsl"/>
> 	<xsl:include href="SPED/incl_CED-DOA-DOR.xsl"/>
> 	<xsl:include href="SPED/incl_SPEDServiceCode.xsl"/>
> 	<xsl:include href="SPED/incl_NeedCodes.xsl"/>
> 
> 	<xsl:include href="SPED/incl_ArizonaSchoolDeafBlind.xsl"/>
> 	<xsl:include href="SPED/incl_SPEDDors.xsl"/>
> 
> <!-- LIST LOOK HERE:  this is the included file which call the above
> included file and eventually has trouble with MAX_DATE -->
> 	<xsl:include href="SPED/incl_GradeAge.xsl"/>
> 
> 	<xsl:include href="SPED/incl_OverlappingServicesForSPED.xsl"/>
> 	<xsl:include href="SPED/incl_SPEDMultiGradeService.xsl"/>
> 	<xsl:include href="SPED/incl_SPEDExitReason.xsl"/>
> 	<xsl:include href="SPED/incl_SynchronizeSpedGrade.xsl"/>
> 
> 	<xsl:variable name="sd_rules" 
> select="document('SPED/SPED_rules.xml')"/>
> 	<xsl:variable name="sd_lookups" 
> select="document('SPED/SPED_lookups.xml')"/>
> 	<xsl:variable name="sd_matrix" 
> select="document('SPED/SPED_matrix.xml')"/>
> 
> <!-- 
> SPED INTEGRITY VALIDATION 
> 
> -->
> 
> <xsl:template name="STEP_1">
> <!-- LIST LOOK HERE:  entry template rule called from 
> validate_base.xsl -->
> 
> 
> 	<!-- TODO's -->
> 		<xsl:element name="TODO">3.1.9 CTD's 000400 and 
> 000500 not valid</xsl:element>
> 		<xsl:element name="TODO">3.1 (10) Each school 
> approved to teach
> student grade</xsl:element>
> 		<xsl:element name="NOT_IMPLEMENTED">Rule 
> 3.1.12.12 pending business
> rule analysis</xsl:element>
> 
> 
> 	<!-- 
> 		Rule 3.1
> 		Student Counts Needs Rules	-->
> 			
> 			<!-- 3. District of Attendance -->
> 			<!-- 4. School -->
> 			<!-- 5. District of Residence -->
> 			<!-- 6. CEC/DOA/DOR Valid -->
> 			<!-- 7, 8 -->
> 			<!-- 11. SPED Service Code -->
> 			<!-- 12. Valid Need Code characteristics -->
> 			<!-- 13, 14, 15 -->
> 			<!-- 16 -->
> 
> <!-- LIST LOOK HERE:  this is the call to incl_GradeAge.xsl -->
> 			<!-- 17. Age -->
> 					<xsl:call-template 
> name="GradeAge"/>
> 			
> 	<!-- 
> 		Rule 3.2
> 		SPED DORs	-->
> 	<!-- 
> 		Rule 3.3
> 		Overlapping Services for a SPED Need	-->
> 	<!-- 
> 		Rule 3.4
> 		Multiple Grades or Services	-->
> 	<!-- 
> 		Rule 3.5
> 		Initial IEP	
> 	<!-- 
> 		Rule 3.6
> 		SPED Exit Reason/Age/Grade Validation	-->	
> 				
> 	<!-- 
> 		Rule 3.7
> 		Synchronize SPED Grade / Membership Grade	-->
> 				
> </xsl:template>
> 
> </xsl:stylesheet>
> ========================================
> 
> incl_GradeAge.xsl
> ========================================
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0" xmlns:sd="http://ade.az.gov/studentdetail"
> 	xmlns:fx="urn:schemas-microsoft-com:xslt"
> 	xmlns:fn="urn:function-element-results"
> 	exclude-result-prefixes="sd fx fn">	
> 	
> 	<xsl:variable name="DORExceptions"
> select="$sd_lookups//recordset[@rsName='RefTypes']/record[fiel
> d[@fieldname='validates-GradeDOR']='1']/field[@fieldname='RefTypeID']"
> />
> 	<xsl:variable name="SPEDDor"
> select="/root/recordset[@rsName='SPEDDor']/record[field[@field
> name='ResidenceRefTypeID'
> and not(.= $DORExceptions)]]" />
> 	<xsl:variable name="AllowedGradeID"
> select="$sd_lookups//recordset[@rsName='GradeLookup']/record[f
> ield[@fieldname='Grade'
> and (.= 'KG' or .= 'PS' or .= 'UE')]]/field[@fieldname='GradeID']" />
> 	<xsl:variable name="UE_Grade_ID"
> select="$sd_lookups//recordset[@rsName='GradeLookup']/record[f
> ield[@fieldname='Grade']
> = 'UE']/field[@fieldname='GradeID']" />
> 	<xsl:variable name="PS_Grade_ID"
> select="$sd_lookups//recordset[@rsName='GradeLookup']/record[f
> ield[@fieldname='Grade']
> = 'PS']/field[@fieldname='GradeID']" />
> 	<xsl:variable name="Group_B_Need_Codes"
> select="$sd_lookups//recordset[@rsName='NeedCodes']/record[fie
> ld[@fieldname='validates-GradeAge']='1']/field[@fieldname='NeedCode']"
> />
> 	<xsl:variable name="KG_Grade_ID"
> select="$sd_lookups//recordset[@rsName='GradeLookup']/record[f
> ield[@fieldname='Grade']
> = 'KG']/field[@fieldname='GradeID']" />
> 
> <!-- LIST LOOK HERE:  this variable is a result of this call-template
> in fn_Concurrency.xsl and is the template which has trouble with the
> MAX_DATE global -->
> 	<xsl:variable name="Group_B_Needs">			
> 		<xsl:call-template name="get_needs2">
> 			<xsl:with-param name="need_code_match" 
> select="$Group_B_Need_Codes" />
> 			<xsl:with-param 
> name="SORTBYNEEDID">0</xsl:with-param>
> 		</xsl:call-template>
> 	</xsl:variable>		
> 
> 	<xsl:template name="GradeAge">
> <!-- LIST LOOK HERE:  entry template rule called from 
> validate_sped.xsl -->
> 	
> <!-- .. code removed .. -->
> 
> 		<!-- Rule: 3.1.17.5
> [field[@fieldname='NeedCode']=$Group_B_Need_Codes/field[@field
> name='NeedCode']]-->
> 	<xsl:element name="NOT_IMPLEMENTED">Complex rule - 
> 3.1.17.5: SPED
> Grade UE &amp; Group B</xsl:element>
> 	<!-- skip if student doesn't not have a Grade of UE -->
> 	<xsl:variable name="recent_membership"
> select="/root/recordset[@rsName='SchoolMemberships']/record[la
> st()]/field[@fieldname='Id']"
> />
> 	<xsl:if 
> test="/root/recordset[@rsName='Grades']/record[field[@fieldnam
> e='SchoolMembershipID']=$recent_membership]/field[@fieldname='
> RefGradeID']=
> $UE_Grade_ID">
> 		<xsl:call-template name="SPEDUEorKG" />
> 	</xsl:if>
> 
> <!-- .. code removed .. -->
> 
> 	</xsl:template>
> 
> 
> <!-- .. code removed .. -->
> 
> 
> 
> </xsl:stylesheet>
> ========================================
> 
> ..end of code
> 
> 
> 
> On 5/11/05, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> > >
> > > I could post actual code, it's a lot though.
> > 
> > That's why I asked you to cut it down.
> > 
> > Sometimes this not only makes it easier for other people to 
> find your
> > problem, it makes it easier for you to find it too.
> > 
> > Michael Kay
> > http://www.saxonica.com/
> > 
> > >
> > > On 5/11/05, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> > > > Perhaps you could put together a simple 3-module example
> > > that illustrates
> > > > the problem.
> > > >
> > > > From what you've shown us, it looks as if the variable
> > > should be in scope.
> > > > Once we've seen and checked your code, the next question is
> > > which processor
> > > > you are using.
> > > >
> > > > Michael Kay
> > > > http://www.saxonica.com/
> > > >
> > > > > -----Original Message-----
> > > > > From: Karl Stubsjoen [mailto:kstubs@xxxxxxxxx]
> > > > > Sent: 11 May 2005 17:38
> > > > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > > > > Subject:  Variable Scope
> > > > >
> > > > > Hello,
> > > > >
> > > > > So far I have not ran into any troubles with variable
> > > scope, and I am
> > > > > refering to globabl variable scope - variables defined
> > > within my base
> > > > > template.  I am having trouble now with a MAX_DATE 
> variable I have
> > > > > defined.  So, I am wondering about execution plan and 
> where/when
> > > > > variables are available.  Given the following
> > > inclusiong/import plan I
> > > > > will attempt to describe where it appears that
> > > MAX_DATE(s) scope is
> > > > > out-of-scope.
> > > > >
> > > > > base_template.xsl
> > > > >   MAX_DATE is defined (see definition below)
> > > > >
> > > > > working_template_a.xsl
> > > > >   {imports} base_template
> > > > >   {includes} working_template_b.xsl
> > > > >   {includes} working_template_c.xsl
> > > > >   {includes} working_template_d.xsl
> > > > >   {includes} ... additional working templates ..
> > > > >
> > > > > MAX_DATE inside of any template definition inside of any
> > > included file
> > > > > above is fine.  MAX_DATE used as part of a variable
> > > definition at the
> > > > > top (outside a template rule) of any of these include
> > > files throws the
> > > > > error:  "The variable or param MAX_DATE is either not
> > > defined or it is
> > > > > out of scope".
> > > > >
> > > > > Any ideas on this?
> > > > >
> > > > >
> > > > > Note:  CreateNewDate template is defined in base_template.xsl
> > > > > <xsl:variable name="MAX_DATE">
> > > > > <xsl:call-template name="CreateNewDate">
> > > > >   <xsl:with-param name="start_year" select="$FISCAL_YEAR" />
> > > > >   <xsl:with-param name="start_month">06</xsl:with-param>
> > > > >   <xsl:with-param name="start_day">30</xsl:with-param>
> > > > > </xsl:call-template>
> > > > > </xsl:variable>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.