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

Re: Variable Scope

Subject: Re: Variable Scope
From: Karl Stubsjoen <kstubs@xxxxxxxxx>
Date: Wed, 11 May 2005 13:12:07 -0700
xsl include 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[field[@fieldname='r
egular-az-county']
= '1']" />
	<xsl:variable name="PUBLIC_REFTYPES"
select="$sd_lookups//recordset[@rsName='RefTypes']/record[field[@fieldname='D
OR-Type']='PUBLIC']/field[@fieldname='RefTypeID']"/>
	<xsl:variable name="CHARTER_REFTYPES"
select="$sd_lookups//recordset[@rsName='RefTypes']/record[field[@fieldname='D
OR-Type']='CHARTER']/field[@fieldname='RefTypeID']"/>
	<xsl:variable name="NEEDS"
select="$sd_lookups//recordset[@rsName='NeedCodes']/record/field[@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='Re
fTypeID']"
/>
	<xsl:variable name="DOA_ENTITYID"
select="root/recordset[@rsName='EntityOwnerInfo']/record/field[@fieldname='En
tityID']"
/>
	<xsl:variable name="DOA_CTDS"
select="root/recordset[@rsName='EntityOwnerInfo']/record/field[@fieldname='CT
DS']"
/>
	<xsl:variable name="DOA_COUNTY"
select="root/recordset[@rsName='EntityOwnerInfo']/record/field[@fieldname='Re
fCountyID']"
/>

	<!-- ENTITY -->
	<xsl:variable name="ENTITY_NATURE"
select="root/recordset[@rsName='EntityInfo']/record/field[@fieldname='Nature'
]"
/>
	<xsl:variable name="ENTITY_REFTYPE"
select="root/recordset[@rsName='EntityInfo']/record/field[@fieldname='RefType
ID']"
/>
	<xsl:variable name="ENTITY_ENTITYID"
select="root/recordset[@rsName='EntityInfo']/record/field[@fieldname='EntityI
D']"
/>
	<xsl:variable name="ENTITY_CTDS"
select="root/recordset[@rsName='EntityInfo']/record/field[@fieldname='CTDS']"
/>
	<xsl:variable name="ENTITY_COUNTY"
select="root/recordset[@rsName='EntityInfo']/record/field[@fieldname='RefCoun
tyID']"
/>

<!--
	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-date($student_dob,
'dd'))"/>
			<xsl:variable name="MoDa2"
select="concat(dt:format-date($date_of_occurrence,'MM'),dt:format-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[field[@fieldname='v
alidates-GradeDOR']='1']/field[@fieldname='RefTypeID']"
/>
	<xsl:variable name="SPEDDor"
select="/root/recordset[@rsName='SPEDDor']/record[field[@fieldname='Residence
RefTypeID'
and not(.= $DORExceptions)]]" />
	<xsl:variable name="AllowedGradeID"
select="$sd_lookups//recordset[@rsName='GradeLookup']/record[field[@fieldname
='Grade'
and (.= 'KG' or .= 'PS' or .= 'UE')]]/field[@fieldname='GradeID']" />
	<xsl:variable name="UE_Grade_ID"
select="$sd_lookups//recordset[@rsName='GradeLookup']/record[field[@fieldname
='Grade']
= 'UE']/field[@fieldname='GradeID']" />
	<xsl:variable name="PS_Grade_ID"
select="$sd_lookups//recordset[@rsName='GradeLookup']/record[field[@fieldname
='Grade']
= 'PS']/field[@fieldname='GradeID']" />
	<xsl:variable name="Group_B_Need_Codes"
select="$sd_lookups//recordset[@rsName='NeedCodes']/record[field[@fieldname='
validates-GradeAge']='1']/field[@fieldname='NeedCode']"
/>
	<xsl:variable name="KG_Grade_ID"
select="$sd_lookups//recordset[@rsName='GradeLookup']/record[field[@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[@fieldname='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[last()]/field[@fi
eldname='Id']"
/>
	<xsl:if
test="/root/recordset[@rsName='Grades']/record[field[@fieldname='SchoolMember
shipID']=$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.