<xsl:variable name="g_ndstemplatedoc" select="document($g_strhtmltemplatename)"/>

Size: px
Start display at page:

Download "<xsl:variable name="g_ndstemplatedoc" select="document($g_strhtmltemplatename)"/>"

Transcription

1 Downloaded from: justpaste.it/hy9p <xsl:stylesheet xmlns:xsl=" version="1.0" xmlns=" xmlns:xhtml=" xmlns:ceg=" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:local="#local-functions" xmlns:xgo=" exclude-result-prefixes="xhtml msxsl local"> <xsl:variable name="g_ndstemplatedoc" select="document($g_strhtmltemplatename)"/> <!-- Self-reference to document being processed --> <xsl:variable name="g_ndsmaindoc" select="."/> <xsl:variable name="g_ndscontainer" = 'DocContainer']"/> <xsl:variable name="g_strdoccontainerfirstid" select="generate-id($g_ndscontainer/*[1])"/> <xsl:variable name="g_ndspis" select=" <xsl:variable name="g_ndsstylecss" select="$g_ndsmaindoc/xhtml:html/xhtml:head/xhtml:style"/> <xsl:variable name="g_stroutputfolder"> <xsl:variable name="strfolder" select="normalize-space(substring-before(substringafter($g_ndspis[name() = 'output'], 'folderpath='), 'filename'))"/> <xsl:variable name="strfoldertidy" select="substring($strfolder, 2)"/> <xsl:value-of select="substring($strfoldertidy, 1, string-length($strfoldertidy) - 1)"/> <xsl:variable name="g_stroutputfilename"> <xsl:variable name="strfilename" select="substring(substring-after($g_ndspis[name() = 'output'], 'filename='), 2)"/> <xsl:value-of select="substring($strfilename, 1, string-length($strfilename) - 1)"/> <!-- Retrieve the filename of the original XML file --> <xsl:variable name="g_strsourcexmlfilename"> <xsl:variable name="strfilename" select="substring(substring-after($g_ndspis[name() = 'source'], 'filename='), 2)"/> <xsl:value-of select="substring($strfilename, 1, string-length($strfilename) - 1)"/>

2 <!-- Retrieve the main class original XML file --> <xsl:variable name="g_strsourcexmlclass"> <xsl:variable name="strclass" select="substring(substring-after($g_ndspis[name() = 'class'], 'class='), 2)"/> <xsl:value-of select="substring($strclass, 1, string-length($strclass) - 1)"/> <xsl:variable name="g_strchunkfilename" select="substring-before($g_stroutputfilename, '.htm')"/> <xsl:variable name="g_strfilenameconvention"> <xsl:variable name="strfilename" select="substring(substring-after($g_ndspis[name() = 'filename'], 'convention='), 2)"/> <xsl:value-of select="substring($strfilename, 1, string-length($strfilename) - 1)"/> <xsl:variable name="g_strwebsite" select="$g_ndsfoldermapdoc/folderstructure/folder[1]/@name" /> <xsl:variable name="g_strchunkxmlfilename" select="concat($g_ndslegisconfigdoc//path[@type = 'linkmapping']/@href, '/', $g_strchunkfilename, '_', $g_strwebsite, '_chunk.xml')" /> <!-- Calculate the number of chunks that will be generated --> <xsl:variable name="g_intnumberofchunks"> <xsl:call-template name="funccountchunks"> <xsl:with-param name="strelementid" select="$g_strdoccontainerfirstid"/> <xsl:variable name="g_ndsheadingsresulttree"> <headings xmlns=" <xsl:call-template name="funcprocessheadings"> <xsl:with-param name="strelementid" select="$g_strdoccontainerfirstid"/> </headings> <xsl:variable name="g_ndsheadings" select="msxsl:node-set($g_ndsheadingsresulttree)"/> <xsl:key name="keyheadings" match="tso:heading" use="@chunk"/> <!-- Calculate the chunk into which a link target will fall --> <xsl:variable name="g_ndslinktargetresulttree"> <links xmlns=" <xsl:call-template name="funcprocesslinkids"> <xsl:with-param name="strelementid" select="$g_strdoccontainerfirstid"/>

3 </links> <xsl:variable name="g_ndslinktargets" select="msxsl:nodeset($g_ndslinktargetresulttree)"/> <!-- Define key here to be used in a link context --> <xsl:key name="keylinktargets" match="tso:link" use="@id"/> <xsl:key name="keyaas" match="xhtml:acronym xhtml:abbr" use="."/> <!-- Calculate the chunk into which a correction will fall --> <xsl:variable name="g_ndscorrectionsinchunksresulttree"> <corrections xmlns=" <xsl:call-template name="funcprocesscorrections"> <xsl:with-param name="strelementid" select="$g_strdoccontainerfirstid"/> </corrections> <xsl:variable name="g_ndscorrectionsinchunks" select="msxsl:nodeset($g_ndscorrectionsinchunksresulttree)"/> <!-- Calculate which footnotes are referenced in each chunk --> <xsl:variable name="g_ndsfootnoterefsinchunksresulttree"> <footnotes xmlns=" <xsl:call-template name="funcgetfootnoterefsforeachchunk"> <xsl:with-param name="strelementid" select="$g_strdoccontainerfirstid"/> </footnotes> <xsl:variable name="g_ndsfootnoterefsinchunks" select="msxsl:nodeset($g_ndsfootnoterefsinchunksresulttree)"/> <!-- Define key here to be used in a footnote context by chunk --> <xsl:key name="keyfootnotechunks" match="tso:footnote" use="@chunk"/> <!-- Store the HTML footnotes for lookup --> <xsl:variable name="g_ndshtmlfootnotes" select="$g_ndsmaindoc//xhtml:div[@class = 'LegClearFix LegFootnote' and not(ancestor::xhtml:table)]"/> <!-- Index the entire document for chunk start points --> <xsl:key name="keynodes" match="node()" use="generate-id()"/> <!-- Index the entire document for anchor ids --> <xsl:key name="keyanchors" match="*[@id!= '']" use="@id"/>

4 <xsl:variable name="g_rtfnodesizes"> <nodes> <xsl:for-each select="$g_ndscontainer/*"> <node id="{generate-id()}" size="{ string-length( string(*[position() = 1])) }"></node> <!-- <node id="{generate-id()}" size="{local:getnodesize(.)}"></node> --> </nodes> <xsl:variable name="g_nstnodesizes" select="msxsl:node-set($g_rtfnodesizes)"/> <!-- Shorthand to reference chunk rules --> <xsl:variable name="g_ndschunkinglogicchunks" select="$g_ndschunkinglogic//tso:chunk"/> <xsl:variable name="g_ndschunkinglogiclookahead" select="$g_ndschunkinglogic//tso:lookaheadpoint"/> <xsl:variable name="g_strfilenameextension"> <xsl:if test="$g_ndslegisconfigdoc//usecontentnegotiation/@value!= 'yes'">.htm <!-- ========== Global Parameters ========== --> <!-- Define the minimum chunk size. This overrides the chunking logic where a class is 'yes'. Avoids very small chunks --> <xsl:param name="g_intminchunksize" select="10000"/> <!-- Define the optimum chunk size. Note footnotes do not get counted --> <xsl:param name="g_intmaxchunksize" select="60000"/> <!-- Define the maximum oversize that chunk look ahead can use --> <xsl:param name="g_intmaxchunklookaheadsize" select="2000"/> <!-- ========== Include any code from other modules ========== --> <!-- Include the utilities stylesheet. --> <xsl:include href="tso_legislation_xhtml_utilities.xslt"/> <!-- Include the utilities - date functions stylesheet. --> <xsl:include href="legislation_xhtml_utilities_dates.xslt"/> <!-- ========= JavaScript to do pattern matching for citations ========= --> <msxsl:script language="jscript" implements-prefix="local">

