Merge remote branch 'kc/new/bug_5370' into kcmaster
[koha.git] / koha-tmpl / opac-tmpl / prog / en / xslt / UNIMARCslim2OPACDetail.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <!DOCTYPE stylesheet [<!ENTITY nbsp "&#160;" >]>
4
5 <xsl:stylesheet version="1.0"
6   xmlns:marc="http://www.loc.gov/MARC21/slim"
7   xmlns:items="http://www.koha-community.org/items"
8   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
9   exclude-result-prefixes="marc items">
10
11 <xsl:import href="UNIMARCslimUtils.xsl"/>
12 <xsl:output method = "xml" indent="yes" omit-xml-declaration = "yes" />
13 <xsl:template match="/">
14   <xsl:apply-templates/>
15 </xsl:template>
16
17 <xsl:template match="marc:record">
18   <xsl:variable name="leader" select="marc:leader"/>
19   <xsl:variable name="leader6" select="substring($leader,7,1)"/>
20   <xsl:variable name="leader7" select="substring($leader,8,1)"/>
21   <xsl:variable name="biblionumber" select="marc:datafield[@tag=090]/marc:subfield[@code='a']"/>
22
23
24   <xsl:if test="marc:datafield[@tag=200]">
25     <xsl:for-each select="marc:datafield[@tag=200]">
26       <h1>
27         <xsl:call-template name="addClassRtl" />
28         <xsl:variable name="title" select="marc:subfield[@code='a']"/>
29         <xsl:variable name="ntitle"
30          select="translate($title, '&#x0098;&#x009C;','')"/>
31         <xsl:value-of select="$ntitle" />
32         <xsl:if test="marc:subfield[@code='e']">
33           <xsl:text> : </xsl:text>
34           <xsl:for-each select="marc:subfield[@code='e']">
35             <xsl:value-of select="."/>
36           </xsl:for-each>
37         </xsl:if>
38         <xsl:if test="marc:subfield[@code='b']">
39           <xsl:text> [</xsl:text>
40           <xsl:value-of select="marc:subfield[@code='b']"/>
41           <xsl:text>]</xsl:text>
42         </xsl:if>
43         <xsl:if test="marc:subfield[@code='f']">
44           <xsl:text> / </xsl:text>
45           <xsl:value-of select="marc:subfield[@code='f']"/>
46         </xsl:if>
47         <xsl:if test="marc:subfield[@code='g']">
48           <xsl:text> ; </xsl:text>
49           <xsl:value-of select="marc:subfield[@code='g']"/>
50         </xsl:if>
51       </h1>
52     </xsl:for-each>
53   </xsl:if>
54
55   <div id="views">
56     <span class="view">
57       <span id="Normalview">Normal View</span>
58     </span>
59     <span class="view">
60       <a id="MARCviewPop" href="/cgi-bin/koha/opac-showmarc.pl?id={marc:datafield[@tag=090]/marc:subfield[@code='a']}" title="MARC" rel="gb_page_center[600,500]">MARC View</a>
61     </span>
62     <span class="view">
63       <a id="MARCview" href="/cgi-bin/koha/opac-MARCdetail.pl?biblionumber={marc:datafield[@tag=090]/marc:subfield[@code='a']}" title="MARC">Expanded MARC View</a>
64     </span>
65     <span class="view">
66       <a id="ISBDview" href="/cgi-bin/koha/opac-ISBDdetail.pl?biblionumber={marc:datafield[@tag=090]/marc:subfield[@code='a']}">Card View (ISBD)</a>
67     </span>
68   </div>
69
70   <xsl:call-template name="tag_4xx" />
71
72   <xsl:call-template name="tag_7xx">
73     <xsl:with-param name="tag">700</xsl:with-param>
74     <xsl:with-param name="label">Auteur principal</xsl:with-param>
75   </xsl:call-template>
76
77   <xsl:call-template name="tag_7xx">
78     <xsl:with-param name="tag">710</xsl:with-param>
79     <xsl:with-param name="label">Collectivité principale</xsl:with-param>
80   </xsl:call-template>
81
82   <xsl:call-template name="tag_7xx">
83     <xsl:with-param name="tag">701</xsl:with-param>
84     <xsl:with-param name="label">Co-auteur</xsl:with-param>
85   </xsl:call-template>
86
87   <xsl:call-template name="tag_7xx">
88     <xsl:with-param name="tag">702</xsl:with-param>
89     <xsl:with-param name="label">Auteur</xsl:with-param>
90   </xsl:call-template>
91
92   <xsl:call-template name="tag_7xx">
93     <xsl:with-param name="tag">711</xsl:with-param>
94     <xsl:with-param name="label">Collectivité co-auteur</xsl:with-param>
95   </xsl:call-template>
96
97   <xsl:call-template name="tag_7xx">
98     <xsl:with-param name="tag">712</xsl:with-param>
99     <xsl:with-param name="label">Collectivité secondaire</xsl:with-param>
100   </xsl:call-template>
101
102   <xsl:if test="marc:datafield[@tag=101]">
103           <span class="results_summary">
104       <span class="label">Langue: </span>
105       <xsl:for-each select="marc:datafield[@tag=101]">
106         <xsl:for-each select="marc:subfield">
107           <xsl:choose>
108             <xsl:when test="@code='b'">de la trad. intermédiaire, </xsl:when>
109             <xsl:when test="@code='c'">de l'œuvre originale, </xsl:when>
110             <xsl:when test="@code='d'">du résumé, </xsl:when>
111             <xsl:when test="@code='e'">de la table des matières, </xsl:when>
112             <xsl:when test="@code='f'">de la page de titre, </xsl:when>
113             <xsl:when test="@code='g'">du titre propre, </xsl:when>
114             <xsl:when test="@code='h'">d'un livret, </xsl:when>
115             <xsl:when test="@code='i'">des textes d'accompagnement, </xsl:when>
116             <xsl:when test="@code='j'">des sous-titres, </xsl:when>
117           </xsl:choose>
118           <xsl:value-of select="text()"/>
119           <xsl:choose>
120             <xsl:when test="position()=last()">
121               <xsl:text>.</xsl:text>
122             </xsl:when>
123             <xsl:otherwise>
124               <xsl:text> ; </xsl:text>
125             </xsl:otherwise>
126           </xsl:choose>
127         </xsl:for-each>
128       </xsl:for-each>
129     </span>
130   </xsl:if>
131
132   <xsl:if test="marc:datafield[@tag=102]">
133           <span class="results_summary">
134       <span class="label">Pays: </span>
135       <xsl:for-each select="marc:datafield[@tag=102]">
136         <xsl:for-each select="marc:subfield">
137           <xsl:value-of select="text()"/>
138           <xsl:choose>
139             <xsl:when test="position()=last()">
140               <xsl:text>.</xsl:text>
141             </xsl:when>
142               <xsl:otherwise><xsl:text>, </xsl:text>
143             </xsl:otherwise>
144           </xsl:choose>
145         </xsl:for-each>
146       </xsl:for-each>
147     </span>
148   </xsl:if>
149
150   <xsl:call-template name="tag_210" />
151
152   <xsl:call-template name="tag_215" />
153
154   <xsl:if test="marc:datafield[@tag=010]/marc:subfield[@code='a']">
155     <span class="results_summary"><span class="label">ISBN: </span>
156     <xsl:for-each select="marc:datafield[@tag=010]">
157       <xsl:variable name="isbn" select="marc:subfield[@code='a']"/>
158       <xsl:value-of select="marc:subfield[@code='a']"/>
159       <xsl:choose>
160         <xsl:when test="position()=last()">
161           <xsl:text>.</xsl:text>
162         </xsl:when>
163         <xsl:otherwise>
164           <xsl:text> ; </xsl:text>
165         </xsl:otherwise>
166       </xsl:choose>
167     </xsl:for-each>
168     </span>
169   </xsl:if>
170
171   <xsl:if test="marc:datafield[@tag=011]">
172     <span class="results_summary">
173       <span class="label">ISSN: </span>
174       <xsl:for-each select="marc:datafield[@tag=011]">
175         <xsl:value-of select="marc:subfield[@code='a']"/>
176         <xsl:choose>
177           <xsl:when test="position()=last()">
178             <xsl:text>.</xsl:text>
179           </xsl:when>
180           <xsl:otherwise>
181             <xsl:text>; </xsl:text>
182           </xsl:otherwise>
183         </xsl:choose>
184       </xsl:for-each>
185     </span>
186   </xsl:if>
187
188   <xsl:call-template name="tag_title">
189     <xsl:with-param name="tag">225</xsl:with-param>
190     <xsl:with-param name="label">Collection</xsl:with-param>
191   </xsl:call-template>
192
193   <xsl:if test="marc:datafield[@tag=676]">
194     <span class="results_summary">
195     <span class="label">Dewey: </span>
196       <xsl:for-each select="marc:datafield[@tag=676]">
197         <xsl:value-of select="marc:subfield[@code='a']"/>
198         <xsl:if test="marc:subfield[@code='v']">
199           <xsl:text>, </xsl:text>
200           <xsl:value-of select="marc:subfield[@code='v']"/>
201         </xsl:if>
202         <xsl:if test="marc:subfield[@code='z']">
203           <xsl:text>, </xsl:text>
204           <xsl:value-of select="marc:subfield[@code='z']"/>
205         </xsl:if>
206         <xsl:if test="not (position()=last())">
207           <xsl:text> ; </xsl:text>
208         </xsl:if>
209       </xsl:for-each>
210     </span>
211   </xsl:if>
212
213   <xsl:if test="marc:datafield[@tag=686]">
214     <span class="results_summary">
215     <span class="label">Classification: </span>
216       <xsl:for-each select="marc:datafield[@tag=686]">
217         <xsl:value-of select="marc:subfield[@code='a']"/>
218         <xsl:if test="marc:subfield[@code='b']">
219           <xsl:text>, </xsl:text>
220           <xsl:value-of select="marc:subfield[@code='b']"/>
221         </xsl:if>
222         <xsl:if test="marc:subfield[@code='c']">
223           <xsl:text>, </xsl:text>
224           <xsl:value-of select="marc:subfield[@code='c']"/>
225         </xsl:if>
226         <xsl:if test="not (position()=last())"><xsl:text> ; </xsl:text></xsl:if>
227       </xsl:for-each>
228     </span>
229   </xsl:if>
230
231   <xsl:if test="marc:datafield[@tag=327]">
232     <span class="results_summary">
233       <span class="label">Note de contenu: </span>
234       <xsl:for-each select="marc:datafield[@tag=327]">
235         <xsl:call-template name="chopPunctuation">
236           <xsl:with-param name="chopString">
237             <xsl:call-template name="subfieldSelect">
238                 <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
239                 <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
240                 <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
241             </xsl:call-template>
242           </xsl:with-param>
243         </xsl:call-template>
244       </xsl:for-each>
245     </span>
246   </xsl:if>
247
248   <xsl:if test="marc:datafield[@tag=330]">
249     <span class="results_summary">
250       <span class="label">Résumé: </span>
251       <xsl:for-each select="marc:datafield[@tag=330]">
252         <xsl:value-of select="marc:subfield[@code='a']"/>
253         <xsl:choose>
254           <xsl:when test="position()=last()">
255             <xsl:text>.</xsl:text>
256           </xsl:when>
257           <xsl:otherwise>
258             <xsl:text>; </xsl:text>
259           </xsl:otherwise>
260         </xsl:choose>
261       </xsl:for-each>
262     </span>
263   </xsl:if>
264
265   <xsl:if test="marc:datafield[@tag=317]">
266     <span class="results_summary">
267       <span class="label">Note sur la provenance: </span>
268       <xsl:for-each select="marc:datafield[@tag=317]">
269           <xsl:value-of select="marc:subfield[@code='a']"/>
270       </xsl:for-each>
271     </span>
272   </xsl:if>
273
274   <xsl:if test="marc:datafield[@tag=320]">
275     <span class="results_summary">
276       <span class="label">Bibliographie: </span>
277       <xsl:for-each select="marc:datafield[@tag=320]">
278         <xsl:value-of select="marc:subfield[@code='a']"/>
279         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
280       </xsl:for-each>
281     </span>
282   </xsl:if>
283
284   <xsl:if test="marc:datafield[@tag=328]">
285     <span class="results_summary">
286       <span class="label">Thèse: </span>
287       <xsl:for-each select="marc:datafield[@tag=328]">
288         <xsl:value-of select="marc:subfield[@code='a']"/>
289         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
290       </xsl:for-each>
291     </span>
292   </xsl:if>
293
294   <xsl:if test="marc:datafield[@tag=333]">
295     <span class="results_summary">
296       <span class="label">Public: </span>
297       <xsl:for-each select="marc:datafield[@tag=333]">
298         <xsl:value-of select="marc:subfield[@code='a']"/>
299         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
300       </xsl:for-each>
301     </span>
302   </xsl:if>
303
304   <xsl:if test="marc:datafield[@tag=955]">
305     <span class="results_summary">
306       <span class="label">SUDOC serial history: </span>
307       <xsl:for-each select="marc:datafield[@tag=955]">
308         <xsl:value-of select="marc:subfield[@code='9']"/>:
309         <xsl:value-of select="marc:subfield[@code='r']"/>
310         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
311       </xsl:for-each>
312     </span>
313   </xsl:if>
314
315   <xsl:if test="marc:datafield[@tag=955]">
316     <span class="results_summary">
317       <span class="label">SUDOC serial history: </span>
318       <xsl:for-each select="marc:datafield[@tag=955]">
319         <xsl:value-of select="marc:subfield[@code='9']"/>:
320         <xsl:value-of select="marc:subfield[@code='r']"/>
321         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
322       </xsl:for-each>
323     </span>
324   </xsl:if>
325
326   <xsl:call-template name="tag_subject">
327     <xsl:with-param name="tag">600</xsl:with-param>
328     <xsl:with-param name="label">Sujet - Nom de personne</xsl:with-param>
329   </xsl:call-template>
330
331   <xsl:call-template name="tag_subject">
332     <xsl:with-param name="tag">601</xsl:with-param>
333     <xsl:with-param name="label">Sujet - Collectivité</xsl:with-param>
334   </xsl:call-template>
335
336   <xsl:call-template name="tag_subject">
337     <xsl:with-param name="tag">602</xsl:with-param>
338     <xsl:with-param name="label">Sujet - Famille</xsl:with-param>
339   </xsl:call-template>
340
341   <xsl:call-template name="tag_subject">
342     <xsl:with-param name="tag">604</xsl:with-param>
343     <xsl:with-param name="label">Sujet - Auteur/titre</xsl:with-param>
344   </xsl:call-template>
345
346   <xsl:call-template name="tag_subject">
347     <xsl:with-param name="tag">606</xsl:with-param>
348     <xsl:with-param name="label">Sujet - Nom commun</xsl:with-param>
349   </xsl:call-template>
350
351   <xsl:call-template name="tag_subject">
352     <xsl:with-param name="tag">607</xsl:with-param>
353     <xsl:with-param name="label">Sujet - Nom géographique</xsl:with-param>
354   </xsl:call-template>
355
356   <xsl:call-template name="tag_subject">
357     <xsl:with-param name="tag">608</xsl:with-param>
358     <xsl:with-param name="label">Sujet - Forme</xsl:with-param>
359   </xsl:call-template>
360
361   <xsl:call-template name="tag_subject">
362     <xsl:with-param name="tag">610</xsl:with-param>
363     <xsl:with-param name="label">Sujet</xsl:with-param>
364   </xsl:call-template>
365
366   <xsl:call-template name="tag_subject">
367     <xsl:with-param name="tag">615</xsl:with-param>
368     <xsl:with-param name="label">Catégorie sujet</xsl:with-param>
369   </xsl:call-template>
370
371   <xsl:call-template name="tag_subject">
372     <xsl:with-param name="tag">616</xsl:with-param>
373     <xsl:with-param name="label">Marque déposée</xsl:with-param>
374   </xsl:call-template>
375
376   <xsl:if test="marc:datafield[@tag=856]">
377     <span class="results_summary">
378       <span class="label">Online Resources: </span>
379       <xsl:for-each select="marc:datafield[@tag=856]">
380         <a>
381           <xsl:attribute name="href">
382             <xsl:value-of select="marc:subfield[@code='u']"/>
383           </xsl:attribute>
384           <xsl:choose>
385             <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
386               <xsl:call-template name="subfieldSelect">
387                 <xsl:with-param name="codes">y3z</xsl:with-param>
388               </xsl:call-template>
389             </xsl:when>
390             <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
391               Click here to access online
392             </xsl:when>
393           </xsl:choose>
394         </a>
395         <xsl:choose>
396           <xsl:when test="position()=last()"></xsl:when>
397           <xsl:otherwise> | </xsl:otherwise>
398         </xsl:choose>
399       </xsl:for-each>
400     </span>
401   </xsl:if>
402
403         <!-- 780 -->
404         <xsl:if test="marc:datafield[@tag=780]">
405         <xsl:for-each select="marc:datafield[@tag=780]">
406         <span class="results_summary">
407         <xsl:choose>
408         <xsl:when test="@ind2=0">
409             <span class="label">Continues:</span>
410         </xsl:when>
411         <xsl:when test="@ind2=1">
412             <span class="label">Continues in part:</span>
413         </xsl:when>
414         <xsl:when test="@ind2=2">
415             <span class="label">Supersedes:</span>
416         </xsl:when>
417         <xsl:when test="@ind2=3">
418             <span class="label">Supersedes in part:</span>
419         </xsl:when>
420         <xsl:when test="@ind2=4">
421             <span class="label">Formed by the union: ... and: ...</span>
422         </xsl:when>
423         <xsl:when test="@ind2=5">
424             <span class="label">Absorbed:</span>
425         </xsl:when>
426         <xsl:when test="@ind2=6">
427             <span class="label">Absorbed in part:</span>
428         </xsl:when>
429         <xsl:when test="@ind2=7">
430             <span class="label">Separated from:</span>
431         </xsl:when>
432         </xsl:choose>
433                 <xsl:variable name="f780">
434                     <xsl:call-template name="subfieldSelect">
435                         <xsl:with-param name="codes">at</xsl:with-param>
436                     </xsl:call-template>
437                 </xsl:variable>
438              <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f780, '()', '')"/></xsl:attribute>
439                 <xsl:value-of select="translate($f780, '()', '')"/>
440             </a>
441         </span>
442
443         <xsl:choose>
444         <xsl:when test="@ind1=0">
445             <span class="results_summary"><xsl:value-of select="marc:subfield[@code='n']"/></span>
446         </xsl:when>
447         </xsl:choose>
448
449         </xsl:for-each>
450         </xsl:if>
451
452         <!-- 785 -->
453         <xsl:if test="marc:datafield[@tag=785]">
454         <xsl:for-each select="marc:datafield[@tag=785]">
455         <span class="results_summary">
456         <xsl:choose>
457         <xsl:when test="@ind2=0">
458             <span class="label">Continued by:</span>
459         </xsl:when>
460         <xsl:when test="@ind2=1">
461             <span class="label">Continued in part by:</span>
462         </xsl:when>
463         <xsl:when test="@ind2=2">
464             <span class="label">Superseded by:</span>
465         </xsl:when>
466         <xsl:when test="@ind2=3">
467             <span class="label">Superseded in part by:</span>
468         </xsl:when>
469         <xsl:when test="@ind2=4">
470             <span class="label">Absorbed by:</span>
471         </xsl:when>
472         <xsl:when test="@ind2=5">
473             <span class="label">Absorbed in part by:</span>
474         </xsl:when>
475         <xsl:when test="@ind2=6">
476             <span class="label">Split into .. and ...:</span>
477         </xsl:when>
478         <xsl:when test="@ind2=7">
479             <span class="label">Merged with ... to form ...</span>
480         </xsl:when>
481         <xsl:when test="@ind2=8">
482             <span class="label">Changed back to:</span>
483         </xsl:when>
484
485         </xsl:choose>
486                    <xsl:variable name="f785">
487                     <xsl:call-template name="subfieldSelect">
488                         <xsl:with-param name="codes">at</xsl:with-param>
489                     </xsl:call-template>
490                 </xsl:variable>
491
492                 <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
493                 <xsl:value-of select="translate($f785, '()', '')"/>
494             </a>
495
496         </span>
497         </xsl:for-each>
498         </xsl:if>
499
500     </xsl:template>
501
502     <xsl:template name="nameABCDQ">
503             <xsl:call-template name="chopPunctuation">
504                 <xsl:with-param name="chopString">
505                     <xsl:call-template name="subfieldSelect">
506                         <xsl:with-param name="codes">aq</xsl:with-param>
507                     </xsl:call-template>
508                 </xsl:with-param>
509                 <xsl:with-param name="punctuation">
510                     <xsl:text>:,;/ </xsl:text>
511                 </xsl:with-param>
512             </xsl:call-template>
513         <xsl:call-template name="termsOfAddress"/>
514     </xsl:template>
515
516     <xsl:template name="nameABCDN">
517         <xsl:for-each select="marc:subfield[@code='a']">
518                 <xsl:call-template name="chopPunctuation">
519                     <xsl:with-param name="chopString" select="."/>
520                 </xsl:call-template>
521         </xsl:for-each>
522         <xsl:for-each select="marc:subfield[@code='b']">
523                 <xsl:value-of select="."/>
524         </xsl:for-each>
525         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
526                 <xsl:call-template name="subfieldSelect">
527                     <xsl:with-param name="codes">cdn</xsl:with-param>
528                 </xsl:call-template>
529         </xsl:if>
530     </xsl:template>
531
532     <xsl:template name="nameACDEQ">
533             <xsl:call-template name="subfieldSelect">
534                 <xsl:with-param name="codes">acdeq</xsl:with-param>
535             </xsl:call-template>
536     </xsl:template>
537     <xsl:template name="termsOfAddress">
538         <xsl:if test="marc:subfield[@code='b' or @code='c']">
539             <xsl:call-template name="chopPunctuation">
540                 <xsl:with-param name="chopString">
541                     <xsl:call-template name="subfieldSelect">
542                         <xsl:with-param name="codes">bc</xsl:with-param>
543                     </xsl:call-template>
544                 </xsl:with-param>
545             </xsl:call-template>
546         </xsl:if>
547     </xsl:template>
548
549     <xsl:template name="part">
550         <xsl:variable name="partNumber">
551             <xsl:call-template name="specialSubfieldSelect">
552                 <xsl:with-param name="axis">n</xsl:with-param>
553                 <xsl:with-param name="anyCodes">n</xsl:with-param>
554                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
555             </xsl:call-template>
556         </xsl:variable>
557         <xsl:variable name="partName">
558             <xsl:call-template name="specialSubfieldSelect">
559                 <xsl:with-param name="axis">p</xsl:with-param>
560                 <xsl:with-param name="anyCodes">p</xsl:with-param>
561                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
562             </xsl:call-template>
563         </xsl:variable>
564         <xsl:if test="string-length(normalize-space($partNumber))">
565                 <xsl:call-template name="chopPunctuation">
566                     <xsl:with-param name="chopString" select="$partNumber"/>
567                 </xsl:call-template>
568         </xsl:if>
569         <xsl:if test="string-length(normalize-space($partName))">
570                 <xsl:call-template name="chopPunctuation">
571                     <xsl:with-param name="chopString" select="$partName"/>
572                 </xsl:call-template>
573         </xsl:if>
574     </xsl:template>
575
576     <xsl:template name="specialSubfieldSelect">
577         <xsl:param name="anyCodes"/>
578         <xsl:param name="axis"/>
579         <xsl:param name="beforeCodes"/>
580         <xsl:param name="afterCodes"/>
581         <xsl:variable name="str">
582             <xsl:for-each select="marc:subfield">
583                 <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])">
584                     <xsl:value-of select="text()"/>
585                     <xsl:text> </xsl:text>
586                 </xsl:if>
587             </xsl:for-each>
588         </xsl:variable>
589         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
590     </xsl:template>
591
592 </xsl:stylesheet>