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