5 function GetText(objNode) { return objnode.item(0).xml; } function GetNodeSize(objNode) { return objnode.item(0).xml.length - 37; } <![CDATA[ function GetDate() { var thedate = new Date(); // create Date object with the current date; var strdate = ''; if (thedate.getdate() < 10) { strdate = '0'; } strdate += thedate.getdate() + '/'; if (thedate.getmonth() + 1 < 10) { strdate += '0'; } strdate += (thedate.getmonth() + 1) + '/' + thedate.getfullyear(); return strdate; } ]]> </msxsl:script> <!-- ========== Main code ========== --> <xsl:template match="/"> <xsl:if test="not($g_ndslegisconfigdoc//path[@type = 'images'])"> <xsl:message terminate="yes">configuration file is missing images path</xsl:message> <xsl:if test="not($g_ndslegisconfigdoc//path[@type = 'CSS'])"> <xsl:message terminate="yes">configuration file is missing CSS path</xsl:message> <xsl:text>sakthivel1 srat here</xsl:text> <xsl:call-template name="funcprocesschunks"> <xsl:with-param name="strelementid" select="generate-id($g_ndscontainer/*[1])"/> <!-- This calculates the total number of chunks that this file will make. Allows for an 'End' button on the navigation to get to the last chunk --> <xsl:template name="funccountchunks"> <xsl:param name="strelementid"/> <xsl:param name="intchunknumber" select="1"/> <xsl:variable name="strnewid">

6 <xsl:message>sakthivel1</xsl:message><xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'id'"/> <xsl:when test="$strnewid!= ''"> <xsl:message>sakthivel2</xsl:message><xsl:call-template name="funccountchunks"> <xsl:with-param name="strelementid" select="$strnewid"/> <xsl:with-param name="intchunknumber" select="$intchunknumber + 1"/> <xsl:value-of select="$intchunknumber"/> <!-- Generate a list of headings and the chunk into which they fall --> <xsl:template name="funcprocessheadings"> <xsl:param name="strelementid"/> <xsl:param name="intchunknumber" select="1"/> <xsl:message>sakthivel3</xsl:message><xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'getheadings'"/> <xsl:variable name="strnewid"> <xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'id'"/> <xsl:if test="$strnewid!= ''"> <xsl:message>sakthivel4</xsl:message><xsl:call-template name="funcprocessheadings"> <xsl:with-param name="strelementid" select="$strnewid"/> <xsl:with-param name="intchunknumber" select="$intchunknumber + 1"/> <!-- Generate a list of ids and the chunk into which they fall --> <xsl:template name="funcprocesslinkids"> <xsl:param name="strelementid"/> <xsl:param name="intchunknumber" select="1"/> <xsl:message>sakthivel5</xsl:message><xsl:call-template name="funcprocesschunk">

7 <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'getid'"/> <xsl:variable name="strnewid"> <xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'id'"/> <xsl:if test="$strnewid!= ''"> <xsl:message>sakthivel6</xsl:message><xsl:call-template name="funcprocesslinkids"> <xsl:with-param name="strelementid" select="$strnewid"/> <xsl:with-param name="intchunknumber" select="$intchunknumber + 1"/> <!-- Generate a list of corrections and the chunk into which they fall --> <xsl:template name="funcprocesscorrections"> <xsl:param name="strelementid"/> <xsl:param name="intchunknumber" select="1"/> <xsl:message>sakthivel7</xsl:message><xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'corrections'"/> <xsl:variable name="strnewid"> <xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'id'"/> <xsl:if test="$strnewid!= ''"> <xsl:message>sakthivel8</xsl:message><xsl:call-template name="funcprocesscorrections"> <xsl:with-param name="strelementid" select="$strnewid"/> <xsl:with-param name="intchunknumber" select="$intchunknumber + 1"/> <xsl:template name="funcgetfootnoterefsforeachchunk"> <xsl:param name="strelementid"/> <xsl:param name="intchunknumber" select="1"/> <xsl:message>sakthivel9</xsl:message><xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/>

8 <xsl:with-param name="strmode" select="'footnoterefs'"/> <xsl:variable name="strnewid"> <xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'id'"/> <xsl:if test="$strnewid!= ''"> <xsl:call-template name="funcgetfootnoterefsforeachchunk"> <xsl:with-param name="strelementid" select="$strnewid"/> <xsl:with-param name="intchunknumber" select="$intchunknumber + 1"/> <!-- Process chunks. To avoid recursion problems we output a chunk and then calculate the ID of the next chunk before calling this routine again and using the ID to change the context --> <xsl:template name="funcprocesschunks"> <xsl:param name="strelementid"/> <xsl:param name="intchunknumber" select="1"/> <xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'output'"/> <xsl:variable name="strnewid"> <xsl:call-template name="funcprocesschunk"> <xsl:with-param name="strelementid" select="$strelementid"/> <xsl:with-param name="strmode" select="'id'"/> <xsl:when test="$strnewid = ''"> <chunk location="fixed({$g_strchunkxmlfilename})"> <xsl:copy-of select="$g_ndslinktargetresulttree" /> </chunk> <xsl:call-template name="funcprocesschunks"> <xsl:with-param name="strelementid" select="$strnewid"/> <xsl:with-param name="intchunknumber" select="$intchunknumber + 1"/>

9 <xsl:template name="funcprocesschunk"> <xsl:param name="strelementid"/> <xsl:param name="strmode"/> <xsl:param name="intchunknumber"/> <xsl:for-each select="key('keynodes', $strelementid)"> <xsl:when test="$strmode = 'Output'"> <xsl:variable name="strchunknumbertexttooutput"> <xsl:call-template name="funcgetoutputchunknumbertext"> <chunk location="{$g_stroutputfolder}{$g_strchunkfilename}{$strchunknumbertexttooutput}.htm" > <xsl:call-template name="funcoutputchunk"> <xsl:with-param name="strmode" select="$strmode"/> </chunk> <!-- Get contents into separate chunk --> <chunk location="{$g_stroutputfolder}{$g_strchunkfilename}{$strchunknumbertexttooutput}_cont ent.htm"> <xsl:variable name="rtfcontent"> <html xmlns=" <xsl:call-template name="funcoutputchunkcontents"> <xsl:with-param name="strmode" select="$strmode"/> <!-- Here is the problem --> </html> <xsl:variable name="nstcontent" select="msxsl:node-set($rtfcontent)"/> <xsl:apply-templates select="$nstcontent/xhtml:html/*" mode="tsoremoveallbutfirstaa"/> </chunk> <xsl:call-template name="funcprocesschunkcontents"> <xsl:with-param name="strmode" select="$strmode"/> <!-- Here is the problem -->

10 <xsl:template match="node()" mode="tsoremoveallbutfirstaa"> <!-- In addtition to deduping AAs we will move any anchor ids onto 'real' elements where possible --> <xsl:when test="self::xhtml:a[not(node()) and and followingsibling::node()[not(self::comment())][1][not(self::xhtml:a) and <xsl:when test="preceding-sibling::node()[not(self::comment())][1][self::xhtml:a and and not(node())] and <xsl:copy> <xsl:copy-of <xsl:attribute name="id"> <xsl:value-of </xsl:attribute> <xsl:apply-templates mode="tsoremoveallbutfirstaa"/> </xsl:copy> <xsl:when test="self::xhtml:img or self::xhtml:meta"> <xsl:copy> <xsl:copy-of </xsl:copy> <xsl:message>sakthivel19</xsl:message><xsl:copy> <xsl:copy-of <xsl:apply-templates mode="tsoremoveallbutfirstaa"/> </xsl:copy> <xsl:template match="xhtml:acronym xhtml:abbr" mode="tsoremoveallbutfirstaa"> <xsl:variable name="straa" select="."/> <xsl:when test="not(preceding-sibling::*[self::xhtml:acronym or self::xhtml:abbr][. = $straa]) and not(preceding::*[self::xhtml:acronym or self::xhtml:abbr][. = $straa])"> <xsl:copy-of select="."/> <xsl:copy-of select="node()"/> <!-- This contains the template code necessary for each chunk --> <xsl:template name="funcoutputchunk"> <xsl:param name="strmode"/>

11 <xsl:param name="intchunknumber"/> <xsl:text disable-output-escaping="yes"><!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <xsl:text disable-output-escaping="yes"><html lang="en" xml:lang="en" xmlns=" <!-- Get self-reference to current chunk --> <xsl:variable name="ndschunkdoc" select="."/> <xsl:for-each select="$g_ndstemplatedoc/xhtml:html"> <xsl:apply-templates> <xsl:with-param name="intchunknumber" select="$intchunknumber" /> <xsl:with-param name="ndschunkdoc" select="$ndschunkdoc"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> <xsl:text disable-output-escaping="yes"></html></xsl:text> <!-- This outputs the chunk contents into a separate file --> <xsl:template name="funcoutputchunkcontents"> <xsl:param name="strmode"/> <xsl:param name="intchunknumber"/> <!-- Get self-reference to current chunk --> <xsl:variable name="ndschunkdoc" select="."/> <xsl:call-template name="funcoutputchunkcontent"> <xsl:with-param name="intchunknumber" select="$intchunknumber" /> <xsl:with-param name="ndschunkdoc" select="$ndschunkdoc"/> <xsl:with-param name="strmode" select="$strmode"/> <!-- Replace template title with document title --> <xsl:template match="xhtml:head/xhtml:title"> <title> <!-- Set language to Welsh if necessary --> <xsl:if test="contains($g_strsourcexmlfilename, '_we.xml')"> <xsl:attribute name="lang">cy</xsl:attribute> <xsl:attribute name="xml:lang">cy</xsl:attribute> <xsl:apply-templates select="$g_ndsmaindoc/xhtml:html/xhtml:head/xhtml:title/node()"/> </title> <xsl:text> </xsl:text> <xsl:template name="funcoutputchunkcontent"> <xsl:param name="strmode"/> <xsl:param name="intchunknumber"/> <xsl:param name="ndschunkdoc"/> <div class="doccontainer"> <!-- Set language to Welsh if necessary -->

12 <xsl:if test="contains($g_strsourcexmlfilename, '_we.xml')"> <xsl:attribute name="lang">cy</xsl:attribute> <xsl:attribute name="xml:lang">cy</xsl:attribute> <xsl:for-each select="$ndschunkdoc"> <xsl:variable name="ndscurrentnode" select="."/> <!-- Set the breadcrumb trail --> <xsl:if test="$intchunknumber!= 1"> <xsl:for-each select="following-sibling::*[not(self::xhtml:a = 'LegNavigationHeading' = 'LegArticleRef' = 'LegArticleRefScottish' or startswith(@class, 'LegClearGroup') or starts-with(@class, 'LegClearPart') or starts-with(@class, 'LegClearChapter') or starts-with(@class, 'LegClearSchedule') or starts-with(@class, 'LegGroup') or starts-with(@class, 'LegPart') or starts-with(@class, 'LegChapter') or starts-with(@class, 'LegSchedule'))][1]"> <!-- Suppress breadcrumb if this class is first in chunk --> <xsl:when test="@class = 'LegExpNoteTitle'"/> <!-- If the first real thing in chunk is a breadcrumb trail use that --> <xsl:when test="@class = 'LegBreadcrumbTrailLink'"> <xsl:apply-templates select="." mode="breadcrumb"/> <xsl:apply-templates select="preceding-sibling::xhtml:p[@class = 'LegBreadcrumbTrailLink'][1]" mode="breadcrumbcontinued"/> --> <div class="legclearfix LegNavTopContainer"> <!-- Set the Current Page (chunk) numbering --> <p class="legnavpagetext" xml:lang="en" lang="en"> <xsl:text>page </xsl:text> <xsl:value-of select="$intchunknumber"/> <xsl:text> of </xsl:text> <xsl:value-of select="$g_intnumberofchunks"/> </p> <xsl:if test="$g_intnumberofchunks > 1"> <!-- Set the Chunk Navigation at the top of the screen, before the content is output. <xsl:call-template name="funcgetnavigationlinks"> <xsl:with-param name="strlocation" select="'top'"/> </div> <div class="legnavclear">

13 <!-- Used to clear some space at the top of the page below the nav bar --> <xsl:text> </xsl:text> </div> <xsl:text> </xsl:text> <div class="legcontent"> <xsl:text> </xsl:text> <xsl:call-template name="funcprocesschunkcontents"> <xsl:with-param name="strmode" select="$strmode"/> <!-- Before the Navigation Links are output for the bottom of the page, if there are any footnote references in this chunk, then the corresponding footnotes need to be included here --> <xsl:call-template name="funcprocessfootnotesinchunk"> <!-- Output any Correction Slip text for the processing instructions formatted in the first parse of the related code. --> <xsl:call-template name="funcprocesscorrectionslipsinchunk"> <xsl:text> </xsl:text> </div> <div class="legnavclear"> <!-- Used to clear some space at the top of the page below the nav bar --> <xsl:text> </xsl:text> </div> <!-- Output nav bar at bottom of page --> <xsl:if test="$g_intnumberofchunks > 1"> <div class="legclearfix LegNavBottomContainer"> <p class="legnavpagetext" xml:lang="en" lang="en"> <xsl:text>page </xsl:text> <xsl:value-of select="$intchunknumber"/> <xsl:text> of </xsl:text> <xsl:value-of select="$g_intnumberofchunks"/> </p> <xsl:call-template name="funcgetnavigationlinks"> <xsl:with-param name="strlocation" select="'bottom'"/> </div> </div> <xsl:text> </xsl:text>

14 <!-- Remove all the breadcrumb trail links as the those required will be output elsewhere --> <xsl:template = 'LegBreadcrumbTrailLink']"/> <!-- Output the breadcrumb trail as required --> <xsl:template = 'LegBreadcrumbTrailLink']" mode="breadcrumb"> <p class="legbreadcrumbtraillink"> <!-- Check last node as this may be '...' --> <xsl:for-each select="text()[following-sibling::xhtml:a and preceding-sibling::xhtml:a] xhtml:a"> <xsl:when test="self::xhtml:a"> <xsl:apply-templates select="."/> <xsl:if test="following-sibling::xhtml:a"> <xsl:text> continued</xsl:text> <xsl:value-of select="."/> </p> <xsl:template = 'LegBreadcrumbTrailLink']" mode="breadcrumbcontinued"> <p class="legbreadcrumbtraillink"> <!-- Check last node as this may be '...' --> <xsl:for-each select="text()[following-sibling::xhtml:a and preceding-sibling::xhtml:a] xhtml:a"> <xsl:when test="self::xhtml:a"> <xsl:apply-templates select="."/> <xsl:text> continued</xsl:text> <xsl:value-of select="."/> </p> <!-- Add in appropriate CSS file depending on whether processing primary or secondary legislation --> <xsl:template match="xhtml:style"> <style type="text/css" media="screen, print"> <xsl:copy-of select="node()"/>

15 <xsl:copy-of select="$g_ndsstylecss/node()"/> "</xsl:text> <xsl:value-of select="$g_strstylespath"/> <xsl:text>opsilegislation.css";</xsl:text> </style> <xsl:template name="funcgetoutputchunknumbertext"> <xsl:param name="intchunknumber"/> <xsl:text>_</xsl:text> <xsl:value-of select="$intchunknumber"/> <!-- Calculate previous and next buttons --> <xsl:template name="funcgetnavigationlinks"> <xsl:param name="intchunknumber"/> <xsl:param name="strlocation" select="'top'"/> <p class="legnavpreviousnext{$strlocation}" xml:lang="en" lang="en"> <xsl:if test="$intchunknumber > 1"> <xsl:variable name="strchunknumbertexttooutput"> <xsl:call-template name="funcgetoutputchunknumbertext"> <xsl:with-param name="intchunknumber" select="$intchunknumber - 1"/> <span> <xsl:if test="$intchunknumber > 1 and $intchunknumber < $g_intnumberofchunks"> <xsl:attribute name="class">legpreviouslink</xsl:attribute> <a href="{$g_strchunkfilename}{$strchunknumbertexttooutput}{$g_strfilenameextension}" rel="nofollow"> <xsl:text>previous</xsl:text> </a> <xsl:if test="$intchunknumber > 1 and $intchunknumber < $g_intnumberofchunks"> <xsl:text> </xsl:text> </span> <xsl:if test="$intchunknumber < $g_intnumberofchunks"> <span> <xsl:if test="$intchunknumber > 1 and $intchunknumber < $g_intnumberofchunks"> <xsl:attribute name="class">legnextlink</xsl:attribute> <xsl:if test="$intchunknumber > 1 and $intchunknumber < $g_intnumberofchunks"> <xsl:text> </xsl:text>

16 <a href="{$g_strchunkfilename}_{$intchunknumber + 1}{$g_strFilenameExtension}" rel="nofollow"> <xsl:text>next</xsl:text> </a> </span> </p> <p class="legnavtext{$strlocation}"> <!-- Get the correct link for the first chunk. --> <xsl:variable name="strfirstchunknumbertexttooutput"> <xsl:call-template name="funcgetoutputchunknumbertext"> <xsl:with-param name="intchunknumber" select="1"/> <span class="legfirstpage"> <a href="{$g_strchunkfilename}{$strfirstchunknumbertexttooutput}{$g_strfilenameextension} "> <xsl:text>first page</xsl:text> </a> </span> <xsl:text> </xsl:text> <!-- Chunking navigation to output each chunk number to navigate to the exact chunk. --> <xsl:call-template name="funcprocesschunknavigation"> <xsl:with-param name="intcurrentchunkoutput" select="$intchunknumber"/> <xsl:variable name="strlastchunknumbertexttooutput"> <xsl:call-template name="funcgetoutputchunknumbertext"> <xsl:with-param name="intchunknumber" select="$g_intnumberofchunks"/> <xsl:text> </xsl:text> <span class="leglastpage"> <a href="{$g_strchunkfilename}{$strlastchunknumbertexttooutput}{$g_strfilenameextension} "> <xsl:text>last page</xsl:text> </a> </span> </p> <xsl:template name="funcprocesschunknavigation"> <xsl:param name="intcurrentchunkoutput"/> <xsl:variable name="intmaxchunksforoutput" select="10"/>

17 <!-- Calculate the start chunk navigation index and the end chunk navigation index from the current chunk being output. --> <xsl:variable name="intstartchunk"> <xsl:when test="($intcurrentchunkoutput - $intmaxchunksforoutput) < 1">1 <xsl:value-of select="$intcurrentchunkoutput - $intmaxchunksforoutput"/> <xsl:variable name="intendchunk"> <xsl:when test="($intcurrentchunkoutput + $intmaxchunksforoutput) > $g_intnumberofchunks"> <xsl:value-of select="$g_intnumberofchunks"/> <xsl:value-of select="$intcurrentchunkoutput + $intmaxchunksforoutput"/> <xsl:call-template name="funcoutputchunknavigation"> <xsl:with-param name="intcurrentchunkbeingoutput" select="$intcurrentchunkoutput"/> <xsl:with-param name="intstartchunknumber" select="$intstartchunk"/> <xsl:with-param name="intendchunknumber" select="$intendchunk"/> <xsl:with-param name="intcurrentchunknumber" select="$intstartchunk"/> <xsl:template name="funcoutputchunknavigation"> <xsl:param name="intcurrentchunkbeingoutput"/> <xsl:param name="intstartchunknumber"/> <xsl:param name="intendchunknumber"/> <xsl:param name="intcurrentchunknumber"/> <xsl:if test="$intcurrentchunknumber < ($intendchunknumber + 1)"> <xsl:variable name="strchunknumbertexttooutput"> <xsl:call-template name="funcgetoutputchunknumbertext"> <xsl:with-param name="intchunknumber" select="$intcurrentchunknumber"/> <a href="{$g_strchunkfilename}{$strchunknumbertexttooutput}{$g_strfilenameextension}"> <xsl:if test="$intcurrentchunknumber = $intcurrentchunkbeingoutput"> <xsl:attribute name="class"> <xsl:text>legnavcurrentchunk</xsl:text> </xsl:attribute> <xsl:for-each select="$g_ndsheadings">

18 <xsl:variable name="ndsheadingsusingchunk" select="key('keyheadings', $intcurrentchunknumber)"/> <xsl:if test="$ndsheadingsusingchunk"> <xsl:attribute name="title"> <xsl:value-of <!-- If first and last headings are the same only output once --> <xsl:if <xsl:text>... </xsl:text> <xsl:value-of </xsl:attribute> <xsl:value-of select="$intcurrentchunknumber"/> </a> <xsl:if test="$intcurrentchunknumber < $intendchunknumber"> <xsl:text> </xsl:text> <xsl:call-template name="funcoutputchunknavigation"> <xsl:with-param name="intcurrentchunkbeingoutput" select="$intcurrentchunkbeingoutput"/> <xsl:with-param name="intstartchunknumber" select="$intstartchunknumber"/> <xsl:with-param name="intendchunknumber" select="$intendchunknumber"/> <xsl:with-param name="intcurrentchunknumber" select="$intcurrentchunknumber + 1"/> <xsl:template name="funcprocessfootnotesinchunk"> <xsl:param name="intchunknumber"/> <!-- For each first unique footnote reference in the chunk get the corresponding footnote --> <xsl:variable name="ndsfootnotestooutputresulttree"> <xsl:for-each select="$g_ndsfootnoterefsinchunks"> <xsl:variable name="ndsfootnotesfromkeyusingchunk" select="key('keyfootnotechunks', $intchunknumber)"/> <xsl:for-each select="$ndsfootnotesfromkeyusingchunk"> <xsl:variable name="strcurrentrefid" select="substring-after(., '#')"/> <xsl:if test="not(preceding-sibling::*[@chunk = $intchunknumber and substringafter(., '#') = $strcurrentrefid])"> <!-- Just get a copy as will be processed later --> <xsl:copy-of select="$g_ndshtmlfootnotes[@id = $strcurrentrefid]"/> <xsl:variable name="ndsfootnotestooutput" select="msxsl:nodeset($ndsfootnotestooutputresulttree)"/>

19 <xsl:if test="$ndsfootnotestooutput/*"> <div class="legfootnotes"> <xsl:text> </xsl:text> <div class="legclearfix LegFootnotesContainer"> <xsl:text> </xsl:text> <xsl:apply-templates select="$ndsfootnotestooutput/*"> </xsl:apply-templates> </div> </div> <xsl:text> </xsl:text> <xsl:template name="funcprocesscorrectionslipsinchunk"> <xsl:param name="intchunknumber"/> <xsl:variable name="rtfslips"> <xsl:for-each = 'start']"> <xsl:variable name="intstartchunk" <xsl:variable name="strtime" <xsl:variable name="strdate" <xsl:variable name="intendchunk" = $strtime = 'end']/@chunk"/> <xsl:if test="$intchunknumber >= $intstartchunk and $intchunknumber <= $intendchunk"> <p class="legcorrectionslip"> <xsl:text>amended by correction slip on </xsl:text> <xsl:call-template name="formatlongdate"> <xsl:with-param name="strinputdate" select="$strdate"/> </p> <xsl:variable name="nstslips" select="msxsl:node-set($rtfslips)"/> <xsl:if test="$nstslips/*"> <div class="legpicontainer"> <!-- Output and dedupe --> <xsl:copy-of select="$nstslips/*[not(. = preceding-sibling::*)]"/> </div> <xsl:text> </xsl:text>

20 <!-- Calculate how much HTML we would need to take in to avoid this element from forming a new chunk --> <!-- This is used to stop bad breaks and small amounts of text at the end of sections from breaking --> <xsl:template name="funcchunkinglookahead"> <xsl:param name="intlookaheadsize" select="0"/> <xsl:variable name="intnodesize"> <xsl:when test="self::processing-instruction('change') or self::xhtml:p[@class = 'LegBreadcrumbTrailLink' = 'LegNavigationHeading'] or self::xhtml:a"> <xsl:value-of select="0"/> <xsl:when test="self::text()"> <xsl:value-of select="string-length(.)"/> <xsl:value-of select="string-length( string(*[position() = 1]))"/> <!-- <xsl:value-of select="local:getnodesize(.)"/> --> <!--<xsl:value-of select="$g_nstnodesizes//*[@id = generate-id(current())]/@size"/>- -> <xsl:when test="$g_ndschunkinglogiclookahead[@name = current()/@class and (@childname = current()/*/@class = '')] or $intlookaheadsize > $g_intmaxchunklookaheadsize"> <xsl:value-of select="$intlookaheadsize"/> <xsl:for-each select="following-sibling::node()[1]"> <xsl:call-template name="funcchunkinglookahead"> <xsl:with-param name="intlookaheadsize" select="$intlookaheadsize + $intnodesize"/> <!-- Process each element at the top level and calculate the size. Keep a running count of the size of the chunk until we reach the maximum value, at which point either drop out or generate the ID which will be used to change the context for the next chunk --> <xsl:template name="funcprocesschunkcontents"> <xsl:param name="intchunksize" select="0"/> <xsl:param name="intchunknumber"/> <xsl:param name="strmode"/> <xsl:param name="stroutputtype"/> <xsl:param name="strprevioustype" select="''"/>

21 <xsl:param name="intnodesprocessed" select="0"/> <!-- Ensure that that any nodes that are going to be discarded are NOT included in the node sizing. Primarily the nodes that are to be discarded are: BreadcrumbTrail nodes and processing instructions. Additionally dont count anchor elements because the hrefs may differ between versions and that would mean different views may end up with different chunk breaks --> <xsl:variable name="intnodesize"> <xsl:when test="self::processing-instruction('change') or = 'LegBreadcrumbTrailLink' = 'LegNavigationHeading'] or self::xhtml:a"> <xsl:value-of select="0"/> <xsl:when test="self::text()"> <xsl:value-of select="string-length(.)"/> <xsl:value-of select="string-length( string(*[position() = 1]))"/> <!-- <xsl:value-of select="local:getnodesize(.)"/> --> <!--<xsl:value-of select="$g_nstnodesizes//*[@id = generate-id(current())]/@size"/>- -> <!--<xsl:comment> <xsl:value-of select="$intnodesize"/>... <xsl:value-of select="local:gettext(.)"/> </xsl:comment>--> <xsl:variable name="ndscurrentnode" select="."/> <!-- If the CSS class should force a new chunk then strdochunk will hold the value 'Chunk' - -> <xsl:variable name="strdochunk"> <!-- Dont chunk on white space nodes (or technically nodes with no class) --> <!-- Also we need to be careful to try and keep correction slip PIs in the correct chunk. Therefore end PIs at the end of a chunk will not be allowed to chunk. For start PIs they will be treated as keepwithnext to ensure they go onto the next chunk. (There is the danger where a start PI directly precedes an end PI on a chunk border but that is VERY unlikely --> <xsl:when test="self::processing-instruction('change')[contains(., 'start')] = ''"> <xsl:variable name="intkeeptotal"> <xsl:for-each select="$ndscurrentnode"> <xsl:call-template name="funccalckeeptotal"> <xsl:with-param name="intchunksize" select="$intchunksize + $intnodesize"/>

22 <xsl:if test="$intkeeptotal > $g_intmaxchunksize and $strprevioustype!= 'keepwithnext'">chunk <xsl:when test="self::processing-instruction('change')[contains(., 'end')] = ''">NoChunk <xsl:when test="string($ndscurrentnode/@class) = ''">NoChunk <xsl:variable name="strtempchunk"> <xsl:for-each select="$g_ndschunkinglogicchunks[$ndscurrentnode/@class and ($ndscurrentnode/*/@class = '')][1]"> <xsl:when test="@type = 'always' and $strprevioustype!= 'keepwithnext'">chunk <xsl:when test="@type = 'yes' and $intchunksize > $g_intminchunksize and $strprevioustype!= 'keepwithnext'">chunk <xsl:when test="@type = 'never'">nochunk <!-- For keep with next nodes if the next non link node is a never then we will pull that node back rather than break --> <xsl:when test="@type = 'keepwithnext'"> <xsl:variable name="ndsnextnonlinknode" select="$ndscurrentnode/following-sibling::*[not(self::xhtml:a = 'LegNavigationHeading' = 'LegBreadcrumbTrailLink' = '' or not(@class))][1]"/> <xsl:variable name="strnexttype" select="string($g_ndschunkinglogicchunks[$ndsnextnonlinknode/@class and ($ndsnextnonlinknode/*/@class = '')][1]/@type)"/> <xsl:when test="$strnexttype = 'never'">nochunk <xsl:variable name="intkeeptotal"> <xsl:for-each select="$ndscurrentnode"> <xsl:call-template name="funccalckeeptotal"> <xsl:with-param name="intchunksize" select="$intchunksize + $intnodesize"/> <!-- Test look ahead but not if current markup is a look ahead option - -> <xsl:when test="$intkeeptotal > $g_intmaxchunksize and $strprevioustype!= 'keepwithnext' and $strnexttype = '' and not($g_ndschunkinglogiclookahead[@name = $ndscurrentnode/@class and (@childname = $ndscurrentnode/*/@class = '')])">ChunkIfNoLookAhead <!-- If all keeps together will exceed max chunk size and the last node did not have to be kept with next then this is a good point to break --> <xsl:when test="$intkeeptotal > $g_intmaxchunksize and $strprevioustype!= 'keepwithnext'">chunk <!-- Otherwise ensure no break --> NoChunk

23 <!-- If no rule defined in chunking list but last item has keepwithnext then don't chunk on this element --> <xsl:when test="$strtempchunk = '' and $strprevioustype = 'keepwithnext'">nochunk <xsl:value-of select="$strtempchunk"/> <!-- Check the look ahead value if not a white space node and not in the chunking list --> <xsl:variable name="intchunklookahead"> <xsl:when test="$strdochunk = 'NoChunk'"> <xsl:value-of select="$g_intmaxchunklookaheadsize"/> <xsl:when test="$strdochunk = 'ChunkIfNoLookAhead' or not($g_ndschunkinglogicchunks[$ndscurrentnode/@class and ($ndscurrentnode/*/@class = '')])"> <xsl:call-template name="funcchunkinglookahead"/> <xsl:value-of select="$g_intmaxchunklookaheadsize"/> <!--<xsl:if test="$strmode = 'Output'"> <xsl:comment><xsl:value-of select="$strdochunk"/>...<xsl:value-of select="$intchunklookahead"/></xsl:comment> --> <xsl:when test="($intchunklookahead >= $g_intmaxchunklookaheadsize and not(@class = 'LegNavigationHeading' = 'LegBreadcrumbTrailLink') and (($intchunksize > $g_intmaxchunksize and $strdochunk!= 'NoChunk') or ($strdochunk = 'Chunk' and $intchunksize > 0))) or $intnodesprocessed >= 1000"> <xsl:if test="$intnodesprocessed >= 1000"> <!--<xsl:message terminate="yes">check this file - max'ed out at 1000 nodes</xsl:message>-->

24 <xsl:if test="$strmode = 'ID'"> <xsl:value-of select="generate-id()"/> <xsl:when test="$strmode = 'Output'"> <!-- We drop the footnotes as not needed - they will be recalculated --> <xsl:if test="not(self::xhtml:p[@class = 'LegBreadcrumbTrailLink' = 'LegNavigationHeading']) and not(self::xhtml:div[@class = 'LegFootnotes']) and not(self::processing-instruction())"> <xsl:copy> <xsl:apply-templates select="@*"/> <!-- If this is one of a set of structures with a large amount of space above and first item on page use 'First' version of class --> <xsl:if test="$intchunksize = 0 and (@class = 'LegClearSchedule' = 'LegClearGroup' = 'LegClearPart' = 'LegClearChapter' = 'LegClearPblock' = 'LegClearPsubBlock' = 'LegClearFix LegP1Container')"> <xsl:attribute name="class"><xsl:value-of select="concat(@class, 'First')"/></xsl:attribute> <xsl:apply-templates> <xsl:with-param name="stroutputtype" select="$stroutputtype"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> </xsl:copy> <xsl:when test="$strmode = 'Corrections'"> <xsl:apply-templates select="self::processing-instruction('change') * processinginstruction()"> <xsl:with-param name="stroutputtype" select="$stroutputtype"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> <!-- We are trying to extract inline information so only process child nodes --> <xsl:when test="$strmode = 'FootnoteRefs'"> <xsl:apply-templates select="*"> <xsl:with-param name="stroutputtype" select="$stroutputtype"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> <!-- Generate the chunk number that and heading will end up in --> <xsl:when test="$strmode = 'GetHeadings'"> <xsl:if test="self::xhtml:p[@class = 'LegNavigationHeading']"> <tso:heading chunk="{$intchunknumber}" text="{translate(., ' ', '

25 ')}"/> <!-- Generate the chunk number that each element will end up in --> <xsl:when test="$strmode = 'GetID'"> <xsl:for-each select="descendant-or-self::*"> <xsl:element name="link" namespace=" <xsl:attribute name="id"> <xsl:when test="@id"><xsl:value-of select="@id"/> <!-- In the vanilla output we prefixed ids with Legislation- to avoid a clash of generated ids --> <xsl:value-of select="generate-id()"/> </xsl:attribute> <xsl:attribute name="chunk"><xsl:value-of select="$intchunknumber"/></xsl:attribute> <xsl:attribute name="text"><xsl:value-of select="."/></xsl:attribute> </xsl:element> <xsl:for-each select="following-sibling::node()[1]"> <xsl:call-template name="funcprocesschunkcontents"> <xsl:with-param name="strmode" select="$strmode"/> <xsl:with-param name="intchunksize" select="$intchunksize + $intnodesize"/> <xsl:with-param name="stroutputtype" select="$stroutputtype"/> <xsl:with-param name="intnodesprocessed" select="$intnodesprocessed + 1"/> <!-- We will pass on to the next node the current type to avoid having to use preceding-sibling which is a terrible hit on performance --> <xsl:with-param name="strprevioustype"> <xsl:when test="not($ndscurrentnode[@class = 'LegNavigationHeading' = 'LegBreadcrumbTrailLink' = '' or not(@class)])"> <xsl:value-of select="string($g_ndschunkinglogicchunks[$ndscurrentnode/@class and ($ndscurrentnode/*/@class = '')][1]/@type)"/> <xsl:value-of select="$strprevioustype"/> </xsl:with-param>

26 <!-- Recurse because there may be more than one consecutive keepwithnext --> <xsl:template name="funccalckeeptotal"> <xsl:param name="intchunksize"/> <xsl:for-each select="following-sibling::node()[1]"> <xsl:variable name="intnodesize"> <xsl:when test="self::processing-instruction('change') or = 'LegBreadcrumbTrailLink' = 'LegNavigationHeading'] or self::xhtml:a"> <xsl:value-of select="0"/> <xsl:when test="self::text()"> <xsl:value-of select="string-length(.)"/> <!-- <xsl:value-of select="local:getnodesize(.)"/> --> <xsl:value-of select="string-length( string(*[position() = 1]))"/> <!--<xsl:value-of select="$g_nstnodesizes//*[@id = generateid(current())]/@size"/>--> <xsl:variable name="ndscurrentnode" select="."/> <!-- If a keepwithnext or a white space node or (PI) then recurse - the same as a keepwithnext --> <xsl:when test="string($ndscurrentnode/@class) = ''"> <xsl:call-template name="funccalckeeptotal"> <xsl:with-param name="intchunksize" select="$intchunksize + $intnodesize"/> <xsl:variable name="strtype" select="string($g_ndschunkinglogicchunks[$ndscurrentnode/@class and ($ndscurrentnode/*/@class = '')]/@type)"/> <xsl:when test="$strtype = 'keepwithnext'"> <xsl:call-template name="funccalckeeptotal"> <xsl:with-param name="intchunksize" select="$intchunksize + $intnodesize"/> <!-- In this instance the next element would force a new chunk so we automatically want to force a chunk before the keepwithnext element so output a large size --> <xsl:when test="$strtype = 'always'"> <xsl:value-of select="$g_intmaxchunksize + 1"/> <xsl:when test="$strtype = 'yes' and $intchunksize > $g_intminchunksize"> <xsl:value-of select="$g_intmaxchunksize + 1"/>

27 <!-- We will add the current node to all the keeps because there must be at least one node held with those keeps so if that pushes us over the limit then that is the desired result - -> <xsl:value-of select="$intchunksize + $intnodesize"/> <!-- Pass through any content --> <xsl:template <xsl:param name="intchunknumber"/> <xsl:param name="ndschunkdoc"/> <xsl:param name="strmode"/> <xsl:param name="stroutputtype"/> <!-- We want to generate a list of chunks into which headings fall --> <xsl:when test="$strmode = 'GetHeadings'"> <xsl:when test="self::xhtml:p[@class = 'LegNavigationHeading']"> <tso:heading chunk="{$intchunknumber}" text="{translate(., ' ', ' ')}"/> <xsl:apply-templates select="*"> <xsl:with-param name="ndschunkdoc" select="$ndschunkdoc"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> <!-- We want to generate a list of chunks into which Corrections fall --> <xsl:when test="$strmode = 'Corrections'"> <xsl:apply-templates select="* processing-instruction()"> <xsl:with-param name="ndschunkdoc" select="$ndschunkdoc"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> <!-- We want to generate a list of chunks into which footnote references fall (but not table footnote references) --> <xsl:when test="$strmode = 'FootnoteRefs'"> <xsl:when test="self::xhtml:a[@class = 'LegFootnoteRef'][not(key('keyAnchors', translate(current()/@href, '#', ''))/ancestor::xhtml:table)]"> <tso:footnote id="{generate-id()}" chunk="{$intchunknumber}"> <xsl:value-of select="@href"/>

28 </tso:footnote> <xsl:apply-templates select="*"> <xsl:with-param name="ndschunkdoc" select="$ndschunkdoc"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> <xsl:when test="self::xhtml:a"> <xsl:call-template name="funcprocessanchors"> <xsl:when = 'LegFootnoteNo']"> <xsl:variable name="strid" = 'LegClearFix <xsl:variable name="strnewfootnotenumber"> <xsl:call-template name="funcgetnewfootnotenumber"> <xsl:with-param name="strref" select="$strid"/> <xsl:copy> <xsl:copy-of <!--Replace the footnote number with the new renumbered footnote. --> <xsl:value-of select="$strnewfootnotenumber"/> </xsl:copy> <!-- Remove navigation headings --> <xsl:when = 'LegNavigationHeading']"/> <xsl:when test="self::xhtml:meta or self::xhtml:img"> <xsl:copy> <xsl:copy-of </xsl:copy> <xsl:copy> <xsl:copy-of <xsl:apply-templates> <xsl:with-param name="ndschunkdoc" select="$ndschunkdoc"/> <xsl:with-param name="strmode" select="$strmode"/> </xsl:apply-templates> </xsl:copy>

29 <!-- ========== Link redirection ========== --> <!-- We need to redirect links to the correct chunk --> <xsl:template name="funcprocessanchors"> <xsl:param name="intchunknumber"/> <xsl:variable name="strhref" <xsl:variable name="strlinkchunk"> <xsl:for-each select="$g_ndslinktargets"> <xsl:value-of select="key('keylinktargets', translate($strhref, '#', <xsl:when = 'LegFootnoteRef'"> <!-- Simply pass through table footnote references --> <xsl:when test="key('keyanchors', translate($strhref, '#', ''))/ancestor::xhtml:table"> <xsl:copy-of select="."/> <xsl:variable name="strnewfootnoterefnumber"> <xsl:call-template name="funcgetnewfootnoterefnumber"> <xsl:with-param name="strid" select="substring-after($strhref, '#')"/> <xsl:copy> <xsl:copy-of = 'title' and not(name() = 'id')]"/> <xsl:attribute name="title">go to footnote <xsl:value-of select="$strnewfootnoterefnumber"/></xsl:attribute> <!-- Calculate if this should be the target for the back reference --> <xsl:for-each select="$g_ndsfootnoterefsinchunks//tso:footnote[@id = generate-id(current())]"> <xsl:if test="not(preceding-sibling::*[@chunk = $intchunknumber and. = current()])"> <xsl:attribute name="id">back<xsl:value-of select="substring(., 2)"/></xsl:attribute> <xsl:value-of select="$strnewfootnoterefnumber"/> </xsl:copy>

