]> git.koha-community.org Git - koha.git/blob - koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl
Experimental XSLT-based display of results and details pages To enable, create two...
[koha.git] / koha-tmpl / opac-tmpl / prog / en / xslt / MARC21slim2OPACDetail.xsl
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
11     <xsl:template match="/">
12             <xsl:apply-templates/>
13     </xsl:template>
14
15     <xsl:template match="marc:record">
16         <xsl:variable name="leader" select="marc:leader"/>
17         <xsl:variable name="leader6" select="substring($leader,7,1)"/>
18         <xsl:variable name="leader7" select="substring($leader,8,1)"/>
19         <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>
20         <xsl:variable name="materialTypeCode">
21             <xsl:choose>
22                 <xsl:when test="$leader6='a'">
23                     <xsl:choose>
24                         <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
25                         <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
26                     </xsl:choose>
27                 </xsl:when>
28                 <xsl:when test="$leader6='t'">BK</xsl:when>
29                 <xsl:when test="$leader6='p'">MM</xsl:when>
30                 <xsl:when test="$leader6='m'">CF</xsl:when>
31                 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
32                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
33                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">MU</xsl:when>
34             </xsl:choose>
35         </xsl:variable>
36         <xsl:variable name="materialTypeLabel">
37             <xsl:choose>
38                 <xsl:when test="$leader6='a'">
39                     <xsl:choose>
40                         <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">Book</xsl:when>
41                         <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">Serial</xsl:when>
42                     </xsl:choose>
43                 </xsl:when>
44                 <xsl:when test="$leader6='t'">Book</xsl:when>
45                 <xsl:when test="$leader6='p'">Mixed Materials</xsl:when>
46                 <xsl:when test="$leader6='m'">Computer File</xsl:when>
47                 <xsl:when test="$leader6='e' or $leader6='f'">Map</xsl:when>
48                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">Visual Material</xsl:when>
49                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">Music</xsl:when>
50             </xsl:choose>
51         </xsl:variable>
52
53         <!-- Title Statement -->
54 <style type="text/css">
55     .label {
56         font-size: 80%;
57         color: grey;
58     }
59 </style>
60         <div id="views">
61         <xsl:if test="marc:datafield[@tag=245]">
62         <h1>
63             <xsl:for-each select="marc:datafield[@tag=245]">
64                     <xsl:call-template name="subfieldSelect">
65                         <xsl:with-param name="codes">abfghk</xsl:with-param>
66                     </xsl:call-template>
67             </xsl:for-each>
68         </h1>
69         </xsl:if>
70
71         <span class="views"><span id="Normalview">Normal View</span> <a id="MARCview" href="/cgi-bin/koha/opac-MARCdetail.pl?biblionumber={marc:datafield[@tag=999]/marc:subfield[@code='c']}">MARC View</a> <a id="ISBDview" href="/cgi-bin/koha/opac-ISBDdetail.pl?biblionumber={marc:datafield[@tag=999]/marc:subfield[@code='c']}">Card View (ISBD)</a></span>
72         </div> 
73
74         <xsl:choose>
75         <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]">
76
77         <h5 class="author">by
78         <xsl:for-each select="marc:datafield[@tag=100 or @tag=700]">
79         <a>
80         <xsl:choose>
81             <xsl:when test="marc:subfield[@code=9]">
82                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?authid=<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
83             </xsl:when>
84             <xsl:otherwise>
85             <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
86             </xsl:otherwise>
87         </xsl:choose>
88         <xsl:call-template name="nameABCDQ"/></a>
89         <xsl:choose>
90         <xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
91         </xsl:for-each>
92
93         <xsl:for-each select="marc:datafield[@tag=110 or @tag=710]">
94         <a>
95         <xsl:choose>
96             <xsl:when test="marc:subfield[@code=9]">
97                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?authid=<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
98             </xsl:when>
99             <xsl:otherwise>
100             <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>      
101             </xsl:otherwise>
102         </xsl:choose>
103         <xsl:call-template name="nameABCDN"/></a>
104         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
105         </xsl:for-each>
106
107         <xsl:for-each select="marc:datafield[@tag=111 or @tag=711]">
108         <a>
109         <xsl:choose>
110             <xsl:when test="marc:subfield[@code=9]">
111                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?authid=<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
112             </xsl:when>
113             <xsl:otherwise>
114             <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
115             </xsl:otherwise>
116         </xsl:choose>
117         <xsl:call-template name="nameACDEQ"/></a>
118         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
119
120         </xsl:for-each>
121         </h5>
122         </xsl:when>
123         </xsl:choose>
124
125         <div class="summary">
126
127         <xsl:if test="$materialTypeCode">
128         <p><span class="label">Type: </span>
129         <img src="/opac-tmpl/prog/famfamfam/{$materialTypeCode}.png"/><xsl:value-of select="$materialTypeLabel"/>
130         </p>
131         </xsl:if>
132         <xsl:if test="marc:datafield[@tag=440 or @tag=490]">
133         <p><span class="label">Series: </span>
134         <xsl:for-each select="marc:datafield[@tag=440]">
135             <xsl:call-template name="chopPunctuation">
136                             <xsl:with-param name="chopString">
137                                 <xsl:call-template name="subfieldSelect">
138                                     <xsl:with-param name="codes">av</xsl:with-param>
139                                 </xsl:call-template>
140                             </xsl:with-param>
141                         </xsl:call-template>
142                     <xsl:call-template name="part"/>
143             <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
144         </xsl:for-each>
145
146         <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
147              <a href="/cgi-bin/koha/opac-search.pl?se:{marc:subfield[@code='a']}">
148                         <xsl:call-template name="chopPunctuation">
149                             <xsl:with-param name="chopString">
150                                 <xsl:call-template name="subfieldSelect">
151                                     <xsl:with-param name="codes">av</xsl:with-param>
152                                 </xsl:call-template>
153                             </xsl:with-param>
154                         </xsl:call-template>
155             </a>
156                     <xsl:call-template name="part"/>
157         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
158         </xsl:for-each>
159         </p>
160         </xsl:if>
161         <xsl:if test="marc:datafield[@tag=260]">
162         <p><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>
166                     </xsl:call-template>
167             </xsl:for-each>
168         </p> 
169         </xsl:if>
170         <xsl:if test="marc:datafield[@tag=020]">
171         <p><span class="label">ISBN: </span>
172         <xsl:for-each select="marc:datafield[@tag=020]">
173                 <xsl:value-of select="marc:subfield[@code='a']"/>
174         </xsl:for-each>
175         </p>
176         </xsl:if>
177
178         <xsl:if test="marc:datafield[@tag=022]">
179         <p><span class="label">ISSN: </span>
180         <xsl:for-each select="marc:datafield[@tag=022]">
181                 <xsl:value-of select="marc:subfield[@code='a']"/>
182         </xsl:for-each>
183         </p>
184         </xsl:if>
185
186         <xsl:if test="marc:datafield[@tag=130]|marc:datafield[@tag=240]|marc:datafield[@tag=730][@ind2!=2]">
187         <p><span class="label">Uniform titles: </span>
188         <xsl:for-each select="marc:datafield[@tag=130]|marc:datafield[@tag=240]|marc:datafield[@tag=730][@ind2!=2]">
189             <xsl:variable name="str">
190                 <xsl:for-each select="marc:subfield">
191                     <xsl:if test="(contains('adfklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
192                         <xsl:value-of select="text()"/>
193                         <xsl:text> </xsl:text>
194                      </xsl:if>
195                 </xsl:for-each>
196             </xsl:variable>
197             <xsl:call-template name="chopPunctuation">
198                 <xsl:with-param name="chopString">
199                     <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
200                         
201                 </xsl:with-param>
202             </xsl:call-template>
203         </xsl:for-each>
204         </p>
205         </xsl:if>
206
207         <xsl:if test="marc:datafield[@tag=650]">
208             <p><span class="label">Related Subjects: </span>
209             <xsl:for-each select="marc:datafield[@tag=650]">
210             <a>
211             <xsl:choose>
212             <xsl:when test="marc:subfield[@code=9]">
213                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?authid=<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
214             </xsl:when>
215             <xsl:otherwise>
216                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=su:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
217             </xsl:otherwise>
218         </xsl:choose>
219             <xsl:call-template name="chopPunctuation">
220                 <xsl:with-param name="chopString">
221                     <xsl:call-template name="subfieldSelect">
222                         <xsl:with-param name="codes">abcdvxyz</xsl:with-param>
223                     </xsl:call-template>
224                 </xsl:with-param>
225             </xsl:call-template>
226             </a>
227             <xsl:choose>
228             <xsl:when test="position()=last()"></xsl:when>
229             <xsl:otherwise> | </xsl:otherwise>
230             </xsl:choose>
231
232             </xsl:for-each>
233             </p>
234         </xsl:if>
235
236         <xsl:if test="marc:datafield[@tag=856]">
237         <p><span class="label">Online Resources: </span>
238         <xsl:for-each select="marc:datafield[@tag=856]">
239             <a><xsl:attribute name="href"> <xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
240             <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
241                     <xsl:call-template name="subfieldSelect">
242                         <xsl:with-param name="codes">y3z</xsl:with-param>
243                     </xsl:call-template>
244             </xsl:if></a>
245             <xsl:choose>
246             <xsl:when test="position()=last()"></xsl:when>
247             <xsl:otherwise> | </xsl:otherwise>
248             </xsl:choose>
249             
250         </xsl:for-each>
251         </p>
252         </xsl:if>
253
254         <!-- 780 -->
255         <xsl:if test="marc:datafield[@tag=780]/marc:subfield[@code='a']">
256         <xsl:for-each select="marc:datafield[@tag=780]">
257         <p><span class="label">
258         <xsl:choose>
259         <xsl:when test="@ind2=0">
260             Continues:
261         </xsl:when>
262         <xsl:when test="@ind2=1">
263             Continues in part:
264         </xsl:when>
265         <xsl:when test="@ind2=2">
266             Supersedes:
267         </xsl:when>
268         <xsl:when test="@ind2=3">
269             Supersedes in part:
270         </xsl:when>
271         <xsl:when test="@ind2=4">
272             Formed by the union: ... and: ...
273         </xsl:when>
274         <xsl:when test="@ind2=5">
275             Absorbed:
276         </xsl:when>
277         <xsl:when test="@ind2=6">
278             Absorbed in part:
279         </xsl:when>
280         <xsl:when test="@ind2=7">
281             Separated from:
282         </xsl:when>
283         </xsl:choose>
284         </span>
285             <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="marc:subfield[@code='t']"/></xsl:attribute>
286                     <xsl:call-template name="subfieldSelect">
287                         <xsl:with-param name="codes">atxwg</xsl:with-param>
288                     </xsl:call-template>
289             </a>
290         </p>
291         <xsl:choose>
292         <xsl:when test="@ind1=0">
293             <p><xsl:value-of select="marc:subfield[@code='n']"/></p>
294         </xsl:when>
295         </xsl:choose>
296
297         </xsl:for-each>
298         </xsl:if>
299
300         </div>
301
302     </xsl:template>
303
304     <xsl:template name="nameABCDQ">
305             <xsl:call-template name="chopPunctuation">
306                 <xsl:with-param name="chopString">
307                     <xsl:call-template name="subfieldSelect">
308                         <xsl:with-param name="codes">aq</xsl:with-param>
309                     </xsl:call-template>
310                 </xsl:with-param>
311                 <xsl:with-param name="punctuation">
312                     <xsl:text>:,;/ </xsl:text>
313                 </xsl:with-param>
314             </xsl:call-template>
315         <xsl:call-template name="termsOfAddress"/>
316     </xsl:template>
317
318     <xsl:template name="nameABCDN">
319         <xsl:for-each select="marc:subfield[@code='a']">
320                 <xsl:call-template name="chopPunctuation">
321                     <xsl:with-param name="chopString" select="."/>
322                 </xsl:call-template>
323         </xsl:for-each>
324         <xsl:for-each select="marc:subfield[@code='b']">
325                 <xsl:value-of select="."/>
326         </xsl:for-each>
327         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
328                 <xsl:call-template name="subfieldSelect">
329                     <xsl:with-param name="codes">cdn</xsl:with-param>
330                 </xsl:call-template>
331         </xsl:if>
332     </xsl:template>
333
334     <xsl:template name="nameACDEQ">
335             <xsl:call-template name="subfieldSelect">
336                 <xsl:with-param name="codes">acdeq</xsl:with-param>
337             </xsl:call-template>
338     </xsl:template>
339     <xsl:template name="termsOfAddress">
340         <xsl:if test="marc:subfield[@code='b' or @code='c']">
341             <xsl:call-template name="chopPunctuation">
342                 <xsl:with-param name="chopString">
343                     <xsl:call-template name="subfieldSelect">
344                         <xsl:with-param name="codes">bc</xsl:with-param>
345                     </xsl:call-template>
346                 </xsl:with-param>
347             </xsl:call-template>
348         </xsl:if>
349     </xsl:template>
350
351     <xsl:template name="part">
352         <xsl:variable name="partNumber">
353             <xsl:call-template name="specialSubfieldSelect">
354                 <xsl:with-param name="axis">n</xsl:with-param>
355                 <xsl:with-param name="anyCodes">n</xsl:with-param>
356                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
357             </xsl:call-template>
358         </xsl:variable>
359         <xsl:variable name="partName">
360             <xsl:call-template name="specialSubfieldSelect">
361                 <xsl:with-param name="axis">p</xsl:with-param>
362                 <xsl:with-param name="anyCodes">p</xsl:with-param>
363                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
364             </xsl:call-template>
365         </xsl:variable>
366         <xsl:if test="string-length(normalize-space($partNumber))">
367                 <xsl:call-template name="chopPunctuation">
368                     <xsl:with-param name="chopString" select="$partNumber"/>
369                 </xsl:call-template>
370         </xsl:if>
371         <xsl:if test="string-length(normalize-space($partName))">
372                 <xsl:call-template name="chopPunctuation">
373                     <xsl:with-param name="chopString" select="$partName"/>
374                 </xsl:call-template>
375         </xsl:if>
376     </xsl:template>
377
378     <xsl:template name="specialSubfieldSelect">
379         <xsl:param name="anyCodes"/>
380         <xsl:param name="axis"/>
381         <xsl:param name="beforeCodes"/>
382         <xsl:param name="afterCodes"/>
383         <xsl:variable name="str">
384             <xsl:for-each select="marc:subfield">
385                 <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])">
386                     <xsl:value-of select="text()"/>
387                     <xsl:text> </xsl:text>
388                 </xsl:if>
389             </xsl:for-each>
390         </xsl:variable>
391         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
392     </xsl:template>
393 </xsl:stylesheet>