bug 4018: remove duplicate unAPI link when XSLT bib details display on
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / xslt / UNIMARCslim2intranetDetail.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   <xsl:call-template name="tag_4xx" />
52
53   <xsl:call-template name="tag_7xx">
54     <xsl:with-param name="tag">700</xsl:with-param>
55     <xsl:with-param name="label">Auteur principal</xsl:with-param>
56   </xsl:call-template>
57
58   <xsl:call-template name="tag_7xx">
59     <xsl:with-param name="tag">710</xsl:with-param>
60     <xsl:with-param name="label">Collectivité principale</xsl:with-param>
61   </xsl:call-template>
62
63   <xsl:call-template name="tag_7xx">
64     <xsl:with-param name="tag">701</xsl:with-param>
65     <xsl:with-param name="label">Co-auteur</xsl:with-param>
66   </xsl:call-template>
67
68   <xsl:call-template name="tag_7xx">
69     <xsl:with-param name="tag">702</xsl:with-param>
70     <xsl:with-param name="label">Auteur</xsl:with-param>
71   </xsl:call-template>
72
73   <xsl:call-template name="tag_7xx">
74     <xsl:with-param name="tag">711</xsl:with-param>
75     <xsl:with-param name="label">Collectivité co-auteur</xsl:with-param>
76   </xsl:call-template>
77
78   <xsl:call-template name="tag_7xx">
79     <xsl:with-param name="tag">712</xsl:with-param>
80     <xsl:with-param name="label">Collectivité secondaire</xsl:with-param>
81   </xsl:call-template>
82
83   <xsl:if test="marc:datafield[@tag=101]">
84     <li>
85       <strong>Langue: </strong>
86       <xsl:for-each select="marc:datafield[@tag=101]">
87         <xsl:for-each select="marc:subfield">
88           <xsl:choose>
89             <xsl:when test="@code='b'">de la trad. intermédiaire, </xsl:when>
90             <xsl:when test="@code='c'">de l'œuvre originale, </xsl:when>
91             <xsl:when test="@code='d'">du résumé, </xsl:when>
92             <xsl:when test="@code='e'">de la table des matières, </xsl:when>
93             <xsl:when test="@code='f'">de la page de titre, </xsl:when>
94             <xsl:when test="@code='g'">du titre propre, </xsl:when>
95             <xsl:when test="@code='h'">d'un livret, </xsl:when>
96             <xsl:when test="@code='i'">des textes d'accompagnement, </xsl:when>
97             <xsl:when test="@code='j'">des sous-titres, </xsl:when>
98           </xsl:choose>
99           <xsl:value-of select="text()"/>
100           <xsl:choose>
101             <xsl:when test="position()=last()">
102               <xsl:text>.</xsl:text>
103             </xsl:when>
104             <xsl:otherwise>
105               <xsl:text> ; </xsl:text>
106             </xsl:otherwise>
107           </xsl:choose>
108         </xsl:for-each>
109       </xsl:for-each>
110     </li>
111   </xsl:if>
112
113   <xsl:if test="marc:datafield[@tag=102]">
114     <li>
115       <strong>Pays: </strong>
116       <xsl:for-each select="marc:datafield[@tag=102]">
117         <xsl:for-each select="marc:subfield">
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><xsl:text>, </xsl:text>
124             </xsl:otherwise>
125           </xsl:choose>
126         </xsl:for-each>
127       </xsl:for-each>
128     </li>
129   </xsl:if>
130
131   <xsl:call-template name="tag_210" />
132
133   <xsl:call-template name="tag_215" />
134
135 <xsl:if test="marc:controlfield[@tag=009]">
136     <li><strong>PPN: </strong>
137       <xsl:value-of select="marc:controlfield[@tag=009]"/>
138     </li>
139   </xsl:if>
140
141   <xsl:if test="marc:datafield[@tag=010]/marc:subfield[@code='a']">
142     <li><strong>ISBN: </strong>
143     <xsl:for-each select="marc:datafield[@tag=010]">
144       <xsl:variable name="isbn" select="marc:subfield[@code='a']"/>
145       <xsl:value-of select="marc:subfield[@code='a']"/>
146       <xsl:choose>
147         <xsl:when test="position()=last()">
148           <xsl:text>.</xsl:text>
149         </xsl:when>
150         <xsl:otherwise>
151           <xsl:text> ; </xsl:text>
152         </xsl:otherwise>
153       </xsl:choose>
154     </xsl:for-each>
155     </li>
156   </xsl:if>
157
158   <xsl:if test="marc:datafield[@tag=011]">
159     <li>
160       <strong>ISSN: </strong>
161       <xsl:for-each select="marc:datafield[@tag=011]">
162         <xsl:value-of select="marc:subfield[@code='a']"/>
163         <xsl:choose>
164           <xsl:when test="position()=last()">
165             <xsl:text>.</xsl:text>
166           </xsl:when>
167           <xsl:otherwise>
168             <xsl:text>; </xsl:text>
169           </xsl:otherwise>
170         </xsl:choose>
171       </xsl:for-each>
172     </li>
173   </xsl:if>
174
175   <xsl:call-template name="tag_title">
176     <xsl:with-param name="tag">225</xsl:with-param>
177     <xsl:with-param name="label">Collection</xsl:with-param>
178   </xsl:call-template>
179
180   <xsl:if test="marc:datafield[@tag=676]">
181     <li>
182     <strong>Dewey: </strong>
183       <xsl:for-each select="marc:datafield[@tag=676]">
184         <xsl:value-of select="marc:subfield[@code='a']"/>
185         <xsl:if test="marc:subfield[@code='v']">
186           <xsl:text>, </xsl:text>
187           <xsl:value-of select="marc:subfield[@code='v']"/>
188         </xsl:if>
189         <xsl:if test="marc:subfield[@code='z']">
190           <xsl:text>, </xsl:text>
191           <xsl:value-of select="marc:subfield[@code='z']"/>
192         </xsl:if>
193         <xsl:if test="not (position()=last())">
194           <xsl:text> ; </xsl:text>
195         </xsl:if>
196       </xsl:for-each>
197     </li>
198   </xsl:if>
199
200   <xsl:if test="marc:datafield[@tag=686]">
201     <li>
202     <strong>Classification: </strong>
203       <xsl:for-each select="marc:datafield[@tag=686]">
204         <xsl:value-of select="marc:subfield[@code='a']"/>
205         <xsl:if test="marc:subfield[@code='b']">
206           <xsl:text>, </xsl:text>
207           <xsl:value-of select="marc:subfield[@code='b']"/>
208         </xsl:if>
209         <xsl:if test="marc:subfield[@code='c']">
210           <xsl:text>, </xsl:text>
211           <xsl:value-of select="marc:subfield[@code='c']"/>
212         </xsl:if>
213         <xsl:if test="not (position()=last())"><xsl:text> ; </xsl:text></xsl:if>
214       </xsl:for-each>
215     </li>
216   </xsl:if>
217
218   <xsl:if test="marc:datafield[@tag=327]">
219     <li>
220       <strong>Note de contenu: </strong>
221       <xsl:for-each select="marc:datafield[@tag=327]">
222         <xsl:call-template name="chopPunctuation">
223           <xsl:with-param name="chopString">
224             <xsl:call-template name="subfieldSelect">
225                 <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
226                 <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
227                 <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
228             </xsl:call-template>
229           </xsl:with-param>
230         </xsl:call-template>
231       </xsl:for-each>
232     </li>
233   </xsl:if>
234
235   <xsl:if test="marc:datafield[@tag=330]">
236     <li>
237       <strong>Résumé: </strong>
238       <xsl:for-each select="marc:datafield[@tag=330]">
239         <xsl:value-of select="marc:subfield[@code='a']"/>
240         <xsl:choose>
241           <xsl:when test="position()=last()">
242             <xsl:text>.</xsl:text>
243           </xsl:when>
244           <xsl:otherwise>
245             <xsl:text>; </xsl:text>
246           </xsl:otherwise>
247         </xsl:choose>
248       </xsl:for-each>
249     </li>
250   </xsl:if>
251
252   <xsl:if test="marc:datafield[@tag=317]">
253     <li>
254       <strong>Note sur la provenance: </strong>
255       <xsl:for-each select="marc:datafield[@tag=317]">
256           <xsl:value-of select="marc:subfield[@code='a']"/>      
257       </xsl:for-each>
258     </li>
259   </xsl:if>
260
261   <xsl:if test="marc:datafield[@tag=320]">
262     <li>
263       <strong>Bibliographie: </strong>
264       <xsl:for-each select="marc:datafield[@tag=320]">
265         <xsl:value-of select="marc:subfield[@code='a']"/>
266         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
267       </xsl:for-each>
268     </li>
269   </xsl:if>
270
271   <xsl:if test="marc:datafield[@tag=328]">
272     <li>
273       <strong>Thèse: </strong>
274       <xsl:for-each select="marc:datafield[@tag=328]">
275         <xsl:value-of select="marc:subfield[@code='a']"/>
276         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
277       </xsl:for-each>
278     </li>
279   </xsl:if>
280
281   <xsl:if test="marc:datafield[@tag=333]">
282     <li>
283       <strong>Public: </strong>
284       <xsl:for-each select="marc:datafield[@tag=333]">
285         <xsl:value-of select="marc:subfield[@code='a']"/>
286         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
287       </xsl:for-each>
288     </li>
289   </xsl:if>
290
291   <xsl:if test="marc:datafield[@tag=955]">
292     <li>
293       <strong>SUDOC serial history: </strong>
294       <xsl:for-each select="marc:datafield[@tag=955]">
295         <xsl:value-of select="marc:subfield[@code='9']"/>: 
296         <xsl:value-of select="marc:subfield[@code='r']"/>
297         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
298       </xsl:for-each>
299     </li>
300   </xsl:if>
301
302   <xsl:if test="marc:datafield[@tag=955]">
303     <li>
304       <strong>SUDOC serial history: </strong>
305       <xsl:for-each select="marc:datafield[@tag=955]">
306         <xsl:value-of select="marc:subfield[@code='9']"/>: 
307         <xsl:value-of select="marc:subfield[@code='r']"/>
308         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
309       </xsl:for-each>
310     </li>
311   </xsl:if>
312
313   <xsl:call-template name="tag_subject">
314     <xsl:with-param name="tag">600</xsl:with-param>
315     <xsl:with-param name="label">Sujet - Nom de personne</xsl:with-param>
316   </xsl:call-template>
317
318   <xsl:call-template name="tag_subject">
319     <xsl:with-param name="tag">601</xsl:with-param>
320     <xsl:with-param name="label">Sujet - Collectivité</xsl:with-param>
321   </xsl:call-template>
322
323   <xsl:call-template name="tag_subject">
324     <xsl:with-param name="tag">602</xsl:with-param>
325     <xsl:with-param name="label">Sujet - Famille</xsl:with-param>
326   </xsl:call-template>
327
328   <xsl:call-template name="tag_subject">
329     <xsl:with-param name="tag">604</xsl:with-param>
330     <xsl:with-param name="label">Sujet - Auteur/titre</xsl:with-param>
331   </xsl:call-template>
332
333   <xsl:call-template name="tag_subject">
334     <xsl:with-param name="tag">606</xsl:with-param>
335     <xsl:with-param name="label">Sujet - Nom commun</xsl:with-param>
336   </xsl:call-template>
337
338   <xsl:call-template name="tag_subject">
339     <xsl:with-param name="tag">607</xsl:with-param>
340     <xsl:with-param name="label">Sujet - Nom géographique</xsl:with-param>
341   </xsl:call-template>
342
343   <xsl:call-template name="tag_subject">
344     <xsl:with-param name="tag">608</xsl:with-param>
345     <xsl:with-param name="label">Sujet - Forme</xsl:with-param>
346   </xsl:call-template>
347
348   <xsl:call-template name="tag_subject">
349     <xsl:with-param name="tag">610</xsl:with-param>
350     <xsl:with-param name="label">Sujet</xsl:with-param>
351   </xsl:call-template>
352
353   <xsl:call-template name="tag_subject">
354     <xsl:with-param name="tag">615</xsl:with-param>
355     <xsl:with-param name="label">Catégorie sujet</xsl:with-param>
356   </xsl:call-template>
357
358   <xsl:call-template name="tag_subject">
359     <xsl:with-param name="tag">616</xsl:with-param>
360     <xsl:with-param name="label">Marque déposée</xsl:with-param>
361   </xsl:call-template>
362
363   <xsl:if test="marc:datafield[@tag=856]">
364     <li>
365       <strong>Online Resources: </strong>
366       <xsl:for-each select="marc:datafield[@tag=856]">
367         <a>
368           <xsl:attribute name="href">
369             <xsl:value-of select="marc:subfield[@code='u']"/>
370           </xsl:attribute>
371           <xsl:choose>
372             <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
373               <xsl:call-template name="subfieldSelect">
374                 <xsl:with-param name="codes">y3z</xsl:with-param>
375               </xsl:call-template>
376             </xsl:when>
377             <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
378               Click here to access online
379             </xsl:when>
380           </xsl:choose>
381         </a>
382         <xsl:choose>
383           <xsl:when test="position()=last()"></xsl:when>
384           <xsl:otherwise> | </xsl:otherwise>
385         </xsl:choose>      
386       </xsl:for-each>
387     </li>
388   </xsl:if>
389
390         <!-- 780 -->
391         <xsl:if test="marc:datafield[@tag=780]">
392         <xsl:for-each select="marc:datafield[@tag=780]">
393         <li><strong>
394         <xsl:choose>
395         <xsl:when test="@ind2=0">
396             Continues:
397         </xsl:when>
398         <xsl:when test="@ind2=1">
399             Continues in part:
400         </xsl:when>
401         <xsl:when test="@ind2=2">
402             Supersedes:
403         </xsl:when>
404         <xsl:when test="@ind2=3">
405             Supersedes in part:
406         </xsl:when>
407         <xsl:when test="@ind2=4">
408             Formed by the union: ... and: ...
409         </xsl:when>
410         <xsl:when test="@ind2=5">
411             Absorbed:
412         </xsl:when>
413         <xsl:when test="@ind2=6">
414             Absorbed in part:
415         </xsl:when>
416         <xsl:when test="@ind2=7">
417             Separated from:
418         </xsl:when>
419         </xsl:choose>
420         </strong>
421                 <xsl:variable name="f780">
422                     <xsl:call-template name="subfieldSelect">
423                         <xsl:with-param name="codes">at</xsl:with-param>
424                     </xsl:call-template>
425                 </xsl:variable>
426              <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=<xsl:value-of select="translate($f780, '()', '')"/></xsl:attribute>
427                 <xsl:value-of select="translate($f780, '()', '')"/>
428             </a>
429         </li>
430  
431         <xsl:choose>
432         <xsl:when test="@ind1=0">
433             <li><xsl:value-of select="marc:subfield[@code='n']"/></li>
434         </xsl:when>
435         </xsl:choose>
436
437         </xsl:for-each>
438         </xsl:if>
439
440         <!-- 785 -->
441         <xsl:if test="marc:datafield[@tag=785]">
442         <xsl:for-each select="marc:datafield[@tag=785]">
443         <li><strong>
444         <xsl:choose>
445         <xsl:when test="@ind2=0">
446             Continued by:
447         </xsl:when>
448         <xsl:when test="@ind2=1">
449             Continued in part by:
450         </xsl:when>
451         <xsl:when test="@ind2=2">
452             Superseded by:
453         </xsl:when>
454         <xsl:when test="@ind2=3">
455             Superseded in part by:
456         </xsl:when>
457         <xsl:when test="@ind2=4">
458             Absorbed by:
459         </xsl:when>
460         <xsl:when test="@ind2=5">
461             Absorbed in part by:
462         </xsl:when>
463         <xsl:when test="@ind2=6">
464             Split into .. and ...:
465         </xsl:when>
466         <xsl:when test="@ind2=7">
467             Merged with ... to form ...
468         </xsl:when>
469         <xsl:when test="@ind2=8">
470             Changed back to:
471         </xsl:when>
472
473         </xsl:choose>
474         </strong>
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/catalogue/search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
482                 <xsl:value-of select="translate($f785, '()', '')"/>
483             </a>
484
485         </li>
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>