30 <!-- Redirect footnote back references --> <xsl:when and = 'LegClearFix LegFootnote']"> <xsl:variable name="strid" = 'LegClearFix <xsl:variable name="strnewfootnotenumber"> <xsl:call-template name="funcgetnewfootnotenumber"> <xsl:with-param name="strref" select="$strid"/> <xsl:copy> <xsl:copy-of <!--Change the footnote number at the end of the title --> <xsl:when 'Back to footnote')"> <xsl:attribute name="title"> <xsl:text>back to footnote </xsl:text> <xsl:value-of select="$strnewfootnotenumber"/> </xsl:attribute> <!-- Change the reference display value (what the user sees) with the new footnote number value --> <xsl:text>back [</xsl:text> <xsl:value-of select="$strnewfootnotenumber"/> <xsl:text>]</xsl:text> <xsl:apply-templates/> </xsl:copy> <xsl:when and $strlinkchunk!= ''"> <xsl:variable name="strchunknumbertext"> <xsl:call-template name="funcgetoutputchunknumbertext"> <xsl:with-param name="intchunknumber" select="number($strlinkchunk)"/> <a href="{$g_strchunkfilename}{$strchunknumbertext}{$g_strfilenameextension}{$strhref}" > <xsl:apply-templates 'href']"/> <xsl:apply-templates/> </a> <xsl:copy> <xsl:copy-of select="@*"/>

