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