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:call-template name="tag_subject">
315     <xsl:with-param name="tag">600</xsl:with-param>
316     <xsl:with-param name="label">Sujet - Nom de personne</xsl:with-param>
317   </xsl:call-template>
318
319   <xsl:call-template name="tag_subject">
320     <xsl:with-param name="tag">601</xsl:with-param>
321     <xsl:with-param name="label">Sujet - Collectivité</xsl:with-param>
322   </xsl:call-template>
323
324   <xsl:call-template name="tag_subject">
325     <xsl:with-param name="tag">602</xsl:with-param>
326     <xsl:with-param name="label">Sujet - Famille</xsl:with-param>
327   </xsl:call-template>
328
329   <xsl:call-template name="tag_subject">
330     <xsl:with-param name="tag">604</xsl:with-param>
331     <xsl:with-param name="label">Sujet - Auteur/titre</xsl:with-param>
332   </xsl:call-template>
333
334   <xsl:call-template name="tag_subject">
335     <xsl:with-param name="tag">606</xsl:with-param>
336     <xsl:with-param name="label">Sujet - Nom commun</xsl:with-param>
337   </xsl:call-template>
338
339   <xsl:call-template name="tag_subject">
340     <xsl:with-param name="tag">607</xsl:with-param>
341     <xsl:with-param name="label">Sujet - Nom géographique</xsl:with-param>
342   </xsl:call-template>
343
344   <xsl:call-template name="tag_subject">
345     <xsl:with-param name="tag">608</xsl:with-param>
346     <xsl:with-param name="label">Sujet - Forme</xsl:with-param>
347   </xsl:call-template>
348
349   <xsl:call-template name="tag_subject">
350     <xsl:with-param name="tag">610</xsl:with-param>
351     <xsl:with-param name="label">Sujet</xsl:with-param>
352   </xsl:call-template>
353
354   <xsl:call-template name="tag_subject">
355     <xsl:with-param name="tag">615</xsl:with-param>
356     <xsl:with-param name="label">Catégorie sujet</xsl:with-param>
357   </xsl:call-template>
358
359   <xsl:call-template name="tag_subject">
360     <xsl:with-param name="tag">616</xsl:with-param>
361     <xsl:with-param name="label">Marque déposée</xsl:with-param>
362   </xsl:call-template>
363
364   <xsl:if test="marc:datafield[@tag=856]">
365     <span class="results_summary">
366       <span class="label">Online Resources: </span>
367       <xsl:for-each select="marc:datafield[@tag=856]">
368         <a>
369           <xsl:attribute name="href">
370             <xsl:value-of select="marc:subfield[@code='u']"/>
371           </xsl:attribute>
372           <xsl:choose>
373             <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
374               <xsl:call-template name="subfieldSelect">
375                 <xsl:with-param name="codes">y3z</xsl:with-param>
376               </xsl:call-template>
377             </xsl:when>
378             <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
379               Click here to access online
380             </xsl:when>
381           </xsl:choose>
382         </a>
383         <xsl:choose>
384           <xsl:when test="position()=last()"></xsl:when>
385           <xsl:otherwise> | </xsl:otherwise>
386         </xsl:choose>      
387       </xsl:for-each>
388     </span>
389   </xsl:if>
390
391         <!-- 780 -->
392         <xsl:if test="marc:datafield[@tag=780]">
393         <xsl:for-each select="marc:datafield[@tag=780]">
394         <span class="results_summary"><span class="label">
395         <xsl:choose>
396         <xsl:when test="@ind2=0">
397             Continues:
398         </xsl:when>
399         <xsl:when test="@ind2=1">
400             Continues in part:
401         </xsl:when>
402         <xsl:when test="@ind2=2">
403             Supersedes:
404         </xsl:when>
405         <xsl:when test="@ind2=3">
406             Supersedes in part:
407         </xsl:when>
408         <xsl:when test="@ind2=4">
409             Formed by the union: ... and: ...
410         </xsl:when>
411         <xsl:when test="@ind2=5">
412             Absorbed:
413         </xsl:when>
414         <xsl:when test="@ind2=6">
415             Absorbed in part:
416         </xsl:when>
417         <xsl:when test="@ind2=7">
418             Separated from:
419         </xsl:when>
420         </xsl:choose>
421         </span>
422                 <xsl:variable name="f780">
423                     <xsl:call-template name="subfieldSelect">
424                         <xsl:with-param name="codes">at</xsl:with-param>
425                     </xsl:call-template>
426                 </xsl:variable>
427              <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f780, '()', '')"/></xsl:attribute>
428                 <xsl:value-of select="translate($f780, '()', '')"/>
429             </a>
430         </span>
431  
432         <xsl:choose>
433         <xsl:when test="@ind1=0">
434             <span class="results_summary"><xsl:value-of select="marc:subfield[@code='n']"/></span>
435         </xsl:when>
436         </xsl:choose>
437
438         </xsl:for-each>
439         </xsl:if>
440
441         <!-- 785 -->
442         <xsl:if test="marc:datafield[@tag=785]">
443         <xsl:for-each select="marc:datafield[@tag=785]">
444         <span class="results_summary"><span class="label">
445         <xsl:choose>
446         <xsl:when test="@ind2=0">
447             Continued by:
448         </xsl:when>
449         <xsl:when test="@ind2=1">
450             Continued in part by:
451         </xsl:when>
452         <xsl:when test="@ind2=2">
453             Superseded by:
454         </xsl:when>
455         <xsl:when test="@ind2=3">
456             Superseded in part by:
457         </xsl:when>
458         <xsl:when test="@ind2=4">
459             Absorbed by:
460         </xsl:when>
461         <xsl:when test="@ind2=5">
462             Absorbed in part by:
463         </xsl:when>
464         <xsl:when test="@ind2=6">
465             Split into .. and ...:
466         </xsl:when>
467         <xsl:when test="@ind2=7">
468             Merged with ... to form ...
469         </xsl:when>
470         <xsl:when test="@ind2=8">
471             Changed back to:
472         </xsl:when>
473
474         </xsl:choose>
475         </span>
476                    <xsl:variable name="f785">
477                     <xsl:call-template name="subfieldSelect">
478                         <xsl:with-param name="codes">at</xsl:with-param>
479                     </xsl:call-template>
480                 </xsl:variable>
481
482                 <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
483                 <xsl:value-of select="translate($f785, '()', '')"/>
484             </a>
485
486         </span>
487         </xsl:for-each>
488         </xsl:if>
489
490     </xsl:template>
491
492     <xsl:template name="nameABCDQ">
493             <xsl:call-template name="chopPunctuation">
494                 <xsl:with-param name="chopString">
495                     <xsl:call-template name="subfieldSelect">
496                         <xsl:with-param name="codes">aq</xsl:with-param>
497                     </xsl:call-template>
498                 </xsl:with-param>
499                 <xsl:with-param name="punctuation">
500                     <xsl:text>:,;/ </xsl:text>
501                 </xsl:with-param>
502             </xsl:call-template>
503         <xsl:call-template name="termsOfAddress"/>
504     </xsl:template>
505
506     <xsl:template name="nameABCDN">
507         <xsl:for-each select="marc:subfield[@code='a']">
508                 <xsl:call-template name="chopPunctuation">
509                     <xsl:with-param name="chopString" select="."/>
510                 </xsl:call-template>
511         </xsl:for-each>
512         <xsl:for-each select="marc:subfield[@code='b']">
513                 <xsl:value-of select="."/>
514         </xsl:for-each>
515         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
516                 <xsl:call-template name="subfieldSelect">
517                     <xsl:with-param name="codes">cdn</xsl:with-param>
518                 </xsl:call-template>
519         </xsl:if>
520     </xsl:template>
521
522     <xsl:template name="nameACDEQ">
523             <xsl:call-template name="subfieldSelect">
524                 <xsl:with-param name="codes">acdeq</xsl:with-param>
525             </xsl:call-template>
526     </xsl:template>
527     <xsl:template name="termsOfAddress">
528         <xsl:if test="marc:subfield[@code='b' or @code='c']">
529             <xsl:call-template name="chopPunctuation">
530                 <xsl:with-param name="chopString">
531                     <xsl:call-template name="subfieldSelect">
532                         <xsl:with-param name="codes">bc</xsl:with-param>
533                     </xsl:call-template>
534                 </xsl:with-param>
535             </xsl:call-template>
536         </xsl:if>
537     </xsl:template>
538
539     <xsl:template name="part">
540         <xsl:variable name="partNumber">
541             <xsl:call-template name="specialSubfieldSelect">
542                 <xsl:with-param name="axis">n</xsl:with-param>
543                 <xsl:with-param name="anyCodes">n</xsl:with-param>
544                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
545             </xsl:call-template>
546         </xsl:variable>
547         <xsl:variable name="partName">
548             <xsl:call-template name="specialSubfieldSelect">
549                 <xsl:with-param name="axis">p</xsl:with-param>
550                 <xsl:with-param name="anyCodes">p</xsl:with-param>
551                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
552             </xsl:call-template>
553         </xsl:variable>
554         <xsl:if test="string-length(normalize-space($partNumber))">
555                 <xsl:call-template name="chopPunctuation">
556                     <xsl:with-param name="chopString" select="$partNumber"/>
557                 </xsl:call-template>
558         </xsl:if>
559         <xsl:if test="string-length(normalize-space($partName))">
560                 <xsl:call-template name="chopPunctuation">
561                     <xsl:with-param name="chopString" select="$partName"/>
562                 </xsl:call-template>
563         </xsl:if>
564     </xsl:template>
565
566     <xsl:template name="specialSubfieldSelect">
567         <xsl:param name="anyCodes"/>
568         <xsl:param name="axis"/>
569         <xsl:param name="beforeCodes"/>
570         <xsl:param name="afterCodes"/>
571         <xsl:variable name="str">
572             <xsl:for-each select="marc:subfield">
573                 <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])">
574                     <xsl:value-of select="text()"/>
575                     <xsl:text> </xsl:text>
576                 </xsl:if>
577             </xsl:for-each>
578         </xsl:variable>
579         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
580     </xsl:template>
581
582 </xsl:stylesheet>