31 <xsl:apply-templates/> </xsl:copy> </xsl:stylesheet>

XSLT: How Do We Use It?

XSLT: How Do We Use It? XSLT: How Do We Use It? Nancy Hallberg Nikki Massaro Kauffman 1 XSLT: Agenda Introduction & Terminology XSLT Walkthrough Client-Side XSLT/XHTML Server-Side XSLT/XHTML More Creative Server-Side XSLT 2 XSLT:

More information

XSLT is... XML XSLT XSL-FO XPath

XSLT is... XML XSLT XSL-FO XPath XSLT XSLT is... XML XSLT XSL-FO XPath Назначение XSLT XML XML Назначение XSLT XML HTML Сервер Браузер Назначение XSLT XML HTML Сервер Браузер Declaration

More information

Computer Science E-259

Computer Science E-259 Computer Science E-259 XML with Java Lecture 5: XPath 1.0 (and 2.0) and XSLT 1.0 (and 2.0), Continued 22 October 2007 David J. Malan malan@post.harvard.edu 1 Computer Science E-259 Last Time CSS Level

More information

<xsl:apply-templates select="atom:entry/atom:content"/> <xsl:copy-of xmlns:xsl="http://www.w3.org/1999/xsl/transform"/>

<xsl:apply-templates select=atom:entry/atom:content/> <xsl:copy-of xmlns:xsl=http://www.w3.org/1999/xsl/transform/> Split one of your gravestone XSL stylesheets into two parts, one with templates about persons, the other with templates about inscriptions. Have a third template which pulls them together, using .

