<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:d="http://www.daisy.org/ns/pipeline/data" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:dtbook="http://www.daisy.org/z3986/2005/dtbook/" version="2.0" exclude-result-prefixes="#all">
<xsl:variable name="dtbook-smils" select="collection()[/smil:smil]"/>
<xsl:variable name="dtbooks" select="collection()[/dtbook:dtbook]"/>
<xsl:template name="create-id-map">
<d:fileset>
<xsl:variable name="ids" as="element(d:anchor)*">
<xsl:for-each select="$dtbook-smils">
<xsl:variable name="smil-uri" select="base-uri(.)"/>
<xsl:apply-templates select="/*">
<xsl:with-param name="smil-uri" tunnel="yes" select="$smil-uri"/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:variable>
<xsl:for-each-group select="$ids" group-by="@original-href">
<xsl:for-each-group select="current-group()" group-by="@original-href">
<d:file>
<xsl:sequence select="@href|@original-href"/>
<xsl:for-each select="current-group()">
<xsl:copy>
<xsl:sequence select="@id|@original-id"/>
</xsl:copy>
</xsl:for-each>
</d:file>
</xsl:for-each-group>
</xsl:for-each-group>
</d:fileset>
</xsl:template>
<xsl:template match="smil:text[@id]| smil:*[@id][count(smil:text)=1]">
<xsl:param name="smil-uri" tunnel="yes" required="yes"/>
<xsl:variable name="smil-id" select="@id"/>
<xsl:variable name="dtbook-id" select="substring-after(descendant-or-self::smil:text/@src,'#')"/>
<xsl:variable name="dtbook-uri" select="substring-before(descendant-or-self::smil:text/@src,'#')"/>
<d:anchor original-href="{$smil-uri}" original-id="{$smil-id}" href="{$dtbook-uri}" id="{$dtbook-id}"/>
</xsl:template>
<xsl:template match="smil:seq[@id]">
<xsl:param name="smil-uri" tunnel="yes" required="yes"/>
<xsl:variable name="smil-id" select="@id"/>
<xsl:variable name="dtbook-smilref" as="attribute()?" select="$dtbooks//@smilref[substring-after(.,'#')=$smil-id] [resolve-uri(substring-before(.,'#'),base-uri(..))=$smil-uri] [1]"/>
<xsl:if test="exists($dtbook-smilref/../@id)">
<xsl:variable name="dtbook-id" select="$dtbook-smilref/../@id"/>
<xsl:variable name="dtbook-uri" select="base-uri($dtbook-smilref/..)"/>
<d:anchor original-href="{$smil-uri}" original-id="{$smil-id}" href="{$dtbook-uri}" id="{$dtbook-id}"/>
</xsl:if>
<xsl:next-match/>
</xsl:template>
<xsl:template match="@*|*">
<xsl:apply-templates select="@*|*"/>
</xsl:template>
</xsl:stylesheet>