Bug 4276: Proposed fix for "Related Subjects" links in Opac.
[koha.git] / koha-tmpl / opac-tmpl / prog / en / xslt / MARC21slim2OPACDetail.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     <xsl:import href="MARC21slimUtils.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="controlField008" select="marc:controlfield[@tag=008]"/>
19         <xsl:variable name="materialTypeCode">
20             <xsl:choose>
21                 <xsl:when test="$leader6='a'">
22                     <xsl:choose>
23                         <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
24                         <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
25                     </xsl:choose>
26                 </xsl:when>
27                 <xsl:when test="$leader6='t'">BK</xsl:when>
28                 <xsl:when test="$leader6='p'">MX</xsl:when>
29                 <xsl:when test="$leader6='m'">CF</xsl:when>
30                 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
31                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
32                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">MU</xsl:when>
33             </xsl:choose>
34         </xsl:variable>
35         <xsl:variable name="materialTypeLabel">
36             <xsl:choose>
37                 <xsl:when test="$leader6='a'">
38                     <xsl:choose>
39                         <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">Book</xsl:when>
40                         <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">Continuing Resource</xsl:when>
41                     </xsl:choose>
42                 </xsl:when>
43                 <xsl:when test="$leader6='t'">Book</xsl:when>
44                 <xsl:when test="$leader6='p'">Mixed Materials</xsl:when>
45                 <xsl:when test="$leader6='m'">Computer File</xsl:when>
46                 <xsl:when test="$leader6='e' or $leader6='f'">Map</xsl:when>
47                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">Visual Material</xsl:when>
48                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">Sound</xsl:when>
49             </xsl:choose>
50         </xsl:variable>
51
52         <!-- Title Statement -->
53         <xsl:if test="marc:datafield[@tag=245]">
54         <h1>
55             <xsl:for-each select="marc:datafield[@tag=245]">
56                     <xsl:call-template name="subfieldSelect">
57                         <xsl:with-param name="codes">a</xsl:with-param>
58                     </xsl:call-template>
59                     <xsl:if test="marc:subfield[@code='b']">
60                         <xsl:text> </xsl:text>
61                         <xsl:call-template name="subfieldSelect">
62                             <xsl:with-param name="codes">b</xsl:with-param>
63                         </xsl:call-template>
64                     </xsl:if>
65                     <xsl:if test="marc:subfield[@code='h']">
66                         <xsl:text> </xsl:text>
67                         <xsl:call-template name="subfieldSelect">
68                             <xsl:with-param name="codes">h</xsl:with-param>
69                         </xsl:call-template>
70                     </xsl:if>
71                     <xsl:call-template name="subfieldSelect">
72                         <xsl:with-param name="codes">fgknps</xsl:with-param>
73                     </xsl:call-template>
74             </xsl:for-each>
75         </h1>
76         </xsl:if>
77
78         <xsl:choose>
79         <xsl:when test="marc:datafield[@tag=100] or marc:datafield[@tag=110] or marc:datafield[@tag=111] or marc:datafield[@tag=700] or marc:datafield[@tag=710] or marc:datafield[@tag=711]">
80         <h5 class="author">by
81         <xsl:for-each select="marc:datafield[@tag=100 or @tag=700]">
82         <a>
83         <xsl:choose>
84             <xsl:when test="marc:subfield[@code=9]">
85                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
86             </xsl:when>
87             <xsl:otherwise>
88             <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
89             </xsl:otherwise>
90         </xsl:choose>
91         <xsl:call-template name="nameABCDQ"/></a>
92         <xsl:choose>
93         <xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
94         </xsl:for-each>
95
96         <xsl:for-each select="marc:datafield[@tag=110 or @tag=710]">
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?idx=au&amp;q=<xsl:call-template name="chopPunctuation">
104                     <xsl:with-param name="chopString">
105                         <xsl:call-template name="subfieldSelect">
106                             <xsl:with-param name="codes">ab</xsl:with-param>
107                         </xsl:call-template>
108                     </xsl:with-param>
109                 </xsl:call-template>
110             </xsl:attribute>      
111             </xsl:otherwise>
112         </xsl:choose>
113         <xsl:call-template name="nameABCDN"/></a>
114         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
115         </xsl:for-each>
116
117         <xsl:for-each select="marc:datafield[@tag=111 or @tag=711]">
118         <a>
119         <xsl:choose>
120             <xsl:when test="marc:subfield[@code=9]">
121                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
122             </xsl:when>
123             <xsl:otherwise>
124             <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
125             </xsl:otherwise>
126         </xsl:choose>
127         <xsl:call-template name="nameACDEQ"/></a>
128         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
129
130         </xsl:for-each>
131         </h5>
132         </xsl:when>
133         </xsl:choose>
134         <div id="views">
135         <span class="view"><span id="Normalview">Normal View</span> </span>
136         <span class="view"><a id="MARCviewPop" href="/cgi-bin/koha/opac-showmarc.pl?id={marc:datafield[@tag=999]/marc:subfield[@code='c']}" title="MARC" rel="gb_page_center[600,500]">MARC View</a></span>
137         <span class="view"><a id="MARCview" href="/cgi-bin/koha/opac-MARCdetail.pl?biblionumber={marc:datafield[@tag=999]/marc:subfield[@code='c']}" title="MARC">Expanded MARC View</a></span>
138         <span class="view"><a id="ISBDview" href="/cgi-bin/koha/opac-ISBDdetail.pl?biblionumber={marc:datafield[@tag=999]/marc:subfield[@code='c']}">Card View (ISBD)</a></span>
139         </div> 
140
141
142         <xsl:if test="$materialTypeCode">
143         <span class="results_summary"><span class="label">Type: </span>
144         <xsl:element name="img"><xsl:attribute name="src">/opac-tmpl/prog/famfamfam/<xsl:value-of select="$materialTypeCode"/>.png</xsl:attribute><xsl:attribute name="alt"></xsl:attribute></xsl:element>
145         <xsl:value-of select="$materialTypeLabel"/>
146         </span>
147         </xsl:if>
148         <xsl:if test="marc:datafield[@tag=440 or @tag=490]">
149         <span class="results_summary"><span class="label">Series: </span>
150         <xsl:for-each select="marc:datafield[@tag=440]">
151              <a href="/cgi-bin/koha/opac-search.pl?q=se:{marc:subfield[@code='a']}">
152             <xsl:call-template name="chopPunctuation">
153                             <xsl:with-param name="chopString">
154                                 <xsl:call-template name="subfieldSelect">
155                                     <xsl:with-param name="codes">av</xsl:with-param>
156                                 </xsl:call-template>
157                             </xsl:with-param>
158                         </xsl:call-template>
159                         </a>
160                     <xsl:text> </xsl:text><xsl:call-template name="part"/>
161             <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
162         </xsl:for-each>
163
164         <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
165              <a href="/cgi-bin/koha/opac-search.pl?q=se:{marc:subfield[@code='a']}">
166                         <xsl:call-template name="chopPunctuation">
167                             <xsl:with-param name="chopString">
168                                 <xsl:call-template name="subfieldSelect">
169                                     <xsl:with-param name="codes">av</xsl:with-param>
170                                 </xsl:call-template>
171                             </xsl:with-param>
172                         </xsl:call-template>
173             </a>
174                     <xsl:call-template name="part"/>
175         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
176         </xsl:for-each>
177         </span>
178         </xsl:if>
179         <xsl:if test="marc:datafield[@tag=260]">
180         <span class="results_summary"><span class="label">Publisher: </span>
181             <xsl:for-each select="marc:datafield[@tag=260]">
182                 <xsl:call-template name="chopPunctuation">
183                   <xsl:with-param name="chopString">
184                     <xsl:call-template name="subfieldSelect">
185                         <xsl:with-param name="codes">bcg</xsl:with-param>
186                     </xsl:call-template>
187                    </xsl:with-param>
188                </xsl:call-template>
189                     <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
190             </xsl:for-each>
191         </span> 
192         </xsl:if>
193         <xsl:if test="marc:datafield[@tag=250]">
194         <span class="results_summary"><span class="label">Edition: </span>
195             <xsl:for-each select="marc:datafield[@tag=250]">
196                 <xsl:call-template name="chopPunctuation">
197                   <xsl:with-param name="chopString">
198                     <xsl:call-template name="subfieldSelect">
199                         <xsl:with-param name="codes">ab</xsl:with-param>
200                     </xsl:call-template>
201                    </xsl:with-param>
202                </xsl:call-template>
203                     <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
204             </xsl:for-each>
205         </span>
206         </xsl:if>
207
208         <xsl:if test="marc:datafield[@tag=300]">
209         <span class="results_summary"><span class="label">Description: </span>
210             <xsl:for-each select="marc:datafield[@tag=300]">
211                 <xsl:call-template name="chopPunctuation">
212                   <xsl:with-param name="chopString">
213                     <xsl:call-template name="subfieldSelect">
214                         <xsl:with-param name="codes">abceg</xsl:with-param>
215                     </xsl:call-template>
216                    </xsl:with-param>
217                </xsl:call-template>
218                     <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
219             </xsl:for-each>
220         </span>
221        </xsl:if>
222
223        <xsl:if test="marc:datafield[@tag=020]">
224         <span class="results_summary"><span class="label">ISBN: </span>
225         <!-- unAPI <abbr/> tag -->
226         <xsl:for-each select="marc:datafield[@tag=020]">
227         <xsl:variable name="isbn" select="marc:subfield[@code='a']"/>
228         <abbr class="unapi-id" title="koha:isbn:{$isbn}"><xsl:value-of select="marc:subfield[@code='a']"/></abbr>
229                 <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
230         </xsl:for-each>
231         </span>
232         </xsl:if>
233
234         <xsl:if test="marc:datafield[@tag=022]">
235         <span class="results_summary"><span class="label">ISSN: </span>
236         <xsl:for-each select="marc:datafield[@tag=022]">
237                 <xsl:value-of select="marc:subfield[@code='a']"/>
238                 <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
239         </xsl:for-each>
240         </span>
241         </xsl:if>
242
243         <xsl:if test="marc:datafield[@tag=246]">
244         <span class="results_summary"><span class="label">Other Title: </span>
245             <xsl:for-each select="marc:datafield[@tag=246]">
246                 <xsl:call-template name="chopPunctuation">
247                   <xsl:with-param name="chopString">
248                     <xsl:call-template name="subfieldSelect">
249                         <xsl:with-param name="codes">iabhfgnp</xsl:with-param>
250                     </xsl:call-template>
251                    </xsl:with-param>
252                </xsl:call-template>
253                     <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
254             </xsl:for-each>
255         </span>
256        </xsl:if>
257
258         <xsl:if test="marc:datafield[@tag=130]|marc:datafield[@tag=240]|marc:datafield[@tag=730][@ind2!=2]">
259         <span class="results_summary"><span class="label">Uniform titles: </span>
260         <xsl:for-each select="marc:datafield[@tag=130]|marc:datafield[@tag=240]|marc:datafield[@tag=730][@ind2!=2]">
261             <xsl:variable name="str">
262                 <xsl:for-each select="marc:subfield">
263                     <xsl:if test="(contains('adfklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
264                         <xsl:value-of select="text()"/>
265                         <xsl:text> </xsl:text>
266                      </xsl:if>
267                 </xsl:for-each>
268             </xsl:variable>
269             <xsl:call-template name="chopPunctuation">
270                 <xsl:with-param name="chopString">
271                     <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
272                         
273                 </xsl:with-param>
274             </xsl:call-template>
275             <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
276         </xsl:for-each>
277         </span>
278         </xsl:if>
279
280         <xsl:if test="marc:datafield[substring(@tag, 1, 1) = '6']">
281             <span class="results_summary"><span class="label">Related Subjects: </span>
282             <xsl:for-each select="marc:datafield[substring(@tag, 1, 1) = '6']">
283             <a>
284             <xsl:choose>
285             <xsl:when test="marc:subfield[@code=9]">
286                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
287             </xsl:when>
288             <xsl:otherwise>
289                 <xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?idc=su&amp;q=<xsl:call-template name="chopPunctuation">
290                         <xsl:with-param name="chopString">
291                             <xsl:call-template name="subfieldSelect">
292                                 <xsl:with-param name="codes">abcdvxyz</xsl:with-param>
293                             </xsl:call-template>
294                         </xsl:with-param>
295                     </xsl:call-template>
296                 </xsl:attribute>
297             </xsl:otherwise>
298             </xsl:choose>
299             <xsl:call-template name="chopPunctuation">
300                 <xsl:with-param name="chopString">
301                     <xsl:call-template name="subfieldSelect">
302                         <xsl:with-param name="codes">abcdvxyz</xsl:with-param>
303                         <xsl:with-param name="subdivCodes">vxyz</xsl:with-param>
304                         <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
305                     </xsl:call-template>
306                 </xsl:with-param>
307             </xsl:call-template>
308             </a>
309             <xsl:choose>
310             <xsl:when test="position()=last()"></xsl:when>
311             <xsl:otherwise> | </xsl:otherwise>
312             </xsl:choose>
313
314             </xsl:for-each>
315             </span>
316         </xsl:if>
317
318         <xsl:if test="marc:datafield[@tag=856]">
319         <span class="results_summary"><span class="label">Online Resources: </span>
320         <xsl:for-each select="marc:datafield[@tag=856]">
321             <a><xsl:attribute name="href"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
322         <xsl:choose>
323             <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
324                     <xsl:call-template name="subfieldSelect">
325                         <xsl:with-param name="codes">y3z</xsl:with-param>
326                     </xsl:call-template>
327             </xsl:when>
328         <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
329         Click here to access online
330         </xsl:when>
331         </xsl:choose>
332         </a>
333             <xsl:choose>
334             <xsl:when test="position()=last()"></xsl:when>
335             <xsl:otherwise> | </xsl:otherwise>
336             </xsl:choose>
337             
338         </xsl:for-each>
339         </span>
340         </xsl:if>
341         <xsl:if test="marc:datafield[@tag=505]">
342         <xsl:for-each select="marc:datafield[@tag=505]">
343         <span class="results_summary"><span class="label">
344         <xsl:choose>
345         <xsl:when test="@ind1=0">
346             Contents:
347         </xsl:when>
348         <xsl:when test="@ind1=1">
349             Incomplete contents:
350         </xsl:when>
351         <xsl:when test="@ind1=1">
352             Partial contents:
353         </xsl:when>
354         </xsl:choose>  
355         </span>
356         <xsl:choose>
357         <xsl:when test="@ind2=0">
358             <xsl:for-each select="marc:subfield[@code='t']">
359                 <xsl:value-of select="marc:subfield[@code=t]"/> <xsl:value-of select="marc:subfield[@code=r]"/>
360             </xsl:for-each> 
361         </xsl:when>
362         <xsl:otherwise>
363             <xsl:call-template name="subfieldSelect">
364                 <xsl:with-param name="codes">au</xsl:with-param>
365             </xsl:call-template>
366         </xsl:otherwise>
367         </xsl:choose>
368         </span>
369         </xsl:for-each>
370         </xsl:if>
371
372         <!-- 780 -->
373         <xsl:if test="marc:datafield[@tag=780]">
374         <xsl:for-each select="marc:datafield[@tag=780]">
375         <span class="results_summary"><span class="label">
376         <xsl:choose>
377         <xsl:when test="@ind2=0">
378             Continues:
379         </xsl:when>
380         <xsl:when test="@ind2=1">
381             Continues in part:
382         </xsl:when>
383         <xsl:when test="@ind2=2">
384             Supersedes:
385         </xsl:when>
386         <xsl:when test="@ind2=3">
387             Supersedes in part:
388         </xsl:when>
389         <xsl:when test="@ind2=4">
390             Formed by the union: ... and: ...
391         </xsl:when>
392         <xsl:when test="@ind2=5">
393             Absorbed:
394         </xsl:when>
395         <xsl:when test="@ind2=6">
396             Absorbed in part:
397         </xsl:when>
398         <xsl:when test="@ind2=7">
399             Separated from:
400         </xsl:when>
401         </xsl:choose>
402         </span>
403                 <xsl:variable name="f780">
404                     <xsl:call-template name="subfieldSelect">
405                         <xsl:with-param name="codes">at</xsl:with-param>
406                     </xsl:call-template>
407                 </xsl:variable>
408              <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f780, '()', '')"/></xsl:attribute>
409                 <xsl:value-of select="translate($f780, '()', '')"/>
410             </a>
411         </span>
412  
413         <xsl:choose>
414         <xsl:when test="@ind1=0">
415             <span class="results_summary"><xsl:value-of select="marc:subfield[@code='n']"/></span>
416         </xsl:when>
417         </xsl:choose>
418
419         </xsl:for-each>
420         </xsl:if>
421
422         <!-- 785 -->
423         <xsl:if test="marc:datafield[@tag=785]">
424         <xsl:for-each select="marc:datafield[@tag=785]">
425         <span class="results_summary"><span class="label">
426         <xsl:choose>
427         <xsl:when test="@ind2=0">
428             Continued by:
429         </xsl:when>
430         <xsl:when test="@ind2=1">
431             Continued in part by:
432         </xsl:when>
433         <xsl:when test="@ind2=2">
434             Superseded by:
435         </xsl:when>
436         <xsl:when test="@ind2=3">
437             Superseded in part by:
438         </xsl:when>
439         <xsl:when test="@ind2=4">
440             Absorbed by:
441         </xsl:when>
442         <xsl:when test="@ind2=5">
443             Absorbed in part by:
444         </xsl:when>
445         <xsl:when test="@ind2=6">
446             Split into .. and ...:
447         </xsl:when>
448         <xsl:when test="@ind2=7">
449             Merged with ... to form ...
450         </xsl:when>
451         <xsl:when test="@ind2=8">
452             Changed back to:
453         </xsl:when>
454
455         </xsl:choose>
456         </span>
457                    <xsl:variable name="f785">
458                     <xsl:call-template name="subfieldSelect">
459                         <xsl:with-param name="codes">at</xsl:with-param>
460                     </xsl:call-template>
461                 </xsl:variable>
462
463                 <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
464                 <xsl:value-of select="translate($f785, '()', '')"/>
465             </a>
466
467         </span>
468         </xsl:for-each>
469         </xsl:if>
470
471     </xsl:template>
472
473     <xsl:template name="nameABCDQ">
474             <xsl:call-template name="chopPunctuation">
475                 <xsl:with-param name="chopString">
476                     <xsl:call-template name="subfieldSelect">
477                         <xsl:with-param name="codes">aq</xsl:with-param>
478                     </xsl:call-template>
479                 </xsl:with-param>
480                 <xsl:with-param name="punctuation">
481                     <xsl:text>:,;/ </xsl:text>
482                 </xsl:with-param>
483             </xsl:call-template>
484         <xsl:call-template name="termsOfAddress"/>
485     </xsl:template>
486
487     <xsl:template name="nameABCDN">
488         <xsl:for-each select="marc:subfield[@code='a']">
489                 <xsl:call-template name="chopPunctuation">
490                     <xsl:with-param name="chopString" select="."/>
491                 </xsl:call-template>
492         </xsl:for-each>
493         <xsl:for-each select="marc:subfield[@code='b']">
494                 <xsl:value-of select="."/>
495         </xsl:for-each>
496         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
497                 <xsl:call-template name="subfieldSelect">
498                     <xsl:with-param name="codes">cdn</xsl:with-param>
499                 </xsl:call-template>
500         </xsl:if>
501     </xsl:template>
502
503     <xsl:template name="nameACDEQ">
504             <xsl:call-template name="subfieldSelect">
505                 <xsl:with-param name="codes">acdeq</xsl:with-param>
506             </xsl:call-template>
507     </xsl:template>
508     <xsl:template name="termsOfAddress">
509         <xsl:if test="marc:subfield[@code='b' or @code='c']">
510             <xsl:call-template name="chopPunctuation">
511                 <xsl:with-param name="chopString">
512                     <xsl:call-template name="subfieldSelect">
513                         <xsl:with-param name="codes">bc</xsl:with-param>
514                     </xsl:call-template>
515                 </xsl:with-param>
516             </xsl:call-template>
517         </xsl:if>
518     </xsl:template>
519
520     <xsl:template name="part">
521         <xsl:variable name="partNumber">
522             <xsl:call-template name="specialSubfieldSelect">
523                 <xsl:with-param name="axis">n</xsl:with-param>
524                 <xsl:with-param name="anyCodes">n</xsl:with-param>
525                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
526             </xsl:call-template>
527         </xsl:variable>
528         <xsl:variable name="partName">
529             <xsl:call-template name="specialSubfieldSelect">
530                 <xsl:with-param name="axis">p</xsl:with-param>
531                 <xsl:with-param name="anyCodes">p</xsl:with-param>
532                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
533             </xsl:call-template>
534         </xsl:variable>
535         <xsl:if test="string-length(normalize-space($partNumber))">
536                 <xsl:call-template name="chopPunctuation">
537                     <xsl:with-param name="chopString" select="$partNumber"/>
538                 </xsl:call-template>
539         </xsl:if>
540         <xsl:if test="string-length(normalize-space($partName))">
541                 <xsl:call-template name="chopPunctuation">
542                     <xsl:with-param name="chopString" select="$partName"/>
543                 </xsl:call-template>
544         </xsl:if>
545     </xsl:template>
546
547     <xsl:template name="specialSubfieldSelect">
548         <xsl:param name="anyCodes"/>
549         <xsl:param name="axis"/>
550         <xsl:param name="beforeCodes"/>
551         <xsl:param name="afterCodes"/>
552         <xsl:variable name="str">
553             <xsl:for-each select="marc:subfield">
554                 <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])">
555                     <xsl:value-of select="text()"/>
556                     <xsl:text> </xsl:text>
557                 </xsl:if>
558             </xsl:for-each>
559         </xsl:variable>
560         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
561     </xsl:template>
562 </xsl:stylesheet>