More information

Author: Irena Holubová Lecturer: Martin Svoboda

Author: Irena Holubová Lecturer: Martin Svoboda NPRG036 XML Technologies Lecture 6 XSLT 9. 4. 2018 Author: Irena Holubová Lecturer: Martin Svoboda http://www.ksi.mff.cuni.cz/~svoboda/courses/172-nprg036/ Lecture Outline XSLT Principles Templates Instructions

More information

XSL Elements. xsl:copy-of

XSL Elements. xsl:copy-of XSL Elements The following elements are discussed on this page: xsl:copy-of xsl:value-of xsl:variable xsl:param xsl:if xsl:when xsl:otherwise xsl:comment xsl:import xsl:output xsl:template xsl:call-template

More information

XPath and XSLT without the pain!

XPath and XSLT without the pain! XPath and XSLT without the pain! Bertrand Delacrétaz ApacheCon EU 2007, Amsterdam bdelacretaz@apache.org www.codeconsult.ch slides revision: 2007-05-04 Goal Learning to learn XPath and XSLT because it

More information

Lars Schmidt-Thieme, Information Systems and Machine Learning Lab (ISMLL), University of Hildesheim, Germany, Course on XML and Semantic Web

Lars Schmidt-Thieme, Information Systems and Machine Learning Lab (ISMLL), University of Hildesheim, Germany, Course on XML and Semantic Web Course on XML and Semantic Web Technologies, summer term 2012 0/44 XML and Semantic Web Technologies XML and Semantic Web Technologies I. XML / 5. XML Stylesheet Language Transformations (XSLT) Lars Schmidt-Thieme

More information

XPath and XSLT. Overview. Context. Context The Basics of XPath. XPath and XSLT. Nodes Axes Expressions. Stylesheet templates Transformations

XPath and XSLT. Overview. Context. Context The Basics of XPath. XPath and XSLT. Nodes Axes Expressions. Stylesheet templates Transformations XPath and XSLT Michael B. Spring Department of Information Science and Telecommunications University of Pittsburgh spring@imap.pitt.edu http://www.sis.pitt.edu/~spring Context The Basics of XPath Nodes

More information

Exam : Title : XML 1.1 and Related Technologies. Version : DEMO

Exam : Title : XML 1.1 and Related Technologies. Version : DEMO Exam : 000-142 Title : XML 1.1 and Related Technologies Version : DEMO 1. XML data is stored and retrieved within a relational database for a data-centric application by means of mapping XML schema elements

More information

Semi-structured Data 11 - XSLT

Semi-structured Data 11 - XSLT Semi-structured Data 11 - XSLT Andreas Pieris and Wolfgang Fischl, Summer Term 2016 Outline What is XSLT? XSLT at First Glance XSLT Templates Creating Output Further Features What is XSLT? XSL = extensible

More information

Advanced XSLT. Web Data Management and Distribution. Serge Abiteboul Ioana Manolescu Philippe Rigaux Marie-Christine Rousset Pierre Senellart

Advanced XSLT. Web Data Management and Distribution. Serge Abiteboul Ioana Manolescu Philippe Rigaux Marie-Christine Rousset Pierre Senellart Advanced XSLT Web Data Management and Distribution Serge Abiteboul Ioana Manolescu Philippe Rigaux Marie-Christine Rousset Pierre Senellart Web Data Management and Distribution http://webdam.inria.fr/textbook

