tmarc.xsl: set journal-subpart to 773$g only
[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           <xsl:variable name="value">
675             <xsl:value-of select="*"/>
676           </xsl:variable>
677           <pz:metadata type="journal-subpart">
678             <xsl:value-of select="$value"/>
679           </pz:metadata>
680           <xsl:variable name="l">
681             <xsl:value-of select="translate($value,
682                                   'ABCDEFGHIJKLMNOPQRSTUVWXYZ.',
683                                   'abcdefghijklmnopqrstuvwxyz ') "/>
684           </xsl:variable>
685           <xsl:variable name="volume">
686             <xsl:choose>
687               <xsl:when test="string-length(substring-after($l,'vol ')) &gt; 0">
688                 <xsl:value-of select="substring-before(normalize-space(substring-after($l,'vol ')),' ')"/>
689               </xsl:when>
690               <xsl:when test="string-length(substring-after($l,'v ')) &gt; 0">
691                 <xsl:value-of select="substring-before(normalize-space(substring-after($l,'v ')),' ')"/>
692               </xsl:when>
693             </xsl:choose>
694           </xsl:variable>
695           <xsl:variable name="issue">
696             <xsl:value-of select="substring-before(translate(normalize-space(substring-after($l,'issue')), ',', ' '),' ')"/>
697           </xsl:variable>
698           <xsl:variable name="pages">
699             <xsl:choose>
700               <xsl:when test="string-length(substring-after($l,' p ')) &gt; 0">
701                 <xsl:value-of select="normalize-space(substring-after($l,' p '))"/>
702               </xsl:when>
703               <xsl:when test="string-length(substring-after($l,',p')) &gt; 0">
704                 <xsl:value-of select="normalize-space(substring-after($l,',p'))"/>
705               </xsl:when>
706               <xsl:when test="string-length(substring-after($l,' p')) &gt; 0">
707                 <xsl:value-of select="normalize-space(substring-after($l,' p'))"/>
708               </xsl:when>
709             </xsl:choose>
710           </xsl:variable>
711
712           <!-- volume -->
713           <xsl:if test="string-length($volume) &gt; 0">
714             <pz:metadata type="volume-number">
715               <xsl:value-of select="$volume"/>
716             </pz:metadata>
717           </xsl:if>
718           <!-- issue -->
719           <xsl:if test="string-length($issue) &gt; 0">
720             <pz:metadata type="issue-number">
721               <xsl:value-of select="$issue"/>
722             </pz:metadata>
723           </xsl:if>
724           <!-- pages -->
725           <xsl:if test="string-length($pages) &gt; 0">
726             <pz:metadata type="pages-number">
727               <xsl:value-of select="$pages"/>
728             </pz:metadata>
729           </xsl:if>
730           
731           <!-- season -->
732         </xsl:if>
733         <xsl:if test="tmarc:sp">
734           <pz:metadata type="journal-title-abbrev">
735             <xsl:value-of select="tmarc:sp"/>
736           </pz:metadata>
737         </xsl:if>
738       </xsl:for-each>
739
740       <xsl:for-each select="tmarc:d852">
741         <xsl:if test="tmarc:sy">
742           <pz:metadata type="publicnote">
743             <xsl:value-of select="tmarc:sy" />
744           </pz:metadata>
745         </xsl:if>
746         <xsl:if test="tmarc:sh">
747           <pz:metadata type="callnumber">
748             <xsl:value-of select="tmarc:sh" />
749           </pz:metadata>
750         </xsl:if>
751       </xsl:for-each>
752
753       <xsl:for-each select="tmarc:d876">
754         <xsl:if test="tmarc:sf">
755           <pz:metadata type="loan-period">
756             <xsl:value-of select="concat(tmarc:s5,':',tmarc:sf)" />
757           </pz:metadata>
758         </xsl:if>
759       </xsl:for-each>
760
761       <pz:metadata type="medium">
762         <xsl:value-of select="$vmedium" />
763         <xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
764           <xsl:text> (electronic)</xsl:text>
765         </xsl:if>
766       </pz:metadata>
767
768       <xsl:for-each select="tmarc:d900/tmarc:sa">
769         <pz:metadata type="fulltext">
770           <xsl:value-of select="." />
771         </pz:metadata>
772       </xsl:for-each>
773
774       <!-- <xsl:if test="$fulltext_a"> <pz:metadata type="fulltext"> <xsl:value-of 
775         select="$fulltext_a"/> </pz:metadata> </xsl:if> -->
776
777       <xsl:for-each select="tmarc:d900/tmarc:sb">
778         <pz:metadata type="fulltext">
779           <xsl:value-of select="." />
780         </pz:metadata>
781       </xsl:for-each>
782
783       <xsl:for-each select="tmarc:d900/tmarc:se">
784         <pz:metadata type="fulltext">
785           <xsl:value-of select="." />
786         </pz:metadata>
787       </xsl:for-each>
788
789       <xsl:for-each select="tmarc:d900/tmarc:sf">
790         <pz:metadata type="fulltext">
791           <xsl:value-of select="." />
792         </pz:metadata>
793       </xsl:for-each>
794
795       <xsl:for-each select="tmarc:d900/tmarc:si">
796         <pz:metadata type="fulltext">
797           <xsl:value-of select="." />
798         </pz:metadata>
799       </xsl:for-each>
800
801       <xsl:for-each select="tmarc:d900/tmarc:sk">
802         <pz:metadata type="fulltext">
803           <xsl:value-of select="." />
804         </pz:metadata>
805       </xsl:for-each>
806
807       <xsl:for-each select="tmarc:d900/tmarc:sq">
808         <pz:metadata type="fulltext">
809           <xsl:value-of select="." />
810         </pz:metadata>
811       </xsl:for-each>
812
813       <xsl:for-each select="tmarc:d900/tmarc:ss">
814         <pz:metadata type="fulltext">
815           <xsl:value-of select="." />
816         </pz:metadata>
817       </xsl:for-each>
818
819       <xsl:for-each select="tmarc:d900/tmarc:su">
820         <pz:metadata type="fulltext">
821           <xsl:value-of select="." />
822         </pz:metadata>
823       </xsl:for-each>
824
825       <xsl:for-each select="tmarc:d900/tmarc:sy">
826         <pz:metadata type="fulltext">
827           <xsl:value-of select="." />
828         </pz:metadata>
829       </xsl:for-each>
830
831
832       <!-- <xsl:if test="$fulltext_b"> <pz:metadata type="fulltext"> <xsl:value-of 
833         select="$fulltext_b"/> </pz:metadata> </xsl:if> -->
834
835       <pz:metadata type="has-fulltext">
836         <xsl:value-of select="$has_fulltext"/>
837       </pz:metadata>
838
839       <xsl:for-each select="tmarc:d907 | tmarc:d901">
840         <pz:metadata type="iii-id">
841           <xsl:value-of select="tmarc:sa" />
842         </pz:metadata>
843       </xsl:for-each>
844
845       <xsl:for-each select="tmarc:d926">
846         <pz:metadata type="locallocation">
847           <xsl:choose><xsl:when test="tmarc:sa">
848             <xsl:value-of select="tmarc:sa"/>
849           </xsl:when><xsl:otherwise>
850             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
851           </xsl:otherwise></xsl:choose>
852         </pz:metadata>
853         <pz:metadata type="callnumber">
854           <xsl:choose><xsl:when test="tmarc:sc">
855             <xsl:value-of select="tmarc:sc"/>
856           </xsl:when><xsl:otherwise>
857             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
858           </xsl:otherwise></xsl:choose>
859         </pz:metadata>
860         <pz:metadata type="available">
861           <xsl:choose><xsl:when test="tmarc:se">
862             <xsl:value-of select="tmarc:se"/>
863           </xsl:when><xsl:otherwise>
864             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
865           </xsl:otherwise></xsl:choose>
866         </pz:metadata>
867       </xsl:for-each>
868
869       <!-- OhioLINK holdings -->
870       <xsl:for-each select="tmarc:d945">
871         <pz:metadata type="locallocation">
872           <xsl:choose>
873             <xsl:when test="tmarc:sa">
874               <xsl:value-of select="tmarc:sa"/>
875             </xsl:when>
876             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
877           </xsl:choose>
878         </pz:metadata>
879         <pz:metadata type="callnumber">
880           <xsl:choose>
881             <xsl:when test="tmarc:sb">
882               <xsl:value-of select="tmarc:sb"/>
883             </xsl:when>
884             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
885           </xsl:choose>
886         </pz:metadata>
887         <pz:metadata type="publicnote">
888           <xsl:choose>
889             <xsl:when test="tmarc:sc">
890               <xsl:value-of select="tmarc:sc"/>
891             </xsl:when>
892             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
893           </xsl:choose>
894         </pz:metadata>
895         <pz:metadata type="available">
896           <xsl:choose>
897             <xsl:when test="tmarc:ss = 'N'">Available</xsl:when>
898             <xsl:when test="tmarc:ss != 'N'">
899               <xsl:choose>
900                 <xsl:when test="tmarc:sd">
901                   <xsl:value-of select="tmarc:sd"/>
902                 </xsl:when>
903                 <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
904               </xsl:choose>
905             </xsl:when>
906             <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
907           </xsl:choose>
908         </pz:metadata>      
909       </xsl:for-each>
910
911       <xsl:for-each select="tmarc:d948">
912         <pz:metadata type="holding">
913           <xsl:for-each select="tmarc:s">
914             <xsl:if test="position() > 1">
915               <xsl:text> </xsl:text>
916             </xsl:if>
917             <xsl:value-of select="." />
918           </xsl:for-each>
919         </pz:metadata>
920       </xsl:for-each>
921
922       <xsl:for-each select="tmarc:d991">
923         <pz:metadata type="holding">
924           <xsl:for-each select="tmarc:s">
925             <xsl:if test="position() > 1">
926               <xsl:text> </xsl:text>
927             </xsl:if>
928             <xsl:value-of select="." />
929           </xsl:for-each>
930         </pz:metadata>
931       </xsl:for-each>
932
933       <xsl:for-each select="tmarc:d999">
934         <pz:metadata type="localid">
935           <xsl:choose>
936             <xsl:when test="tmarc:sa">
937               <xsl:value-of select="tmarc:sa"/>
938             </xsl:when>
939             <xsl:when test="tmarc:sc">
940               <xsl:value-of select="tmarc:sc"/>
941             </xsl:when> 
942             <xsl:otherwise>
943               <xsl:value-of select="tmarc:sd"/>
944             </xsl:otherwise>
945           </xsl:choose>
946         </pz:metadata>
947       </xsl:for-each>
948
949
950       <!-- passthrough id data -->
951       <xsl:for-each select="pz:metadata">
952         <xsl:copy-of select="." />
953       </xsl:for-each>
954
955       <!-- other stylesheets importing this might want to define this -->
956         <xsl:call-template name="record-hook" />
957
958     </pz:record>
959   </xsl:template>
960
961   <xsl:template match="text()" />
962
963 </xsl:stylesheet>