Frédéric Demians
f7570c461a
tmpl_process is patched to handle properly specific XML directives. UNIMARC XSL files are modified to gain knowledge of HTML entity which isn't the case by default. It may be necessary to do the same thing for MARC21 XSL. Signed-off-by: Galen Charlton <gmcharlt@gmail.com>
302 lines
12 KiB
XML
302 lines
12 KiB
XML
<?xml version='1.0'?>
|
|
|
|
<!DOCTYPE stylesheet [<!ENTITY nbsp " " >]>
|
|
|
|
<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
|
|
|
<xsl:template name="datafield">
|
|
<xsl:param name="tag"/>
|
|
<xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param>
|
|
<xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param>
|
|
<xsl:param name="subfields"/>
|
|
<xsl:element name="datafield">
|
|
<xsl:attribute name="tag">
|
|
<xsl:value-of select="$tag"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="ind1">
|
|
<xsl:value-of select="$ind1"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="ind2">
|
|
<xsl:value-of select="$ind2"/>
|
|
</xsl:attribute>
|
|
<xsl:copy-of select="$subfields"/>
|
|
</xsl:element>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="tag_210">
|
|
<span class="results_summary">
|
|
<span class="label">Édition: </span>
|
|
<xsl:for-each select="marc:datafield[@tag=210]">
|
|
<span>
|
|
<xsl:call-template name="addClassRtl" />
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
<xsl:if test="marc:subfield[@code='b']">
|
|
<xsl:if test="marc:subfield[@code='a']">, </xsl:if>
|
|
<xsl:value-of select="marc:subfield[@code='b']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='a' or @code='b']">
|
|
<xsl:if test="marc:subfield[@code='a']"> : </xsl:if>
|
|
<xsl:value-of select="marc:subfield[@code='c']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='d']">
|
|
<xsl:if test="marc:subfield[@code='a' or @code='c']">, </xsl:if>
|
|
<xsl:value-of select="marc:subfield[@code='d']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='e']">
|
|
<xsl:if test="marc:subfield[@code='a' or @code='c' or @code='d']"> — </xsl:if>
|
|
<xsl:value-of select="marc:subfield[@code='e']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='g']">
|
|
<xsl:if test="marc:subfield[@code='e']"> : </xsl:if>
|
|
<xsl:value-of select="marc:subfield[@code='g']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='h']">
|
|
<xsl:if test="marc:subfield[@code='e' or @code='g']">, </xsl:if>
|
|
<xsl:value-of select="marc:subfield[@code='h']"/>
|
|
</xsl:if>
|
|
<xsl:if test="not (position() = last())">
|
|
<xsl:text> • </xsl:text>
|
|
</xsl:if>
|
|
</span>
|
|
</xsl:for-each>
|
|
</span>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="tag_215">
|
|
<xsl:for-each select="marc:datafield[@tag=215]">
|
|
<span class="results_summary">
|
|
<span class="label">Description: </span>
|
|
<xsl:if test="marc:subfield[@code='a']">
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='c']"> :
|
|
<xsl:value-of select="marc:subfield[@code='c']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='d']"> ;
|
|
<xsl:value-of select="marc:subfield[@code='d']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='e']"> +
|
|
<xsl:value-of select="marc:subfield[@code='e']"/>
|
|
</xsl:if>
|
|
</span>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="tag_4xx">
|
|
<xsl:for-each select="marc:datafield[@tag=464 or @tag=461]">
|
|
<span class="results_summary">
|
|
<span class="label">Extrait de: </span>
|
|
<span>
|
|
<xsl:call-template name="addClassRtl" />
|
|
<xsl:if test="marc:subfield[@code='t']">
|
|
<xsl:value-of select="marc:subfield[@code='t']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='e']"> :
|
|
<xsl:value-of select="marc:subfield[@code='e']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='f']"> /
|
|
<xsl:value-of select="marc:subfield[@code='f']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='v']">,
|
|
<xsl:value-of select="marc:subfield[@code='v']"/>
|
|
</xsl:if>
|
|
</span>
|
|
</span>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="subfieldSelect">
|
|
<xsl:param name="codes"/>
|
|
<xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
|
|
<xsl:param name="subdivCodes"/>
|
|
<xsl:param name="subdivDelimiter"/>
|
|
<xsl:variable name="str">
|
|
<xsl:for-each select="marc:subfield">
|
|
<xsl:if test="contains($codes, @code)">
|
|
<xsl:if test="contains($subdivCodes, @code)">
|
|
<xsl:value-of select="$subdivDelimiter"/>
|
|
</xsl:if>
|
|
<xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
<xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="buildSpaces">
|
|
<xsl:param name="spaces"/>
|
|
<xsl:param name="char"><xsl:text> </xsl:text></xsl:param>
|
|
<xsl:if test="$spaces>0">
|
|
<xsl:value-of select="$char"/>
|
|
<xsl:call-template name="buildSpaces">
|
|
<xsl:with-param name="spaces" select="$spaces - 1"/>
|
|
<xsl:with-param name="char" select="$char"/>
|
|
</xsl:call-template>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="chopPunctuation">
|
|
<xsl:param name="chopString"/>
|
|
<xsl:variable name="length" select="string-length($chopString)"/>
|
|
<xsl:choose>
|
|
<xsl:when test="$length=0"/>
|
|
<xsl:when test="contains('.:,;/ ', substring($chopString,$length,1))">
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
|
|
</xsl:call-template>
|
|
</xsl:when>
|
|
<xsl:when test="not($chopString)"/>
|
|
<xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:text> </xsl:text>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="addClassRtl">
|
|
<xsl:variable name="lang" select="marc:subfield[@code='7']" />
|
|
<xsl:if test="$lang = 'ha' or $lang = 'Hebrew' or $lang = 'fa' or $lang = 'Arabe'">
|
|
<xsl:attribute name="class">rtl</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="tag_title">
|
|
<xsl:param name="tag" />
|
|
<xsl:param name="label" />
|
|
<xsl:if test="marc:datafield[@tag=$tag]">
|
|
<span class="results_summary">
|
|
<span class="label"><xsl:value-of select="$label"/>: </span>
|
|
<xsl:for-each select="marc:datafield[@tag=$tag]">
|
|
<xsl:value-of select="marc:subfield[@code='a']" />
|
|
<xsl:if test="marc:subfield[@code='d']">
|
|
<xsl:text> : </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='e']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='e']">
|
|
<xsl:for-each select="marc:subfield[@code='e']">
|
|
<xsl:text> </xsl:text>
|
|
<xsl:value-of select="."/>
|
|
</xsl:for-each>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='f']">
|
|
<xsl:text> / </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='f']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='h']">
|
|
<xsl:text>, </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='h']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='i']">
|
|
<xsl:text>, </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='i']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='v']">
|
|
<xsl:text>, </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='v']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='x']">
|
|
<xsl:text>, </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='x']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='z']">
|
|
<xsl:text>, </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='z']"/>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</span>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template name="tag_subject">
|
|
<xsl:param name="tag" />
|
|
<xsl:param name="label" />
|
|
<xsl:if test="marc:datafield[@tag=$tag]">
|
|
<span class="results_summary">
|
|
<span class="label"><xsl:value-of select="$label"/>: </span>
|
|
<xsl:for-each select="marc:datafield[@tag=$tag]">
|
|
<a>
|
|
<xsl:choose>
|
|
<xsl:when test="marc:subfield[@code=9]">
|
|
<xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=su:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:call-template name="chopPunctuation">
|
|
<xsl:with-param name="chopString">
|
|
<xsl:call-template name="subfieldSelect">
|
|
<xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
|
|
<xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
|
|
<xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</a>
|
|
<xsl:if test="not (position()=last())">
|
|
<xsl:text> | </xsl:text>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</span>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template name="tag_7xx">
|
|
<xsl:param name="tag" />
|
|
<xsl:param name="label" />
|
|
<xsl:if test="marc:datafield[@tag=$tag]">
|
|
<span class="results_summary">
|
|
<span class="label"><xsl:value-of select="$label" />: </span>
|
|
<xsl:for-each select="marc:datafield[@tag=$tag]">
|
|
<span>
|
|
<xsl:call-template name="addClassRtl" />
|
|
<a>
|
|
<xsl:choose>
|
|
<xsl:when test="marc:subfield[@code=9]">
|
|
<xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='b']"/></xsl:attribute>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
<xsl:if test="marc:subfield[@code='a']">
|
|
<xsl:value-of select="marc:subfield[@code='a']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='b']">
|
|
<xsl:text>, </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='b']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='c']">
|
|
<xsl:text>, </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='c']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='d']">
|
|
<xsl:text> </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='d']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='f']">
|
|
<span dir="ltr">
|
|
<xsl:text> (</xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='f']"/>
|
|
<xsl:text>)</xsl:text>
|
|
</span>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='g']">
|
|
<xsl:text> </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='g']"/>
|
|
</xsl:if>
|
|
<xsl:if test="marc:subfield[@code='p']">
|
|
<xsl:text> </xsl:text>
|
|
<xsl:value-of select="marc:subfield[@code='p']"/>
|
|
</xsl:if>
|
|
</a>
|
|
</span>
|
|
<xsl:if test="not (position() = last())">
|
|
<xsl:text> ; </xsl:text>
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
</span>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
</xsl:stylesheet>
|