Adds d911 as description field
[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     <pz:record>
122 <!--
123       <xsl:attribute name="mergekey">
124     <xsl:text>title </xsl:text>
125   <xsl:value-of select="tmarc:d245/tmarc:sa" />
126   <xsl:text> author </xsl:text>
127   <xsl:value-of select="tmarc:d100/tmarc:sa" />
128   <xsl:text> medium </xsl:text>
129   <xsl:value-of select="$medium" />
130     </xsl:attribute>
131   -->
132
133       <xsl:for-each select="tmarc:c001">
134         <pz:metadata type="id">
135           <xsl:value-of select="." />
136         </pz:metadata>
137       </xsl:for-each>
138
139       <xsl:for-each select="tmarc:d010">
140         <pz:metadata type="lccn">
141           <xsl:value-of select="tmarc:sa" />
142         </pz:metadata>
143       </xsl:for-each>
144
145       <xsl:for-each select="tmarc:d020">
146         <pz:metadata type="isbn">
147           <xsl:value-of select="tmarc:sa" />
148         </pz:metadata>
149       </xsl:for-each>
150
151       <xsl:for-each select="tmarc:d022">
152         <pz:metadata type="issn">
153           <xsl:value-of select="tmarc:sa" />
154         </pz:metadata>
155       </xsl:for-each>
156
157       <xsl:for-each select="tmarc:d027">
158         <pz:metadata type="tech-rep-nr">
159           <xsl:value-of select="tmarc:sa" />
160         </pz:metadata>
161       </xsl:for-each>
162
163       <xsl:for-each select="tmarc:d035"> 
164         <pz:metadata type="system-control-nr">
165           <xsl:choose>
166             <xsl:when test="tmarc:sa">
167               <xsl:value-of select="tmarc:sa"/>
168             </xsl:when>
169             <xsl:otherwise>
170               <xsl:value-of select="tmarc:sb"/>
171             </xsl:otherwise>
172           </xsl:choose>
173         </pz:metadata>
174       </xsl:for-each>
175
176       <xsl:for-each select="tmarc:d100">
177         <pz:metadata type="author">
178           <xsl:value-of select="tmarc:sa" />
179         </pz:metadata>
180         <pz:metadata type="author-title">
181           <xsl:value-of select="tmarc:sc" />
182         </pz:metadata>
183         <pz:metadata type="author-date">
184           <xsl:value-of select="tmarc:sd" />
185         </pz:metadata>
186       </xsl:for-each>
187
188       <xsl:for-each select="tmarc:d110">
189         <pz:metadata type="corporate-name">
190           <xsl:value-of select="tmarc:sa" />
191         </pz:metadata>
192         <pz:metadata type="corporate-location">
193           <xsl:value-of select="tmarc:sc" />
194         </pz:metadata>
195         <pz:metadata type="corporate-date">
196           <xsl:value-of select="tmarc:sd" />
197         </pz:metadata>
198       </xsl:for-each>
199
200       <xsl:for-each select="tmarc:d111">
201         <pz:metadata type="meeting-name">
202           <xsl:value-of select="tmarc:sa" />
203         </pz:metadata>
204         <pz:metadata type="meeting-location">
205           <xsl:value-of select="tmarc:sc" />
206         </pz:metadata>
207         <pz:metadata type="meeting-date">
208           <xsl:value-of select="tmarc:sd" />
209         </pz:metadata>
210       </xsl:for-each>
211
212       <xsl:for-each select="tmarc:d260">
213         <pz:metadata type="date">
214           <xsl:value-of select="translate(tmarc:sc, 'cp[].', '')" />
215         </pz:metadata>
216       </xsl:for-each>
217
218       <xsl:for-each select="tmarc:d130">
219         <pz:metadata type="title-uniform">
220           <xsl:value-of select="tmarc:sa" />
221         </pz:metadata>
222         <pz:metadata type="title-uniform-media">
223           <xsl:value-of select="tmarc:sm" />
224         </pz:metadata>
225         <pz:metadata type="title-uniform-parts">
226           <xsl:value-of select="tmarc:sn" />
227         </pz:metadata>
228         <pz:metadata type="title-uniform-partname">
229           <xsl:value-of select="tmarc:sp" />
230         </pz:metadata>
231         <pz:metadata type="title-uniform-key">
232           <xsl:value-of select="tmarc:sr" />
233         </pz:metadata>
234       </xsl:for-each>
235
236       <xsl:for-each select="tmarc:d245">
237         <pz:metadata type="title">
238           <xsl:value-of select="tmarc:sa" />
239         </pz:metadata>
240         <pz:metadata type="title-remainder">
241           <xsl:value-of select="tmarc:sb" />
242         </pz:metadata>
243         <pz:metadata type="title-responsibility">
244           <xsl:value-of select="tmarc:sc" />
245         </pz:metadata>
246         <pz:metadata type="title-dates">
247           <xsl:value-of select="tmarc:sf" />
248         </pz:metadata>
249         <pz:metadata type="title-medium">
250           <xsl:value-of select="tmarc:sh" />
251         </pz:metadata>
252         <pz:metadata type="title-number-section">
253           <xsl:value-of select="tmarc:sn" />
254         </pz:metadata>
255         <pz:metadata type="title-complete">
256           <xsl:value-of select="tmarc:sa" />
257           <xsl:if test="tmarc:sb" ><xsl:value-of select="concat(' ', tmarc:sb)" /></xsl:if>
258         </pz:metadata>
259       </xsl:for-each>
260
261       <xsl:for-each select="tmarc:d250">
262         <pz:metadata type="edition">
263           <xsl:value-of select="tmarc:sa" />
264         </pz:metadata>
265       </xsl:for-each>
266
267       <xsl:for-each select="tmarc:d260">
268         <pz:metadata type="publication-place">
269           <xsl:value-of select="tmarc:sa" />
270         </pz:metadata>
271         <pz:metadata type="publication-name">
272           <xsl:value-of select="tmarc:sb" />
273         </pz:metadata>
274         <pz:metadata type="publication-date">
275           <xsl:value-of select="tmarc:sc" />
276         </pz:metadata>
277       </xsl:for-each>
278
279       <xsl:for-each select="tmarc:d300">
280         <pz:metadata type="physical-extent">
281           <xsl:value-of select="tmarc:sa" />
282         </pz:metadata>
283         <pz:metadata type="physical-format">
284           <xsl:value-of select="tmarc:sb" />
285         </pz:metadata>
286         <pz:metadata type="physical-dimensions">
287           <xsl:value-of select="tmarc:sc" />
288         </pz:metadata>
289         <pz:metadata type="physical-accomp">
290           <xsl:value-of select="tmarc:se" />
291         </pz:metadata>
292         <pz:metadata type="physical-unittype">
293           <xsl:value-of select="tmarc:sf" />
294         </pz:metadata>
295         <pz:metadata type="physical-unitsize">
296           <xsl:value-of select="tmarc:sg" />
297         </pz:metadata>
298         <pz:metadata type="physical-specified">
299           <xsl:value-of select="tmarc:s3" />
300         </pz:metadata>
301       </xsl:for-each>
302
303       <xsl:for-each select="tmarc:d440">
304         <pz:metadata type="series-title">
305           <xsl:value-of select="tmarc:sa" />
306         </pz:metadata>
307       </xsl:for-each>
308
309       <xsl:for-each select="tmarc:d500">
310         <pz:metadata type="description">
311           <xsl:for-each select="node()">
312             <xsl:value-of select="text()" />
313           </xsl:for-each>
314         </pz:metadata>
315       </xsl:for-each>
316
317       <xsl:for-each select="tmarc:d505">
318         <pz:metadata type="description">
319           <xsl:for-each select="node()">
320             <xsl:value-of select="text()" />
321           </xsl:for-each>
322         </pz:metadata>
323       </xsl:for-each>
324
325       <xsl:for-each select="tmarc:d518">
326         <pz:metadata type="description">
327           <xsl:for-each select="node()">
328             <xsl:value-of select="text()" />
329           </xsl:for-each>
330         </pz:metadata>
331       </xsl:for-each>
332
333       <xsl:for-each select="tmarc:d520">
334         <pz:metadata type="description">
335           <xsl:for-each select="node()">
336             <xsl:value-of select="text()" />
337           </xsl:for-each>
338         </pz:metadata>
339       </xsl:for-each>
340
341       <xsl:for-each select="tmarc:d522">
342         <pz:metadata type="description">
343           <xsl:for-each select="node()">
344             <xsl:value-of select="text()" />
345           </xsl:for-each>
346         </pz:metadata>
347       </xsl:for-each>
348
349       <xsl:for-each select="tmarc:d911">
350         <pz:metadata type="description">
351           <xsl:for-each select="node()">
352             <xsl:value-of select="text()" />
353           </xsl:for-each>
354         </pz:metadata>
355       </xsl:for-each>
356
357       <xsl:for-each select="tmarc:d600">
358         <pz:metadata type="subject">
359           <xsl:value-of select="tmarc:sa" />
360         </pz:metadata>
361         <pz:metadata type="subject-long">
362           <xsl:for-each select="node()/text()">
363             <xsl:if test="position() > 1">
364               <xsl:text>, </xsl:text>
365             </xsl:if>
366             <xsl:value-of select="." />
367           </xsl:for-each>
368         </pz:metadata>
369       </xsl:for-each>
370
371       <xsl:for-each select="tmarc:d610">
372         <pz:metadata type="subject">
373           <xsl:value-of select="tmarc:sa" />
374         </pz:metadata>
375         <pz:metadata type="subject-long">
376           <xsl:for-each select="node()/text()">
377             <xsl:if test="position() > 1">
378               <xsl:text>, </xsl:text>
379             </xsl:if>
380             <xsl:value-of select="." />
381           </xsl:for-each>
382         </pz:metadata>
383       </xsl:for-each>
384
385       <xsl:for-each select="tmarc:d611">
386         <pz:metadata type="subject">
387           <xsl:value-of select="tmarc:sa" />
388         </pz:metadata>
389         <pz:metadata type="subject-long">
390           <xsl:for-each select="node()/text()">
391             <xsl:if test="position() > 1">
392               <xsl:text>, </xsl:text>
393             </xsl:if>
394             <xsl:value-of select="." />
395           </xsl:for-each>
396         </pz:metadata>
397       </xsl:for-each>
398
399       <xsl:for-each select="tmarc:d630">
400         <pz:metadata type="subject">
401           <xsl:value-of select="tmarc:sa" />
402         </pz:metadata>
403         <pz:metadata type="subject-long">
404           <xsl:for-each select="node()/text()">
405             <xsl:if test="position() > 1">
406               <xsl:text>, </xsl:text>
407             </xsl:if>
408             <xsl:value-of select="." />
409           </xsl:for-each>
410         </pz:metadata>
411       </xsl:for-each>
412
413       <xsl:for-each select="tmarc:d648">
414         <pz:metadata type="subject">
415           <xsl:value-of select="tmarc:sa" />
416         </pz:metadata>
417         <pz:metadata type="subject-long">
418           <xsl:for-each select="node()/text()">
419             <xsl:if test="position() > 1">
420               <xsl:text>, </xsl:text>
421             </xsl:if>
422             <xsl:value-of select="." />
423           </xsl:for-each>
424         </pz:metadata>
425       </xsl:for-each>
426
427       <xsl:for-each select="tmarc:d650">
428         <pz:metadata type="subject">
429           <xsl:value-of select="tmarc:sa" />
430         </pz:metadata>
431         <pz:metadata type="subject-long">
432           <xsl:for-each select="node()/text()">
433             <xsl:if test="position() > 1">
434               <xsl:text>, </xsl:text>
435             </xsl:if>
436             <xsl:value-of select="." />
437           </xsl:for-each>
438         </pz:metadata>
439       </xsl:for-each>
440
441       <xsl:for-each select="tmarc:d651">
442         <pz:metadata type="subject">
443           <xsl:value-of select="tmarc:sa" />
444         </pz:metadata>
445         <pz:metadata type="subject-long">
446           <xsl:for-each select="node()/text()">
447             <xsl:if test="position() > 1">
448               <xsl:text>, </xsl:text>
449             </xsl:if>
450             <xsl:value-of select="." />
451           </xsl:for-each>
452         </pz:metadata>
453       </xsl:for-each>
454
455       <xsl:for-each select="tmarc:d653">
456         <pz:metadata type="subject">
457           <xsl:value-of select="tmarc:sa" />
458         </pz:metadata>
459         <pz:metadata type="subject-long">
460           <xsl:for-each select="node()/text()">
461             <xsl:if test="position() > 1">
462               <xsl:text>, </xsl:text>
463             </xsl:if>
464             <xsl:value-of select="." />
465           </xsl:for-each>
466         </pz:metadata>
467       </xsl:for-each>
468
469       <xsl:for-each select="tmarc:d654">
470         <pz:metadata type="subject">
471           <xsl:value-of select="tmarc:sa" />
472         </pz:metadata>
473         <pz:metadata type="subject-long">
474           <xsl:for-each select="node()/text()">
475             <xsl:if test="position() > 1">
476               <xsl:text>, </xsl:text>
477             </xsl:if>
478             <xsl:value-of select="." />
479           </xsl:for-each>
480         </pz:metadata>
481       </xsl:for-each>
482
483       <xsl:for-each select="tmarc:d655">
484         <pz:metadata type="subject">
485           <xsl:value-of select="tmarc:sa" />
486         </pz:metadata>
487         <pz:metadata type="subject-long">
488           <xsl:for-each select="node()/text()">
489             <xsl:if test="position() > 1">
490               <xsl:text>, </xsl:text>
491             </xsl:if>
492             <xsl:value-of select="." />
493           </xsl:for-each>
494         </pz:metadata>
495       </xsl:for-each>
496
497       <xsl:for-each select="tmarc:d656">
498         <pz:metadata type="subject">
499           <xsl:value-of select="tmarc:sa" />
500         </pz:metadata>
501         <pz:metadata type="subject-long">
502           <xsl:for-each select="node()/text()">
503             <xsl:if test="position() > 1">
504               <xsl:text>, </xsl:text>
505             </xsl:if>
506             <xsl:value-of select="." />
507           </xsl:for-each>
508         </pz:metadata>
509       </xsl:for-each>
510
511       <xsl:for-each select="tmarc:d657">
512         <pz:metadata type="subject">
513           <xsl:value-of select="tmarc:sa" />
514         </pz:metadata>
515         <pz:metadata type="subject-long">
516           <xsl:for-each select="node()/text()">
517             <xsl:if test="position() > 1">
518               <xsl:text>, </xsl:text>
519             </xsl:if>
520             <xsl:value-of select="." />
521           </xsl:for-each>
522         </pz:metadata>
523       </xsl:for-each>
524
525       <xsl:for-each select="tmarc:d658">
526         <pz:metadata type="subject">
527           <xsl:value-of select="tmarc:sa" />
528         </pz:metadata>
529         <pz:metadata type="subject-long">
530           <xsl:for-each select="node()/text()">
531             <xsl:if test="position() > 1">
532               <xsl:text>, </xsl:text>
533             </xsl:if>
534             <xsl:value-of select="." />
535           </xsl:for-each>
536         </pz:metadata>
537       </xsl:for-each>
538
539       <xsl:for-each select="tmarc:d662">
540         <pz:metadata type="subject">
541           <xsl:value-of select="tmarc:sa" />
542         </pz:metadata>
543         <pz:metadata type="subject-long">
544           <xsl:for-each select="node()/text()">
545             <xsl:if test="position() > 1">
546               <xsl:text>, </xsl:text>
547             </xsl:if>
548             <xsl:value-of select="." />
549           </xsl:for-each>
550         </pz:metadata>
551       </xsl:for-each>
552
553       <xsl:for-each select="tmarc:d69X">
554         <pz:metadata type="subject">
555           <xsl:value-of select="tmarc:sa" />
556         </pz:metadata>
557         <pz:metadata type="subject-long">
558           <xsl:for-each select="node()/text()">
559             <xsl:if test="position() > 1">
560               <xsl:text>, </xsl:text>
561             </xsl:if>
562             <xsl:value-of select="." />
563           </xsl:for-each>
564         </pz:metadata>
565       </xsl:for-each>
566
567       <!-- or tmarc:d651 or tmarc:d653 or tmarc:d654 or tmarc:d655 or tmarc:d656 
568         or tmarc:d657 or tmarc:d658 or tmarc:d662 or tmarc:d69X"> -->
569
570       <!-- <xsl:for-each select="tmarc:d600" > <pz:metadata type="subject"> 
571         <xsl:value-of select="tmarc:sa"/> </pz:metadata> <pz:metadata type="subject-long"> 
572         <xsl:for-each select="tmarc:sa tmarc:sb tmarc:sc tmarc:sd "> <xsl:if test="position() 
573         > 1"> <xsl:text>, </xsl:text> </xsl:if> <xsl:value-of select="."/> </xsl:for-each> 
574         </pz:metadata> </xsl:for-each> -->
575
576       <xsl:for-each select="tmarc:d856">
577         <pz:metadata type="electronic-url">
578           <xsl:value-of select="tmarc:su" />
579         </pz:metadata>
580         <pz:metadata type="electronic-text">
581           <xsl:if test="tmarc:sy">
582             <xsl:value-of select="tmarc:sy/text()" />
583           </xsl:if>
584           <xsl:if test="tmarc:s3">
585             <xsl:value-of select="tmarc:s3/text()" />
586           </xsl:if>
587         </pz:metadata>
588         <pz:metadata type="electronic-note">
589           <xsl:value-of select="tmarc:sz" />
590         </pz:metadata>
591         <pz:metadata type="electronic-format-instruction">
592           <xsl:value-of select="tmarc:si" />
593         </pz:metadata>
594         <pz:metadata type="electronic-format-type">
595           <xsl:value-of select="tmarc:sq" />
596         </pz:metadata>
597       </xsl:for-each>
598
599       <xsl:for-each select="tmarc:d773">
600         <pz:metadata type="citation">
601           <xsl:for-each select="*">
602             <xsl:value-of select="normalize-space(.)" />
603             <xsl:text> </xsl:text>
604           </xsl:for-each>
605         </pz:metadata>
606         <xsl:if test="tmarc:st">
607           <pz:metadata type="journal-title">
608             <xsl:value-of select="tmarc:st"/>
609           </pz:metadata>
610         </xsl:if>
611         <xsl:if test="tmarc:sg">
612           <pz:metadata type="journal-subpart">
613             <xsl:value-of select="tmarc:sg"/>
614           </pz:metadata>
615         </xsl:if>
616       </xsl:for-each>
617
618       <xsl:for-each select="tmarc:d852">
619         <xsl:if test="tmarc:sy">
620           <pz:metadata type="publicnote">
621             <xsl:value-of select="tmarc:sy" />
622           </pz:metadata>
623         </xsl:if>
624         <xsl:if test="tmarc:sh">
625           <pz:metadata type="callnumber">
626             <xsl:value-of select="tmarc:sh" />
627           </pz:metadata>
628         </xsl:if>
629       </xsl:for-each>
630
631       <pz:metadata type="medium">
632         <xsl:value-of select="$vmedium" />
633         <xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
634           <xsl:text> (electronic)</xsl:text>
635         </xsl:if>
636       </pz:metadata>
637
638       <xsl:for-each select="tmarc:d900/tmarc:sa">
639         <pz:metadata type="fulltext">
640           <xsl:value-of select="." />
641         </pz:metadata>
642       </xsl:for-each>
643
644       <!-- <xsl:if test="$fulltext_a"> <pz:metadata type="fulltext"> <xsl:value-of 
645         select="$fulltext_a"/> </pz:metadata> </xsl:if> -->
646
647       <xsl:for-each select="tmarc:d900/tmarc:sb">
648         <pz:metadata type="fulltext">
649           <xsl:value-of select="." />
650         </pz:metadata>
651       </xsl:for-each>
652
653       <!-- <xsl:if test="$fulltext_b"> <pz:metadata type="fulltext"> <xsl:value-of 
654         select="$fulltext_b"/> </pz:metadata> </xsl:if> -->
655
656       <pz:metadata type="has-fulltext">
657         <xsl:value-of select="$has_fulltext"/>
658       </pz:metadata>
659
660       <xsl:for-each select="tmarc:d907">
661         <!-- or tmarc:d901"> -->
662         <pz:metadata type="iii-id">
663           <xsl:value-of select="tmarc:sa" />
664         </pz:metadata>
665       </xsl:for-each>
666
667       <xsl:for-each select="tmarc:d926">
668         <pz:metadata type="locallocation">
669           <xsl:choose><xsl:when test="tmarc:sa">
670             <xsl:value-of select="tmarc:sa"/>
671           </xsl:when><xsl:otherwise>
672             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
673           </xsl:otherwise></xsl:choose>
674         </pz:metadata>
675         <pz:metadata type="callnumber">
676           <xsl:choose><xsl:when test="tmarc:sc">
677             <xsl:value-of select="tmarc:sc"/>
678           </xsl:when><xsl:otherwise>
679             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
680           </xsl:otherwise></xsl:choose>
681         </pz:metadata>
682         <pz:metadata type="available">
683           <xsl:choose><xsl:when test="tmarc:se">
684             <xsl:value-of select="tmarc:se"/>
685           </xsl:when><xsl:otherwise>
686             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
687           </xsl:otherwise></xsl:choose>
688         </pz:metadata>
689       </xsl:for-each>
690
691       <xsl:for-each select="tmarc:d948">
692         <pz:metadata type="holding">
693           <xsl:for-each select="tmarc:s">
694             <xsl:if test="position() > 1">
695               <xsl:text> </xsl:text>
696             </xsl:if>
697             <xsl:value-of select="." />
698           </xsl:for-each>
699         </pz:metadata>
700       </xsl:for-each>
701
702       <xsl:for-each select="tmarc:d991">
703         <pz:metadata type="holding">
704           <xsl:for-each select="tmarc:s">
705             <xsl:if test="position() > 1">
706               <xsl:text> </xsl:text>
707             </xsl:if>
708             <xsl:value-of select="." />
709           </xsl:for-each>
710         </pz:metadata>
711       </xsl:for-each>
712
713       <xsl:for-each select="tmarc:d999">
714         <pz:metadata type="localid">
715           <xsl:choose>
716             <xsl:when test="tmarc:sa">
717               <xsl:value-of select="tmarc:sa"/>
718             </xsl:when>
719             <xsl:when test="tmarc:sc">
720               <xsl:value-of select="tmarc:sc"/>
721             </xsl:when> 
722             <xsl:otherwise>
723               <xsl:value-of select="tmarc:sd"/>
724             </xsl:otherwise>
725           </xsl:choose>
726         </pz:metadata>
727       </xsl:for-each>
728
729
730       <!-- passthrough id data -->
731       <xsl:for-each select="pz:metadata">
732         <xsl:copy-of select="." />
733       </xsl:for-each>
734
735       <!-- other stylesheets importing this might want to define this -->
736         <xsl:call-template name="record-hook" />
737
738     </pz:record>
739   </xsl:template>
740
741   <xsl:template match="text()" />
742
743   <!-- TODO Does not work anymore -->
744   <xsl:template name="shortTitle">
745     <xsl:param name="tag" />
746     <xsl:for-each select="tmarc:d">
747       <xsl:value-of select="tmarc:sa" />
748       <xsl:value-of select="tmarc:sm" />
749       <xsl:value-of select="tmarc:sn" />
750       <xsl:value-of select="tmarc:sp" />
751       <xsl:value-of select="tmarc:sr" />
752     </xsl:for-each>
753   </xsl:template>
754
755   <!-- No working as expected -->
756   <xsl:template name="description">
757     <xsl:param name="element" />
758     <xsl:for-each select="$element">
759       <pz:metadata type="description">
760         <xsl:for-each select="node()">
761           <xsl:value-of select="text()" />
762         </xsl:for-each>
763       </pz:metadata>
764     </xsl:for-each>
765     <xsl:apply-templates />
766   </xsl:template>
767
768   <!-- <xsl:for-each select="tmarc:d500"> <pz:metadata type="description"> 
769     <xsl:for-each select="node()"> <xsl:value-of select="text()"/> </xsl:for-each> 
770     </pz:metadata> </xsl:for-each> -->
771
772
773
774   <xsl:template name="subject">
775     <xsl:param name="element" />
776     <xsl:for-each select="$element">
777       <pz:metadata type="subject">
778         <xsl:value-of select="tmarc:sa" />
779       </pz:metadata>
780       <pz:metadata type="subject-long">
781         <xsl:for-each select="node()/text()">
782           <xsl:if test="position() > 1">
783             <xsl:text>, </xsl:text>
784           </xsl:if>
785           <xsl:value-of select="." />
786         </xsl:for-each>
787       </pz:metadata>
788     </xsl:for-each>
789   </xsl:template>
790
791
792 </xsl:stylesheet>