Subject: Re: Variable Scope
From: Karl Stubsjoen <kstubs@xxxxxxxxx>
Date: Tue, 17 May 2005 09:36:51 -0700
|
The exact error is:
Variable or Param is not defined or is out of scope.
On 5/12/05, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> 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
> > > $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 & 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>
|