<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dtb="http://www.daisy.org/z3986/2005/dtbook/" version="2.0" exclude-result-prefixes="#all"> <xsl:template match="/"> <xsl:apply-templates select="collection()[1]/*" mode="template"/> </xsl:template> <xsl:template match="@*|node()" mode="template"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="template"/> </xsl:copy> </xsl:template> <xsl:template match="/office:document-meta/office:meta" mode="template"> <xsl:copy> <xsl:apply-templates mode="template"/> <xsl:call-template name="dtb:creator"/> <xsl:call-template name="dtb:date"/> <xsl:call-template name="dtb:title"/> <xsl:call-template name="dtb:subject"/> </xsl:copy> </xsl:template> <xsl:template match="/office:document-meta/office:meta/*" mode="template" priority="1"> <xsl:variable name="node-name" as="xs:QName" select="node-name(.)"/> <xsl:if test="not(preceding-sibling::*[node-name(.)=$node-name])"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="template"/> </xsl:copy> </xsl:if> </xsl:template> <xsl:template match="/office:document-meta/office:meta/meta:user-defined" mode="template" priority="1.1"> <xsl:variable name="name" select="string(@meta:name)"/> <xsl:if test="not(preceding-sibling::meta:user-defined[@meta:name=$name])"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="template"/> </xsl:copy> </xsl:if> </xsl:template> <xsl:template name="dtb:creator"> <xsl:variable name="creator" select="dtb:meta('dc:creator')"/> <xsl:if test="not(dc:creator)"> <xsl:element name="dc:creator"> <xsl:sequence select="$creator"/> </xsl:element> </xsl:if> <xsl:if test="not(meta:initial-creator)"> <xsl:element name="meta:initial-creator"> <xsl:sequence select="$creator"/> </xsl:element> </xsl:if> </xsl:template> <xsl:template name="dtb:date"> <xsl:variable name="date" select="dtb:meta('dc:date')"/> <xsl:if test="not(dc:date)"> <xsl:element name="dc:date"> <xsl:sequence select="$date"/> </xsl:element> </xsl:if> <xsl:if test="not(meta:creation-date)"> <xsl:element name="meta:creation-date"> <xsl:sequence select="$date"/> </xsl:element> </xsl:if> </xsl:template> <xsl:template name="dtb:title"> <xsl:variable name="title" select="dtb:meta('dc:title')"/> <xsl:if test="not(dc:title)"> <xsl:element name="dc:title"> <xsl:sequence select="$title"/> </xsl:element> </xsl:if> </xsl:template> <xsl:template name="dtb:subject"> <xsl:variable name="subject" select="dtb:meta('dc:subject')"/> <xsl:if test="not(dc:subject) and $subject!=''"> <xsl:element name="dc:subject"> <xsl:sequence select="$subject"/> </xsl:element> </xsl:if> </xsl:template> <xsl:function name="dtb:meta"> <xsl:param name="name" as="xs:string"/> <xsl:sequence select="collection()[2]/dtb:dtbook/dtb:head/dtb:meta[lower-case(@name)=$name]/@content"/> </xsl:function> </xsl:stylesheet>