225a5a0a781e67aa76b674664626ee70f43f1232
[idzebra-moved-to-github.git] / examples / marcxml / MARC21slim2MODS3-1.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" xmlns="http://www.loc.gov/mods/v3" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xlink marc">
3         <xsl:include href="http://www.loc.gov/marcxml/xslt/MARC21slimUtils.xsl"/>
4         <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
5         <!--
6
7 Revision 1.10 MODS 3.1 revisions to language and classification elements  
8                                 (plus ability to find marc:collection embedded in wrapper elements such as SRU zs: wrappers)
9                                 2006/02/06  ggar
10
11 Revision 1.9 subfield $y was added to field 242 2004/09/02 10:57 jrad
12
13 Revision 1.8 Subject chopPunctuation expanded and attribute fixes 2004/08/12 jrad
14
15 Revision 1.7 2004/03/25 08:29 jrad
16
17 Revision 1.6 various validation fixes 2004/02/20 ntra
18
19 Revision 1.5  2003/10/02 16:18:58  ntra
20 MODS2 to MODS3 updates, language unstacking and 
21 de-duping, chopPunctuation expanded
22
23 Revision 1.3  2003/04/03 00:07:19  ntra
24 Revision 1.3 Additional Changes not related to MODS Version 2.0 by ntra
25
26 Revision 1.2  2003/03/24 19:37:42  ckeith
27 Added Log Comment
28
29 -->
30         <xsl:template match="/">
31                 <xsl:choose>
32                         <xsl:when test="//marc:collection">
33                                 <modsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-1.xsd">
34                                         <xsl:for-each select="//marc:collection/marc:record">
35                                                 <mods version="3.1">
36                                                         <xsl:call-template name="marcRecord"/>
37                                                 </mods>
38                                         </xsl:for-each>
39                                 </modsCollection>
40                         </xsl:when>
41                         <xsl:otherwise>
42                                 <mods version="3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-1.xsd">
43                                         <xsl:for-each select="//marc:record">
44                                                 <xsl:call-template name="marcRecord"/>
45                                         </xsl:for-each>
46                                 </mods>
47                         </xsl:otherwise>
48                 </xsl:choose>
49         </xsl:template>
50         <xsl:template name="marcRecord">
51                 <xsl:variable name="leader" select="marc:leader"/>
52                 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
53                 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
54                 <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>
55                 <xsl:variable name="typeOf008">
56                         <xsl:choose>
57                                 <xsl:when test="$leader6='a'">
58                                         <xsl:choose>
59                                                 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
60                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
61                                         </xsl:choose>
62                                 </xsl:when>
63                                 <xsl:when test="$leader6='t'">BK</xsl:when>
64                                 <xsl:when test="$leader6='p'">MM</xsl:when>
65                                 <xsl:when test="$leader6='m'">CF</xsl:when>
66                                 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
67                                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
68                                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">MU</xsl:when>
69                         </xsl:choose>
70                 </xsl:variable>
71                 <xsl:for-each select="marc:datafield[@tag=245]">
72                         <titleInfo>
73                                 <xsl:variable name="title">
74                                         <xsl:choose>
75                                                 <xsl:when test="marc:subfield[@code='b']">
76                                                         <xsl:call-template name="specialSubfieldSelect">
77                                                                 <xsl:with-param name="axis">b</xsl:with-param>
78                                                                 <xsl:with-param name="beforeCodes">afgk</xsl:with-param>
79                                                         </xsl:call-template>
80                                                 </xsl:when>
81                                                 <xsl:otherwise>
82                                                         <xsl:call-template name="subfieldSelect">
83                                                                 <xsl:with-param name="codes">abfgk</xsl:with-param>
84                                                         </xsl:call-template>
85                                                 </xsl:otherwise>
86                                         </xsl:choose>
87                                 </xsl:variable>
88                                 <xsl:variable name="titleChop">
89                                         <xsl:call-template name="chopPunctuation">
90                                                 <xsl:with-param name="chopString">
91                                                         <xsl:value-of select="$title"/>
92                                                 </xsl:with-param>
93                                         </xsl:call-template>
94                                 </xsl:variable>
95                                 <xsl:choose>
96                                         <xsl:when test="@ind2&gt;0">
97                                                 <nonSort>
98                                                         <xsl:value-of select="substring($titleChop,1,@ind2)"/>
99                                                 </nonSort>
100                                                 <title>
101                                                         <xsl:value-of select="substring($titleChop,@ind2+1)"/>
102                                                 </title>
103                                         </xsl:when>
104                                         <xsl:otherwise>
105                                                 <title>
106                                                         <xsl:value-of select="$titleChop"/>
107                                                 </title>
108                                         </xsl:otherwise>
109                                 </xsl:choose>
110                                 <xsl:if test="marc:subfield[@code='b']">
111                                         <subTitle>
112                                                 <xsl:call-template name="chopPunctuation">
113                                                         <xsl:with-param name="chopString">
114                                                                 <xsl:call-template name="specialSubfieldSelect">
115                                                                         <xsl:with-param name="axis">b</xsl:with-param>
116                                                                         <xsl:with-param name="anyCodes">b</xsl:with-param>
117                                                                         <xsl:with-param name="afterCodes">afgk</xsl:with-param>
118                                                                 </xsl:call-template>
119                                                         </xsl:with-param>
120                                                 </xsl:call-template>
121                                         </subTitle>
122                                 </xsl:if>
123                                 <xsl:call-template name="part"/>
124                         </titleInfo>
125                 </xsl:for-each>
126                 <xsl:for-each select="marc:datafield[@tag=210]">
127                         <titleInfo type="abbreviated">
128                                 <title>
129                                         <xsl:call-template name="chopPunctuation">
130                                                 <xsl:with-param name="chopString">
131                                                         <xsl:call-template name="subfieldSelect">
132                                                                 <xsl:with-param name="codes">a</xsl:with-param>
133                                                         </xsl:call-template>
134                                                 </xsl:with-param>
135                                         </xsl:call-template>
136                                 </title>
137                                 <xsl:call-template name="subtitle"/>
138                         </titleInfo>
139                 </xsl:for-each>
140                 <xsl:for-each select="marc:datafield[@tag=242]">
141                         <titleInfo type="translated">
142                                 <!--09/01/04 Added subfield $y-->
143                                 <xsl:for-each select="marc:subfield[@code='y']">
144                                         <xsl:attribute name="lang"><xsl:value-of select="text()"/></xsl:attribute>
145                                 </xsl:for-each>
146                                 <title>
147                                         <xsl:call-template name="chopPunctuation">
148                                                 <xsl:with-param name="chopString">
149                                                         <xsl:call-template name="subfieldSelect">
150                                                                 <!-- 1/04 removed $h, b -->
151                                                                 <xsl:with-param name="codes">a</xsl:with-param>
152                                                         </xsl:call-template>
153                                                 </xsl:with-param>
154                                         </xsl:call-template>
155                                 </title>
156                                 <!-- 1/04 fix -->
157                                 <xsl:call-template name="subtitle"/>
158                                 <xsl:call-template name="part"/>
159                         </titleInfo>
160                 </xsl:for-each>
161                 <xsl:for-each select="marc:datafield[@tag=246]">
162                         <titleInfo type="alternative">
163                                 <xsl:for-each select="marc:subfield[@code='i']">
164                                         <xsl:attribute name="displayLabel"><xsl:value-of select="text()"/></xsl:attribute>
165                                 </xsl:for-each>
166                                 <title>
167                                         <xsl:call-template name="chopPunctuation">
168                                                 <xsl:with-param name="chopString">
169                                                         <xsl:call-template name="subfieldSelect">
170                                                                 <!-- 1/04 removed $h, $b -->
171                                                                 <xsl:with-param name="codes">af</xsl:with-param>
172                                                         </xsl:call-template>
173                                                 </xsl:with-param>
174                                         </xsl:call-template>
175                                 </title>
176                                 <xsl:call-template name="subtitle"/>
177                                 <xsl:call-template name="part"/>
178                         </titleInfo>
179                 </xsl:for-each>
180                 <xsl:for-each select="marc:datafield[@tag=130]|marc:datafield[@tag=240]|marc:datafield[@tag=730][@ind2!=2]">
181                         <titleInfo type="uniform">
182                                 <title>
183                                         <xsl:variable name="str">
184                                                 <xsl:for-each select="marc:subfield">
185                                                         <xsl:if test="(contains('adfklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
186                                                                 <xsl:value-of select="text()"/>
187                                                                 <xsl:text> </xsl:text>
188                                                         </xsl:if>
189                                                 </xsl:for-each>
190                                         </xsl:variable>
191                                         <xsl:call-template name="chopPunctuation">
192                                                 <xsl:with-param name="chopString">
193                                                         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
194                                                 </xsl:with-param>
195                                         </xsl:call-template>
196                                 </title>
197                                 <xsl:call-template name="part"/>
198                         </titleInfo>
199                 </xsl:for-each>
200                 <xsl:for-each select="marc:datafield[@tag=740][@ind2!=2]">
201                         <titleInfo type="alternative">
202                                 <title>
203                                         <xsl:call-template name="chopPunctuation">
204                                                 <xsl:with-param name="chopString">
205                                                         <xsl:call-template name="subfieldSelect">
206                                                                 <xsl:with-param name="codes">ah</xsl:with-param>
207                                                         </xsl:call-template>
208                                                 </xsl:with-param>
209                                         </xsl:call-template>
210                                 </title>
211                                 <xsl:call-template name="part"/>
212                         </titleInfo>
213                 </xsl:for-each>
214                 <xsl:for-each select="marc:datafield[@tag=100]">
215                         <name type="personal">
216                                 <xsl:call-template name="nameABCDQ"/>
217                                 <xsl:call-template name="affiliation"/>
218                                 <role>
219                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
220                                 </role>
221                                 <xsl:call-template name="role"/>
222                         </name>
223                 </xsl:for-each>
224                 <xsl:for-each select="marc:datafield[@tag=110]">
225                         <name type="corporate">
226                                 <xsl:call-template name="nameABCDN"/>
227                                 <role>
228                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
229                                 </role>
230                                 <xsl:call-template name="role"/>
231                         </name>
232                 </xsl:for-each>
233                 <xsl:for-each select="marc:datafield[@tag=111]">
234                         <name type="conference">
235                                 <xsl:call-template name="nameACDEQ"/>
236                                 <role>
237                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
238                                 </role>
239                                 <xsl:call-template name="role"/>
240                         </name>
241                 </xsl:for-each>
242                 <xsl:for-each select="marc:datafield[@tag=700][not(marc:subfield[@code='t'])]">
243                         <name type="personal">
244                                 <xsl:call-template name="nameABCDQ"/>
245                                 <xsl:call-template name="affiliation"/>
246                                 <xsl:call-template name="role"/>
247                         </name>
248                 </xsl:for-each>
249                 <xsl:for-each select="marc:datafield[@tag=710][not(marc:subfield[@code='t'])]">
250                         <name type="corporate">
251                                 <xsl:call-template name="nameABCDN"/>
252                                 <xsl:call-template name="role"/>
253                         </name>
254                 </xsl:for-each>
255                 <xsl:for-each select="marc:datafield[@tag=711][not(marc:subfield[@code='t'])]">
256                         <name type="conference">
257                                 <xsl:call-template name="nameACDEQ"/>
258                                 <xsl:call-template name="role"/>
259                         </name>
260                 </xsl:for-each>
261                 <xsl:for-each select="marc:datafield[@tag=720][not(marc:subfield[@code='t'])]">
262                         <name>
263                                 <xsl:if test="@ind1=1">
264                                         <xsl:attribute name="type"><xsl:text>personal</xsl:text></xsl:attribute>
265                                 </xsl:if>
266                                 <namePart>
267                                         <xsl:value-of select="marc:subfield[@code='a']"/>
268                                 </namePart>
269                                 <xsl:call-template name="role"/>
270                         </name>
271                 </xsl:for-each>
272                 <typeOfResource>
273                         <xsl:if test="$leader7='c'">
274                                 <xsl:attribute name="collection">yes</xsl:attribute>
275                         </xsl:if>
276                         <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
277                                 <xsl:attribute name="manuscript">yes</xsl:attribute>
278                         </xsl:if>
279                         <xsl:choose>
280                                 <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
281                                 <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
282                                 <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
283                                 <xsl:when test="$leader6='i'">sound recording-nonmusical</xsl:when>
284                                 <xsl:when test="$leader6='j'">sound recording-musical</xsl:when>
285                                 <xsl:when test="$leader6='k'">still image</xsl:when>
286                                 <xsl:when test="$leader6='g'">moving image</xsl:when>
287                                 <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
288                                 <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
289                                 <xsl:when test="$leader6='p'">mixed material</xsl:when>
290                         </xsl:choose>
291                 </typeOfResource>
292                 <xsl:if test="substring($controlField008,26,1)='d'">
293                         <genre authority="marc">globe</genre>
294                 </xsl:if>
295                 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
296                         <genre authority="marc">remote sensing image</genre>
297                 </xsl:if>
298                 <xsl:if test="$typeOf008='MP'">
299                         <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"/>
300                         <xsl:choose>
301                                 <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']">
302                                         <genre authority="marc">map</genre>
303                                 </xsl:when>
304                                 <xsl:when test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
305                                         <genre authority="marc">atlas</genre>
306                                 </xsl:when>
307                         </xsl:choose>
308                 </xsl:if>
309                 <xsl:if test="$typeOf008='SE'">
310                         <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"/>
311                         <xsl:choose>
312                                 <xsl:when test="$controlField008-21='d'">
313                                         <genre authority="marc">database</genre>
314                                 </xsl:when>
315                                 <xsl:when test="$controlField008-21='l'">
316                                         <genre authority="marc">loose-leaf</genre>
317                                 </xsl:when>
318                                 <xsl:when test="$controlField008-21='m'">
319                                         <genre authority="marc">series</genre>
320                                 </xsl:when>
321                                 <xsl:when test="$controlField008-21='n'">
322                                         <genre authority="marc">newspaper</genre>
323                                 </xsl:when>
324                                 <xsl:when test="$controlField008-21='p'">
325                                         <genre authority="marc">periodical</genre>
326                                 </xsl:when>
327                                 <xsl:when test="$controlField008-21='w'">
328                                         <genre authority="marc">web site</genre>
329                                 </xsl:when>
330                         </xsl:choose>
331                 </xsl:if>
332                 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
333                         <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"/>
334                         <xsl:choose>
335                                 <xsl:when test="contains($controlField008-24,'a')">
336                                         <genre authority="marc">abstract or summary</genre>
337                                 </xsl:when>
338                                 <xsl:when test="contains($controlField008-24,'b')">
339                                         <genre authority="marc">bibliography</genre>
340                                 </xsl:when>
341                                 <xsl:when test="contains($controlField008-24,'c')">
342                                         <genre authority="marc">catalog</genre>
343                                 </xsl:when>
344                                 <xsl:when test="contains($controlField008-24,'d')">
345                                         <genre authority="marc">dictionary</genre>
346                                 </xsl:when>
347                                 <xsl:when test="contains($controlField008-24,'e')">
348                                         <genre authority="marc">encyclopedia</genre>
349                                 </xsl:when>
350                                 <xsl:when test="contains($controlField008-24,'f')">
351                                         <genre authority="marc">handbook</genre>
352                                 </xsl:when>
353                                 <xsl:when test="contains($controlField008-24,'g')">
354                                         <genre authority="marc">legal article</genre>
355                                 </xsl:when>
356                                 <xsl:when test="contains($controlField008-24,'i')">
357                                         <genre authority="marc">index</genre>
358                                 </xsl:when>
359                                 <xsl:when test="contains($controlField008-24,'k')">
360                                         <genre authority="marc">discography</genre>
361                                 </xsl:when>
362                                 <xsl:when test="contains($controlField008-24,'l')">
363                                         <genre authority="marc">legislation</genre>
364                                 </xsl:when>
365                                 <xsl:when test="contains($controlField008-24,'m')">
366                                         <genre authority="marc">theses</genre>
367                                 </xsl:when>
368                                 <xsl:when test="contains($controlField008-24,'n')">
369                                         <genre authority="marc">survey of literature</genre>
370                                 </xsl:when>
371                                 <xsl:when test="contains($controlField008-24,'o')">
372                                         <genre authority="marc">review</genre>
373                                 </xsl:when>
374                                 <xsl:when test="contains($controlField008-24,'p')">
375                                         <genre authority="marc">programmed text</genre>
376                                 </xsl:when>
377                                 <xsl:when test="contains($controlField008-24,'q')">
378                                         <genre authority="marc">filmography</genre>
379                                 </xsl:when>
380                                 <xsl:when test="contains($controlField008-24,'r')">
381                                         <genre authority="marc">directory</genre>
382                                 </xsl:when>
383                                 <xsl:when test="contains($controlField008-24,'s')">
384                                         <genre authority="marc">statistics</genre>
385                                 </xsl:when>
386                                 <xsl:when test="contains($controlField008-24,'t')">
387                                         <genre authority="marc">technical report</genre>
388                                 </xsl:when>
389                                 <xsl:when test="contains($controlField008-24,'v')">
390                                         <genre authority="marc">legal case and case notes</genre>
391                                 </xsl:when>
392                                 <xsl:when test="contains($controlField008-24,'w')">
393                                         <genre authority="marc">law report or digest</genre>
394                                 </xsl:when>
395                                 <xsl:when test="contains($controlField008-24,'z')">
396                                         <genre authority="marc">treaty</genre>
397                                 </xsl:when>
398                         </xsl:choose>
399                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
400                         <xsl:choose>
401                                 <xsl:when test="$controlField008-29='1'">
402                                         <genre authority="marc">conference publication</genre>
403                                 </xsl:when>
404                         </xsl:choose>
405                 </xsl:if>
406                 <xsl:if test="$typeOf008='CF'">
407                         <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"/>
408                         <xsl:choose>
409                                 <xsl:when test="$controlField008-26='a'">
410                                         <genre authority="marc">numeric data</genre>
411                                 </xsl:when>
412                                 <xsl:when test="$controlField008-26='e'">
413                                         <genre authority="marc">database</genre>
414                                 </xsl:when>
415                                 <xsl:when test="$controlField008-26='f'">
416                                         <genre authority="marc">font</genre>
417                                 </xsl:when>
418                                 <xsl:when test="$controlField008-26='g'">
419                                         <genre authority="marc">game</genre>
420                                 </xsl:when>
421                         </xsl:choose>
422                 </xsl:if>
423                 <xsl:if test="$typeOf008='BK'">
424                         <xsl:if test="substring($controlField008,25,1)='j'">
425                                 <genre authority="marc">patent</genre>
426                         </xsl:if>
427                         <xsl:if test="substring($controlField008,31,1)='1'">
428                                 <genre authority="marc">festschrift</genre>
429                         </xsl:if>
430                         <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"/>
431                         <xsl:if test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
432                                 <genre authority="marc">biography</genre>
433                         </xsl:if>
434                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
435                         <xsl:choose>
436                                 <xsl:when test="$controlField008-33='e'">
437                                         <genre authority="marc">essay</genre>
438                                 </xsl:when>
439                                 <xsl:when test="$controlField008-33='d'">
440                                         <genre authority="marc">drama</genre>
441                                 </xsl:when>
442                                 <xsl:when test="$controlField008-33='c'">
443                                         <genre authority="marc">comic strip</genre>
444                                 </xsl:when>
445                                 <xsl:when test="$controlField008-33='l'">
446                                         <genre authority="marc">fiction</genre>
447                                 </xsl:when>
448                                 <xsl:when test="$controlField008-33='h'">
449                                         <genre authority="marc">humor, satire</genre>
450                                 </xsl:when>
451                                 <xsl:when test="$controlField008-33='i'">
452                                         <genre authority="marc">letter</genre>
453                                 </xsl:when>
454                                 <xsl:when test="$controlField008-33='f'">
455                                         <genre authority="marc">novel</genre>
456                                 </xsl:when>
457                                 <xsl:when test="$controlField008-33='j'">
458                                         <genre authority="marc">short story</genre>
459                                 </xsl:when>
460                                 <xsl:when test="$controlField008-33='s'">
461                                         <genre authority="marc">speech</genre>
462                                 </xsl:when>
463                         </xsl:choose>
464                 </xsl:if>
465                 <xsl:if test="$typeOf008='MU'">
466                         <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"/>
467                         <xsl:if test="contains($controlField008-30-31,'b')">
468                                 <genre authority="marc">biography</genre>
469                         </xsl:if>
470                         <xsl:if test="contains($controlField008-30-31,'c')">
471                                 <genre authority="marc">conference publication</genre>
472                         </xsl:if>
473                         <xsl:if test="contains($controlField008-30-31,'d')">
474                                 <genre authority="marc">drama</genre>
475                         </xsl:if>
476                         <xsl:if test="contains($controlField008-30-31,'e')">
477                                 <genre authority="marc">essay</genre>
478                         </xsl:if>
479                         <xsl:if test="contains($controlField008-30-31,'f')">
480                                 <genre authority="marc">fiction</genre>
481                         </xsl:if>
482                         <xsl:if test="contains($controlField008-30-31,'o')">
483                                 <genre authority="marc">folktale</genre>
484                         </xsl:if>
485                         <xsl:if test="contains($controlField008-30-31,'h')">
486                                 <genre authority="marc">history</genre>
487                         </xsl:if>
488                         <xsl:if test="contains($controlField008-30-31,'k')">
489                                 <genre authority="marc">humor, satire</genre>
490                         </xsl:if>
491                         <xsl:if test="contains($controlField008-30-31,'m')">
492                                 <genre authority="marc">memoir</genre>
493                         </xsl:if>
494                         <xsl:if test="contains($controlField008-30-31,'p')">
495                                 <genre authority="marc">poetry</genre>
496                         </xsl:if>
497                         <xsl:if test="contains($controlField008-30-31,'r')">
498                                 <genre authority="marc">rehearsal</genre>
499                         </xsl:if>
500                         <xsl:if test="contains($controlField008-30-31,'g')">
501                                 <genre authority="marc">reporting</genre>
502                         </xsl:if>
503                         <xsl:if test="contains($controlField008-30-31,'s')">
504                                 <genre authority="marc">sound</genre>
505                         </xsl:if>
506                         <xsl:if test="contains($controlField008-30-31,'l')">
507                                 <genre authority="marc">speech</genre>
508                         </xsl:if>
509                 </xsl:if>
510                 <xsl:if test="$typeOf008='VM'">
511                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
512                         <xsl:choose>
513                                 <xsl:when test="$controlField008-33='a'">
514                                         <genre authority="marc">art original</genre>
515                                 </xsl:when>
516                                 <xsl:when test="$controlField008-33='b'">
517                                         <genre authority="marc">kit</genre>
518                                 </xsl:when>
519                                 <xsl:when test="$controlField008-33='c'">
520                                         <genre authority="marc">art reproduction</genre>
521                                 </xsl:when>
522                                 <xsl:when test="$controlField008-33='d'">
523                                         <genre authority="marc">diorama</genre>
524                                 </xsl:when>
525                                 <xsl:when test="$controlField008-33='f'">
526                                         <genre authority="marc">filmstrip</genre>
527                                 </xsl:when>
528                                 <xsl:when test="$controlField008-33='g'">
529                                         <genre authority="marc">legal article</genre>
530                                 </xsl:when>
531                                 <xsl:when test="$controlField008-33='i'">
532                                         <genre authority="marc">picture</genre>
533                                 </xsl:when>
534                                 <xsl:when test="$controlField008-33='k'">
535                                         <genre authority="marc">graphic</genre>
536                                 </xsl:when>
537                                 <xsl:when test="$controlField008-33='l'">
538                                         <genre authority="marc">technical drawing</genre>
539                                 </xsl:when>
540                                 <xsl:when test="$controlField008-33='m'">
541                                         <genre authority="marc">motion picture</genre>
542                                 </xsl:when>
543                                 <xsl:when test="$controlField008-33='n'">
544                                         <genre authority="marc">chart</genre>
545                                 </xsl:when>
546                                 <xsl:when test="$controlField008-33='o'">
547                                         <genre authority="marc">flash card</genre>
548                                 </xsl:when>
549                                 <xsl:when test="$controlField008-33='p'">
550                                         <genre authority="marc">microscope slide</genre>
551                                 </xsl:when>
552                                 <xsl:when test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
553                                         <genre authority="marc">model</genre>
554                                 </xsl:when>
555                                 <xsl:when test="$controlField008-33='r'">
556                                         <genre authority="marc">realia</genre>
557                                 </xsl:when>
558                                 <xsl:when test="$controlField008-33='s'">
559                                         <genre authority="marc">slide</genre>
560                                 </xsl:when>
561                                 <xsl:when test="$controlField008-33='t'">
562                                         <genre authority="marc">transparency</genre>
563                                 </xsl:when>
564                                 <xsl:when test="$controlField008-33='v'">
565                                         <genre authority="marc">videorecording</genre>
566                                 </xsl:when>
567                                 <xsl:when test="$controlField008-33='w'">
568                                         <genre authority="marc">toy</genre>
569                                 </xsl:when>
570                         </xsl:choose>
571                 </xsl:if>
572                 <xsl:for-each select="marc:datafield[@tag=655]">
573                         <genre authority="marc">
574                                 <xsl:attribute name="authority"><xsl:value-of select="marc:subfield[@code='2']"/></xsl:attribute>
575                                 <xsl:call-template name="subfieldSelect">
576                                         <xsl:with-param name="codes">abvxyz</xsl:with-param>
577                                         <xsl:with-param name="delimeter">-</xsl:with-param>
578                                 </xsl:call-template>
579                         </genre>
580                 </xsl:for-each>
581                 <originInfo>
582                         <xsl:variable name="MARCpublicationCode" select="normalize-space(substring($controlField008,16,3))"/>
583                         <xsl:if test="translate($MARCpublicationCode,'|','')">
584                                 <place>
585                                         <placeTerm>
586                                                 <xsl:attribute name="type">code</xsl:attribute>
587                                                 <xsl:attribute name="authority">marccountry</xsl:attribute>
588                                                 <xsl:value-of select="$MARCpublicationCode"/>
589                                         </placeTerm>
590                                 </place>
591                         </xsl:if>
592                         <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
593                                 <place>
594                                         <placeTerm>
595                                                 <xsl:attribute name="type">code</xsl:attribute>
596                                                 <xsl:attribute name="authority">iso3166</xsl:attribute>
597                                                 <xsl:value-of select="."/>
598                                         </placeTerm>
599                                 </place>
600                         </xsl:for-each>
601                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a']">
602                                 <place>
603                                         <placeTerm>
604                                                 <xsl:attribute name="type">text</xsl:attribute>
605                                                 <xsl:call-template name="chopPunctuationFront">
606                                                         <xsl:with-param name="chopString">
607                                                                 <xsl:call-template name="chopPunctuation">
608                                                                         <xsl:with-param name="chopString" select="."/>
609                                                                 </xsl:call-template>
610                                                         </xsl:with-param>
611                                                 </xsl:call-template>
612                                         </placeTerm>
613                                 </place>
614                         </xsl:for-each>
615                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='m']">
616                                 <dateValid point="start">
617                                         <xsl:value-of select="."/>
618                                 </dateValid>
619                         </xsl:for-each>
620                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='n']">
621                                 <dateValid point="end">
622                                         <xsl:value-of select="."/>
623                                 </dateValid>
624                         </xsl:for-each>
625                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='j']">
626                                 <dateModified>
627                                         <xsl:value-of select="."/>
628                                 </dateModified>
629                         </xsl:for-each>
630                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='b' or @code='c' or @code='g']">
631                                 <xsl:choose>
632                                         <xsl:when test="@code='b'">
633                                                 <publisher>
634                                                         <xsl:call-template name="chopPunctuation">
635                                                                 <xsl:with-param name="chopString" select="."/>
636                                                                 <xsl:with-param name="punctuation">
637                                                                         <xsl:text>:,;/ </xsl:text>
638                                                                 </xsl:with-param>
639                                                         </xsl:call-template>
640                                                 </publisher>
641                                         </xsl:when>
642                                         <xsl:when test="@code='c'">
643                                                 <dateIssued>
644                                                         <xsl:call-template name="chopPunctuation">
645                                                                 <xsl:with-param name="chopString" select="."/>
646                                                         </xsl:call-template>
647                                                 </dateIssued>
648                                         </xsl:when>
649                                         <xsl:when test="@code='g'">
650                                                 <dateCreated>
651                                                         <xsl:value-of select="."/>
652                                                 </dateCreated>
653                                         </xsl:when>
654                                 </xsl:choose>
655                         </xsl:for-each>
656                         <xsl:variable name="dataField260c">
657                                 <xsl:call-template name="chopPunctuation">
658                                         <xsl:with-param name="chopString" select="marc:datafield[@tag=260]/marc:subfield[@code='c']"/>
659                                 </xsl:call-template>
660                         </xsl:variable>
661                         <xsl:variable name="controlField008-7-10" select="normalize-space(substring($controlField008, 8, 4))"/>
662                         <xsl:variable name="controlField008-11-14" select="normalize-space(substring($controlField008, 12, 4))"/>
663                         <xsl:variable name="controlField008-6" select="normalize-space(substring($controlField008, 7, 1))"/>
664                         <xsl:if test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
665                                 <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
666                                         <dateIssued encoding="marc">
667                                                 <xsl:value-of select="$controlField008-7-10"/>
668                                         </dateIssued>
669                                 </xsl:if>
670                         </xsl:if>
671                         <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'">
672                                 <xsl:if test="$controlField008-7-10">
673                                         <dateIssued encoding="marc" point="start">
674                                                 <xsl:value-of select="$controlField008-7-10"/>
675                                         </dateIssued>
676                                 </xsl:if>
677                         </xsl:if>
678                         <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'">
679                                 <xsl:if test="$controlField008-11-14">
680                                         <dateIssued encoding="marc" point="end">
681                                                 <xsl:value-of select="$controlField008-11-14"/>
682                                         </dateIssued>
683                                 </xsl:if>
684                         </xsl:if>
685                         <xsl:if test="$controlField008-6='q'">
686                                 <xsl:if test="$controlField008-7-10">
687                                         <dateIssued encoding="marc" point="start" qualifier="questionable">
688                                                 <xsl:value-of select="$controlField008-7-10"/>
689                                         </dateIssued>
690                                 </xsl:if>
691                         </xsl:if>
692                         <xsl:if test="$controlField008-6='q'">
693                                 <xsl:if test="$controlField008-11-14">
694                                         <dateIssued encoding="marc" point="end" qualifier="questionable">
695                                                 <xsl:value-of select="$controlField008-11-14"/>
696                                         </dateIssued>
697                                 </xsl:if>
698                         </xsl:if>
699                         <xsl:if test="$controlField008-6='t'">
700                                 <xsl:if test="$controlField008-11-14">
701                                         <copyrightDate encoding="marc">
702                                                 <xsl:value-of select="$controlField008-11-14"/>
703                                         </copyrightDate>
704                                 </xsl:if>
705                         </xsl:if>
706                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
707                                 <dateCaptured encoding="iso8601">
708                                         <xsl:value-of select="."/>
709                                 </dateCaptured>
710                         </xsl:for-each>
711                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
712                                 <dateCaptured encoding="iso8601" point="start">
713                                         <xsl:value-of select="."/>
714                                 </dateCaptured>
715                         </xsl:for-each>
716                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
717                                 <dateCaptured encoding="iso8601" point="end">
718                                         <xsl:value-of select="."/>
719                                 </dateCaptured>
720                         </xsl:for-each>
721                         <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
722                                 <edition>
723                                         <xsl:value-of select="."/>
724                                 </edition>
725                         </xsl:for-each>
726                         <xsl:for-each select="marc:leader">
727                                 <issuance>
728                                         <xsl:choose>
729                                                 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">monographic</xsl:when>
730                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">continuing</xsl:when>
731                                         </xsl:choose>
732                                 </issuance>
733                         </xsl:for-each>
734                         <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
735                                 <frequency>
736                                         <xsl:call-template name="subfieldSelect">
737                                                 <xsl:with-param name="codes">ab</xsl:with-param>
738                                         </xsl:call-template>
739                                 </frequency>
740                         </xsl:for-each>
741                 </originInfo>
742                 <xsl:variable name="controlField008-35-37" select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"/>
743                 <xsl:if test="$controlField008-35-37">
744                         <language>
745                                 <languageTerm authority="iso639-2b" type="code">
746                                         <xsl:value-of select="substring($controlField008,36,3)"/>
747                                 </languageTerm>
748                         </language>
749                 </xsl:if>
750                 <xsl:for-each select="marc:datafield[@tag=041]">
751                         <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='d' or @code='e' or @code='f' or @code='g' or @code='h']">
752                                 <xsl:variable name="langCodes" select="."/>
753                                 <xsl:choose>
754                                         <xsl:when test="../marc:subfield[@code='2']='rfc3066'">
755                                                 <!-- not stacked but could be repeated -->
756                                                 <xsl:call-template name="rfcLanguages">
757                                                         <xsl:with-param name="nodeNum">
758                                                                 <xsl:value-of select="1"/>
759                                                         </xsl:with-param>
760                                                         <xsl:with-param name="usedLanguages">
761                                                                 <xsl:text/>
762                                                         </xsl:with-param>
763                                                         <xsl:with-param name="controlField008-35-37">
764                                                                 <xsl:value-of select="$controlField008-35-37"/>
765                                                         </xsl:with-param>
766                                                 </xsl:call-template>
767                                         </xsl:when>
768                                         <xsl:otherwise>
769                                                 <!-- iso -->
770                                                 <xsl:variable name="allLanguages">
771                                                         <xsl:copy-of select="$langCodes"/>
772                                                 </xsl:variable>
773                                                 <xsl:variable name="currentLanguage">
774                                                         <xsl:value-of select="substring($allLanguages,1,3)"/>
775                                                 </xsl:variable>
776                                                 <xsl:call-template name="isoLanguage">
777                                                         <xsl:with-param name="currentLanguage">
778                                                                 <xsl:value-of select="substring($allLanguages,1,3)"/>
779                                                         </xsl:with-param>
780                                                         <xsl:with-param name="remainingLanguages">
781                                                                 <xsl:value-of select="substring($allLanguages,4,string-length($allLanguages)-3)"/>
782                                                         </xsl:with-param>
783                                                         <xsl:with-param name="usedLanguages">
784                                                                 <xsl:if test="$controlField008-35-37">
785                                                                         <xsl:value-of select="$controlField008-35-37"/>
786                                                                 </xsl:if>
787                                                         </xsl:with-param>
788                                                 </xsl:call-template>
789                                         </xsl:otherwise>
790                                 </xsl:choose>
791                         </xsl:for-each>
792                 </xsl:for-each>
793                 <xsl:variable name="physicalDescription">
794                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a' or substring(.,12,1)='b']">
795                                 <digitalOrigin>reformatted digital</digitalOrigin>
796                         </xsl:if>
797                         <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"/>
798                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
799                         <xsl:variable name="check008-23">
800                                 <xsl:if test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
801                                         <xsl:value-of select="true()"/>
802                                 </xsl:if>
803                         </xsl:variable>
804                         <xsl:variable name="check008-29">
805                                 <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
806                                         <xsl:value-of select="true()"/>
807                                 </xsl:if>
808                         </xsl:variable>
809                         <xsl:choose>
810                                 <xsl:when test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
811                                         <form authority="marcform">braille</form>
812                                 </xsl:when>
813                                 <xsl:when test="($controlField008-23=' ' and ($leader6='c' or $leader6='d')) or (($typeOf008='BK' or $typeOf008='SE') and ($controlField008-23=' ' or $controlField008='r'))">
814                                         <form authority="marcform">print</form>
815                                 </xsl:when>
816                                 <xsl:when test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
817                                         <form authority="marcform">electronic</form>
818                                 </xsl:when>
819                                 <xsl:when test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
820                                         <form authority="marcform">microfiche</form>
821                                 </xsl:when>
822                                 <xsl:when test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
823                                         <form authority="marcform">microfilm</form>
824                                 </xsl:when>
825                         </xsl:choose>
826                         <!-- 1/04 fix -->
827                         <xsl:if test="marc:datafield[@tag=130]/marc:subfield[@code='h']">
828                                 <form authority="gmd">
829                                         <xsl:call-template name="chopBrackets">
830                                                 <xsl:with-param name="chopString">
831                                                         <xsl:value-of select="marc:datafield[@tag=130]/marc:subfield[@code='h']"/>
832                                                 </xsl:with-param>
833                                         </xsl:call-template>
834                                 </form>
835                         </xsl:if>
836                         <xsl:if test="marc:datafield[@tag=240]/marc:subfield[@code='h']">
837                                 <form authority="gmd">
838                                         <xsl:call-template name="chopBrackets">
839                                                 <xsl:with-param name="chopString">
840                                                         <xsl:value-of select="marc:datafield[@tag=240]/marc:subfield[@code='h']"/>
841                                                 </xsl:with-param>
842                                         </xsl:call-template>
843                                 </form>
844                         </xsl:if>
845                         <xsl:if test="marc:datafield[@tag=242]/marc:subfield[@code='h']">
846                                 <form authority="gmd">
847                                         <xsl:call-template name="chopBrackets">
848                                                 <xsl:with-param name="chopString">
849                                                         <xsl:value-of select="marc:datafield[@tag=242]/marc:subfield[@code='h']"/>
850                                                 </xsl:with-param>
851                                         </xsl:call-template>
852                                 </form>
853                         </xsl:if>
854                         <xsl:if test="marc:datafield[@tag=245]/marc:subfield[@code='h']">
855                                 <form authority="gmd">
856                                         <xsl:call-template name="chopBrackets">
857                                                 <xsl:with-param name="chopString">
858                                                         <xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='h']"/>
859                                                 </xsl:with-param>
860                                         </xsl:call-template>
861                                 </form>
862                         </xsl:if>
863                         <xsl:if test="marc:datafield[@tag=246]/marc:subfield[@code='h']">
864                                 <form authority="gmd">
865                                         <xsl:call-template name="chopBrackets">
866                                                 <xsl:with-param name="chopString">
867                                                         <xsl:value-of select="marc:datafield[@tag=246]/marc:subfield[@code='h']"/>
868                                                 </xsl:with-param>
869                                         </xsl:call-template>
870                                 </form>
871                         </xsl:if>
872                         <xsl:if test="marc:datafield[@tag=730]/marc:subfield[@code='h']">
873                                 <form authority="gmd">
874                                         <xsl:call-template name="chopBrackets">
875                                                 <xsl:with-param name="chopString">
876                                                         <xsl:value-of select="marc:datafield[@tag=730]/marc:subfield[@code='h']"/>
877                                                 </xsl:with-param>
878                                         </xsl:call-template>
879                                 </form>
880                         </xsl:if>
881                         <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
882                                 <form>
883                                         <xsl:value-of select="."/>
884                                 </form>
885                         </xsl:for-each>
886                         <xsl:for-each select="marc:controlfield[@tag=007][substring(text(),1,1)='c']">
887                                 <xsl:choose>
888                                         <xsl:when test="substring(text(),14,1)='a'">
889                                                 <reformattingQuality>access</reformattingQuality>
890                                         </xsl:when>
891                                         <xsl:when test="substring(text(),14,1)='p'">
892                                                 <reformattingQuality>preservation</reformattingQuality>
893                                         </xsl:when>
894                                         <xsl:when test="substring(text(),14,1)='r'">
895                                                 <reformattingQuality>replacement</reformattingQuality>
896                                         </xsl:when>
897                                 </xsl:choose>
898                         </xsl:for-each>
899                         <xsl:for-each select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)&gt;1]">
900                                 <internetMediaType>
901                                         <xsl:value-of select="."/>
902                                 </internetMediaType>
903                         </xsl:for-each>
904                         <xsl:for-each select="marc:datafield[@tag=300]">
905                                 <extent>
906                                         <xsl:call-template name="subfieldSelect">
907                                                 <xsl:with-param name="codes">abce</xsl:with-param>
908                                         </xsl:call-template>
909                                 </extent>
910                         </xsl:for-each>
911                 </xsl:variable>
912                 <xsl:if test="string-length(normalize-space($physicalDescription))">
913                         <physicalDescription>
914                                 <xsl:copy-of select="$physicalDescription"/>
915                         </physicalDescription>
916                 </xsl:if>
917                 <xsl:for-each select="marc:datafield[@tag=520]">
918                         <abstract>
919                                 <xsl:call-template name="uri"/>
920                                 <xsl:call-template name="subfieldSelect">
921                                         <xsl:with-param name="codes">ab</xsl:with-param>
922                                 </xsl:call-template>
923                         </abstract>
924                 </xsl:for-each>
925                 <xsl:for-each select="marc:datafield[@tag=505]">
926                         <tableOfContents>
927                                 <xsl:call-template name="uri"/>
928                                 <xsl:call-template name="subfieldSelect">
929                                         <xsl:with-param name="codes">agrt</xsl:with-param>
930                                 </xsl:call-template>
931                         </tableOfContents>
932                 </xsl:for-each>
933                 <xsl:for-each select="marc:datafield[@tag=521]">
934                         <targetAudience>
935                                 <xsl:call-template name="subfieldSelect">
936                                         <xsl:with-param name="codes">ab</xsl:with-param>
937                                 </xsl:call-template>
938                         </targetAudience>
939                 </xsl:for-each>
940                 <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
941                         <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"/>
942                         <xsl:choose>
943                                 <!-- 01/04 fix -->
944                                 <xsl:when test="$controlField008-22='d'">
945                                         <targetAudience authority="marctarget">adolescent</targetAudience>
946                                 </xsl:when>
947                                 <xsl:when test="$controlField008-22='e'">
948                                         <targetAudience authority="marctarget">adult</targetAudience>
949                                 </xsl:when>
950                                 <xsl:when test="$controlField008-22='g'">
951                                         <targetAudience authority="marctarget">general</targetAudience>
952                                 </xsl:when>
953                                 <xsl:when test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
954                                         <targetAudience authority="marctarget">juvenile</targetAudience>
955                                 </xsl:when>
956                                 <xsl:when test="$controlField008-22='a'">
957                                         <targetAudience authority="marctarget">preschool</targetAudience>
958                                 </xsl:when>
959                                 <xsl:when test="$controlField008-22='f'">
960                                         <targetAudience authority="marctarget">specialized</targetAudience>
961                                 </xsl:when>
962                         </xsl:choose>
963                 </xsl:if>
964                 <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
965                         <note type="statement of responsibility">
966                                 <xsl:value-of select="."/>
967                         </note>
968                 </xsl:for-each>
969                 <xsl:for-each select="marc:datafield[@tag=500]">
970                         <note>
971                                 <xsl:value-of select="marc:subfield[@code='a']"/>
972                                 <xsl:call-template name="uri"/>
973                         </note>
974                 </xsl:for-each>
975                 <xsl:for-each select="marc:datafield[@tag=511]">
976                         <note type="performers">
977                                 <xsl:call-template name="uri"/>
978                                 <xsl:value-of select="marc:subfield[@code='a']"/>
979                         </note>
980                 </xsl:for-each>
981                 <xsl:for-each select="marc:datafield[@tag=518]">
982                         <note type="venue">
983                                 <xsl:call-template name="uri"/>
984                                 <xsl:value-of select="marc:subfield[@code='a']"/>
985                         </note>
986                 </xsl:for-each>
987                 <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=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]">
988                         <note>
989                                 <xsl:call-template name="uri"/>
990                                 <xsl:variable name="str">
991                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
992                                                 <xsl:value-of select="."/>
993                                                 <xsl:text> </xsl:text>
994                                         </xsl:for-each>
995                                 </xsl:variable>
996                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
997                         </note>
998                 </xsl:for-each>
999                 <xsl:for-each select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
1000                         <subject>
1001                                 <cartographics>
1002                                         <coordinates>
1003                                                 <xsl:call-template name="subfieldSelect">
1004                                                         <xsl:with-param name="codes">defg</xsl:with-param>
1005                                                 </xsl:call-template>
1006                                         </coordinates>
1007                                 </cartographics>
1008                         </subject>
1009                 </xsl:for-each>
1010                 <xsl:for-each select="marc:datafield[@tag=043]">
1011                         <subject>
1012                                 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1013                                         <geographicCode>
1014                                                 <xsl:attribute name="authority"><xsl:if test="@code='a'"><xsl:text>marcgac</xsl:text></xsl:if><xsl:if test="@code='b'"><xsl:value-of select="following-sibling::marc:subfield[@code=2]"/></xsl:if><xsl:if test="@code='c'"><xsl:text>iso3166</xsl:text></xsl:if></xsl:attribute>
1015                                                 <xsl:value-of select="self::marc:subfield"/>
1016                                         </geographicCode>
1017                                 </xsl:for-each>
1018                         </subject>
1019                 </xsl:for-each>
1020                 <xsl:for-each select="marc:datafield[@tag=255]">
1021                         <subject>
1022                                 <cartographics>
1023                                         <xsl:for-each select="marc:subfield[@code='c']">
1024                                                 <coordinates>
1025                                                         <xsl:value-of select="."/>
1026                                                 </coordinates>
1027                                         </xsl:for-each>
1028                                         <xsl:for-each select="marc:subfield[@code='a']">
1029                                                 <scale>
1030                                                         <xsl:value-of select="."/>
1031                                                 </scale>
1032                                         </xsl:for-each>
1033                                         <xsl:for-each select="marc:subfield[@code='b']">
1034                                                 <projection>
1035                                                         <xsl:value-of select="."/>
1036                                                 </projection>
1037                                         </xsl:for-each>
1038                                 </cartographics>
1039                         </subject>
1040                 </xsl:for-each>
1041                 <xsl:apply-templates select="marc:datafield[653 &gt;= @tag and @tag &gt;= 600]"/>
1042                 <xsl:apply-templates select="marc:datafield[@tag=656]"/>
1043                 <xsl:for-each select="marc:datafield[@tag=752]">
1044                         <subject>
1045                                 <hierarchicalGeographic>
1046                                         <xsl:for-each select="marc:subfield[@code='a']">
1047                                                 <country>
1048                                                         <xsl:call-template name="chopPunctuation">
1049                                                                 <xsl:with-param name="chopString" select="."/>
1050                                                         </xsl:call-template>
1051                                                 </country>
1052                                         </xsl:for-each>
1053                                         <xsl:for-each select="marc:subfield[@code='b']">
1054                                                 <state>
1055                                                         <xsl:call-template name="chopPunctuation">
1056                                                                 <xsl:with-param name="chopString" select="."/>
1057                                                         </xsl:call-template>
1058                                                 </state>
1059                                         </xsl:for-each>
1060                                         <xsl:for-each select="marc:subfield[@code='c']">
1061                                                 <county>
1062                                                         <xsl:call-template name="chopPunctuation">
1063                                                                 <xsl:with-param name="chopString" select="."/>
1064                                                         </xsl:call-template>
1065                                                 </county>
1066                                         </xsl:for-each>
1067                                         <xsl:for-each select="marc:subfield[@code='d']">
1068                                                 <city>
1069                                                         <xsl:call-template name="chopPunctuation">
1070                                                                 <xsl:with-param name="chopString" select="."/>
1071                                                         </xsl:call-template>
1072                                                 </city>
1073                                         </xsl:for-each>
1074                                 </hierarchicalGeographic>
1075                         </subject>
1076                 </xsl:for-each>
1077                 <xsl:for-each select="marc:datafield[@tag=045][marc:subfield[@code='b']]">
1078                         <subject>
1079                                 <xsl:choose>
1080                                         <xsl:when test="@ind1=2">
1081                                                 <temporal encoding="iso8601" point="start">
1082                                                         <xsl:call-template name="chopPunctuation">
1083                                                                 <xsl:with-param name="chopString">
1084                                                                         <xsl:value-of select="marc:subfield[@code='b'][1]"/>
1085                                                                 </xsl:with-param>
1086                                                         </xsl:call-template>
1087                                                 </temporal>
1088                                                 <temporal encoding="iso8601" point="end">
1089                                                         <xsl:call-template name="chopPunctuation">
1090                                                                 <xsl:with-param name="chopString">
1091                                                                         <xsl:value-of select="marc:subfield[@code='b'][2]"/>
1092                                                                 </xsl:with-param>
1093                                                         </xsl:call-template>
1094                                                 </temporal>
1095                                         </xsl:when>
1096                                         <xsl:otherwise>
1097                                                 <xsl:for-each select="marc:subfield[@code='b']">
1098                                                         <temporal encoding="iso8601">
1099                                                                 <xsl:call-template name="chopPunctuation">
1100                                                                         <xsl:with-param name="chopString" select="."/>
1101                                                                 </xsl:call-template>
1102                                                         </temporal>
1103                                                 </xsl:for-each>
1104                                         </xsl:otherwise>
1105                                 </xsl:choose>
1106                         </subject>
1107                 </xsl:for-each>
1108                 <xsl:for-each select="marc:datafield[@tag=050]">
1109                         <xsl:for-each select="marc:subfield[@code='b']">
1110                                 <classification authority="lcc">
1111                                         <xsl:if test="../marc:subfield[@code='3']">
1112                                                 <xsl:attribute name="displayLabel"><xsl:value-of select="../marc:subfield[@code='3']"/></xsl:attribute>
1113                                         </xsl:if>
1114                                         <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"/>
1115                                         <xsl:text> </xsl:text>
1116                                         <xsl:value-of select="text()"/>
1117                                 </classification>
1118                         </xsl:for-each>
1119                         <xsl:for-each select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
1120                                 <classification authority="lcc">
1121                                         <xsl:if test="../marc:subfield[@code='3']">
1122                                                 <xsl:attribute name="displayLabel"><xsl:value-of select="../marc:subfield[@code='3']"/></xsl:attribute>
1123                                         </xsl:if>
1124                                         <xsl:value-of select="text()"/>
1125                                 </classification>
1126                         </xsl:for-each>
1127                 </xsl:for-each>
1128                 <xsl:for-each select="marc:datafield[@tag=082]">
1129                         <classification authority="ddc">
1130                                 <xsl:if test="marc:subfield[@code='2']">
1131                                         <xsl:attribute name="edition"><xsl:value-of select="marc:subfield[@code='2']"/></xsl:attribute>
1132                                 </xsl:if>
1133                                 <xsl:call-template name="subfieldSelect">
1134                                         <xsl:with-param name="codes">ab</xsl:with-param>
1135                                 </xsl:call-template>
1136                         </classification>
1137                 </xsl:for-each>
1138                 <xsl:for-each select="marc:datafield[@tag=080]">
1139                         <classification authority="udc">
1140                                 <xsl:call-template name="subfieldSelect">
1141                                         <xsl:with-param name="codes">abx</xsl:with-param>
1142                                 </xsl:call-template>
1143                         </classification>
1144                 </xsl:for-each>
1145                 <xsl:for-each select="marc:datafield[@tag=060]">
1146                         <classification authority="nlm">
1147                                 <xsl:call-template name="subfieldSelect">
1148                                         <xsl:with-param name="codes">ab</xsl:with-param>
1149                                 </xsl:call-template>
1150                         </classification>
1151                 </xsl:for-each>
1152                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
1153                         <classification authority="sudocs">
1154                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1155                         </classification>
1156                 </xsl:for-each>
1157                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
1158                         <classification authority="candoc">
1159                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1160                         </classification>
1161                 </xsl:for-each>
1162                 <xsl:for-each select="marc:datafield[@tag=086]">
1163                         <classification>
1164                                 <xsl:attribute name="authority"><xsl:value-of select="marc:subfield[@code='2']"/></xsl:attribute>
1165                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1166                         </classification>
1167                 </xsl:for-each>
1168                 <xsl:for-each select="marc:datafield[@tag=084]">
1169                         <classification>
1170                                 <xsl:attribute name="authority"><xsl:value-of select="marc:subfield[@code='2']"/></xsl:attribute>
1171                                 <xsl:call-template name="subfieldSelect">
1172                                         <xsl:with-param name="codes">ab</xsl:with-param>
1173                                 </xsl:call-template>
1174                         </classification>
1175                 </xsl:for-each>
1176                 <xsl:for-each select="marc:datafield[@tag=440]">
1177                         <relatedItem type="series">
1178                                 <titleInfo>
1179                                         <title>
1180                                                 <xsl:call-template name="chopPunctuation">
1181                                                         <xsl:with-param name="chopString">
1182                                                                 <xsl:call-template name="subfieldSelect">
1183                                                                         <xsl:with-param name="codes">av</xsl:with-param>
1184                                                                 </xsl:call-template>
1185                                                         </xsl:with-param>
1186                                                 </xsl:call-template>
1187                                         </title>
1188                                         <xsl:call-template name="part"/>
1189                                 </titleInfo>
1190                         </relatedItem>
1191                 </xsl:for-each>
1192                 <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
1193                         <relatedItem type="series">
1194                                 <titleInfo>
1195                                         <title>
1196                                                 <xsl:call-template name="chopPunctuation">
1197                                                         <xsl:with-param name="chopString">
1198                                                                 <xsl:call-template name="subfieldSelect">
1199                                                                         <xsl:with-param name="codes">av</xsl:with-param>
1200                                                                 </xsl:call-template>
1201                                                         </xsl:with-param>
1202                                                 </xsl:call-template>
1203                                         </title>
1204                                         <xsl:call-template name="part"/>
1205                                 </titleInfo>
1206                         </relatedItem>
1207                 </xsl:for-each>
1208                 <xsl:for-each select="marc:datafield[@tag=510]">
1209                         <relatedItem type="isReferencedBy">
1210                                 <note>
1211                                         <xsl:call-template name="subfieldSelect">
1212                                                 <xsl:with-param name="codes">abcx3</xsl:with-param>
1213                                         </xsl:call-template>
1214                                 </note>
1215                         </relatedItem>
1216                 </xsl:for-each>
1217                 <xsl:for-each select="marc:datafield[@tag=534]">
1218                         <relatedItem type="original">
1219                                 <xsl:call-template name="relatedTitle"/>
1220                                 <xsl:call-template name="relatedName"/>
1221                                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
1222                                         <originInfo>
1223                                                 <xsl:for-each select="marc:subfield[@code='c']">
1224                                                         <publisher>
1225                                                                 <xsl:value-of select="."/>
1226                                                         </publisher>
1227                                                 </xsl:for-each>
1228                                                 <xsl:for-each select="marc:subfield[@code='b']">
1229                                                         <edition>
1230                                                                 <xsl:value-of select="."/>
1231                                                         </edition>
1232                                                 </xsl:for-each>
1233                                         </originInfo>
1234                                 </xsl:if>
1235                                 <xsl:call-template name="relatedIdentifierISSN"/>
1236                                 <xsl:for-each select="marc:subfield[@code='z']">
1237                                         <identifier type="isbn">
1238                                                 <xsl:value-of select="."/>
1239                                         </identifier>
1240                                 </xsl:for-each>
1241                                 <xsl:call-template name="relatedNote"/>
1242                         </relatedItem>
1243                 </xsl:for-each>
1244                 <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
1245                         <relatedItem>
1246                                 <xsl:call-template name="constituentOrRelatedType"/>
1247                                 <titleInfo>
1248                                         <title>
1249                                                 <xsl:call-template name="chopPunctuation">
1250                                                         <xsl:with-param name="chopString">
1251                                                                 <xsl:call-template name="specialSubfieldSelect">
1252                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1253                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1254                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1255                                                                 </xsl:call-template>
1256                                                         </xsl:with-param>
1257                                                 </xsl:call-template>
1258                                         </title>
1259                                         <xsl:call-template name="part"/>
1260                                 </titleInfo>
1261                                 <name type="personal">
1262                                         <namePart>
1263                                                 <xsl:call-template name="specialSubfieldSelect">
1264                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
1265                                                         <xsl:with-param name="axis">t</xsl:with-param>
1266                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
1267                                                 </xsl:call-template>
1268                                         </namePart>
1269                                         <xsl:call-template name="termsOfAddress"/>
1270                                         <xsl:call-template name="nameDate"/>
1271                                         <xsl:call-template name="role"/>
1272                                 </name>
1273                                 <xsl:call-template name="relatedForm"/>
1274                                 <xsl:call-template name="relatedIdentifierISSN"/>
1275                         </relatedItem>
1276                 </xsl:for-each>
1277                 <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
1278                         <relatedItem>
1279                                 <xsl:call-template name="constituentOrRelatedType"/>
1280                                 <titleInfo>
1281                                         <title>
1282                                                 <xsl:call-template name="chopPunctuation">
1283                                                         <xsl:with-param name="chopString">
1284                                                                 <xsl:call-template name="specialSubfieldSelect">
1285                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1286                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1287                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
1288                                                                 </xsl:call-template>
1289                                                         </xsl:with-param>
1290                                                 </xsl:call-template>
1291                                         </title>
1292                                         <xsl:call-template name="relatedPartNumName"/>
1293                                 </titleInfo>
1294                                 <name type="corporate">
1295                                         <xsl:for-each select="marc:subfield[@code='a']">
1296                                                 <namePart>
1297                                                         <xsl:value-of select="."/>
1298                                                 </namePart>
1299                                         </xsl:for-each>
1300                                         <xsl:for-each select="marc:subfield[@code='b']">
1301                                                 <namePart>
1302                                                         <xsl:value-of select="."/>
1303                                                 </namePart>
1304                                         </xsl:for-each>
1305                                         <xsl:variable name="tempNamePart">
1306                                                 <xsl:call-template name="specialSubfieldSelect">
1307                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
1308                                                         <xsl:with-param name="axis">t</xsl:with-param>
1309                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1310                                                 </xsl:call-template>
1311                                         </xsl:variable>
1312                                         <xsl:if test="normalize-space($tempNamePart)">
1313                                                 <namePart>
1314                                                         <xsl:value-of select="$tempNamePart"/>
1315                                                 </namePart>
1316                                         </xsl:if>
1317                                         <xsl:call-template name="role"/>
1318                                 </name>
1319                                 <xsl:call-template name="relatedForm"/>
1320                                 <xsl:call-template name="relatedIdentifierISSN"/>
1321                         </relatedItem>
1322                 </xsl:for-each>
1323                 <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
1324                         <relatedItem>
1325                                 <xsl:call-template name="constituentOrRelatedType"/>
1326                                 <titleInfo>
1327                                         <title>
1328                                                 <xsl:call-template name="chopPunctuation">
1329                                                         <xsl:with-param name="chopString">
1330                                                                 <xsl:call-template name="specialSubfieldSelect">
1331                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1332                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1333                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1334                                                                 </xsl:call-template>
1335                                                         </xsl:with-param>
1336                                                 </xsl:call-template>
1337                                         </title>
1338                                         <xsl:call-template name="relatedPartNumName"/>
1339                                 </titleInfo>
1340                                 <name type="conference">
1341                                         <namePart>
1342                                                 <xsl:call-template name="specialSubfieldSelect">
1343                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1344                                                         <xsl:with-param name="axis">t</xsl:with-param>
1345                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1346                                                 </xsl:call-template>
1347                                         </namePart>
1348                                 </name>
1349                                 <xsl:call-template name="relatedForm"/>
1350                                 <xsl:call-template name="relatedIdentifierISSN"/>
1351                         </relatedItem>
1352                 </xsl:for-each>
1353                 <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
1354                         <relatedItem>
1355                                 <xsl:call-template name="constituentOrRelatedType"/>
1356                                 <titleInfo>
1357                                         <title>
1358                                                 <xsl:call-template name="chopPunctuation">
1359                                                         <xsl:with-param name="chopString">
1360                                                                 <xsl:call-template name="subfieldSelect">
1361                                                                         <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1362                                                                 </xsl:call-template>
1363                                                         </xsl:with-param>
1364                                                 </xsl:call-template>
1365                                         </title>
1366                                         <xsl:call-template name="part"/>
1367                                 </titleInfo>
1368                                 <xsl:call-template name="relatedForm"/>
1369                                 <xsl:call-template name="relatedIdentifierISSN"/>
1370                         </relatedItem>
1371                 </xsl:for-each>
1372                 <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
1373                         <relatedItem>
1374                                 <xsl:call-template name="constituentOrRelatedType"/>
1375                                 <titleInfo>
1376                                         <title>
1377                                                 <xsl:call-template name="chopPunctuation">
1378                                                         <xsl:with-param name="chopString">
1379                                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1380                                                         </xsl:with-param>
1381                                                 </xsl:call-template>
1382                                         </title>
1383                                         <xsl:call-template name="part"/>
1384                                 </titleInfo>
1385                                 <xsl:call-template name="relatedForm"/>
1386                         </relatedItem>
1387                 </xsl:for-each>
1388                 <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
1389                         <relatedItem type="series">
1390                                 <xsl:call-template name="relatedItem76X-78X"/>
1391                         </relatedItem>
1392                 </xsl:for-each>
1393                 <xsl:for-each select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
1394                         <relatedItem>
1395                                 <xsl:call-template name="relatedItem76X-78X"/>
1396                         </relatedItem>
1397                 </xsl:for-each>
1398                 <xsl:for-each select="marc:datafield[@tag=775]">
1399                         <relatedItem type="otherVersion">
1400                                 <xsl:call-template name="relatedItem76X-78X"/>
1401                         </relatedItem>
1402                 </xsl:for-each>
1403                 <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
1404                         <relatedItem type="constituent">
1405                                 <xsl:call-template name="relatedItem76X-78X"/>
1406                         </relatedItem>
1407                 </xsl:for-each>
1408                 <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
1409                         <relatedItem type="host">
1410                                 <xsl:call-template name="relatedItem76X-78X"/>
1411                         </relatedItem>
1412                 </xsl:for-each>
1413                 <xsl:for-each select="marc:datafield[@tag=776]">
1414                         <relatedItem type="otherFormat">
1415                                 <xsl:call-template name="relatedItem76X-78X"/>
1416                         </relatedItem>
1417                 </xsl:for-each>
1418                 <xsl:for-each select="marc:datafield[@tag=780]">
1419                         <relatedItem type="preceding">
1420                                 <xsl:call-template name="relatedItem76X-78X"/>
1421                         </relatedItem>
1422                 </xsl:for-each>
1423                 <xsl:for-each select="marc:datafield[@tag=785]">
1424                         <relatedItem type="succeeding">
1425                                 <xsl:call-template name="relatedItem76X-78X"/>
1426                         </relatedItem>
1427                 </xsl:for-each>
1428                 <xsl:for-each select="marc:datafield[@tag=786]">
1429                         <relatedItem type="original">
1430                                 <xsl:call-template name="relatedItem76X-78X"/>
1431                         </relatedItem>
1432                 </xsl:for-each>
1433                 <xsl:for-each select="marc:datafield[@tag=800]">
1434                         <relatedItem type="series">
1435                                 <titleInfo>
1436                                         <title>
1437                                                 <xsl:call-template name="chopPunctuation">
1438                                                         <xsl:with-param name="chopString">
1439                                                                 <xsl:call-template name="specialSubfieldSelect">
1440                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1441                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1442                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1443                                                                 </xsl:call-template>
1444                                                         </xsl:with-param>
1445                                                 </xsl:call-template>
1446                                         </title>
1447                                         <xsl:call-template name="part"/>
1448                                 </titleInfo>
1449                                 <name type="personal">
1450                                         <namePart>
1451                                                 <xsl:call-template name="chopPunctuation">
1452                                                         <xsl:with-param name="chopString">
1453                                                                 <xsl:call-template name="specialSubfieldSelect">
1454                                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
1455                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1456                                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
1457                                                                 </xsl:call-template>
1458                                                         </xsl:with-param>
1459                                                 </xsl:call-template>
1460                                         </namePart>
1461                                         <xsl:call-template name="termsOfAddress"/>
1462                                         <xsl:call-template name="nameDate"/>
1463                                         <xsl:call-template name="role"/>
1464                                 </name>
1465                                 <xsl:call-template name="relatedForm"/>
1466                         </relatedItem>
1467                 </xsl:for-each>
1468                 <xsl:for-each select="marc:datafield[@tag=810]">
1469                         <relatedItem type="series">
1470                                 <titleInfo>
1471                                         <title>
1472                                                 <xsl:call-template name="chopPunctuation">
1473                                                         <xsl:with-param name="chopString">
1474                                                                 <xsl:call-template name="specialSubfieldSelect">
1475                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1476                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1477                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
1478                                                                 </xsl:call-template>
1479                                                         </xsl:with-param>
1480                                                 </xsl:call-template>
1481                                         </title>
1482                                         <xsl:call-template name="relatedPartNumName"/>
1483                                 </titleInfo>
1484                                 <name type="corporate">
1485                                         <xsl:for-each select="marc:subfield[@code='a']">
1486                                                 <namePart>
1487                                                         <xsl:value-of select="."/>
1488                                                 </namePart>
1489                                         </xsl:for-each>
1490                                         <xsl:for-each select="marc:subfield[@code='b']">
1491                                                 <namePart>
1492                                                         <xsl:value-of select="."/>
1493                                                 </namePart>
1494                                         </xsl:for-each>
1495                                         <namePart>
1496                                                 <xsl:call-template name="specialSubfieldSelect">
1497                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
1498                                                         <xsl:with-param name="axis">t</xsl:with-param>
1499                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1500                                                 </xsl:call-template>
1501                                         </namePart>
1502                                         <xsl:call-template name="role"/>
1503                                 </name>
1504                                 <xsl:call-template name="relatedForm"/>
1505                         </relatedItem>
1506                 </xsl:for-each>
1507                 <xsl:for-each select="marc:datafield[@tag=811]">
1508                         <relatedItem type="series">
1509                                 <titleInfo>
1510                                         <title>
1511                                                 <xsl:call-template name="chopPunctuation">
1512                                                         <xsl:with-param name="chopString">
1513                                                                 <xsl:call-template name="specialSubfieldSelect">
1514                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1515                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1516                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1517                                                                 </xsl:call-template>
1518                                                         </xsl:with-param>
1519                                                 </xsl:call-template>
1520                                         </title>
1521                                         <xsl:call-template name="relatedPartNumName"/>
1522                                 </titleInfo>
1523                                 <name type="conference">
1524                                         <namePart>
1525                                                 <xsl:call-template name="specialSubfieldSelect">
1526                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1527                                                         <xsl:with-param name="axis">t</xsl:with-param>
1528                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1529                                                 </xsl:call-template>
1530                                         </namePart>
1531                                         <xsl:call-template name="role"/>
1532                                 </name>
1533                                 <xsl:call-template name="relatedForm"/>
1534                         </relatedItem>
1535                 </xsl:for-each>
1536                 <xsl:for-each select="marc:datafield[@tag=830]">
1537                         <relatedItem type="series">
1538                                 <titleInfo>
1539                                         <title>
1540                                                 <xsl:call-template name="chopPunctuation">
1541                                                         <xsl:with-param name="chopString">
1542                                                                 <xsl:call-template name="subfieldSelect">
1543                                                                         <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1544                                                                 </xsl:call-template>
1545                                                         </xsl:with-param>
1546                                                 </xsl:call-template>
1547                                         </title>
1548                                         <xsl:call-template name="part"/>
1549                                 </titleInfo>
1550                                 <xsl:call-template name="relatedForm"/>
1551                         </relatedItem>
1552                 </xsl:for-each>
1553                 <xsl:for-each select="marc:datafield[@tag=856][@ind2=2]/marc:subfield[@code='q']">
1554                         <relatedItem>
1555                                 <internetMediaType>
1556                                         <xsl:value-of select="."/>
1557                                 </internetMediaType>
1558                         </relatedItem>
1559                 </xsl:for-each>
1560                 <xsl:for-each select="marc:datafield[@tag=020]">
1561                         <identifier type="isbn">
1562                                 <xsl:call-template name="isInvalid"/>
1563                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1564                         </identifier>
1565                 </xsl:for-each>
1566                 <xsl:for-each select="marc:datafield[@tag=024][@ind1=0]">
1567                         <identifier type="isrc">
1568                                 <xsl:call-template name="isInvalid"/>
1569                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1570                         </identifier>
1571                 </xsl:for-each>
1572                 <xsl:for-each select="marc:datafield[@tag=024][@ind1=2]">
1573                         <identifier type="ismn">
1574                                 <xsl:call-template name="isInvalid"/>
1575                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1576                         </identifier>
1577                 </xsl:for-each>
1578                 <xsl:for-each select="marc:datafield[@tag=022]">
1579                         <identifier type="issn">
1580                                 <xsl:call-template name="isInvalid"/>
1581                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1582                         </identifier>
1583                 </xsl:for-each>
1584                 <xsl:for-each select="marc:datafield[@tag=010]">
1585                         <identifier type="lccn">
1586                                 <xsl:call-template name="isInvalid"/>
1587                                 <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
1588                         </identifier>
1589                 </xsl:for-each>
1590                 <xsl:for-each select="marc:datafield[@tag=028]">
1591                         <identifier>
1592                                 <xsl:call-template name="isInvalid"/>
1593                                 <xsl:attribute name="type"><xsl:choose><xsl:when test="@ind1=0">issue number</xsl:when><xsl:when test="@ind1=1">matrix number</xsl:when><xsl:when test="@ind1=2">music plate</xsl:when><xsl:when test="@ind1=3">music publisher</xsl:when><xsl:when test="@ind1=4">videorecording identifier</xsl:when></xsl:choose></xsl:attribute>
1594                                 <xsl:call-template name="subfieldSelect">
1595                                         <xsl:with-param name="codes">
1596                                                 <xsl:choose>
1597                                                         <xsl:when test="@ind1=0">ba</xsl:when>
1598                                                         <xsl:otherwise>ab</xsl:otherwise>
1599                                                 </xsl:choose>
1600                                         </xsl:with-param>
1601                                 </xsl:call-template>
1602                         </identifier>
1603                 </xsl:for-each>
1604                 <xsl:for-each select="marc:datafield[@tag=024][@ind1='4']">
1605                         <identifier type="sici">
1606                                 <xsl:call-template name="isInvalid"/>
1607                                 <xsl:call-template name="subfieldSelect">
1608                                         <xsl:with-param name="codes">ab</xsl:with-param>
1609                                 </xsl:call-template>
1610                         </identifier>
1611                 </xsl:for-each>
1612                 <xsl:for-each select="marc:datafield[@tag=037]">
1613                         <identifier type="stock number">
1614                                 <xsl:call-template name="isInvalid"/>
1615                                 <xsl:call-template name="subfieldSelect">
1616                                         <xsl:with-param name="codes">ab</xsl:with-param>
1617                                 </xsl:call-template>
1618                         </identifier>
1619                 </xsl:for-each>
1620                 <xsl:for-each select="marc:datafield[@tag=856][marc:subfield[@code='u']]">
1621                         <identifier>
1622                                 <xsl:attribute name="type"><xsl:choose><xsl:when test="starts-with(marc:subfield[@code='u'],'urn:doi') or starts-with(marc:subfield[@code='u'],'doi')">doi</xsl:when><xsl:when test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl') or starts-with(marc:subfield[@code='u'],'http://hdl.loc.gov')">hdl</xsl:when><xsl:otherwise>uri</xsl:otherwise></xsl:choose></xsl:attribute>
1623                                 <xsl:choose>
1624                                         <xsl:when test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl') or starts-with(marc:subfield[@code='u'],'http://hdl.loc.gov') ">
1625                                                 <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"/>
1626                                         </xsl:when>
1627                                         <xsl:otherwise>
1628                                                 <xsl:value-of select="marc:subfield[@code='u']"/>
1629                                         </xsl:otherwise>
1630                                 </xsl:choose>
1631                         </identifier>
1632                         <xsl:if test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl')">
1633                                 <identifier type="hdl">
1634                                         <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
1635                                                 <xsl:attribute name="displayLabel"><xsl:call-template name="subfieldSelect"><xsl:with-param name="codes">y3z</xsl:with-param></xsl:call-template></xsl:attribute>
1636                                         </xsl:if>
1637                                         <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"/>
1638                                 </identifier>
1639                         </xsl:if>
1640                 </xsl:for-each>
1641                 <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]">
1642                         <identifier type="upc">
1643                                 <xsl:call-template name="isInvalid"/>
1644                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1645                         </identifier>
1646                 </xsl:for-each>
1647                 <!-- 1/04 fix added $y -->
1648                 <xsl:for-each select="marc:datafield[@tag=856][marc:subfield[@code='u']]">
1649                         <location>
1650                                 <url>
1651                                         <xsl:if test="marc:subfield[@code='y' or @code='3']">
1652                                                 <xsl:attribute name="displayLabel"><xsl:call-template name="subfieldSelect"><xsl:with-param name="codes">y3</xsl:with-param></xsl:call-template></xsl:attribute>
1653                                         </xsl:if>
1654                                         <xsl:value-of select="marc:subfield[@code='u']"/>
1655                                 </url>
1656                         </location>
1657                 </xsl:for-each>
1658                 <xsl:for-each select="marc:datafield[@tag=852]">
1659                         <location>
1660                                 <physicalLocation>
1661                                         <xsl:call-template name="displayLabel"/>
1662                                         <xsl:call-template name="subfieldSelect">
1663                                                 <xsl:with-param name="codes">abje</xsl:with-param>
1664                                         </xsl:call-template>
1665                                 </physicalLocation>
1666                         </location>
1667                 </xsl:for-each>
1668                 <xsl:for-each select="marc:datafield[@tag=506]">
1669                         <accessCondition type="restrictionOnAccess">
1670                                 <xsl:call-template name="subfieldSelect">
1671                                         <xsl:with-param name="codes">abcd35</xsl:with-param>
1672                                 </xsl:call-template>
1673                         </accessCondition>
1674                 </xsl:for-each>
1675                 <xsl:for-each select="marc:datafield[@tag=540]">
1676                         <accessCondition type="useAndReproduction">
1677                                 <xsl:call-template name="subfieldSelect">
1678                                         <xsl:with-param name="codes">abcde35</xsl:with-param>
1679                                 </xsl:call-template>
1680                         </accessCondition>
1681                 </xsl:for-each>
1682                 <recordInfo>
1683                         <xsl:for-each select="marc:datafield[@tag=040]">
1684                                 <recordContentSource authority="marcorg">
1685                                         <xsl:value-of select="marc:subfield[@code='a']"/>
1686                                 </recordContentSource>
1687                         </xsl:for-each>
1688                         <xsl:for-each select="marc:controlfield[@tag=008]">
1689                                 <recordCreationDate encoding="marc">
1690                                         <xsl:value-of select="substring(.,1,6)"/>
1691                                 </recordCreationDate>
1692                         </xsl:for-each>
1693                         <xsl:for-each select="marc:controlfield[@tag=005]">
1694                                 <recordChangeDate encoding="iso8601">
1695                                         <xsl:value-of select="."/>
1696                                 </recordChangeDate>
1697                         </xsl:for-each>
1698                         <xsl:for-each select="marc:controlfield[@tag=001]">
1699                                 <recordIdentifier>
1700                                         <xsl:if test="../marc:controlfield[@tag=003]">
1701                                                 <xsl:attribute name="source"><xsl:value-of select="../marc:controlfield[@tag=003]"/></xsl:attribute>
1702                                         </xsl:if>
1703                                         <xsl:value-of select="."/>
1704                                 </recordIdentifier>
1705                         </xsl:for-each>
1706                         <xsl:for-each select="marc:datafield[@tag=040]/marc:subfield[@code='b']">
1707                                 <languageOfCataloging>
1708                                         <languageTerm authority="iso639-2b" type="code">
1709                                                 <xsl:value-of select="."/>
1710                                         </languageTerm>
1711                                 </languageOfCataloging>
1712                         </xsl:for-each>
1713                 </recordInfo>
1714         </xsl:template>
1715         <xsl:template name="displayForm">
1716                 <xsl:for-each select="marc:subfield[@code='c']">
1717                         <displayForm>
1718                                 <xsl:value-of select="."/>
1719                         </displayForm>
1720                 </xsl:for-each>
1721         </xsl:template>
1722         <xsl:template name="affiliation">
1723                 <xsl:for-each select="marc:subfield[@code='u']">
1724                         <affiliation>
1725                                 <xsl:value-of select="."/>
1726                         </affiliation>
1727                 </xsl:for-each>
1728         </xsl:template>
1729         <xsl:template name="uri">
1730                 <xsl:for-each select="marc:subfield[@code='u']">
1731                         <xsl:attribute name="xlink:href"><xsl:value-of select="."/></xsl:attribute>
1732                 </xsl:for-each>
1733         </xsl:template>
1734         <xsl:template name="role">
1735                 <xsl:for-each select="marc:subfield[@code='e']">
1736                         <role>
1737                                 <roleTerm type="text">
1738                                         <xsl:value-of select="."/>
1739                                 </roleTerm>
1740                         </role>
1741                 </xsl:for-each>
1742                 <xsl:for-each select="marc:subfield[@code='4']">
1743                         <role>
1744                                 <roleTerm authority="marcrelator" type="code">
1745                                         <xsl:value-of select="."/>
1746                                 </roleTerm>
1747                         </role>
1748                 </xsl:for-each>
1749         </xsl:template>
1750         <xsl:template name="part">
1751                 <xsl:variable name="partNumber">
1752                         <xsl:call-template name="specialSubfieldSelect">
1753                                 <xsl:with-param name="axis">n</xsl:with-param>
1754                                 <xsl:with-param name="anyCodes">n</xsl:with-param>
1755                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
1756                         </xsl:call-template>
1757                 </xsl:variable>
1758                 <xsl:variable name="partName">
1759                         <xsl:call-template name="specialSubfieldSelect">
1760                                 <xsl:with-param name="axis">p</xsl:with-param>
1761                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
1762                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
1763                         </xsl:call-template>
1764                 </xsl:variable>
1765                 <xsl:if test="string-length(normalize-space($partNumber))">
1766                         <partNumber>
1767                                 <xsl:call-template name="chopPunctuation">
1768                                         <xsl:with-param name="chopString" select="$partNumber"/>
1769                                 </xsl:call-template>
1770                         </partNumber>
1771                 </xsl:if>
1772                 <xsl:if test="string-length(normalize-space($partName))">
1773                         <partName>
1774                                 <xsl:call-template name="chopPunctuation">
1775                                         <xsl:with-param name="chopString" select="$partName"/>
1776                                 </xsl:call-template>
1777                         </partName>
1778                 </xsl:if>
1779         </xsl:template>
1780         <xsl:template name="relatedPart">
1781                 <xsl:if test="@tag=773">
1782                         <xsl:for-each select="marc:subfield[@code='g']">
1783                                 <part>
1784                                         <text>
1785                                                 <xsl:value-of select="."/>
1786                                         </text>
1787                                 </part>
1788                         </xsl:for-each>
1789                         <xsl:for-each select="marc:subfield[@code='q']">
1790                                 <part>
1791                                         <xsl:call-template name="parsePart"/>
1792                                 </part>
1793                         </xsl:for-each>
1794                 </xsl:if>
1795         </xsl:template>
1796         <xsl:template name="relatedPartNumName">
1797                 <xsl:variable name="partNumber">
1798                         <xsl:call-template name="specialSubfieldSelect">
1799                                 <xsl:with-param name="axis">g</xsl:with-param>
1800                                 <xsl:with-param name="anyCodes">g</xsl:with-param>
1801                                 <xsl:with-param name="afterCodes">pst</xsl:with-param>
1802                         </xsl:call-template>
1803                 </xsl:variable>
1804                 <xsl:variable name="partName">
1805                         <xsl:call-template name="specialSubfieldSelect">
1806                                 <xsl:with-param name="axis">p</xsl:with-param>
1807                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
1808                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
1809                         </xsl:call-template>
1810                 </xsl:variable>
1811                 <xsl:if test="string-length(normalize-space($partNumber))">
1812                         <partNumber>
1813                                 <xsl:value-of select="$partNumber"/>
1814                         </partNumber>
1815                 </xsl:if>
1816                 <xsl:if test="string-length(normalize-space($partName))">
1817                         <partName>
1818                                 <xsl:value-of select="$partName"/>
1819                         </partName>
1820                 </xsl:if>
1821         </xsl:template>
1822         <xsl:template name="relatedName">
1823                 <xsl:for-each select="marc:subfield[@code='a']">
1824                         <name>
1825                                 <namePart>
1826                                         <xsl:value-of select="."/>
1827                                 </namePart>
1828                         </name>
1829                 </xsl:for-each>
1830         </xsl:template>
1831         <xsl:template name="relatedForm">
1832                 <xsl:for-each select="marc:subfield[@code='h']">
1833                         <physicalDescription>
1834                                 <form>
1835                                         <xsl:value-of select="."/>
1836                                 </form>
1837                         </physicalDescription>
1838                 </xsl:for-each>
1839         </xsl:template>
1840         <xsl:template name="relatedExtent">
1841                 <xsl:for-each select="marc:subfield[@code='h']">
1842                         <physicalDescription>
1843                                 <extent>
1844                                         <xsl:value-of select="."/>
1845                                 </extent>
1846                         </physicalDescription>
1847                 </xsl:for-each>
1848         </xsl:template>
1849         <xsl:template name="relatedNote">
1850                 <xsl:for-each select="marc:subfield[@code='n']">
1851                         <note>
1852                                 <xsl:value-of select="."/>
1853                         </note>
1854                 </xsl:for-each>
1855         </xsl:template>
1856         <xsl:template name="relatedSubject">
1857                 <xsl:for-each select="marc:subfield[@code='j']">
1858                         <subject>
1859                                 <temporal encoding="iso8601">
1860                                         <xsl:call-template name="chopPunctuation">
1861                                                 <xsl:with-param name="chopString" select="."/>
1862                                         </xsl:call-template>
1863                                 </temporal>
1864                         </subject>
1865                 </xsl:for-each>
1866         </xsl:template>
1867         <xsl:template name="relatedIdentifierISSN">
1868                 <xsl:for-each select="marc:subfield[@code='x']">
1869                         <identifier type="issn">
1870                                 <xsl:value-of select="."/>
1871                         </identifier>
1872                 </xsl:for-each>
1873         </xsl:template>
1874         <xsl:template name="relatedIdentifierLocal">
1875                 <xsl:for-each select="marc:subfield[@code='w']">
1876                         <identifier type="local">
1877                                 <xsl:value-of select="."/>
1878                         </identifier>
1879                 </xsl:for-each>
1880         </xsl:template>
1881         <xsl:template name="relatedIdentifier">
1882                 <xsl:for-each select="marc:subfield[@code='o']">
1883                         <identifier>
1884                                 <xsl:value-of select="."/>
1885                         </identifier>
1886                 </xsl:for-each>
1887         </xsl:template>
1888         <xsl:template name="relatedItem76X-78X">
1889                 <xsl:call-template name="displayLabel"/>
1890                 <xsl:call-template name="relatedTitle76X-78X"/>
1891                 <xsl:call-template name="relatedName"/>
1892                 <xsl:call-template name="relatedOriginInfo"/>
1893                 <xsl:call-template name="relatedLanguage"/>
1894                 <xsl:call-template name="relatedExtent"/>
1895                 <xsl:call-template name="relatedNote"/>
1896                 <xsl:call-template name="relatedSubject"/>
1897                 <xsl:call-template name="relatedIdentifier"/>
1898                 <xsl:call-template name="relatedIdentifierISSN"/>
1899                 <xsl:call-template name="relatedIdentifierLocal"/>
1900                 <xsl:call-template name="relatedPart"/>
1901         </xsl:template>
1902         <xsl:template name="subjectGeographicZ">
1903                 <geographic>
1904                         <xsl:call-template name="chopPunctuation">
1905                                 <xsl:with-param name="chopString" select="."/>
1906                         </xsl:call-template>
1907                 </geographic>
1908         </xsl:template>
1909         <xsl:template name="subjectTemporalY">
1910                 <temporal>
1911                         <xsl:call-template name="chopPunctuation">
1912                                 <xsl:with-param name="chopString" select="."/>
1913                         </xsl:call-template>
1914                 </temporal>
1915         </xsl:template>
1916         <xsl:template name="subjectTopic">
1917                 <topic>
1918                         <xsl:call-template name="chopPunctuation">
1919                                 <xsl:with-param name="chopString" select="."/>
1920                         </xsl:call-template>
1921                 </topic>
1922         </xsl:template>
1923         <xsl:template name="nameABCDN">
1924                 <xsl:for-each select="marc:subfield[@code='a']">
1925                         <namePart>
1926                                 <xsl:call-template name="chopPunctuation">
1927                                         <xsl:with-param name="chopString" select="."/>
1928                                 </xsl:call-template>
1929                         </namePart>
1930                 </xsl:for-each>
1931                 <xsl:for-each select="marc:subfield[@code='b']">
1932                         <namePart>
1933                                 <xsl:value-of select="."/>
1934                         </namePart>
1935                 </xsl:for-each>
1936                 <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
1937                         <namePart>
1938                                 <xsl:call-template name="subfieldSelect">
1939                                         <xsl:with-param name="codes">cdn</xsl:with-param>
1940                                 </xsl:call-template>
1941                         </namePart>
1942                 </xsl:if>
1943         </xsl:template>
1944         <xsl:template name="nameABCDQ">
1945                 <namePart>
1946                         <xsl:call-template name="chopPunctuation">
1947                                 <xsl:with-param name="chopString">
1948                                         <xsl:call-template name="subfieldSelect">
1949                                                 <xsl:with-param name="codes">aq</xsl:with-param>
1950                                         </xsl:call-template>
1951                                 </xsl:with-param>
1952                                 <xsl:with-param name="punctuation">
1953                                         <xsl:text>:,;/ </xsl:text>
1954                                 </xsl:with-param>
1955                         </xsl:call-template>
1956                 </namePart>
1957                 <xsl:call-template name="termsOfAddress"/>
1958                 <xsl:call-template name="nameDate"/>
1959         </xsl:template>
1960         <xsl:template name="nameACDEQ">
1961                 <namePart>
1962                         <xsl:call-template name="subfieldSelect">
1963                                 <xsl:with-param name="codes">acdeq</xsl:with-param>
1964                         </xsl:call-template>
1965                 </namePart>
1966         </xsl:template>
1967         <xsl:template name="constituentOrRelatedType">
1968                 <xsl:if test="@ind2=2">
1969                         <xsl:attribute name="type">constituent</xsl:attribute>
1970                 </xsl:if>
1971         </xsl:template>
1972         <xsl:template name="relatedTitle">
1973                 <xsl:for-each select="marc:subfield[@code='t']">
1974                         <titleInfo>
1975                                 <title>
1976                                         <xsl:call-template name="chopPunctuation">
1977                                                 <xsl:with-param name="chopString">
1978                                                         <xsl:value-of select="."/>
1979                                                 </xsl:with-param>
1980                                         </xsl:call-template>
1981                                 </title>
1982                         </titleInfo>
1983                 </xsl:for-each>
1984         </xsl:template>
1985         <xsl:template name="relatedTitle76X-78X">
1986                 <xsl:for-each select="marc:subfield[@code='t']">
1987                         <titleInfo>
1988                                 <title>
1989                                         <xsl:call-template name="chopPunctuation">
1990                                                 <xsl:with-param name="chopString">
1991                                                         <xsl:value-of select="."/>
1992                                                 </xsl:with-param>
1993                                         </xsl:call-template>
1994                                 </title>
1995                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
1996                                         <xsl:call-template name="relatedPartNumName"/>
1997                                 </xsl:if>
1998                         </titleInfo>
1999                 </xsl:for-each>
2000                 <xsl:for-each select="marc:subfield[@code='p']">
2001                         <titleInfo type="abbreviated">
2002                                 <title>
2003                                         <xsl:call-template name="chopPunctuation">
2004                                                 <xsl:with-param name="chopString">
2005                                                         <xsl:value-of select="."/>
2006                                                 </xsl:with-param>
2007                                         </xsl:call-template>
2008                                 </title>
2009                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2010                                         <xsl:call-template name="relatedPartNumName"/>
2011                                 </xsl:if>
2012                         </titleInfo>
2013                 </xsl:for-each>
2014                 <xsl:for-each select="marc:subfield[@code='s']">
2015                         <titleInfo type="uniform">
2016                                 <title>
2017                                         <xsl:call-template name="chopPunctuation">
2018                                                 <xsl:with-param name="chopString">
2019                                                         <xsl:value-of select="."/>
2020                                                 </xsl:with-param>
2021                                         </xsl:call-template>
2022                                 </title>
2023                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2024                                         <xsl:call-template name="relatedPartNumName"/>
2025                                 </xsl:if>
2026                         </titleInfo>
2027                 </xsl:for-each>
2028         </xsl:template>
2029         <xsl:template name="relatedOriginInfo">
2030                 <xsl:if test="marc:subfield[@code='b' or @code='d'] or marc:subfield[@code='f']">
2031                         <originInfo>
2032                                 <xsl:if test="@tag=775">
2033                                         <xsl:for-each select="marc:subfield[@code='f']">
2034                                                 <place>
2035                                                         <placeTerm>
2036                                                                 <xsl:attribute name="type">code</xsl:attribute>
2037                                                                 <xsl:attribute name="authority">marcgac</xsl:attribute>
2038                                                                 <xsl:value-of select="."/>
2039                                                         </placeTerm>
2040                                                 </place>
2041                                         </xsl:for-each>
2042                                 </xsl:if>
2043                                 <xsl:for-each select="marc:subfield[@code='d']">
2044                                         <publisher>
2045                                                 <xsl:value-of select="."/>
2046                                         </publisher>
2047                                 </xsl:for-each>
2048                                 <xsl:for-each select="marc:subfield[@code='b']">
2049                                         <edition>
2050                                                 <xsl:value-of select="."/>
2051                                         </edition>
2052                                 </xsl:for-each>
2053                         </originInfo>
2054                 </xsl:if>
2055         </xsl:template>
2056         <xsl:template name="relatedLanguage">
2057                 <xsl:for-each select="marc:subfield[@code='e']">
2058                         <xsl:call-template name="getLanguage">
2059                                 <xsl:with-param name="langString">
2060                                         <xsl:value-of select="."/>
2061                                 </xsl:with-param>
2062                         </xsl:call-template>
2063                 </xsl:for-each>
2064         </xsl:template>
2065         <xsl:template name="nameDate">
2066                 <xsl:for-each select="marc:subfield[@code='d']">
2067                         <namePart type="date">
2068                                 <xsl:call-template name="chopPunctuation">
2069                                         <xsl:with-param name="chopString" select="."/>
2070                                 </xsl:call-template>
2071                         </namePart>
2072                 </xsl:for-each>
2073         </xsl:template>
2074         <xsl:template name="subjectAuthority">
2075                 <xsl:if test="@ind2!=4">
2076                         <xsl:if test="@ind2!=' '">
2077                                 <xsl:if test="@ind2!=8">
2078                                         <xsl:if test="@ind2!=9">
2079                                                 <xsl:attribute name="authority"><xsl:choose><xsl:when test="@ind2=0">lcsh</xsl:when><xsl:when test="@ind2=1">lcshac</xsl:when><xsl:when test="@ind2=2">mesh</xsl:when><!-- 1/04 fix --><xsl:when test="@ind2=3">nal</xsl:when><xsl:when test="@ind2=5">csh</xsl:when><xsl:when test="@ind2=6">rvm</xsl:when><xsl:when test="@ind2=7"><xsl:value-of select="marc:subfield[@code='2']"/></xsl:when></xsl:choose></xsl:attribute>
2080                                         </xsl:if>
2081                                 </xsl:if>
2082                         </xsl:if>
2083                 </xsl:if>
2084         </xsl:template>
2085         <xsl:template name="subjectAnyOrder">
2086                 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
2087                         <xsl:choose>
2088                                 <xsl:when test="@code='v'">
2089                                         <xsl:call-template name="subjectTopic"/>
2090                                 </xsl:when>
2091                                 <xsl:when test="@code='x'">
2092                                         <xsl:call-template name="subjectTopic"/>
2093                                 </xsl:when>
2094                                 <xsl:when test="@code='y'">
2095                                         <xsl:call-template name="subjectTemporalY"/>
2096                                 </xsl:when>
2097                                 <xsl:when test="@code='z'">
2098                                         <xsl:call-template name="subjectGeographicZ"/>
2099                                 </xsl:when>
2100                         </xsl:choose>
2101                 </xsl:for-each>
2102         </xsl:template>
2103         <xsl:template name="specialSubfieldSelect">
2104                 <xsl:param name="anyCodes"/>
2105                 <xsl:param name="axis"/>
2106                 <xsl:param name="beforeCodes"/>
2107                 <xsl:param name="afterCodes"/>
2108                 <xsl:variable name="str">
2109                         <xsl:for-each select="marc:subfield">
2110                                 <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])">
2111                                         <xsl:value-of select="text()"/>
2112                                         <xsl:text> </xsl:text>
2113                                 </xsl:if>
2114                         </xsl:for-each>
2115                 </xsl:variable>
2116                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
2117         </xsl:template>
2118         <xsl:template match="marc:datafield[@tag=600]">
2119                 <subject>
2120                         <xsl:call-template name="subjectAuthority"/>
2121                         <name type="personal">
2122                                 <xsl:call-template name="termsOfAddress"/>
2123                                 <namePart>
2124                                         <xsl:call-template name="chopPunctuation">
2125                                                 <xsl:with-param name="chopString">
2126                                                         <xsl:call-template name="subfieldSelect">
2127                                                                 <xsl:with-param name="codes">aq</xsl:with-param>
2128                                                         </xsl:call-template>
2129                                                 </xsl:with-param>
2130                                         </xsl:call-template>
2131                                 </namePart>
2132                                 <xsl:call-template name="nameDate"/>
2133                                 <xsl:call-template name="affiliation"/>
2134                                 <xsl:call-template name="role"/>
2135                         </name>
2136                         <xsl:call-template name="subjectAnyOrder"/>
2137                 </subject>
2138         </xsl:template>
2139         <xsl:template match="marc:datafield[@tag=610]">
2140                 <subject>
2141                         <xsl:call-template name="subjectAuthority"/>
2142                         <name type="corporate">
2143                                 <xsl:for-each select="marc:subfield[@code='a']">
2144                                         <namePart>
2145                                                 <xsl:value-of select="."/>
2146                                         </namePart>
2147                                 </xsl:for-each>
2148                                 <xsl:for-each select="marc:subfield[@code='b']">
2149                                         <namePart>
2150                                                 <xsl:value-of select="."/>
2151                                         </namePart>
2152                                 </xsl:for-each>
2153                                 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
2154                                         <namePart>
2155                                                 <xsl:call-template name="subfieldSelect">
2156                                                         <xsl:with-param name="codes">cdnp</xsl:with-param>
2157                                                 </xsl:call-template>
2158                                         </namePart>
2159                                 </xsl:if>
2160                                 <xsl:call-template name="role"/>
2161                         </name>
2162                         <xsl:call-template name="subjectAnyOrder"/>
2163                 </subject>
2164         </xsl:template>
2165         <xsl:template match="marc:datafield[@tag=611]">
2166                 <subject>
2167                         <xsl:call-template name="subjectAuthority"/>
2168                         <name type="conference">
2169                                 <namePart>
2170                                         <xsl:call-template name="subfieldSelect">
2171                                                 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
2172                                         </xsl:call-template>
2173                                 </namePart>
2174                                 <xsl:for-each select="marc:subfield[@code='4']">
2175                                         <role>
2176                                                 <roleTerm authority="marcrelator" type="code">
2177                                                         <xsl:value-of select="."/>
2178                                                 </roleTerm>
2179                                         </role>
2180                                 </xsl:for-each>
2181                         </name>
2182                         <xsl:call-template name="subjectAnyOrder"/>
2183                 </subject>
2184         </xsl:template>
2185         <xsl:template match="marc:datafield[@tag=630]">
2186                 <subject>
2187                         <xsl:call-template name="subjectAuthority"/>
2188                         <titleInfo>
2189                                 <title>
2190                                         <xsl:call-template name="chopPunctuation">
2191                                                 <xsl:with-param name="chopString">
2192                                                         <xsl:call-template name="subfieldSelect">
2193                                                                 <xsl:with-param name="codes">adfhklor</xsl:with-param>
2194                                                         </xsl:call-template>
2195                                                 </xsl:with-param>
2196                                         </xsl:call-template>
2197                                         <xsl:call-template name="part"/>
2198                                 </title>
2199                         </titleInfo>
2200                         <xsl:call-template name="subjectAnyOrder"/>
2201                 </subject>
2202         </xsl:template>
2203         <xsl:template match="marc:datafield[@tag=650]">
2204                 <subject>
2205                         <xsl:call-template name="subjectAuthority"/>
2206                         <topic>
2207                                 <xsl:call-template name="chopPunctuation">
2208                                         <xsl:with-param name="chopString">
2209                                                 <xsl:call-template name="subfieldSelect">
2210                                                         <xsl:with-param name="codes">abcd</xsl:with-param>
2211                                                 </xsl:call-template>
2212                                         </xsl:with-param>
2213                                 </xsl:call-template>
2214                         </topic>
2215                         <xsl:call-template name="subjectAnyOrder"/>
2216                 </subject>
2217         </xsl:template>
2218         <xsl:template match="marc:datafield[@tag=651]">
2219                 <subject>
2220                         <xsl:call-template name="subjectAuthority"/>
2221                         <xsl:for-each select="marc:subfield[@code='a']">
2222                                 <geographic>
2223                                         <xsl:call-template name="chopPunctuation">
2224                                                 <xsl:with-param name="chopString" select="."/>
2225                                         </xsl:call-template>
2226                                 </geographic>
2227                         </xsl:for-each>
2228                         <xsl:call-template name="subjectAnyOrder"/>
2229                 </subject>
2230         </xsl:template>
2231         <xsl:template match="marc:datafield[@tag=653]">
2232                 <subject>
2233                         <xsl:for-each select="marc:subfield[@code='a']">
2234                                 <topic>
2235                                         <xsl:value-of select="."/>
2236                                 </topic>
2237                         </xsl:for-each>
2238                 </subject>
2239         </xsl:template>
2240         <xsl:template match="marc:datafield[@tag=656]">
2241                 <subject>
2242                         <xsl:if test="marc:subfield[@code=2]">
2243                                 <xsl:attribute name="authority"><xsl:value-of select="marc:subfield[@code=2]"/></xsl:attribute>
2244                         </xsl:if>
2245                         <occupation>
2246                                 <xsl:call-template name="chopPunctuation">
2247                                         <xsl:with-param name="chopString">
2248                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
2249                                         </xsl:with-param>
2250                                 </xsl:call-template>
2251                         </occupation>
2252                 </subject>
2253         </xsl:template>
2254         <xsl:template name="termsOfAddress">
2255                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
2256                         <namePart type="termsOfAddress">
2257                                 <xsl:call-template name="chopPunctuation">
2258                                         <xsl:with-param name="chopString">
2259                                                 <xsl:call-template name="subfieldSelect">
2260                                                         <xsl:with-param name="codes">bc</xsl:with-param>
2261                                                 </xsl:call-template>
2262                                         </xsl:with-param>
2263                                 </xsl:call-template>
2264                         </namePart>
2265                 </xsl:if>
2266         </xsl:template>
2267         <xsl:template name="displayLabel">
2268                 <xsl:if test="marc:subfield[@code='i']">
2269                         <xsl:attribute name="displayLabel"><xsl:value-of select="marc:subfield[@code='i']"/></xsl:attribute>
2270                 </xsl:if>
2271                 <xsl:if test="marc:subfield[@code='3']">
2272                         <xsl:attribute name="displayLabel"><xsl:value-of select="marc:subfield[@code='3']"/></xsl:attribute>
2273                 </xsl:if>
2274         </xsl:template>
2275         <xsl:template name="isInvalid">
2276                 <xsl:if test="marc:subfield[@code='z']">
2277                         <xsl:attribute name="invalid">yes</xsl:attribute>
2278                 </xsl:if>
2279         </xsl:template>
2280         <xsl:template name="subtitle">
2281                 <xsl:if test="marc:subfield[@code='b']">
2282                         <subTitle>
2283                                 <xsl:call-template name="chopPunctuation">
2284                                         <xsl:with-param name="chopString">
2285                                                 <xsl:value-of select="marc:subfield[@code='b']"/>
2286                                                 <!--<xsl:call-template name="subfieldSelect">
2287                                                         <xsl:with-param name="codes">b</xsl:with-param>                                                                 
2288                                                 </xsl:call-template>-->
2289                                         </xsl:with-param>
2290                                 </xsl:call-template>
2291                         </subTitle>
2292                 </xsl:if>
2293         </xsl:template>
2294         <xsl:template name="script">
2295                 <xsl:param name="scriptCode"/>
2296                 <xsl:attribute name="script"><xsl:choose><xsl:when test="$scriptCode='(3'">Arabic</xsl:when><xsl:when test="$scriptCode='(B'">Latin</xsl:when><xsl:when test="$scriptCode='$1'">Chinese, Japanese, Korean</xsl:when><xsl:when test="$scriptCode='(N'">Cyrillic</xsl:when><xsl:when test="$scriptCode='(2'">Hebrew</xsl:when><xsl:when test="$scriptCode='(S'">Greek</xsl:when></xsl:choose></xsl:attribute>
2297         </xsl:template>
2298         <xsl:template name="parsePart">
2299                 <!-- assumes 773$q= 1:2:3<4
2300                      with up to 3 levels and one optional start page
2301                 -->
2302                 <xsl:variable name="level1">
2303                         <xsl:choose>
2304                                 <xsl:when test="contains(text(),':')">
2305                                         <!-- 1:2 -->
2306                                         <xsl:value-of select="substring-before(text(),':')"/>
2307                                 </xsl:when>
2308                                 <xsl:when test="not(contains(text(),':'))">
2309                                         <!-- 1 or 1<3 -->
2310                                         <xsl:if test="contains(text(),'&lt;')">
2311                                                 <!-- 1<3 -->
2312                                                 <xsl:value-of select="substring-before(text(),'&lt;')"/>
2313                                         </xsl:if>
2314                                         <xsl:if test="not(contains(text(),'&lt;'))">
2315                                                 <!-- 1 -->
2316                                                 <xsl:value-of select="text()"/>
2317                                         </xsl:if>
2318                                 </xsl:when>
2319                         </xsl:choose>
2320                 </xsl:variable>
2321                 <xsl:variable name="sici2">
2322                         <xsl:choose>
2323                                 <xsl:when test="starts-with(substring-after(text(),$level1),':')">
2324                                         <xsl:value-of select="substring(substring-after(text(),$level1),2)"/>
2325                                 </xsl:when>
2326                                 <xsl:otherwise>
2327                                         <xsl:value-of select="substring-after(text(),$level1)"/>
2328                                 </xsl:otherwise>
2329                         </xsl:choose>
2330                 </xsl:variable>
2331                 <xsl:variable name="level2">
2332                         <xsl:choose>
2333                                 <xsl:when test="contains($sici2,':')">
2334                                         <!--  2:3<4  -->
2335                                         <xsl:value-of select="substring-before($sici2,':')"/>
2336                                 </xsl:when>
2337                                 <xsl:when test="contains($sici2,'&lt;')">
2338                                         <!-- 1: 2<4 -->
2339                                         <xsl:value-of select="substring-before($sici2,'&lt;')"/>
2340                                 </xsl:when>
2341                                 <xsl:otherwise>
2342                                         <xsl:value-of select="$sici2"/>
2343                                         <!-- 1:2 -->
2344                                 </xsl:otherwise>
2345                         </xsl:choose>
2346                 </xsl:variable>
2347                 <xsl:variable name="sici3">
2348                         <xsl:choose>
2349                                 <xsl:when test="starts-with(substring-after($sici2,$level2),':')">
2350                                         <xsl:value-of select="substring(substring-after($sici2,$level2),2)"/>
2351                                 </xsl:when>
2352                                 <xsl:otherwise>
2353                                         <xsl:value-of select="substring-after($sici2,$level2)"/>
2354                                 </xsl:otherwise>
2355                         </xsl:choose>
2356                 </xsl:variable>
2357                 <xsl:variable name="level3">
2358                         <xsl:choose>
2359                                 <xsl:when test="contains($sici3,'&lt;')">
2360                                         <!-- 2<4 -->
2361                                         <xsl:value-of select="substring-before($sici3,'&lt;')"/>
2362                                 </xsl:when>
2363                                 <xsl:otherwise>
2364                                         <xsl:value-of select="$sici3"/>
2365                                         <!-- 3 -->
2366                                 </xsl:otherwise>
2367                         </xsl:choose>
2368                 </xsl:variable>
2369                 <xsl:variable name="page">
2370                         <xsl:if test="contains(text(),'&lt;')">
2371                                 <xsl:value-of select="substring-after(text(),'&lt;')"/>
2372                         </xsl:if>
2373                 </xsl:variable>
2374                 <xsl:if test="$level1">
2375                         <detail level="1">
2376                                 <number>
2377                                         <xsl:value-of select="$level1"/>
2378                                 </number>
2379                         </detail>
2380                 </xsl:if>
2381                 <xsl:if test="$level2">
2382                         <detail level="2">
2383                                 <number>
2384                                         <xsl:value-of select="$level2"/>
2385                                 </number>
2386                         </detail>
2387                 </xsl:if>
2388                 <xsl:if test="$level3">
2389                         <detail level="3">
2390                                 <number>
2391                                         <xsl:value-of select="$level3"/>
2392                                 </number>
2393                         </detail>
2394                 </xsl:if>
2395                 <xsl:if test="$page">
2396                         <extent unit="page">
2397                                 <start>
2398                                         <xsl:value-of select="$page"/>
2399                                 </start>
2400                         </extent>
2401                 </xsl:if>
2402         </xsl:template>
2403         <xsl:template name="getLanguage">
2404                 <xsl:param name="langString"/>
2405                 <xsl:param name="controlField008-35-37"/>
2406                 <xsl:variable name="length" select="string-length($langString)"/>
2407                 <xsl:choose>
2408                         <xsl:when test="$length=0"/>
2409                         <xsl:when test="$controlField008-35-37=substring($langString,1,3)">
2410                                 <xsl:call-template name="getLanguage">
2411                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
2412                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
2413                                 </xsl:call-template>
2414                         </xsl:when>
2415                         <xsl:otherwise>
2416                                 <language>
2417                                         <languageTerm authority="iso639-2b" type="code">
2418                                                 <xsl:value-of select="substring($langString,1,3)"/>
2419                                         </languageTerm>
2420                                 </language>
2421                                 <xsl:call-template name="getLanguage">
2422                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
2423                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
2424                                 </xsl:call-template>
2425                         </xsl:otherwise>
2426                 </xsl:choose>
2427         </xsl:template>
2428         <xsl:template name="isoLanguage">
2429                 <xsl:param name="currentLanguage"/>
2430                 <xsl:param name="usedLanguages"/>
2431                 <xsl:param name="remainingLanguages"/>
2432                 <xsl:choose>
2433                         <xsl:when test="string-length($currentLanguage)=0"/>
2434                         <xsl:when test="not(contains($usedLanguages, $currentLanguage))">
2435                                 <language>
2436                                         <languageTerm authority="iso639-2b" type="code">
2437                                                 <xsl:if test="@code!='a'">
2438                                                         <xsl:attribute name="objectPart"><xsl:choose><xsl:when test="@code='b'">summary or subtitle</xsl:when><xsl:when test="@code='d'">sung or spoken text</xsl:when><xsl:when test="@code='e'">libretto</xsl:when><xsl:when test="@code='f'">table of contents</xsl:when><xsl:when test="@code='g'">accompanying material</xsl:when><xsl:when test="@code='h'">translation</xsl:when></xsl:choose></xsl:attribute>
2439                                                 </xsl:if>
2440                                                 <xsl:value-of select="$currentLanguage"/>
2441                                         </languageTerm>
2442                                 </language>
2443                                 <xsl:call-template name="isoLanguage">
2444                                         <xsl:with-param name="currentLanguage">
2445                                                 <xsl:value-of select="substring($remainingLanguages,1,3)"/>
2446                                         </xsl:with-param>
2447                                         <xsl:with-param name="usedLanguages">
2448                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
2449                                         </xsl:with-param>
2450                                         <xsl:with-param name="remainingLanguages">
2451                                                 <xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"/>
2452                                         </xsl:with-param>
2453                                 </xsl:call-template>
2454                         </xsl:when>
2455                         <xsl:otherwise>
2456                                 <xsl:call-template name="isoLanguage">
2457                                         <xsl:with-param name="currentLanguage">
2458                                                 <xsl:value-of select="substring($remainingLanguages,1,3)"/>
2459                                         </xsl:with-param>
2460                                         <xsl:with-param name="usedLanguages">
2461                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
2462                                         </xsl:with-param>
2463                                         <xsl:with-param name="remainingLanguages">
2464                                                 <xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"/>
2465                                         </xsl:with-param>
2466                                 </xsl:call-template>
2467                         </xsl:otherwise>
2468                 </xsl:choose>
2469         </xsl:template>
2470         <xsl:template name="chopBrackets">
2471                 <xsl:param name="chopString"/>
2472                 <xsl:variable name="string">
2473                         <xsl:call-template name="chopPunctuation">
2474                                 <xsl:with-param name="chopString" select="$chopString"/>
2475                         </xsl:call-template>
2476                 </xsl:variable>
2477                 <xsl:if test="substring($string, 1,1)='['">
2478                         <xsl:value-of select="substring($string,2, string-length($string)-2)"/>
2479                 </xsl:if>
2480                 <xsl:if test="substring($string, 1,1)!='['">
2481                         <xsl:value-of select="$string"/>
2482                 </xsl:if>
2483         </xsl:template>
2484         <xsl:template name="rfcLanguages">
2485                 <xsl:param name="nodeNum"/>
2486                 <xsl:param name="usedLanguages"/>
2487                 <xsl:param name="controlField008-35-37"/>
2488                 <xsl:variable name="currentLanguage" select="."/>
2489                 <xsl:choose>
2490                         <xsl:when test="not($currentLanguage)"/>
2491                         <xsl:when test="$currentLanguage!=$controlField008-35-37 and $currentLanguage!='rfc3066'">
2492                                 <xsl:if test="not(contains($usedLanguages,$currentLanguage))">
2493                                         <language>
2494                                                 <languageTerm authority="rfc3066" type="code">
2495                                                         <xsl:if test="@code!='a'">
2496                                                                 <xsl:attribute name="objectPart"><xsl:choose><xsl:when test="@code='b'">summary or subtitle</xsl:when><xsl:when test="@code='d'">sung or spoken text</xsl:when><xsl:when test="@code='e'">libretto</xsl:when><xsl:when test="@code='f'">table of contents</xsl:when><xsl:when test="@code='g'">accompanying material</xsl:when><xsl:when test="@code='h'">translation</xsl:when></xsl:choose></xsl:attribute>
2497                                                         </xsl:if>
2498                                                         <xsl:value-of select="$currentLanguage"/>
2499                                                 </languageTerm>
2500                                         </language>
2501                                 </xsl:if>
2502                         </xsl:when>
2503                         <xsl:otherwise>
2504                                 
2505                         </xsl:otherwise>
2506                 </xsl:choose>
2507         </xsl:template>
2508 </xsl:stylesheet>
2509
2510 <!-- Stylus Studio meta-information - (c) 2004-2005. Progress Software Corporation. All rights reserved.
2511 <metaInformation>
2512 <scenarios ><scenario default="no" name="Apr 02 Test" userelativepaths="yes" externalpreview="no" url="file:///n:/jackie/test_files/v3.xml" htmlbaseurl="" outputurl="file:///n:/temp/x.xml" processortype="xalan" useresolver="no" profilemode="0" profiledepth="" profilelength="" urlprofilexml="" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext="" validateoutput="no" validator="internal" customvalidator=""/><scenario default="no" name="v3Test1" userelativepaths="yes" externalpreview="no" url="file:///n:/jackie/test_files/v3.xml" htmlbaseurl="" outputurl="file:///n:/jackie/test_files/modsv3Converted.xml" processortype="internal" useresolver="no" profilemode="0" profiledepth="" profilelength="" urlprofilexml="" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext="" validateoutput="no" validator="internal" customvalidator=""/><scenario default="no" name="Scenario1" userelativepaths="yes" externalpreview="no" url="file:///n:/ckeith/DESKTOP/test.xml" htmlbaseurl="" outputurl="" processortype="xalan" useresolver="no" profilemode="0" profiledepth="" profilelength="" urlprofilexml="" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext="" validateoutput="no" validator="internal" customvalidator=""/><scenario default="no" name="Test" userelativepaths="yes" externalpreview="no" url="file:///n:/jackie/MARCXML/marcxmlfile.xml" htmlbaseurl="" outputurl="" processortype="xalan" useresolver="no" profilemode="0" profiledepth="" profilelength="" urlprofilexml="" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext="" validateoutput="no" validator="internal" customvalidator=""/><scenario default="yes" name="z3950 package test" userelativepaths="yes" externalpreview="no" url="d.xml" htmlbaseurl="" outputurl="" processortype="xalan" useresolver="no" profilemode="0" profiledepth="" profilelength="" urlprofilexml="" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext="" validateoutput="no" validator="internal" customvalidator=""/></scenarios><MapperMetaTag><MapperInfo srcSchemaPathIsRelative="yes" srcSchemaInterpretAsXML="no" destSchemaPath="" destSchemaRoot="" destSchemaPathIsRelative="yes" destSchemaInterpretAsXML="no"/><MapperBlockPosition></MapperBlockPosition><TemplateContext></TemplateContext><MapperFilter side="source"></MapperFilter></MapperMetaTag>
2513 </metaInformation>
2514 -->