adding XSLT for intranet (UNIMARC only, MARC21 will be done by kf)
[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   <abbr class="unapi-id" title="koha:biblionumber:{marc:datafield[@tag=090]/marc:subfield[@code='a']}"><!-- unAPI --></abbr>
136
137 <xsl:if test="marc:controlfield[@tag=005]">
138     <li><strong>PPN: </strong>
139       <xsl:value-of select="marc:controlfield[@tag=005]"/>
140     </li>
141   </xsl:if>
142
143   <xsl:if test="marc:datafield[@tag=010]/marc:subfield[@code='a']">
144     <li><strong>ISBN: </strong>
145     <xsl:for-each select="marc:datafield[@tag=010]">
146       <xsl:variable name="isbn" select="marc:subfield[@code='a']"/>
147       <xsl:value-of select="marc:subfield[@code='a']"/>
148       <xsl:choose>
149         <xsl:when test="position()=last()">
150           <xsl:text>.</xsl:text>
151         </xsl:when>
152         <xsl:otherwise>
153           <xsl:text> ; </xsl:text>
154         </xsl:otherwise>
155       </xsl:choose>
156     </xsl:for-each>
157     </li>
158   </xsl:if>
159
160   <xsl:if test="marc:datafield[@tag=011]">
161     <li>
162       <strong>ISSN: </strong>
163       <xsl:for-each select="marc:datafield[@tag=011]">
164         <xsl:value-of select="marc:subfield[@code='a']"/>
165         <xsl:choose>
166           <xsl:when test="position()=last()">
167             <xsl:text>.</xsl:text>
168           </xsl:when>
169           <xsl:otherwise>
170             <xsl:text>; </xsl:text>
171           </xsl:otherwise>
172         </xsl:choose>
173       </xsl:for-each>
174     </li>
175   </xsl:if>
176
177   <xsl:call-template name="tag_title">
178     <xsl:with-param name="tag">225</xsl:with-param>
179     <xsl:with-param name="label">Collection</xsl:with-param>
180   </xsl:call-template>
181
182   <xsl:if test="marc:datafield[@tag=676]">
183     <li>
184     <strong>Dewey: </strong>
185       <xsl:for-each select="marc:datafield[@tag=676]">
186         <xsl:value-of select="marc:subfield[@code='a']"/>
187         <xsl:if test="marc:subfield[@code='v']">
188           <xsl:text>, </xsl:text>
189           <xsl:value-of select="marc:subfield[@code='v']"/>
190         </xsl:if>
191         <xsl:if test="marc:subfield[@code='z']">
192           <xsl:text>, </xsl:text>
193           <xsl:value-of select="marc:subfield[@code='z']"/>
194         </xsl:if>
195         <xsl:if test="not (position()=last())">
196           <xsl:text> ; </xsl:text>
197         </xsl:if>
198       </xsl:for-each>
199     </li>
200   </xsl:if>
201
202   <xsl:if test="marc:datafield[@tag=686]">
203     <li>
204     <strong>Classification: </strong>
205       <xsl:for-each select="marc:datafield[@tag=686]">
206         <xsl:value-of select="marc:subfield[@code='a']"/>
207         <xsl:if test="marc:subfield[@code='b']">
208           <xsl:text>, </xsl:text>
209           <xsl:value-of select="marc:subfield[@code='b']"/>
210         </xsl:if>
211         <xsl:if test="marc:subfield[@code='c']">
212           <xsl:text>, </xsl:text>
213           <xsl:value-of select="marc:subfield[@code='c']"/>
214         </xsl:if>
215         <xsl:if test="not (position()=last())"><xsl:text> ; </xsl:text></xsl:if>
216       </xsl:for-each>
217     </li>
218   </xsl:if>
219
220   <xsl:if test="marc:datafield[@tag=327]">
221     <li>
222       <strong>Note de contenu: </strong>
223       <xsl:for-each select="marc:datafield[@tag=327]">
224         <xsl:call-template name="chopPunctuation">
225           <xsl:with-param name="chopString">
226             <xsl:call-template name="subfieldSelect">
227                 <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
228                 <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
229                 <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
230             </xsl:call-template>
231           </xsl:with-param>
232         </xsl:call-template>
233       </xsl:for-each>
234     </li>
235   </xsl:if>
236
237   <xsl:if test="marc:datafield[@tag=330]">
238     <li>
239       <strong>Résumé: </strong>
240       <xsl:for-each select="marc:datafield[@tag=330]">
241         <xsl:value-of select="marc:subfield[@code='a']"/>
242         <xsl:choose>
243           <xsl:when test="position()=last()">
244             <xsl:text>.</xsl:text>
245           </xsl:when>
246           <xsl:otherwise>
247             <xsl:text>; </xsl:text>
248           </xsl:otherwise>
249         </xsl:choose>
250       </xsl:for-each>
251     </li>
252   </xsl:if>
253
254   <xsl:if test="marc:datafield[@tag=317]">
255     <li>
256       <strong>Note sur la provenance: </strong>
257       <xsl:for-each select="marc:datafield[@tag=317]">
258           <xsl:value-of select="marc:subfield[@code='a']"/>      
259       </xsl:for-each>
260     </li>
261   </xsl:if>
262
263   <xsl:if test="marc:datafield[@tag=320]">
264     <li>
265       <strong>Bibliographie: </strong>
266       <xsl:for-each select="marc:datafield[@tag=320]">
267         <xsl:value-of select="marc:subfield[@code='a']"/>
268         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
269       </xsl:for-each>
270     </li>
271   </xsl:if>
272
273   <xsl:if test="marc:datafield[@tag=328]">
274     <li>
275       <strong>Thèse: </strong>
276       <xsl:for-each select="marc:datafield[@tag=328]">
277         <xsl:value-of select="marc:subfield[@code='a']"/>
278         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
279       </xsl:for-each>
280     </li>
281   </xsl:if>
282
283   <xsl:if test="marc:datafield[@tag=333]">
284     <li>
285       <strong>Public: </strong>
286       <xsl:for-each select="marc:datafield[@tag=333]">
287         <xsl:value-of select="marc:subfield[@code='a']"/>
288         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
289       </xsl:for-each>
290     </li>
291   </xsl:if>
292
293   <xsl:call-template name="tag_subject">
294     <xsl:with-param name="tag">600</xsl:with-param>
295     <xsl:with-param name="label">Sujet - Nom de personne</xsl:with-param>
296   </xsl:call-template>
297
298   <xsl:call-template name="tag_subject">
299     <xsl:with-param name="tag">601</xsl:with-param>
300     <xsl:with-param name="label">Sujet - Collectivité</xsl:with-param>
301   </xsl:call-template>
302
303   <xsl:call-template name="tag_subject">
304     <xsl:with-param name="tag">602</xsl:with-param>
305     <xsl:with-param name="label">Sujet - Famille</xsl:with-param>
306   </xsl:call-template>
307
308   <xsl:call-template name="tag_subject">
309     <xsl:with-param name="tag">604</xsl:with-param>
310     <xsl:with-param name="label">Sujet - Auteur/titre</xsl:with-param>
311   </xsl:call-template>
312
313   <xsl:call-template name="tag_subject">
314     <xsl:with-param name="tag">606</xsl:with-param>
315     <xsl:with-param name="label">Sujet - Nom commun</xsl:with-param>
316   </xsl:call-template>
317
318   <xsl:call-template name="tag_subject">
319     <xsl:with-param name="tag">607</xsl:with-param>
320     <xsl:with-param name="label">Sujet - Nom géographique</xsl:with-param>
321   </xsl:call-template>
322
323   <xsl:call-template name="tag_subject">
324     <xsl:with-param name="tag">608</xsl:with-param>
325     <xsl:with-param name="label">Sujet - Forme</xsl:with-param>
326   </xsl:call-template>
327
328   <xsl:call-template name="tag_subject">
329     <xsl:with-param name="tag">610</xsl:with-param>
330     <xsl:with-param name="label">Sujet</xsl:with-param>
331   </xsl:call-template>
332
333   <xsl:call-template name="tag_subject">
334     <xsl:with-param name="tag">615</xsl:with-param>
335     <xsl:with-param name="label">Catégorie sujet</xsl:with-param>
336   </xsl:call-template>
337
338   <xsl:call-template name="tag_subject">
339     <xsl:with-param name="tag">616</xsl:with-param>
340     <xsl:with-param name="label">Marque déposée</xsl:with-param>
341   </xsl:call-template>
342
343   <xsl:if test="marc:datafield[@tag=856]">
344     <li>
345       <strong>Online Resources: </strong>
346       <xsl:for-each select="marc:datafield[@tag=856]">
347         <a>
348           <xsl:attribute name="href">
349             <xsl:value-of select="marc:subfield[@code='u']"/>
350           </xsl:attribute>
351           <xsl:choose>
352             <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
353               <xsl:call-template name="subfieldSelect">
354                 <xsl:with-param name="codes">y3z</xsl:with-param>
355               </xsl:call-template>
356             </xsl:when>
357             <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
358               Click here to access online
359             </xsl:when>
360           </xsl:choose>
361         </a>
362         <xsl:choose>
363           <xsl:when test="position()=last()"></xsl:when>
364           <xsl:otherwise> | </xsl:otherwise>
365         </xsl:choose>      
366       </xsl:for-each>
367     </strong>
368   </xsl:if>
369
370         <!-- 780 -->
371         <xsl:if test="marc:datafield[@tag=780]">
372         <xsl:for-each select="marc:datafield[@tag=780]">
373         <li><strong>
374         <xsl:choose>
375         <xsl:when test="@ind2=0">
376             Continues:
377         </xsl:when>
378         <xsl:when test="@ind2=1">
379             Continues in part:
380         </xsl:when>
381         <xsl:when test="@ind2=2">
382             Supersedes:
383         </xsl:when>
384         <xsl:when test="@ind2=3">
385             Supersedes in part:
386         </xsl:when>
387         <xsl:when test="@ind2=4">
388             Formed by the union: ... and: ...
389         </xsl:when>
390         <xsl:when test="@ind2=5">
391             Absorbed:
392         </xsl:when>
393         <xsl:when test="@ind2=6">
394             Absorbed in part:
395         </xsl:when>
396         <xsl:when test="@ind2=7">
397             Separated from:
398         </xsl:when>
399         </xsl:choose>
400         </strong>
401                 <xsl:variable name="f780">
402                     <xsl:call-template name="subfieldSelect">
403                         <xsl:with-param name="codes">at</xsl:with-param>
404                     </xsl:call-template>
405                 </xsl:variable>
406              <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f780, '()', '')"/></xsl:attribute>
407                 <xsl:value-of select="translate($f780, '()', '')"/>
408             </a>
409         </li>
410  
411         <xsl:choose>
412         <xsl:when test="@ind1=0">
413             <li><xsl:value-of select="marc:subfield[@code='n']"/></li>
414         </xsl:when>
415         </xsl:choose>
416
417         </xsl:for-each>
418         </xsl:if>
419
420         <!-- 785 -->
421         <xsl:if test="marc:datafield[@tag=785]">
422         <xsl:for-each select="marc:datafield[@tag=785]">
423         <li><strong>
424         <xsl:choose>
425         <xsl:when test="@ind2=0">
426             Continued by:
427         </xsl:when>
428         <xsl:when test="@ind2=1">
429             Continued in part by:
430         </xsl:when>
431         <xsl:when test="@ind2=2">
432             Superseded by:
433         </xsl:when>
434         <xsl:when test="@ind2=3">
435             Superseded in part by:
436         </xsl:when>
437         <xsl:when test="@ind2=4">
438             Absorbed by:
439         </xsl:when>
440         <xsl:when test="@ind2=5">
441             Absorbed in part by:
442         </xsl:when>
443         <xsl:when test="@ind2=6">
444             Split into .. and ...:
445         </xsl:when>
446         <xsl:when test="@ind2=7">
447             Merged with ... to form ...
448         </xsl:when>
449         <xsl:when test="@ind2=8">
450             Changed back to:
451         </xsl:when>
452
453         </xsl:choose>
454         </strong>
455                    <xsl:variable name="f785">
456                     <xsl:call-template name="subfieldSelect">
457                         <xsl:with-param name="codes">at</xsl:with-param>
458                     </xsl:call-template>
459                 </xsl:variable>
460
461                 <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
462                 <xsl:value-of select="translate($f785, '()', '')"/>
463             </a>
464
465         </li>
466         </xsl:for-each>
467         </xsl:if>
468
469     </xsl:template>
470
471     <xsl:template name="nameABCDQ">
472             <xsl:call-template name="chopPunctuation">
473                 <xsl:with-param name="chopString">
474                     <xsl:call-template name="subfieldSelect">
475                         <xsl:with-param name="codes">aq</xsl:with-param>
476                     </xsl:call-template>
477                 </xsl:with-param>
478                 <xsl:with-param name="punctuation">
479                     <xsl:text>:,;/ </xsl:text>
480                 </xsl:with-param>
481             </xsl:call-template>
482         <xsl:call-template name="termsOfAddress"/>
483     </xsl:template>
484
485     <xsl:template name="nameABCDN">
486         <xsl:for-each select="marc:subfield[@code='a']">
487                 <xsl:call-template name="chopPunctuation">
488                     <xsl:with-param name="chopString" select="."/>
489                 </xsl:call-template>
490         </xsl:for-each>
491         <xsl:for-each select="marc:subfield[@code='b']">
492                 <xsl:value-of select="."/>
493         </xsl:for-each>
494         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
495                 <xsl:call-template name="subfieldSelect">
496                     <xsl:with-param name="codes">cdn</xsl:with-param>
497                 </xsl:call-template>
498         </xsl:if>
499     </xsl:template>
500
501     <xsl:template name="nameACDEQ">
502             <xsl:call-template name="subfieldSelect">
503                 <xsl:with-param name="codes">acdeq</xsl:with-param>
504             </xsl:call-template>
505     </xsl:template>
506     <xsl:template name="termsOfAddress">
507         <xsl:if test="marc:subfield[@code='b' or @code='c']">
508             <xsl:call-template name="chopPunctuation">
509                 <xsl:with-param name="chopString">
510                     <xsl:call-template name="subfieldSelect">
511                         <xsl:with-param name="codes">bc</xsl:with-param>
512                     </xsl:call-template>
513                 </xsl:with-param>
514             </xsl:call-template>
515         </xsl:if>
516     </xsl:template>
517
518     <xsl:template name="part">
519         <xsl:variable name="partNumber">
520             <xsl:call-template name="specialSubfieldSelect">
521                 <xsl:with-param name="axis">n</xsl:with-param>
522                 <xsl:with-param name="anyCodes">n</xsl:with-param>
523                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
524             </xsl:call-template>
525         </xsl:variable>
526         <xsl:variable name="partName">
527             <xsl:call-template name="specialSubfieldSelect">
528                 <xsl:with-param name="axis">p</xsl:with-param>
529                 <xsl:with-param name="anyCodes">p</xsl:with-param>
530                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
531             </xsl:call-template>
532         </xsl:variable>
533         <xsl:if test="string-length(normalize-space($partNumber))">
534                 <xsl:call-template name="chopPunctuation">
535                     <xsl:with-param name="chopString" select="$partNumber"/>
536                 </xsl:call-template>
537         </xsl:if>
538         <xsl:if test="string-length(normalize-space($partName))">
539                 <xsl:call-template name="chopPunctuation">
540                     <xsl:with-param name="chopString" select="$partName"/>
541                 </xsl:call-template>
542         </xsl:if>
543     </xsl:template>
544
545     <xsl:template name="specialSubfieldSelect">
546         <xsl:param name="anyCodes"/>
547         <xsl:param name="axis"/>
548         <xsl:param name="beforeCodes"/>
549         <xsl:param name="afterCodes"/>
550         <xsl:variable name="str">
551             <xsl:for-each select="marc:subfield">
552                 <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])">
553                     <xsl:value-of select="text()"/>
554                     <xsl:text> </xsl:text>
555                 </xsl:if>
556             </xsl:for-each>
557         </xsl:variable>
558         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
559     </xsl:template>
560
561 </xsl:stylesheet>