Allow predictable sessions PAZ-1030
[pazpar2-moved-to-github.git] / test / marc21-gbv.xsl
1 <?xml version="1.0" encoding="UTF-8"?>\r
2 <xsl:stylesheet\r
3     version="1.0"\r
4     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
5     xmlns:pz="http://www.indexdata.com/pazpar2/1.0"\r
6     xmlns:marc="http://www.loc.gov/MARC21/slim">\r
7   \r
8   <xsl:output indent="yes" method="xml" version="1.0" encoding="UTF-8"/>\r
9 \r
10 <!-- Extract metadata from MARC21/USMARC \r
11       http://www.loc.gov/marc/bibliographic/ecbdhome.html\r
12 -->  \r
13 <!-- <xsl:template match="*"/> -->\r
14 \r
15   <xsl:template name="record-hook"/>\r
16 \r
17   <xsl:template match="/">\r
18     <xsl:apply-templates/>\r
19   </xsl:template>\r
20 \r
21   <xsl:template match="record">\r
22     <xsl:variable name="title_medium" select="datafield[@tag='245']/subfield[@code='h']"/>\r
23     <xsl:variable name="journal_title" select="datafield[@tag='773']/subfield[@code='t']"/>\r
24     <xsl:variable name="electronic_location_url" select="datafield[@tag='856']/subfield[@code='u']"/>\r
25     <xsl:variable name="fulltext_a" select="datafield[@tag='900']/subfield[@code='a']"/>\r
26     <xsl:variable name="fulltext_b" select="datafield[@tag='900']/subfield[@code='b']"/>\r
27     <xsl:variable name="medium">\r
28       <xsl:choose>\r
29         <xsl:when test="$title_medium">\r
30           <xsl:value-of select="translate($title_medium, ' []/', '')"/>\r
31         </xsl:when>\r
32         <xsl:when test="$fulltext_a">\r
33           <xsl:text>electronic resource</xsl:text>\r
34         </xsl:when>\r
35         <xsl:when test="$fulltext_b">\r
36           <xsl:text>electronic resource</xsl:text>\r
37         </xsl:when>\r
38         <xsl:when test="$journal_title">\r
39           <xsl:text>article</xsl:text>\r
40         </xsl:when>\r
41         <xsl:otherwise>\r
42           <xsl:text>book</xsl:text>\r
43         </xsl:otherwise>\r
44       </xsl:choose>\r
45     </xsl:variable>\r
46 \r
47     <pz:record>\r
48       \r
49       <xsl:for-each select="controlfield[@tag='001']">\r
50         <pz:metadata type="id">\r
51           <xsl:value-of select="."/>\r
52         </pz:metadata>\r
53       </xsl:for-each>\r
54 \r
55       <xsl:for-each select="datafield[@tag='010']">\r
56         <pz:metadata type="lccn">\r
57           <xsl:value-of select="subfield[@code='a']"/>\r
58         </pz:metadata>\r
59       </xsl:for-each>\r
60 \r
61       <xsl:for-each select="datafield[@tag='020']">\r
62         <pz:metadata type="isbn">\r
63           <xsl:value-of select="subfield[@code='a']"/>\r
64         </pz:metadata>\r
65       </xsl:for-each>\r
66 \r
67       <xsl:for-each select="datafield[@tag='022']">\r
68         <pz:metadata type="issn">\r
69           <xsl:value-of select="subfield[@code='a']"/>\r
70         </pz:metadata>\r
71       </xsl:for-each>\r
72 \r
73       <xsl:for-each select="datafield[@tag='027']">\r
74         <pz:metadata type="tech-rep-nr">\r
75           <xsl:value-of select="subfield[@code='a']"/>\r
76         </pz:metadata>\r
77       </xsl:for-each>\r
78 \r
79       <xsl:for-each select="datafield[@tag='035']">\r
80         <pz:metadata type="system-control-nr">\r
81           <xsl:choose>\r
82             <xsl:when test="subfield[@code='a']">\r
83               <xsl:value-of select="subfield[@code='a']"/>\r
84             </xsl:when>\r
85             <xsl:otherwise>\r
86               <xsl:value-of select="subfield[@code='b']"/>\r
87             </xsl:otherwise>\r
88           </xsl:choose>\r
89         </pz:metadata>\r
90       </xsl:for-each>\r
91 \r
92       <xsl:for-each select="datafield[@tag='100']">\r
93         <pz:metadata type="author">\r
94           <xsl:value-of select="subfield[@code='a']"/>\r
95         </pz:metadata>\r
96         <pz:metadata type="author-title">\r
97           <xsl:value-of select="subfield[@code='c']"/>\r
98         </pz:metadata>\r
99         <pz:metadata type="author-date">\r
100           <xsl:value-of select="subfield[@code='d']"/>\r
101         </pz:metadata>\r
102       </xsl:for-each>\r
103 \r
104       <xsl:for-each select="datafield[@tag='110']">\r
105         <pz:metadata type="corporate-name">\r
106             <xsl:value-of select="subfield[@code='a']"/>\r
107         </pz:metadata>\r
108         <pz:metadata type="corporate-location">\r
109             <xsl:value-of select="subfield[@code='c']"/>\r
110         </pz:metadata>\r
111         <pz:metadata type="corporate-date">\r
112             <xsl:value-of select="subfield[@code='d']"/>\r
113         </pz:metadata>\r
114       </xsl:for-each>\r
115 \r
116       <xsl:for-each select="datafield[@tag='111']">\r
117         <pz:metadata type="meeting-name">\r
118             <xsl:value-of select="subfield[@code='a']"/>\r
119         </pz:metadata>\r
120         <pz:metadata type="meeting-location">\r
121             <xsl:value-of select="subfield[@code='c']"/>\r
122         </pz:metadata>\r
123         <pz:metadata type="meeting-date">\r
124             <xsl:value-of select="subfield[@code='d']"/>\r
125         </pz:metadata>\r
126       </xsl:for-each>\r
127 \r
128       <xsl:for-each select="datafield[@tag='260']">\r
129         <pz:metadata type="date">\r
130             <xsl:value-of select="subfield[@code='c']"/>\r
131         </pz:metadata>\r
132       </xsl:for-each>\r
133 \r
134       <xsl:for-each select="datafield[@tag='245']">\r
135         <pz:metadata type="title">\r
136           <xsl:value-of select="subfield[@code='a']"/>\r
137         </pz:metadata>\r
138         <pz:metadata type="title-remainder">\r
139           <xsl:value-of select="subfield[@code='b']"/>\r
140         </pz:metadata>\r
141         <pz:metadata type="title-responsibility">\r
142           <xsl:value-of select="subfield[@code='c']"/>\r
143         </pz:metadata>\r
144         <pz:metadata type="title-dates">\r
145           <xsl:value-of select="subfield[@code='f']"/>\r
146         </pz:metadata>\r
147         <pz:metadata type="title-medium">\r
148           <xsl:value-of select="subfield[@code='h']"/>\r
149         </pz:metadata>\r
150         <pz:metadata type="title-number-section">\r
151           <xsl:value-of select="subfield[@code='n']"/>\r
152         </pz:metadata>\r
153       </xsl:for-each>\r
154 \r
155       <xsl:for-each select="datafield[@tag='250']">\r
156         <pz:metadata type="edition">\r
157             <xsl:value-of select="subfield[@code='a']"/>\r
158         </pz:metadata>\r
159       </xsl:for-each>\r
160 \r
161       <xsl:for-each select="datafield[@tag='260']">\r
162         <pz:metadata type="publication-place">\r
163           <xsl:value-of select="subfield[@code='a']"/>\r
164         </pz:metadata>\r
165         <pz:metadata type="publication-name">\r
166           <xsl:value-of select="subfield[@code='b']"/>\r
167         </pz:metadata>\r
168         <pz:metadata type="publication-date">\r
169           <xsl:value-of select="subfield[@code='c']"/>\r
170         </pz:metadata>\r
171       </xsl:for-each>\r
172 \r
173       <xsl:for-each select="datafield[@tag='300']">\r
174         <pz:metadata type="physical-extent">\r
175           <xsl:value-of select="subfield[@code='a']"/>\r
176         </pz:metadata>\r
177         <pz:metadata type="physical-format">\r
178           <xsl:value-of select="subfield[@code='b']"/>\r
179         </pz:metadata>\r
180         <pz:metadata type="physical-dimensions">\r
181           <xsl:value-of select="subfield[@code='c']"/>\r
182         </pz:metadata>\r
183         <pz:metadata type="physical-accomp">\r
184           <xsl:value-of select="subfield[@code='e']"/>\r
185         </pz:metadata>\r
186         <pz:metadata type="physical-unittype">\r
187           <xsl:value-of select="subfield[@code='f']"/>\r
188         </pz:metadata>\r
189         <pz:metadata type="physical-unitsize">\r
190           <xsl:value-of select="subfield[@code='g']"/>\r
191         </pz:metadata>\r
192         <pz:metadata type="physical-specified">\r
193           <xsl:value-of select="subfield[@code='3']"/>\r
194         </pz:metadata>\r
195       </xsl:for-each>\r
196 \r
197       <xsl:for-each select="datafield[@tag='440']">\r
198         <pz:metadata type="series-title">\r
199           <xsl:value-of select="subfield[@code='a']"/>\r
200         </pz:metadata>\r
201       </xsl:for-each>\r
202 \r
203       <xsl:for-each select="datafield[@tag = '500' or @tag = '505' or\r
204                 @tag = '518' or @tag = '520' or @tag = '522']">\r
205         <pz:metadata type="description">\r
206             <xsl:value-of select="*/text()"/>\r
207         </pz:metadata>\r
208       </xsl:for-each>\r
209       \r
210       <xsl:for-each select="datafield[@tag='600' or @tag='610' or @tag='611' or @tag='630' or @tag='648' or @tag='650' or @tag='651' or @tag='653' or @tag='654' or @tag='655' or @tag='656' or @tag='657' or @tag='658' or @tag='662' or @tag='69X']">\r
211         <pz:metadata type="subject">\r
212           <xsl:value-of select="subfield[@code='a']"/>\r
213         </pz:metadata>\r
214         <pz:metadata type="subject-long">\r
215           <xsl:for-each select="subfield">\r
216             <xsl:if test="position() > 1">\r
217               <xsl:text>, </xsl:text>\r
218             </xsl:if>\r
219             <xsl:value-of select="."/>\r
220           </xsl:for-each>\r
221         </pz:metadata>\r
222       </xsl:for-each>\r
223 \r
224       <xsl:for-each select="datafield[@tag='856']">\r
225         <pz:metadata type="electronic-url">\r
226           <xsl:value-of select="subfield[@code='u']"/>\r
227         </pz:metadata>\r
228         <pz:metadata type="electronic-text">\r
229           <xsl:value-of select="subfield[@code='y' or @code='3']"/>\r
230         </pz:metadata>\r
231         <pz:metadata type="electronic-note">\r
232           <xsl:value-of select="subfield[@code='z']"/>\r
233         </pz:metadata>\r
234         <pz:metadata type="electronic-format-instruction">\r
235           <xsl:value-of select="subfield[@code='i']"/>\r
236         </pz:metadata>\r
237         <pz:metadata type="electronic-format-type">\r
238           <xsl:value-of select="subfield[@code='q']"/>\r
239         </pz:metadata>\r
240       </xsl:for-each>\r
241 \r
242       <xsl:for-each select="datafield[@tag='773']">\r
243         <pz:metadata type="citation">\r
244               <xsl:for-each select="*">\r
245                 <xsl:value-of select="normalize-space(.)"/>\r
246                 <xsl:text> </xsl:text>\r
247           </xsl:for-each>\r
248         </pz:metadata>\r
249         <xsl:if test="subfield[@code='t']">\r
250           <pz:metadata type="journal-title">\r
251                 <xsl:value-of select="subfield[@code='t']"/>\r
252           </pz:metadata>          \r
253         </xsl:if>\r
254         <xsl:if test="subfield[@code='g']">\r
255           <pz:metadata type="journal-subpart">\r
256                 <xsl:value-of select="subfield[@code='g']"/>\r
257           </pz:metadata>          \r
258         </xsl:if>\r
259       </xsl:for-each>\r
260 \r
261       <xsl:for-each select="datafield[@tag='852']">\r
262         <xsl:if test="subfield[@code='y']">\r
263           <pz:metadata type="publicnote">\r
264             <xsl:value-of select="subfield[@code='y']"/>\r
265           </pz:metadata>\r
266         </xsl:if>\r
267         <xsl:if test="subfield[@code='h']">\r
268           <pz:metadata type="callnumber">\r
269             <xsl:value-of select="subfield[@code='h']"/>\r
270           </pz:metadata>\r
271         </xsl:if>\r
272       </xsl:for-each>\r
273 \r
274       <pz:metadata type="medium">\r
275         <xsl:value-of select="$medium"/>\r
276       </pz:metadata>\r
277       \r
278       <xsl:for-each select="datafield[@tag='900']/subfield[@code='a']">\r
279         <pz:metadata type="fulltext">\r
280           <xsl:value-of select="."/>\r
281         </pz:metadata>\r
282       </xsl:for-each>\r
283 \r
284       <!-- <xsl:if test="$fulltext_a">\r
285         <pz:metadata type="fulltext">\r
286           <xsl:value-of select="$fulltext_a"/>\r
287         </pz:metadata>\r
288       </xsl:if> -->\r
289 \r
290       <xsl:for-each select="datafield[@tag='900']/subfield[@code='b']">\r
291         <pz:metadata type="fulltext">\r
292           <xsl:value-of select="."/>\r
293         </pz:metadata>\r
294       </xsl:for-each>\r
295 \r
296       <!-- <xsl:if test="$fulltext_b">\r
297         <pz:metadata type="fulltext">\r
298           <xsl:value-of select="$fulltext_b"/>\r
299         </pz:metadata>\r
300       </xsl:if> -->\r
301 \r
302       <xsl:for-each select="datafield[@tag='907' or @tag='901']">\r
303         <pz:metadata type="iii-id">\r
304           <xsl:value-of select="subfield[@code='a']"/>\r
305         </pz:metadata>\r
306       </xsl:for-each>\r
307 \r
308       <xsl:for-each select="datafield[@tag='926']">\r
309         <pz:metadata type="holding">\r
310           <xsl:for-each select="subfield">\r
311             <xsl:if test="position() > 1">\r
312               <xsl:text> </xsl:text>\r
313             </xsl:if>\r
314             <xsl:value-of select="."/>\r
315           </xsl:for-each>\r
316         </pz:metadata>\r
317       </xsl:for-each>\r
318 \r
319       <xsl:for-each select="datafield[@tag='948']">\r
320         <pz:metadata type="holding">\r
321           <xsl:for-each select="subfield">\r
322             <xsl:if test="position() > 1">\r
323               <xsl:text> </xsl:text>\r
324             </xsl:if>\r
325             <xsl:value-of select="."/>\r
326           </xsl:for-each>\r
327         </pz:metadata>\r
328       </xsl:for-each>\r
329 \r
330       <xsl:for-each select="datafield[@tag='991']">\r
331         <pz:metadata type="holding">\r
332           <xsl:for-each select="subfield">\r
333             <xsl:if test="position() > 1">\r
334               <xsl:text> </xsl:text>\r
335             </xsl:if>\r
336             <xsl:value-of select="."/>\r
337           </xsl:for-each>\r
338         </pz:metadata>\r
339       </xsl:for-each>\r
340 \r
341       <!-- passthrough id data -->\r
342       <xsl:for-each select="pz:metadata">\r
343           <xsl:copy-of select="."/>\r
344       </xsl:for-each>\r
345 \r
346       <!-- other stylesheets importing this might want to define this -->\r
347       <xsl:call-template name="record-hook"/>\r
348 \r
349     </pz:record>    \r
350   </xsl:template>\r
351   \r
352   <xsl:template match="text()"/>\r
353 \r
354 </xsl:stylesheet>\r