Adds subfield $p to journal-subpart (some got pages in that)
[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:d600">
350         <pz:metadata type="subject">
351           <xsl:value-of select="tmarc:sa" />
352         </pz:metadata>
353         <pz:metadata type="subject-long">
354           <xsl:for-each select="node()/text()">
355             <xsl:if test="position() > 1">
356               <xsl:text>, </xsl:text>
357             </xsl:if>
358             <xsl:value-of select="." />
359           </xsl:for-each>
360         </pz:metadata>
361       </xsl:for-each>
362
363       <xsl:for-each select="tmarc:d610">
364         <pz:metadata type="subject">
365           <xsl:value-of select="tmarc:sa" />
366         </pz:metadata>
367         <pz:metadata type="subject-long">
368           <xsl:for-each select="node()/text()">
369             <xsl:if test="position() > 1">
370               <xsl:text>, </xsl:text>
371             </xsl:if>
372             <xsl:value-of select="." />
373           </xsl:for-each>
374         </pz:metadata>
375       </xsl:for-each>
376
377       <xsl:for-each select="tmarc:d611">
378         <pz:metadata type="subject">
379           <xsl:value-of select="tmarc:sa" />
380         </pz:metadata>
381         <pz:metadata type="subject-long">
382           <xsl:for-each select="node()/text()">
383             <xsl:if test="position() > 1">
384               <xsl:text>, </xsl:text>
385             </xsl:if>
386             <xsl:value-of select="." />
387           </xsl:for-each>
388         </pz:metadata>
389       </xsl:for-each>
390
391       <xsl:for-each select="tmarc:d630">
392         <pz:metadata type="subject">
393           <xsl:value-of select="tmarc:sa" />
394         </pz:metadata>
395         <pz:metadata type="subject-long">
396           <xsl:for-each select="node()/text()">
397             <xsl:if test="position() > 1">
398               <xsl:text>, </xsl:text>
399             </xsl:if>
400             <xsl:value-of select="." />
401           </xsl:for-each>
402         </pz:metadata>
403       </xsl:for-each>
404
405       <xsl:for-each select="tmarc:d648">
406         <pz:metadata type="subject">
407           <xsl:value-of select="tmarc:sa" />
408         </pz:metadata>
409         <pz:metadata type="subject-long">
410           <xsl:for-each select="node()/text()">
411             <xsl:if test="position() > 1">
412               <xsl:text>, </xsl:text>
413             </xsl:if>
414             <xsl:value-of select="." />
415           </xsl:for-each>
416         </pz:metadata>
417       </xsl:for-each>
418
419       <xsl:for-each select="tmarc:d650">
420         <pz:metadata type="subject">
421           <xsl:value-of select="tmarc:sa" />
422         </pz:metadata>
423         <pz:metadata type="subject-long">
424           <xsl:for-each select="node()/text()">
425             <xsl:if test="position() > 1">
426               <xsl:text>, </xsl:text>
427             </xsl:if>
428             <xsl:value-of select="." />
429           </xsl:for-each>
430         </pz:metadata>
431       </xsl:for-each>
432
433       <xsl:for-each select="tmarc:d651">
434         <pz:metadata type="subject">
435           <xsl:value-of select="tmarc:sa" />
436         </pz:metadata>
437         <pz:metadata type="subject-long">
438           <xsl:for-each select="node()/text()">
439             <xsl:if test="position() > 1">
440               <xsl:text>, </xsl:text>
441             </xsl:if>
442             <xsl:value-of select="." />
443           </xsl:for-each>
444         </pz:metadata>
445       </xsl:for-each>
446
447       <xsl:for-each select="tmarc:d653">
448         <pz:metadata type="subject">
449           <xsl:value-of select="tmarc:sa" />
450         </pz:metadata>
451         <pz:metadata type="subject-long">
452           <xsl:for-each select="node()/text()">
453             <xsl:if test="position() > 1">
454               <xsl:text>, </xsl:text>
455             </xsl:if>
456             <xsl:value-of select="." />
457           </xsl:for-each>
458         </pz:metadata>
459       </xsl:for-each>
460
461       <xsl:for-each select="tmarc:d654">
462         <pz:metadata type="subject">
463           <xsl:value-of select="tmarc:sa" />
464         </pz:metadata>
465         <pz:metadata type="subject-long">
466           <xsl:for-each select="node()/text()">
467             <xsl:if test="position() > 1">
468               <xsl:text>, </xsl:text>
469             </xsl:if>
470             <xsl:value-of select="." />
471           </xsl:for-each>
472         </pz:metadata>
473       </xsl:for-each>
474
475       <xsl:for-each select="tmarc:d655">
476         <pz:metadata type="subject">
477           <xsl:value-of select="tmarc:sa" />
478         </pz:metadata>
479         <pz:metadata type="subject-long">
480           <xsl:for-each select="node()/text()">
481             <xsl:if test="position() > 1">
482               <xsl:text>, </xsl:text>
483             </xsl:if>
484             <xsl:value-of select="." />
485           </xsl:for-each>
486         </pz:metadata>
487       </xsl:for-each>
488
489       <xsl:for-each select="tmarc:d656">
490         <pz:metadata type="subject">
491           <xsl:value-of select="tmarc:sa" />
492         </pz:metadata>
493         <pz:metadata type="subject-long">
494           <xsl:for-each select="node()/text()">
495             <xsl:if test="position() > 1">
496               <xsl:text>, </xsl:text>
497             </xsl:if>
498             <xsl:value-of select="." />
499           </xsl:for-each>
500         </pz:metadata>
501       </xsl:for-each>
502
503       <xsl:for-each select="tmarc:d657">
504         <pz:metadata type="subject">
505           <xsl:value-of select="tmarc:sa" />
506         </pz:metadata>
507         <pz:metadata type="subject-long">
508           <xsl:for-each select="node()/text()">
509             <xsl:if test="position() > 1">
510               <xsl:text>, </xsl:text>
511             </xsl:if>
512             <xsl:value-of select="." />
513           </xsl:for-each>
514         </pz:metadata>
515       </xsl:for-each>
516
517       <xsl:for-each select="tmarc:d658">
518         <pz:metadata type="subject">
519           <xsl:value-of select="tmarc:sa" />
520         </pz:metadata>
521         <pz:metadata type="subject-long">
522           <xsl:for-each select="node()/text()">
523             <xsl:if test="position() > 1">
524               <xsl:text>, </xsl:text>
525             </xsl:if>
526             <xsl:value-of select="." />
527           </xsl:for-each>
528         </pz:metadata>
529       </xsl:for-each>
530
531       <xsl:for-each select="tmarc:d662">
532         <pz:metadata type="subject">
533           <xsl:value-of select="tmarc:sa" />
534         </pz:metadata>
535         <pz:metadata type="subject-long">
536           <xsl:for-each select="node()/text()">
537             <xsl:if test="position() > 1">
538               <xsl:text>, </xsl:text>
539             </xsl:if>
540             <xsl:value-of select="." />
541           </xsl:for-each>
542         </pz:metadata>
543       </xsl:for-each>
544
545       <xsl:for-each select="tmarc:d69X">
546         <pz:metadata type="subject">
547           <xsl:value-of select="tmarc:sa" />
548         </pz:metadata>
549         <pz:metadata type="subject-long">
550           <xsl:for-each select="node()/text()">
551             <xsl:if test="position() > 1">
552               <xsl:text>, </xsl:text>
553             </xsl:if>
554             <xsl:value-of select="." />
555           </xsl:for-each>
556         </pz:metadata>
557       </xsl:for-each>
558
559       <!-- or tmarc:d651 or tmarc:d653 or tmarc:d654 or tmarc:d655 or tmarc:d656 
560         or tmarc:d657 or tmarc:d658 or tmarc:d662 or tmarc:d69X"> -->
561
562       <!-- <xsl:for-each select="tmarc:d600" > <pz:metadata type="subject"> 
563         <xsl:value-of select="tmarc:sa"/> </pz:metadata> <pz:metadata type="subject-long"> 
564         <xsl:for-each select="tmarc:sa tmarc:sb tmarc:sc tmarc:sd "> <xsl:if test="position() 
565         > 1"> <xsl:text>, </xsl:text> </xsl:if> <xsl:value-of select="."/> </xsl:for-each> 
566         </pz:metadata> </xsl:for-each> -->
567
568       <xsl:for-each select="tmarc:d856">
569         <pz:metadata type="electronic-url">
570           <xsl:value-of select="tmarc:su" />
571         </pz:metadata>
572         <pz:metadata type="electronic-text">
573           <xsl:if test="tmarc:sy">
574             <xsl:value-of select="tmarc:sy/text()" />
575           </xsl:if>
576           <xsl:if test="tmarc:s3">
577             <xsl:value-of select="tmarc:s3/text()" />
578           </xsl:if>
579         </pz:metadata>
580         <pz:metadata type="electronic-note">
581           <xsl:value-of select="tmarc:sz" />
582         </pz:metadata>
583         <pz:metadata type="electronic-format-instruction">
584           <xsl:value-of select="tmarc:si" />
585         </pz:metadata>
586         <pz:metadata type="electronic-format-type">
587           <xsl:value-of select="tmarc:sq" />
588         </pz:metadata>
589       </xsl:for-each>
590
591       <xsl:for-each select="tmarc:d773">
592         <pz:metadata type="citation">
593           <xsl:for-each select="*">
594             <xsl:value-of select="normalize-space(.)" />
595             <xsl:text> </xsl:text>
596           </xsl:for-each>
597         </pz:metadata>
598         <xsl:if test="tmarc:st">
599           <pz:metadata type="journal-title">
600             <xsl:value-of select="tmarc:st"/>
601           </pz:metadata>
602         </xsl:if>
603         <xsl:if test="tmarc:sg">
604           <pz:metadata type="journal-subpart">
605             <xsl:value-of select="tmarc:sg"/> <xsl:value-of select="tmarc:sp"/>
606           </pz:metadata>
607         </xsl:if>
608       </xsl:for-each>
609
610       <xsl:for-each select="tmarc:d852">
611         <xsl:if test="tmarc:sy">
612           <pz:metadata type="publicnote">
613             <xsl:value-of select="tmarc:sy" />
614           </pz:metadata>
615         </xsl:if>
616         <xsl:if test="tmarc:sh">
617           <pz:metadata type="callnumber">
618             <xsl:value-of select="tmarc:sh" />
619           </pz:metadata>
620         </xsl:if>
621       </xsl:for-each>
622
623       <pz:metadata type="medium">
624         <xsl:value-of select="$vmedium" />
625         <xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
626           <xsl:text> (electronic)</xsl:text>
627         </xsl:if>
628       </pz:metadata>
629
630       <xsl:for-each select="tmarc:d900/tmarc:sa">
631         <pz:metadata type="fulltext">
632           <xsl:value-of select="." />
633         </pz:metadata>
634       </xsl:for-each>
635
636       <!-- <xsl:if test="$fulltext_a"> <pz:metadata type="fulltext"> <xsl:value-of 
637         select="$fulltext_a"/> </pz:metadata> </xsl:if> -->
638
639       <xsl:for-each select="tmarc:d900/tmarc:sb">
640         <pz:metadata type="fulltext">
641           <xsl:value-of select="." />
642         </pz:metadata>
643       </xsl:for-each>
644
645       <!-- <xsl:if test="$fulltext_b"> <pz:metadata type="fulltext"> <xsl:value-of 
646         select="$fulltext_b"/> </pz:metadata> </xsl:if> -->
647
648       <pz:metadata type="has-fulltext">
649         <xsl:value-of select="$has_fulltext"/>
650       </pz:metadata>
651
652       <xsl:for-each select="tmarc:d907">
653         <!-- or tmarc:d901"> -->
654         <pz:metadata type="iii-id">
655           <xsl:value-of select="tmarc:sa" />
656         </pz:metadata>
657       </xsl:for-each>
658
659       <xsl:for-each select="tmarc:d926">
660         <pz:metadata type="locallocation">
661           <xsl:choose><xsl:when test="tmarc:sa">
662             <xsl:value-of select="tmarc:sa"/>
663           </xsl:when><xsl:otherwise>
664             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
665           </xsl:otherwise></xsl:choose>
666         </pz:metadata>
667         <pz:metadata type="callnumber">
668           <xsl:choose><xsl:when test="tmarc:sc">
669             <xsl:value-of select="tmarc:sc"/>
670           </xsl:when><xsl:otherwise>
671             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
672           </xsl:otherwise></xsl:choose>
673         </pz:metadata>
674         <pz:metadata type="available">
675           <xsl:choose><xsl:when test="tmarc:se">
676             <xsl:value-of select="tmarc:se"/>
677           </xsl:when><xsl:otherwise>
678             <xsl:text>PAZPAR2_NULL_VALUE</xsl:text>
679           </xsl:otherwise></xsl:choose>
680         </pz:metadata>
681       </xsl:for-each>
682
683       <xsl:for-each select="tmarc:d948">
684         <pz:metadata type="holding">
685           <xsl:for-each select="tmarc:s">
686             <xsl:if test="position() > 1">
687               <xsl:text> </xsl:text>
688             </xsl:if>
689             <xsl:value-of select="." />
690           </xsl:for-each>
691         </pz:metadata>
692       </xsl:for-each>
693
694       <xsl:for-each select="tmarc:d991">
695         <pz:metadata type="holding">
696           <xsl:for-each select="tmarc:s">
697             <xsl:if test="position() > 1">
698               <xsl:text> </xsl:text>
699             </xsl:if>
700             <xsl:value-of select="." />
701           </xsl:for-each>
702         </pz:metadata>
703       </xsl:for-each>
704
705       <xsl:for-each select="tmarc:d999">
706         <pz:metadata type="localid">
707           <xsl:choose>
708             <xsl:when test="tmarc:sa">
709               <xsl:value-of select="tmarc:sa"/>
710             </xsl:when>
711             <xsl:when test="tmarc:sc">
712               <xsl:value-of select="tmarc:sc"/>
713             </xsl:when> 
714             <xsl:otherwise>
715               <xsl:value-of select="tmarc:sd"/>
716             </xsl:otherwise>
717           </xsl:choose>
718         </pz:metadata>
719       </xsl:for-each>
720
721
722       <!-- passthrough id data -->
723       <xsl:for-each select="pz:metadata">
724         <xsl:copy-of select="." />
725       </xsl:for-each>
726
727       <!-- other stylesheets importing this might want to define this -->
728         <xsl:call-template name="record-hook" />
729
730     </pz:record>
731   </xsl:template>
732
733   <xsl:template match="text()" />
734
735   <!-- TODO Does not work anymore -->
736   <xsl:template name="shortTitle">
737     <xsl:param name="tag" />
738     <xsl:for-each select="tmarc:d">
739       <xsl:value-of select="tmarc:sa" />
740       <xsl:value-of select="tmarc:sm" />
741       <xsl:value-of select="tmarc:sn" />
742       <xsl:value-of select="tmarc:sp" />
743       <xsl:value-of select="tmarc:sr" />
744     </xsl:for-each>
745   </xsl:template>
746
747   <!-- No working as expected -->
748   <xsl:template name="description">
749     <xsl:param name="element" />
750     <xsl:for-each select="$element">
751       <pz:metadata type="description">
752         <xsl:for-each select="node()">
753           <xsl:value-of select="text()" />
754         </xsl:for-each>
755       </pz:metadata>
756     </xsl:for-each>
757     <xsl:apply-templates />
758   </xsl:template>
759
760   <!-- <xsl:for-each select="tmarc:d500"> <pz:metadata type="description"> 
761     <xsl:for-each select="node()"> <xsl:value-of select="text()"/> </xsl:for-each> 
762     </pz:metadata> </xsl:for-each> -->
763
764
765
766   <xsl:template name="subject">
767     <xsl:param name="element" />
768     <xsl:for-each select="$element">
769       <pz:metadata type="subject">
770         <xsl:value-of select="tmarc:sa" />
771       </pz:metadata>
772       <pz:metadata type="subject-long">
773         <xsl:for-each select="node()/text()">
774           <xsl:if test="position() > 1">
775             <xsl:text>, </xsl:text>
776           </xsl:if>
777           <xsl:value-of select="." />
778         </xsl:for-each>
779       </pz:metadata>
780     </xsl:for-each>
781   </xsl:template>
782
783
784 </xsl:stylesheet>