Merge commit 'pianohacker-koha/prefs-submit' into master
[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=009]">
138     <li><strong>PPN: </strong>
139       <xsl:value-of select="marc:controlfield[@tag=009]"/>
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:if test="marc:datafield[@tag=955]">
294     <li>
295       <strong>SUDOC serial history: </strong>
296       <xsl:for-each select="marc:datafield[@tag=955]">
297         <xsl:value-of select="marc:subfield[@code='9']"/>: 
298         <xsl:value-of select="marc:subfield[@code='r']"/>
299         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
300       </xsl:for-each>
301     </li>
302   </xsl:if>
303
304   <xsl:if test="marc:datafield[@tag=955]">
305     <li>
306       <strong>SUDOC serial history: </strong>
307       <xsl:for-each select="marc:datafield[@tag=955]">
308         <xsl:value-of select="marc:subfield[@code='9']"/>: 
309         <xsl:value-of select="marc:subfield[@code='r']"/>
310         <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
311       </xsl:for-each>
312     </li>
313   </xsl:if>
314
315   <xsl:call-template name="tag_subject">
316     <xsl:with-param name="tag">600</xsl:with-param>
317     <xsl:with-param name="label">Sujet - Nom de personne</xsl:with-param>
318   </xsl:call-template>
319
320   <xsl:call-template name="tag_subject">
321     <xsl:with-param name="tag">601</xsl:with-param>
322     <xsl:with-param name="label">Sujet - Collectivité</xsl:with-param>
323   </xsl:call-template>
324
325   <xsl:call-template name="tag_subject">
326     <xsl:with-param name="tag">602</xsl:with-param>
327     <xsl:with-param name="label">Sujet - Famille</xsl:with-param>
328   </xsl:call-template>
329
330   <xsl:call-template name="tag_subject">
331     <xsl:with-param name="tag">604</xsl:with-param>
332     <xsl:with-param name="label">Sujet - Auteur/titre</xsl:with-param>
333   </xsl:call-template>
334
335   <xsl:call-template name="tag_subject">
336     <xsl:with-param name="tag">606</xsl:with-param>
337     <xsl:with-param name="label">Sujet - Nom commun</xsl:with-param>
338   </xsl:call-template>
339
340   <xsl:call-template name="tag_subject">
341     <xsl:with-param name="tag">607</xsl:with-param>
342     <xsl:with-param name="label">Sujet - Nom géographique</xsl:with-param>
343   </xsl:call-template>
344
345   <xsl:call-template name="tag_subject">
346     <xsl:with-param name="tag">608</xsl:with-param>
347     <xsl:with-param name="label">Sujet - Forme</xsl:with-param>
348   </xsl:call-template>
349
350   <xsl:call-template name="tag_subject">
351     <xsl:with-param name="tag">610</xsl:with-param>
352     <xsl:with-param name="label">Sujet</xsl:with-param>
353   </xsl:call-template>
354
355   <xsl:call-template name="tag_subject">
356     <xsl:with-param name="tag">615</xsl:with-param>
357     <xsl:with-param name="label">Catégorie sujet</xsl:with-param>
358   </xsl:call-template>
359
360   <xsl:call-template name="tag_subject">
361     <xsl:with-param name="tag">616</xsl:with-param>
362     <xsl:with-param name="label">Marque déposée</xsl:with-param>
363   </xsl:call-template>
364
365   <xsl:if test="marc:datafield[@tag=856]">
366     <li>
367       <strong>Online Resources: </strong>
368       <xsl:for-each select="marc:datafield[@tag=856]">
369         <a>
370           <xsl:attribute name="href">
371             <xsl:value-of select="marc:subfield[@code='u']"/>
372           </xsl:attribute>
373           <xsl:choose>
374             <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
375               <xsl:call-template name="subfieldSelect">
376                 <xsl:with-param name="codes">y3z</xsl:with-param>
377               </xsl:call-template>
378             </xsl:when>
379             <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
380               Click here to access online
381             </xsl:when>
382           </xsl:choose>
383         </a>
384         <xsl:choose>
385           <xsl:when test="position()=last()"></xsl:when>
386           <xsl:otherwise> | </xsl:otherwise>
387         </xsl:choose>      
388       </xsl:for-each>
389     </strong>
390   </xsl:if>
391
392         <!-- 780 -->
393         <xsl:if test="marc:datafield[@tag=780]">
394         <xsl:for-each select="marc:datafield[@tag=780]">
395         <li><strong>
396         <xsl:choose>
397         <xsl:when test="@ind2=0">
398             Continues:
399         </xsl:when>
400         <xsl:when test="@ind2=1">
401             Continues in part:
402         </xsl:when>
403         <xsl:when test="@ind2=2">
404             Supersedes:
405         </xsl:when>
406         <xsl:when test="@ind2=3">
407             Supersedes in part:
408         </xsl:when>
409         <xsl:when test="@ind2=4">
410             Formed by the union: ... and: ...
411         </xsl:when>
412         <xsl:when test="@ind2=5">
413             Absorbed:
414         </xsl:when>
415         <xsl:when test="@ind2=6">
416             Absorbed in part:
417         </xsl:when>
418         <xsl:when test="@ind2=7">
419             Separated from:
420         </xsl:when>
421         </xsl:choose>
422         </strong>
423                 <xsl:variable name="f780">
424                     <xsl:call-template name="subfieldSelect">
425                         <xsl:with-param name="codes">at</xsl:with-param>
426                     </xsl:call-template>
427                 </xsl:variable>
428              <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f780, '()', '')"/></xsl:attribute>
429                 <xsl:value-of select="translate($f780, '()', '')"/>
430             </a>
431         </li>
432  
433         <xsl:choose>
434         <xsl:when test="@ind1=0">
435             <li><xsl:value-of select="marc:subfield[@code='n']"/></li>
436         </xsl:when>
437         </xsl:choose>
438
439         </xsl:for-each>
440         </xsl:if>
441
442         <!-- 785 -->
443         <xsl:if test="marc:datafield[@tag=785]">
444         <xsl:for-each select="marc:datafield[@tag=785]">
445         <li><strong>
446         <xsl:choose>
447         <xsl:when test="@ind2=0">
448             Continued by:
449         </xsl:when>
450         <xsl:when test="@ind2=1">
451             Continued in part by:
452         </xsl:when>
453         <xsl:when test="@ind2=2">
454             Superseded by:
455         </xsl:when>
456         <xsl:when test="@ind2=3">
457             Superseded in part by:
458         </xsl:when>
459         <xsl:when test="@ind2=4">
460             Absorbed by:
461         </xsl:when>
462         <xsl:when test="@ind2=5">
463             Absorbed in part by:
464         </xsl:when>
465         <xsl:when test="@ind2=6">
466             Split into .. and ...:
467         </xsl:when>
468         <xsl:when test="@ind2=7">
469             Merged with ... to form ...
470         </xsl:when>
471         <xsl:when test="@ind2=8">
472             Changed back to:
473         </xsl:when>
474
475         </xsl:choose>
476         </strong>
477                    <xsl:variable name="f785">
478                     <xsl:call-template name="subfieldSelect">
479                         <xsl:with-param name="codes">at</xsl:with-param>
480                     </xsl:call-template>
481                 </xsl:variable>
482
483                 <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
484                 <xsl:value-of select="translate($f785, '()', '')"/>
485             </a>
486
487         </li>
488         </xsl:for-each>
489         </xsl:if>
490
491     </xsl:template>
492
493     <xsl:template name="nameABCDQ">
494             <xsl:call-template name="chopPunctuation">
495                 <xsl:with-param name="chopString">
496                     <xsl:call-template name="subfieldSelect">
497                         <xsl:with-param name="codes">aq</xsl:with-param>
498                     </xsl:call-template>
499                 </xsl:with-param>
500                 <xsl:with-param name="punctuation">
501                     <xsl:text>:,;/ </xsl:text>
502                 </xsl:with-param>
503             </xsl:call-template>
504         <xsl:call-template name="termsOfAddress"/>
505     </xsl:template>
506
507     <xsl:template name="nameABCDN">
508         <xsl:for-each select="marc:subfield[@code='a']">
509                 <xsl:call-template name="chopPunctuation">
510                     <xsl:with-param name="chopString" select="."/>
511                 </xsl:call-template>
512         </xsl:for-each>
513         <xsl:for-each select="marc:subfield[@code='b']">
514                 <xsl:value-of select="."/>
515         </xsl:for-each>
516         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
517                 <xsl:call-template name="subfieldSelect">
518                     <xsl:with-param name="codes">cdn</xsl:with-param>
519                 </xsl:call-template>
520         </xsl:if>
521     </xsl:template>
522
523     <xsl:template name="nameACDEQ">
524             <xsl:call-template name="subfieldSelect">
525                 <xsl:with-param name="codes">acdeq</xsl:with-param>
526             </xsl:call-template>
527     </xsl:template>
528     <xsl:template name="termsOfAddress">
529         <xsl:if test="marc:subfield[@code='b' or @code='c']">
530             <xsl:call-template name="chopPunctuation">
531                 <xsl:with-param name="chopString">
532                     <xsl:call-template name="subfieldSelect">
533                         <xsl:with-param name="codes">bc</xsl:with-param>
534                     </xsl:call-template>
535                 </xsl:with-param>
536             </xsl:call-template>
537         </xsl:if>
538     </xsl:template>
539
540     <xsl:template name="part">
541         <xsl:variable name="partNumber">
542             <xsl:call-template name="specialSubfieldSelect">
543                 <xsl:with-param name="axis">n</xsl:with-param>
544                 <xsl:with-param name="anyCodes">n</xsl:with-param>
545                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
546             </xsl:call-template>
547         </xsl:variable>
548         <xsl:variable name="partName">
549             <xsl:call-template name="specialSubfieldSelect">
550                 <xsl:with-param name="axis">p</xsl:with-param>
551                 <xsl:with-param name="anyCodes">p</xsl:with-param>
552                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
553             </xsl:call-template>
554         </xsl:variable>
555         <xsl:if test="string-length(normalize-space($partNumber))">
556                 <xsl:call-template name="chopPunctuation">
557                     <xsl:with-param name="chopString" select="$partNumber"/>
558                 </xsl:call-template>
559         </xsl:if>
560         <xsl:if test="string-length(normalize-space($partName))">
561                 <xsl:call-template name="chopPunctuation">
562                     <xsl:with-param name="chopString" select="$partName"/>
563                 </xsl:call-template>
564         </xsl:if>
565     </xsl:template>
566
567     <xsl:template name="specialSubfieldSelect">
568         <xsl:param name="anyCodes"/>
569         <xsl:param name="axis"/>
570         <xsl:param name="beforeCodes"/>
571         <xsl:param name="afterCodes"/>
572         <xsl:variable name="str">
573             <xsl:for-each select="marc:subfield">
574                 <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])">
575                     <xsl:value-of select="text()"/>
576                     <xsl:text> </xsl:text>
577                 </xsl:if>
578             </xsl:for-each>
579         </xsl:variable>
580         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
581     </xsl:template>
582
583 </xsl:stylesheet>