43c7ae58e6cc27723d5dba6b3babbb283c3f8f36
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / xslt / MARC21slim2MODS.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE stylesheet [<!ENTITY nbsp "&#160;" >]>
3 <xsl:stylesheet version="1.0" xmlns:xlink="http://www.w3.org/TR/xlink" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns="http://www.loc.gov/mods/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="marc">
4         <xsl:include href="MARC21slimUtils.xsl"/>
5     <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
6         
7         <xsl:template match="/">
8                 <collection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/mods/  http://www.loc.gov/standards/marcxml/schema/mods.xsd">
9                         <xsl:apply-templates/>
10                 </collection>
11         </xsl:template>
12
13         <xsl:template match="marc:record">
14                 <mods>
15                         <xsl:variable name="leader" select="marc:leader"/>
16                         <xsl:variable name="leader6" select="substring($leader,7,1)"/>
17                         <xsl:variable name="leader7" select="substring($leader,8,1)"/>
18                         <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>
19
20                         <xsl:variable name="typeOf008">
21                                 <xsl:choose>
22                                         <xsl:when test="$leader6='a'">
23                                                 <xsl:choose>
24                                                         <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
25                                                         <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>                             
26                                                 </xsl:choose>
27                                         </xsl:when>
28                                         <xsl:when test="$leader6='t'">BK</xsl:when>
29                                         <xsl:when test="$leader6='p'">MM</xsl:when>
30                                         <xsl:when test="$leader6='m'">CF</xsl:when>     
31                                         <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>     
32                                         <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>                             
33                                         <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">MU</xsl:when>                             
34                                 </xsl:choose>
35                         </xsl:variable>
36
37                         <xsl:for-each select="marc:datafield[@tag=245]">
38                                 <titleInfo>
39                                         <xsl:variable name="title">
40                                                 <xsl:call-template name="chopPunctuation">
41                                                         <xsl:with-param name="chopString">
42                                                                 <xsl:call-template name="subfieldSelect">
43                                                                         <xsl:with-param name="codes">abfghk</xsl:with-param>
44                                                                 </xsl:call-template>
45                                                         </xsl:with-param>
46                                                 </xsl:call-template>
47                                         </xsl:variable>
48                                         <xsl:choose>
49                                                 <xsl:when test="@ind2>0">
50                                                         <nonSort>
51                                                                 <xsl:value-of select="substring($title,1,@ind2)"/>
52                                                         </nonSort>
53                                                         <title>
54                                                                 <xsl:value-of select="substring($title,@ind2+1)"/>
55                                                         </title>
56                                                 </xsl:when>
57                                                 <xsl:otherwise>
58                                                         <title>
59                                                                 <xsl:value-of select="$title"/>
60                                                         </title>
61                                                 </xsl:otherwise>
62                                         </xsl:choose>
63                                         <xsl:call-template name="part"/>
64                                 </titleInfo>
65                         </xsl:for-each>
66                         
67                         <xsl:for-each select="marc:datafield[@tag=210]">
68                                 <titleInfo type="abbreviated">
69                                         <title>
70                                                 <xsl:call-template name="subfieldSelect">
71                                                         <xsl:with-param name="codes">ab</xsl:with-param>
72                                                 </xsl:call-template>
73                                         </title>
74                                 </titleInfo>
75                         </xsl:for-each>
76                         
77                         <xsl:for-each select="marc:datafield[@tag=242]">
78                                 <titleInfo type="translated">
79                                         <title>
80                                                 <xsl:call-template name="subfieldSelect">
81                                                         <xsl:with-param name="codes">abh</xsl:with-param>
82                                                 </xsl:call-template>
83                                         </title>
84                                         <xsl:call-template name="part"/>
85                                 </titleInfo>
86                         </xsl:for-each>
87                         
88                         <xsl:for-each select="marc:datafield[@tag=246]">
89                                 <titleInfo type="alternative">
90                                         <xsl:for-each select="marc:subfield[@code='i']">
91                                                 <xsl:attribute name="displayLabel">
92                                                         <xsl:value-of select="text()"/>
93                                                 </xsl:attribute>
94                                         </xsl:for-each>
95                                         <title>
96                                                 <xsl:call-template name="subfieldSelect">
97                                                         <xsl:with-param name="codes">abfh</xsl:with-param>
98                                                 </xsl:call-template>
99                                         </title>
100                                         <xsl:call-template name="part"/>                        
101                                 </titleInfo>
102                         </xsl:for-each>
103
104                         <xsl:for-each select="marc:datafield[@tag=130]|marc:datafield[@tag=240]|marc:datafield[@tag=730][@ind2!=2]">
105                                 <titleInfo type="uniform">
106                                         <title>
107                                                 <xsl:variable name="str">
108                                                         <xsl:for-each select="marc:subfield">
109                                                                 <xsl:if test="(contains('adfhklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
110                                                                         <xsl:value-of select="text()"/><xsl:text> </xsl:text>
111                                                                 </xsl:if>
112                                                         </xsl:for-each>
113                                                 </xsl:variable>
114                                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
115                                         </title>
116                                         <xsl:call-template name="part"/>                        
117                                 </titleInfo>
118                         </xsl:for-each>
119
120                         <xsl:for-each select="marc:datafield[@tag=740][@ind2!=2]">
121                                 <titleInfo type="alternative">
122                                         <title>
123                                                 <xsl:call-template name="subfieldSelect">
124                                                         <xsl:with-param name="codes">ah</xsl:with-param>
125                                                 </xsl:call-template>
126                                         </title>
127                                         <xsl:call-template name="part"/>                        
128                                 </titleInfo>
129                         </xsl:for-each>
130                         
131                         <xsl:for-each select="marc:datafield[@tag=100]">
132                                 <name type="personal">
133                                         <xsl:call-template name="nameABCDQ"/>
134                                         <xsl:call-template name="affiliation"/>
135                                         <role>creator</role>
136                                         <xsl:call-template name="role"/>
137                                 </name>
138                         </xsl:for-each>
139
140
141                         <xsl:for-each select="marc:datafield[@tag=110]">
142                                 <name type="corporate">
143                                         <xsl:call-template name="nameABCDN"/>
144                                         <role>creator</role>
145                                         <xsl:call-template name="role"/>
146                                 </name>
147                         </xsl:for-each>
148
149                         <xsl:for-each select="marc:datafield[@tag=111]">
150                                 <name type="conference">
151                                         <xsl:call-template name="nameACDEQ"/>
152                                         <role>creator</role>
153                                         <xsl:for-each select="marc:subfield[@code='4']">
154                                                 <role><xsl:value-of select="."/></role>
155                                         </xsl:for-each>
156                                 </name>
157                         </xsl:for-each>
158
159                         <xsl:for-each select="marc:datafield[@tag=700][not(marc:subfield[@code='t'])]">
160                                 <name type="personal">
161                                         <xsl:call-template name="nameABCDQ"/>
162                                         <xsl:call-template name="affiliation"/>
163                                         <xsl:call-template name="role"/>
164                                 </name>
165                         </xsl:for-each>
166
167                         <xsl:for-each select="marc:datafield[@tag=710][not(marc:subfield[@code='t'])]">
168                                 <name type="corporate">
169                                         <xsl:call-template name="nameABCDN"/>
170                                         <xsl:call-template name="role"/>
171                                 </name>
172                         </xsl:for-each>
173
174                         <xsl:for-each select="marc:datafield[@tag=711][not(marc:subfield[@code='t'])]">
175                                 <name type="conference">
176                                         <xsl:call-template name="nameACDEQ"/>
177                                         <xsl:for-each select="marc:subfield[@code='4']">
178                                                 <role><xsl:value-of select="."/></role>
179                                         </xsl:for-each>
180                                 </name>
181                         </xsl:for-each>
182
183                         <xsl:for-each select="marc:datafield[@tag=720][not(marc:subfield[@code='t'])]">
184                                 <name>
185                                         <xsl:if test="@ind1=1">
186                                                 <xsl:attribute name="type">personal</xsl:attribute>
187                                         </xsl:if>
188                                         <namePart>
189                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
190                                         </namePart>
191                                         <xsl:call-template name="role"/>
192                                 </name>
193                         </xsl:for-each>
194
195                         <typeOfResource>                
196                                 <xsl:if test="$leader7='c'">
197                                         <xsl:attribute name="collection">yes</xsl:attribute>
198                                 </xsl:if>
199                                 <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
200                                         <xsl:attribute name="manuscript">yes</xsl:attribute>
201                                 </xsl:if>
202
203                                 <xsl:choose>
204                                         <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
205                                         <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
206                                         <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
207                                         <xsl:when test="$leader6='i' or $leader6='j'">sound recording</xsl:when>
208                                         <xsl:when test="$leader6='k'">still image</xsl:when>
209                                         <xsl:when test="$leader6='g'">moving image</xsl:when>
210                                         <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
211                                         <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
212                                         <xsl:when test="$leader6='p'">mixed material</xsl:when>
213                                 </xsl:choose>
214                         </typeOfResource>
215
216                                 <xsl:if test="substring($controlField008,26,1)='d'">
217                                         <genre authority="marc">globe</genre>
218                                 </xsl:if>
219                         
220                                 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
221                                         <genre authority="marc">remote sensing image</genre>
222                                 </xsl:if>
223
224                                 <xsl:if test="$typeOf008='MP'">
225                                         <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"/>
226                                         <xsl:choose>
227                                                 <xsl:when test="$controlField008-25='a' or $controlField008-25='b' or $controlField008-25='c' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='j']">
228                                                         <genre authority="marc">map</genre>
229                                                 </xsl:when>
230                                                 <xsl:when test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
231                                                         <genre authority="marc">atlas</genre>
232                                                 </xsl:when>
233                                         </xsl:choose>
234                                 </xsl:if>
235
236                                 <xsl:if test="$typeOf008='SE'">
237                                         <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"/>
238                                         <xsl:choose>
239                                                 <xsl:when test="$controlField008-21='d'">
240                                                         <genre authority="marc">database</genre>
241                                                 </xsl:when>
242                                                 <xsl:when test="$controlField008-21='l'">       
243                                                         <genre authority="marc">loose-leaf</genre>
244                                                 </xsl:when>
245                                                 <xsl:when test="$controlField008-21='m'">
246                                                         <genre authority="marc">series</genre>
247                                                 </xsl:when>
248                                                 <xsl:when test="$controlField008-21='n'">
249                                                         <genre authority="marc">newspaper</genre>       
250                                                 </xsl:when>
251                                                 <xsl:when test="$controlField008-21='p'">
252                                                         <genre authority="marc">periodical</genre>
253                                                 </xsl:when>
254                                                 <xsl:when test="$controlField008-21='w'">
255                                                         <genre authority="marc">web site</genre>
256                                                 </xsl:when>
257                                         </xsl:choose>
258                                 </xsl:if>
259
260                                 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
261                                         <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"/>
262                                         <xsl:choose>
263                                                 <xsl:when test="contains($controlField008-24,'a')">
264                                                         <genre authority="marc">abstract or summary</genre>
265                                                 </xsl:when>
266                                                 <xsl:when test="contains($controlField008-24,'b')">
267                                                         <genre authority="marc">bibliography</genre>
268                                                 </xsl:when>
269                                                 <xsl:when test="contains($controlField008-24,'c')">
270                                                         <genre authority="marc">catalog</genre>
271                                                 </xsl:when>
272                                                 <xsl:when test="contains($controlField008-24,'d')">
273                                                         <genre authority="marc">dictionary</genre>
274                                                 </xsl:when>
275                                                 <xsl:when test="contains($controlField008-24,'e')">
276                                                         <genre authority="marc">encyclopedia</genre>
277                                                 </xsl:when>
278                                                 <xsl:when test="contains($controlField008-24,'f')">
279                                                         <genre authority="marc">handbook</genre>
280                                                 </xsl:when>
281                                                 <xsl:when test="contains($controlField008-24,'g')">
282                                                         <genre authority="marc">legal article</genre>
283                                                 </xsl:when>
284                                                 <xsl:when test="contains($controlField008-24,'i')">
285                                                         <genre authority="marc">index</genre>
286                                                 </xsl:when>
287                                                 <xsl:when test="contains($controlField008-24,'k')">
288                                                         <genre authority="marc">discography</genre>
289                                                 </xsl:when>
290                                                 <xsl:when test="contains($controlField008-24,'l')">
291                                                         <genre authority="marc">legislation</genre>
292                                                 </xsl:when>
293                                                 <xsl:when test="contains($controlField008-24,'m')">
294                                                         <genre authority="marc">theses</genre>
295                                                 </xsl:when>
296                                                 <xsl:when test="contains($controlField008-24,'n')">
297                                                         <genre authority="marc">survey of literature</genre>
298                                                 </xsl:when>
299                                                 <xsl:when test="contains($controlField008-24,'o')">
300                                                         <genre authority="marc">review</genre>
301                                                 </xsl:when>
302                                                 <xsl:when test="contains($controlField008-24,'p')">
303                                                         <genre authority="marc">programmed text</genre>
304                                                 </xsl:when>                                     
305                                                 <xsl:when test="contains($controlField008-24,'q')">
306                                                         <genre authority="marc">filmography</genre>
307                                                 </xsl:when>
308                                                 <xsl:when test="contains($controlField008-24,'r')">
309                                                         <genre authority="marc">directory</genre>
310                                                 </xsl:when>
311                                                 <xsl:when test="contains($controlField008-24,'s')">
312                                                         <genre authority="marc">statistics</genre>
313                                                 </xsl:when>
314                                                 <xsl:when test="contains($controlField008-24,'t')">
315                                                         <genre authority="marc">technical report</genre>
316                                                 </xsl:when>
317                                                 <xsl:when test="contains($controlField008-24,'v')">
318                                                         <genre authority="marc">legal case and case notes</genre>
319                                                 </xsl:when>
320                                                 <xsl:when test="contains($controlField008-24,'w')">
321                                                         <genre authority="marc">law report or digest</genre>
322                                                 </xsl:when>
323                                                 <xsl:when test="contains($controlField008-24,'z')">
324                                                         <genre authority="marc">treaty</genre>
325                                                 </xsl:when>      
326                                         </xsl:choose>
327                                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
328                                         <xsl:choose>
329                                                 <xsl:when test="$controlField008-29='1'">
330                                                         <genre authority="marc">conference publication</genre>
331                                                 </xsl:when>
332                                         </xsl:choose>
333                                 </xsl:if>
334
335                                 <xsl:if test="$typeOf008='CF'">
336                                         <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"/>
337                                         <xsl:choose>
338                                                 <xsl:when test="$controlField008-26='a'">
339                                                         <genre authority="marc">numeric data</genre>
340                                                 </xsl:when>
341                                                 <xsl:when test="$controlField008-26='e'">
342                                                         <genre authority="marc">database</genre>
343                                                 </xsl:when>
344                                                 <xsl:when test="$controlField008-26='f'">
345                                                         <genre authority="marc">font</genre>
346                                                 </xsl:when>
347                                                 <xsl:when test="$controlField008-26='g'">
348                                                         <genre authority="marc">game</genre>
349                                                 </xsl:when>
350                                         </xsl:choose>
351                                 </xsl:if>
352
353                                 <xsl:if test="$typeOf008='BK'">
354                                         <xsl:if test="substring($controlField008,25,1)='j'">
355                                                 <genre authority="marc">patent</genre>
356                                         </xsl:if>
357                                         <xsl:if test="substring($controlField008,31,1)='1'">
358                                                 <genre authority="marc">festschrift</genre>
359                                         </xsl:if>
360
361                                         <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"/>
362                                         <xsl:if test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
363                                                 <genre authority="marc">biography</genre>
364                                         </xsl:if>
365
366                                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
367                                         <xsl:choose>
368                                                 <xsl:when test="$controlField008-33='e'">
369                                                         <genre authority="marc">essay</genre>
370                                                 </xsl:when>
371                                                 <xsl:when test="$controlField008-33='d'">
372                                                         <genre authority="marc">drama</genre>
373                                                 </xsl:when>
374                                                 <xsl:when test="$controlField008-33='c'">
375                                                         <genre authority="marc">comic strip</genre>
376                                                 </xsl:when>
377                                                 <xsl:when test="$controlField008-33='l'">
378                                                         <genre authority="marc">fiction</genre>
379                                                 </xsl:when>
380                                                 <xsl:when test="$controlField008-33='h'">
381                                                         <genre authority="marc">humor, satire</genre>
382                                                 </xsl:when>
383                                                 <xsl:when test="$controlField008-33='i'">
384                                                         <genre authority="marc">letter</genre>
385                                                 </xsl:when>
386                                                 <xsl:when test="$controlField008-33='f'">
387                                                         <genre authority="marc">novel</genre>
388                                                 </xsl:when>
389                                                 <xsl:when test="$controlField008-33='j'">
390                                                         <genre authority="marc">short story</genre>
391                                                 </xsl:when>
392                                                 <xsl:when test="$controlField008-33='s'">
393                                                         <genre authority="marc">speech</genre>
394                                                 </xsl:when>
395                                         </xsl:choose>
396                                 </xsl:if>
397
398                                 <xsl:if test="$typeOf008='MU'">
399                                         <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"/>
400                                         <xsl:if test="contains($controlField008-30-31,'b')">
401                                                 <genre authority="marc">biography</genre>
402                                         </xsl:if>
403                                         <xsl:if test="contains($controlField008-30-31,'c')">
404                                                 <genre authority="marc">conference publication</genre>
405                                         </xsl:if>
406                                         <xsl:if test="contains($controlField008-30-31,'d')">
407                                                 <genre authority="marc">drama</genre>
408                                         </xsl:if>
409                                         <xsl:if test="contains($controlField008-30-31,'e')">
410                                                 <genre authority="marc">essay</genre>
411                                         </xsl:if>
412                                         <xsl:if test="contains($controlField008-30-31,'f')">
413                                                 <genre authority="marc">fiction</genre>
414                                         </xsl:if>
415                                         <xsl:if test="contains($controlField008-30-31,'o')">
416                                                 <genre authority="marc">folktale</genre>
417                                         </xsl:if>
418                                         <xsl:if test="contains($controlField008-30-31,'h')">
419                                                 <genre authority="marc">history</genre>
420                                         </xsl:if>
421                                         <xsl:if test="contains($controlField008-30-31,'k')">
422                                                 <genre authority="marc">humor, satire</genre>
423                                         </xsl:if>
424                                         <xsl:if test="contains($controlField008-30-31,'m')">
425                                                 <genre authority="marc">memoir</genre>
426                                         </xsl:if>
427                                         <xsl:if test="contains($controlField008-30-31,'p')">
428                                                 <genre authority="marc">poetry</genre>
429                                         </xsl:if>
430                                         <xsl:if test="contains($controlField008-30-31,'r')">
431                                                 <genre authority="marc">rehersal</genre>
432                                         </xsl:if>
433                                         <xsl:if test="contains($controlField008-30-31,'g')">
434                                                 <genre authority="marc">reporting</genre>
435                                         </xsl:if>
436                                         <xsl:if test="contains($controlField008-30-31,'s')">
437                                                 <genre authority="marc">sound</genre>
438                                         </xsl:if>
439                                         <xsl:if test="contains($controlField008-30-31,'l')">
440                                                 <genre authority="marc">speech</genre>
441                                         </xsl:if>
442                                 </xsl:if>
443
444                                 <xsl:if test="$typeOf008='VM'">
445                                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
446                                         <xsl:choose>
447                                                 <xsl:when test="$controlField008-33='a'">
448                                                         <genre authority="marc">art original</genre>
449                                                 </xsl:when>
450                                                 <xsl:when test="$controlField008-33='b'">
451                                                         <genre authority="marc">kit</genre>
452                                                 </xsl:when>
453                                                 <xsl:when test="$controlField008-33='c'">
454                                                         <genre authority="marc">art reproduction</genre>
455                                                 </xsl:when>
456                                                 <xsl:when test="$controlField008-33='d'">
457                                                         <genre authority="marc">diorama</genre>
458                                                 </xsl:when>
459                                                 <xsl:when test="$controlField008-33='f'">
460                                                         <genre authority="marc">filmstrip</genre>
461                                                 </xsl:when>
462                                                 <xsl:when test="$controlField008-33='g'">
463                                                         <genre authority="marc">legal article</genre>
464                                                 </xsl:when>
465                                                 <xsl:when test="$controlField008-33='i'">
466                                                         <genre authority="marc">picture</genre>
467                                                 </xsl:when>
468                                                 <xsl:when test="$controlField008-33='k'">
469                                                         <genre authority="marc">graphic</genre>
470                                                 </xsl:when>
471                                                 <xsl:when test="$controlField008-33='l'">
472                                                         <genre authority="marc">technical drawing</genre>
473                                                 </xsl:when>
474                                                 <xsl:when test="$controlField008-33='m'">
475                                                         <genre authority="marc">motion picture</genre>
476                                                 </xsl:when>
477                                                 <xsl:when test="$controlField008-33='n'">
478                                                         <genre authority="marc">chart</genre>
479                                                 </xsl:when>
480                                                 <xsl:when test="$controlField008-33='o'">
481                                                         <genre authority="marc">flash card</genre>
482                                                 </xsl:when>
483                                                 <xsl:when test="$controlField008-33='p'">
484                                                         <genre authority="marc">microscope slide</genre>
485                                                 </xsl:when>                                     
486                                                 <xsl:when test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
487                                                         <genre authority="marc">model</genre>
488                                                 </xsl:when>
489                                                 <xsl:when test="$controlField008-33='r'">
490                                                         <genre authority="marc">realia</genre>
491                                                 </xsl:when>
492                                                 <xsl:when test="$controlField008-33='s'">
493                                                         <genre authority="marc">slide</genre>
494                                                 </xsl:when>
495                                                 <xsl:when test="$controlField008-33='t'">
496                                                         <genre authority="marc">transparency</genre>
497                                                 </xsl:when>
498                                                 <xsl:when test="$controlField008-33='v'">
499                                                         <genre authority="marc">videorecording</genre>
500                                                 </xsl:when>
501                                                 <xsl:when test="$controlField008-33='w'">
502                                                         <genre authority="marc">toy</genre>
503                                                 </xsl:when> 
504                                         </xsl:choose>
505                                 </xsl:if>
506
507                                 <xsl:for-each select="marc:datafield[@tag=655]">
508                                         <genre authority="marc">
509                                                 <xsl:attribute name="authority">
510                                                         <xsl:value-of select="marc:subfield[@code='2']"/>
511                                                 </xsl:attribute>
512                                                 <xsl:call-template name="subfieldSelect">
513                                                         <xsl:with-param name="codes">abvxyz</xsl:with-param>
514                                                         <xsl:with-param name="delimeter">-</xsl:with-param>
515                                                 </xsl:call-template>
516                                         </genre>
517                                 </xsl:for-each>
518
519                         <publicationInfo>
520                                 <xsl:variable name="MARCpublicationCode" select="normalize-space(substring($controlField008,16,3))"/>
521                                 
522                                 <xsl:if test="translate($MARCpublicationCode,'|','')">
523                                         <placeCode authority="marc">
524                                                 <xsl:value-of select="$MARCpublicationCode"/>
525                                         </placeCode>
526                                 </xsl:if>
527                         
528                                 <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
529                                         <placeCode authority="iso3166">
530                                                 <xsl:value-of select="."/>
531                                         </placeCode>
532                                 </xsl:for-each>
533
534                                 <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a' or @code='b' or @code='c' or @code='g']">
535                                         <xsl:choose>
536                                                 <xsl:when test="@code='a'">
537                                                         <place>
538                                                                 <xsl:call-template name="chopPunctuation">
539                                                                         <xsl:with-param name="chopString" select="."/>
540                                                                 </xsl:call-template>
541                                                         </place>
542                                                 </xsl:when>
543                                                 <xsl:when test="@code='b'">
544                                                         <publisher>
545                                                                 <xsl:call-template name="chopPunctuation">
546                                                                         <xsl:with-param name="chopString" select="."/>
547                                                                 </xsl:call-template>
548                                                         </publisher>
549                                                 </xsl:when>
550                                                 <xsl:when test="@code='c'">
551                                                         <dateIssued>
552                                                                 <xsl:call-template name="chopPunctuation">
553                                                                         <xsl:with-param name="chopString" select="."/>
554                                                                 </xsl:call-template>
555                                                         </dateIssued>
556                                                 </xsl:when>
557                                                 <xsl:when test="@code='g'">
558                                                         <dateCreated>
559                                                                 <xsl:value-of select="."/>
560                                                         </dateCreated>                  
561                                                 </xsl:when>
562                                         </xsl:choose>
563                                 </xsl:for-each>
564
565                                 <xsl:variable name="dataField260c">
566                                         <xsl:call-template name="chopPunctuation">
567                                                 <xsl:with-param name="chopString" select="marc:datafield[@tag=260]/marc:subfield[@code='c']"/>
568                                         </xsl:call-template>
569                                 </xsl:variable>
570
571                                 <xsl:variable name="controlField008-7-10" select="normalize-space(substring($controlField008, 8, 4))"/>
572                                 <xsl:variable name="controlField008-11-14" select="normalize-space(substring($controlField008, 12, 4))"/>
573                                 <xsl:variable name="controlField008-6" select="normalize-space(substring($controlField008, 7, 1))"/>
574                 
575                                 <xsl:if test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
576                                         <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
577                                                 <dateIssued encoding="marc">
578                                                         <xsl:value-of select="$controlField008-7-10"/>
579                                                 </dateIssued>
580                                         </xsl:if>
581                                 </xsl:if>
582                 
583                                 <xsl:if test="$controlField008-6='c' or $controlField008-6='d' or $controlField008-6='i' or $controlField008-6='k' or $controlField008-6='m' or $controlField008-6='q' or $controlField008-6='u'">
584                                         <xsl:if test="$controlField008-7-10">
585                                                 <dateIssued encoding="marc" point="start">
586                                                         <xsl:value-of select="$controlField008-7-10"/>
587                                                 </dateIssued>
588                                         </xsl:if>
589                                 </xsl:if>
590
591                                 <xsl:if test="$controlField008-6='c' or $controlField008-6='d' or $controlField008-6='i' or $controlField008-6='k' or $controlField008-6='m' or $controlField008-6='q' or $controlField008-6='u'">
592                                         <xsl:if test="$controlField008-11-14">
593                                                 <dateIssued encoding="marc" point="end">
594                                                         <xsl:value-of select="$controlField008-11-14"/>
595                                                 </dateIssued>
596                                         </xsl:if>
597                                 </xsl:if>
598
599                                 <xsl:for-each select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
600                                         <dateCaptured encoding="iso8601">
601                                                 <xsl:value-of select="."/>
602                                         </dateCaptured>
603                                 </xsl:for-each>
604
605                                 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
606                                         <dateCaptured encoding="iso8601" point="start">
607                                                 <xsl:value-of select="."/>
608                                         </dateCaptured>
609                                 </xsl:for-each>
610
611                                 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
612                                         <dateCaptured encoding="iso8601" point="end">
613                                                 <xsl:value-of select="."/>
614                                         </dateCaptured>
615                                 </xsl:for-each>
616
617                                 <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
618                                         <edition>
619                                                 <xsl:value-of select="."/>
620                                         </edition>
621                                 </xsl:for-each>
622
623                                 <xsl:for-each select="marc:leader">
624                                         <issuance>
625                                                 <xsl:choose>
626                                                         <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">monographic</xsl:when>
627                                                         <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">continuing</xsl:when>                                                     
628                                                 </xsl:choose>
629                                         </issuance>
630                                 </xsl:for-each>         
631                                 
632                                 <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
633                                         <frequency>
634                                                 <xsl:call-template name="subfieldSelect">
635                                                         <xsl:with-param name="codes">ab</xsl:with-param>
636                                                 </xsl:call-template>
637                                         </frequency>
638                                 </xsl:for-each>                                                         
639                         </publicationInfo>
640
641
642                         <xsl:for-each select="marc:controlfield[@tag=041]">
643                                 <xsl:for-each select="marc:subfield[@code='a' or @code='d' or @code='e']">
644                                         <language>
645                                                 <xsl:choose>
646                                                         <xsl:when test="../marc:subfield[@code='2']">
647                                                                 <xsl:attribute name="authority">rfc3066</xsl:attribute>
648                                                         </xsl:when>
649                                                         <xsl:otherwise>
650                                                                 <xsl:attribute name="authority">iso639-2b</xsl:attribute>                                               
651                                                         </xsl:otherwise>
652                                                 </xsl:choose>
653                                                 <xsl:value-of select="text()"/>
654                                         </language>
655                                 </xsl:for-each>
656                         </xsl:for-each>                 
657
658                         <xsl:variable name="controlField008-35-37" select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"/>
659                         <xsl:if test="$controlField008-35-37">
660                                 <language authority="iso639-2b">
661                                         <xsl:value-of select="substring($controlField008,36,3)"/>
662                                 </language>
663                         </xsl:if>
664
665                         <xsl:variable name="physicalDescription">
666                                 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a' or substring(.,12,1)='b']">
667                                         <digitalOrigin>reformatted digital</digitalOrigin>
668                                 </xsl:if>
669
670                                 <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"/>
671                                 <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
672
673                                 <xsl:variable name="check008-23">
674                                         <xsl:if test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
675                                                 <xsl:value-of select="true()"/>
676                                         </xsl:if>
677                                 </xsl:variable>
678
679                                 <xsl:variable name="check008-29">
680                                         <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
681                                                 <xsl:value-of select="true()"/>
682                                         </xsl:if>
683                                 </xsl:variable>
684
685                                 <xsl:choose>
686                                         <xsl:when test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
687                                                 <form><controlled>braille</controlled></form>
688                                         </xsl:when>
689                                         <xsl:when test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
690                                                 <form><controlled>electronic</controlled></form>
691                                         </xsl:when>
692                                         <xsl:when test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
693                                                 <form><controlled>microfiche</controlled></form>
694                                         </xsl:when>
695                                         <xsl:when test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
696                                                 <form><controlled>microfilm</controlled></form>
697                                         </xsl:when>
698                                 </xsl:choose>
699
700                                 <xsl:for-each select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)>1]">
701                                         <internetMediaType>
702                                                 <xsl:value-of select="."/>
703                                         </internetMediaType>
704                                 </xsl:for-each>
705
706                                 <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
707                                         <form>
708                                                 <unControlled>
709                                                         <xsl:value-of select="."/>
710                                                 </unControlled>
711                                         </form>
712                                 </xsl:for-each>
713
714                                 <xsl:for-each select="marc:datafield[@tag=300]">
715                                         <extent>
716                                                 <xsl:call-template name="subfieldSelect">
717                                                         <xsl:with-param name="codes">abce</xsl:with-param>
718                                                 </xsl:call-template>
719                                         </extent>
720                                 </xsl:for-each>
721                         </xsl:variable>
722
723                         <xsl:if test="string-length(normalize-space($physicalDescription))">
724                                 <physicalDescription>
725                                         <xsl:copy-of select="$physicalDescription"/>
726                                 </physicalDescription>
727                         </xsl:if>
728
729                         <xsl:for-each select="marc:datafield[@tag=520]">
730                                 <abstract>
731                                         <xsl:call-template name="uri"/>
732                                         <xsl:call-template name="subfieldSelect">
733                                                 <xsl:with-param name="codes">ab</xsl:with-param>
734                                         </xsl:call-template>
735                                 </abstract>
736                         </xsl:for-each>
737
738                         <xsl:for-each select="marc:datafield[@tag=505]">
739                                 <tableOfContents>
740                                         <xsl:call-template name="uri"/>
741                                         <xsl:call-template name="subfieldSelect">
742                                                 <xsl:with-param name="codes">agrt</xsl:with-param>
743                                         </xsl:call-template>
744                                 </tableOfContents>
745                         </xsl:for-each>
746
747                         <xsl:for-each select="marc:datafield[@tag=521]">
748                                 <targetAudience>
749                                         <xsl:call-template name="subfieldSelect">
750                                                 <xsl:with-param name="codes">ab</xsl:with-param>
751                                         </xsl:call-template>
752                                 </targetAudience>
753                         </xsl:for-each>
754
755                         <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
756                                 <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"/>
757                                 <xsl:choose>
758                                         <xsl:when test="$controlField008-22='d'">
759                                                 <targetAudience>adolescent</targetAudience>
760                                         </xsl:when>
761                                         <xsl:when test="$controlField008-22='e'">
762                                                 <targetAudience>adult</targetAudience>
763                                         </xsl:when>
764                                         <xsl:when test="$controlField008-22='g'">
765                                                 <targetAudience>general</targetAudience>
766                                         </xsl:when>
767                                         <xsl:when test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
768                                                 <targetAudience>juvenile</targetAudience>
769                                         </xsl:when>
770                                         <xsl:when test="$controlField008-22='a'">
771                                                 <targetAudience>preschool</targetAudience>
772                                         </xsl:when>
773                                         <xsl:when test="$controlField008-22='f'">
774                                                 <targetAudience>specialized</targetAudience>
775                                         </xsl:when>
776                                 </xsl:choose>
777                         </xsl:if>
778
779                         <!-- Not in mapping but in conversion -->
780                         <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
781                                 <note type="statement of responsibility">
782                                         <xsl:value-of select="."/>
783                                 </note>
784                         </xsl:for-each>
785
786                         <xsl:for-each select="marc:datafield[@tag=500]">
787                                 <note>
788                                         <xsl:value-of select="marc:subfield[@code='a']"/>
789                                         <xsl:call-template name="uri"/>
790                                 </note>
791                         </xsl:for-each>
792
793                         <xsl:for-each select="marc:datafield[@tag=511]">
794                                 <note type="performers">
795                                         <xsl:call-template name="uri"/>
796                                         <xsl:value-of select="marc:subfield[@code='a']"/>
797                                 </note>
798                         </xsl:for-each>
799
800                         <xsl:for-each select="marc:datafield[@tag=518]">
801                                 <note type="venue">
802                                         <xsl:call-template name="uri"/>
803                                         <xsl:value-of select="marc:subfield[@code='a']"/>
804                                 </note>
805                         </xsl:for-each>
806
807                         <xsl:for-each select="marc:datafield[@tag=501 or @tag=502 or @tag=504 or @tag=506 or @tag=507 or @tag=508 or @tag=510 or @tag=513 or @tag=514 or @tag=515 or @tag=516 or @tag=522 or @tag=524 or @tag=525 or @tag=526 or @tag=530 or @tag=533 or @tag=534 or @tag=535 or @tag=536 or @tag=538 or @tag=540 or @tag=541 or @tag=544 or @tag=545 or @tag=546 or @tag=547 or @tag=550 or @tag=552 or @tag=555 or @tag=556 or @tag=561 or @tag=562 or @tag=565 or @tag=567 or @tag=580 or @tag=581 or @tag=583 or @tag=584 or @tag=585 or @tag=586]">
808                                 <note>
809                                         <xsl:call-template name="uri"/>
810                                         <xsl:variable name="str">
811                                                 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
812                                                         <xsl:value-of select="."/><xsl:text> </xsl:text>
813                                                 </xsl:for-each>
814                                         </xsl:variable>
815                                         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
816                                 </note>
817                         </xsl:for-each>
818
819                         <xsl:for-each select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
820                                 <cartographics>
821                                         <coordinates>
822                                                 <xsl:call-template name="subfieldSelect">
823                                                         <xsl:with-param name="codes">defg</xsl:with-param>
824                                                 </xsl:call-template>
825                                         </coordinates>
826                                 </cartographics>
827                         </xsl:for-each>
828
829                         <xsl:for-each select="marc:datafield[@tag=255]">
830                                 <cartographics>
831                                         <xsl:for-each select="marc:subfield[@code='c']">
832                                                 <coordinates>
833                                                         <xsl:value-of select="."/>
834                                                 </coordinates>
835                                         </xsl:for-each>
836                                         <xsl:for-each select="marc:subfield[@code='a']">
837                                                 <scale>
838                                                         <xsl:value-of select="."/>
839                                                 </scale>
840                                         </xsl:for-each>
841                                         <xsl:for-each select="marc:subfield[@code='b']">
842                                                 <projection>
843                                                         <xsl:value-of select="."/>
844                                                 </projection>   
845                                         </xsl:for-each>
846                                 </cartographics>
847                         </xsl:for-each>
848
849                         <xsl:apply-templates select="marc:datafield[653 >= @tag and @tag >= 600]"/>
850
851                         <xsl:for-each select="marc:datafield[@tag=752]">
852                                 <subject>
853                                         <hierarchicalGeographic>
854                                                 <xsl:for-each select="marc:subfield[@code='a']">
855                                                         <country>
856                                                                 <xsl:value-of select="."/>
857                                                         </country>
858                                                 </xsl:for-each>         
859                                                 <xsl:for-each select="marc:subfield[@code='b']">
860                                                         <state>
861                                                                 <xsl:value-of select="."/>
862                                                         </state>
863                                                 </xsl:for-each>         
864                                                 <xsl:for-each select="marc:subfield[@code='c']">
865                                                         <county>
866                                                                 <xsl:value-of select="."/>
867                                                         </county>
868                                                 </xsl:for-each>         
869                                                 <xsl:for-each select="marc:subfield[@code='d']">
870                                                         <city>
871                                                                 <xsl:value-of select="."/>
872                                                         </city>
873                                                 </xsl:for-each>         
874                                         </hierarchicalGeographic>
875                                 </subject>
876                         </xsl:for-each>
877
878                         <xsl:for-each select="marc:datafield[@tag=050]">
879                                 <xsl:for-each select="marc:subfield[@code='b']">
880                                         <classification authority="lcc">
881                                                 <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"/>
882                                                 <xsl:text> </xsl:text>
883                                                 <xsl:value-of select="text()"/>
884                                         </classification>
885                                 </xsl:for-each>
886                                 <xsl:for-each select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
887                                         <classification authority="lcc">
888                                                 <xsl:value-of select="text()"/>
889                                         </classification>
890                                 </xsl:for-each>
891                         </xsl:for-each>
892
893                         <xsl:for-each select="marc:datafield[@tag=082]">
894                                 <classification authority="ddc">
895                                         <xsl:if test="marc:subfield[@code='2']">
896                                                 <xsl:attribute name="edition">
897                                                         <xsl:value-of select="marc:subfield[@code='2']"/>
898                                                 </xsl:attribute>
899                                         </xsl:if>
900                                         <xsl:call-template name="subfieldSelect">
901                                                 <xsl:with-param name="codes">ab</xsl:with-param>
902                                         </xsl:call-template>
903                                 </classification>
904                         </xsl:for-each>
905
906                         <xsl:for-each select="marc:datafield[@tag=080]">
907                                 <classification authority="udc">
908                                         <xsl:call-template name="subfieldSelect">
909                                                 <xsl:with-param name="codes">abx</xsl:with-param>
910                                         </xsl:call-template>
911                                 </classification>
912                         </xsl:for-each>
913
914                         <xsl:for-each select="marc:datafield[@tag=060]">
915                                 <classification authority="nlm">
916                                         <xsl:call-template name="subfieldSelect">
917                                                 <xsl:with-param name="codes">ab</xsl:with-param>
918                                         </xsl:call-template>
919                                 </classification>
920                         </xsl:for-each>
921
922                         <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
923                                 <classification authority="sudocs">
924                                         <xsl:value-of select="marc:subfield[@code='a']"/>
925                                 </classification>
926                         </xsl:for-each>
927
928                         <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
929                                 <classification authority="candoc">
930                                         <xsl:value-of select="marc:subfield[@code='a']"/>
931                                 </classification>
932                         </xsl:for-each>
933
934                         <xsl:for-each select="marc:datafield[@tag=086]">
935                                 <classification>
936                                         <xsl:attribute name="authority">
937                                                 <xsl:value-of select="marc:subfield[@code='2']"/>
938                                         </xsl:attribute>                                                
939                                         <xsl:value-of select="marc:subfield[@code='a']"/>
940                                 </classification>
941                         </xsl:for-each>
942
943                         <xsl:for-each select="marc:datafield[@tag=084]">
944                                 <classification>
945                                         <xsl:attribute name="authority">
946                                                 <xsl:value-of select="marc:subfield[@code='2']"/>
947                                         </xsl:attribute>
948                                         <xsl:call-template name="subfieldSelect">
949                                                 <xsl:with-param name="codes">ab</xsl:with-param>
950                                         </xsl:call-template>
951                                 </classification>
952                         </xsl:for-each>
953
954                         <xsl:for-each select="marc:datafield[@tag=440]">
955                                 <relatedItem type="series">
956                                         <titleInfo>
957                                                 <title>
958                                                         <xsl:call-template name="subfieldSelect">
959                                                                 <xsl:with-param name="codes">av</xsl:with-param>
960                                                         </xsl:call-template>
961                                                         <xsl:call-template name="part"/>
962                                                 </title>
963                                         </titleInfo>
964                                 </relatedItem>  
965                         </xsl:for-each>
966
967                         <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
968                                 <relatedItem type="series">
969                                         <titleInfo>
970                                                 <title>
971                                                         <xsl:call-template name="subfieldSelect">
972                                                                 <xsl:with-param name="codes">av</xsl:with-param>
973                                                         </xsl:call-template>
974                                                         <xsl:call-template name="part"/>
975                                                 </title>
976                                         </titleInfo>
977                                 </relatedItem>  
978                         </xsl:for-each>
979
980                         <xsl:for-each select="marc:datafield[@tag=534]">
981                                 <relatedItem type="original">
982                                         <xsl:call-template name="relatedTitle"/>
983                                         <xsl:call-template name="relatedName"/>
984                                         <xsl:call-template name="relatedIdentifierISSN"/>
985                                         <xsl:for-each select="marc:subfield[@code='z']">
986                                                 <identifier type="isbn">
987                                                         <xsl:value-of select="."/>
988                                                 </identifier>
989                                         </xsl:for-each>
990                                         <xsl:call-template name="relatedNote"/>
991                                 </relatedItem>  
992                         </xsl:for-each>
993
994                         <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
995                                 <relatedItem>
996                                         <xsl:call-template name="constituentOrRelatedType"/>
997                                         <titleInfo>
998                                                 <title>
999                                                         <xsl:call-template name="specialSubfieldSelect">
1000                                                                 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1001                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1002                                                                 <xsl:with-param name="afterCodes">g</xsl:with-param>
1003                                                         </xsl:call-template>
1004                                                 </title>
1005                                                 <xsl:call-template name="part"/>
1006                                         </titleInfo>
1007                                         <name type="personal">
1008                                                 <namePart>
1009                                                         <xsl:call-template name="specialSubfieldSelect">
1010                                                                 <xsl:with-param name="anyCodes">abcq</xsl:with-param>
1011                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1012                                                                 <xsl:with-param name="beforeCodes">g</xsl:with-param>
1013                                                         </xsl:call-template>                                                    
1014                                                 </namePart>
1015                                                 <xsl:call-template name="nameDate"/>
1016                                                 <xsl:for-each select="marc:subfield[@code='e']">
1017                                                         <role>
1018                                                                 <xsl:value-of select="."/>
1019                                                         </role>
1020                                                 </xsl:for-each>
1021                                         </name>
1022                                         <xsl:call-template name="relatedForm"/>
1023                                         <xsl:call-template name="relatedIdentifierISSN"/>
1024                                 </relatedItem>
1025                         </xsl:for-each>
1026
1027                         <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
1028                                 <relatedItem>
1029                                         <xsl:call-template name="constituentOrRelatedType"/>
1030                                         <titleInfo>
1031                                                 <title>
1032                                                         <xsl:call-template name="specialSubfieldSelect">
1033                                                                 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1034                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1035                                                                 <xsl:with-param name="afterCodes">dg</xsl:with-param>
1036                                                         </xsl:call-template>
1037                                                 </title>
1038                                                 <xsl:call-template name="relatedPart"/>
1039                                         </titleInfo>
1040                                         <name type="corporate">
1041                                                 <xsl:for-each select="marc:subfield[@code='a']">
1042                                                         <namePart>
1043                                                                 <xsl:value-of select="."/>
1044                                                         </namePart>
1045                                                 </xsl:for-each>
1046                                                 <xsl:for-each select="marc:subfield[@code='b']">
1047                                                         <namePart>
1048                                                                 <xsl:value-of select="."/>
1049                                                         </namePart>
1050                                                 </xsl:for-each>
1051                                                 <xsl:variable name="tempNamePart">
1052                                                         <xsl:call-template name="specialSubfieldSelect">
1053                                                                 <xsl:with-param name="anyCodes">c</xsl:with-param>
1054                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1055                                                                 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1056                                                         </xsl:call-template>                                                    
1057                                                 </xsl:variable>
1058                                                 <xsl:if test="normalize-space($tempNamePart)">
1059                                                         <namePart>
1060                                                                 <xsl:value-of select="$tempNamePart"/>
1061                                                         </namePart>
1062                                                 </xsl:if>
1063                                                 <xsl:for-each select="marc:subfield[@code='e']">
1064                                                         <role>
1065                                                                 <xsl:value-of select="."/>
1066                                                         </role>
1067                                                 </xsl:for-each>
1068                                         </name>
1069                                         <xsl:call-template name="relatedForm"/>
1070                                         <xsl:call-template name="relatedIdentifierISSN"/>
1071                                 </relatedItem>
1072                         </xsl:for-each>
1073
1074                         <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
1075                                 <relatedItem>
1076                                         <xsl:call-template name="constituentOrRelatedType"/>
1077                                         <titleInfo>
1078                                                 <title>
1079                                                         <xsl:call-template name="specialSubfieldSelect">
1080                                                                 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1081                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1082                                                                 <xsl:with-param name="afterCodes">g</xsl:with-param>
1083                                                         </xsl:call-template>
1084                                                 </title>
1085                                                 <xsl:call-template name="relatedPart"/>
1086                                         </titleInfo>
1087                                         <name type="conference">
1088                                                 <namePart>
1089                                                         <xsl:call-template name="specialSubfieldSelect">
1090                                                                 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1091                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1092                                                                 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1093                                                         </xsl:call-template>                                                    
1094                                                 </namePart>
1095                                         </name>
1096                                         <xsl:call-template name="relatedForm"/>
1097                                         <xsl:call-template name="relatedIdentifierISSN"/>
1098                                 </relatedItem>
1099                         </xsl:for-each>
1100
1101                         <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
1102                                 <relatedItem>
1103                                         <xsl:call-template name="constituentOrRelatedType"/>
1104                                         <titleInfo>
1105                                                 <title>
1106                                                         <xsl:call-template name="subfieldSelect">
1107                                                                 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1108                                                         </xsl:call-template>
1109                                                 </title>
1110                                                 <xsl:call-template name="part"/>
1111                                         </titleInfo>
1112                                         <xsl:call-template name="relatedForm"/>
1113                                         <xsl:call-template name="relatedIdentifierISSN"/>
1114                                 </relatedItem>
1115                         </xsl:for-each>
1116
1117                         <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
1118                                 <relatedItem>
1119                                         <xsl:call-template name="constituentOrRelatedType"/>
1120                                         <titleInfo>
1121                                                 <title>                                 
1122                                                         <xsl:value-of select="marc:subfield[@code='a']"/>
1123                                                 </title>
1124                                                 <xsl:call-template name="part"/>
1125                                         </titleInfo>
1126                                         <xsl:call-template name="relatedForm"/>
1127                                 </relatedItem>
1128                         </xsl:for-each>
1129
1130                         <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
1131                                 <relatedItem type="series">
1132                                         <xsl:call-template name="relatedItem76X-78X"/>
1133                                 </relatedItem>  
1134                         </xsl:for-each>
1135
1136                         <xsl:for-each select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=775]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
1137                                 <relatedItem type="related">
1138                                         <xsl:call-template name="relatedItem76X-78X"/>
1139                                 </relatedItem>  
1140                         </xsl:for-each>
1141
1142                         <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
1143                                 <relatedItem type="constituent">
1144                                         <xsl:call-template name="relatedItem76X-78X"/>
1145                                 </relatedItem>  
1146                         </xsl:for-each>
1147
1148                         <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
1149                                 <relatedItem type="host">
1150                                         <xsl:call-template name="relatedItem76X-78X"/>
1151                                 </relatedItem>  
1152                         </xsl:for-each>
1153
1154                         <xsl:for-each select="marc:datafield[@tag=776]">
1155                                 <relatedItem type="reproduction">
1156                                         <xsl:call-template name="relatedItem76X-78X"/>
1157                                 </relatedItem>  
1158                         </xsl:for-each>
1159
1160                         <xsl:for-each select="marc:datafield[@tag=780]">
1161                                 <relatedItem type="preceding">
1162                                         <xsl:call-template name="relatedItem76X-78X"/>
1163                                 </relatedItem>  
1164                         </xsl:for-each>
1165
1166                         <xsl:for-each select="marc:datafield[@tag=785]">
1167                                 <relatedItem type="succeeding">
1168                                         <xsl:call-template name="relatedItem76X-78X"/>
1169                                 </relatedItem>  
1170                         </xsl:for-each>
1171
1172                         <xsl:for-each select="marc:datafield[@tag=786]">
1173                                 <relatedItem type="original">
1174                                         <xsl:call-template name="relatedItem76X-78X"/>
1175                                 </relatedItem>  
1176                         </xsl:for-each>
1177
1178                         <xsl:for-each select="marc:datafield[@tag=800]">
1179                                 <relatedItem type="series">
1180                                         <titleInfo>
1181                                                 <title>
1182                                                         <xsl:call-template name="specialSubfieldSelect">
1183                                                                 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1184                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1185                                                                 <xsl:with-param name="afterCodes">g</xsl:with-param>
1186                                                         </xsl:call-template>
1187                                                 </title>
1188                                                 <xsl:call-template name="part"/>
1189                                         </titleInfo>
1190                                         <name type="personal">
1191                                                 <namePart>
1192                                                         <xsl:call-template name="chopPunctuation">
1193                                                                 <xsl:with-param name="chopString">
1194                                                                         <xsl:call-template name="specialSubfieldSelect">
1195                                                                                 <xsl:with-param name="anyCodes">abcq</xsl:with-param>
1196                                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1197                                                                                 <xsl:with-param name="beforeCodes">g</xsl:with-param>
1198                                                                         </xsl:call-template>
1199                                                                 </xsl:with-param>
1200                                                         </xsl:call-template>
1201                                                 </namePart>
1202                                                 <xsl:call-template name="nameDate"/>
1203                                                 <xsl:for-each select="marc:subfield[@code='e']">
1204                                                         <role>
1205                                                                 <xsl:value-of select="."/>
1206                                                         </role>
1207                                                 </xsl:for-each>
1208                                         </name>
1209                                         <xsl:call-template name="relatedForm"/>
1210                                 </relatedItem>
1211                         </xsl:for-each>
1212
1213                         <xsl:for-each select="marc:datafield[@tag=810]">
1214                                 <relatedItem type="series">
1215                                         <titleInfo>
1216                                                 <title>
1217                                                         <xsl:call-template name="specialSubfieldSelect">
1218                                                                 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1219                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1220                                                                 <xsl:with-param name="afterCodes">dg</xsl:with-param>
1221                                                         </xsl:call-template>
1222                                                 </title>
1223                                                 <xsl:call-template name="relatedPart"/>
1224                                         </titleInfo>
1225                                         <name type="corporate">
1226                                                 <xsl:for-each select="marc:subfield[@code='a']">
1227                                                         <namePart>
1228                                                                 <xsl:value-of select="."/>
1229                                                         </namePart>
1230                                                 </xsl:for-each>
1231                                                 <xsl:for-each select="marc:subfield[@code='b']">
1232                                                         <namePart>
1233                                                                 <xsl:value-of select="."/>
1234                                                         </namePart>
1235                                                 </xsl:for-each>
1236                                                 <namePart>
1237                                                         <xsl:call-template name="specialSubfieldSelect">
1238                                                                 <xsl:with-param name="anyCodes">c</xsl:with-param>
1239                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1240                                                                 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1241                                                         </xsl:call-template>                                                    
1242                                                 </namePart>
1243                                                 <xsl:for-each select="marc:subfield[@code='e']">
1244                                                         <role>
1245                                                                 <xsl:value-of select="."/>
1246                                                         </role>
1247                                                 </xsl:for-each>
1248                                         </name>
1249                                         <xsl:call-template name="relatedForm"/>
1250                                 </relatedItem>  
1251                         </xsl:for-each>
1252
1253                         <xsl:for-each select="marc:datafield[@tag=811]">
1254                                 <relatedItem type="series">
1255                                         <titleInfo>
1256                                                 <title>
1257                                                         <xsl:call-template name="specialSubfieldSelect">
1258                                                                 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1259                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1260                                                                 <xsl:with-param name="afterCodes">g</xsl:with-param>
1261                                                         </xsl:call-template>
1262                                                 </title>
1263                                                 <xsl:call-template name="relatedPart"/>
1264                                         </titleInfo>
1265                                         <name type="conference">
1266                                                 <namePart>
1267                                                         <xsl:call-template name="specialSubfieldSelect">
1268                                                                 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1269                                                                 <xsl:with-param name="axis">t</xsl:with-param>
1270                                                                 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1271                                                         </xsl:call-template>                                                    
1272                                                 </namePart>
1273                                         </name>
1274                                         <xsl:call-template name="relatedForm"/>
1275                                 </relatedItem>  
1276                         </xsl:for-each>
1277
1278                         <xsl:for-each select="marc:datafield[@tag=830]">
1279                                 <relatedItem type="series">
1280                                         <titleInfo>
1281                                                 <title>
1282                                                         <xsl:call-template name="subfieldSelect">
1283                                                                 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1284                                                         </xsl:call-template>
1285                                                 </title>
1286                                                 <xsl:call-template name="part"/>
1287                                         </titleInfo>
1288                                         <xsl:call-template name="relatedForm"/>
1289                                 </relatedItem>  
1290                         </xsl:for-each>
1291
1292                         <xsl:for-each select="marc:datafield[@tag=856][@ind2=2]/marc:subfield[@code='q']">
1293                                 <relatedItem>
1294                                         <internetMediaType>
1295                                                 <xsl:value-of select="."/>
1296                                         </internetMediaType>
1297                                 </relatedItem>  
1298                         </xsl:for-each>
1299
1300                         <xsl:for-each select="marc:datafield[@tag=020]/marc:subfield[@code='a']">
1301                                 <identifier type="isbn">
1302                                         <xsl:value-of select="."/>
1303                                 </identifier>
1304                         </xsl:for-each>
1305
1306                         <xsl:for-each select="marc:datafield[@tag=024][@ind1=0]/marc:subfield[@code='a']">
1307                                 <identifier type="isrc">
1308                                         <xsl:value-of select="."/>
1309                                 </identifier>
1310                         </xsl:for-each>
1311
1312                         <xsl:for-each select="marc:datafield[@tag=024][@ind1=2]/marc:subfield[@code='a']">
1313                                 <identifier type="ismn">
1314                                         <xsl:value-of select="."/>
1315                                 </identifier>
1316                         </xsl:for-each>
1317
1318                         <xsl:for-each select="marc:datafield[@tag=022]/marc:subfield[@code='a']">
1319                                 <identifier type="issn">
1320                                         <xsl:value-of select="."/>
1321                                 </identifier>
1322                         </xsl:for-each>
1323
1324                         <xsl:for-each select="marc:datafield[@tag=010]/marc:subfield[@code='a']">
1325                                 <identifier type="lccn">
1326                                         <xsl:value-of select="normalize-space(text())"/>
1327                                 </identifier>
1328                         </xsl:for-each>
1329
1330                         <xsl:for-each select="marc:datafield[@tag=028]">
1331                                 <identifier>
1332                                         <xsl:attribute name="type">
1333                                                 <xsl:choose>
1334                                                         <xsl:when test="@ind1=0">issue number</xsl:when>
1335                                                         <xsl:when test="@ind1=1">matrix number</xsl:when>
1336                                                         <xsl:when test="@ind1=2">music plate</xsl:when>
1337                                                         <xsl:when test="@ind1=3">music publisher</xsl:when>
1338                                                         <xsl:when test="@ind1=4">videorecording identifier</xsl:when>
1339                                                 </xsl:choose>
1340                                         </xsl:attribute>
1341                                         <xsl:call-template name="subfieldSelect">
1342                                                 <xsl:with-param name="codes">ab</xsl:with-param>
1343                                         </xsl:call-template>
1344                                 </identifier>
1345                         </xsl:for-each>
1346                 
1347                         <xsl:for-each select="marc:datafield[@tag=024][@ind1=4]">
1348                                 <identifier type="sici">
1349                                         <xsl:call-template name="subfieldSelect">
1350                                                 <xsl:with-param name="codes">ab</xsl:with-param>
1351                                         </xsl:call-template>
1352                                 </identifier>
1353                         </xsl:for-each>
1354
1355                         <xsl:for-each select="marc:datafield[@tag=856]/marc:subfield[@code='u']">
1356                                 <identifier>
1357                                         <xsl:attribute name="type">
1358                                                 <xsl:choose>
1359                                                         <xsl:when test="starts-with(.,'urn:doi') or starts-with(.,'doi:')">doi</xsl:when>
1360                                                         <xsl:otherwise>uri</xsl:otherwise>
1361                                                 </xsl:choose>
1362                                         </xsl:attribute>
1363                                         <xsl:value-of select="."/>
1364                                 </identifier>
1365                         </xsl:for-each>
1366
1367                         <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]/marc:subfield[@code='a']">
1368                                 <identifier type="upc">
1369                                         <xsl:value-of select="."/>
1370                                 </identifier>
1371                         </xsl:for-each>
1372
1373                         <xsl:for-each select="marc:datafield[@tag=852]">
1374                                 <location>
1375                                         <xsl:call-template name="subfieldSelect">
1376                                                 <xsl:with-param name="codes">abj</xsl:with-param>
1377                                         </xsl:call-template>
1378                                 </location>
1379                         </xsl:for-each>
1380
1381                         <xsl:for-each select="marc:datafield[@tag=506]">
1382                                 <accessCondition type="restrictionOnAccess">
1383                                         <xsl:call-template name="subfieldSelect">
1384                                                 <xsl:with-param name="codes">abcd35</xsl:with-param>
1385                                         </xsl:call-template>
1386                                 </accessCondition>
1387                         </xsl:for-each>
1388
1389                         <xsl:for-each select="marc:datafield[@tag=540]">
1390                                 <accessCondition type="useAndReproduction">
1391                                         <xsl:call-template name="subfieldSelect">
1392                                                 <xsl:with-param name="codes">abcde35</xsl:with-param>
1393                                         </xsl:call-template>
1394                                 </accessCondition>
1395                         </xsl:for-each>
1396
1397                         <recordInfo>
1398                                 <xsl:for-each select="marc:datafield[@tag=040]">
1399                                         <recordContentSource>
1400                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1401                                         </recordContentSource>
1402                                 </xsl:for-each>
1403
1404                                 <xsl:for-each select="marc:controlfield[@tag=008]">
1405                                         <recordCreationDate encoding="marc">
1406                                                 <xsl:value-of select="substring(.,1,6)"/>
1407                                         </recordCreationDate>
1408                                 </xsl:for-each>         
1409                         
1410                                 <xsl:for-each select="marc:controlfield[@tag=005]">
1411                                         <recordChangeDate encoding="iso8601">
1412                                                 <xsl:value-of select="."/>
1413                                         </recordChangeDate>
1414                                 </xsl:for-each>
1415                                 <xsl:for-each select="marc:datafield[@tag=999]">
1416                                         <recordIdentifier>
1417                                                 <xsl:value-of select="marc:subfield[@code='c']"/>
1418                                         </recordIdentifier>
1419                                 </xsl:for-each>
1420 <!--
1421                                 <xsl:for-each select="marc:controlfield[@tag=001]">
1422                                         <recordIdentifier>
1423                                                 <xsl:if test="../marc:controlfield[@tag=003]">
1424                                                         <xsl:attribute name="source">
1425                                                                 <xsl:value-of select="../marc:controlfield[@tag=003]"/>
1426                                                         </xsl:attribute>
1427                                                 </xsl:if>
1428                                                 <xsl:value-of select="."/>
1429                                         </recordIdentifier>
1430                                 </xsl:for-each>
1431 -->
1432                         </recordInfo>
1433                 </mods>
1434         </xsl:template>
1435
1436         <xsl:template name="displayForm">
1437                 <xsl:for-each select="marc:subfield[@code='c']">
1438                         <displayForm>
1439                                 <xsl:value-of select="."/>
1440                         </displayForm>
1441                 </xsl:for-each>
1442         </xsl:template>
1443
1444         <xsl:template name="affiliation">
1445                 <xsl:for-each select="marc:subfield[@code='u']">
1446                         <affiliation>
1447                                 <xsl:value-of select="."/>
1448                         </affiliation>
1449                 </xsl:for-each>
1450         </xsl:template>
1451
1452         <xsl:template name="uri">
1453                 <xsl:for-each select="marc:subfield[@code='u']">
1454                         <xsl:attribute name="xlink:href">
1455                                 <xsl:value-of select="."/>
1456                         </xsl:attribute>
1457                 </xsl:for-each>
1458         </xsl:template>
1459
1460         <xsl:template name="role">
1461                 <xsl:choose>
1462                         <xsl:when test="marc:subfield[@code='e']">
1463                                 <role><xsl:value-of select="marc:subfield[@code='e']"/></role>
1464                         </xsl:when>
1465                         <xsl:when test="marc:subfield[@code='4']">
1466                                 <xsl:for-each select="marc:subfield[@code='4']">
1467                                         <role><xsl:value-of select="text()"/></role>
1468                                 </xsl:for-each>
1469                         </xsl:when>
1470                 </xsl:choose>
1471         </xsl:template>
1472
1473         <xsl:template name="part">
1474                 <xsl:variable name="partNumber">
1475                         <xsl:call-template name="specialSubfieldSelect">
1476                                 <xsl:with-param name="axis">n</xsl:with-param>
1477                                 <xsl:with-param name="anyCodes">n</xsl:with-param>
1478                                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
1479                         </xsl:call-template>
1480                 </xsl:variable>
1481                 <xsl:variable name="partName">
1482                         <xsl:call-template name="specialSubfieldSelect">
1483                                 <xsl:with-param name="axis">p</xsl:with-param>
1484                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
1485                                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
1486                         </xsl:call-template>
1487                 </xsl:variable>
1488                 <xsl:if test="string-length(normalize-space($partNumber))">
1489                         <partNumber>
1490                                 <xsl:value-of select="$partNumber"/>
1491                         </partNumber>
1492                 </xsl:if>
1493                 <xsl:if test="string-length(normalize-space($partName))">
1494                         <partName>
1495                                 <xsl:value-of select="$partName"/>
1496                         </partName>
1497                 </xsl:if>
1498         </xsl:template>
1499
1500         <xsl:template name="relatedPart">
1501                 <xsl:for-each select="marc:subfield[@code='n'][preceding-sibling::marc:subfield[@code='t']]">
1502                         <partNumber>
1503                                 <xsl:value-of select="."/>
1504                         </partNumber>
1505                 </xsl:for-each>
1506                 <xsl:for-each select="marc:subfield[@code='p']">
1507                         <partName>
1508                                 <xsl:value-of select="."/>
1509                         </partName>
1510                 </xsl:for-each>
1511         </xsl:template>
1512
1513         <xsl:template name="relatedName">
1514                 <xsl:for-each select="marc:subfield[@code='a']">
1515                         <name>
1516                                 <namePart>
1517                                         <xsl:value-of select="."/>
1518                                 </namePart>
1519                         </name>
1520                 </xsl:for-each>
1521         </xsl:template>
1522
1523         <xsl:template name="relatedForm">
1524                 <xsl:for-each select="marc:subfield[@code='h']">
1525                         <physicalDescription>
1526                                 <form>
1527                                         <unControlled>
1528                                                 <xsl:value-of select="."/>
1529                                         </unControlled>
1530                                 </form>
1531                         </physicalDescription>
1532                 </xsl:for-each>
1533         </xsl:template>
1534
1535         <xsl:template name="relatedExtent">
1536                 <xsl:for-each select="marc:subfield[@code='h']">
1537                         <physicalDescription>
1538                                 <extent>
1539                                         <xsl:value-of select="."/>
1540                                 </extent>
1541                         </physicalDescription>
1542                 </xsl:for-each>
1543         </xsl:template>
1544
1545         <xsl:template name="relatedNote">
1546                 <xsl:for-each select="marc:subfield[@code='n']">
1547                         <note>
1548                                 <xsl:value-of select="."/>
1549                         </note>
1550                 </xsl:for-each>
1551         </xsl:template>
1552
1553         <xsl:template name="relatedIdentifierISSN">
1554                 <xsl:for-each select="marc:subfield[@code='x']">
1555                         <identifier type="issn">
1556                                 <xsl:value-of select="."/>
1557                         </identifier>
1558                 </xsl:for-each>
1559         </xsl:template>
1560
1561         <xsl:template name="relatedIdentifierLocal">
1562                 <xsl:for-each select="marc:subfield[@code='w']">
1563                         <identifier type="local">
1564                                 <xsl:value-of select="."/>
1565                         </identifier>
1566                 </xsl:for-each>
1567         </xsl:template>
1568
1569         <xsl:template name="relatedIdentifier">
1570                 <xsl:for-each select="marc:subfield[@code='o']">
1571                         <identifier>
1572                                 <xsl:value-of select="."/>
1573                         </identifier>
1574                 </xsl:for-each>
1575         </xsl:template>
1576
1577         <xsl:template name="relatedItem76X-78X">
1578                 <xsl:call-template name="relatedTitle76X-78X"/>
1579                 <xsl:call-template name="relatedName"/>
1580                 <xsl:call-template name="relatedExtent"/>
1581                 <xsl:call-template name="relatedIdentifier"/>
1582                 <xsl:call-template name="relatedIdentifierISSN"/>
1583                 <xsl:call-template name="relatedIdentifierLocal"/>
1584                 <xsl:call-template name="relatedNote"/>
1585         </xsl:template>
1586
1587         <xsl:template name="subjectGeographicZ">
1588                 <geographic>
1589                         <xsl:value-of select="."/>
1590                 </geographic>                   
1591         </xsl:template>
1592
1593         <xsl:template name="subjectTemporalY">
1594                 <temporal>
1595                         <xsl:value-of select="."/>
1596                 </temporal>                     
1597         </xsl:template>
1598
1599         <xsl:template name="subjectTopic">
1600                 <topic>
1601                         <xsl:call-template name="chopPunctuation">
1602                                 <xsl:with-param name="chopString" select="."/>
1603                         </xsl:call-template>
1604                 </topic>
1605         </xsl:template>
1606
1607         <xsl:template name="nameABCDN">
1608                 <xsl:for-each select="marc:subfield[@code='a']">
1609                         <namePart>
1610                                 <xsl:call-template name="chopPunctuation">
1611                                         <xsl:with-param name="chopString" select="."/>
1612                                 </xsl:call-template>
1613                         </namePart>                                     
1614                 </xsl:for-each>
1615                 <xsl:for-each select="marc:subfield[@code='b']">
1616                         <namePart>
1617                                 <xsl:value-of select="."/>
1618                         </namePart>                                     
1619                 </xsl:for-each>
1620                 <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
1621                         <namePart>
1622                                 <xsl:call-template name="subfieldSelect">
1623                                         <xsl:with-param name="codes">cdn</xsl:with-param>
1624                                 </xsl:call-template>
1625                         </namePart>
1626                 </xsl:if>
1627         </xsl:template>
1628
1629         <xsl:template name="nameABCDQ">
1630                 <namePart>
1631                         <xsl:call-template name="chopPunctuation">
1632                                 <xsl:with-param name="chopString">
1633                                         <xsl:call-template name="subfieldSelect">
1634                                                 <xsl:with-param name="codes">abcq</xsl:with-param>
1635                                         </xsl:call-template>
1636                                 </xsl:with-param>
1637                         </xsl:call-template>
1638                 </namePart>
1639                 <xsl:call-template name="nameDate"/>
1640         </xsl:template>
1641
1642         <xsl:template name="nameACDEQ">
1643                 <namePart>
1644                         <xsl:call-template name="subfieldSelect">
1645                                 <xsl:with-param name="codes">acdeq</xsl:with-param>
1646                         </xsl:call-template>
1647                 </namePart>
1648         </xsl:template>
1649
1650         <xsl:template name="constituentOrRelatedType">
1651                 <xsl:attribute name="type">
1652                         <xsl:choose>
1653                                 <xsl:when test="@ind2=2">constituent</xsl:when>
1654                                 <xsl:otherwise>related</xsl:otherwise>
1655                         </xsl:choose>
1656                 </xsl:attribute>
1657         </xsl:template>
1658
1659         <xsl:template name="relatedTitle">
1660                 <xsl:for-each select="marc:subfield[@code='t']">
1661                         <titleInfo>
1662                                 <title>
1663                                         <xsl:value-of select="."/>
1664                                 </title>
1665                         </titleInfo>
1666                 </xsl:for-each>
1667         </xsl:template>
1668
1669         <xsl:template name="relatedTitle76X-78X">
1670                 <titleInfo>
1671                         <xsl:for-each select="marc:subfield[@code='t']">
1672                                 <title>
1673                                         <xsl:value-of select="."/>
1674                                 </title>
1675                         </xsl:for-each>
1676                         <xsl:for-each select="marc:subfield[@code='g']">
1677                                 <partNumber>
1678                                         <xsl:value-of select="."/>
1679                                 </partNumber>
1680                         </xsl:for-each>
1681                 </titleInfo>
1682         </xsl:template>
1683
1684         <xsl:template name="nameDate">
1685                 <xsl:for-each select="marc:subfield[@code='d']">
1686                         <namePart type="date">
1687                                 <xsl:call-template name="chopPunctuation">
1688                                         <xsl:with-param name="chopString" select="."/>
1689                                 </xsl:call-template>
1690                         </namePart>
1691                 </xsl:for-each>
1692         </xsl:template>
1693
1694         <xsl:template name="subjectAuthority">
1695                 <xsl:attribute name="authority">
1696                         <xsl:choose>
1697                         <xsl:when test="@ind2=0">lcsh</xsl:when>
1698                         <xsl:when test="@ind2=1">lcshac</xsl:when>
1699                         <xsl:when test="@ind2=2">mesh</xsl:when>
1700                         <xsl:when test="@ind2=3">csh</xsl:when>
1701                         <xsl:when test="@ind2=5">nal</xsl:when>
1702                         <xsl:when test="@ind2=6">rvm</xsl:when>
1703                         <xsl:when test="@ind2=7"><xsl:value-of select="marc:subfield[@code='2']"/></xsl:when>
1704                         </xsl:choose>
1705                 </xsl:attribute>
1706         </xsl:template>
1707
1708         <xsl:template name="subjectAnyOrder">
1709                 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
1710                         <xsl:choose>
1711                                 <xsl:when test="@code='v'">
1712                                         <xsl:call-template name="subjectTopic"/>
1713                                 </xsl:when>
1714                                 <xsl:when test="@code='x'">
1715                                         <xsl:call-template name="subjectTopic"/>
1716                                 </xsl:when>
1717                                 <xsl:when test="@code='y'">
1718                                         <xsl:call-template name="subjectTemporalY"/>
1719                                 </xsl:when>
1720                                 <xsl:when test="@code='z'">
1721                                         <xsl:call-template name="subjectGeographicZ"/>
1722                                 </xsl:when>
1723                         </xsl:choose>
1724                 </xsl:for-each>
1725         </xsl:template>
1726
1727 <!--    <xsl:template name="subfieldSelect">
1728                 <xsl:param name="codes"/>
1729                 <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
1730                 <xsl:variable name="str">
1731                         <xsl:for-each select="marc:subfield">
1732                                 <xsl:if test="contains($codes, @code)">
1733                                         <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
1734                                 </xsl:if>
1735                         </xsl:for-each>
1736                 </xsl:variable>
1737                 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
1738         </xsl:template>
1739 -->
1740
1741         <xsl:template name="specialSubfieldSelect">
1742                 <xsl:param name="anyCodes"/>
1743                 <xsl:param name="axis"/>
1744                 <xsl:param name="beforeCodes"/>
1745                 <xsl:param name="afterCodes"/>
1746                 <xsl:variable name="str">
1747                         <xsl:for-each select="marc:subfield">
1748                                 <xsl:if test="contains($anyCodes, @code) or (contains($beforeCodes,@code) and following-sibling::marc:subfield[@code=$axis]) or (contains($afterCodes,@code) and preceding-sibling::marc:subfield[@code=$axis])">
1749                                         <xsl:value-of select="text()"/><xsl:text> </xsl:text>
1750                                 </xsl:if>
1751                         </xsl:for-each>
1752                 </xsl:variable>
1753                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1754         </xsl:template>
1755
1756         <xsl:template match="marc:datafield[@tag=600]">
1757                 <subject>
1758                         <xsl:call-template name="subjectAuthority"/>
1759                         <name type="personal">
1760                                 <namePart>
1761                                         <xsl:call-template name="chopPunctuation">
1762                                                 <xsl:with-param name="chopString">
1763                                                         <xsl:call-template name="subfieldSelect">
1764                                                                 <xsl:with-param name="codes">abcq</xsl:with-param>
1765                                                         </xsl:call-template>
1766                                                 </xsl:with-param>
1767                                         </xsl:call-template>
1768                                 </namePart>
1769                                 <xsl:call-template name="nameDate"/>
1770                                 <xsl:call-template name="affiliation"/>
1771                                 <xsl:call-template name="role"/>
1772                         </name>
1773                         <xsl:call-template name="subjectAnyOrder"/>
1774                 </subject>
1775         </xsl:template>
1776
1777         <xsl:template match="marc:datafield[@tag=610]">
1778                 <subject>
1779                         <xsl:call-template name="subjectAuthority"/>
1780                         <name type="corporate">
1781                                 <xsl:for-each select="marc:subfield[@code='a']">
1782                                         <namePart>
1783                                                 <xsl:value-of select="."/>
1784                                         </namePart>
1785                                 </xsl:for-each>
1786                                 <xsl:for-each select="marc:subfield[@code='b']">
1787                                         <namePart>
1788                                                 <xsl:value-of select="."/>
1789                                         </namePart>
1790                                 </xsl:for-each>
1791                                 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
1792                                         <namePart>
1793                                                 <xsl:call-template name="subfieldSelect">
1794                                                         <xsl:with-param name="codes">cdnp</xsl:with-param>
1795                                                 </xsl:call-template>
1796                                         </namePart>
1797                                 </xsl:if>
1798                                 <xsl:call-template name="role"/>
1799                         </name>
1800                         <xsl:call-template name="subjectAnyOrder"/>
1801                 </subject>
1802         </xsl:template>
1803
1804         <xsl:template match="marc:datafield[@tag=611]">
1805                 <subject>
1806                         <xsl:call-template name="subjectAuthority"/>
1807                         <name type="conference">
1808                                 <namePart>
1809                                         <xsl:call-template name="subfieldSelect">
1810                                                 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
1811                                         </xsl:call-template>
1812                                 </namePart>
1813                                 <xsl:for-each select="marc:subfield[@code='4']">
1814                                         <role>
1815                                                 <xsl:value-of select="."/>
1816                                         </role>
1817                                 </xsl:for-each>
1818                         </name>
1819                         <xsl:call-template name="subjectAnyOrder"/>
1820                 </subject>
1821         </xsl:template>
1822
1823         <xsl:template match="marc:datafield[@tag=630]">
1824                 <subject>
1825                         <xsl:call-template name="subjectAuthority"/>
1826                         <titleInfo>
1827                                 <title>
1828                                         <xsl:call-template name="subfieldSelect">
1829                                                 <xsl:with-param name="codes">adfhklor</xsl:with-param>
1830                                         </xsl:call-template>
1831                                         <xsl:call-template name="part"/>                        
1832                                 </title>
1833                         </titleInfo>
1834                         <xsl:call-template name="subjectAnyOrder"/>
1835                 </subject>
1836         </xsl:template>
1837
1838         <xsl:template match="marc:datafield[@tag=650]">
1839                 <subject>
1840                         <xsl:call-template name="subjectAuthority"/>
1841                         <topic>
1842                                 <xsl:call-template name="chopPunctuation">
1843                                         <xsl:with-param name="chopString">
1844                                                 <xsl:call-template name="subfieldSelect">
1845                                                         <xsl:with-param name="codes">abcd</xsl:with-param>
1846                                                 </xsl:call-template>
1847                                         </xsl:with-param>
1848                                 </xsl:call-template>
1849                         </topic>
1850                         <xsl:call-template name="subjectAnyOrder"/>
1851                 </subject>
1852         </xsl:template>
1853
1854
1855         <xsl:template match="marc:datafield[@tag=651]">
1856                 <subject>
1857                         <xsl:call-template name="subjectAuthority"/>
1858                         <xsl:for-each select="marc:subfield[@code='a']">
1859                                 <geographic>
1860                                         <xsl:value-of select="."/>
1861                                 </geographic>                   
1862                         </xsl:for-each>
1863                         <xsl:call-template name="subjectAnyOrder"/>
1864                 </subject>
1865         </xsl:template>
1866
1867         <xsl:template match="marc:datafield[@tag=653]">
1868                 <subject>
1869                         <xsl:for-each select="marc:subfield[@code='a']">
1870                                 <topic>
1871                                         <xsl:value-of select="."/>
1872                                 </topic>                        
1873                         </xsl:for-each>
1874                 </subject>
1875         </xsl:template>
1876 </xsl:stylesheet><!-- Stylus Studio meta-information - (c)1998-2002 eXcelon Corp.
1877 <metaInformation>
1878 <scenarios ><scenario default="yes" name="modstst2" userelativepaths="yes" externalpreview="no" url="..\..\..\..\..\..\marcxml\modstst2.xml" htmlbaseurl="" outputurl="" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/><scenario default="no" name="modstest" userelativepaths="yes" externalpreview="no" url="..\..\..\..\..\..\marcxml\modstest.xml" htmlbaseurl="" outputurl="" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/><scenario default="no" name="Scenario1" userelativepaths="yes" externalpreview="no" url="..\..\..\..\..\..\marcxml\t.xml" htmlbaseurl="" outputurl="" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/></scenarios><MapperInfo srcSchemaPath="" srcSchemaRoot="" srcSchemaPathIsRelative="yes" srcSchemaInterpretAsXML="no" destSchemaPath="" destSchemaRoot="" destSchemaPathIsRelative="yes" destSchemaInterpretAsXML="no"/>
1879 </metaInformation>
1880 -->