1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- $Id: MARC21slim2DC.xsl,v 1.1 2003/01/06 08:20:27 adam Exp $ -->
3 <xsl:stylesheet version="1.0"
4 xmlns:marc="http://www.loc.gov/MARC21/slim"
5 xmlns:items="http://www.koha.org/items"
6 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
7 exclude-result-prefixes="marc items">
8 <xsl:import href="MARC21slimUtils.xsl"/>
9 <xsl:output method="html" indent="yes"/>
10 <xsl:key name="item-by-status" match="items:item" use="items:status"/>
11 <xsl:key name="item-by-status-and-branch" match="items:item" use="concat(items:status, ' ', items:homebranch)"/>
13 <xsl:template match="/">
14 <xsl:apply-templates/>
16 <xsl:template match="marc:record">
17 <xsl:variable name="leader" select="marc:leader"/>
18 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
19 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
20 <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>
21 <xsl:variable name="materialTypeCode">
23 <xsl:when test="$leader6='a'">
25 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
26 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
29 <xsl:when test="$leader6='t'">BK</xsl:when>
30 <xsl:when test="$leader6='p'">MM</xsl:when>
31 <xsl:when test="$leader6='m'">CF</xsl:when>
32 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
33 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
34 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">MU</xsl:when>
37 <xsl:variable name="materialTypeLabel">
39 <xsl:when test="$leader6='a'">
41 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">Book</xsl:when>
42 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">Serial</xsl:when>
45 <xsl:when test="$leader6='t'">Book</xsl:when>
46 <xsl:when test="$leader6='p'">Mixed Materials</xsl:when>
47 <xsl:when test="$leader6='m'">Computer File</xsl:when>
48 <xsl:when test="$leader6='e' or $leader6='f'">Map</xsl:when>
49 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">Visual Material</xsl:when>
50 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">Music</xsl:when>
54 <style type="text/css">
60 border-bottom: 1px solid #ddd; padding: 6px 5px; vertical-align: top;
68 <input type="checkbox" id="bib{marc:datafield[@tag=999]/marc:subfield[@code='c']}" name="biblionumber" value="{marc:datafield[@tag=999]/marc:subfield[@code='c']}" title="Click to add to cart" /> <label for="bib{marc:datafield[@tag=999]/marc:subfield[@code='c']}"></label>
71 <a><xsl:attribute name="href">/cgi-bin/koha/opac-detail.pl?biblionumber=<xsl:value-of select="marc:datafield[@tag=999]/marc:subfield[@code='c']"/></xsl:attribute>
73 <xsl:if test="marc:datafield[@tag=245]">
74 <xsl:for-each select="marc:datafield[@tag=245]">
75 <xsl:variable name="title">
77 <xsl:when test="marc:subfield[@code='b']">
78 <xsl:call-template name="specialSubfieldSelect">
79 <xsl:with-param name="axis">b</xsl:with-param>
80 <xsl:with-param name="beforeCodes">afghk</xsl:with-param>
84 <xsl:call-template name="subfieldSelect">
85 <xsl:with-param name="codes">abfgk</xsl:with-param>
90 <xsl:variable name="titleChop">
91 <xsl:call-template name="chopPunctuation">
92 <xsl:with-param name="chopString">
93 <xsl:value-of select="$title"/>
97 <xsl:value-of select="$titleChop"/>
98 <xsl:if test="marc:subfield[@code='b']">
99 <xsl:text> : </xsl:text>
100 <xsl:call-template name="chopPunctuation">
101 <xsl:with-param name="chopString">
102 <xsl:call-template name="specialSubfieldSelect">
103 <xsl:with-param name="axis">b</xsl:with-param>
104 <xsl:with-param name="anyCodes">b</xsl:with-param>
105 <xsl:with-param name="afterCodes">afghk</xsl:with-param>
110 <xsl:call-template name="part"/>
117 <xsl:when test="marc:datafield[@tag=100] or marc:datafield[@tag=110] or marc:datafield[@tag=111] or marc:datafield[@tag=700] or marc:datafield[@tag=710] or marc:datafield[@tag=711]">
120 <xsl:for-each select="marc:datafield[@tag=100 or @tag=700]">
122 <xsl:when test="position()=last()">
123 <xsl:call-template name="nameABCDQ"/>.
126 <xsl:call-template name="nameABCDQ"/>;
131 <xsl:for-each select="marc:datafield[@tag=110 or @tag=710]">
133 <xsl:when test="position()=last()">
134 <xsl:call-template name="nameABCDN"/>.
137 <xsl:call-template name="nameABCDN"/>;
142 <xsl:for-each select="marc:datafield[@tag=111 or @tag=711]">
144 <xsl:when test="position()=last()">
145 <xsl:call-template name="nameACDEQ"/>.
148 <xsl:call-template name="nameACDEQ"/>;
156 <span class="results_summary">
157 <xsl:if test="$materialTypeCode">
158 <span class="label">Type: </span>
159 <img src="/opac-tmpl/prog/famfamfam/{$materialTypeCode}.png"/><xsl:value-of select="$materialTypeLabel"/><br/>
161 <xsl:if test="marc:datafield[@tag=260]">
162 <span class="label">Publisher: </span>
163 <xsl:for-each select="marc:datafield[@tag=260]">
164 <xsl:call-template name="subfieldSelect">
165 <xsl:with-param name="codes">bcg</xsl:with-param>
171 <div class="holdings_summary">
172 <xsl:if test="count(key('item-by-status', 'available'))>0">
173 <span class="available">
174 <xsl:text>Copies available at: </xsl:text>
175 <xsl:variable name="available_items"
176 select="key('item-by-status', 'available')"/>
177 <xsl:for-each select="$available_items[generate-id() = generate-id(key('item-by-status-and-branch', concat(items:status, ' ', items:homebranch))[1])]">
178 <xsl:value-of select="items:homebranch"/>
179 <xsl:text> (</xsl:text>
180 <xsl:value-of select="count(key('item-by-status-and-branch', concat(items:status, ' ', items:homebranch)))"/>
181 <xsl:text>) </xsl:text>
185 <xsl:if test="count(key('item-by-status', 'On loan'))>0">
186 <span class="unavailable">
187 <xsl:text>On loan (</xsl:text>
188 <xsl:value-of select="count(key('item-by-status', 'On loan'))"/>
189 <xsl:text>)</xsl:text>
195 <xsl:template name="nameABCDQ">
196 <xsl:call-template name="chopPunctuation">
197 <xsl:with-param name="chopString">
198 <xsl:call-template name="subfieldSelect">
199 <xsl:with-param name="codes">aq</xsl:with-param>
202 <xsl:with-param name="punctuation">
203 <xsl:text>:,;/ </xsl:text>
206 <xsl:call-template name="termsOfAddress"/>
209 <xsl:template name="nameABCDN">
210 <xsl:for-each select="marc:subfield[@code='a']">
211 <xsl:call-template name="chopPunctuation">
212 <xsl:with-param name="chopString" select="."/>
215 <xsl:for-each select="marc:subfield[@code='b']">
216 <xsl:value-of select="."/>
218 <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
219 <xsl:call-template name="subfieldSelect">
220 <xsl:with-param name="codes">cdn</xsl:with-param>
225 <xsl:template name="nameACDEQ">
226 <xsl:call-template name="subfieldSelect">
227 <xsl:with-param name="codes">acdeq</xsl:with-param>
231 <xsl:template name="termsOfAddress">
232 <xsl:if test="marc:subfield[@code='b' or @code='c']">
233 <xsl:call-template name="chopPunctuation">
234 <xsl:with-param name="chopString">
235 <xsl:call-template name="subfieldSelect">
236 <xsl:with-param name="codes">bc</xsl:with-param>
243 <xsl:template name="nameDate">
244 <xsl:for-each select="marc:subfield[@code='d']">
245 <xsl:call-template name="chopPunctuation">
246 <xsl:with-param name="chopString" select="."/>
251 <xsl:template name="role">
252 <xsl:for-each select="marc:subfield[@code='e']">
253 <xsl:value-of select="."/>
255 <xsl:for-each select="marc:subfield[@code='4']">
256 <xsl:value-of select="."/>
260 <xsl:template name="specialSubfieldSelect">
261 <xsl:param name="anyCodes"/>
262 <xsl:param name="axis"/>
263 <xsl:param name="beforeCodes"/>
264 <xsl:param name="afterCodes"/>
265 <xsl:variable name="str">
266 <xsl:for-each select="marc:subfield">
267 <xsl:if test="contains($anyCodes, @code) or (contains($beforeCodes,@code) and following-sibling::marc:subfield[@code=$axis]) or (contains($afterCodes,@code) and preceding-sibling::marc:subfield[@code=$axis])">
268 <xsl:value-of select="text()"/>
269 <xsl:text> </xsl:text>
273 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
276 <xsl:template name="subtitle">
277 <xsl:if test="marc:subfield[@code='b']">
278 <xsl:call-template name="chopPunctuation">
279 <xsl:with-param name="chopString">
280 <xsl:value-of select="marc:subfield[@code='b']"/>
282 <!--<xsl:call-template name="subfieldSelect">
283 <xsl:with-param name="codes">b</xsl:with-param>
284 </xsl:call-template>-->
290 <xsl:template name="part">
291 <xsl:variable name="partNumber">
292 <xsl:call-template name="specialSubfieldSelect">
293 <xsl:with-param name="axis">n</xsl:with-param>
294 <xsl:with-param name="anyCodes">n</xsl:with-param>
295 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
298 <xsl:variable name="partName">
299 <xsl:call-template name="specialSubfieldSelect">
300 <xsl:with-param name="axis">p</xsl:with-param>
301 <xsl:with-param name="anyCodes">p</xsl:with-param>
302 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
305 <xsl:if test="string-length(normalize-space($partNumber))">
306 <xsl:call-template name="chopPunctuation">
307 <xsl:with-param name="chopString" select="$partNumber"/>
310 <xsl:if test="string-length(normalize-space($partName))">
311 <xsl:if test="string-length(normalize-space($partName))">
312 <xsl:call-template name="chopPunctuation">
313 <xsl:with-param name="chopString" select="$partName"/>