<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pf="http://www.daisy.org/ns/pipeline/functions" xmlns:pxi="http://www.daisy.org/ns/pipeline/xproc/internal" xmlns:d="http://www.daisy.org/ns/pipeline/data" xmlns:dtb="http://www.daisy.org/z3986/2005/dtbook/" version="2.0" exclude-result-prefixes="#all"> <xsl:import href="http://www.daisy.org/pipeline/modules/file-utils/library.xsl"/> <xsl:param name="mo-dir"/> <xsl:variable name="mo-dir-rel" select="pf:relativize-uri($mo-dir, base-uri(/*))"/> <xsl:key name="struct" match="*[@node]" use="@node"/> <xsl:key name="clips" match="d:clip" use="@textref"/> <xsl:variable name="top-elements" select="//dtb:level| //dtb:level1| //dtb:level2| //dtb:level3| //dtb:level4| //dtb:level5| //dtb:level6"/> <xsl:variable name="top-element-positions"> <d:structs> <xsl:for-each select="$top-elements"> <d:s node="{generate-id(.)}" pos="{position()}"/> </xsl:for-each> </d:structs> </xsl:variable> <xsl:template match="*[@id and empty(@pxi:no-smilref)]"> <xsl:copy> <xsl:variable name="prev" select="preceding::*[self::dtb:level| self::dtb:level1| self::dtb:level2| self::dtb:level3| self::dtb:level4| self::dtb:level5| self::dtb:level6][1]"/> <xsl:variable name="smil-id" select="if ($prev) then key('struct',generate-id($prev),$top-element-positions)/@pos else '0'"/> <xsl:attribute name="smilref"> <xsl:value-of select="concat($mo-dir-rel, 'mo', $smil-id, '.smil#s', @id)"/> </xsl:attribute> <xsl:choose> <xsl:when test="exists(child::dtb:w) or key('clips',concat('#',@id),collection()[/d:audio-clips])"> <xsl:copy-of select="@*|node()"/> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="@*|node()"/> </xsl:otherwise> </xsl:choose> </xsl:copy> </xsl:template> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet>