Trim whitespace and comma for ,-list for field 600
[pazpar2-moved-to-github.git] / etc / tmarc.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0"
3   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pz="http://www.indexdata.com/pazpar2/1.0"
4   xmlns:tmarc="http://www.indexdata.com/turbomarc">
5
6   <xsl:output indent="yes" method="xml" version="1.0"
7     encoding="UTF-8" />
8   <xsl:param name="medium"/>
9
10   <!-- Extract metadata from MARC21/USMARC from streamlined marcxml format 
11     http://www.loc.gov/marc/bibliographic/ecbdhome.html -->
12   <xsl:template name="record-hook" />
13
14
15   <xsl:template match="/">
16       <xsl:apply-templates />
17   </xsl:template>
18
19   <xsl:template match="tmarc:collection">
20     <collection>
21       <xsl:apply-templates />
22     </collection>
23   </xsl:template>
24
25   <xsl:template match="tmarc:r">
26     <xsl:variable name="title_medium" select="tmarc:d245/tmarc:sh" />
27     <xsl:variable name="journal_title" select="tmarc:d773/tmarc:st" />
28     <xsl:variable name="electronic_location_url" select="tmarc:d856/tmarc:su" />
29     <xsl:variable name="fulltext_a" select="tmarc:d900/tmarc:sa" />
30     <xsl:variable name="fulltext_b" select="tmarc:d900/tmarc:sb" />
31     <!-- Does not always hit the right substring. The field is not always fixed-width? -->
32     <xsl:variable name="control_lang" select="substring(tmarc:c008, 36, 3)" />
33     <xsl:variable name="contains110" select="tmarc:d110" />
34     <xsl:variable name="hasAuthorFields" select="tmarc:d100 or tmarc:d111" />
35     <xsl:variable name="typeofrec" select="substring(tmarc:l, 7, 1)"/>
36     <xsl:variable name="typeofvm" select="substring(tmarc:c008, 34, 1)"/>
37     <xsl:variable name="biblevel" select="substring(tmarc:l, 8, 1)"/>
38     <xsl:variable name="physdes" select="substring(tmarc:c007, 1, 1)"/>
39     <xsl:variable name="form1" select="substring(tmarc:c008, 24, 1)"/>
40     <xsl:variable name="form2" select="substring(tmarc:c008, 30, 1)"/>
41     <xsl:variable name="oclca" select="substring(tmarc:c007, 1, 1)"/>
42     <xsl:variable name="oclcb" select="substring(tmarc:c007, 2, 1)"/>
43     <xsl:variable name="oclcd" select="substring(tmarc:c007, 4, 1)"/>
44     <xsl:variable name="oclce" select="substring(tmarc:c007, 5, 1)"/>
45     <xsl:variable name="typeofserial" select="substring(tmarc:c008, 22, 1)"/>
46
47     <xsl:variable name="electronic">
48       <xsl:choose>
49         <xsl:when test="$form1='s' or $form1='q' or $form1='o' or
50            $form2='s' or $form2='q' or $form2='o'">
51            <xsl:text>yes</xsl:text>
52         </xsl:when>
53         <xsl:otherwise/>
54       </xsl:choose>
55     </xsl:variable>
56
57     <xsl:variable name="vmedium">
58       <xsl:choose>
59         <xsl:when test="string-length($medium)"><xsl:value-of select="$medium" /></xsl:when>
60         <xsl:when test="($typeofrec='a' or $typeofrec='t') and $biblevel='m'">book</xsl:when>
61         <xsl:when test="$typeofrec='j' or $typeofrec='i'">
62           <xsl:text>recording</xsl:text>
63           <xsl:choose>
64             <xsl:when test="$oclcb='d' and $oclcd='f'">-cd</xsl:when>
65             <xsl:when test="$oclcb='s'">-cassette</xsl:when>
66             <xsl:when test="$oclcb='d' and $oclcd='a' or $oclcd='b' or
67               $oclcd='c' or $oclcd='d' or $oclcd='e'">-vinyl</xsl:when>
68           </xsl:choose>
69         </xsl:when>
70         <xsl:when test="$typeofrec='g'">
71           <xsl:choose>
72             <xsl:when test="$typeofvm='m' or $typeofvm='v'">
73               <xsl:text>video</xsl:text>
74               <xsl:choose>
75                 <xsl:when test="$oclca='v' and $oclcb='d' and $oclce='v'">-dvd</xsl:when>
76                 <xsl:when test="$oclca='v' and $oclcb='d' and $oclce='s'">-blu-ray</xsl:when>
77                 <xsl:when test="$oclca='v' and $oclcb='f' and $oclce='b'">-vhs</xsl:when>
78               </xsl:choose>
79             </xsl:when>
80             <xsl:otherwise>audio-visual</xsl:otherwise>
81           </xsl:choose>
82         </xsl:when>
83         <xsl:when test="$typeofrec='a' and $biblevel='s'">
84           <xsl:choose>
85             <xsl:when test="$typeofserial='n'">newspaper</xsl:when>
86             <xsl:otherwise>journal</xsl:otherwise>
87           </xsl:choose>
88         </xsl:when>
89         <xsl:when test="$typeofrec='e' or $typeofrec='f'">map</xsl:when>
90         <xsl:when test="$typeofrec='c' or $typeofrec='d'">music-score</xsl:when>
91         <xsl:when test="$form1='a' or $form1='b' or $form1='c'">microform</xsl:when>
92         <xsl:when test="$typeofrec='t'">thesis</xsl:when>
93         <!-- <xsl:when test="$journal_title">article</xsl:when> -->
94         <xsl:when test="$typeofrec='a' or $typeofrec='i' and
95             ($typeofserial='d' or $typeofserial='w')">web</xsl:when>
96         <xsl:when test="$typeofrec='a' and $biblevel='b'">article</xsl:when>
97         <xsl:when test="$typeofrec='m'">electronic</xsl:when>
98         <xsl:when test="$title_medium">
99           <xsl:value-of select="translate($title_medium, ' []/:', '')" />
100         </xsl:when>
101         <xsl:otherwise>
102           <xsl:text>other</xsl:text>
103         </xsl:otherwise>
104       </xsl:choose>
105     </xsl:variable>
106
107     <xsl:variable name="has_fulltext">
108       <xsl:choose>
109         <xsl:when test="tmarc:d856/tmarc:sq">
110           <xsl:text>yes</xsl:text>
111         </xsl:when>
112         <xsl:when test="tmarc:d856/tmarc:si='TEXT*'">
113           <xsl:text>yes</xsl:text>
114         </xsl:when>
115         <xsl:otherwise>
116           <xsl:text>no</xsl:text>
117         </xsl:otherwise>
118       </xsl:choose>
119     </xsl:variable>
120
121     <xsl:variable name="oclc_number">
122       <xsl:choose>
123         <xsl:when test='contains(tmarc:c001,"ocn") or
124                         contains(tmarc:c001,"ocm") or
125                         contains(tmarc:c001,"OCoLC") '>
126          <xsl:value-of select="tmarc:c001"/>
127         </xsl:when>
128         <xsl:when test='contains(tmarc:d035/tmarc:sa,"ocn") or
129                         contains(tmarc:d035/tmarc:sa,"ocm") or
130                         contains(tmarc:d035/tmarc:sa,"OCoLC") '>
131          <xsl:value-of select="tmarc:d035/tmarc:sa"/>
132         </xsl:when>
133       </xsl:choose>
134     </xsl:variable>
135
136     <xsl:variable name="date_008">
137       <xsl:choose>
138         <xsl:when test="contains('cestpudikmr', substring(tmarc:c008, 7, 1))">
139           <xsl:value-of select="substring(tmarc:c008, 8, 4)" />
140         </xsl:when>
141       </xsl:choose>
142     </xsl:variable>
143
144     <xsl:variable name="date_end_008">
145       <xsl:choose>
146         <xsl:when test="contains('dikmr', substring(tmarc:c008, 7, 1))">
147           <xsl:value-of select="substring(tmarc:c008, 12, 4)" />
148         </xsl:when>
149       </xsl:choose>
150     </xsl:variable>
151
152     <pz:record>
153 <!--
154       <xsl:attribute name="mergekey">
155     <xsl:text>title </xsl:text>
156   <xsl:value-of select="tmarc:d245/tmarc:sa" />
157   <xsl:text> author </xsl:text>
158   <xsl:value-of select="tmarc:d100/tmarc:sa" />
159   <xsl:text> medium </xsl:text>
160   <xsl:value-of select="$medium" />
161     </xsl:attribute>
162   -->
163
164       <xsl:for-each select="tmarc:c001">
165         <pz:metadata type="id">
166           <xsl:value-of select="." />
167         </pz:metadata>
168       </xsl:for-each>
169
170       <pz:metadata type="oclc-number">
171         <xsl:value-of select="$oclc_number" />
172       </pz:metadata>
173
174       <xsl:for-each select="tmarc:d010">
175         <pz:metadata type="lccn">
176           <xsl:value-of select="tmarc:sa" />
177         </pz:metadata>
178       </xsl:for-each>
179
180       <xsl:for-each select="tmarc:d020">
181         <pz:metadata type="isbn">
182           <xsl:value-of select="tmarc:sa" />
183         </pz:metadata>
184       </xsl:for-each>
185
186       <xsl:for-each select="tmarc:d022">
187         <pz:metadata type="issn">
188           <xsl:value-of select="tmarc:sa" />
189         </pz:metadata>
190       </xsl:for-each>
191
192       <xsl:for-each select="tmarc:d027">
193         <pz:metadata type="tech-rep-nr">
194           <xsl:value-of select="tmarc:sa" />
195         </pz:metadata>
196       </xsl:for-each>
197
198       <xsl:for-each select="tmarc:d035"> 
199         <pz:metadata type="system-control-nr">
200           <xsl:choose>
201             <xsl:when test="tmarc:sa">
202               <xsl:value-of select="tmarc:sa"/>
203             </xsl:when>
204             <xsl:otherwise>
205               <xsl:value-of select="tmarc:sb"/>
206             </xsl:otherwise>
207           </xsl:choose>
208         </pz:metadata>
209       </xsl:for-each>
210
211       <xsl:for-each select="tmarc:d100">
212         <pz:metadata type="author">
213           <xsl:value-of select="tmarc:sa" />
214         </pz:metadata>
215         <pz:metadata type="author-title">
216           <xsl:value-of select="tmarc:sc" />
217         </pz:metadata>
218         <pz:metadata type="author-date">
219           <xsl:value-of select="tmarc:sd" />
220         </pz:metadata>
221       </xsl:for-each>
222
223       <xsl:for-each select="tmarc:d110">
224         <pz:metadata type="corporate-name">
225           <xsl:value-of select="tmarc:sa" />
226         </pz:metadata>
227         <pz:metadata type="corporate-location">
228           <xsl:value-of select="tmarc:sc" />
229         </pz:metadata>
230         <pz:metadata type="corporate-date">
231           <xsl:value-of select="tmarc:sd" />
232         </pz:metadata>
233       </xsl:for-each>
234
235       <xsl:for-each select="tmarc:d111">
236         <pz:metadata type="meeting-name">
237           <xsl:value-of select="tmarc:sa" />
238         </pz:metadata>
239         <pz:metadata type="meeting-location">
240           <xsl:value-of select="tmarc:sc" />
241         </pz:metadata>
242         <pz:metadata type="meeting-date">
243           <xsl:value-of select="tmarc:sd" />
244         </pz:metadata>
245       </xsl:for-each>
246
247       <xsl:for-each select="tmarc:d260">
248         <pz:metadata type="date">
249           <xsl:value-of select="translate(tmarc:sc, 'cp[].', '')" />
250         </pz:metadata>
251       </xsl:for-each>
252
253       <xsl:if test="$date_008 and not(tmarc:d260)">
254         <pz:metadata type="date">
255           <xsl:choose>
256             <xsl:when test="$date_end_008">
257               <xsl:value-of select="concat($date_008,'-',$date_end_008)" />
258             </xsl:when>
259             <xsl:otherwise> 
260               <xsl:value-of select="$date_008" />
261             </xsl:otherwise>
262           </xsl:choose>
263         </pz:metadata>
264       </xsl:if>
265
266
267       <xsl:for-each select="tmarc:d130">
268         <pz:metadata type="title-uniform">
269           <xsl:value-of select="tmarc:sa" />
270         </pz:metadata>
271         <pz:metadata type="title-uniform-media">
272           <xsl:value-of select="tmarc:sm" />
273         </pz:metadata>
274         <pz:metadata type="title-uniform-parts">
275           <xsl:value-of select="tmarc:sn" />
276         </pz:metadata>
277         <pz:metadata type="title-uniform-partname">
278           <xsl:value-of select="tmarc:sp" />
279         </pz:metadata>
280         <pz:metadata type="title-uniform-key">
281           <xsl:value-of select="tmarc:sr" />
282         </pz:metadata>
283       </xsl:for-each>
284
285       <xsl:for-each select="tmarc:d245">
286         <pz:metadata type="title">
287           <xsl:value-of select="tmarc:sa" />
288         </pz:metadata>
289         <pz:metadata type="title-remainder">
290           <xsl:value-of select="tmarc:sb" />
291         </pz:metadata>
292         <pz:metadata type="title-responsibility">
293           <xsl:value-of select="tmarc:sc" />
294         </pz:metadata>
295         <pz:metadata type="title-dates">
296           <xsl:value-of select="tmarc:sf" />
297         </pz:metadata>
298         <pz:metadata type="title-medium">
299           <xsl:value-of select="tmarc:sh" />
300         </pz:metadata>
301         <pz:metadata type="title-number-section">
302           <xsl:value-of select="tmarc:sn" />
303         </pz:metadata>
304         <pz:metadata type="title-complete">
305           <xsl:value-of select="tmarc:sa" />
306           <xsl:if test="tmarc:sb" ><xsl:value-of select="concat(' ', tmarc:sb)" /></xsl:if>
307         </pz:metadata>
308       </xsl:for-each>
309
310       <xsl:for-each select="tmarc:d250">
311         <pz:metadata type="edition">
312           <xsl:value-of select="tmarc:sa" />
313         </pz:metadata>
314       </xsl:for-each>
315
316       <xsl:for-each select="tmarc:d260">
317         <pz:metadata type="publication-place">
318           <xsl:value-of select="tmarc:sa" />
319         </pz:metadata>
320         <pz:metadata type="publication-name">
321           <xsl:value-of select="tmarc:sb" />
322         </pz:metadata>
323         <pz:metadata type="publication-date">
324           <xsl:value-of select="tmarc:sc" />
325         </pz:metadata>
326       </xsl:for-each>
327
328       <xsl:for-each select="tmarc:d300">
329         <pz:metadata type="physical-extent">
330           <xsl:value-of select="tmarc:sa" />
331         </pz:metadata>
332         <pz:metadata type="physical-format">
333           <xsl:value-of select="tmarc:sb" />
334         </pz:metadata>
335         <pz:metadata type="physical-dimensions">
336           <xsl:value-of select="tmarc:sc" />
337         </pz:metadata>
338         <pz:metadata type="physical-accomp">
339           <xsl:value-of select="tmarc:se" />
340         </pz:metadata>
341         <pz:metadata type="physical-unittype">
342           <xsl:value-of select="tmarc:sf" />
343         </pz:metadata>
344         <pz:metadata type="physical-unitsize">
345           <xsl:value-of select="tmarc:sg" />
346         </pz:metadata>
347         <pz:metadata type="physical-specified">
348           <xsl:value-of select="tmarc:s3" />
349         </pz:metadata>
350       </xsl:for-each>
351
352       <xsl:for-each select="tmarc:d440">
353         <pz:metadata type="series-title">
354           <xsl:value-of select="tmarc:sa" />
355         </pz:metadata>
356       </xsl:for-each>
357
358       <xsl:for-each select="tmarc:d500">
359         <pz:metadata type="description">
360           <xsl:for-each select="node()">
361             <xsl:value-of select="text()" />
362           </xsl:for-each>
363         </pz:metadata>
364       </xsl:for-each>
365
366       <xsl:for-each select="tmarc:d505">
367         <pz:metadata type="description">
368           <xsl:for-each select="node()">
369             <xsl:value-of select="text()" />
370           </xsl:for-each>
371         </pz:metadata>
372       </xsl:for-each>
373
374       <xsl:for-each select="tmarc:d518">
375         <pz:metadata type="description">
376           <xsl:for-each select="node()">
377             <xsl:value-of select="text()" />
378           </xsl:for-each>
379         </pz:metadata>
380       </xsl:for-each>
381
382       <xsl:for-each select="tmarc:d520">
383         <pz:metadata type="description">
384           <xsl:for-each select="node()">
385             <xsl:value-of select="text()" />
386           </xsl:for-each>
387         </pz:metadata>
388       </xsl:for-each>
389
390       <xsl:for-each select="tmarc:d522">
391         <pz:metadata type="description">
392           <xsl:for-each select="node()">
393             <xsl:value-of select="text()" />
394           </xsl:for-each>
395         </pz:metadata>
396       </xsl:for-each>
397
398       <xsl:for-each select="tmarc:d911">
399         <pz:metadata type="description">
400           <xsl:for-each select="node()">
401             <xsl:value-of select="text()" />
402           </xsl:for-each>
403         </pz:metadata>
404       </xsl:for-each>
405
406       <xsl:for-each select="tmarc:d600">
407         <pz:metadata type="subject">
408           <xsl:value-of select="tmarc:sa" />
409         </pz:metadata>
410         <pz:metadata type="subject-long">
411           <xsl:for-each select="node()/text()">
412             <xsl:if test="position() > 1">
413               <xsl:text>, </xsl:text>
414             </xsl:if>
415             <xsl:variable name='value'>
416               <xsl:value-of select='normalize-space(.)'/>
417             </xsl:variable>
418             <xsl:choose>
419               <xsl:when test="substring($value,string-length($value)) = ','">
420                 <xsl:value-of select="substring($value,0,string-length($value)-1)"/>
421               </xsl:when>
422               <xsl:otherwise>
423                 <xsl:value-of select="$value"/>
424               </xsl:otherwise>
425             </xsl:choose> 
426          </xsl:for-each>
427         </pz:metadata>
428       </xsl:for-each>
429
430       <xsl:for-each select="tmarc:d610">
431         <pz:metadata type="subject">
432           <xsl:value-of select="tmarc:sa" />
433         </pz:metadata>
434         <pz:metadata type="subject-long">
435           <xsl:for-each select="node()/text()">
436             <xsl:if test="position() > 1">
437               <xsl:text>, </xsl:text>
438             </xsl:if>
439             <xsl:value-of select="." />
440           </xsl:for-each>
441         </pz:metadata>
442       </xsl:for-each>
443
444       <xsl:for-each select="tmarc:d611">
445         <pz:metadata type="subject">
446           <xsl:value-of select="tmarc:sa" />
447         </pz:metadata>
448         <pz:metadata type="subject-long">
449           <xsl:for-each select="node()/text()">
450             <xsl:if test="position() > 1">
451               <xsl:text>, </xsl:text>
452             </xsl:if>
453             <xsl:value-of select="." />
454           </xsl:for-each>
455         </pz:metadata>
456       </xsl:for-each>
457
458       <xsl:for-each select="tmarc:d630">
459         <pz:metadata type="subject">
460           <xsl:value-of select="tmarc:sa" />
461         </pz:metadata>
462         <pz:metadata type="subject-long">
463           <xsl:for-each select="node()/text()">
464             <xsl:if test="position() > 1">
465               <xsl:text>, </xsl:text>
466             </xsl:if>
467             <xsl:value-of select="." />
468           </xsl:for-each>
469         </pz:metadata>
470       </xsl:for-each>
471
472       <xsl:for-each select="tmarc:d648">
473         <pz:metadata type="subject">
474           <xsl:value-of select="tmarc:sa" />
475         </pz:metadata>
476         <pz:metadata type="subject-long">
477           <xsl:for-each select="node()/text()">
478             <xsl:if test="position() > 1">
479               <xsl:text>, </xsl:text>
480             </xsl:if>
481             <xsl:value-of select="." />
482           </xsl:for-each>
483         </pz:metadata>
484       </xsl:for-each>
485
486       <xsl:for-each select="tmarc:d650">
487         <pz:metadata type="subject">
488           <xsl:value-of select="tmarc:sa" />
489         </pz:metadata>
490         <pz:metadata type="subject-long">
491           <xsl:for-each select="node()/text()">
492             <xsl:if test="position() > 1">
493               <xsl:text>, </xsl:text>
494             </xsl:if>
495             <xsl:value-of select="." />
496           </xsl:for-each>
497         </pz:metadata>
498       </xsl:for-each>
499
500       <xsl:for-each select="tmarc:d651">
501         <pz:metadata type="subject">
502           <xsl:value-of select="tmarc:sa" />
503         </pz:metadata>
504         <pz:metadata type="subject-long">
505           <xsl:for-each select="node()/text()">
506             <xsl:if test="position() > 1">
507               <xsl:text>, </xsl:text>
508             </xsl:if>
509             <xsl:value-of select="." />
510           </xsl:for-each>
511         </pz:metadata>
512       </xsl:for-each>
513
514       <xsl:for-each select="tmarc:d653">
515         <pz:metadata type="subject">
516           <xsl:value-of select="tmarc:sa" />
517         </pz:metadata>
518         <pz:metadata type="subject-long">
519           <xsl:for-each select="node()/text()">
520             <xsl:if test="position() > 1">
521               <xsl:text>, </xsl:text>
522             </xsl:if>
523             <xsl:value-of select="." />
524           </xsl:for-each>
525         </pz:metadata>
526       </xsl:for-each>
527
528       <xsl:for-each select="tmarc:d654">
529         <pz:metadata type="subject">
530           <xsl:value-of select="tmarc:sa" />
531         </pz:metadata>
532         <pz:metadata type="subject-long">
533           <xsl:for-each select="node()/text()">
534             <xsl:if test="position() > 1">
535               <xsl:text>, </xsl:text>
536             </xsl:if>
537             <xsl:value-of select="." />
538           </xsl:for-each>
539         </pz:metadata>
540       </xsl:for-each>
541
542       <xsl:for-each select="tmarc:d655">
543         <pz:metadata type="subject">
544           <xsl:value-of select="tmarc:sa" />
545         </pz:metadata>
546         <pz:metadata type="subject-long">
547           <xsl:for-each select="node()/text()">
548             <xsl:if test="position() > 1">
549               <xsl:text>, </xsl:text>
550             </xsl:if>
551             <xsl:value-of select="." />
552           </xsl:for-each>
553         </pz:metadata>
554       </xsl:for-each>
555
556       <xsl:for-each select="tmarc:d656">
557         <pz:metadata type="subject">
558           <xsl:value-of select="tmarc:sa" />
559         </pz:metadata>
560         <pz:metadata type="subject-long">
561           <xsl:for-each select="node()/text()">
562             <xsl:if test="position() > 1">
563               <xsl:text>, </xsl:text>
564             </xsl:if>
565             <xsl:value-of select="." />
566           </xsl:for-each>
567         </pz:metadata>
568       </xsl:for-each>
569
570       <xsl:for-each select="tmarc:d657">
571         <pz:metadata type="subject">
572           <xsl:value-of select="tmarc:sa" />
573         </pz:metadata>
574         <pz:metadata type="subject-long">
575           <xsl:for-each select="node()/text()">
576             <xsl:if test="position() > 1">
577               <xsl:text>, </xsl:text>
578             </xsl:if>
579             <xsl:value-of select="." />
580           </xsl:for-each>
581         </pz:metadata>
582       </xsl:for-each>
583
584       <xsl:for-each select="tmarc:d658">
585         <pz:metadata type="subject">
586           <xsl:value-of select="tmarc:sa" />
587         </pz:metadata>
588         <pz:metadata type="subject-long">
589           <xsl:for-each select="node()/text()">
590             <xsl:if test="position() > 1">
591               <xsl:text>, </xsl:text>
592             </xsl:if>
593             <xsl:value-of select="." />
594           </xsl:for-each>
595         </pz:metadata>
596       </xsl:for-each>
597
598       <xsl:for-each select="tmarc:d662">
599         <pz:metadata type="subject">
600           <xsl:value-of select="tmarc:sa" />
601         </pz:metadata>
602         <pz:metadata type="subject-long">
603           <xsl:for-each select="node()/text()">
604             <xsl:if test="position() > 1">
605               <xsl:text>, </xsl:text>
606             </xsl:if>
607             <xsl:value-of select="." />
608           </xsl:for-each>
609         </pz:metadata>
610       </xsl:for-each>
611
612       <xsl:for-each select="tmarc:d69X">
613         <pz:metadata type="subject">
614           <xsl:value-of select="tmarc:sa" />
615         </pz:metadata>
616         <pz:metadata type="subject-long">
617           <xsl:for-each select="node()/text()">
618             <xsl:if test="position() > 1">
619               <xsl:text>, </xsl:text>
620             </xsl:if>
621             <xsl:value-of select="." />
622           </xsl:for-each>
623         </pz:metadata>
624       </xsl:for-each>
625
626       <!-- or tmarc:d651 or tmarc:d653 or tmarc:d654 or tmarc:d655 or tmarc:d656 
627         or tmarc:d657 or tmarc:d658 or tmarc:d662 or tmarc:d69X"> -->
628
629       <!-- <xsl:for-each select="tmarc:d600" > <pz:metadata type="subject"> 
630         <xsl:value-of select="tmarc:sa"/> </pz:metadata> <pz:metadata type="subject-long"> 
631         <xsl:for-each select="tmarc:sa tmarc:sb tmarc:sc tmarc:sd "> <xsl:if test="position() 
632         > 1"> <xsl:text>, </xsl:text> </xsl:if> <xsl:value-of select="."/> </xsl:for-each> 
633         </pz:metadata> </xsl:for-each> -->
634
635       <xsl:for-each select="tmarc:d856">
636         <pz:metadata type="electronic-url">
637           <xsl:value-of select="tmarc:su" />
638         </pz:metadata>
639         <pz:metadata type="electronic-text">
640           <xsl:choose>
641             <xsl:when test="tmarc:sy">
642               <xsl:value-of select="tmarc:sy/text()" />
643             </xsl:when>
644             <xsl:when test="tmarc:s3">
645               <xsl:value-of select="tmarc:s3/text()" />
646             </xsl:when>
647              <xsl:otherwise>Get resource</xsl:otherwise>
648            </xsl:choose>
649         </pz:metadata>
650         <pz:metadata type="electronic-note">
651           <xsl:value-of select="tmarc:sz" />
652         </pz:metadata>
653         <pz:metadata type="electronic-format-instruction">
654           <xsl:value-of select="tmarc:si" />
655         </pz:metadata>
656         <pz:metadata type="electronic-format-type">
657           <xsl:value-of select="tmarc:sq" />
658         </pz:metadata>
659       </xsl:for-each>
660
661       <xsl:for-each select="tmarc:d773">
662         <pz:metadata type="citation">
663           <xsl:for-each select="*">
664             <xsl:value-of select="normalize-space(.)" />
665             <xsl:text> </xsl:text>
666           </xsl:for-each>
667         </pz:metadata>
668         <xsl:if test="tmarc:st">
669           <pz:metadata type="journal-title">
670             <xsl:value-of select="tmarc:st"/>
671           </pz:metadata>
672         </xsl:if>
673         <xsl:if test="tmarc:sg">
674           <pz:metadata type="journal-subpart">
675             <xsl:value-of select="tmarc:sg"/>
676           </pz:metadata>
677         </xsl:if>
678         <xsl:if test="tmarc:sp">
679           <pz:metadata type="journal-title-abbrev">
680             <xsl:value-of select="tmarc:sp"/>
681           </pz:metadata>
682         </xsl:if>
683       </xsl:for-each>
684
685       <xsl:for-each select="tmarc:d852">
686         <xsl:if test="tmarc:sy">
687           <pz:metadata type="publicnote">
688             <xsl:value-of select="tmarc:sy" />
689           </pz:metadata>
690         </xsl:if>
691         <xsl:if test="tmarc:sh">
692           <pz:metadata type="callnumber">
693             <xsl:value-of select="tmarc:sh" />
694           </pz:metadata>
695         </xsl:if>
696       </xsl:for-each>
697
698       <xsl:for-each select="tmarc:d876">
699         <xsl:if test="tmarc:sf">
700           <pz:metadata type="loan-period">
701             <xsl:value-of select="concat(tmarc:s5,':',tmarc:sf)" />
702           </pz:metadata>
703         </xsl:if>
704       </xsl:for-each>
705
706       <pz:metadata type="medium">
707         <xsl:value-of select="$vmedium" />
708         <xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
709           <xsl:text> (electronic)</xsl:text>
710         </xsl:if>
711       </pz:metadata>
712
713       <xsl:for-each select="tmarc:d900/tmarc:sa">
714         <pz:metadata type="fulltext">
715           <xsl:value-of select="." />
716         </pz:metadata>
717       </xsl:for-each>
718
719       <!-- <xsl:if test="$fulltext_a"> <pz:metadata type="fulltext"> <xsl:value-of 
720         select="$fulltext_a"/> </pz:metadata> </xsl:if> -->
721
722       <xsl:for-each select="tmarc:d900/tmarc:sb">
723         <pz:metadata type="fulltext">
724           <xsl:value-of select="." />
725         </pz:metadata>
726       </xsl:for-each>
727
728       <xsl:for-each select="tmarc:d900/tmarc:se">
729         <pz:metadata type="fulltext">
730           <xsl:value-of select="." />
731         </pz:metadata>
732       </xsl:for-each>
733
734       <xsl:for-each select="tmarc:d900/tmarc:sf">
735         <pz:metadata type="fulltext">
736           <xsl:value-of select="." />
737         </pz:metadata>
738       </xsl:for-each>
739
740       <xsl:for-each select="tmarc:d900/tmarc:si">
741         <pz:metadata type="fulltext">
742           <xsl:value-of select="." />
743         </pz:metadata>
744       </xsl:for-each>
745
746       <xsl:for-each select="tmarc:d900/tmarc:sk">
747         <pz:metadata type="fulltext">
748           <xsl:value-of select="." />
749         </pz:metadata>
750       </xsl:for-each>
751
752       <xsl:for-each select="tmarc:d900/tmarc:sq">
753         <pz:metadata type="fulltext">
754           <xsl:value-of select="." />
755         </pz:metadata>
756       </xsl:for-each>
757
758       <xsl:for-each select="tmarc:d900/tmarc:ss">
759         <pz:metadata type="fulltext">
760           <xsl:value-of select="." />
761         </pz:metadata>
762       </xsl:for-each>
763
764       <xsl:for-each select="tmarc:d900/tmarc:su">
765         <pz:metadata type="fulltext">
766           <xsl:value-of select="." />
767         </pz:metadata>
768       </xsl:for-each>
769
770       <xsl:for-each select="tmarc:d900/tmarc:sy">
771         <pz:metadata type="fulltext">
772           <xsl:value-of select="." />
773         </pz:metadata>
774       </xsl:for-each>
775
776
777       <!-- <xsl:if test="$fulltext_b"> <pz:metadata type="fulltext"> <xsl:value-of 
778         select="$fulltext_b"/> </pz:metadata> </xsl:if> -->
779
780       <pz:metadata type="has-fulltext">
781         <xsl:value-of select="$has_fulltext"/>
782       </pz:metadata>
783
784       <xsl:for-each select="tmarc:d907 | tmarc:d901">
785         <pz:metadata type="iii-id">
786           <xsl:value-of select="tmarc:sa" />
787         </pz:metadata>
788       </xsl:for-each>
789
790       <xsl:for-each select="tmarc:d926">
791         <pz:metadata type="locallocation">
792           <xsl:choose><xsl:when test="tmarc:sa">
793             <xsl:value-of select="tmarc:sa"/>
794           </xsl:when><xsl:otherwise>
795             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
796           </xsl:otherwise></xsl:choose>
797         </pz:metadata>
798         <pz:metadata type="callnumber">
799           <xsl:choose><xsl:when test="tmarc:sc">
800             <xsl:value-of select="tmarc:sc"/>
801           </xsl:when><xsl:otherwise>
802             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
803           </xsl:otherwise></xsl:choose>
804         </pz:metadata>
805         <pz:metadata type="available">
806           <xsl:choose><xsl:when test="tmarc:se">
807             <xsl:value-of select="tmarc:se"/>
808           </xsl:when><xsl:otherwise>
809             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
810           </xsl:otherwise></xsl:choose>
811         </pz:metadata>
812       </xsl:for-each>
813
814       <!-- OhioLINK holdings -->
815       <xsl:for-each select="tmarc:d945">
816         <pz:metadata type="locallocation">
817           <xsl:choose>
818             <xsl:when test="tmarc:sa">
819               <xsl:value-of select="tmarc:sa"/>
820             </xsl:when>
821             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
822           </xsl:choose>
823         </pz:metadata>
824         <pz:metadata type="callnumber">
825           <xsl:choose>
826             <xsl:when test="tmarc:sb">
827               <xsl:value-of select="tmarc:sb"/>
828             </xsl:when>
829             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
830           </xsl:choose>
831         </pz:metadata>
832         <pz:metadata type="publicnote">
833           <xsl:choose>
834             <xsl:when test="tmarc:sc">
835               <xsl:value-of select="tmarc:sc"/>
836             </xsl:when>
837             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
838           </xsl:choose>
839         </pz:metadata>
840         <pz:metadata type="available">
841           <xsl:choose>
842             <xsl:when test="tmarc:ss = 'N'">Available</xsl:when>
843             <xsl:when test="tmarc:ss != 'N'">
844               <xsl:choose>
845                 <xsl:when test="tmarc:sd">
846                   <xsl:value-of select="tmarc:sd"/>
847                 </xsl:when>
848                 <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
849               </xsl:choose>
850             </xsl:when>
851             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
852           </xsl:choose>
853         </pz:metadata>      
854       </xsl:for-each>
855
856       <xsl:for-each select="tmarc:d948">
857         <pz:metadata type="holding">
858           <xsl:for-each select="tmarc:s">
859             <xsl:if test="position() > 1">
860               <xsl:text> </xsl:text>
861             </xsl:if>
862             <xsl:value-of select="." />
863           </xsl:for-each>
864         </pz:metadata>
865       </xsl:for-each>
866
867       <xsl:for-each select="tmarc:d991">
868         <pz:metadata type="holding">
869           <xsl:for-each select="tmarc:s">
870             <xsl:if test="position() > 1">
871               <xsl:text> </xsl:text>
872             </xsl:if>
873             <xsl:value-of select="." />
874           </xsl:for-each>
875         </pz:metadata>
876       </xsl:for-each>
877
878       <xsl:for-each select="tmarc:d999">
879         <pz:metadata type="localid">
880           <xsl:choose>
881             <xsl:when test="tmarc:sa">
882               <xsl:value-of select="tmarc:sa"/>
883             </xsl:when>
884             <xsl:when test="tmarc:sc">
885               <xsl:value-of select="tmarc:sc"/>
886             </xsl:when> 
887             <xsl:otherwise>
888               <xsl:value-of select="tmarc:sd"/>
889             </xsl:otherwise>
890           </xsl:choose>
891         </pz:metadata>
892       </xsl:for-each>
893
894
895       <!-- passthrough id data -->
896       <xsl:for-each select="pz:metadata">
897         <xsl:copy-of select="." />
898       </xsl:for-each>
899
900       <!-- other stylesheets importing this might want to define this -->
901         <xsl:call-template name="record-hook" />
902
903     </pz:record>
904   </xsl:template>
905
906   <xsl:template match="text()" />
907
908   <!-- TODO Does not work anymore -->
909   <xsl:template name="shortTitle">
910     <xsl:param name="tag" />
911     <xsl:for-each select="tmarc:d">
912       <xsl:value-of select="tmarc:sa" />
913       <xsl:value-of select="tmarc:sm" />
914       <xsl:value-of select="tmarc:sn" />
915       <xsl:value-of select="tmarc:sp" />
916       <xsl:value-of select="tmarc:sr" />
917     </xsl:for-each>
918   </xsl:template>
919
920   <!-- No working as expected -->
921   <xsl:template name="description">
922     <xsl:param name="element" />
923     <xsl:for-each select="$element">
924       <pz:metadata type="description">
925         <xsl:for-each select="node()">
926           <xsl:value-of select="text()" />
927         </xsl:for-each>
928       </pz:metadata>
929     </xsl:for-each>
930     <xsl:apply-templates />
931   </xsl:template>
932
933   <!-- <xsl:for-each select="tmarc:d500"> <pz:metadata type="description"> 
934     <xsl:for-each select="node()"> <xsl:value-of select="text()"/> </xsl:for-each> 
935     </pz:metadata> </xsl:for-each> -->
936
937
938
939   <xsl:template name="subject">
940     <xsl:param name="element" />
941     <xsl:for-each select="$element">
942       <pz:metadata type="subject">
943         <xsl:value-of select="tmarc:sa" />
944       </pz:metadata>
945       <pz:metadata type="subject-long">
946         <xsl:for-each select="node()/text()">
947           <xsl:if test="position() > 1">
948             <xsl:text>, </xsl:text>
949           </xsl:if>
950           <xsl:value-of select="." />
951         </xsl:for-each>
952       </pz:metadata>
953     </xsl:for-each>
954   </xsl:template>
955
956
957 </xsl:stylesheet>