822e65d0ce7dca4a7d6869c0e04981545a98137b
[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:value-of select="." />
416           </xsl:for-each>
417         </pz:metadata>
418       </xsl:for-each>
419
420       <xsl:for-each select="tmarc:d610">
421         <pz:metadata type="subject">
422           <xsl:value-of select="tmarc:sa" />
423         </pz:metadata>
424         <pz:metadata type="subject-long">
425           <xsl:for-each select="node()/text()">
426             <xsl:if test="position() > 1">
427               <xsl:text>, </xsl:text>
428             </xsl:if>
429             <xsl:value-of select="." />
430           </xsl:for-each>
431         </pz:metadata>
432       </xsl:for-each>
433
434       <xsl:for-each select="tmarc:d611">
435         <pz:metadata type="subject">
436           <xsl:value-of select="tmarc:sa" />
437         </pz:metadata>
438         <pz:metadata type="subject-long">
439           <xsl:for-each select="node()/text()">
440             <xsl:if test="position() > 1">
441               <xsl:text>, </xsl:text>
442             </xsl:if>
443             <xsl:value-of select="." />
444           </xsl:for-each>
445         </pz:metadata>
446       </xsl:for-each>
447
448       <xsl:for-each select="tmarc:d630">
449         <pz:metadata type="subject">
450           <xsl:value-of select="tmarc:sa" />
451         </pz:metadata>
452         <pz:metadata type="subject-long">
453           <xsl:for-each select="node()/text()">
454             <xsl:if test="position() > 1">
455               <xsl:text>, </xsl:text>
456             </xsl:if>
457             <xsl:value-of select="." />
458           </xsl:for-each>
459         </pz:metadata>
460       </xsl:for-each>
461
462       <xsl:for-each select="tmarc:d648">
463         <pz:metadata type="subject">
464           <xsl:value-of select="tmarc:sa" />
465         </pz:metadata>
466         <pz:metadata type="subject-long">
467           <xsl:for-each select="node()/text()">
468             <xsl:if test="position() > 1">
469               <xsl:text>, </xsl:text>
470             </xsl:if>
471             <xsl:value-of select="." />
472           </xsl:for-each>
473         </pz:metadata>
474       </xsl:for-each>
475
476       <xsl:for-each select="tmarc:d650">
477         <pz:metadata type="subject">
478           <xsl:value-of select="tmarc:sa" />
479         </pz:metadata>
480         <pz:metadata type="subject-long">
481           <xsl:for-each select="node()/text()">
482             <xsl:if test="position() > 1">
483               <xsl:text>, </xsl:text>
484             </xsl:if>
485             <xsl:value-of select="." />
486           </xsl:for-each>
487         </pz:metadata>
488       </xsl:for-each>
489
490       <xsl:for-each select="tmarc:d651">
491         <pz:metadata type="subject">
492           <xsl:value-of select="tmarc:sa" />
493         </pz:metadata>
494         <pz:metadata type="subject-long">
495           <xsl:for-each select="node()/text()">
496             <xsl:if test="position() > 1">
497               <xsl:text>, </xsl:text>
498             </xsl:if>
499             <xsl:value-of select="." />
500           </xsl:for-each>
501         </pz:metadata>
502       </xsl:for-each>
503
504       <xsl:for-each select="tmarc:d653">
505         <pz:metadata type="subject">
506           <xsl:value-of select="tmarc:sa" />
507         </pz:metadata>
508         <pz:metadata type="subject-long">
509           <xsl:for-each select="node()/text()">
510             <xsl:if test="position() > 1">
511               <xsl:text>, </xsl:text>
512             </xsl:if>
513             <xsl:value-of select="." />
514           </xsl:for-each>
515         </pz:metadata>
516       </xsl:for-each>
517
518       <xsl:for-each select="tmarc:d654">
519         <pz:metadata type="subject">
520           <xsl:value-of select="tmarc:sa" />
521         </pz:metadata>
522         <pz:metadata type="subject-long">
523           <xsl:for-each select="node()/text()">
524             <xsl:if test="position() > 1">
525               <xsl:text>, </xsl:text>
526             </xsl:if>
527             <xsl:value-of select="." />
528           </xsl:for-each>
529         </pz:metadata>
530       </xsl:for-each>
531
532       <xsl:for-each select="tmarc:d655">
533         <pz:metadata type="subject">
534           <xsl:value-of select="tmarc:sa" />
535         </pz:metadata>
536         <pz:metadata type="subject-long">
537           <xsl:for-each select="node()/text()">
538             <xsl:if test="position() > 1">
539               <xsl:text>, </xsl:text>
540             </xsl:if>
541             <xsl:value-of select="." />
542           </xsl:for-each>
543         </pz:metadata>
544       </xsl:for-each>
545
546       <xsl:for-each select="tmarc:d656">
547         <pz:metadata type="subject">
548           <xsl:value-of select="tmarc:sa" />
549         </pz:metadata>
550         <pz:metadata type="subject-long">
551           <xsl:for-each select="node()/text()">
552             <xsl:if test="position() > 1">
553               <xsl:text>, </xsl:text>
554             </xsl:if>
555             <xsl:value-of select="." />
556           </xsl:for-each>
557         </pz:metadata>
558       </xsl:for-each>
559
560       <xsl:for-each select="tmarc:d657">
561         <pz:metadata type="subject">
562           <xsl:value-of select="tmarc:sa" />
563         </pz:metadata>
564         <pz:metadata type="subject-long">
565           <xsl:for-each select="node()/text()">
566             <xsl:if test="position() > 1">
567               <xsl:text>, </xsl:text>
568             </xsl:if>
569             <xsl:value-of select="." />
570           </xsl:for-each>
571         </pz:metadata>
572       </xsl:for-each>
573
574       <xsl:for-each select="tmarc:d658">
575         <pz:metadata type="subject">
576           <xsl:value-of select="tmarc:sa" />
577         </pz:metadata>
578         <pz:metadata type="subject-long">
579           <xsl:for-each select="node()/text()">
580             <xsl:if test="position() > 1">
581               <xsl:text>, </xsl:text>
582             </xsl:if>
583             <xsl:value-of select="." />
584           </xsl:for-each>
585         </pz:metadata>
586       </xsl:for-each>
587
588       <xsl:for-each select="tmarc:d662">
589         <pz:metadata type="subject">
590           <xsl:value-of select="tmarc:sa" />
591         </pz:metadata>
592         <pz:metadata type="subject-long">
593           <xsl:for-each select="node()/text()">
594             <xsl:if test="position() > 1">
595               <xsl:text>, </xsl:text>
596             </xsl:if>
597             <xsl:value-of select="." />
598           </xsl:for-each>
599         </pz:metadata>
600       </xsl:for-each>
601
602       <xsl:for-each select="tmarc:d69X">
603         <pz:metadata type="subject">
604           <xsl:value-of select="tmarc:sa" />
605         </pz:metadata>
606         <pz:metadata type="subject-long">
607           <xsl:for-each select="node()/text()">
608             <xsl:if test="position() > 1">
609               <xsl:text>, </xsl:text>
610             </xsl:if>
611             <xsl:value-of select="." />
612           </xsl:for-each>
613         </pz:metadata>
614       </xsl:for-each>
615
616       <!-- or tmarc:d651 or tmarc:d653 or tmarc:d654 or tmarc:d655 or tmarc:d656 
617         or tmarc:d657 or tmarc:d658 or tmarc:d662 or tmarc:d69X"> -->
618
619       <!-- <xsl:for-each select="tmarc:d600" > <pz:metadata type="subject"> 
620         <xsl:value-of select="tmarc:sa"/> </pz:metadata> <pz:metadata type="subject-long"> 
621         <xsl:for-each select="tmarc:sa tmarc:sb tmarc:sc tmarc:sd "> <xsl:if test="position() 
622         > 1"> <xsl:text>, </xsl:text> </xsl:if> <xsl:value-of select="."/> </xsl:for-each> 
623         </pz:metadata> </xsl:for-each> -->
624
625       <xsl:for-each select="tmarc:d856">
626         <pz:metadata type="electronic-url">
627           <xsl:value-of select="tmarc:su" />
628         </pz:metadata>
629         <pz:metadata type="electronic-text">
630           <xsl:choose>
631             <xsl:when test="tmarc:sy">
632               <xsl:value-of select="tmarc:sy/text()" />
633             </xsl:when>
634             <xsl:when test="tmarc:s3">
635               <xsl:value-of select="tmarc:s3/text()" />
636             </xsl:when>
637              <xsl:otherwise>Get resource</xsl:otherwise>
638            </xsl:choose>
639         </pz:metadata>
640         <pz:metadata type="electronic-note">
641           <xsl:value-of select="tmarc:sz" />
642         </pz:metadata>
643         <pz:metadata type="electronic-format-instruction">
644           <xsl:value-of select="tmarc:si" />
645         </pz:metadata>
646         <pz:metadata type="electronic-format-type">
647           <xsl:value-of select="tmarc:sq" />
648         </pz:metadata>
649       </xsl:for-each>
650
651       <xsl:for-each select="tmarc:d773">
652         <pz:metadata type="citation">
653           <xsl:for-each select="*">
654             <xsl:value-of select="normalize-space(.)" />
655             <xsl:text> </xsl:text>
656           </xsl:for-each>
657         </pz:metadata>
658         <xsl:if test="tmarc:st">
659           <pz:metadata type="journal-title">
660             <xsl:value-of select="tmarc:st"/>
661           </pz:metadata>
662         </xsl:if>
663         <xsl:if test="tmarc:sg">
664           <pz:metadata type="journal-subpart">
665             <xsl:value-of select="tmarc:sg"/>
666           </pz:metadata>
667         </xsl:if>
668         <xsl:if test="tmarc:sp">
669           <pz:metadata type="journal-title-abbrev">
670             <xsl:value-of select="tmarc:sp"/>
671           </pz:metadata>
672         </xsl:if>
673       </xsl:for-each>
674
675       <xsl:for-each select="tmarc:d852">
676         <xsl:if test="tmarc:sy">
677           <pz:metadata type="publicnote">
678             <xsl:value-of select="tmarc:sy" />
679           </pz:metadata>
680         </xsl:if>
681         <xsl:if test="tmarc:sh">
682           <pz:metadata type="callnumber">
683             <xsl:value-of select="tmarc:sh" />
684           </pz:metadata>
685         </xsl:if>
686       </xsl:for-each>
687
688       <pz:metadata type="medium">
689         <xsl:value-of select="$vmedium" />
690         <xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
691           <xsl:text> (electronic)</xsl:text>
692         </xsl:if>
693       </pz:metadata>
694
695       <xsl:for-each select="tmarc:d900/tmarc:sa">
696         <pz:metadata type="fulltext">
697           <xsl:value-of select="." />
698         </pz:metadata>
699       </xsl:for-each>
700
701       <!-- <xsl:if test="$fulltext_a"> <pz:metadata type="fulltext"> <xsl:value-of 
702         select="$fulltext_a"/> </pz:metadata> </xsl:if> -->
703
704       <xsl:for-each select="tmarc:d900/tmarc:sb">
705         <pz:metadata type="fulltext">
706           <xsl:value-of select="." />
707         </pz:metadata>
708       </xsl:for-each>
709
710       <xsl:for-each select="tmarc:d900/tmarc:se">
711         <pz:metadata type="fulltext">
712           <xsl:value-of select="." />
713         </pz:metadata>
714       </xsl:for-each>
715
716       <xsl:for-each select="tmarc:d900/tmarc:sf">
717         <pz:metadata type="fulltext">
718           <xsl:value-of select="." />
719         </pz:metadata>
720       </xsl:for-each>
721
722       <xsl:for-each select="tmarc:d900/tmarc:si">
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:sk">
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:sq">
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:ss">
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:su">
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:sy">
753         <pz:metadata type="fulltext">
754           <xsl:value-of select="." />
755         </pz:metadata>
756       </xsl:for-each>
757
758
759       <!-- <xsl:if test="$fulltext_b"> <pz:metadata type="fulltext"> <xsl:value-of 
760         select="$fulltext_b"/> </pz:metadata> </xsl:if> -->
761
762       <pz:metadata type="has-fulltext">
763         <xsl:value-of select="$has_fulltext"/>
764       </pz:metadata>
765
766       <xsl:for-each select="tmarc:d907">
767         <!-- or tmarc:d901"> -->
768         <pz:metadata type="iii-id">
769           <xsl:value-of select="tmarc:sa" />
770         </pz:metadata>
771       </xsl:for-each>
772
773       <xsl:for-each select="tmarc:d926">
774         <pz:metadata type="locallocation">
775           <xsl:choose><xsl:when test="tmarc:sa">
776             <xsl:value-of select="tmarc:sa"/>
777           </xsl:when><xsl:otherwise>
778             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
779           </xsl:otherwise></xsl:choose>
780         </pz:metadata>
781         <pz:metadata type="callnumber">
782           <xsl:choose><xsl:when test="tmarc:sc">
783             <xsl:value-of select="tmarc:sc"/>
784           </xsl:when><xsl:otherwise>
785             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
786           </xsl:otherwise></xsl:choose>
787         </pz:metadata>
788         <pz:metadata type="available">
789           <xsl:choose><xsl:when test="tmarc:se">
790             <xsl:value-of select="tmarc:se"/>
791           </xsl:when><xsl:otherwise>
792             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
793           </xsl:otherwise></xsl:choose>
794         </pz:metadata>
795       </xsl:for-each>
796
797       <xsl:for-each select="tmarc:d948">
798         <pz:metadata type="holding">
799           <xsl:for-each select="tmarc:s">
800             <xsl:if test="position() > 1">
801               <xsl:text> </xsl:text>
802             </xsl:if>
803             <xsl:value-of select="." />
804           </xsl:for-each>
805         </pz:metadata>
806       </xsl:for-each>
807
808       <xsl:for-each select="tmarc:d991">
809         <pz:metadata type="holding">
810           <xsl:for-each select="tmarc:s">
811             <xsl:if test="position() > 1">
812               <xsl:text> </xsl:text>
813             </xsl:if>
814             <xsl:value-of select="." />
815           </xsl:for-each>
816         </pz:metadata>
817       </xsl:for-each>
818
819       <xsl:for-each select="tmarc:d999">
820         <pz:metadata type="localid">
821           <xsl:choose>
822             <xsl:when test="tmarc:sa">
823               <xsl:value-of select="tmarc:sa"/>
824             </xsl:when>
825             <xsl:when test="tmarc:sc">
826               <xsl:value-of select="tmarc:sc"/>
827             </xsl:when> 
828             <xsl:otherwise>
829               <xsl:value-of select="tmarc:sd"/>
830             </xsl:otherwise>
831           </xsl:choose>
832         </pz:metadata>
833       </xsl:for-each>
834
835
836       <!-- passthrough id data -->
837       <xsl:for-each select="pz:metadata">
838         <xsl:copy-of select="." />
839       </xsl:for-each>
840
841       <!-- other stylesheets importing this might want to define this -->
842         <xsl:call-template name="record-hook" />
843
844     </pz:record>
845   </xsl:template>
846
847   <xsl:template match="text()" />
848
849   <!-- TODO Does not work anymore -->
850   <xsl:template name="shortTitle">
851     <xsl:param name="tag" />
852     <xsl:for-each select="tmarc:d">
853       <xsl:value-of select="tmarc:sa" />
854       <xsl:value-of select="tmarc:sm" />
855       <xsl:value-of select="tmarc:sn" />
856       <xsl:value-of select="tmarc:sp" />
857       <xsl:value-of select="tmarc:sr" />
858     </xsl:for-each>
859   </xsl:template>
860
861   <!-- No working as expected -->
862   <xsl:template name="description">
863     <xsl:param name="element" />
864     <xsl:for-each select="$element">
865       <pz:metadata type="description">
866         <xsl:for-each select="node()">
867           <xsl:value-of select="text()" />
868         </xsl:for-each>
869       </pz:metadata>
870     </xsl:for-each>
871     <xsl:apply-templates />
872   </xsl:template>
873
874   <!-- <xsl:for-each select="tmarc:d500"> <pz:metadata type="description"> 
875     <xsl:for-each select="node()"> <xsl:value-of select="text()"/> </xsl:for-each> 
876     </pz:metadata> </xsl:for-each> -->
877
878
879
880   <xsl:template name="subject">
881     <xsl:param name="element" />
882     <xsl:for-each select="$element">
883       <pz:metadata type="subject">
884         <xsl:value-of select="tmarc:sa" />
885       </pz:metadata>
886       <pz:metadata type="subject-long">
887         <xsl:for-each select="node()/text()">
888           <xsl:if test="position() > 1">
889             <xsl:text>, </xsl:text>
890           </xsl:if>
891           <xsl:value-of select="." />
892         </xsl:for-each>
893       </pz:metadata>
894     </xsl:for-each>
895   </xsl:template>
896
897
898 </xsl:stylesheet>