Subject: RE: [xsl] Variable Scope From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 12 May 2005 08:34:03 +0100 |
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: [xsl] 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: [xsl] 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Variable Scope, Karl Stubsjoen | Thread | Re: [xsl] Variable Scope, Karl Stubsjoen |
RE: [xsl] Fwd: New line character p, Aron Bock | Date | RE: [xsl] compare two unicode varia, Michael Kay |
Month |