Merge commit 'kc/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 <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>
394         <xsl:choose>
395         <xsl:when test="@ind2=0">
396             <strong>Continues:</strong>
397         </xsl:when>
398         <xsl:when test="@ind2=1">
399             <strong>Continues in part:</strong>
400         </xsl:when>
401         <xsl:when test="@ind2=2">
402             <strong>Supersedes:</strong>
403         </xsl:when>
404         <xsl:when test="@ind2=3">
405             <strong>Supersedes in part:</strong>
406         </xsl:when>
407         <xsl:when test="@ind2=4">
408             <strong>Formed by the union: ... and: ...</strong>
409         </xsl:when>
410         <xsl:when test="@ind2=5">
411             <strong>Absorbed:</strong>
412         </xsl:when>
413         <xsl:when test="@ind2=6">
414             <strong>Absorbed in part:</strong>
415         </xsl:when>
416         <xsl:when test="@ind2=7">
417             <strong>Separated from:</strong>
418         </xsl:when>
419         </xsl:choose>
420
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>
444         <xsl:choose>
445         <xsl:when test="@ind2=0">
446             <strong>Continued by:</strong>
447         </xsl:when>
448         <xsl:when test="@ind2=1">
449             <strong>Continued in part by:</strong>
450         </xsl:when>
451         <xsl:when test="@ind2=2">
452             <strong>Superseded by:</strong>
453         </xsl:when>
454         <xsl:when test="@ind2=3">
455             <strong>Superseded in part by:</strong>
456         </xsl:when>
457         <xsl:when test="@ind2=4">
458             <strong>Absorbed by:</strong>
459         </xsl:when>
460         <xsl:when test="@ind2=5">
461             <strong>Absorbed in part by:</strong>
462         </xsl:when>
463         <xsl:when test="@ind2=6">
464             <strong>Split into .. and ...:</strong>
465         </xsl:when>
466         <xsl:when test="@ind2=7">
467             <strong>Merged with ... to form ...</strong>
468         </xsl:when>
469         <xsl:when test="@ind2=8">
470             <strong>Changed back to:</strong>
471         </xsl:when>
472         </xsl:choose>
473                    <xsl:variable name="f785">
474                     <xsl:call-template name="subfieldSelect">
475                         <xsl:with-param name="codes">at</xsl:with-param>
476                     </xsl:call-template>
477                 </xsl:variable>
478
479                 <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
480                 <xsl:value-of select="translate($f785, '()', '')"/>
481             </a>
482
483         </li>
484         </xsl:for-each>
485         </xsl:if>
486
487     </xsl:template>
488
489     <xsl:template name="nameABCDQ">
490             <xsl:call-template name="chopPunctuation">
491                 <xsl:with-param name="chopString">
492                     <xsl:call-template name="subfieldSelect">
493                         <xsl:with-param name="codes">aq</xsl:with-param>
494                     </xsl:call-template>
495                 </xsl:with-param>
496                 <xsl:with-param name="punctuation">
497                     <xsl:text>:,;/ </xsl:text>
498                 </xsl:with-param>
499             </xsl:call-template>
500         <xsl:call-template name="termsOfAddress"/>
501     </xsl:template>
502
503     <xsl:template name="nameABCDN">
504         <xsl:for-each select="marc:subfield[@code='a']">
505                 <xsl:call-template name="chopPunctuation">
506                     <xsl:with-param name="chopString" select="."/>
507                 </xsl:call-template>
508         </xsl:for-each>
509         <xsl:for-each select="marc:subfield[@code='b']">
510                 <xsl:value-of select="."/>
511         </xsl:for-each>
512         <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
513                 <xsl:call-template name="subfieldSelect">
514                     <xsl:with-param name="codes">cdn</xsl:with-param>
515                 </xsl:call-template>
516         </xsl:if>
517     </xsl:template>
518
519     <xsl:template name="nameACDEQ">
520             <xsl:call-template name="subfieldSelect">
521                 <xsl:with-param name="codes">acdeq</xsl:with-param>
522             </xsl:call-template>
523     </xsl:template>
524     <xsl:template name="termsOfAddress">
525         <xsl:if test="marc:subfield[@code='b' or @code='c']">
526             <xsl:call-template name="chopPunctuation">
527                 <xsl:with-param name="chopString">
528                     <xsl:call-template name="subfieldSelect">
529                         <xsl:with-param name="codes">bc</xsl:with-param>
530                     </xsl:call-template>
531                 </xsl:with-param>
532             </xsl:call-template>
533         </xsl:if>
534     </xsl:template>
535
536     <xsl:template name="part">
537         <xsl:variable name="partNumber">
538             <xsl:call-template name="specialSubfieldSelect">
539                 <xsl:with-param name="axis">n</xsl:with-param>
540                 <xsl:with-param name="anyCodes">n</xsl:with-param>
541                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
542             </xsl:call-template>
543         </xsl:variable>
544         <xsl:variable name="partName">
545             <xsl:call-template name="specialSubfieldSelect">
546                 <xsl:with-param name="axis">p</xsl:with-param>
547                 <xsl:with-param name="anyCodes">p</xsl:with-param>
548                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
549             </xsl:call-template>
550         </xsl:variable>
551         <xsl:if test="string-length(normalize-space($partNumber))">
552                 <xsl:call-template name="chopPunctuation">
553                     <xsl:with-param name="chopString" select="$partNumber"/>
554                 </xsl:call-template>
555         </xsl:if>
556         <xsl:if test="string-length(normalize-space($partName))">
557                 <xsl:call-template name="chopPunctuation">
558                     <xsl:with-param name="chopString" select="$partName"/>
559                 </xsl:call-template>
560         </xsl:if>
561     </xsl:template>
562
563     <xsl:template name="specialSubfieldSelect">
564         <xsl:param name="anyCodes"/>
565         <xsl:param name="axis"/>
566         <xsl:param name="beforeCodes"/>
567         <xsl:param name="afterCodes"/>
568         <xsl:variable name="str">
569             <xsl:for-each select="marc:subfield">
570                 <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])">
571                     <xsl:value-of select="text()"/>
572                     <xsl:text> </xsl:text>
573                 </xsl:if>
574             </xsl:for-each>
575         </xsl:variable>
576         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
577     </xsl:template>
578
579 </xsl:stylesheet>