Merge remote branch 'kc/new/biblibre_reports' 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">Main Author</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">Corporate Author (Main)</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">Coauthor</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">Secondary Author</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">Corporate Author (Coauthor)</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">Corporate Author (Secondary)</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">Language: </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'">of intermediate text, </xsl:when>
109             <xsl:when test="@code='c'">of original work, </xsl:when>
110             <xsl:when test="@code='d'">of summary, </xsl:when>
111             <xsl:when test="@code='e'">of contents page, </xsl:when>
112             <xsl:when test="@code='f'">of title page, </xsl:when>
113             <xsl:when test="@code='g'">of title proper, </xsl:when>
114             <xsl:when test="@code='h'">of libretto, </xsl:when>
115             <xsl:when test="@code='i'">of accompanying material, </xsl:when>
116             <xsl:when test="@code='j'">of subtitles, </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">Country: </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">Series</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">Contents note: </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">Abstract: </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">Provenance note: </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">Bibliography: </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">Thesis: </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">Audience: </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:call-template name="tag_subject">
316     <xsl:with-param name="tag">600</xsl:with-param>
317     <xsl:with-param name="label">Subject - Personal Name</xsl:with-param>
318   </xsl:call-template>
319
320   <xsl:call-template name="tag_subject">
321     <xsl:with-param name="tag">601</xsl:with-param>
322     <xsl:with-param name="label">Subject - Corporate Author</xsl:with-param>
323   </xsl:call-template>
324
325   <xsl:call-template name="tag_subject">
326     <xsl:with-param name="tag">602</xsl:with-param>
327     <xsl:with-param name="label">Subject - Family</xsl:with-param>
328   </xsl:call-template>
329
330   <xsl:call-template name="tag_subject">
331     <xsl:with-param name="tag">604</xsl:with-param>
332     <xsl:with-param name="label">Subject - Author/Title</xsl:with-param>
333   </xsl:call-template>
334
335   <xsl:call-template name="tag_subject">
336     <xsl:with-param name="tag">606</xsl:with-param>
337     <xsl:with-param name="label">Subject - Topical Name</xsl:with-param>
338   </xsl:call-template>
339
340   <xsl:call-template name="tag_subject">
341     <xsl:with-param name="tag">607</xsl:with-param>
342     <xsl:with-param name="label">Subject - Geographical Name</xsl:with-param>
343   </xsl:call-template>
344
345   <xsl:call-template name="tag_subject">
346     <xsl:with-param name="tag">608</xsl:with-param>
347     <xsl:with-param name="label">Subject - Form</xsl:with-param>
348   </xsl:call-template>
349
350   <xsl:call-template name="tag_subject">
351     <xsl:with-param name="tag">610</xsl:with-param>
352     <xsl:with-param name="label">Subject</xsl:with-param>
353   </xsl:call-template>
354
355   <xsl:call-template name="tag_subject">
356     <xsl:with-param name="tag">615</xsl:with-param>
357     <xsl:with-param name="label">Subject Category</xsl:with-param>
358   </xsl:call-template>
359
360   <xsl:call-template name="tag_subject">
361     <xsl:with-param name="tag">616</xsl:with-param>
362     <xsl:with-param name="label">Trademark</xsl:with-param>
363   </xsl:call-template>
364
365   <xsl:if test="marc:datafield[@tag=856]">
366     <span class="results_summary">
367       <span class="label">Online Resources: </span>
368       <xsl:for-each select="marc:datafield[@tag=856]">
369         <a>
370           <xsl:attribute name="href">
371             <xsl:value-of select="marc:subfield[@code='u']"/>
372           </xsl:attribute>
373           <xsl:choose>
374             <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
375               <xsl:call-template name="subfieldSelect">
376                 <xsl:with-param name="codes">y3z</xsl:with-param>
377               </xsl:call-template>
378             </xsl:when>
379             <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
380               Click here to access online
381             </xsl:when>
382           </xsl:choose>
383         </a>
384         <xsl:choose>
385           <xsl:when test="position()=last()"></xsl:when>
386           <xsl:otherwise> | </xsl:otherwise>
387         </xsl:choose>
388       </xsl:for-each>
389     </span>
390   </xsl:if>
391
392         <!-- 780 -->
393         <xsl:if test="marc:datafield[@tag=780]">
394         <xsl:for-each select="marc:datafield[@tag=780]">
395         <span class="results_summary">
396         <xsl:choose>
397         <xsl:when test="@ind2=0">
398             <span class="label">Continues:</span>
399         </xsl:when>
400         <xsl:when test="@ind2=1">
401             <span class="label">Continues in part:</span>
402         </xsl:when>
403         <xsl:when test="@ind2=2">
404             <span class="label">Supersedes:</span>
405         </xsl:when>
406         <xsl:when test="@ind2=3">
407             <span class="label">Supersedes in part:</span>
408         </xsl:when>
409         <xsl:when test="@ind2=4">
410             <span class="label">Formed by the union: ... and: ...</span>
411         </xsl:when>
412         <xsl:when test="@ind2=5">
413             <span class="label">Absorbed:</span>
414         </xsl:when>
415         <xsl:when test="@ind2=6">
416             <span class="label">Absorbed in part:</span>
417         </xsl:when>
418         <xsl:when test="@ind2=7">
419             <span class="label">Separated from:</span>
420         </xsl:when>
421         </xsl:choose>
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">
445         <xsl:choose>
446         <xsl:when test="@ind2=0">
447             <span class="label">Continued by:</span>
448         </xsl:when>
449         <xsl:when test="@ind2=1">
450             <span class="label">Continued in part by:</span>
451         </xsl:when>
452         <xsl:when test="@ind2=2">
453             <span class="label">Superseded by:</span>
454         </xsl:when>
455         <xsl:when test="@ind2=3">
456             <span class="label">Superseded in part by:</span>
457         </xsl:when>
458         <xsl:when test="@ind2=4">
459             <span class="label">Absorbed by:</span>
460         </xsl:when>
461         <xsl:when test="@ind2=5">
462             <span class="label">Absorbed in part by:</span>
463         </xsl:when>
464         <xsl:when test="@ind2=6">
465             <span class="label">Split into .. and ...:</span>
466         </xsl:when>
467         <xsl:when test="@ind2=7">
468             <span class="label">Merged with ... to form ...</span>
469         </xsl:when>
470         <xsl:when test="@ind2=8">
471             <span class="label">Changed back to:</span>
472         </xsl:when>
473
474         </xsl:choose>
475                    <xsl:variable name="f785">
476                     <xsl:call-template name="subfieldSelect">
477                         <xsl:with-param name="codes">at</xsl:with-param>
478                     </xsl:call-template>
479                 </xsl:variable>
480
481                 <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
482                 <xsl:value-of select="translate($f785, '()', '')"/>
483             </a>
484
485         </span>
486         </xsl:for-each>
487         </xsl:if>
488
489     </xsl:template>
490
491     <xsl:template name="nameABCDQ">
492             <xsl:call-template name="chopPunctuation">
493                 <xsl:with-param name="chopString">
494                     <xsl:call-template name="subfieldSelect">
495                         <xsl:with-param name="codes">aq</xsl:with-param>
496                     </xsl:call-template>
497                 </xsl:with-param>
498                 <xsl:with-param name="punctuation">
499                     <xsl:text>:,;/ </xsl:text>
500                 </xsl:with-param>
501             </xsl:call-template>
502         <xsl:call-template name="termsOfAddress"/>
503     </xsl:template>
504
505     <xsl:template name="nameABCDN">
506         <xsl:for-each select="marc:subfield[@code='a']">
507                 <xsl:call-template name="chopPunctuation">
508                     <xsl:with-param name="chopString" select="."/>
509                 </xsl:call-template>
510         </xsl:for-each>
511         <xsl:for-each select="marc:subfield[@code='b']">
512                 <xsl:value-of select="."/>
513         </xsl:for-each>
514         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
515                 <xsl:call-template name="subfieldSelect">
516                     <xsl:with-param name="codes">cdn</xsl:with-param>
517                 </xsl:call-template>
518         </xsl:if>
519     </xsl:template>
520
521     <xsl:template name="nameACDEQ">
522             <xsl:call-template name="subfieldSelect">
523                 <xsl:with-param name="codes">acdeq</xsl:with-param>
524             </xsl:call-template>
525     </xsl:template>
526     <xsl:template name="termsOfAddress">
527         <xsl:if test="marc:subfield[@code='b' or @code='c']">
528             <xsl:call-template name="chopPunctuation">
529                 <xsl:with-param name="chopString">
530                     <xsl:call-template name="subfieldSelect">
531                         <xsl:with-param name="codes">bc</xsl:with-param>
532                     </xsl:call-template>
533                 </xsl:with-param>
534             </xsl:call-template>
535         </xsl:if>
536     </xsl:template>
537
538     <xsl:template name="part">
539         <xsl:variable name="partNumber">
540             <xsl:call-template name="specialSubfieldSelect">
541                 <xsl:with-param name="axis">n</xsl:with-param>
542                 <xsl:with-param name="anyCodes">n</xsl:with-param>
543                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
544             </xsl:call-template>
545         </xsl:variable>
546         <xsl:variable name="partName">
547             <xsl:call-template name="specialSubfieldSelect">
548                 <xsl:with-param name="axis">p</xsl:with-param>
549                 <xsl:with-param name="anyCodes">p</xsl:with-param>
550                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
551             </xsl:call-template>
552         </xsl:variable>
553         <xsl:if test="string-length(normalize-space($partNumber))">
554                 <xsl:call-template name="chopPunctuation">
555                     <xsl:with-param name="chopString" select="$partNumber"/>
556                 </xsl:call-template>
557         </xsl:if>
558         <xsl:if test="string-length(normalize-space($partName))">
559                 <xsl:call-template name="chopPunctuation">
560                     <xsl:with-param name="chopString" select="$partName"/>
561                 </xsl:call-template>
562         </xsl:if>
563     </xsl:template>
564
565     <xsl:template name="specialSubfieldSelect">
566         <xsl:param name="anyCodes"/>
567         <xsl:param name="axis"/>
568         <xsl:param name="beforeCodes"/>
569         <xsl:param name="afterCodes"/>
570         <xsl:variable name="str">
571             <xsl:for-each select="marc:subfield">
572                 <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])">
573                     <xsl:value-of select="text()"/>
574                     <xsl:text> </xsl:text>
575                 </xsl:if>
576             </xsl:for-each>
577         </xsl:variable>
578         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
579     </xsl:template>
580
581 </xsl:stylesheet>