More information

Introduction to XSLT

Introduction to XSLT Introduction to XSLT Justin Tilton, Chief Executive Officer instructional media + magic, inc. at the JA-SIG Conference Vancouver, BC Sunday, June 9, 2002 The Abstract Looking for a methodology to quickly

More information

Advanced XSLT. Web Data Management and Distribution. Serge Abiteboul Philippe Rigaux Marie-Christine Rousset Pierre Senellart

Advanced XSLT. Web Data Management and Distribution. Serge Abiteboul Philippe Rigaux Marie-Christine Rousset Pierre Senellart Advanced XSLT Web Data Management and Distribution Serge Abiteboul Philippe Rigaux Marie-Christine Rousset Pierre Senellart http://gemo.futurs.inria.fr/wdmd January 15, 2010 Gemo, Lamsade, LIG, Télécom

More information

Style Sheet A. Bellaachia Page: 22

Style Sheet A. Bellaachia Page: 22 Style Sheet How to render the content of an XML document on a page? Two mechanisms: CSS: Cascading Style Sheets XSL (the extensible Style sheet Language) CSS Definitions: CSS: Cascading Style Sheets Simple

More information

Dynamic Indexing with XSL

Dynamic Indexing with XSL In content is generally displayed in a static format. This means that the content entered never changes unless it is updated manually. When a page is transformed, the data entered on the page is visible.

More information

XML and Semantic Web Technologies. II. XML / 5. XML Stylesheet Language Transformations (XSLT)

XML and Semantic Web Technologies. II. XML / 5. XML Stylesheet Language Transformations (XSLT) XML and Semantic Web Technologies XML and Semantic Web Technologies II. XML / 5. XML Stylesheet Language Transformations (XSLT) Lars Schmidt-Thieme Information Systems and Machine Learning Lab (ISMLL)

More information

XSLT. Announcements (October 24) XSLT. CPS 116 Introduction to Database Systems. Homework #3 due next Tuesday Project milestone #2 due November 9

XSLT. Announcements (October 24) XSLT. CPS 116 Introduction to Database Systems. Homework #3 due next Tuesday Project milestone #2 due November 9 XSLT CPS 116 Introduction to Database Systems Announcements (October 24) 2 Homework #3 due next Tuesday Project milestone #2 due November 9 XSLT 3 XML-to-XML rule-based transformation language Used most

More information

XSL extensible Style Language" DOCUMENTS MULTIMEDIA! Transforming documents using! XSLT" XSLT processor" XSLT stylesheet"

XSL extensible Style Language DOCUMENTS MULTIMEDIA! Transforming documents using! XSLT XSLT processor XSLT stylesheet DOCUMENTS MULTIMEDIA! Transforming documents using! XSLT" XSL extensible Style Language"!" A family of languages for defining document transformation and presentation" XSL XSLT XSL-FO Christine Vanoirbeek"

More information

XSL Transformation (XSLT) XSLT Processors. Example XSLT Stylesheet. Calling XSLT Processor. XSLT Structure

XSL Transformation (XSLT) XSLT Processors. Example XSLT Stylesheet. Calling XSLT Processor. XSLT Structure Transformation (T) SOURCE The very best of Cat Stevens UK 8.90 1990 Empire Burlesque Bob

More information

XSLT program. XSLT elements. XSLT example. An XSLT program is an XML document containing

XSLT program. XSLT elements. XSLT example. An XSLT program is an XML document containing XSLT CPS 216 Advanced Database Systems Announcements (March 24) 2 Homework #3 will be assigned next Tuesday Reading assignment due next Wednesday XML processing in Lore (VLDB 1999) and Niagara (VLDB 2003)

More information

IBM Research Report. Using XSLT to Detect Cycles in a Directed Graph

IBM Research Report. Using XSLT to Detect Cycles in a Directed Graph RC23144 (W0403-066) March 9, 2004 Computer Science IBM Research Report Using XSLT to Detect Cycles in a Directed Graph David Marston IBM Research Division Thomas J. Watson Research Center One Rogers Street

More information

EXAM XML 1.1 and Related Technologies TYPE: DEMO

EXAM XML 1.1 and Related Technologies TYPE: DEMO IBM EXAM - 000-142 XML 1.1 and Related Technologies TYPE: DEMO http://www.examskey.com/000-142.html 1 Question: 1 XML data is stored and retrieved within a relational database for a data-centric application

More information

XSLT Programming Constructs

XSLT Programming Constructs XSLT Programming Constructs Contents 1. Procedural programming in XSLT 2. Defining named template rules 3. Parameterizing XSLT style sheets 2 1. Procedural Programming in XSLT Declarative vs. procedural

More information

Computer Science E-259

Computer Science E-259 Computer Science E-259 XML with Java Lecture 4: XPath 1.0 (and 2.0) and XSLT 1.0 (and 2.0) 21 February 2007 David J. Malan malan@post.harvard.edu 1 Computer Science E-259 Last Time DOM Level 3 JAXP 1.3

More information

4. Unit: Transforming XML with XSLT

4. Unit: Transforming XML with XSLT Semistructured Data and XML 28 4. Unit: Transforming XML with XSLT Exercise 4.1 (XML to HTML) Write an XSLT routine performing the following task: Map the following country data for each country to an

More information

XSL and OU Campus. OmniUpdate User Training Conference OmniUpdate, Inc Flynn Road, Suite 100 Camarillo, CA 93012

XSL and OU Campus. OmniUpdate User Training Conference OmniUpdate, Inc Flynn Road, Suite 100 Camarillo, CA 93012 XSL and OU Campus OmniUpdate User Training Conference 2015 OmniUpdate, Inc. 1320 Flynn Road, Suite 100 Camarillo, CA 93012 OmniUpdate, Inc. 1320 Flynn Road, Suite 100 Camarillo, CA 93012 800.362.2605 805.484.9428

More information

Introduction to XSLT. Version 1.3 March nikos dimitrakas

Introduction to XSLT. Version 1.3 March nikos dimitrakas Introduction to XSLT Version 1.3 March 2018 nikos dimitrakas Table of contents 1 INTRODUCTION... 3 1.1 XSLT... 3 1.2 PREREQUISITES... 3 1.3 STRUCTURE... 3 2 SAMPLE DATA... 4 3 XSLT... 6 4 EXAMPLES... 7

More information

Extensions to XSLT 1.0, and XSLT 2.0

Extensions to XSLT 1.0, and XSLT 2.0 ... Extensions A typical problem: XSLT 1.0 does not have any way of finding the current date and time. However, some XSLT 1.0 processors allow you to use extensions to XSLT 1.0. The EXSLT initiative http://www.exslt.org/

More information

XML and Databases XSLT Stylesheets and Transforms

XML and Databases XSLT Stylesheets and Transforms XML and Databases XSLT Stylesheets and Transforms Kim.Nguyen@nicta.com.au Lecture 11 1 / 38 extensible Stylesheet Language Transformations Outline 1 extensible Stylesheet Language Transformations 2 Templates

More information

Introduction to XSLT

Introduction to XSLT Introduction to XSLT Justin Tilton, Chief Executive Officer instructional media + magic, inc. at the JA-SIG Conference Destin, Florida December 2, 2001 The Abstract Looking for a methodology to quickly

More information

Extensible Markup Stylesheet Transformation (XSLT)

Extensible Markup Stylesheet Transformation (XSLT) Extensible Markup Stylesheet Transformation (XSLT) Asst. Prof. Dr. Kanda Runapongsa Saikaew (krunapon@kku.ac.th) Dept. of Computer Engineering Khon Kaen University 1 Overview Terms: XSL, XSLT, XSL-FO Value

More information

info-h-509 xml technologies Lecture 5: XSLT Stijn Vansummeren February 14, 2017

info-h-509 xml technologies Lecture 5: XSLT Stijn Vansummeren February 14, 2017 info-h-509 xml technologies Lecture 5: XSLT Stijn Vansummeren February 14, 2017 lecture outline 1 How XML may be rendered in Web Browsers 2 Syntax and Semantics of XSLT 3 How XPath is used in XSLT 1 our

More information

Appendix H XML Quick Reference

Appendix H XML Quick Reference HTML Appendix H XML Quick Reference What Is XML? Extensible Markup Language (XML) is a subset of the Standard Generalized Markup Language (SGML). XML allows developers to create their own document elements

More information

Presentation. Separating Content and Presentation Cascading Style Sheets (CSS) XML and XSLT

Presentation. Separating Content and Presentation Cascading Style Sheets (CSS) XML and XSLT Presentation Separating Content and Presentation Cascading Style Sheets (CSS) XML and XSLT WordPress Projects Theme Generators WYSIWYG editor Look at tools to support generation of themes Design a new

More information

The Transformation Language XSL

The Transformation Language XSL Chapter 8 The Transformation Language XSL 8.1 XSL: Extensible Stylesheet Language developed from CSS (Cascading Stylesheets) scripting language for transformation of data sources to HTML or any other optical

More information

XML Wrap-up. CS 431 March 1, 2006 Carl Lagoze Cornell University

