<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://www.daisy.org/ns/pipeline/data" xmlns="http://schema.openpreservation.org/ois/xml/ns/jhove" version="2.0" xpath-default-namespace="http://schema.openpreservation.org/ois/xml/ns/jhove">
<xsl:output indent="yes"/>
<xsl:param name="document-path" select="()"/>
<xsl:param name="report-warning-as-error" select="'false'"/>
<xsl:template match="jhove">
<d:document-validation-report>
<xsl:if test="date">
<xsl:comment select="concat(' The date/time at which epubcheck was invoked: ',date,' ')"/>
</xsl:if>
<d:document-info>
<d:document-name>
<xsl:value-of select="repInfo/@uri"/>
</d:document-name>
<d:document-type>
<xsl:value-of select="repInfo/format"/>
</d:document-type>
<xsl:if test="$document-path">
<d:document-path>
<xsl:value-of select="$document-path"/>
</d:document-path>
</xsl:if>
<xsl:variable name="error-count-regex" select="if ($report-warning-as-error='true') then ', (WARN|ERROR|FATAL), ' else ', (ERROR|FATAL), '"/>
<d:error-count>
<xsl:value-of select="count(repInfo/messages/message[matches(.,$error-count-regex)])"/>
</d:error-count>
<d:properties>
<xsl:if test="@name">
<xsl:call-template name="property">
<xsl:with-param name="name" select="'Tool Name'"/>
<xsl:with-param name="content" select="@name"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="@release">
<xsl:call-template name="property">
<xsl:with-param name="name" select="'Tool Version'"/>
<xsl:with-param name="content" select="@release"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="@date">
<xsl:call-template name="property">
<xsl:with-param name="name" select="'Tool Release Date'"/>
<xsl:with-param name="content" select="@date"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="repInfo/format">
<xsl:call-template name="property">
<xsl:with-param name="name" select="'Format'"/>
<xsl:with-param name="content" select="repInfo/format/text()"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="repInfo/version">
<xsl:call-template name="property">
<xsl:with-param name="name" select="'Format version'"/>
<xsl:with-param name="content" select="repInfo/version/text()"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="repInfo/status">
<xsl:call-template name="property">
<xsl:with-param name="name" select="'Status'"/>
<xsl:with-param name="content" select="repInfo/status/text()"/>
</xsl:call-template>
</xsl:if>
<xsl:apply-templates select="repInfo/properties/property"/>
</d:properties>
</d:document-info>
<d:reports>
<d:report>
<xsl:for-each select="repInfo/messages/message">
<xsl:variable name="id" select="substring-before(.,',')"/>
<xsl:variable name="severity" select="substring-after(substring-before(.,', ['),', ')">
</xsl:variable>
<xsl:variable name="message" select="substring-after(substring-before(.,']'),'[')"/>
<xsl:variable name="file" select="replace(substring-after(tokenize(.,'\]')[last()],', '),' \(.*?\)$','')"/>
<xsl:variable name="line" select="if (ends-with(.,')')) then replace(.,'.*\((\d+)-\d+\)$','$1') else ()"/>
<xsl:variable name="column" select="if (ends-with(.,')')) then replace(.,'.*\(\d+-(\d+)\)$','$1') else ()"/>
<xsl:element name="{if ($severity='FATAL' or $severity='WARN' and $report-warning-as-error='true') then 'd:error' else if ($severity='FATAL') then 'd:exception' else if ($severity=('ERROR','WARN','HINT')) then concat('d:',lower-case($severity)) else 'd:warn'}">
<d:desc>
<xsl:value-of select="concat($id,': ',$message)"/>
</d:desc>
<xsl:if test="$file">
<d:file>
<xsl:value-of select="$file"/>
</d:file>
</xsl:if>
<xsl:if test="$line or $column">
<d:location line="{$line}" column="{$column}"/>
</xsl:if>
</xsl:element>
</xsl:for-each>
</d:report>
</d:reports>
</d:document-validation-report>
</xsl:template>
<xsl:template name="property">
<xsl:param name="name"/>
<xsl:param name="content"/>
<d:property name="{$name}" content="{$content}"/>
</xsl:template>
<xsl:template match="property">
<d:property name="{name}">
<xsl:if test="values/value">
<xsl:attribute name="content" select="(values/value)[1]"/>
</xsl:if>
<xsl:apply-templates select="values/property"/>
</d:property>
</xsl:template>
</xsl:stylesheet>