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