XML Wrap-up. CS 431 March 1, 2006 Carl Lagoze Cornell University XML Wrap-up CS 431 March 1, 2006 Carl Lagoze Cornell University XSLT Processing Model Input XSL doc parse Input XML doc parse Parsed tree serialize Input XML doc Parsed tree Xformed tree Output doc (xml,

More information

XSLT Version 2.0 is Turing-Complete: A Purely Transformation Based Proof

XSLT Version 2.0 is Turing-Complete: A Purely Transformation Based Proof XSLT Version 2.0 is Turing-Complete: A Purely Transformation Based Proof Ruhsan Onder and Zeki Bayram Department of Computer Engineering/Internet Technologies Research Center Eastern Mediterranean University

More information

XSDs: exemplos soltos

XSDs: exemplos soltos XSDs: exemplos soltos «expande o tipo base»

More information

INTERNET & WEB APPLICATION DEVELOPMENT SWE 444. Fall Semester (081) Module 4 (III): XSL

INTERNET & WEB APPLICATION DEVELOPMENT SWE 444. Fall Semester (081) Module 4 (III): XSL INTERNET & WEB APPLICATION DEVELOPMENT SWE 444 Fall Semester 2008-2009 (081) Module 4 (III): XSL Dr. El-Sayed El-Alfy Computer Science Department King Fahd University of Petroleum and Minerals alfy@kfupm.edu.sa

More information

XML. <subtitle>xslt (cont)</subtitle> <author>prof. Dr. Christian Pape</author>

XML. <subtitle>xslt (cont)</subtitle> <author>prof. Dr. Christian Pape</author> XML xslt (cont) prof. Dr. Christian Pape Content Expressions and Functions Copying nodes Using variables and parameters Conditional Processing XSLT 5-2 Expressions

More information

The Transformation Language XSL

The Transformation Language XSL Chapter 8 The Transformation Language XSL 8.1 XSL: Extensible Stylesheet Language developed from CSS (Cascading Stylesheets) scripting language for transformation of data sources to HTML or any other optical

More information

XSLT. December 16, 2008

XSLT. December 16, 2008 XSLT December 16, 2008 XML is used in a large number of applications, either data-centric (semi-structured databases), or document-centric (Web publishing). In either case, there is a need for transforming

More information

XSLT. Patryk Czarnik. XML and Applications 2014/2015 Lecture

XSLT. Patryk Czarnik. XML and Applications 2014/2015 Lecture XSLT Patryk Czarnik XML and Applications 2014/2015 Lecture 10 15.12.2014 XSLT where does it come from? XSL Extensible Stylesheet Language Presentation of XML documents by transformation XSLT XSL Transformations

More information

XPath Quick Reference

XPath Quick Reference XPath Quick Reference Node Types Nodes can be of the following types: NodeType root element attribute text cornrnent processing narnespace Name Element name Attribute name Processing instruction target

More information

Sample Text Point Instruction

Sample Text Point Instruction TSMAD29/DIPWG7 11.11B Paper for Consideration by TSMAD/DIPWG Potential Adjustments to S-100 Part 9 Portrayal - Text Styles. Submitted by: CARIS Executive Summary: This paper discusses the introduction

More information

XSLT (part II) Mario Alviano A.Y. 2017/2018. University of Calabria, Italy 1 / 19

XSLT (part II) Mario Alviano A.Y. 2017/2018. University of Calabria, Italy 1 / 19 1 / 19 XSLT (part II) Mario Alviano University of Calabria, Italy A.Y. 2017/2018 Outline 2 / 19 1 Introduction 2 Variables, conditional constructs and iterations 3 Sorting and grouping 4 Named templates

More information

Chapter 1. DocBook XSL

Chapter 1. DocBook XSL Chapter 1. DocBook XSL Bob Stayton $Id: publishing.xml,v 1.4 2002/06/03 19:26:58 xmldoc Exp $ Copyright 2000 Bob Stayton Table of Contents Using XSL tools to publish DocBook documents... 1 XSLT engines...

More information

Advanced XQuery and XSLT

Advanced XQuery and XSLT NPRG036 XML Technologies Lecture 9 Advanced XQuery and XSLT 30. 4. 2018 Author: Irena Holubová Lecturer: Martin Svoboda http://www.ksi.mff.cuni.cz/~svoboda/courses/172-nprg036/ Lecture Outline XQuery Update

More information

Web Data Management XSLT. Philippe Rigaux CNAM Paris & INRIA Saclay

Web Data Management XSLT. Philippe Rigaux CNAM Paris & INRIA Saclay http://webdam.inria.fr Web Data Management XSLT Serge Abiteboul INRIA Saclay & ENS Cachan Ioana Manolescu INRIA Saclay & Paris-Sud University Philippe Rigaux CNAM Paris & INRIA Saclay Marie-Christine Rousset

More information

XML. Objectives. Duration. Audience. Pre-Requisites

XML. Objectives. Duration. Audience. Pre-Requisites XML XML - extensible Markup Language is a family of standardized data formats. XML is used for data transmission and storage. Common applications of XML include business to business transactions, web services

More information

White Paper. XML-Based Export and Import of Objects Using XSLT. Fabasoft Folio 2017 R1 Update Rollup 1

White Paper. XML-Based Export and Import of Objects Using XSLT. Fabasoft Folio 2017 R1 Update Rollup 1 White Paper XML-Based Export and Import of Objects Using XSLT Fabasoft Folio 2017 R1 Update Rollup 1 Copyright Fabasoft R&D GmbH, Linz, Austria, 2018. All rights reserved. All hardware and software names

More information

Oracle Application Server 10g Oracle XML Developer s Kit Frequently Asked Questions September, 2005

Oracle Application Server 10g Oracle XML Developer s Kit Frequently Asked Questions September, 2005 Oracle Application Server 10g Oracle XML Developer s Kit Frequently Asked Questions September, 2005 This FAQ addresses frequently asked questions relating to the XML features of Oracle XML Developer's

More information

Generating Web Pages Using XSLT

Generating Web Pages Using XSLT Generating Web Pages Using XSLT 238 XSLT for Data Interchange 239 6.1.xml: An Employee List Document

More information

Burrows & Langford Appendix D page 1 Learning Programming Using VISUAL BASIC.NET

Burrows & Langford Appendix D page 1 Learning Programming Using VISUAL BASIC.NET Burrows & Langford Appendix D page 1 APPENDIX D XSLT XSLT is a programming language defined by the World Wide Web Consortium, W3C (http://www.w3.org/tr/xslt), that provides the mechanism to transform a

More information

Introduction to XSLT. Version 1.0 July nikos dimitrakas

Introduction to XSLT. Version 1.0 July nikos dimitrakas Introduction to XSLT Version 1.0 July 2011 nikos dimitrakas Table of contents 1 INTRODUCTION... 3 1.1 XSLT... 3 1.2 PREREQUISITES... 3 1.3 STRUCTURE... 3 2 SAMPLE DATA... 4 3 XSLT... 6 4 EXAMPLES... 7

More information

XML and Databases. Lecture 11 XSLT Stylesheets and Transforms. Sebastian Maneth NICTA and UNSW

XML and Databases. Lecture 11 XSLT Stylesheets and Transforms. Sebastian Maneth NICTA and UNSW XML and Databases Lecture 11 XSLT Stylesheets and Transforms Sebastian Maneth NICTA and UNSW CSE@UNSW -- Semester 1, 2010 Outline 1. extensible Stylesheet Language Transformations (XSLT) 2. Templates:

More information

Advanced XSLT editing: Content query web part (CQWP) Dolev Raz SharePoint top soft Soft.co.il

Advanced XSLT editing: Content query web part (CQWP) Dolev Raz SharePoint top soft Soft.co.il Advanced XSLT editing: Content query web part (CQWP) Dolev Raz SharePoint Implementer @ top soft dolev_r@top- Soft.co.il About Me Dolev Raz 22 years-old Live in Qiriyat Ono Works in Logic trough Top Soft

More information

Generating Variants Using XSLT Tutorial

Generating Variants Using XSLT Tutorial Table of Contents 1. Overview... 1 2. About this tutorial... 1 3. Setting up the pure::variants project... 1 4. Setting up the feature model... 3 5. Setting up the family model... 4 6. Setting up the XSLT

More information

Deliverable 5.2 Annex B Implementing the MESMA Metadata Profile on GeoNetwork 2.6.0

Deliverable 5.2 Annex B Implementing the MESMA Metadata Profile on GeoNetwork 2.6.0 Deliverable 5.2 Annex B Implementing the MESMA Metadata Profile on GeoNetwork 2.6.0 WP Leader: Gerry Sutton Coastal & Marine Resource Centre, University College Cork (Partner 8, UCC Cork, Ireland) Author:

More information

Programming issues 5.1 CONTROL STATEMENTS

Programming issues 5.1 CONTROL STATEMENTS C H A P T E R 5 Programming issues 5.1 Control statements 110 5.2 Combining stylesheets with include and import 126 5.3 Named templates 132 5.4 Debugging 133 5.5 Extensions to XSLT 143 5.6 Numbers and

More information

Print & Page Layout Community W3C

Print & Page Layout Community W3C @ W3C Tony Graham Chair http://www.w3.org/community/ppl/ public-ppl@w3.org @pplcg irc://irc.w3.org:6665/#ppl Version 1.0 14 February 2014 2014 Mentea @ W3C 5 Survey 8 Decision making in XSL-FO processing

More information

XSLT 3.0 Testbed. Tony Graham Mentea 13 Kelly s Bay Beach Skerries, Co Dublin Ireland

XSLT 3.0 Testbed. Tony Graham Mentea 13 Kelly s Bay Beach Skerries, Co Dublin Ireland XSLT 3.0 Testbed Tony Graham Mentea 13 Kelly s Bay Beach Skerries, Co Dublin Ireland info@mentea.net http://www.mentea.net Version 1.0 15 February 2014 2014 Mentea XSLT 3.0 Testbed XSLT 3.0 Testbed xsl:attribute-set

More information

XML and Databases. Outline XML. XML, typical usage scenario XML. 1. extensible Stylesheet Language X M L. Sebastian Maneth NICTA and UNSW

XML and Databases. Outline XML. XML, typical usage scenario XML. 1. extensible Stylesheet Language X M L. Sebastian Maneth NICTA and UNSW Outline XML and Databases 1. extensible Stylesheet Language Transformations (XSLT) 2. Templates (match pattern action) Lecture 11 XSLT Stylesheets and Transforms Sebastian Maneth NICTA and UNSW 3. Default

More information

Manipulating XML Trees XPath and XSLT. CS 431 February 18, 2008 Carl Lagoze Cornell University

Manipulating XML Trees XPath and XSLT. CS 431 February 18, 2008 Carl Lagoze Cornell University Manipulating XML Trees XPath and XSLT CS 431 February 18, 2008 Carl Lagoze Cornell University XPath Language for addressing parts of an XML document XSLT Xpointer XQuery Tree model based on DOM W3C Recommendation

More information

RXSLT Examples. Sam Wilmott August 3, 2006

RXSLT Examples. Sam Wilmott   August 3, 2006 RXSLT Examples Sam Wilmott sam@wilmott.ca www.wilmott.ca August 3, 2006 The following examples are all the examples in the XSLT 1.0 specification, each followed by the corresponding RXSLT program or program

More information

4. Unit: Transforming XML with XSLT

4. Unit: Transforming XML with XSLT Semistructured Data and XML 38 4. Unit: Transforming XML with XSLT Exercise 4.1 (XML to HTML) Write an XSLT routine that outputs the following country data for all countries with more than 1000000inhabitants

More information

WebSphere DataPower SOA Appliances and XSLT (Part 2 of 2) - Tips and Tricks

WebSphere DataPower SOA Appliances and XSLT (Part 2 of 2) - Tips and Tricks IBM Software Group WebSphere DataPower SOA Appliances and XSLT (Part 2 of 2) - Tips and Tricks Hermann Stamm-Wilbrandt (stammw@de.ibm.com) DataPower XML Compiler Developer, L3 8 July 2010 WebSphere Support

More information

Comp 336/436 - Markup Languages. Fall Semester Week 9. Dr Nick Hayward

Comp 336/436 - Markup Languages. Fall Semester Week 9. Dr Nick Hayward Comp 336/436 - Markup Languages Fall Semester 2018 - Week 9 Dr Nick Hayward DEV Week assessment Course total = 25% project outline and introduction developed using a chosen markup language consider and

More information

DocBook: A Case Study and Anecdotes. Norman Walsh Sun Microsystems, Inc.

DocBook: A Case Study and Anecdotes. Norman Walsh Sun Microsystems, Inc. DocBook: A Case Study and Anecdotes Norman Walsh Sun Microsystems, Inc. Background What is DocBook? A DocBook Document DocBook History DocBook s Purpose 2 / 30 What is DocBook? DocBook is an XML vocabulary

More information

Custom Tables with the LandXML Report Extension David Zavislan, P.E.

Custom Tables with the LandXML Report Extension David Zavislan, P.E. December 2-5, 2003 MGM Grand Hotel Las Vegas Custom Tables with the LandXML Report Extension David Zavislan, P.E. CV41-2 Learn some basic concepts of LandXML and the extensible Stylesheet Language (XSL)

More information

Registering Search Interface to SAS Content as Google OneBox Module

Registering Search Interface to SAS Content as Google OneBox Module Registering Search Interface to SAS Content as Google OneBox Module Search Interface to SAS Content supports two kinds of search results: Reports search supports searching of SAS BI Dashboard 4.3 (and

More information

You need to install this note if you want to enable consolidation in Embedded Model for BPC NW 10.1 in Support Package 08 Patch01.

You need to install this note if you want to enable consolidation in Embedded Model for BPC NW 10.1 in Support Package 08 Patch01. SAP Note 2218894 - Consolidation in embedded model bug fixing - CPMBPC Version 3 Validity: 04.12.2015 - active Language English Header Data Released On 14.12.2015 07:43:43 Release Status Released for Customer

More information

XSLT Transformations of XML Documents

XSLT Transformations of XML Documents XSLT Transformations of XML Documents Patryk Czarnik Institute of Informatics University of Warsaw XML and Modern Techniques of Content Management 2012/13 1 Introduction 2 Templates matching Control flow

More information

COP 4814 Florida International University Kip Irvine XSLT. Updated: 2/9/2016 Based on Goldberg, Chapter 2. Irvine COP 4814

COP 4814 Florida International University Kip Irvine XSLT. Updated: 2/9/2016 Based on Goldberg, Chapter 2. Irvine COP 4814 COP 4814 Florida International University Kip Irvine XSLT Updated: 2/9/2016 Based on Goldberg, Chapter 2 XSL Overview XSL Extensible Stylesheet Language A family of languages used to transform and render

More information

Proposal: Codelists 1.0 April 2003

Proposal: Codelists 1.0 April 2003 Proposal: Codelists 1.0 April 2003 Proposal: Codelists / 1.0 / April 2003 1 Document Control Abstract In many cases, there is a need to use sets of pre-defined codes (such as country and currency codes)

More information

XML and XSLT. XML and XSLT 10 February

XML and XSLT. XML and XSLT 10 February XML and XSLT XML (Extensible Markup Language) has the following features. Not used to generate layout but to describe data. Uses tags to describe different items just as HTML, No predefined tags, just

More information

XSL Languages. Adding styles to HTML elements are simple. Telling a browser to display an element in a special font or color, is easy with CSS.

XSL Languages. Adding styles to HTML elements are simple. Telling a browser to display an element in a special font or color, is easy with CSS. XSL Languages It started with XSL and ended up with XSLT, XPath, and XSL-FO. It Started with XSL XSL stands for EXtensible Stylesheet Language. The World Wide Web Consortium (W3C) started to develop XSL

More information

Changes to the Results Page XSLT Stylesheet

Changes to the Results Page XSLT Stylesheet Changes to the Results Page XSLT Stylesheet Changes coded by Sam Cook, Public Services Librarian, Allen Library, University of Hartford For questions about implementation and modification of code, feel

More information

A Trend Micro White Paper May 2017

A Trend Micro White Paper May 2017 >> ... 4... 4... 4... 6... 6... 7... 7... 16... 16... 22... 26... 32... 39... 44... 46 WRITTEN BY: Brian Gorenc, Abdul-Aziz Hariri, and Jasiel Spelman of the Trend Micro Zero Day Initiative Page 2 of 46

More information

For personnal use only

For personnal use only XSLT 1.0 Multiple Namespace Issues Finnbarr P. Murphy (fpm@fpmurphy.com) XSLT and XPath assume that XML documents conform to the XML Namespaces recommendation whereby XML namespaces are identified by a

More information

MASTER OF SCIENCE THESIS

MASTER OF SCIENCE THESIS MASTER OF SCIENCE THESIS XML to RDBMS By Magnus Karlsson (mka@corus.se) Stockholm, September 2000 Supervisor: Torbjörn Ryeng and Peter Monthan Corus Technologies AB Birger Jarlsgatan 20, 11434 Stockholm

More information

Implementing a chat button on TECHNICAL PAPER

Implementing a chat button on TECHNICAL PAPER Implementing a chat button on TECHNICAL PAPER Contents 1 Adding a Live Guide chat button to your Facebook page... 3 1.1 Make the chat button code accessible from your web server... 3 1.2 Create a Facebook

More information

Harvesting Topic Maps with XSLT

Harvesting Topic Maps with XSLT 1 of 33 Slide # 1 Harvesting Topic Maps with XSLT 2 of 33 by Nikita Ogievetsky, Cogitech, Inc. nogievet@cogx.com Cogitech, Inc. Slide # 2 Food Chain Crops are grown. Crops are harvested and Fowl is hunted.

More information

DocBook Transclusion. Inline reference. Table of Contents. 09 December 2010

DocBook Transclusion. Inline reference. Table of Contents. 09 December 2010 09 December 2010 This version: http://docbook.org/docs/transclusion/2010-12-09/ Latest version: http://docbook.org/docs/transclusion/ Author: Jirka Kosek, Table of Contents Inline reference...

More information

Advanced Studies in IT CT433 Exam Q&A

Advanced Studies in IT CT433 Exam Q&A Advanced Studies in IT CT433 Exam Q&A Dr. Axel Polleres www.deri.ie Copyright 2008 Digital Enterprise Research Institute. All rights reserved. XML Know what is well-formed XML, valid XML Well-formed: Close

More information

1. Documenting your project using the Eclipse help system

1. Documenting your project using the Eclipse help system 1. Documenting your project using the Eclipse help system Build easy-to-use and searchable help documentation Arthur Barr, Software engineer, IBM Summary: The Eclipse Platform, which provides a very powerful

More information

Integrating data: Appendix F, G and H (full) GIMA Thesis. Ing. Huibert-Jan Lekkerkerk B.Sc.

Integrating data: Appendix F, G and H (full) GIMA Thesis. Ing. Huibert-Jan Lekkerkerk B.Sc. Integrating data: Appendix F, G and H (full) GIMA Thesis Ing. Huibert-Jan Lekkerkerk B.Sc. Table of contents TABLE OF CONTENTS... 3 APPENDIX F: MAPPING TO REFERENCE SET... 5 F.1 XSLT2: GAZETTEER... 5

More information

Übung 5 Klaus Schild,

Übung 5 Klaus Schild, Übung 5 1 Übung 5 Fragen zur Vorlesung XSLT? XSLT in Depth XSLT Programming Musterfragen Musterlösung XSLT for transformation from content to presentation 2 XSLT in Depth 3 Valid XSLT

More information

XSLT (part I) Mario Alviano A.Y. 2017/2018. University of Calabria, Italy 1 / 22

XSLT (part I) Mario Alviano A.Y. 2017/2018. University of Calabria, Italy 1 / 22 1 / 22 XSLT (part I) Mario Alviano University of Calabria, Italy A.Y. 2017/2018 Outline 2 / 22 1 Introduction 2 Templates 3 Attributes 4 Copy of elements 5 Exercises 4 / 22 What is XSLT? XSLT is a (Turing

More information

Presentation 19: XML technologies part 2: XSL, XSLT, XSL-FO, XPath & XML Programming

Presentation 19: XML technologies part 2: XSL, XSLT, XSL-FO, XPath & XML Programming Presentation 19: XML technologies part 2: XSL, XSLT, XSL-FO, XPath & XML Programming Outline XML recap Formatting CSS or XSL? XPath XSL/XSLT XSL-FO XML Programming Slide 2 XML markup recap XML based on

More information

A Guide for Designing Your Own Dyamic SiteMason Templates. Creating. SiteMason Templates

A Guide for Designing Your Own Dyamic SiteMason Templates. Creating. SiteMason Templates A Guide for Designing Your Own Dyamic SiteMason Templates Creating SiteMason Templates 2 Creating SiteMason Templates (c) 2003 Monster Labs, Inc. Current Version: February 6, 2003 Manual Version 1.0 3

More information

Term selector datatype

Term selector datatype Term selector datatype Installation Guide Xuntos B.V. www.xuntos.nl Oktober 2012 Table of Contents Introduction... 3 XML Data save example... 3 Revision History... 3 Before installing this package... 4

More information

XSLT Extensions. </xsl:call-template> </xsl:template>

XSLT Extensions. </xsl:call-template> </xsl:template> Print Page Layout Community Group Extensions The Print Page Layout Community Group @ W3C (www.w3.org/community/ppl/) is open to all aspects of page layout theory practice. It is free to join, all are welcome

More information

COPYRIGHTED MATERIAL. Contents. Part I: Introduction 1. Chapter 1: What Is XML? 3. Chapter 2: Well-Formed XML 23. Acknowledgments

COPYRIGHTED MATERIAL. Contents. Part I: Introduction 1. Chapter 1: What Is XML? 3. Chapter 2: Well-Formed XML 23. Acknowledgments Acknowledgments Introduction ix xxvii Part I: Introduction 1 Chapter 1: What Is XML? 3 Of Data, Files, and Text 3 Binary Files 4 Text Files 5 A Brief History of Markup 6 So What Is XML? 7 What Does XML

More information

store process communicate

store process communicate store process communicate 2011-10-04 store as XML communicate using HTML and CSS process with XSL

More information

XTDir Promoted Entries for SobiPro

XTDir Promoted Entries for SobiPro XTDir Promoted Entries for SobiPro Building an advertising catalog for Joomla! Presentation based on Joomla 3, SobiPro 1.1 and XTDir 5.6 2015-04-14 XTDir Promoted Entries for SobiPro In this presentation,

More information

Developing High-Quality XSLT Stylesheets

Developing High-Quality XSLT Stylesheets XSLT and XQuery September 13, 2018 Developing High-Quality XSLT Stylesheets Priscilla Walmsley, Datypic, Inc. Class Outline Introduction...2 Clarity...8 Modularity... 11 Robustness...27 Other Improvements...35

More information

Roxen CMS 5.4. XSLT Tutorial

Roxen CMS 5.4. XSLT Tutorial Roxen CMS 5.4 XSLT Tutorial 2014-03-11 www.roxen.com Roxen Internet Software AB 2011 Roxen Internet Software AB. All rights reserved. Under the copyright laws, this document may not be copied, in whole

More information

XML Where Angels Fear To Tread: SB/MVC on the Server

XML Where Angels Fear To Tread: SB/MVC on the Server XML Where Angels Fear To Tread: SB/MVC on the Server Introduction Michael Corning, Microsoft Corporation This session is a follow-on to "XML for the Criminally Insane: An Introduction to the Schema- Based/Model-View-Controller

More information