]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/1102.data.mods-title-punctuation-change.sql
LP2045292 Color contrast for AngularJS patron bills
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 1102.data.mods-title-punctuation-change.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('1102', :eg_version);
4
5 update config.xml_transform set xslt = $XXXX$<?xml version="1.0" encoding="UTF-8"?>
6 <xsl:stylesheet xmlns="http://www.loc.gov/mods/v3" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xlink marc" version="1.0">
7         <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
8 <!--
9 Revision 1.14 - Fixed template isValid and fields 010, 020, 022, 024, 028, and 037 to output additional identifier elements
10   with corresponding @type and @invalid eq 'yes' when subfields z or y (in the case of 022) exist in the MARCXML ::: 2007/01/04 17:35:20 cred
11
12 Revision 1.13 - Changed order of output under cartographics to reflect schema  2006/11/28 tmee
13
14 Revision 1.12 - Updated to reflect MODS 3.2 Mapping  2006/10/11 tmee
15
16 Revision 1.11 - The attribute objectPart moved from <languageTerm> to <language>
17       2006/04/08  jrad
18
19 Revision 1.10 MODS 3.1 revisions to language and classification elements
20                                 (plus ability to find marc:collection embedded in wrapper elements such as SRU zs: wrappers)
21                                 2006/02/06  ggar
22
23 Revision 1.9 subfield $y was added to field 242 2004/09/02 10:57 jrad
24
25 Revision 1.8 Subject chopPunctuation expanded and attribute fixes 2004/08/12 jrad
26
27 Revision 1.7 2004/03/25 08:29 jrad
28
29 Revision 1.6 various validation fixes 2004/02/20 ntra
30
31 Revision 1.5  2003/10/02 16:18:58  ntra
32 MODS2 to MODS3 updates, language unstacking and
33 de-duping, chopPunctuation expanded
34
35 Revision 1.3  2003/04/03 00:07:19  ntra
36 Revision 1.3 Additional Changes not related to MODS Version 2.0 by ntra
37
38 Revision 1.2  2003/03/24 19:37:42  ckeith
39 Added Log Comment
40
41 -->
42         <xsl:template match="/">
43                 <xsl:choose>
44                         <xsl:when test="//marc:collection">
45                                 <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-2.xsd">
46                                         <xsl:for-each select="//marc:collection/marc:record">
47                                                 <mods version="3.2">
48                                                         <xsl:call-template name="marcRecord"/>
49                                                 </mods>
50                                         </xsl:for-each>
51                                 </modsCollection>
52                         </xsl:when>
53                         <xsl:otherwise>
54                                 <mods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
55                                         <xsl:for-each select="//marc:record">
56                                                 <xsl:call-template name="marcRecord"/>
57                                         </xsl:for-each>
58                                 </mods>
59                         </xsl:otherwise>
60                 </xsl:choose>
61         </xsl:template>
62         <xsl:template name="marcRecord">
63                 <xsl:variable name="leader" select="marc:leader"/>
64                 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
65                 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
66                 <xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
67                 <xsl:variable name="typeOf008">
68                         <xsl:choose>
69                                 <xsl:when test="$leader6='a'">
70                                         <xsl:choose>
71                                                 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
72                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
73                                         </xsl:choose>
74                                 </xsl:when>
75                                 <xsl:when test="$leader6='t'">BK</xsl:when>
76                                 <xsl:when test="$leader6='p'">MM</xsl:when>
77                                 <xsl:when test="$leader6='m'">CF</xsl:when>
78                                 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
79                                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
80                                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">MU</xsl:when>
81                         </xsl:choose>
82                 </xsl:variable>
83                 <xsl:for-each select="marc:datafield[@tag='245']">
84                         <titleInfo>
85                                 <xsl:variable name="title">
86                                         <xsl:choose>
87                                                 <xsl:when test="marc:subfield[@code='b']">
88                                                         <xsl:call-template name="specialSubfieldSelect">
89                                                                 <xsl:with-param name="axis">b</xsl:with-param>
90                                                                 <xsl:with-param name="beforeCodes">afgk</xsl:with-param>
91                                                         </xsl:call-template>
92                                                 </xsl:when>
93                                                 <xsl:otherwise>
94                                                         <xsl:call-template name="subfieldSelect">
95                                                                 <xsl:with-param name="codes">abfgk</xsl:with-param>
96                                                         </xsl:call-template>
97                                                 </xsl:otherwise>
98                                         </xsl:choose>
99                                 </xsl:variable>
100                                 <xsl:variable name="titleChop">
101                                         <xsl:call-template name="chopPunctuation">
102                                                 <xsl:with-param name="chopString">
103                                                         <xsl:value-of select="$title"/>
104                                                 </xsl:with-param>
105                                                 <xsl:with-param name="punctuation">
106                                                     <xsl:text>,;/ </xsl:text>
107                                                 </xsl:with-param>
108                                         </xsl:call-template>
109                                 </xsl:variable>
110                                 <xsl:choose>
111                                         <xsl:when test="@ind2>0">
112                                                 <nonSort>
113                                                         <xsl:value-of select="substring($titleChop,1,@ind2)"/>
114                                                 </nonSort>
115                                                 <title>
116                                                         <xsl:value-of select="substring($titleChop,@ind2+1)"/>
117                                                 </title>
118                                         </xsl:when>
119                                         <xsl:otherwise>
120                                                 <title>
121                                                         <xsl:value-of select="$titleChop"/>
122                                                 </title>
123                                         </xsl:otherwise>
124                                 </xsl:choose>
125                                 <xsl:if test="marc:subfield[@code='b']">
126                                         <subTitle>
127                                                 <xsl:call-template name="chopPunctuation">
128                                                         <xsl:with-param name="chopString">
129                                                                 <xsl:call-template name="specialSubfieldSelect">
130                                                                         <xsl:with-param name="axis">b</xsl:with-param>
131                                                                         <xsl:with-param name="anyCodes">b</xsl:with-param>
132                                                                         <xsl:with-param name="afterCodes">afgk</xsl:with-param>
133                                                                 </xsl:call-template>
134                                                         </xsl:with-param>
135                                                 </xsl:call-template>
136                                         </subTitle>
137                                 </xsl:if>
138                                 <xsl:call-template name="part"></xsl:call-template>
139                         </titleInfo>
140                         <!-- A form of title that ignores non-filing characters; useful
141                                  for not converting "L'Oreal" into "L' Oreal" at index time -->
142                         <titleNonfiling>
143                                 <title>
144                                         <xsl:call-template name="chopPunctuation">
145                                                 <xsl:with-param name="chopString">
146                                                         <xsl:call-template name="subfieldSelect">
147                                                                 <xsl:with-param name="codes">abfgk</xsl:with-param>
148                                                         </xsl:call-template>
149                                                 </xsl:with-param>
150                                         </xsl:call-template>
151                                 </title>
152                                 <xsl:call-template name="part"></xsl:call-template>
153                         </titleNonfiling>
154                         <!-- hybrid of titleInfo and titleNonfiling which will give us a preformatted string (for punctuation)
155                                  but also keep the nonSort stuff in a separate field (for sorting) -->
156                         <titleBrowse>
157                                 <xsl:variable name="titleBrowseChop">
158                                         <xsl:call-template name="chopPunctuation">
159                                                 <xsl:with-param name="chopString">
160                                                         <xsl:call-template name="subfieldSelect">
161                                                                 <xsl:with-param name="codes">abfgk</xsl:with-param>
162                                                         </xsl:call-template>
163                                                 </xsl:with-param>
164                                         </xsl:call-template>
165                                 </xsl:variable>
166                                 <xsl:choose>
167                                         <xsl:when test="@ind2>0">
168                                                 <nonSort>
169                                                         <xsl:value-of select="substring($titleBrowseChop,1,@ind2)"/>
170                                                 </nonSort>
171                                                 <title>
172                                                         <xsl:value-of select="substring($titleBrowseChop,@ind2+1)"/>
173                                                 </title>
174                                         </xsl:when>
175                                         <xsl:otherwise>
176                                                 <title>
177                                                         <xsl:value-of select="$titleBrowseChop"/>
178                                                 </title>
179                                         </xsl:otherwise>
180                                 </xsl:choose>
181                                 <xsl:call-template name="part"></xsl:call-template>
182                         </titleBrowse>
183                 </xsl:for-each>
184                 <xsl:for-each select="marc:datafield[@tag='210']">
185                         <titleInfo type="abbreviated">
186                                 <title>
187                                         <xsl:call-template name="chopPunctuation">
188                                                 <xsl:with-param name="chopString">
189                                                         <xsl:call-template name="subfieldSelect">
190                                                                 <xsl:with-param name="codes">a</xsl:with-param>
191                                                         </xsl:call-template>
192                                                 </xsl:with-param>
193                                         </xsl:call-template>
194                                 </title>
195                                 <xsl:call-template name="subtitle"/>
196                         </titleInfo>
197                 </xsl:for-each>
198                 <xsl:for-each select="marc:datafield[@tag='242']">
199                         <xsl:variable name="titleChop">
200                                 <xsl:call-template name="chopPunctuation">
201                                         <xsl:with-param name="chopString">
202                                                 <xsl:call-template name="subfieldSelect">
203                                                         <!-- 1/04 removed $h, b -->
204                                                         <xsl:with-param name="codes">a</xsl:with-param>
205                                                 </xsl:call-template>
206                                         </xsl:with-param>
207                                 </xsl:call-template>
208                         </xsl:variable>
209                         <titleInfo type="translated">
210                                 <!--09/01/04 Added subfield $y-->
211                                 <xsl:for-each select="marc:subfield[@code='y']">
212                                         <xsl:attribute name="lang">
213                                                 <xsl:value-of select="text()"/>
214                                         </xsl:attribute>
215                                 </xsl:for-each>
216                                 <title>
217                                         <xsl:value-of select="$titleChop" />
218                                 </title>
219                                 <!-- 1/04 fix -->
220                                 <xsl:call-template name="subtitle"/>
221                                 <xsl:call-template name="part"/>
222                         </titleInfo>
223                         <titleInfo type="translated-nfi">
224                                 <xsl:for-each select="marc:subfield[@code='y']">
225                                         <xsl:attribute name="lang">
226                                                 <xsl:value-of select="text()"/>
227                                         </xsl:attribute>
228                                 </xsl:for-each>
229                                 <xsl:choose>
230                                         <xsl:when test="@ind2>0">
231                                                 <nonSort>
232                                                         <xsl:value-of select="substring($titleChop,1,@ind2)"/>
233                                                 </nonSort>
234                                                 <title>
235                                                         <xsl:value-of select="substring($titleChop,@ind2+1)"/>
236                                                 </title>
237                                         </xsl:when>
238                                         <xsl:otherwise>
239                                                 <title>
240                                                         <xsl:value-of select="$titleChop" />
241                                                 </title>
242                                         </xsl:otherwise>
243                                 </xsl:choose>
244                                 <xsl:call-template name="subtitle"/>
245                                 <xsl:call-template name="part"/>
246                         </titleInfo>
247                 </xsl:for-each>
248                 <xsl:for-each select="marc:datafield[@tag='246']">
249                         <titleInfo type="alternative">
250                                 <xsl:for-each select="marc:subfield[@code='i']">
251                                         <xsl:attribute name="displayLabel">
252                                                 <xsl:value-of select="text()"/>
253                                         </xsl:attribute>
254                                 </xsl:for-each>
255                                 <title>
256                                         <xsl:call-template name="chopPunctuation">
257                                                 <xsl:with-param name="chopString">
258                                                         <xsl:call-template name="subfieldSelect">
259                                                                 <!-- 1/04 removed $h, $b -->
260                                                                 <xsl:with-param name="codes">af</xsl:with-param>
261                                                         </xsl:call-template>
262                                                 </xsl:with-param>
263                                         </xsl:call-template>
264                                 </title>
265                                 <xsl:call-template name="subtitle"/>
266                                 <xsl:call-template name="part"/>
267                         </titleInfo>
268                 </xsl:for-each>
269                 <xsl:for-each select="marc:datafield[@tag='130']|marc:datafield[@tag='240']|marc:datafield[@tag='730'][@ind2!='2']">
270                         <xsl:variable name="nfi">
271                                 <xsl:choose>
272                                         <xsl:when test="@tag='240'">
273                                                 <xsl:value-of select="@ind2"/>
274                                         </xsl:when>
275                                         <xsl:otherwise>
276                                                 <xsl:value-of select="@ind1"/>
277                                         </xsl:otherwise>
278                                 </xsl:choose>
279                         </xsl:variable>
280                         <xsl:variable name="titleChop">
281                                 <xsl:call-template name="uri" />
282                                 <xsl:variable name="str">
283                                         <xsl:for-each select="marc:subfield">
284                                                 <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'])))">
285                                                         <xsl:value-of select="text()"/>
286                                                         <xsl:text> </xsl:text>
287                                                 </xsl:if>
288                                         </xsl:for-each>
289                                 </xsl:variable>
290                                 <xsl:call-template name="chopPunctuation">
291                                         <xsl:with-param name="chopString">
292                                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
293                                         </xsl:with-param>
294                                 </xsl:call-template>
295                         </xsl:variable>
296                         <titleInfo type="uniform">
297                                 <title>
298                                         <xsl:value-of select="$titleChop"/>
299                                 </title>
300                                 <xsl:call-template name="part"/>
301                         </titleInfo>
302                         <titleInfo type="uniform-nfi">
303                                 <xsl:choose>
304                                         <xsl:when test="$nfi>0">
305                                                 <nonSort>
306                                                         <xsl:value-of select="substring($titleChop,1,$nfi)"/>
307                                                 </nonSort>
308                                                 <title>
309                                                         <xsl:value-of select="substring($titleChop,$nfi+1)"/>
310                                                 </title>
311                                         </xsl:when>
312                                         <xsl:otherwise>
313                                                 <title>
314                                                         <xsl:value-of select="$titleChop"/>
315                                                 </title>
316                                         </xsl:otherwise>
317                                 </xsl:choose>
318                                 <xsl:call-template name="part"/>
319                         </titleInfo>
320                 </xsl:for-each>
321                 <xsl:for-each select="marc:datafield[@tag='740'][@ind2!='2']">
322                         <xsl:variable name="titleChop">
323                                 <xsl:call-template name="chopPunctuation">
324                                         <xsl:with-param name="chopString">
325                                                 <xsl:call-template name="subfieldSelect">
326                                                         <xsl:with-param name="codes">ah</xsl:with-param>
327                                                 </xsl:call-template>
328                                         </xsl:with-param>
329                                 </xsl:call-template>
330                         </xsl:variable>
331                         <titleInfo type="alternative">
332                                 <title>
333                                         <xsl:value-of select="$titleChop" />
334                                 </title>
335                                 <xsl:call-template name="part"/>
336                         </titleInfo>
337                         <titleInfo type="alternative-nfi">
338                                 <xsl:choose>
339                                         <xsl:when test="@ind1>0">
340                                                 <nonSort>
341                                                         <xsl:value-of select="substring($titleChop,1,@ind1)"/>
342                                                 </nonSort>
343                                                 <title>
344                                                         <xsl:value-of select="substring($titleChop,@ind1+1)"/>
345                                                 </title>
346                                         </xsl:when>
347                                         <xsl:otherwise>
348                                                 <title>
349                                                         <xsl:value-of select="$titleChop" />
350                                                 </title>
351                                         </xsl:otherwise>
352                                 </xsl:choose>
353                                 <xsl:call-template name="part"/>
354                         </titleInfo>
355                 </xsl:for-each>
356                 <xsl:for-each select="marc:datafield[@tag='100']">
357                         <name type="personal">
358                                 <xsl:call-template name="uri" />
359                                 <xsl:call-template name="nameABCDQ"/>
360                                 <xsl:call-template name="affiliation"/>
361                                 <role>
362                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
363                                 </role>
364                                 <xsl:call-template name="role"/>
365                         </name>
366                 </xsl:for-each>
367                 <xsl:for-each select="marc:datafield[@tag='110']">
368                         <name type="corporate">
369                                 <xsl:call-template name="uri" />
370                                 <xsl:call-template name="nameABCDN"/>
371                                 <role>
372                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
373                                 </role>
374                                 <xsl:call-template name="role"/>
375                         </name>
376                 </xsl:for-each>
377                 <xsl:for-each select="marc:datafield[@tag='111']">
378                         <name type="conference">
379                                 <xsl:call-template name="uri" />
380                                 <xsl:call-template name="nameACDEQ"/>
381                                 <role>
382                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
383                                 </role>
384                                 <xsl:call-template name="role"/>
385                         </name>
386                 </xsl:for-each>
387                 <xsl:for-each select="marc:datafield[@tag='700'][not(marc:subfield[@code='t'])]">
388                         <name type="personal">
389                                 <xsl:call-template name="uri" />
390                                 <xsl:call-template name="nameABCDQ"/>
391                                 <xsl:call-template name="affiliation"/>
392                                 <xsl:call-template name="role"/>
393                         </name>
394                 </xsl:for-each>
395                 <xsl:for-each select="marc:datafield[@tag='710'][not(marc:subfield[@code='t'])]">
396                         <name type="corporate">
397                                 <xsl:call-template name="uri" />
398                                 <xsl:call-template name="nameABCDN"/>
399                                 <xsl:call-template name="role"/>
400                         </name>
401                 </xsl:for-each>
402                 <xsl:for-each select="marc:datafield[@tag='711'][not(marc:subfield[@code='t'])]">
403                         <name type="conference">
404                                 <xsl:call-template name="uri" />
405                                 <xsl:call-template name="nameACDEQ"/>
406                                 <xsl:call-template name="role"/>
407                         </name>
408                 </xsl:for-each>
409                 <xsl:for-each select="marc:datafield[@tag='720'][not(marc:subfield[@code='t'])]">
410                         <name>
411                                 <xsl:if test="@ind1=1">
412                                         <xsl:attribute name="type">
413                                                 <xsl:text>personal</xsl:text>
414                                         </xsl:attribute>
415                                 </xsl:if>
416                                 <namePart>
417                                         <xsl:value-of select="marc:subfield[@code='a']"/>
418                                 </namePart>
419                                 <xsl:call-template name="role"/>
420                         </name>
421                 </xsl:for-each>
422                 <typeOfResource>
423                         <xsl:if test="$leader7='c'">
424                                 <xsl:attribute name="collection">yes</xsl:attribute>
425                         </xsl:if>
426                         <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
427                                 <xsl:attribute name="manuscript">yes</xsl:attribute>
428                         </xsl:if>
429                         <xsl:choose>
430                                 <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
431                                 <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
432                                 <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
433                                 <xsl:when test="$leader6='i'">sound recording-nonmusical</xsl:when>
434                                 <xsl:when test="$leader6='j'">sound recording-musical</xsl:when>
435                                 <xsl:when test="$leader6='k'">still image</xsl:when>
436                                 <xsl:when test="$leader6='g'">moving image</xsl:when>
437                                 <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
438                                 <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
439                                 <xsl:when test="$leader6='p'">mixed material</xsl:when>
440                         </xsl:choose>
441                 </typeOfResource>
442                 <xsl:if test="substring($controlField008,26,1)='d'">
443                         <genre authority="marc">globe</genre>
444                 </xsl:if>
445                 <xsl:if test="marc:controlfield[@tag='007'][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
446                         <genre authority="marc">remote sensing image</genre>
447                 </xsl:if>
448                 <xsl:if test="$typeOf008='MP'">
449                         <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"></xsl:variable>
450                         <xsl:choose>
451                                 <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']">
452                                         <genre authority="marc">map</genre>
453                                 </xsl:when>
454                                 <xsl:when test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
455                                         <genre authority="marc">atlas</genre>
456                                 </xsl:when>
457                         </xsl:choose>
458                 </xsl:if>
459                 <xsl:if test="$typeOf008='SE'">
460                         <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"></xsl:variable>
461                         <xsl:choose>
462                                 <xsl:when test="$controlField008-21='d'">
463                                         <genre authority="marc">database</genre>
464                                 </xsl:when>
465                                 <xsl:when test="$controlField008-21='l'">
466                                         <genre authority="marc">loose-leaf</genre>
467                                 </xsl:when>
468                                 <xsl:when test="$controlField008-21='m'">
469                                         <genre authority="marc">series</genre>
470                                 </xsl:when>
471                                 <xsl:when test="$controlField008-21='n'">
472                                         <genre authority="marc">newspaper</genre>
473                                 </xsl:when>
474                                 <xsl:when test="$controlField008-21='p'">
475                                         <genre authority="marc">periodical</genre>
476                                 </xsl:when>
477                                 <xsl:when test="$controlField008-21='w'">
478                                         <genre authority="marc">web site</genre>
479                                 </xsl:when>
480                         </xsl:choose>
481                 </xsl:if>
482                 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
483                         <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"></xsl:variable>
484                         <xsl:choose>
485                                 <xsl:when test="contains($controlField008-24,'a')">
486                                         <genre authority="marc">abstract or summary</genre>
487                                 </xsl:when>
488                                 <xsl:when test="contains($controlField008-24,'b')">
489                                         <genre authority="marc">bibliography</genre>
490                                 </xsl:when>
491                                 <xsl:when test="contains($controlField008-24,'c')">
492                                         <genre authority="marc">catalog</genre>
493                                 </xsl:when>
494                                 <xsl:when test="contains($controlField008-24,'d')">
495                                         <genre authority="marc">dictionary</genre>
496                                 </xsl:when>
497                                 <xsl:when test="contains($controlField008-24,'e')">
498                                         <genre authority="marc">encyclopedia</genre>
499                                 </xsl:when>
500                                 <xsl:when test="contains($controlField008-24,'f')">
501                                         <genre authority="marc">handbook</genre>
502                                 </xsl:when>
503                                 <xsl:when test="contains($controlField008-24,'g')">
504                                         <genre authority="marc">legal article</genre>
505                                 </xsl:when>
506                                 <xsl:when test="contains($controlField008-24,'i')">
507                                         <genre authority="marc">index</genre>
508                                 </xsl:when>
509                                 <xsl:when test="contains($controlField008-24,'k')">
510                                         <genre authority="marc">discography</genre>
511                                 </xsl:when>
512                                 <xsl:when test="contains($controlField008-24,'l')">
513                                         <genre authority="marc">legislation</genre>
514                                 </xsl:when>
515                                 <xsl:when test="contains($controlField008-24,'m')">
516                                         <genre authority="marc">theses</genre>
517                                 </xsl:when>
518                                 <xsl:when test="contains($controlField008-24,'n')">
519                                         <genre authority="marc">survey of literature</genre>
520                                 </xsl:when>
521                                 <xsl:when test="contains($controlField008-24,'o')">
522                                         <genre authority="marc">review</genre>
523                                 </xsl:when>
524                                 <xsl:when test="contains($controlField008-24,'p')">
525                                         <genre authority="marc">programmed text</genre>
526                                 </xsl:when>
527                                 <xsl:when test="contains($controlField008-24,'q')">
528                                         <genre authority="marc">filmography</genre>
529                                 </xsl:when>
530                                 <xsl:when test="contains($controlField008-24,'r')">
531                                         <genre authority="marc">directory</genre>
532                                 </xsl:when>
533                                 <xsl:when test="contains($controlField008-24,'s')">
534                                         <genre authority="marc">statistics</genre>
535                                 </xsl:when>
536                                 <xsl:when test="contains($controlField008-24,'t')">
537                                         <genre authority="marc">technical report</genre>
538                                 </xsl:when>
539                                 <xsl:when test="contains($controlField008-24,'v')">
540                                         <genre authority="marc">legal case and case notes</genre>
541                                 </xsl:when>
542                                 <xsl:when test="contains($controlField008-24,'w')">
543                                         <genre authority="marc">law report or digest</genre>
544                                 </xsl:when>
545                                 <xsl:when test="contains($controlField008-24,'z')">
546                                         <genre authority="marc">treaty</genre>
547                                 </xsl:when>
548                         </xsl:choose>
549                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"></xsl:variable>
550                         <xsl:choose>
551                                 <xsl:when test="$controlField008-29='1'">
552                                         <genre authority="marc">conference publication</genre>
553                                 </xsl:when>
554                         </xsl:choose>
555                 </xsl:if>
556                 <xsl:if test="$typeOf008='CF'">
557                         <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"></xsl:variable>
558                         <xsl:choose>
559                                 <xsl:when test="$controlField008-26='a'">
560                                         <genre authority="marc">numeric data</genre>
561                                 </xsl:when>
562                                 <xsl:when test="$controlField008-26='e'">
563                                         <genre authority="marc">database</genre>
564                                 </xsl:when>
565                                 <xsl:when test="$controlField008-26='f'">
566                                         <genre authority="marc">font</genre>
567                                 </xsl:when>
568                                 <xsl:when test="$controlField008-26='g'">
569                                         <genre authority="marc">game</genre>
570                                 </xsl:when>
571                         </xsl:choose>
572                 </xsl:if>
573                 <xsl:if test="$typeOf008='BK'">
574                         <xsl:if test="substring($controlField008,25,1)='j'">
575                                 <genre authority="marc">patent</genre>
576                         </xsl:if>
577                         <xsl:if test="substring($controlField008,31,1)='1'">
578                                 <genre authority="marc">festschrift</genre>
579                         </xsl:if>
580                         <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"></xsl:variable>
581                         <xsl:if test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
582                                 <genre authority="marc">biography</genre>
583                         </xsl:if>
584                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"></xsl:variable>
585                         <xsl:choose>
586                                 <xsl:when test="$controlField008-33='e'">
587                                         <genre authority="marc">essay</genre>
588                                 </xsl:when>
589                                 <xsl:when test="$controlField008-33='d'">
590                                         <genre authority="marc">drama</genre>
591                                 </xsl:when>
592                                 <xsl:when test="$controlField008-33='c'">
593                                         <genre authority="marc">comic strip</genre>
594                                 </xsl:when>
595                                 <xsl:when test="$controlField008-33='l'">
596                                         <genre authority="marc">fiction</genre>
597                                 </xsl:when>
598                                 <xsl:when test="$controlField008-33='h'">
599                                         <genre authority="marc">humor, satire</genre>
600                                 </xsl:when>
601                                 <xsl:when test="$controlField008-33='i'">
602                                         <genre authority="marc">letter</genre>
603                                 </xsl:when>
604                                 <xsl:when test="$controlField008-33='f'">
605                                         <genre authority="marc">novel</genre>
606                                 </xsl:when>
607                                 <xsl:when test="$controlField008-33='j'">
608                                         <genre authority="marc">short story</genre>
609                                 </xsl:when>
610                                 <xsl:when test="$controlField008-33='s'">
611                                         <genre authority="marc">speech</genre>
612                                 </xsl:when>
613                         </xsl:choose>
614                 </xsl:if>
615                 <xsl:if test="$typeOf008='MU'">
616                         <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"></xsl:variable>
617                         <xsl:if test="contains($controlField008-30-31,'b')">
618                                 <genre authority="marc">biography</genre>
619                         </xsl:if>
620                         <xsl:if test="contains($controlField008-30-31,'c')">
621                                 <genre authority="marc">conference publication</genre>
622                         </xsl:if>
623                         <xsl:if test="contains($controlField008-30-31,'d')">
624                                 <genre authority="marc">drama</genre>
625                         </xsl:if>
626                         <xsl:if test="contains($controlField008-30-31,'e')">
627                                 <genre authority="marc">essay</genre>
628                         </xsl:if>
629                         <xsl:if test="contains($controlField008-30-31,'f')">
630                                 <genre authority="marc">fiction</genre>
631                         </xsl:if>
632                         <xsl:if test="contains($controlField008-30-31,'o')">
633                                 <genre authority="marc">folktale</genre>
634                         </xsl:if>
635                         <xsl:if test="contains($controlField008-30-31,'h')">
636                                 <genre authority="marc">history</genre>
637                         </xsl:if>
638                         <xsl:if test="contains($controlField008-30-31,'k')">
639                                 <genre authority="marc">humor, satire</genre>
640                         </xsl:if>
641                         <xsl:if test="contains($controlField008-30-31,'m')">
642                                 <genre authority="marc">memoir</genre>
643                         </xsl:if>
644                         <xsl:if test="contains($controlField008-30-31,'p')">
645                                 <genre authority="marc">poetry</genre>
646                         </xsl:if>
647                         <xsl:if test="contains($controlField008-30-31,'r')">
648                                 <genre authority="marc">rehearsal</genre>
649                         </xsl:if>
650                         <xsl:if test="contains($controlField008-30-31,'g')">
651                                 <genre authority="marc">reporting</genre>
652                         </xsl:if>
653                         <xsl:if test="contains($controlField008-30-31,'s')">
654                                 <genre authority="marc">sound</genre>
655                         </xsl:if>
656                         <xsl:if test="contains($controlField008-30-31,'l')">
657                                 <genre authority="marc">speech</genre>
658                         </xsl:if>
659                 </xsl:if>
660                 <xsl:if test="$typeOf008='VM'">
661                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"></xsl:variable>
662                         <xsl:choose>
663                                 <xsl:when test="$controlField008-33='a'">
664                                         <genre authority="marc">art original</genre>
665                                 </xsl:when>
666                                 <xsl:when test="$controlField008-33='b'">
667                                         <genre authority="marc">kit</genre>
668                                 </xsl:when>
669                                 <xsl:when test="$controlField008-33='c'">
670                                         <genre authority="marc">art reproduction</genre>
671                                 </xsl:when>
672                                 <xsl:when test="$controlField008-33='d'">
673                                         <genre authority="marc">diorama</genre>
674                                 </xsl:when>
675                                 <xsl:when test="$controlField008-33='f'">
676                                         <genre authority="marc">filmstrip</genre>
677                                 </xsl:when>
678                                 <xsl:when test="$controlField008-33='g'">
679                                         <genre authority="marc">legal article</genre>
680                                 </xsl:when>
681                                 <xsl:when test="$controlField008-33='i'">
682                                         <genre authority="marc">picture</genre>
683                                 </xsl:when>
684                                 <xsl:when test="$controlField008-33='k'">
685                                         <genre authority="marc">graphic</genre>
686                                 </xsl:when>
687                                 <xsl:when test="$controlField008-33='l'">
688                                         <genre authority="marc">technical drawing</genre>
689                                 </xsl:when>
690                                 <xsl:when test="$controlField008-33='m'">
691                                         <genre authority="marc">motion picture</genre>
692                                 </xsl:when>
693                                 <xsl:when test="$controlField008-33='n'">
694                                         <genre authority="marc">chart</genre>
695                                 </xsl:when>
696                                 <xsl:when test="$controlField008-33='o'">
697                                         <genre authority="marc">flash card</genre>
698                                 </xsl:when>
699                                 <xsl:when test="$controlField008-33='p'">
700                                         <genre authority="marc">microscope slide</genre>
701                                 </xsl:when>
702                                 <xsl:when test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
703                                         <genre authority="marc">model</genre>
704                                 </xsl:when>
705                                 <xsl:when test="$controlField008-33='r'">
706                                         <genre authority="marc">realia</genre>
707                                 </xsl:when>
708                                 <xsl:when test="$controlField008-33='s'">
709                                         <genre authority="marc">slide</genre>
710                                 </xsl:when>
711                                 <xsl:when test="$controlField008-33='t'">
712                                         <genre authority="marc">transparency</genre>
713                                 </xsl:when>
714                                 <xsl:when test="$controlField008-33='v'">
715                                         <genre authority="marc">videorecording</genre>
716                                 </xsl:when>
717                                 <xsl:when test="$controlField008-33='w'">
718                                         <genre authority="marc">toy</genre>
719                                 </xsl:when>
720                         </xsl:choose>
721                 </xsl:if>
722                 <xsl:for-each select="marc:datafield[@tag=655]">
723                         <genre authority="marc">
724                                 <xsl:attribute name="authority">
725                                         <xsl:value-of select="marc:subfield[@code='2']"/>
726                                 </xsl:attribute>
727                                 <xsl:call-template name="subfieldSelect">
728                                         <xsl:with-param name="codes">abvxyz</xsl:with-param>
729                                         <xsl:with-param name="delimeter">-</xsl:with-param>
730                                 </xsl:call-template>
731                         </genre>
732                 </xsl:for-each>
733                 <originInfo>
734                         <xsl:variable name="MARCpublicationCode" select="normalize-space(substring($controlField008,16,3))"></xsl:variable>
735                         <xsl:if test="translate($MARCpublicationCode,'|','')">
736                                 <place>
737                                         <placeTerm>
738                                                 <xsl:attribute name="type">code</xsl:attribute>
739                                                 <xsl:attribute name="authority">marccountry</xsl:attribute>
740                                                 <xsl:value-of select="$MARCpublicationCode"/>
741                                         </placeTerm>
742                                 </place>
743                         </xsl:if>
744                         <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
745                                 <place>
746                                         <placeTerm>
747                                                 <xsl:attribute name="type">code</xsl:attribute>
748                                                 <xsl:attribute name="authority">iso3166</xsl:attribute>
749                                                 <xsl:value-of select="."/>
750                                         </placeTerm>
751                                 </place>
752                         </xsl:for-each>
753                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a']">
754                                 <place>
755                                         <placeTerm>
756                                                 <xsl:attribute name="type">text</xsl:attribute>
757                                                 <xsl:call-template name="chopPunctuationFront">
758                                                         <xsl:with-param name="chopString">
759                                                                 <xsl:call-template name="chopPunctuation">
760                                                                         <xsl:with-param name="chopString" select="."/>
761                                                                 </xsl:call-template>
762                                                         </xsl:with-param>
763                                                 </xsl:call-template>
764                                         </placeTerm>
765                                 </place>
766                         </xsl:for-each>
767                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='m']">
768                                 <dateValid point="start">
769                                         <xsl:value-of select="."/>
770                                 </dateValid>
771                         </xsl:for-each>
772                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='n']">
773                                 <dateValid point="end">
774                                         <xsl:value-of select="."/>
775                                 </dateValid>
776                         </xsl:for-each>
777                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='j']">
778                                 <dateModified>
779                                         <xsl:value-of select="."/>
780                                 </dateModified>
781                         </xsl:for-each>
782                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='b' or @code='c' or @code='g']">
783                                 <xsl:choose>
784                                         <xsl:when test="@code='b'">
785                                                 <publisher>
786                                                         <xsl:call-template name="chopPunctuation">
787                                                                 <xsl:with-param name="chopString" select="."/>
788                                                                 <xsl:with-param name="punctuation">
789                                                                         <xsl:text>:,;/ </xsl:text>
790                                                                 </xsl:with-param>
791                                                         </xsl:call-template>
792                                                 </publisher>
793                                         </xsl:when>
794                                         <xsl:when test="@code='c'">
795                                                 <dateIssued>
796                                                         <xsl:call-template name="chopPunctuation">
797                                                                 <xsl:with-param name="chopString" select="."/>
798                                                         </xsl:call-template>
799                                                 </dateIssued>
800                                         </xsl:when>
801                                         <xsl:when test="@code='g'">
802                                                 <dateCreated>
803                                                         <xsl:value-of select="."/>
804                                                 </dateCreated>
805                                         </xsl:when>
806                                 </xsl:choose>
807                         </xsl:for-each>
808                         <xsl:variable name="dataField260c">
809                                 <xsl:call-template name="chopPunctuation">
810                                         <xsl:with-param name="chopString" select="marc:datafield[@tag=260]/marc:subfield[@code='c']"></xsl:with-param>
811                                 </xsl:call-template>
812                         </xsl:variable>
813                         <xsl:variable name="controlField008-7-10" select="normalize-space(substring($controlField008, 8, 4))"></xsl:variable>
814                         <xsl:variable name="controlField008-11-14" select="normalize-space(substring($controlField008, 12, 4))"></xsl:variable>
815                         <xsl:variable name="controlField008-6" select="normalize-space(substring($controlField008, 7, 1))"></xsl:variable>
816                         <xsl:if test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
817                                 <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
818                                         <dateIssued encoding="marc">
819                                                 <xsl:value-of select="$controlField008-7-10"/>
820                                         </dateIssued>
821                                 </xsl:if>
822                         </xsl:if>
823                         <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'">
824                                 <xsl:if test="$controlField008-7-10">
825                                         <dateIssued encoding="marc" point="start">
826                                                 <xsl:value-of select="$controlField008-7-10"/>
827                                         </dateIssued>
828                                 </xsl:if>
829                         </xsl:if>
830                         <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'">
831                                 <xsl:if test="$controlField008-11-14">
832                                         <dateIssued encoding="marc" point="end">
833                                                 <xsl:value-of select="$controlField008-11-14"/>
834                                         </dateIssued>
835                                 </xsl:if>
836                         </xsl:if>
837                         <xsl:if test="$controlField008-6='q'">
838                                 <xsl:if test="$controlField008-7-10">
839                                         <dateIssued encoding="marc" point="start" qualifier="questionable">
840                                                 <xsl:value-of select="$controlField008-7-10"/>
841                                         </dateIssued>
842                                 </xsl:if>
843                         </xsl:if>
844                         <xsl:if test="$controlField008-6='q'">
845                                 <xsl:if test="$controlField008-11-14">
846                                         <dateIssued encoding="marc" point="end" qualifier="questionable">
847                                                 <xsl:value-of select="$controlField008-11-14"/>
848                                         </dateIssued>
849                                 </xsl:if>
850                         </xsl:if>
851                         <xsl:if test="$controlField008-6='t'">
852                                 <xsl:if test="$controlField008-11-14">
853                                         <copyrightDate encoding="marc">
854                                                 <xsl:value-of select="$controlField008-11-14"/>
855                                         </copyrightDate>
856                                 </xsl:if>
857                         </xsl:if>
858                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
859                                 <dateCaptured encoding="iso8601">
860                                         <xsl:value-of select="."/>
861                                 </dateCaptured>
862                         </xsl:for-each>
863                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
864                                 <dateCaptured encoding="iso8601" point="start">
865                                         <xsl:value-of select="."/>
866                                 </dateCaptured>
867                         </xsl:for-each>
868                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
869                                 <dateCaptured encoding="iso8601" point="end">
870                                         <xsl:value-of select="."/>
871                                 </dateCaptured>
872                         </xsl:for-each>
873                         <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
874                                 <edition>
875                                         <xsl:value-of select="."/>
876                                 </edition>
877                         </xsl:for-each>
878                         <xsl:for-each select="marc:leader">
879                                 <issuance>
880                                         <xsl:choose>
881                                                 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">monographic</xsl:when>
882                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">continuing</xsl:when>
883                                         </xsl:choose>
884                                 </issuance>
885                         </xsl:for-each>
886                         <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
887                                 <frequency>
888                                         <xsl:call-template name="subfieldSelect">
889                                                 <xsl:with-param name="codes">ab</xsl:with-param>
890                                         </xsl:call-template>
891                                 </frequency>
892                         </xsl:for-each>
893                 </originInfo>
894                 <xsl:variable name="controlField008-35-37" select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"></xsl:variable>
895                 <xsl:if test="$controlField008-35-37">
896                         <language>
897                                 <languageTerm authority="iso639-2b" type="code">
898                                         <xsl:value-of select="substring($controlField008,36,3)"/>
899                                 </languageTerm>
900                         </language>
901                 </xsl:if>
902                 <xsl:for-each select="marc:datafield[@tag=041]">
903                         <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']">
904                                 <xsl:variable name="langCodes" select="."/>
905                                 <xsl:choose>
906                                         <xsl:when test="../marc:subfield[@code='2']='rfc3066'">
907                                                 <!-- not stacked but could be repeated -->
908                                                 <xsl:call-template name="rfcLanguages">
909                                                         <xsl:with-param name="nodeNum">
910                                                                 <xsl:value-of select="1"/>
911                                                         </xsl:with-param>
912                                                         <xsl:with-param name="usedLanguages">
913                                                                 <xsl:text></xsl:text>
914                                                         </xsl:with-param>
915                                                         <xsl:with-param name="controlField008-35-37">
916                                                                 <xsl:value-of select="$controlField008-35-37"></xsl:value-of>
917                                                         </xsl:with-param>
918                                                 </xsl:call-template>
919                                         </xsl:when>
920                                         <xsl:otherwise>
921                                                 <!-- iso -->
922                                                 <xsl:variable name="allLanguages">
923                                                         <xsl:copy-of select="$langCodes"></xsl:copy-of>
924                                                 </xsl:variable>
925                                                 <xsl:variable name="currentLanguage">
926                                                         <xsl:value-of select="substring($allLanguages,1,3)"></xsl:value-of>
927                                                 </xsl:variable>
928                                                 <xsl:call-template name="isoLanguage">
929                                                         <xsl:with-param name="currentLanguage">
930                                                                 <xsl:value-of select="substring($allLanguages,1,3)"></xsl:value-of>
931                                                         </xsl:with-param>
932                                                         <xsl:with-param name="remainingLanguages">
933                                                                 <xsl:value-of select="substring($allLanguages,4,string-length($allLanguages)-3)"></xsl:value-of>
934                                                         </xsl:with-param>
935                                                         <xsl:with-param name="usedLanguages">
936                                                                 <xsl:if test="$controlField008-35-37">
937                                                                         <xsl:value-of select="$controlField008-35-37"></xsl:value-of>
938                                                                 </xsl:if>
939                                                         </xsl:with-param>
940                                                 </xsl:call-template>
941                                         </xsl:otherwise>
942                                 </xsl:choose>
943                         </xsl:for-each>
944                 </xsl:for-each>
945                 <xsl:variable name="physicalDescription">
946                         <!--3.2 change tmee 007/11 -->
947                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a']">
948                                 <digitalOrigin>reformatted digital</digitalOrigin>
949                         </xsl:if>
950                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='b']">
951                                 <digitalOrigin>digitized microfilm</digitalOrigin>
952                         </xsl:if>
953                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='d']">
954                                 <digitalOrigin>digitized other analog</digitalOrigin>
955                         </xsl:if>
956                         <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"></xsl:variable>
957                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"></xsl:variable>
958                         <xsl:variable name="check008-23">
959                                 <xsl:if test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
960                                         <xsl:value-of select="true()"></xsl:value-of>
961                                 </xsl:if>
962                         </xsl:variable>
963                         <xsl:variable name="check008-29">
964                                 <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
965                                         <xsl:value-of select="true()"></xsl:value-of>
966                                 </xsl:if>
967                         </xsl:variable>
968                         <xsl:choose>
969                                 <xsl:when test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
970                                         <form authority="marcform">braille</form>
971                                 </xsl:when>
972                                 <xsl:when test="($controlField008-23=' ' and ($leader6='c' or $leader6='d')) or (($typeOf008='BK' or $typeOf008='SE') and ($controlField008-23=' ' or $controlField008='r'))">
973                                         <form authority="marcform">print</form>
974                                 </xsl:when>
975                                 <xsl:when test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
976                                         <form authority="marcform">electronic</form>
977                                 </xsl:when>
978                                 <xsl:when test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
979                                         <form authority="marcform">microfiche</form>
980                                 </xsl:when>
981                                 <xsl:when test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
982                                         <form authority="marcform">microfilm</form>
983                                 </xsl:when>
984                         </xsl:choose>
985                         <!-- 1/04 fix -->
986                         <xsl:if test="marc:datafield[@tag=130]/marc:subfield[@code='h']">
987                                 <form authority="gmd">
988                                         <xsl:call-template name="chopBrackets">
989                                                 <xsl:with-param name="chopString">
990                                                         <xsl:value-of select="marc:datafield[@tag=130]/marc:subfield[@code='h']"></xsl:value-of>
991                                                 </xsl:with-param>
992                                         </xsl:call-template>
993                                 </form>
994                         </xsl:if>
995                         <xsl:if test="marc:datafield[@tag=240]/marc:subfield[@code='h']">
996                                 <form authority="gmd">
997                                         <xsl:call-template name="chopBrackets">
998                                                 <xsl:with-param name="chopString">
999                                                         <xsl:value-of select="marc:datafield[@tag=240]/marc:subfield[@code='h']"></xsl:value-of>
1000                                                 </xsl:with-param>
1001                                         </xsl:call-template>
1002                                 </form>
1003                         </xsl:if>
1004                         <xsl:if test="marc:datafield[@tag=242]/marc:subfield[@code='h']">
1005                                 <form authority="gmd">
1006                                         <xsl:call-template name="chopBrackets">
1007                                                 <xsl:with-param name="chopString">
1008                                                         <xsl:value-of select="marc:datafield[@tag=242]/marc:subfield[@code='h']"></xsl:value-of>
1009                                                 </xsl:with-param>
1010                                         </xsl:call-template>
1011                                 </form>
1012                         </xsl:if>
1013                         <xsl:if test="marc:datafield[@tag=245]/marc:subfield[@code='h']">
1014                                 <form authority="gmd">
1015                                         <xsl:call-template name="chopBrackets">
1016                                                 <xsl:with-param name="chopString">
1017                                                         <xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='h']"></xsl:value-of>
1018                                                 </xsl:with-param>
1019                                         </xsl:call-template>
1020                                 </form>
1021                         </xsl:if>
1022                         <xsl:if test="marc:datafield[@tag=246]/marc:subfield[@code='h']">
1023                                 <form authority="gmd">
1024                                         <xsl:call-template name="chopBrackets">
1025                                                 <xsl:with-param name="chopString">
1026                                                         <xsl:value-of select="marc:datafield[@tag=246]/marc:subfield[@code='h']"></xsl:value-of>
1027                                                 </xsl:with-param>
1028                                         </xsl:call-template>
1029                                 </form>
1030                         </xsl:if>
1031                         <xsl:if test="marc:datafield[@tag=730]/marc:subfield[@code='h']">
1032                                 <form authority="gmd">
1033                                         <xsl:call-template name="chopBrackets">
1034                                                 <xsl:with-param name="chopString">
1035                                                         <xsl:value-of select="marc:datafield[@tag=730]/marc:subfield[@code='h']"></xsl:value-of>
1036                                                 </xsl:with-param>
1037                                         </xsl:call-template>
1038                                 </form>
1039                         </xsl:if>
1040                         <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
1041                                 <form>
1042                                         <xsl:value-of select="."></xsl:value-of>
1043                                 </form>
1044                         </xsl:for-each>
1045                         <xsl:for-each select="marc:controlfield[@tag=007][substring(text(),1,1)='c']">
1046                                 <xsl:choose>
1047                                         <xsl:when test="substring(text(),14,1)='a'">
1048                                                 <reformattingQuality>access</reformattingQuality>
1049                                         </xsl:when>
1050                                         <xsl:when test="substring(text(),14,1)='p'">
1051                                                 <reformattingQuality>preservation</reformattingQuality>
1052                                         </xsl:when>
1053                                         <xsl:when test="substring(text(),14,1)='r'">
1054                                                 <reformattingQuality>replacement</reformattingQuality>
1055                                         </xsl:when>
1056                                 </xsl:choose>
1057                         </xsl:for-each>
1058                         <!--3.2 change tmee 007/01 -->
1059                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='b']">
1060                                 <form authority="smd">chip cartridge</form>
1061                         </xsl:if>
1062                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='c']">
1063                                 <form authority="smd">computer optical disc cartridge</form>
1064                         </xsl:if>
1065                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='j']">
1066                                 <form authority="smd">magnetic disc</form>
1067                         </xsl:if>
1068                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='m']">
1069                                 <form authority="smd">magneto-optical disc</form>
1070                         </xsl:if>
1071                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='o']">
1072                                 <form authority="smd">optical disc</form>
1073                         </xsl:if>
1074                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='r']">
1075                                 <form authority="smd">remote</form>
1076                         </xsl:if>
1077                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='a']">
1078                                 <form authority="smd">tape cartridge</form>
1079                         </xsl:if>
1080                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='f']">
1081                                 <form authority="smd">tape cassette</form>
1082                         </xsl:if>
1083                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='h']">
1084                                 <form authority="smd">tape reel</form>
1085                         </xsl:if>
1086
1087                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='a']">
1088                                 <form authority="smd">celestial globe</form>
1089                         </xsl:if>
1090                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='e']">
1091                                 <form authority="smd">earth moon globe</form>
1092                         </xsl:if>
1093                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='b']">
1094                                 <form authority="smd">planetary or lunar globe</form>
1095                         </xsl:if>
1096                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='c']">
1097                                 <form authority="smd">terrestrial globe</form>
1098                         </xsl:if>
1099
1100                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='o'][substring(text(),2,1)='o']">
1101                                 <form authority="smd">kit</form>
1102                         </xsl:if>
1103
1104                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
1105                                 <form authority="smd">atlas</form>
1106                         </xsl:if>
1107                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='g']">
1108                                 <form authority="smd">diagram</form>
1109                         </xsl:if>
1110                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='j']">
1111                                 <form authority="smd">map</form>
1112                         </xsl:if>
1113                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
1114                                 <form authority="smd">model</form>
1115                         </xsl:if>
1116                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='k']">
1117                                 <form authority="smd">profile</form>
1118                         </xsl:if>
1119                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
1120                                 <form authority="smd">remote-sensing image</form>
1121                         </xsl:if>
1122                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='s']">
1123                                 <form authority="smd">section</form>
1124                         </xsl:if>
1125                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='y']">
1126                                 <form authority="smd">view</form>
1127                         </xsl:if>
1128
1129                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='a']">
1130                                 <form authority="smd">aperture card</form>
1131                         </xsl:if>
1132                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='e']">
1133                                 <form authority="smd">microfiche</form>
1134                         </xsl:if>
1135                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='f']">
1136                                 <form authority="smd">microfiche cassette</form>
1137                         </xsl:if>
1138                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='b']">
1139                                 <form authority="smd">microfilm cartridge</form>
1140                         </xsl:if>
1141                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='c']">
1142                                 <form authority="smd">microfilm cassette</form>
1143                         </xsl:if>
1144                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='d']">
1145                                 <form authority="smd">microfilm reel</form>
1146                         </xsl:if>
1147                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='g']">
1148                                 <form authority="smd">microopaque</form>
1149                         </xsl:if>
1150
1151                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='c']">
1152                                 <form authority="smd">film cartridge</form>
1153                         </xsl:if>
1154                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='f']">
1155                                 <form authority="smd">film cassette</form>
1156                         </xsl:if>
1157                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='r']">
1158                                 <form authority="smd">film reel</form>
1159                         </xsl:if>
1160
1161                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='n']">
1162                                 <form authority="smd">chart</form>
1163                         </xsl:if>
1164                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='c']">
1165                                 <form authority="smd">collage</form>
1166                         </xsl:if>
1167                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='d']">
1168                                 <form authority="smd">drawing</form>
1169                         </xsl:if>
1170                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='o']">
1171                                 <form authority="smd">flash card</form>
1172                         </xsl:if>
1173                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='e']">
1174                                 <form authority="smd">painting</form>
1175                         </xsl:if>
1176                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='f']">
1177                                 <form authority="smd">photomechanical print</form>
1178                         </xsl:if>
1179                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='g']">
1180                                 <form authority="smd">photonegative</form>
1181                         </xsl:if>
1182                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='h']">
1183                                 <form authority="smd">photoprint</form>
1184                         </xsl:if>
1185                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='i']">
1186                                 <form authority="smd">picture</form>
1187                         </xsl:if>
1188                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='j']">
1189                                 <form authority="smd">print</form>
1190                         </xsl:if>
1191                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='l']">
1192                                 <form authority="smd">technical drawing</form>
1193                         </xsl:if>
1194
1195                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='q'][substring(text(),2,1)='q']">
1196                                 <form authority="smd">notated music</form>
1197                         </xsl:if>
1198
1199                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='d']">
1200                                 <form authority="smd">filmslip</form>
1201                         </xsl:if>
1202                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='c']">
1203                                 <form authority="smd">filmstrip cartridge</form>
1204                         </xsl:if>
1205                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='o']">
1206                                 <form authority="smd">filmstrip roll</form>
1207                         </xsl:if>
1208                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='f']">
1209                                 <form authority="smd">other filmstrip type</form>
1210                         </xsl:if>
1211                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='s']">
1212                                 <form authority="smd">slide</form>
1213                         </xsl:if>
1214                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='t']">
1215                                 <form authority="smd">transparency</form>
1216                         </xsl:if>
1217                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='r'][substring(text(),2,1)='r']">
1218                                 <form authority="smd">remote-sensing image</form>
1219                         </xsl:if>
1220                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='e']">
1221                                 <form authority="smd">cylinder</form>
1222                         </xsl:if>
1223                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='q']">
1224                                 <form authority="smd">roll</form>
1225                         </xsl:if>
1226                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='g']">
1227                                 <form authority="smd">sound cartridge</form>
1228                         </xsl:if>
1229                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='s']">
1230                                 <form authority="smd">sound cassette</form>
1231                         </xsl:if>
1232                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='d']">
1233                                 <form authority="smd">sound disc</form>
1234                         </xsl:if>
1235                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='t']">
1236                                 <form authority="smd">sound-tape reel</form>
1237                         </xsl:if>
1238                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='i']">
1239                                 <form authority="smd">sound-track film</form>
1240                         </xsl:if>
1241                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='w']">
1242                                 <form authority="smd">wire recording</form>
1243                         </xsl:if>
1244
1245                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='c']">
1246                                 <form authority="smd">braille</form>
1247                         </xsl:if>
1248                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='b']">
1249                                 <form authority="smd">combination</form>
1250                         </xsl:if>
1251                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='a']">
1252                                 <form authority="smd">moon</form>
1253                         </xsl:if>
1254                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='d']">
1255                                 <form authority="smd">tactile, with no writing system</form>
1256                         </xsl:if>
1257
1258                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='c']">
1259                                 <form authority="smd">braille</form>
1260                         </xsl:if>
1261                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='b']">
1262                                 <form authority="smd">large print</form>
1263                         </xsl:if>
1264                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='a']">
1265                                 <form authority="smd">regular print</form>
1266                         </xsl:if>
1267                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='d']">
1268                                 <form authority="smd">text in looseleaf binder</form>
1269                         </xsl:if>
1270
1271                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='c']">
1272                                 <form authority="smd">videocartridge</form>
1273                         </xsl:if>
1274                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='f']">
1275                                 <form authority="smd">videocassette</form>
1276                         </xsl:if>
1277                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='d']">
1278                                 <form authority="smd">videodisc</form>
1279                         </xsl:if>
1280                         <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='r']">
1281                                 <form authority="smd">videoreel</form>
1282                         </xsl:if>
1283
1284                         <xsl:for-each select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)>1]">
1285                                 <internetMediaType>
1286                                         <xsl:value-of select="."></xsl:value-of>
1287                                 </internetMediaType>
1288                         </xsl:for-each>
1289                         <xsl:for-each select="marc:datafield[@tag=300]">
1290                                 <extent>
1291                                         <xsl:call-template name="subfieldSelect">
1292                                                 <xsl:with-param name="codes">abce</xsl:with-param>
1293                                         </xsl:call-template>
1294                                 </extent>
1295                         </xsl:for-each>
1296                 </xsl:variable>
1297                 <xsl:if test="string-length(normalize-space($physicalDescription))">
1298                         <physicalDescription>
1299                                 <xsl:copy-of select="$physicalDescription"></xsl:copy-of>
1300                         </physicalDescription>
1301                 </xsl:if>
1302                 <xsl:for-each select="marc:datafield[@tag=520]">
1303                         <abstract>
1304                                 <xsl:call-template name="uri"></xsl:call-template>
1305                                 <xsl:call-template name="subfieldSelect">
1306                                         <xsl:with-param name="codes">ab</xsl:with-param>
1307                                 </xsl:call-template>
1308                         </abstract>
1309                 </xsl:for-each>
1310                 <xsl:for-each select="marc:datafield[@tag=505]">
1311                         <tableOfContents>
1312                                 <xsl:call-template name="uri"></xsl:call-template>
1313                                 <xsl:call-template name="subfieldSelect">
1314                                         <xsl:with-param name="codes">agrt</xsl:with-param>
1315                                 </xsl:call-template>
1316                         </tableOfContents>
1317                 </xsl:for-each>
1318                 <xsl:for-each select="marc:datafield[@tag=521]">
1319                         <targetAudience>
1320                                 <xsl:call-template name="subfieldSelect">
1321                                         <xsl:with-param name="codes">ab</xsl:with-param>
1322                                 </xsl:call-template>
1323                         </targetAudience>
1324                 </xsl:for-each>
1325                 <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
1326                         <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"></xsl:variable>
1327                         <xsl:choose>
1328                                 <!-- 01/04 fix -->
1329                                 <xsl:when test="$controlField008-22='d'">
1330                                         <targetAudience authority="marctarget">adolescent</targetAudience>
1331                                 </xsl:when>
1332                                 <xsl:when test="$controlField008-22='e'">
1333                                         <targetAudience authority="marctarget">adult</targetAudience>
1334                                 </xsl:when>
1335                                 <xsl:when test="$controlField008-22='g'">
1336                                         <targetAudience authority="marctarget">general</targetAudience>
1337                                 </xsl:when>
1338                                 <xsl:when test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
1339                                         <targetAudience authority="marctarget">juvenile</targetAudience>
1340                                 </xsl:when>
1341                                 <xsl:when test="$controlField008-22='a'">
1342                                         <targetAudience authority="marctarget">preschool</targetAudience>
1343                                 </xsl:when>
1344                                 <xsl:when test="$controlField008-22='f'">
1345                                         <targetAudience authority="marctarget">specialized</targetAudience>
1346                                 </xsl:when>
1347                         </xsl:choose>
1348                 </xsl:if>
1349                 <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
1350                         <note type="statement of responsibility">
1351                                 <xsl:value-of select="."></xsl:value-of>
1352                         </note>
1353                 </xsl:for-each>
1354                 <xsl:for-each select="marc:datafield[@tag=500]">
1355                         <note>
1356                                 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1357                                 <xsl:call-template name="uri"></xsl:call-template>
1358                         </note>
1359                 </xsl:for-each>
1360
1361                 <!--3.2 change tmee additional note fields-->
1362
1363                 <xsl:for-each select="marc:datafield[@tag=502]">
1364                         <note type="thesis">
1365                                 <xsl:call-template name="uri"/>
1366                                 <xsl:variable name="str">
1367                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1368                                                 <xsl:value-of select="."/>
1369                                                 <xsl:text> </xsl:text>
1370                                         </xsl:for-each>
1371                                 </xsl:variable>
1372                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1373                         </note>
1374                 </xsl:for-each>
1375
1376                 <xsl:for-each select="marc:datafield[@tag=504]">
1377                         <note type="bibliography">
1378                                 <xsl:call-template name="uri"/>
1379                                 <xsl:variable name="str">
1380                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1381                                                 <xsl:value-of select="."/>
1382                                                 <xsl:text> </xsl:text>
1383                                         </xsl:for-each>
1384                                 </xsl:variable>
1385                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1386                         </note>
1387                 </xsl:for-each>
1388
1389                 <xsl:for-each select="marc:datafield[@tag=508]">
1390                         <note type="creation/production credits">
1391                                 <xsl:call-template name="uri"/>
1392                                 <xsl:variable name="str">
1393                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1394                                                 <xsl:value-of select="."/>
1395                                                 <xsl:text> </xsl:text>
1396                                         </xsl:for-each>
1397                                 </xsl:variable>
1398                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1399                         </note>
1400                 </xsl:for-each>
1401
1402                 <xsl:for-each select="marc:datafield[@tag=506]">
1403                         <note type="restrictions">
1404                                 <xsl:call-template name="uri"></xsl:call-template>
1405                                 <xsl:variable name="str">
1406                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1407                                                 <xsl:value-of select="."></xsl:value-of>
1408                                                 <xsl:text> </xsl:text>
1409                                         </xsl:for-each>
1410                                 </xsl:variable>
1411                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1412                         </note>
1413                 </xsl:for-each>
1414
1415                 <xsl:for-each select="marc:datafield[@tag=510]">
1416                         <note  type="citation/reference">
1417                                 <xsl:call-template name="uri"></xsl:call-template>
1418                                 <xsl:variable name="str">
1419                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1420                                                 <xsl:value-of select="."></xsl:value-of>
1421                                                 <xsl:text> </xsl:text>
1422                                         </xsl:for-each>
1423                                 </xsl:variable>
1424                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1425                         </note>
1426                 </xsl:for-each>
1427
1428
1429                 <xsl:for-each select="marc:datafield[@tag=511]">
1430                         <note type="performers">
1431                                 <xsl:call-template name="uri"></xsl:call-template>
1432                                 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1433                         </note>
1434                 </xsl:for-each>
1435                 <xsl:for-each select="marc:datafield[@tag=518]">
1436                         <note type="venue">
1437                                 <xsl:call-template name="uri"></xsl:call-template>
1438                                 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1439                         </note>
1440                 </xsl:for-each>
1441
1442                 <xsl:for-each select="marc:datafield[@tag=530]">
1443                         <note  type="additional physical form">
1444                                 <xsl:call-template name="uri"></xsl:call-template>
1445                                 <xsl:variable name="str">
1446                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1447                                                 <xsl:value-of select="."></xsl:value-of>
1448                                                 <xsl:text> </xsl:text>
1449                                         </xsl:for-each>
1450                                 </xsl:variable>
1451                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1452                         </note>
1453                 </xsl:for-each>
1454
1455                 <xsl:for-each select="marc:datafield[@tag=533]">
1456                         <note  type="reproduction">
1457                                 <xsl:call-template name="uri"></xsl:call-template>
1458                                 <xsl:variable name="str">
1459                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1460                                                 <xsl:value-of select="."></xsl:value-of>
1461                                                 <xsl:text> </xsl:text>
1462                                         </xsl:for-each>
1463                                 </xsl:variable>
1464                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1465                         </note>
1466                 </xsl:for-each>
1467
1468                 <xsl:for-each select="marc:datafield[@tag=534]">
1469                         <note  type="original version">
1470                                 <xsl:call-template name="uri"></xsl:call-template>
1471                                 <xsl:variable name="str">
1472                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1473                                                 <xsl:value-of select="."></xsl:value-of>
1474                                                 <xsl:text> </xsl:text>
1475                                         </xsl:for-each>
1476                                 </xsl:variable>
1477                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1478                         </note>
1479                 </xsl:for-each>
1480
1481                 <xsl:for-each select="marc:datafield[@tag=538]">
1482                         <note  type="system details">
1483                                 <xsl:call-template name="uri"></xsl:call-template>
1484                                 <xsl:variable name="str">
1485                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1486                                                 <xsl:value-of select="."></xsl:value-of>
1487                                                 <xsl:text> </xsl:text>
1488                                         </xsl:for-each>
1489                                 </xsl:variable>
1490                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1491                         </note>
1492                 </xsl:for-each>
1493
1494                 <xsl:for-each select="marc:datafield[@tag=583]">
1495                         <note type="action">
1496                                 <xsl:call-template name="uri"></xsl:call-template>
1497                                 <xsl:variable name="str">
1498                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1499                                                 <xsl:value-of select="."></xsl:value-of>
1500                                                 <xsl:text> </xsl:text>
1501                                         </xsl:for-each>
1502                                 </xsl:variable>
1503                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1504                         </note>
1505                 </xsl:for-each>
1506
1507
1508
1509
1510
1511                 <xsl:for-each select="marc:datafield[@tag=501 or @tag=507 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=535 or @tag=536 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=584 or @tag=585 or @tag=586]">
1512                         <note>
1513                                 <xsl:call-template name="uri"></xsl:call-template>
1514                                 <xsl:variable name="str">
1515                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1516                                                 <xsl:value-of select="."></xsl:value-of>
1517                                                 <xsl:text> </xsl:text>
1518                                         </xsl:for-each>
1519                                 </xsl:variable>
1520                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1521                         </note>
1522                 </xsl:for-each>
1523                 <xsl:for-each select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
1524                         <subject>
1525                                 <cartographics>
1526                                         <coordinates>
1527                                                 <xsl:call-template name="subfieldSelect">
1528                                                         <xsl:with-param name="codes">defg</xsl:with-param>
1529                                                 </xsl:call-template>
1530                                         </coordinates>
1531                                 </cartographics>
1532                         </subject>
1533                 </xsl:for-each>
1534                 <xsl:for-each select="marc:datafield[@tag=043]">
1535                         <subject>
1536                                 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1537                                         <geographicCode>
1538                                                 <xsl:attribute name="authority">
1539                                                         <xsl:if test="@code='a'">
1540                                                                 <xsl:text>marcgac</xsl:text>
1541                                                         </xsl:if>
1542                                                         <xsl:if test="@code='b'">
1543                                                                 <xsl:value-of select="following-sibling::marc:subfield[@code=2]"></xsl:value-of>
1544                                                         </xsl:if>
1545                                                         <xsl:if test="@code='c'">
1546                                                                 <xsl:text>iso3166</xsl:text>
1547                                                         </xsl:if>
1548                                                 </xsl:attribute>
1549                                                 <xsl:value-of select="self::marc:subfield"></xsl:value-of>
1550                                         </geographicCode>
1551                                 </xsl:for-each>
1552                         </subject>
1553                 </xsl:for-each>
1554                 <!-- tmee 2006/11/27 -->
1555                 <xsl:for-each select="marc:datafield[@tag=255]">
1556                         <subject>
1557                                 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1558                                 <cartographics>
1559                                         <xsl:if test="@code='a'">
1560                                                 <scale>
1561                                                         <xsl:value-of select="."></xsl:value-of>
1562                                                 </scale>
1563                                         </xsl:if>
1564                                         <xsl:if test="@code='b'">
1565                                                 <projection>
1566                                                         <xsl:value-of select="."></xsl:value-of>
1567                                                 </projection>
1568                                         </xsl:if>
1569                                         <xsl:if test="@code='c'">
1570                                                 <coordinates>
1571                                                         <xsl:value-of select="."></xsl:value-of>
1572                                                 </coordinates>
1573                                         </xsl:if>
1574                                 </cartographics>
1575                                 </xsl:for-each>
1576                         </subject>
1577                 </xsl:for-each>
1578
1579                 <xsl:apply-templates select="marc:datafield[653 >= @tag and @tag >= 600]"></xsl:apply-templates>
1580                 <xsl:apply-templates select="marc:datafield[@tag=656]"></xsl:apply-templates>
1581                 <xsl:for-each select="marc:datafield[@tag=752]">
1582                         <subject>
1583                                 <hierarchicalGeographic>
1584                                         <xsl:for-each select="marc:subfield[@code='a']">
1585                                                 <country>
1586                                                         <xsl:call-template name="chopPunctuation">
1587                                                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
1588                                                         </xsl:call-template>
1589                                                 </country>
1590                                         </xsl:for-each>
1591                                         <xsl:for-each select="marc:subfield[@code='b']">
1592                                                 <state>
1593                                                         <xsl:call-template name="chopPunctuation">
1594                                                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
1595                                                         </xsl:call-template>
1596                                                 </state>
1597                                         </xsl:for-each>
1598                                         <xsl:for-each select="marc:subfield[@code='c']">
1599                                                 <county>
1600                                                         <xsl:call-template name="chopPunctuation">
1601                                                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
1602                                                         </xsl:call-template>
1603                                                 </county>
1604                                         </xsl:for-each>
1605                                         <xsl:for-each select="marc:subfield[@code='d']">
1606                                                 <city>
1607                                                         <xsl:call-template name="chopPunctuation">
1608                                                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
1609                                                         </xsl:call-template>
1610                                                 </city>
1611                                         </xsl:for-each>
1612                                 </hierarchicalGeographic>
1613                         </subject>
1614                 </xsl:for-each>
1615                 <xsl:for-each select="marc:datafield[@tag=045][marc:subfield[@code='b']]">
1616                         <subject>
1617                                 <xsl:choose>
1618                                         <xsl:when test="@ind1=2">
1619                                                 <temporal encoding="iso8601" point="start">
1620                                                         <xsl:call-template name="chopPunctuation">
1621                                                                 <xsl:with-param name="chopString">
1622                                                                         <xsl:value-of select="marc:subfield[@code='b'][1]"></xsl:value-of>
1623                                                                 </xsl:with-param>
1624                                                         </xsl:call-template>
1625                                                 </temporal>
1626                                                 <temporal encoding="iso8601" point="end">
1627                                                         <xsl:call-template name="chopPunctuation">
1628                                                                 <xsl:with-param name="chopString">
1629                                                                         <xsl:value-of select="marc:subfield[@code='b'][2]"></xsl:value-of>
1630                                                                 </xsl:with-param>
1631                                                         </xsl:call-template>
1632                                                 </temporal>
1633                                         </xsl:when>
1634                                         <xsl:otherwise>
1635                                                 <xsl:for-each select="marc:subfield[@code='b']">
1636                                                         <temporal encoding="iso8601">
1637                                                                 <xsl:call-template name="chopPunctuation">
1638                                                                         <xsl:with-param name="chopString" select="."></xsl:with-param>
1639                                                                 </xsl:call-template>
1640                                                         </temporal>
1641                                                 </xsl:for-each>
1642                                         </xsl:otherwise>
1643                                 </xsl:choose>
1644                         </subject>
1645                 </xsl:for-each>
1646                 <xsl:for-each select="marc:datafield[@tag=050]">
1647                         <xsl:for-each select="marc:subfield[@code='b']">
1648                                 <classification authority="lcc">
1649                                         <xsl:if test="../marc:subfield[@code='3']">
1650                                                 <xsl:attribute name="displayLabel">
1651                                                         <xsl:value-of select="../marc:subfield[@code='3']"></xsl:value-of>
1652                                                 </xsl:attribute>
1653                                         </xsl:if>
1654                                         <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"></xsl:value-of>
1655                                         <xsl:text> </xsl:text>
1656                                         <xsl:value-of select="text()"></xsl:value-of>
1657                                 </classification>
1658                         </xsl:for-each>
1659                         <xsl:for-each select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
1660                                 <classification authority="lcc">
1661                                         <xsl:if test="../marc:subfield[@code='3']">
1662                                                 <xsl:attribute name="displayLabel">
1663                                                         <xsl:value-of select="../marc:subfield[@code='3']"></xsl:value-of>
1664                                                 </xsl:attribute>
1665                                         </xsl:if>
1666                                         <xsl:value-of select="text()"></xsl:value-of>
1667                                 </classification>
1668                         </xsl:for-each>
1669                 </xsl:for-each>
1670                 <xsl:for-each select="marc:datafield[@tag=082]">
1671                         <classification authority="ddc">
1672                                 <xsl:if test="marc:subfield[@code='2']">
1673                                         <xsl:attribute name="edition">
1674                                                 <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
1675                                         </xsl:attribute>
1676                                 </xsl:if>
1677                                 <xsl:call-template name="subfieldSelect">
1678                                         <xsl:with-param name="codes">ab</xsl:with-param>
1679                                 </xsl:call-template>
1680                         </classification>
1681                 </xsl:for-each>
1682                 <xsl:for-each select="marc:datafield[@tag=080]">
1683                         <classification authority="udc">
1684                                 <xsl:call-template name="subfieldSelect">
1685                                         <xsl:with-param name="codes">abx</xsl:with-param>
1686                                 </xsl:call-template>
1687                         </classification>
1688                 </xsl:for-each>
1689                 <xsl:for-each select="marc:datafield[@tag=060]">
1690                         <classification authority="nlm">
1691                                 <xsl:call-template name="subfieldSelect">
1692                                         <xsl:with-param name="codes">ab</xsl:with-param>
1693                                 </xsl:call-template>
1694                         </classification>
1695                 </xsl:for-each>
1696                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
1697                         <classification authority="sudocs">
1698                                 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1699                         </classification>
1700                 </xsl:for-each>
1701                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
1702                         <classification authority="candoc">
1703                                 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1704                         </classification>
1705                 </xsl:for-each>
1706                 <xsl:for-each select="marc:datafield[@tag=086]">
1707                         <classification>
1708                                 <xsl:attribute name="authority">
1709                                         <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
1710                                 </xsl:attribute>
1711                                 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1712                         </classification>
1713                 </xsl:for-each>
1714                 <xsl:for-each select="marc:datafield[@tag=084]">
1715                         <classification>
1716                                 <xsl:attribute name="authority">
1717                                         <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
1718                                 </xsl:attribute>
1719                                 <xsl:call-template name="subfieldSelect">
1720                                         <xsl:with-param name="codes">ab</xsl:with-param>
1721                                 </xsl:call-template>
1722                         </classification>
1723                 </xsl:for-each>
1724                 <xsl:for-each select="marc:datafield[@tag=440]">
1725                         <relatedItem type="series">
1726                                 <xsl:variable name="titleChop">
1727                                         <xsl:call-template name="chopPunctuation">
1728                                                 <xsl:with-param name="chopString">
1729                                                         <xsl:call-template name="subfieldSelect">
1730                                                                 <xsl:with-param name="codes">av</xsl:with-param>
1731                                                         </xsl:call-template>
1732                                                 </xsl:with-param>
1733                                         </xsl:call-template>
1734                                 </xsl:variable>
1735                                 <titleInfo>
1736                                         <title>
1737                                                 <xsl:value-of select="$titleChop" />
1738                                         </title>
1739                                         <xsl:call-template name="part"></xsl:call-template>
1740                                 </titleInfo>
1741                                 <titleInfo type="nfi">
1742                                         <xsl:choose>
1743                                                 <xsl:when test="@ind2>0">
1744                                                         <nonSort>
1745                                                                 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
1746                                                         </nonSort>
1747                                                         <title>
1748                                                                 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
1749                                                         </title>
1750                                                         <xsl:call-template name="part"/>
1751                                                 </xsl:when>
1752                                                 <xsl:otherwise>
1753                                                         <title>
1754                                                                 <xsl:value-of select="$titleChop" />
1755                                                         </title>
1756                                                 </xsl:otherwise>
1757                                         </xsl:choose>
1758                                         <xsl:call-template name="part"></xsl:call-template>
1759                                 </titleInfo>
1760                         </relatedItem>
1761                 </xsl:for-each>
1762                 <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
1763                         <relatedItem type="series">
1764                                 <titleInfo>
1765                                         <title>
1766                                                 <xsl:call-template name="chopPunctuation">
1767                                                         <xsl:with-param name="chopString">
1768                                                                 <xsl:call-template name="subfieldSelect">
1769                                                                         <xsl:with-param name="codes">av</xsl:with-param>
1770                                                                 </xsl:call-template>
1771                                                         </xsl:with-param>
1772                                                 </xsl:call-template>
1773                                         </title>
1774                                         <xsl:call-template name="part"></xsl:call-template>
1775                                 </titleInfo>
1776                         </relatedItem>
1777                 </xsl:for-each>
1778                 <xsl:for-each select="marc:datafield[@tag=510]">
1779                         <relatedItem type="isReferencedBy">
1780                                 <note>
1781                                         <xsl:call-template name="subfieldSelect">
1782                                                 <xsl:with-param name="codes">abcx3</xsl:with-param>
1783                                         </xsl:call-template>
1784                                 </note>
1785                         </relatedItem>
1786                 </xsl:for-each>
1787                 <xsl:for-each select="marc:datafield[@tag=534]">
1788                         <relatedItem type="original">
1789                                 <xsl:call-template name="relatedTitle"></xsl:call-template>
1790                                 <xsl:call-template name="relatedName"></xsl:call-template>
1791                                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
1792                                         <originInfo>
1793                                                 <xsl:for-each select="marc:subfield[@code='c']">
1794                                                         <publisher>
1795                                                                 <xsl:value-of select="."></xsl:value-of>
1796                                                         </publisher>
1797                                                 </xsl:for-each>
1798                                                 <xsl:for-each select="marc:subfield[@code='b']">
1799                                                         <edition>
1800                                                                 <xsl:value-of select="."></xsl:value-of>
1801                                                         </edition>
1802                                                 </xsl:for-each>
1803                                         </originInfo>
1804                                 </xsl:if>
1805                                 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1806                                 <xsl:for-each select="marc:subfield[@code='z']">
1807                                         <identifier type="isbn">
1808                                                 <xsl:value-of select="."></xsl:value-of>
1809                                         </identifier>
1810                                 </xsl:for-each>
1811                                 <xsl:call-template name="relatedNote"></xsl:call-template>
1812                         </relatedItem>
1813                 </xsl:for-each>
1814                 <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
1815                         <relatedItem>
1816                                 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1817                                 <titleInfo>
1818                                         <title>
1819                                                 <xsl:call-template name="chopPunctuation">
1820                                                         <xsl:with-param name="chopString">
1821                                                                 <xsl:call-template name="specialSubfieldSelect">
1822                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1823                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1824                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1825                                                                 </xsl:call-template>
1826                                                         </xsl:with-param>
1827                                                 </xsl:call-template>
1828                                         </title>
1829                                         <xsl:call-template name="part"></xsl:call-template>
1830                                 </titleInfo>
1831                                 <name type="personal">
1832                                         <namePart>
1833                                                 <xsl:call-template name="specialSubfieldSelect">
1834                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
1835                                                         <xsl:with-param name="axis">t</xsl:with-param>
1836                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
1837                                                 </xsl:call-template>
1838                                         </namePart>
1839                                         <xsl:call-template name="termsOfAddress"></xsl:call-template>
1840                                         <xsl:call-template name="nameDate"></xsl:call-template>
1841                                         <xsl:call-template name="role"></xsl:call-template>
1842                                 </name>
1843                                 <xsl:call-template name="relatedForm"></xsl:call-template>
1844                                 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1845                         </relatedItem>
1846                 </xsl:for-each>
1847                 <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
1848                         <relatedItem>
1849                                 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1850                                 <titleInfo>
1851                                         <title>
1852                                                 <xsl:call-template name="chopPunctuation">
1853                                                         <xsl:with-param name="chopString">
1854                                                                 <xsl:call-template name="specialSubfieldSelect">
1855                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1856                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1857                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
1858                                                                 </xsl:call-template>
1859                                                         </xsl:with-param>
1860                                                 </xsl:call-template>
1861                                         </title>
1862                                         <xsl:call-template name="relatedPartNumName"></xsl:call-template>
1863                                 </titleInfo>
1864                                 <name type="corporate">
1865                                         <xsl:for-each select="marc:subfield[@code='a']">
1866                                                 <namePart>
1867                                                         <xsl:value-of select="."></xsl:value-of>
1868                                                 </namePart>
1869                                         </xsl:for-each>
1870                                         <xsl:for-each select="marc:subfield[@code='b']">
1871                                                 <namePart>
1872                                                         <xsl:value-of select="."></xsl:value-of>
1873                                                 </namePart>
1874                                         </xsl:for-each>
1875                                         <xsl:variable name="tempNamePart">
1876                                                 <xsl:call-template name="specialSubfieldSelect">
1877                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
1878                                                         <xsl:with-param name="axis">t</xsl:with-param>
1879                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1880                                                 </xsl:call-template>
1881                                         </xsl:variable>
1882                                         <xsl:if test="normalize-space($tempNamePart)">
1883                                                 <namePart>
1884                                                         <xsl:value-of select="$tempNamePart"></xsl:value-of>
1885                                                 </namePart>
1886                                         </xsl:if>
1887                                         <xsl:call-template name="role"></xsl:call-template>
1888                                 </name>
1889                                 <xsl:call-template name="relatedForm"></xsl:call-template>
1890                                 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1891                         </relatedItem>
1892                 </xsl:for-each>
1893                 <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
1894                         <relatedItem>
1895                                 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1896                                 <titleInfo>
1897                                         <title>
1898                                                 <xsl:call-template name="chopPunctuation">
1899                                                         <xsl:with-param name="chopString">
1900                                                                 <xsl:call-template name="specialSubfieldSelect">
1901                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1902                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1903                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1904                                                                 </xsl:call-template>
1905                                                         </xsl:with-param>
1906                                                 </xsl:call-template>
1907                                         </title>
1908                                         <xsl:call-template name="relatedPartNumName"></xsl:call-template>
1909                                 </titleInfo>
1910                                 <name type="conference">
1911                                         <namePart>
1912                                                 <xsl:call-template name="specialSubfieldSelect">
1913                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1914                                                         <xsl:with-param name="axis">t</xsl:with-param>
1915                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1916                                                 </xsl:call-template>
1917                                         </namePart>
1918                                 </name>
1919                                 <xsl:call-template name="relatedForm"></xsl:call-template>
1920                                 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1921                         </relatedItem>
1922                 </xsl:for-each>
1923                 <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
1924                         <relatedItem>
1925                                 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1926                                 <titleInfo>
1927                                         <title>
1928                                                 <xsl:call-template name="chopPunctuation">
1929                                                         <xsl:with-param name="chopString">
1930                                                                 <xsl:call-template name="subfieldSelect">
1931                                                                         <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1932                                                                 </xsl:call-template>
1933                                                         </xsl:with-param>
1934                                                 </xsl:call-template>
1935                                         </title>
1936                                         <xsl:call-template name="part"></xsl:call-template>
1937                                 </titleInfo>
1938                                 <xsl:call-template name="relatedForm"></xsl:call-template>
1939                                 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1940                         </relatedItem>
1941                 </xsl:for-each>
1942                 <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
1943                         <relatedItem>
1944                                 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1945                                 <xsl:variable name="titleChop">
1946                                         <xsl:call-template name="chopPunctuation">
1947                                                 <xsl:with-param name="chopString">
1948                                                         <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1949                                                 </xsl:with-param>
1950                                         </xsl:call-template>
1951                                 </xsl:variable>
1952                                 <titleInfo>
1953                                         <title>
1954                                                 <xsl:value-of select="$titleChop" />
1955                                         </title>
1956                                         <xsl:call-template name="part"></xsl:call-template>
1957                                 </titleInfo>
1958                                 <titleInfo type="nfi">
1959                                         <xsl:choose>
1960                                                 <xsl:when test="@ind1>0">
1961                                                         <nonSort>
1962                                                                 <xsl:value-of select="substring($titleChop,1,@ind1)"/>
1963                                                         </nonSort>
1964                                                         <title>
1965                                                                 <xsl:value-of select="substring($titleChop,@ind1+1)"/>
1966                                                         </title>
1967                                                 </xsl:when>
1968                                                 <xsl:otherwise>
1969                                                         <title>
1970                                                                 <xsl:value-of select="$titleChop" />
1971                                                         </title>
1972                                                 </xsl:otherwise>
1973                                         </xsl:choose>
1974                                         <xsl:call-template name="part"></xsl:call-template>
1975                                 </titleInfo>
1976                                 <xsl:call-template name="relatedForm"></xsl:call-template>
1977                         </relatedItem>
1978                 </xsl:for-each>
1979                 <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
1980                         <relatedItem type="series">
1981                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1982                         </relatedItem>
1983                 </xsl:for-each>
1984                 <xsl:for-each select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
1985                         <relatedItem>
1986                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1987                         </relatedItem>
1988                 </xsl:for-each>
1989                 <xsl:for-each select="marc:datafield[@tag=775]">
1990                         <relatedItem type="otherVersion">
1991                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1992                         </relatedItem>
1993                 </xsl:for-each>
1994                 <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
1995                         <relatedItem type="constituent">
1996                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1997                         </relatedItem>
1998                 </xsl:for-each>
1999                 <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
2000                         <relatedItem type="host">
2001                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
2002                         </relatedItem>
2003                 </xsl:for-each>
2004                 <xsl:for-each select="marc:datafield[@tag=776]">
2005                         <relatedItem type="otherFormat">
2006                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
2007                         </relatedItem>
2008                 </xsl:for-each>
2009                 <xsl:for-each select="marc:datafield[@tag=780]">
2010                         <relatedItem type="preceding">
2011                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
2012                         </relatedItem>
2013                 </xsl:for-each>
2014                 <xsl:for-each select="marc:datafield[@tag=785]">
2015                         <relatedItem type="succeeding">
2016                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
2017                         </relatedItem>
2018                 </xsl:for-each>
2019                 <xsl:for-each select="marc:datafield[@tag=786]">
2020                         <relatedItem type="original">
2021                                 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
2022                         </relatedItem>
2023                 </xsl:for-each>
2024                 <xsl:for-each select="marc:datafield[@tag=800]">
2025                         <relatedItem type="series">
2026                                 <titleInfo>
2027                                         <title>
2028                                                 <xsl:call-template name="chopPunctuation">
2029                                                         <xsl:with-param name="chopString">
2030                                                                 <xsl:call-template name="specialSubfieldSelect">
2031                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
2032                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2033                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
2034                                                                 </xsl:call-template>
2035                                                         </xsl:with-param>
2036                                                 </xsl:call-template>
2037                                         </title>
2038                                         <xsl:call-template name="part"></xsl:call-template>
2039                                 </titleInfo>
2040                                 <name type="personal">
2041                                         <namePart>
2042                                                 <xsl:call-template name="chopPunctuation">
2043                                                         <xsl:with-param name="chopString">
2044                                                                 <xsl:call-template name="specialSubfieldSelect">
2045                                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
2046                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2047                                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
2048                                                                 </xsl:call-template>
2049                                                         </xsl:with-param>
2050                                                 </xsl:call-template>
2051                                         </namePart>
2052                                         <xsl:call-template name="termsOfAddress"></xsl:call-template>
2053                                         <xsl:call-template name="nameDate"></xsl:call-template>
2054                                         <xsl:call-template name="role"></xsl:call-template>
2055                                 </name>
2056                                 <xsl:call-template name="relatedForm"></xsl:call-template>
2057                         </relatedItem>
2058                 </xsl:for-each>
2059                 <xsl:for-each select="marc:datafield[@tag=810]">
2060                         <relatedItem type="series">
2061                                 <titleInfo>
2062                                         <title>
2063                                                 <xsl:call-template name="chopPunctuation">
2064                                                         <xsl:with-param name="chopString">
2065                                                                 <xsl:call-template name="specialSubfieldSelect">
2066                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
2067                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2068                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
2069                                                                 </xsl:call-template>
2070                                                         </xsl:with-param>
2071                                                 </xsl:call-template>
2072                                         </title>
2073                                         <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2074                                 </titleInfo>
2075                                 <name type="corporate">
2076                                         <xsl:for-each select="marc:subfield[@code='a']">
2077                                                 <namePart>
2078                                                         <xsl:value-of select="."></xsl:value-of>
2079                                                 </namePart>
2080                                         </xsl:for-each>
2081                                         <xsl:for-each select="marc:subfield[@code='b']">
2082                                                 <namePart>
2083                                                         <xsl:value-of select="."></xsl:value-of>
2084                                                 </namePart>
2085                                         </xsl:for-each>
2086                                         <namePart>
2087                                                 <xsl:call-template name="specialSubfieldSelect">
2088                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
2089                                                         <xsl:with-param name="axis">t</xsl:with-param>
2090                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
2091                                                 </xsl:call-template>
2092                                         </namePart>
2093                                         <xsl:call-template name="role"></xsl:call-template>
2094                                 </name>
2095                                 <xsl:call-template name="relatedForm"></xsl:call-template>
2096                         </relatedItem>
2097                 </xsl:for-each>
2098                 <xsl:for-each select="marc:datafield[@tag=811]">
2099                         <relatedItem type="series">
2100                                 <titleInfo>
2101                                         <title>
2102                                                 <xsl:call-template name="chopPunctuation">
2103                                                         <xsl:with-param name="chopString">
2104                                                                 <xsl:call-template name="specialSubfieldSelect">
2105                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
2106                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2107                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
2108                                                                 </xsl:call-template>
2109                                                         </xsl:with-param>
2110                                                 </xsl:call-template>
2111                                         </title>
2112                                         <xsl:call-template name="relatedPartNumName"/>
2113                                 </titleInfo>
2114                                 <name type="conference">
2115                                         <namePart>
2116                                                 <xsl:call-template name="specialSubfieldSelect">
2117                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
2118                                                         <xsl:with-param name="axis">t</xsl:with-param>
2119                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
2120                                                 </xsl:call-template>
2121                                         </namePart>
2122                                         <xsl:call-template name="role"/>
2123                                 </name>
2124                                 <xsl:call-template name="relatedForm"/>
2125                         </relatedItem>
2126                 </xsl:for-each>
2127                 <xsl:for-each select="marc:datafield[@tag='830']">
2128                         <relatedItem type="series">
2129                                 <xsl:variable name="titleChop">
2130                                         <xsl:call-template name="chopPunctuation">
2131                                                 <xsl:with-param name="chopString">
2132                                                         <xsl:call-template name="subfieldSelect">
2133                                                                 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
2134                                                         </xsl:call-template>
2135                                                 </xsl:with-param>
2136                                         </xsl:call-template>
2137                                 </xsl:variable>
2138                                 <titleInfo>
2139                                         <title>
2140                                                 <xsl:value-of select="$titleChop" />
2141                                         </title>
2142                                         <xsl:call-template name="part"/>
2143                                 </titleInfo>
2144                                 <titleInfo type="nfi">
2145                                         <xsl:choose>
2146                                                 <xsl:when test="@ind2>0">
2147                                                         <nonSort>
2148                                                                 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
2149                                                         </nonSort>
2150                                                         <title>
2151                                                                 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
2152                                                         </title>
2153                                                 </xsl:when>
2154                                                 <xsl:otherwise>
2155                                                         <title>
2156                                                                 <xsl:value-of select="$titleChop" />
2157                                                         </title>
2158                                                 </xsl:otherwise>
2159                                         </xsl:choose>
2160                                         <xsl:call-template name="part"/>
2161                                 </titleInfo>
2162                                 <xsl:call-template name="relatedForm"/>
2163                         </relatedItem>
2164                 </xsl:for-each>
2165                 <xsl:for-each select="marc:datafield[@tag='856'][@ind2='2']/marc:subfield[@code='q']">
2166                         <relatedItem>
2167                                 <internetMediaType>
2168                                         <xsl:value-of select="."/>
2169                                 </internetMediaType>
2170                         </relatedItem>
2171                 </xsl:for-each>
2172                 <xsl:for-each select="marc:datafield[@tag='020']">
2173                         <xsl:call-template name="isInvalid">
2174                                 <xsl:with-param name="type">isbn</xsl:with-param>
2175                         </xsl:call-template>
2176                         <xsl:if test="marc:subfield[@code='a']">
2177                                 <identifier type="isbn">
2178                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2179                                 </identifier>
2180                         </xsl:if>
2181                 </xsl:for-each>
2182                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='0']">
2183                         <xsl:call-template name="isInvalid">
2184                                 <xsl:with-param name="type">isrc</xsl:with-param>
2185                         </xsl:call-template>
2186                         <xsl:if test="marc:subfield[@code='a']">
2187                                 <identifier type="isrc">
2188                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2189                                 </identifier>
2190                         </xsl:if>
2191                 </xsl:for-each>
2192                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='2']">
2193                         <xsl:call-template name="isInvalid">
2194                                 <xsl:with-param name="type">ismn</xsl:with-param>
2195                         </xsl:call-template>
2196                         <xsl:if test="marc:subfield[@code='a']">
2197                                 <identifier type="ismn">
2198                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2199                                 </identifier>
2200                         </xsl:if>
2201                 </xsl:for-each>
2202                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='4']">
2203                         <xsl:call-template name="isInvalid">
2204                                 <xsl:with-param name="type">sici</xsl:with-param>
2205                         </xsl:call-template>
2206                         <identifier type="sici">
2207                                 <xsl:call-template name="subfieldSelect">
2208                                         <xsl:with-param name="codes">ab</xsl:with-param>
2209                                 </xsl:call-template>
2210                         </identifier>
2211                 </xsl:for-each>
2212                 <xsl:for-each select="marc:datafield[@tag='022']">
2213                         <xsl:call-template name="isInvalid">
2214                                 <xsl:with-param name="type">issn</xsl:with-param>
2215                         </xsl:call-template>
2216                         <identifier type="issn">
2217                                 <xsl:value-of select="marc:subfield[@code='a']"/>
2218                         </identifier>
2219                 </xsl:for-each>
2220                 <xsl:for-each select="marc:datafield[@tag='010']">
2221                         <xsl:call-template name="isInvalid">
2222                                 <xsl:with-param name="type">lccn</xsl:with-param>
2223                         </xsl:call-template>
2224                         <identifier type="lccn">
2225                                 <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
2226                         </identifier>
2227                 </xsl:for-each>
2228                 <xsl:for-each select="marc:datafield[@tag='028']">
2229                         <identifier>
2230                                 <xsl:attribute name="type">
2231                                         <xsl:choose>
2232                                                 <xsl:when test="@ind1='0'">issue number</xsl:when>
2233                                                 <xsl:when test="@ind1='1'">matrix number</xsl:when>
2234                                                 <xsl:when test="@ind1='2'">music plate</xsl:when>
2235                                                 <xsl:when test="@ind1='3'">music publisher</xsl:when>
2236                                                 <xsl:when test="@ind1='4'">videorecording identifier</xsl:when>
2237                                         </xsl:choose>
2238                                 </xsl:attribute>
2239                                 <!--<xsl:call-template name="isInvalid"/>--> <!-- no $z in 028 -->
2240                                 <xsl:call-template name="subfieldSelect">
2241                                         <xsl:with-param name="codes">
2242                                                 <xsl:choose>
2243                                                         <xsl:when test="@ind1='0'">ba</xsl:when>
2244                                                         <xsl:otherwise>ab</xsl:otherwise>
2245                                                 </xsl:choose>
2246                                         </xsl:with-param>
2247                                 </xsl:call-template>
2248                         </identifier>
2249                 </xsl:for-each>
2250                 <xsl:for-each select="marc:datafield[@tag='037']">
2251                         <identifier type="stock number">
2252                                 <!--<xsl:call-template name="isInvalid"/>--> <!-- no $z in 037 -->
2253                                 <xsl:call-template name="subfieldSelect">
2254                                         <xsl:with-param name="codes">ab</xsl:with-param>
2255                                 </xsl:call-template>
2256                         </identifier>
2257                 </xsl:for-each>
2258                 <xsl:for-each select="marc:datafield[@tag='856'][marc:subfield[@code='u']]">
2259                         <identifier>
2260                                 <xsl:attribute name="type">
2261                                         <xsl:choose>
2262                                                 <xsl:when test="starts-with(marc:subfield[@code='u'],'urn:doi') or starts-with(marc:subfield[@code='u'],'doi')">doi</xsl:when>
2263                                                 <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>
2264                                                 <xsl:otherwise>uri</xsl:otherwise>
2265                                         </xsl:choose>
2266                                 </xsl:attribute>
2267                                 <xsl:choose>
2268                                         <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') ">
2269                                                 <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"></xsl:value-of>
2270                                         </xsl:when>
2271                                         <xsl:otherwise>
2272                                                 <xsl:value-of select="marc:subfield[@code='u']"></xsl:value-of>
2273                                         </xsl:otherwise>
2274                                 </xsl:choose>
2275                         </identifier>
2276                         <xsl:if test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl')">
2277                                 <identifier type="hdl">
2278                                         <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
2279                                                 <xsl:attribute name="displayLabel">
2280                                                         <xsl:call-template name="subfieldSelect">
2281                                                                 <xsl:with-param name="codes">y3z</xsl:with-param>
2282                                                         </xsl:call-template>
2283                                                 </xsl:attribute>
2284                                         </xsl:if>
2285                                         <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"></xsl:value-of>
2286                                 </identifier>
2287                         </xsl:if>
2288                 </xsl:for-each>
2289                 <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]">
2290                         <identifier type="upc">
2291                                 <xsl:call-template name="isInvalid"/>
2292                                 <xsl:value-of select="marc:subfield[@code='a']"/>
2293                         </identifier>
2294                 </xsl:for-each>
2295                 <!-- 1/04 fix added $y -->
2296                 <xsl:for-each select="marc:datafield[@tag=856][marc:subfield[@code='u']]">
2297                         <location>
2298                                 <url>
2299                                         <xsl:if test="marc:subfield[@code='y' or @code='3']">
2300                                                 <xsl:attribute name="displayLabel">
2301                                                         <xsl:call-template name="subfieldSelect">
2302                                                                 <xsl:with-param name="codes">y3</xsl:with-param>
2303                                                         </xsl:call-template>
2304                                                 </xsl:attribute>
2305                                         </xsl:if>
2306                                         <xsl:if test="marc:subfield[@code='z' ]">
2307                                                 <xsl:attribute name="note">
2308                                                         <xsl:call-template name="subfieldSelect">
2309                                                                 <xsl:with-param name="codes">z</xsl:with-param>
2310                                                         </xsl:call-template>
2311                                                 </xsl:attribute>
2312                                         </xsl:if>
2313                                         <xsl:value-of select="marc:subfield[@code='u']"></xsl:value-of>
2314
2315                                 </url>
2316                         </location>
2317                 </xsl:for-each>
2318
2319                         <!-- 3.2 change tmee 856z  -->
2320
2321
2322                 <xsl:for-each select="marc:datafield[@tag=852]">
2323                         <location>
2324                                 <physicalLocation>
2325                                         <xsl:call-template name="displayLabel"></xsl:call-template>
2326                                         <xsl:call-template name="subfieldSelect">
2327                                                 <xsl:with-param name="codes">abje</xsl:with-param>
2328                                         </xsl:call-template>
2329                                 </physicalLocation>
2330                         </location>
2331                 </xsl:for-each>
2332                 <xsl:for-each select="marc:datafield[@tag=506]">
2333                         <accessCondition type="restrictionOnAccess">
2334                                 <xsl:call-template name="subfieldSelect">
2335                                         <xsl:with-param name="codes">abcd35</xsl:with-param>
2336                                 </xsl:call-template>
2337                         </accessCondition>
2338                 </xsl:for-each>
2339                 <xsl:for-each select="marc:datafield[@tag=540]">
2340                         <accessCondition type="useAndReproduction">
2341                                 <xsl:call-template name="subfieldSelect">
2342                                         <xsl:with-param name="codes">abcde35</xsl:with-param>
2343                                 </xsl:call-template>
2344                         </accessCondition>
2345                 </xsl:for-each>
2346                 <recordInfo>
2347                         <xsl:for-each select="marc:datafield[@tag=040]">
2348                                 <recordContentSource authority="marcorg">
2349                                         <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
2350                                 </recordContentSource>
2351                         </xsl:for-each>
2352                         <xsl:for-each select="marc:controlfield[@tag=008]">
2353                                 <recordCreationDate encoding="marc">
2354                                         <xsl:value-of select="substring(.,1,6)"></xsl:value-of>
2355                                 </recordCreationDate>
2356                         </xsl:for-each>
2357                         <xsl:for-each select="marc:controlfield[@tag=005]">
2358                                 <recordChangeDate encoding="iso8601">
2359                                         <xsl:value-of select="."></xsl:value-of>
2360                                 </recordChangeDate>
2361                         </xsl:for-each>
2362                         <xsl:for-each select="marc:controlfield[@tag=001]">
2363                                 <recordIdentifier>
2364                                         <xsl:if test="../marc:controlfield[@tag=003]">
2365                                                 <xsl:attribute name="source">
2366                                                         <xsl:value-of select="../marc:controlfield[@tag=003]"></xsl:value-of>
2367                                                 </xsl:attribute>
2368                                         </xsl:if>
2369                                         <xsl:value-of select="."></xsl:value-of>
2370                                 </recordIdentifier>
2371                         </xsl:for-each>
2372                         <xsl:for-each select="marc:datafield[@tag=040]/marc:subfield[@code='b']">
2373                                 <languageOfCataloging>
2374                                         <languageTerm authority="iso639-2b" type="code">
2375                                                 <xsl:value-of select="."></xsl:value-of>
2376                                         </languageTerm>
2377                                 </languageOfCataloging>
2378                         </xsl:for-each>
2379                 </recordInfo>
2380         </xsl:template>
2381         <xsl:template name="displayForm">
2382                 <xsl:for-each select="marc:subfield[@code='c']">
2383                         <displayForm>
2384                                 <xsl:value-of select="."></xsl:value-of>
2385                         </displayForm>
2386                 </xsl:for-each>
2387         </xsl:template>
2388         <xsl:template name="affiliation">
2389                 <xsl:for-each select="marc:subfield[@code='u']">
2390                         <affiliation>
2391                                 <xsl:value-of select="."></xsl:value-of>
2392                         </affiliation>
2393                 </xsl:for-each>
2394         </xsl:template>
2395         <xsl:template name="uri">
2396                 <xsl:for-each select="marc:subfield[@code='u']">
2397                         <xsl:attribute name="xlink:href">
2398                                 <xsl:value-of select="."></xsl:value-of>
2399                         </xsl:attribute>
2400                 </xsl:for-each>
2401                 <xsl:for-each select="marc:subfield[@code='0']">
2402                         <xsl:choose>
2403                                 <xsl:when test="contains(text(), ')')">
2404                                         <xsl:attribute name="xlink:href">
2405                                                 <xsl:value-of select="substring-after(text(), ')')"></xsl:value-of>
2406                                         </xsl:attribute>
2407                                 </xsl:when>
2408                                 <xsl:otherwise>
2409                                         <xsl:attribute name="xlink:href">
2410                                                 <xsl:value-of select="."></xsl:value-of>
2411                                         </xsl:attribute>
2412                                 </xsl:otherwise>
2413                         </xsl:choose>
2414                 </xsl:for-each>
2415         </xsl:template>
2416         <xsl:template name="role">
2417                 <xsl:for-each select="marc:subfield[@code='e']">
2418                         <role>
2419                                 <roleTerm type="text">
2420                                         <xsl:value-of select="."></xsl:value-of>
2421                                 </roleTerm>
2422                         </role>
2423                 </xsl:for-each>
2424                 <xsl:for-each select="marc:subfield[@code='4']">
2425                         <role>
2426                                 <roleTerm authority="marcrelator" type="code">
2427                                         <xsl:value-of select="."></xsl:value-of>
2428                                 </roleTerm>
2429                         </role>
2430                 </xsl:for-each>
2431         </xsl:template>
2432         <xsl:template name="part">
2433                 <xsl:variable name="partNumber">
2434                         <xsl:call-template name="specialSubfieldSelect">
2435                                 <xsl:with-param name="axis">n</xsl:with-param>
2436                                 <xsl:with-param name="anyCodes">n</xsl:with-param>
2437                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2438                         </xsl:call-template>
2439                 </xsl:variable>
2440                 <xsl:variable name="partName">
2441                         <xsl:call-template name="specialSubfieldSelect">
2442                                 <xsl:with-param name="axis">p</xsl:with-param>
2443                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
2444                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2445                         </xsl:call-template>
2446                 </xsl:variable>
2447                 <xsl:if test="string-length(normalize-space($partNumber))">
2448                         <partNumber>
2449                                 <xsl:call-template name="chopPunctuation">
2450                                         <xsl:with-param name="chopString" select="$partNumber"></xsl:with-param>
2451                                 </xsl:call-template>
2452                         </partNumber>
2453                 </xsl:if>
2454                 <xsl:if test="string-length(normalize-space($partName))">
2455                         <partName>
2456                                 <xsl:call-template name="chopPunctuation">
2457                                         <xsl:with-param name="chopString" select="$partName"></xsl:with-param>
2458                                 </xsl:call-template>
2459                         </partName>
2460                 </xsl:if>
2461         </xsl:template>
2462         <xsl:template name="relatedPart">
2463                 <xsl:if test="@tag=773">
2464                         <xsl:for-each select="marc:subfield[@code='g']">
2465                                 <part>
2466                                         <text>
2467                                                 <xsl:value-of select="."></xsl:value-of>
2468                                         </text>
2469                                 </part>
2470                         </xsl:for-each>
2471                         <xsl:for-each select="marc:subfield[@code='q']">
2472                                 <part>
2473                                         <xsl:call-template name="parsePart"></xsl:call-template>
2474                                 </part>
2475                         </xsl:for-each>
2476                 </xsl:if>
2477         </xsl:template>
2478         <xsl:template name="relatedPartNumName">
2479                 <xsl:variable name="partNumber">
2480                         <xsl:call-template name="specialSubfieldSelect">
2481                                 <xsl:with-param name="axis">g</xsl:with-param>
2482                                 <xsl:with-param name="anyCodes">g</xsl:with-param>
2483                                 <xsl:with-param name="afterCodes">pst</xsl:with-param>
2484                         </xsl:call-template>
2485                 </xsl:variable>
2486                 <xsl:variable name="partName">
2487                         <xsl:call-template name="specialSubfieldSelect">
2488                                 <xsl:with-param name="axis">p</xsl:with-param>
2489                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
2490                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2491                         </xsl:call-template>
2492                 </xsl:variable>
2493                 <xsl:if test="string-length(normalize-space($partNumber))">
2494                         <partNumber>
2495                                 <xsl:value-of select="$partNumber"></xsl:value-of>
2496                         </partNumber>
2497                 </xsl:if>
2498                 <xsl:if test="string-length(normalize-space($partName))">
2499                         <partName>
2500                                 <xsl:value-of select="$partName"></xsl:value-of>
2501                         </partName>
2502                 </xsl:if>
2503         </xsl:template>
2504         <xsl:template name="relatedName">
2505                 <xsl:for-each select="marc:subfield[@code='a']">
2506                         <name>
2507                                 <namePart>
2508                                         <xsl:value-of select="."></xsl:value-of>
2509                                 </namePart>
2510                         </name>
2511                 </xsl:for-each>
2512         </xsl:template>
2513         <xsl:template name="relatedForm">
2514                 <xsl:for-each select="marc:subfield[@code='h']">
2515                         <physicalDescription>
2516                                 <form>
2517                                         <xsl:value-of select="."></xsl:value-of>
2518                                 </form>
2519                         </physicalDescription>
2520                 </xsl:for-each>
2521         </xsl:template>
2522         <xsl:template name="relatedExtent">
2523                 <xsl:for-each select="marc:subfield[@code='h']">
2524                         <physicalDescription>
2525                                 <extent>
2526                                         <xsl:value-of select="."></xsl:value-of>
2527                                 </extent>
2528                         </physicalDescription>
2529                 </xsl:for-each>
2530         </xsl:template>
2531         <xsl:template name="relatedNote">
2532                 <xsl:for-each select="marc:subfield[@code='n']">
2533                         <note>
2534                                 <xsl:value-of select="."></xsl:value-of>
2535                         </note>
2536                 </xsl:for-each>
2537         </xsl:template>
2538         <xsl:template name="relatedSubject">
2539                 <xsl:for-each select="marc:subfield[@code='j']">
2540                         <subject>
2541                                 <temporal encoding="iso8601">
2542                                         <xsl:call-template name="chopPunctuation">
2543                                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
2544                                         </xsl:call-template>
2545                                 </temporal>
2546                         </subject>
2547                 </xsl:for-each>
2548         </xsl:template>
2549         <xsl:template name="relatedIdentifierISSN">
2550                 <xsl:for-each select="marc:subfield[@code='x']">
2551                         <identifier type="issn">
2552                                 <xsl:value-of select="."></xsl:value-of>
2553                         </identifier>
2554                 </xsl:for-each>
2555         </xsl:template>
2556         <xsl:template name="relatedIdentifierLocal">
2557                 <xsl:for-each select="marc:subfield[@code='w']">
2558                         <identifier type="local">
2559                                 <xsl:value-of select="."></xsl:value-of>
2560                         </identifier>
2561                 </xsl:for-each>
2562         </xsl:template>
2563         <xsl:template name="relatedIdentifier">
2564                 <xsl:for-each select="marc:subfield[@code='o']">
2565                         <identifier>
2566                                 <xsl:value-of select="."></xsl:value-of>
2567                         </identifier>
2568                 </xsl:for-each>
2569         </xsl:template>
2570         <xsl:template name="relatedItem76X-78X">
2571                 <xsl:call-template name="displayLabel"></xsl:call-template>
2572                 <xsl:call-template name="relatedTitle76X-78X"></xsl:call-template>
2573                 <xsl:call-template name="relatedName"></xsl:call-template>
2574                 <xsl:call-template name="relatedOriginInfo"></xsl:call-template>
2575                 <xsl:call-template name="relatedLanguage"></xsl:call-template>
2576                 <xsl:call-template name="relatedExtent"></xsl:call-template>
2577                 <xsl:call-template name="relatedNote"></xsl:call-template>
2578                 <xsl:call-template name="relatedSubject"></xsl:call-template>
2579                 <xsl:call-template name="relatedIdentifier"></xsl:call-template>
2580                 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
2581                 <xsl:call-template name="relatedIdentifierLocal"></xsl:call-template>
2582                 <xsl:call-template name="relatedPart"></xsl:call-template>
2583         </xsl:template>
2584         <xsl:template name="subjectGeographicZ">
2585                 <geographic>
2586                         <xsl:call-template name="chopPunctuation">
2587                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
2588                         </xsl:call-template>
2589                 </geographic>
2590         </xsl:template>
2591         <xsl:template name="subjectTemporalY">
2592                 <temporal>
2593                         <xsl:call-template name="chopPunctuation">
2594                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
2595                         </xsl:call-template>
2596                 </temporal>
2597         </xsl:template>
2598         <xsl:template name="subjectTopic">
2599                 <topic>
2600                         <xsl:call-template name="chopPunctuation">
2601                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
2602                         </xsl:call-template>
2603                 </topic>
2604         </xsl:template>
2605         <!-- 3.2 change tmee 6xx $v genre -->
2606         <xsl:template name="subjectGenre">
2607                 <genre>
2608                         <xsl:call-template name="chopPunctuation">
2609                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
2610                         </xsl:call-template>
2611                 </genre>
2612         </xsl:template>
2613
2614         <xsl:template name="nameABCDN">
2615                 <xsl:for-each select="marc:subfield[@code='a']">
2616                         <namePart>
2617                                 <xsl:call-template name="chopPunctuation">
2618                                         <xsl:with-param name="chopString" select="."></xsl:with-param>
2619                                 </xsl:call-template>
2620                         </namePart>
2621                 </xsl:for-each>
2622                 <xsl:for-each select="marc:subfield[@code='b']">
2623                         <namePart>
2624                                 <xsl:value-of select="."></xsl:value-of>
2625                         </namePart>
2626                 </xsl:for-each>
2627                 <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
2628                         <namePart>
2629                                 <xsl:call-template name="subfieldSelect">
2630                                         <xsl:with-param name="codes">cdn</xsl:with-param>
2631                                 </xsl:call-template>
2632                         </namePart>
2633                 </xsl:if>
2634         </xsl:template>
2635         <xsl:template name="nameABCDQ">
2636                 <namePart>
2637                         <xsl:call-template name="chopPunctuation">
2638                                 <xsl:with-param name="chopString">
2639                                         <xsl:call-template name="subfieldSelect">
2640                                                 <xsl:with-param name="codes">aq</xsl:with-param>
2641                                         </xsl:call-template>
2642                                 </xsl:with-param>
2643                                 <xsl:with-param name="punctuation">
2644                                         <xsl:text>:,;/ </xsl:text>
2645                                 </xsl:with-param>
2646                         </xsl:call-template>
2647                 </namePart>
2648                 <xsl:call-template name="termsOfAddress"></xsl:call-template>
2649                 <xsl:call-template name="nameDate"></xsl:call-template>
2650         </xsl:template>
2651         <xsl:template name="nameACDEQ">
2652                 <namePart>
2653                         <xsl:call-template name="subfieldSelect">
2654                                 <xsl:with-param name="codes">acdeq</xsl:with-param>
2655                         </xsl:call-template>
2656                 </namePart>
2657         </xsl:template>
2658         <xsl:template name="constituentOrRelatedType">
2659                 <xsl:if test="@ind2=2">
2660                         <xsl:attribute name="type">constituent</xsl:attribute>
2661                 </xsl:if>
2662         </xsl:template>
2663         <xsl:template name="relatedTitle">
2664                 <xsl:for-each select="marc:subfield[@code='t']">
2665                         <titleInfo>
2666                                 <title>
2667                                         <xsl:call-template name="chopPunctuation">
2668                                                 <xsl:with-param name="chopString">
2669                                                         <xsl:value-of select="."></xsl:value-of>
2670                                                 </xsl:with-param>
2671                                         </xsl:call-template>
2672                                 </title>
2673                         </titleInfo>
2674                 </xsl:for-each>
2675         </xsl:template>
2676         <xsl:template name="relatedTitle76X-78X">
2677                 <xsl:for-each select="marc:subfield[@code='t']">
2678                         <titleInfo>
2679                                 <title>
2680                                         <xsl:call-template name="chopPunctuation">
2681                                                 <xsl:with-param name="chopString">
2682                                                         <xsl:value-of select="."></xsl:value-of>
2683                                                 </xsl:with-param>
2684                                         </xsl:call-template>
2685                                 </title>
2686                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2687                                         <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2688                                 </xsl:if>
2689                         </titleInfo>
2690                 </xsl:for-each>
2691                 <xsl:for-each select="marc:subfield[@code='p']">
2692                         <titleInfo type="abbreviated">
2693                                 <title>
2694                                         <xsl:call-template name="chopPunctuation">
2695                                                 <xsl:with-param name="chopString">
2696                                                         <xsl:value-of select="."></xsl:value-of>
2697                                                 </xsl:with-param>
2698                                         </xsl:call-template>
2699                                 </title>
2700                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2701                                         <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2702                                 </xsl:if>
2703                         </titleInfo>
2704                 </xsl:for-each>
2705                 <xsl:for-each select="marc:subfield[@code='s']">
2706                         <titleInfo type="uniform">
2707                                 <title>
2708                                         <xsl:call-template name="chopPunctuation">
2709                                                 <xsl:with-param name="chopString">
2710                                                         <xsl:value-of select="."></xsl:value-of>
2711                                                 </xsl:with-param>
2712                                         </xsl:call-template>
2713                                 </title>
2714                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2715                                         <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2716                                 </xsl:if>
2717                         </titleInfo>
2718                 </xsl:for-each>
2719         </xsl:template>
2720         <xsl:template name="relatedOriginInfo">
2721                 <xsl:if test="marc:subfield[@code='b' or @code='d'] or marc:subfield[@code='f']">
2722                         <originInfo>
2723                                 <xsl:if test="@tag=775">
2724                                         <xsl:for-each select="marc:subfield[@code='f']">
2725                                                 <place>
2726                                                         <placeTerm>
2727                                                                 <xsl:attribute name="type">code</xsl:attribute>
2728                                                                 <xsl:attribute name="authority">marcgac</xsl:attribute>
2729                                                                 <xsl:value-of select="."></xsl:value-of>
2730                                                         </placeTerm>
2731                                                 </place>
2732                                         </xsl:for-each>
2733                                 </xsl:if>
2734                                 <xsl:for-each select="marc:subfield[@code='d']">
2735                                         <publisher>
2736                                                 <xsl:value-of select="."></xsl:value-of>
2737                                         </publisher>
2738                                 </xsl:for-each>
2739                                 <xsl:for-each select="marc:subfield[@code='b']">
2740                                         <edition>
2741                                                 <xsl:value-of select="."></xsl:value-of>
2742                                         </edition>
2743                                 </xsl:for-each>
2744                         </originInfo>
2745                 </xsl:if>
2746         </xsl:template>
2747         <xsl:template name="relatedLanguage">
2748                 <xsl:for-each select="marc:subfield[@code='e']">
2749                         <xsl:call-template name="getLanguage">
2750                                 <xsl:with-param name="langString">
2751                                         <xsl:value-of select="."></xsl:value-of>
2752                                 </xsl:with-param>
2753                         </xsl:call-template>
2754                 </xsl:for-each>
2755         </xsl:template>
2756         <xsl:template name="nameDate">
2757                 <xsl:for-each select="marc:subfield[@code='d']">
2758                         <namePart type="date">
2759                                 <xsl:call-template name="chopPunctuation">
2760                                         <xsl:with-param name="chopString" select="."></xsl:with-param>
2761                                 </xsl:call-template>
2762                         </namePart>
2763                 </xsl:for-each>
2764         </xsl:template>
2765         <xsl:template name="subjectAuthority">
2766                 <xsl:if test="@ind2!=4">
2767                         <xsl:if test="@ind2!=' '">
2768                                 <xsl:if test="@ind2!=8">
2769                                         <xsl:if test="@ind2!=9">
2770                                                 <xsl:attribute name="authority">
2771                                                         <xsl:choose>
2772                                                                 <xsl:when test="@ind2=0">lcsh</xsl:when>
2773                                                                 <xsl:when test="@ind2=1">lcshac</xsl:when>
2774                                                                 <xsl:when test="@ind2=2">mesh</xsl:when>
2775                                                                 <!-- 1/04 fix -->
2776                                                                 <xsl:when test="@ind2=3">nal</xsl:when>
2777                                                                 <xsl:when test="@ind2=5">csh</xsl:when>
2778                                                                 <xsl:when test="@ind2=6">rvm</xsl:when>
2779                                                                 <xsl:when test="@ind2=7">
2780                                                                         <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
2781                                                                 </xsl:when>
2782                                                         </xsl:choose>
2783                                                 </xsl:attribute>
2784                                         </xsl:if>
2785                                 </xsl:if>
2786                         </xsl:if>
2787                 </xsl:if>
2788         </xsl:template>
2789         <xsl:template name="subjectAnyOrder">
2790                 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
2791                         <xsl:choose>
2792                                 <xsl:when test="@code='v'">
2793                                         <xsl:call-template name="subjectGenre"></xsl:call-template>
2794                                 </xsl:when>
2795                                 <xsl:when test="@code='x'">
2796                                         <xsl:call-template name="subjectTopic"></xsl:call-template>
2797                                 </xsl:when>
2798                                 <xsl:when test="@code='y'">
2799                                         <xsl:call-template name="subjectTemporalY"></xsl:call-template>
2800                                 </xsl:when>
2801                                 <xsl:when test="@code='z'">
2802                                         <xsl:call-template name="subjectGeographicZ"></xsl:call-template>
2803                                 </xsl:when>
2804                         </xsl:choose>
2805                 </xsl:for-each>
2806         </xsl:template>
2807         <xsl:template name="specialSubfieldSelect">
2808                 <xsl:param name="anyCodes"></xsl:param>
2809                 <xsl:param name="axis"></xsl:param>
2810                 <xsl:param name="beforeCodes"></xsl:param>
2811                 <xsl:param name="afterCodes"></xsl:param>
2812                 <xsl:variable name="str">
2813                         <xsl:for-each select="marc:subfield">
2814                                 <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])">
2815                                         <xsl:value-of select="text()"></xsl:value-of>
2816                                         <xsl:text> </xsl:text>
2817                                 </xsl:if>
2818                         </xsl:for-each>
2819                 </xsl:variable>
2820                 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
2821         </xsl:template>
2822
2823         <!-- 3.2 change tmee 6xx $v genre -->
2824         <xsl:template match="marc:datafield[@tag=600]">
2825                 <subject>
2826                         <xsl:call-template name="subjectAuthority"></xsl:call-template>
2827                         <name type="personal">
2828                                 <xsl:call-template name="uri" />
2829                                 <namePart>
2830                                         <xsl:call-template name="chopPunctuation">
2831                                                 <xsl:with-param name="chopString">
2832                                                         <xsl:call-template name="subfieldSelect">
2833                                                                 <xsl:with-param name="codes">aq</xsl:with-param>
2834                                                         </xsl:call-template>
2835                                                 </xsl:with-param>
2836                                         </xsl:call-template>
2837                                 </namePart>
2838                                 <xsl:call-template name="termsOfAddress"></xsl:call-template>
2839                                 <xsl:call-template name="nameDate"></xsl:call-template>
2840                                 <xsl:call-template name="affiliation"></xsl:call-template>
2841                                 <xsl:call-template name="role"></xsl:call-template>
2842                         </name>
2843                         <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2844                 </subject>
2845         </xsl:template>
2846         <xsl:template match="marc:datafield[@tag=610]">
2847                 <subject>
2848                         <xsl:call-template name="subjectAuthority"></xsl:call-template>
2849                         <name type="corporate">
2850                                 <xsl:call-template name="uri" />
2851                                 <xsl:for-each select="marc:subfield[@code='a']">
2852                                         <namePart>
2853                                                 <xsl:value-of select="."></xsl:value-of>
2854                                         </namePart>
2855                                 </xsl:for-each>
2856                                 <xsl:for-each select="marc:subfield[@code='b']">
2857                                         <namePart>
2858                                                 <xsl:value-of select="."></xsl:value-of>
2859                                         </namePart>
2860                                 </xsl:for-each>
2861                                 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
2862                                         <namePart>
2863                                                 <xsl:call-template name="subfieldSelect">
2864                                                         <xsl:with-param name="codes">cdnp</xsl:with-param>
2865                                                 </xsl:call-template>
2866                                         </namePart>
2867                                 </xsl:if>
2868                                 <xsl:call-template name="role"></xsl:call-template>
2869                         </name>
2870                         <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2871                 </subject>
2872         </xsl:template>
2873         <xsl:template match="marc:datafield[@tag=611]">
2874                 <subject>
2875                         <xsl:call-template name="subjectAuthority"></xsl:call-template>
2876                         <name type="conference">
2877                                 <xsl:call-template name="uri" />
2878                                 <namePart>
2879                                         <xsl:call-template name="subfieldSelect">
2880                                                 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
2881                                         </xsl:call-template>
2882                                 </namePart>
2883                                 <xsl:for-each select="marc:subfield[@code='4']">
2884                                         <role>
2885                                                 <roleTerm authority="marcrelator" type="code">
2886                                                         <xsl:value-of select="."></xsl:value-of>
2887                                                 </roleTerm>
2888                                         </role>
2889                                 </xsl:for-each>
2890                         </name>
2891                         <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2892                 </subject>
2893         </xsl:template>
2894         <xsl:template match="marc:datafield[@tag=630]">
2895                 <subject>
2896                         <xsl:call-template name="subjectAuthority"></xsl:call-template>
2897                         <xsl:variable name="titleChop">
2898                                 <xsl:call-template name="chopPunctuation">
2899                                         <xsl:with-param name="chopString">
2900                                                 <xsl:call-template name="subfieldSelect">
2901                                                         <xsl:with-param name="codes">adfhklor</xsl:with-param>
2902                                                 </xsl:call-template>
2903                                         </xsl:with-param>
2904                                 </xsl:call-template>
2905                         </xsl:variable>
2906                         <titleInfo>
2907                                 <title>
2908                                         <xsl:value-of select="$titleChop" />
2909                                 </title>
2910                                 <xsl:call-template name="part"></xsl:call-template>
2911                         </titleInfo>
2912                         <titleInfo type="nfi">
2913                                 <xsl:choose>
2914                                         <xsl:when test="@ind1>0">
2915                                                 <nonSort>
2916                                                         <xsl:value-of select="substring($titleChop,1,@ind1)"/>
2917                                                 </nonSort>
2918                                                 <title>
2919                                                         <xsl:value-of select="substring($titleChop,@ind1+1)"/>
2920                                                 </title>
2921                                                 <xsl:call-template name="part"/>
2922                                         </xsl:when>
2923                                         <xsl:otherwise>
2924                                                 <title>
2925                                                         <xsl:value-of select="$titleChop" />
2926                                                 </title>
2927                                         </xsl:otherwise>
2928                                 </xsl:choose>
2929                                 <xsl:call-template name="part"></xsl:call-template>
2930                         </titleInfo>
2931                         <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2932                 </subject>
2933         </xsl:template>
2934         <xsl:template match="marc:datafield[@tag=650]">
2935                 <subject>
2936                         <xsl:call-template name="subjectAuthority"></xsl:call-template>
2937                         <topic>
2938                                 <xsl:call-template name="uri" />
2939                                 <xsl:call-template name="chopPunctuation">
2940                                         <xsl:with-param name="chopString">
2941                                                 <xsl:call-template name="subfieldSelect">
2942                                                         <xsl:with-param name="codes">abcd</xsl:with-param>
2943                                                 </xsl:call-template>
2944                                         </xsl:with-param>
2945                                 </xsl:call-template>
2946                         </topic>
2947                         <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2948                 </subject>
2949         </xsl:template>
2950         <xsl:template match="marc:datafield[@tag=651]">
2951                 <subject>
2952                         <xsl:call-template name="subjectAuthority"></xsl:call-template>
2953                         <xsl:for-each select="marc:subfield[@code='a']">
2954                                 <geographic>
2955                                         <xsl:call-template name="uri" />
2956                                         <xsl:call-template name="chopPunctuation">
2957                                                 <xsl:with-param name="chopString" select="."></xsl:with-param>
2958                                         </xsl:call-template>
2959                                 </geographic>
2960                         </xsl:for-each>
2961                         <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2962                 </subject>
2963         </xsl:template>
2964         <xsl:template match="marc:datafield[@tag=653]">
2965                 <subject>
2966                         <xsl:for-each select="marc:subfield[@code='a']">
2967                                 <topic>
2968                                         <xsl:call-template name="uri" />
2969                                         <xsl:value-of select="."></xsl:value-of>
2970                                 </topic>
2971                         </xsl:for-each>
2972                 </subject>
2973         </xsl:template>
2974         <xsl:template match="marc:datafield[@tag=656]">
2975                 <subject>
2976                         <xsl:if test="marc:subfield[@code=2]">
2977                                 <xsl:attribute name="authority">
2978                                         <xsl:value-of select="marc:subfield[@code=2]"></xsl:value-of>
2979                                 </xsl:attribute>
2980                         </xsl:if>
2981                         <occupation>
2982                                 <xsl:call-template name="uri" />
2983                                 <xsl:call-template name="chopPunctuation">
2984                                         <xsl:with-param name="chopString">
2985                                                 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
2986                                         </xsl:with-param>
2987                                 </xsl:call-template>
2988                         </occupation>
2989                 </subject>
2990         </xsl:template>
2991         <xsl:template name="termsOfAddress">
2992                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
2993                         <namePart type="termsOfAddress">
2994                                 <xsl:call-template name="chopPunctuation">
2995                                         <xsl:with-param name="chopString">
2996                                                 <xsl:call-template name="subfieldSelect">
2997                                                         <xsl:with-param name="codes">bc</xsl:with-param>
2998                                                 </xsl:call-template>
2999                                         </xsl:with-param>
3000                                 </xsl:call-template>
3001                         </namePart>
3002                 </xsl:if>
3003         </xsl:template>
3004         <xsl:template name="displayLabel">
3005                 <xsl:if test="marc:subfield[@code='i']">
3006                         <xsl:attribute name="displayLabel">
3007                                 <xsl:value-of select="marc:subfield[@code='i']"></xsl:value-of>
3008                         </xsl:attribute>
3009                 </xsl:if>
3010                 <xsl:if test="marc:subfield[@code='3']">
3011                         <xsl:attribute name="displayLabel">
3012                                 <xsl:value-of select="marc:subfield[@code='3']"></xsl:value-of>
3013                         </xsl:attribute>
3014                 </xsl:if>
3015         </xsl:template>
3016         <xsl:template name="isInvalid">
3017                 <xsl:param name="type"/>
3018                 <xsl:if test="marc:subfield[@code='z'] or marc:subfield[@code='y']">
3019                         <identifier>
3020                                 <xsl:attribute name="type">
3021                                         <xsl:value-of select="$type"/>
3022                                 </xsl:attribute>
3023                                 <xsl:attribute name="invalid">
3024                                         <xsl:text>yes</xsl:text>
3025                                 </xsl:attribute>
3026                                 <xsl:if test="marc:subfield[@code='z']">
3027                                         <xsl:value-of select="marc:subfield[@code='z']"/>
3028                                 </xsl:if>
3029                                 <xsl:if test="marc:subfield[@code='y']">
3030                                         <xsl:value-of select="marc:subfield[@code='y']"/>
3031                                 </xsl:if>
3032                         </identifier>
3033                 </xsl:if>
3034         </xsl:template>
3035         <xsl:template name="subtitle">
3036                 <xsl:if test="marc:subfield[@code='b']">
3037                         <subTitle>
3038                                 <xsl:call-template name="chopPunctuation">
3039                                         <xsl:with-param name="chopString">
3040                                                 <xsl:value-of select="marc:subfield[@code='b']"/>
3041                                                 <!--<xsl:call-template name="subfieldSelect">
3042                                                         <xsl:with-param name="codes">b</xsl:with-param>
3043                                                 </xsl:call-template>-->
3044                                         </xsl:with-param>
3045                                 </xsl:call-template>
3046                         </subTitle>
3047                 </xsl:if>
3048         </xsl:template>
3049         <xsl:template name="script">
3050                 <xsl:param name="scriptCode"></xsl:param>
3051                 <xsl:attribute name="script">
3052                         <xsl:choose>
3053                                 <xsl:when test="$scriptCode='(3'">Arabic</xsl:when>
3054                                 <xsl:when test="$scriptCode='(B'">Latin</xsl:when>
3055                                 <xsl:when test="$scriptCode='$1'">Chinese, Japanese, Korean</xsl:when>
3056                                 <xsl:when test="$scriptCode='(N'">Cyrillic</xsl:when>
3057                                 <xsl:when test="$scriptCode='(2'">Hebrew</xsl:when>
3058                                 <xsl:when test="$scriptCode='(S'">Greek</xsl:when>
3059                         </xsl:choose>
3060                 </xsl:attribute>
3061         </xsl:template>
3062         <xsl:template name="parsePart">
3063                 <!-- assumes 773$q= 1:2:3<4
3064                      with up to 3 levels and one optional start page
3065                 -->
3066                 <xsl:variable name="level1">
3067                         <xsl:choose>
3068                                 <xsl:when test="contains(text(),':')">
3069                                         <!-- 1:2 -->
3070                                         <xsl:value-of select="substring-before(text(),':')"></xsl:value-of>
3071                                 </xsl:when>
3072                                 <xsl:when test="not(contains(text(),':'))">
3073                                         <!-- 1 or 1<3 -->
3074                                         <xsl:if test="contains(text(),'&lt;')">
3075                                                 <!-- 1<3 -->
3076                                                 <xsl:value-of select="substring-before(text(),'&lt;')"></xsl:value-of>
3077                                         </xsl:if>
3078                                         <xsl:if test="not(contains(text(),'&lt;'))">
3079                                                 <!-- 1 -->
3080                                                 <xsl:value-of select="text()"></xsl:value-of>
3081                                         </xsl:if>
3082                                 </xsl:when>
3083                         </xsl:choose>
3084                 </xsl:variable>
3085                 <xsl:variable name="sici2">
3086                         <xsl:choose>
3087                                 <xsl:when test="starts-with(substring-after(text(),$level1),':')">
3088                                         <xsl:value-of select="substring(substring-after(text(),$level1),2)"></xsl:value-of>
3089                                 </xsl:when>
3090                                 <xsl:otherwise>
3091                                         <xsl:value-of select="substring-after(text(),$level1)"></xsl:value-of>
3092                                 </xsl:otherwise>
3093                         </xsl:choose>
3094                 </xsl:variable>
3095                 <xsl:variable name="level2">
3096                         <xsl:choose>
3097                                 <xsl:when test="contains($sici2,':')">
3098                                         <!--  2:3<4  -->
3099                                         <xsl:value-of select="substring-before($sici2,':')"></xsl:value-of>
3100                                 </xsl:when>
3101                                 <xsl:when test="contains($sici2,'&lt;')">
3102                                         <!-- 1: 2<4 -->
3103                                         <xsl:value-of select="substring-before($sici2,'&lt;')"></xsl:value-of>
3104                                 </xsl:when>
3105                                 <xsl:otherwise>
3106                                         <xsl:value-of select="$sici2"></xsl:value-of>
3107                                         <!-- 1:2 -->
3108                                 </xsl:otherwise>
3109                         </xsl:choose>
3110                 </xsl:variable>
3111                 <xsl:variable name="sici3">
3112                         <xsl:choose>
3113                                 <xsl:when test="starts-with(substring-after($sici2,$level2),':')">
3114                                         <xsl:value-of select="substring(substring-after($sici2,$level2),2)"></xsl:value-of>
3115                                 </xsl:when>
3116                                 <xsl:otherwise>
3117                                         <xsl:value-of select="substring-after($sici2,$level2)"></xsl:value-of>
3118                                 </xsl:otherwise>
3119                         </xsl:choose>
3120                 </xsl:variable>
3121                 <xsl:variable name="level3">
3122                         <xsl:choose>
3123                                 <xsl:when test="contains($sici3,'&lt;')">
3124                                         <!-- 2<4 -->
3125                                         <xsl:value-of select="substring-before($sici3,'&lt;')"></xsl:value-of>
3126                                 </xsl:when>
3127                                 <xsl:otherwise>
3128                                         <xsl:value-of select="$sici3"></xsl:value-of>
3129                                         <!-- 3 -->
3130                                 </xsl:otherwise>
3131                         </xsl:choose>
3132                 </xsl:variable>
3133                 <xsl:variable name="page">
3134                         <xsl:if test="contains(text(),'&lt;')">
3135                                 <xsl:value-of select="substring-after(text(),'&lt;')"></xsl:value-of>
3136                         </xsl:if>
3137                 </xsl:variable>
3138                 <xsl:if test="$level1">
3139                         <detail level="1">
3140                                 <number>
3141                                         <xsl:value-of select="$level1"></xsl:value-of>
3142                                 </number>
3143                         </detail>
3144                 </xsl:if>
3145                 <xsl:if test="$level2">
3146                         <detail level="2">
3147                                 <number>
3148                                         <xsl:value-of select="$level2"></xsl:value-of>
3149                                 </number>
3150                         </detail>
3151                 </xsl:if>
3152                 <xsl:if test="$level3">
3153                         <detail level="3">
3154                                 <number>
3155                                         <xsl:value-of select="$level3"></xsl:value-of>
3156                                 </number>
3157                         </detail>
3158                 </xsl:if>
3159                 <xsl:if test="$page">
3160                         <extent unit="page">
3161                                 <start>
3162                                         <xsl:value-of select="$page"></xsl:value-of>
3163                                 </start>
3164                         </extent>
3165                 </xsl:if>
3166         </xsl:template>
3167         <xsl:template name="getLanguage">
3168                 <xsl:param name="langString"></xsl:param>
3169                 <xsl:param name="controlField008-35-37"></xsl:param>
3170                 <xsl:variable name="length" select="string-length($langString)"></xsl:variable>
3171                 <xsl:choose>
3172                         <xsl:when test="$length=0"></xsl:when>
3173                         <xsl:when test="$controlField008-35-37=substring($langString,1,3)">
3174                                 <xsl:call-template name="getLanguage">
3175                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"></xsl:with-param>
3176                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"></xsl:with-param>
3177                                 </xsl:call-template>
3178                         </xsl:when>
3179                         <xsl:otherwise>
3180                                 <language>
3181                                         <languageTerm authority="iso639-2b" type="code">
3182                                                 <xsl:value-of select="substring($langString,1,3)"></xsl:value-of>
3183                                         </languageTerm>
3184                                 </language>
3185                                 <xsl:call-template name="getLanguage">
3186                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"></xsl:with-param>
3187                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"></xsl:with-param>
3188                                 </xsl:call-template>
3189                         </xsl:otherwise>
3190                 </xsl:choose>
3191         </xsl:template>
3192         <xsl:template name="isoLanguage">
3193                 <xsl:param name="currentLanguage"></xsl:param>
3194                 <xsl:param name="usedLanguages"></xsl:param>
3195                 <xsl:param name="remainingLanguages"></xsl:param>
3196                 <xsl:choose>
3197                         <xsl:when test="string-length($currentLanguage)=0"></xsl:when>
3198                         <xsl:when test="not(contains($usedLanguages, $currentLanguage))">
3199                                 <language>
3200                                         <xsl:if test="@code!='a'">
3201                                                 <xsl:attribute name="objectPart">
3202                                                         <xsl:choose>
3203                                                                 <xsl:when test="@code='b'">summary or subtitle</xsl:when>
3204                                                                 <xsl:when test="@code='d'">sung or spoken text</xsl:when>
3205                                                                 <xsl:when test="@code='e'">libretto</xsl:when>
3206                                                                 <xsl:when test="@code='f'">table of contents</xsl:when>
3207                                                                 <xsl:when test="@code='g'">accompanying material</xsl:when>
3208                                                                 <xsl:when test="@code='h'">translation</xsl:when>
3209                                                         </xsl:choose>
3210                                                 </xsl:attribute>
3211                                         </xsl:if>
3212                                         <languageTerm authority="iso639-2b" type="code">
3213                                                 <xsl:value-of select="$currentLanguage"></xsl:value-of>
3214                                         </languageTerm>
3215                                 </language>
3216                                 <xsl:call-template name="isoLanguage">
3217                                         <xsl:with-param name="currentLanguage">
3218                                                 <xsl:value-of select="substring($remainingLanguages,1,3)"></xsl:value-of>
3219                                         </xsl:with-param>
3220                                         <xsl:with-param name="usedLanguages">
3221                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"></xsl:value-of>
3222                                         </xsl:with-param>
3223                                         <xsl:with-param name="remainingLanguages">
3224                                                 <xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"></xsl:value-of>
3225                                         </xsl:with-param>
3226                                 </xsl:call-template>
3227                         </xsl:when>
3228                         <xsl:otherwise>
3229                                 <xsl:call-template name="isoLanguage">
3230                                         <xsl:with-param name="currentLanguage">
3231                                                 <xsl:value-of select="substring($remainingLanguages,1,3)"></xsl:value-of>
3232                                         </xsl:with-param>
3233                                         <xsl:with-param name="usedLanguages">
3234                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"></xsl:value-of>
3235                                         </xsl:with-param>
3236                                         <xsl:with-param name="remainingLanguages">
3237                                                 <xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"></xsl:value-of>
3238                                         </xsl:with-param>
3239                                 </xsl:call-template>
3240                         </xsl:otherwise>
3241                 </xsl:choose>
3242         </xsl:template>
3243         <xsl:template name="chopBrackets">
3244                 <xsl:param name="chopString"></xsl:param>
3245                 <xsl:variable name="string">
3246                         <xsl:call-template name="chopPunctuation">
3247                                 <xsl:with-param name="chopString" select="$chopString"></xsl:with-param>
3248                         </xsl:call-template>
3249                 </xsl:variable>
3250                 <xsl:if test="substring($string, 1,1)='['">
3251                         <xsl:value-of select="substring($string,2, string-length($string)-2)"></xsl:value-of>
3252                 </xsl:if>
3253                 <xsl:if test="substring($string, 1,1)!='['">
3254                         <xsl:value-of select="$string"></xsl:value-of>
3255                 </xsl:if>
3256         </xsl:template>
3257         <xsl:template name="rfcLanguages">
3258                 <xsl:param name="nodeNum"></xsl:param>
3259                 <xsl:param name="usedLanguages"></xsl:param>
3260                 <xsl:param name="controlField008-35-37"></xsl:param>
3261                 <xsl:variable name="currentLanguage" select="."></xsl:variable>
3262                 <xsl:choose>
3263                         <xsl:when test="not($currentLanguage)"></xsl:when>
3264                         <xsl:when test="$currentLanguage!=$controlField008-35-37 and $currentLanguage!='rfc3066'">
3265                                 <xsl:if test="not(contains($usedLanguages,$currentLanguage))">
3266                                         <language>
3267                                                 <xsl:if test="@code!='a'">
3268                                                         <xsl:attribute name="objectPart">
3269                                                                 <xsl:choose>
3270                                                                         <xsl:when test="@code='b'">summary or subtitle</xsl:when>
3271                                                                         <xsl:when test="@code='d'">sung or spoken text</xsl:when>
3272                                                                         <xsl:when test="@code='e'">libretto</xsl:when>
3273                                                                         <xsl:when test="@code='f'">table of contents</xsl:when>
3274                                                                         <xsl:when test="@code='g'">accompanying material</xsl:when>
3275                                                                         <xsl:when test="@code='h'">translation</xsl:when>
3276                                                                 </xsl:choose>
3277                                                         </xsl:attribute>
3278                                                 </xsl:if>
3279                                                 <languageTerm authority="rfc3066" type="code">
3280                                                         <xsl:value-of select="$currentLanguage"/>
3281                                                 </languageTerm>
3282                                         </language>
3283                                 </xsl:if>
3284                         </xsl:when>
3285                         <xsl:otherwise>
3286                         </xsl:otherwise>
3287                 </xsl:choose>
3288         </xsl:template>
3289         <xsl:template name="datafield">
3290                 <xsl:param name="tag"/>
3291                 <xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param>
3292                 <xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param>
3293                 <xsl:param name="subfields"/>
3294                 <xsl:element name="marc:datafield">
3295                         <xsl:attribute name="tag">
3296                                 <xsl:value-of select="$tag"/>
3297                         </xsl:attribute>
3298                         <xsl:attribute name="ind1">
3299                                 <xsl:value-of select="$ind1"/>
3300                         </xsl:attribute>
3301                         <xsl:attribute name="ind2">
3302                                 <xsl:value-of select="$ind2"/>
3303                         </xsl:attribute>
3304                         <xsl:copy-of select="$subfields"/>
3305                 </xsl:element>
3306         </xsl:template>
3307
3308         <xsl:template name="subfieldSelect">
3309                 <xsl:param name="codes"/>
3310                 <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
3311                 <xsl:variable name="str">
3312                         <xsl:for-each select="marc:subfield">
3313                                 <xsl:if test="contains($codes, @code)">
3314                                         <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
3315                                 </xsl:if>
3316                         </xsl:for-each>
3317                 </xsl:variable>
3318                 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
3319         </xsl:template>
3320
3321         <xsl:template name="buildSpaces">
3322                 <xsl:param name="spaces"/>
3323                 <xsl:param name="char"><xsl:text> </xsl:text></xsl:param>
3324                 <xsl:if test="$spaces>0">
3325                         <xsl:value-of select="$char"/>
3326                         <xsl:call-template name="buildSpaces">
3327                                 <xsl:with-param name="spaces" select="$spaces - 1"/>
3328                                 <xsl:with-param name="char" select="$char"/>
3329                         </xsl:call-template>
3330                 </xsl:if>
3331         </xsl:template>
3332
3333         <xsl:template name="chopPunctuation">
3334                 <xsl:param name="chopString"/>
3335                 <xsl:param name="punctuation"><xsl:text>.:,;/ </xsl:text></xsl:param>
3336                 <xsl:variable name="length" select="string-length($chopString)"/>
3337                 <xsl:choose>
3338                         <xsl:when test="$length=0"/>
3339                         <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
3340                                 <xsl:call-template name="chopPunctuation">
3341                                         <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
3342                                         <xsl:with-param name="punctuation" select="$punctuation"/>
3343                                 </xsl:call-template>
3344                         </xsl:when>
3345                         <xsl:when test="not($chopString)"/>
3346                         <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
3347                 </xsl:choose>
3348         </xsl:template>
3349
3350         <xsl:template name="chopPunctuationFront">
3351                 <xsl:param name="chopString"/>
3352                 <xsl:variable name="length" select="string-length($chopString)"/>
3353                 <xsl:choose>
3354                         <xsl:when test="$length=0"/>
3355                         <xsl:when test="contains('.:,;/[ ', substring($chopString,1,1))">
3356                                 <xsl:call-template name="chopPunctuationFront">
3357                                         <xsl:with-param name="chopString" select="substring($chopString,2,$length - 1)"/>
3358                                 </xsl:call-template>
3359                         </xsl:when>
3360                         <xsl:when test="not($chopString)"/>
3361                         <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
3362                 </xsl:choose>
3363         </xsl:template>
3364 </xsl:stylesheet>$XXXX$ where name = $$mods32$$;
3365
3366 update config.xml_transform set xslt = $XXXX$<xsl:stylesheet xmlns="http://www.loc.gov/mods/v3" xmlns:marc="http://www.loc.gov/MARC21/slim"
3367         xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3368         exclude-result-prefixes="xlink marc" version="1.0">
3369         <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
3370
3371         <xsl:variable name="ascii">
3372                 <xsl:text> !"#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~</xsl:text>
3373         </xsl:variable>
3374
3375         <xsl:variable name="latin1">
3376                 <xsl:text> ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ</xsl:text>
3377         </xsl:variable>
3378         <!-- Characters that usually don't need to be escaped -->
3379         <xsl:variable name="safe">
3380                 <xsl:text>!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~</xsl:text>
3381         </xsl:variable>
3382
3383         <xsl:variable name="hex">0123456789ABCDEF</xsl:variable>
3384
3385     <!-- Evergreen specific: revert Revision 1.23, so we can have those authority xlink attributes back. -->
3386
3387         <!--MARC21slim2MODS3-3.xsl
3388 Revision 1.27 - Mapped 648 to <subject> 2009/03/13 tmee
3389 Revision 1.26 - Added subfield $s mapping for 130/240/730  2008/10/16 tmee
3390 Revision 1.25 - Mapped 040e to <descriptiveStandard> and Leader/18 to <descriptive standard>aacr2  2008/09/18 tmee
3391 Revision 1.24 - Mapped 852 subfields $h, $i, $j, $k, $l, $m, $t to <shelfLocation> and 852 subfield $u to <physicalLocation> with @xlink 2008/09/17 tmee
3392 Revision 1.23 - Commented out xlink/uri for subfield 0 for 130/240/730, 100/700, 110/710, 111/711 as these are currently unactionable  2008/09/17  tmee
3393 Revision 1.22 - Mapped 022 subfield $l to type "issn-l" subfield $m to output identifier element with corresponding @type and @invalid eq 'yes'2008/09/17  tmee
3394 Revision 1.21 - Mapped 856 ind2=1 or ind2=2 to <relatedItem><location><url>  2008/07/03  tmee
3395 Revision 1.20 - Added genre w/@auth="contents of 2" and type= "musical composition"  2008/07/01  tmee
3396 Revision 1.19 - Added genre offprint for 008/24+ BK code 2  2008/07/01  tmee
3397 Revision 1.18 - Added xlink/uri for subfield 0 for 130/240/730, 100/700, 110/710, 111/711  2008/06/26  tmee
3398 Revision 1.17 - Added mapping of 662 2008/05/14 tmee
3399 Revision 1.16 - Changed @authority from "marc" to "marcgt" for 007 and 008 codes mapped to a term in <genre> 2007/07/10  tmee
3400 Revision 1.15 - For field 630, moved call to part template outside title element  2007/07/10  tmee
3401 Revision 1.14 - Fixed template isValid and fields 010, 020, 022, 024, 028, and 037 to output additional identifier elements with corresponding @type and @invalid eq 'yes' when subfields z or y (in the case of 022) exist in the MARCXML ::: 2007/01/04 17:35:20 cred
3402 Revision 1.13 - Changed order of output under cartographics to reflect schema  2006/11/28  tmee
3403 Revision 1.12 - Updated to reflect MODS 3.2 Mapping  2006/10/11  tmee
3404 Revision 1.11 - The attribute objectPart moved from <languageTerm> to <language>  2006/04/08  jrad
3405 Revision 1.10 - MODS 3.1 revisions to language and classification elements  (plus ability to find marc:collection embedded in wrapper elements such as SRU zs: wrappers)  2006/02/06  ggar
3406 Revision 1.9 - Subfield $y was added to field 242 2004/09/02 10:57 jrad
3407 Revision 1.8 - Subject chopPunctuation expanded and attribute fixes 2004/08/12 jrad
3408 Revision 1.7 - 2004/03/25 08:29 jrad
3409 Revision 1.6 - Various validation fixes 2004/02/20 ntra
3410 Revision 1.5 - MODS2 to MODS3 updates, language unstacking and de-duping, chopPunctuation expanded  2003/10/02 16:18:58  ntra
3411 Revision 1.3 - Additional Changes not related to MODS Version 2.0 by ntra
3412 Revision 1.2 - Added Log Comment  2003/03/24 19:37:42  ckeith
3413 -->
3414         <xsl:template match="/">
3415                 <xsl:choose>
3416                         <xsl:when test="//marc:collection">
3417                                 <modsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3418                                         xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
3419                                         <xsl:for-each select="//marc:collection/marc:record">
3420                                                 <mods version="3.3">
3421                                                         <xsl:call-template name="marcRecord"/>
3422                                                 </mods>
3423                                         </xsl:for-each>
3424                                 </modsCollection>
3425                         </xsl:when>
3426                         <xsl:otherwise>
3427                                 <mods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"
3428                                         xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
3429                                         <xsl:for-each select="//marc:record">
3430                                                 <xsl:call-template name="marcRecord"/>
3431                                         </xsl:for-each>
3432                                 </mods>
3433                         </xsl:otherwise>
3434                 </xsl:choose>
3435         </xsl:template>
3436         <xsl:template name="marcRecord">
3437                 <xsl:variable name="leader" select="marc:leader"/>
3438                 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
3439                 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
3440                 <xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
3441                 <xsl:variable name="typeOf008">
3442                         <xsl:choose>
3443                                 <xsl:when test="$leader6='a'">
3444                                         <xsl:choose>
3445                                                 <xsl:when
3446                                                         test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
3447                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
3448                                         </xsl:choose>
3449                                 </xsl:when>
3450                                 <xsl:when test="$leader6='t'">BK</xsl:when>
3451                                 <xsl:when test="$leader6='p'">MM</xsl:when>
3452                                 <xsl:when test="$leader6='m'">CF</xsl:when>
3453                                 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
3454                                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
3455                                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'"
3456                                 >MU</xsl:when>
3457                         </xsl:choose>
3458                 </xsl:variable>
3459                 <xsl:for-each select="marc:datafield[@tag='245']">
3460                         <titleInfo>
3461                                 <xsl:variable name="title">
3462                                         <xsl:choose>
3463                                                 <xsl:when test="marc:subfield[@code='b']">
3464                                                         <xsl:call-template name="specialSubfieldSelect">
3465                                                                 <xsl:with-param name="axis">b</xsl:with-param>
3466                                                                 <xsl:with-param name="beforeCodes">afgk</xsl:with-param>
3467                                                         </xsl:call-template>
3468                                                 </xsl:when>
3469                                                 <xsl:otherwise>
3470                                                         <xsl:call-template name="subfieldSelect">
3471                                                                 <xsl:with-param name="codes">abfgk</xsl:with-param>
3472                                                         </xsl:call-template>
3473                                                 </xsl:otherwise>
3474                                         </xsl:choose>
3475                                 </xsl:variable>
3476                                 <xsl:variable name="titleChop">
3477                                         <xsl:call-template name="chopPunctuation">
3478                                                 <xsl:with-param name="chopString">
3479                                                         <xsl:value-of select="$title"/>
3480                                                 </xsl:with-param>
3481                                                 <xsl:with-param name="punctuation">
3482                                                     <xsl:text>,;/ </xsl:text>
3483                                                 </xsl:with-param>
3484                                         </xsl:call-template>
3485                                 </xsl:variable>
3486                                 <xsl:choose>
3487                                         <xsl:when test="@ind2&gt;0">
3488                                                 <nonSort>
3489                                                         <xsl:value-of select="substring($titleChop,1,@ind2)"/>
3490                                                 </nonSort>
3491                                                 <title>
3492                                                         <xsl:value-of select="substring($titleChop,@ind2+1)"/>
3493                                                 </title>
3494                                         </xsl:when>
3495                                         <xsl:otherwise>
3496                                                 <title>
3497                                                         <xsl:value-of select="$titleChop"/>
3498                                                 </title>
3499                                         </xsl:otherwise>
3500                                 </xsl:choose>
3501                                 <xsl:if test="marc:subfield[@code='b']">
3502                                         <subTitle>
3503                                                 <xsl:call-template name="chopPunctuation">
3504                                                         <xsl:with-param name="chopString">
3505                                                                 <xsl:call-template name="specialSubfieldSelect">
3506                                                                         <xsl:with-param name="axis">b</xsl:with-param>
3507                                                                         <xsl:with-param name="anyCodes">b</xsl:with-param>
3508                                                                         <xsl:with-param name="afterCodes">afgk</xsl:with-param>
3509                                                                 </xsl:call-template>
3510                                                         </xsl:with-param>
3511                                                 </xsl:call-template>
3512                                         </subTitle>
3513                                 </xsl:if>
3514                                 <xsl:call-template name="part"/>
3515                         </titleInfo>
3516                 </xsl:for-each>
3517                 <xsl:for-each select="marc:datafield[@tag='210']">
3518                         <titleInfo type="abbreviated">
3519                                 <title>
3520                                         <xsl:call-template name="chopPunctuation">
3521                                                 <xsl:with-param name="chopString">
3522                                                         <xsl:call-template name="subfieldSelect">
3523                                                                 <xsl:with-param name="codes">a</xsl:with-param>
3524                                                         </xsl:call-template>
3525                                                 </xsl:with-param>
3526                                         </xsl:call-template>
3527                                 </title>
3528                                 <xsl:call-template name="subtitle"/>
3529                         </titleInfo>
3530                 </xsl:for-each>
3531                 <xsl:for-each select="marc:datafield[@tag='242']">
3532                         <titleInfo type="translated">
3533                                 <!--09/01/04 Added subfield $y-->
3534                                 <xsl:for-each select="marc:subfield[@code='y']">
3535                                         <xsl:attribute name="lang">
3536                                                 <xsl:value-of select="text()"/>
3537                                         </xsl:attribute>
3538                                 </xsl:for-each>
3539                                 <xsl:for-each select="marc:subfield[@code='i']">
3540                                         <xsl:attribute name="displayLabel">
3541                                                 <xsl:value-of select="text()"/>
3542                                         </xsl:attribute>
3543                                 </xsl:for-each>
3544                                 <title>
3545                                         <xsl:call-template name="chopPunctuation">
3546                                                 <xsl:with-param name="chopString">
3547                                                         <xsl:call-template name="subfieldSelect">
3548                                                                 <!-- 1/04 removed $h, b -->
3549                                                                 <xsl:with-param name="codes">a</xsl:with-param>
3550                                                         </xsl:call-template>
3551                                                 </xsl:with-param>
3552                                         </xsl:call-template>
3553                                 </title>
3554                                 <!-- 1/04 fix -->
3555                                 <xsl:call-template name="subtitle"/>
3556                                 <xsl:call-template name="part"/>
3557                         </titleInfo>
3558                 </xsl:for-each>
3559                 <xsl:for-each select="marc:datafield[@tag='246']">
3560                         <titleInfo type="alternative">
3561                                 <xsl:for-each select="marc:subfield[@code='i']">
3562                                         <xsl:attribute name="displayLabel">
3563                                                 <xsl:value-of select="text()"/>
3564                                         </xsl:attribute>
3565                                 </xsl:for-each>
3566                                 <title>
3567                                         <xsl:call-template name="chopPunctuation">
3568                                                 <xsl:with-param name="chopString">
3569                                                         <xsl:call-template name="subfieldSelect">
3570                                                                 <!-- 1/04 removed $h, $b -->
3571                                                                 <xsl:with-param name="codes">af</xsl:with-param>
3572                                                         </xsl:call-template>
3573                                                 </xsl:with-param>
3574                                         </xsl:call-template>
3575                                 </title>
3576                                 <xsl:call-template name="subtitle"/>
3577                                 <xsl:call-template name="part"/>
3578                         </titleInfo>
3579                 </xsl:for-each>
3580                 <xsl:for-each
3581                         select="marc:datafield[@tag='130']|marc:datafield[@tag='240']|marc:datafield[@tag='730'][@ind2!='2']">
3582                         <titleInfo type="uniform">
3583                                 <title>
3584                                                 <xsl:call-template name="uri"/>
3585
3586                                         <xsl:variable name="str">
3587                                                 <xsl:for-each select="marc:subfield">
3588                                                         <xsl:if
3589                                                                 test="(contains('adfklmors',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
3590                                                                 <xsl:value-of select="text()"/>
3591                                                                 <xsl:text> </xsl:text>
3592                                                         </xsl:if>
3593                                                 </xsl:for-each>
3594                                         </xsl:variable>
3595                                         <xsl:call-template name="chopPunctuation">
3596                                                 <xsl:with-param name="chopString">
3597                                                         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
3598                                                 </xsl:with-param>
3599                                         </xsl:call-template>
3600                                 </title>
3601                                 <xsl:call-template name="part"/>
3602                         </titleInfo>
3603                 </xsl:for-each>
3604                 <xsl:for-each select="marc:datafield[@tag='740'][@ind2!='2']">
3605                         <titleInfo type="alternative">
3606                                 <title>
3607                                         <xsl:call-template name="chopPunctuation">
3608                                                 <xsl:with-param name="chopString">
3609                                                         <xsl:call-template name="subfieldSelect">
3610                                                                 <xsl:with-param name="codes">ah</xsl:with-param>
3611                                                         </xsl:call-template>
3612                                                 </xsl:with-param>
3613                                         </xsl:call-template>
3614                                 </title>
3615                                 <xsl:call-template name="part"/>
3616                         </titleInfo>
3617                 </xsl:for-each>
3618                 <xsl:for-each select="marc:datafield[@tag='100']">
3619                         <name type="personal">
3620
3621                                 <xsl:call-template name="uri"/>
3622
3623                                 <xsl:call-template name="nameABCDQ"/>
3624                                 <xsl:call-template name="affiliation"/>
3625                                 <role>
3626                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
3627                                 </role>
3628                                 <xsl:call-template name="role"/>
3629                         </name>
3630                 </xsl:for-each>
3631                 <xsl:for-each select="marc:datafield[@tag='110']">
3632                         <name type="corporate">
3633
3634                                         <xsl:call-template name="uri"/>
3635
3636                                 <xsl:call-template name="nameABCDN"/>
3637                                 <role>
3638                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
3639                                 </role>
3640                                 <xsl:call-template name="role"/>
3641                         </name>
3642                 </xsl:for-each>
3643                 <xsl:for-each select="marc:datafield[@tag='111']">
3644                         <name type="conference">
3645
3646                                         <xsl:call-template name="uri"/>
3647
3648                                 <xsl:call-template name="nameACDEQ"/>
3649                                 <role>
3650                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
3651                                 </role>
3652                                 <xsl:call-template name="role"/>
3653                         </name>
3654                 </xsl:for-each>
3655                 <xsl:for-each select="marc:datafield[@tag='700'][not(marc:subfield[@code='t'])]">
3656                         <name type="personal">
3657
3658                                         <xsl:call-template name="uri"/>
3659
3660                                 <xsl:call-template name="nameABCDQ"/>
3661                                 <xsl:call-template name="affiliation"/>
3662                                 <xsl:call-template name="role"/>
3663                         </name>
3664                 </xsl:for-each>
3665                 <xsl:for-each select="marc:datafield[@tag='710'][not(marc:subfield[@code='t'])]">
3666                         <name type="corporate">
3667
3668                                         <xsl:call-template name="uri"/>
3669
3670                                 <xsl:call-template name="nameABCDN"/>
3671                                 <xsl:call-template name="role"/>
3672                         </name>
3673                 </xsl:for-each>
3674                 <xsl:for-each select="marc:datafield[@tag='711'][not(marc:subfield[@code='t'])]">
3675                         <name type="conference">
3676
3677                                         <xsl:call-template name="uri"/>
3678
3679                                 <xsl:call-template name="nameACDEQ"/>
3680                                 <xsl:call-template name="role"/>
3681                         </name>
3682                 </xsl:for-each>
3683                 <xsl:for-each select="marc:datafield[@tag='720'][not(marc:subfield[@code='t'])]">
3684                         <name>
3685                                 <xsl:if test="@ind1=1">
3686                                         <xsl:attribute name="type">
3687                                                 <xsl:text>personal</xsl:text>
3688                                         </xsl:attribute>
3689                                 </xsl:if>
3690                                 <namePart>
3691                                         <xsl:value-of select="marc:subfield[@code='a']"/>
3692                                 </namePart>
3693                                 <xsl:call-template name="role"/>
3694                         </name>
3695                 </xsl:for-each>
3696                 <typeOfResource>
3697                         <xsl:if test="$leader7='c'">
3698                                 <xsl:attribute name="collection">yes</xsl:attribute>
3699                         </xsl:if>
3700                         <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
3701                                 <xsl:attribute name="manuscript">yes</xsl:attribute>
3702                         </xsl:if>
3703                         <xsl:choose>
3704                                 <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
3705                                 <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
3706                                 <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
3707                                 <xsl:when test="$leader6='i'">sound recording-nonmusical</xsl:when>
3708                                 <xsl:when test="$leader6='j'">sound recording-musical</xsl:when>
3709                                 <xsl:when test="$leader6='k'">still image</xsl:when>
3710                                 <xsl:when test="$leader6='g'">moving image</xsl:when>
3711                                 <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
3712                                 <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
3713                                 <xsl:when test="$leader6='p'">mixed material</xsl:when>
3714                         </xsl:choose>
3715                 </typeOfResource>
3716                 <xsl:if test="substring($controlField008,26,1)='d'">
3717                         <genre authority="marcgt">globe</genre>
3718                 </xsl:if>
3719                 <xsl:if
3720                         test="marc:controlfield[@tag='007'][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
3721                         <genre authority="marcgt">remote-sensing image</genre>
3722                 </xsl:if>
3723                 <xsl:if test="$typeOf008='MP'">
3724                         <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"/>
3725                         <xsl:choose>
3726                                 <xsl:when
3727                                         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']">
3728                                         <genre authority="marcgt">map</genre>
3729                                 </xsl:when>
3730                                 <xsl:when
3731                                         test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
3732                                         <genre authority="marcgt">atlas</genre>
3733                                 </xsl:when>
3734                         </xsl:choose>
3735                 </xsl:if>
3736                 <xsl:if test="$typeOf008='SE'">
3737                         <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"/>
3738                         <xsl:choose>
3739                                 <xsl:when test="$controlField008-21='d'">
3740                                         <genre authority="marcgt">database</genre>
3741                                 </xsl:when>
3742                                 <xsl:when test="$controlField008-21='l'">
3743                                         <genre authority="marcgt">loose-leaf</genre>
3744                                 </xsl:when>
3745                                 <xsl:when test="$controlField008-21='m'">
3746                                         <genre authority="marcgt">series</genre>
3747                                 </xsl:when>
3748                                 <xsl:when test="$controlField008-21='n'">
3749                                         <genre authority="marcgt">newspaper</genre>
3750                                 </xsl:when>
3751                                 <xsl:when test="$controlField008-21='p'">
3752                                         <genre authority="marcgt">periodical</genre>
3753                                 </xsl:when>
3754                                 <xsl:when test="$controlField008-21='w'">
3755                                         <genre authority="marcgt">web site</genre>
3756                                 </xsl:when>
3757                         </xsl:choose>
3758                 </xsl:if>
3759                 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
3760                         <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"/>
3761                         <xsl:choose>
3762                                 <xsl:when test="contains($controlField008-24,'a')">
3763                                         <genre authority="marcgt">abstract or summary</genre>
3764                                 </xsl:when>
3765                                 <xsl:when test="contains($controlField008-24,'b')">
3766                                         <genre authority="marcgt">bibliography</genre>
3767                                 </xsl:when>
3768                                 <xsl:when test="contains($controlField008-24,'c')">
3769                                         <genre authority="marcgt">catalog</genre>
3770                                 </xsl:when>
3771                                 <xsl:when test="contains($controlField008-24,'d')">
3772                                         <genre authority="marcgt">dictionary</genre>
3773                                 </xsl:when>
3774                                 <xsl:when test="contains($controlField008-24,'e')">
3775                                         <genre authority="marcgt">encyclopedia</genre>
3776                                 </xsl:when>
3777                                 <xsl:when test="contains($controlField008-24,'f')">
3778                                         <genre authority="marcgt">handbook</genre>
3779                                 </xsl:when>
3780                                 <xsl:when test="contains($controlField008-24,'g')">
3781                                         <genre authority="marcgt">legal article</genre>
3782                                 </xsl:when>
3783                                 <xsl:when test="contains($controlField008-24,'i')">
3784                                         <genre authority="marcgt">index</genre>
3785                                 </xsl:when>
3786                                 <xsl:when test="contains($controlField008-24,'k')">
3787                                         <genre authority="marcgt">discography</genre>
3788                                 </xsl:when>
3789                                 <xsl:when test="contains($controlField008-24,'l')">
3790                                         <genre authority="marcgt">legislation</genre>
3791                                 </xsl:when>
3792                                 <xsl:when test="contains($controlField008-24,'m')">
3793                                         <genre authority="marcgt">theses</genre>
3794                                 </xsl:when>
3795                                 <xsl:when test="contains($controlField008-24,'n')">
3796                                         <genre authority="marcgt">survey of literature</genre>
3797                                 </xsl:when>
3798                                 <xsl:when test="contains($controlField008-24,'o')">
3799                                         <genre authority="marcgt">review</genre>
3800                                 </xsl:when>
3801                                 <xsl:when test="contains($controlField008-24,'p')">
3802                                         <genre authority="marcgt">programmed text</genre>
3803                                 </xsl:when>
3804                                 <xsl:when test="contains($controlField008-24,'q')">
3805                                         <genre authority="marcgt">filmography</genre>
3806                                 </xsl:when>
3807                                 <xsl:when test="contains($controlField008-24,'r')">
3808                                         <genre authority="marcgt">directory</genre>
3809                                 </xsl:when>
3810                                 <xsl:when test="contains($controlField008-24,'s')">
3811                                         <genre authority="marcgt">statistics</genre>
3812                                 </xsl:when>
3813                                 <xsl:when test="contains($controlField008-24,'t')">
3814                                         <genre authority="marcgt">technical report</genre>
3815                                 </xsl:when>
3816                                 <xsl:when test="contains($controlField008-24,'v')">
3817                                         <genre authority="marcgt">legal case and case notes</genre>
3818                                 </xsl:when>
3819                                 <xsl:when test="contains($controlField008-24,'w')">
3820                                         <genre authority="marcgt">law report or digest</genre>
3821                                 </xsl:when>
3822                                 <xsl:when test="contains($controlField008-24,'z')">
3823                                         <genre authority="marcgt">treaty</genre>
3824                                 </xsl:when>
3825                         </xsl:choose>
3826                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
3827                         <xsl:choose>
3828                                 <xsl:when test="$controlField008-29='1'">
3829                                         <genre authority="marcgt">conference publication</genre>
3830                                 </xsl:when>
3831                         </xsl:choose>
3832                 </xsl:if>
3833                 <xsl:if test="$typeOf008='CF'">
3834                         <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"/>
3835                         <xsl:choose>
3836                                 <xsl:when test="$controlField008-26='a'">
3837                                         <genre authority="marcgt">numeric data</genre>
3838                                 </xsl:when>
3839                                 <xsl:when test="$controlField008-26='e'">
3840                                         <genre authority="marcgt">database</genre>
3841                                 </xsl:when>
3842                                 <xsl:when test="$controlField008-26='f'">
3843                                         <genre authority="marcgt">font</genre>
3844                                 </xsl:when>
3845                                 <xsl:when test="$controlField008-26='g'">
3846                                         <genre authority="marcgt">game</genre>
3847                                 </xsl:when>
3848                         </xsl:choose>
3849                 </xsl:if>
3850                 <xsl:if test="$typeOf008='BK'">
3851                         <xsl:if test="substring($controlField008,25,1)='j'">
3852                                 <genre authority="marcgt">patent</genre>
3853                         </xsl:if>
3854                         <xsl:if test="substring($controlField008,25,1)='2'">
3855                                 <genre authority="marcgt">offprint</genre>
3856                         </xsl:if>
3857                         <xsl:if test="substring($controlField008,31,1)='1'">
3858                                 <genre authority="marcgt">festschrift</genre>
3859                         </xsl:if>
3860                         <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"/>
3861                         <xsl:if
3862                                 test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
3863                                 <genre authority="marcgt">biography</genre>
3864                         </xsl:if>
3865                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
3866                         <xsl:choose>
3867                                 <xsl:when test="$controlField008-33='e'">
3868                                         <genre authority="marcgt">essay</genre>
3869                                 </xsl:when>
3870                                 <xsl:when test="$controlField008-33='d'">
3871                                         <genre authority="marcgt">drama</genre>
3872                                 </xsl:when>
3873                                 <xsl:when test="$controlField008-33='c'">
3874                                         <genre authority="marcgt">comic strip</genre>
3875                                 </xsl:when>
3876                                 <xsl:when test="$controlField008-33='l'">
3877                                         <genre authority="marcgt">fiction</genre>
3878                                 </xsl:when>
3879                                 <xsl:when test="$controlField008-33='h'">
3880                                         <genre authority="marcgt">humor, satire</genre>
3881                                 </xsl:when>
3882                                 <xsl:when test="$controlField008-33='i'">
3883                                         <genre authority="marcgt">letter</genre>
3884                                 </xsl:when>
3885                                 <xsl:when test="$controlField008-33='f'">
3886                                         <genre authority="marcgt">novel</genre>
3887                                 </xsl:when>
3888                                 <xsl:when test="$controlField008-33='j'">
3889                                         <genre authority="marcgt">short story</genre>
3890                                 </xsl:when>
3891                                 <xsl:when test="$controlField008-33='s'">
3892                                         <genre authority="marcgt">speech</genre>
3893                                 </xsl:when>
3894                         </xsl:choose>
3895                 </xsl:if>
3896                 <xsl:if test="$typeOf008='MU'">
3897                         <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"/>
3898                         <xsl:if test="contains($controlField008-30-31,'b')">
3899                                 <genre authority="marcgt">biography</genre>
3900                         </xsl:if>
3901                         <xsl:if test="contains($controlField008-30-31,'c')">
3902                                 <genre authority="marcgt">conference publication</genre>
3903                         </xsl:if>
3904                         <xsl:if test="contains($controlField008-30-31,'d')">
3905                                 <genre authority="marcgt">drama</genre>
3906                         </xsl:if>
3907                         <xsl:if test="contains($controlField008-30-31,'e')">
3908                                 <genre authority="marcgt">essay</genre>
3909                         </xsl:if>
3910                         <xsl:if test="contains($controlField008-30-31,'f')">
3911                                 <genre authority="marcgt">fiction</genre>
3912                         </xsl:if>
3913                         <xsl:if test="contains($controlField008-30-31,'o')">
3914                                 <genre authority="marcgt">folktale</genre>
3915                         </xsl:if>
3916                         <xsl:if test="contains($controlField008-30-31,'h')">
3917                                 <genre authority="marcgt">history</genre>
3918                         </xsl:if>
3919                         <xsl:if test="contains($controlField008-30-31,'k')">
3920                                 <genre authority="marcgt">humor, satire</genre>
3921                         </xsl:if>
3922                         <xsl:if test="contains($controlField008-30-31,'m')">
3923                                 <genre authority="marcgt">memoir</genre>
3924                         </xsl:if>
3925                         <xsl:if test="contains($controlField008-30-31,'p')">
3926                                 <genre authority="marcgt">poetry</genre>
3927                         </xsl:if>
3928                         <xsl:if test="contains($controlField008-30-31,'r')">
3929                                 <genre authority="marcgt">rehearsal</genre>
3930                         </xsl:if>
3931                         <xsl:if test="contains($controlField008-30-31,'g')">
3932                                 <genre authority="marcgt">reporting</genre>
3933                         </xsl:if>
3934                         <xsl:if test="contains($controlField008-30-31,'s')">
3935                                 <genre authority="marcgt">sound</genre>
3936                         </xsl:if>
3937                         <xsl:if test="contains($controlField008-30-31,'l')">
3938                                 <genre authority="marcgt">speech</genre>
3939                         </xsl:if>
3940                 </xsl:if>
3941                 <xsl:if test="$typeOf008='VM'">
3942                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
3943                         <xsl:choose>
3944                                 <xsl:when test="$controlField008-33='a'">
3945                                         <genre authority="marcgt">art original</genre>
3946                                 </xsl:when>
3947                                 <xsl:when test="$controlField008-33='b'">
3948                                         <genre authority="marcgt">kit</genre>
3949                                 </xsl:when>
3950                                 <xsl:when test="$controlField008-33='c'">
3951                                         <genre authority="marcgt">art reproduction</genre>
3952                                 </xsl:when>
3953                                 <xsl:when test="$controlField008-33='d'">
3954                                         <genre authority="marcgt">diorama</genre>
3955                                 </xsl:when>
3956                                 <xsl:when test="$controlField008-33='f'">
3957                                         <genre authority="marcgt">filmstrip</genre>
3958                                 </xsl:when>
3959                                 <xsl:when test="$controlField008-33='g'">
3960                                         <genre authority="marcgt">legal article</genre>
3961                                 </xsl:when>
3962                                 <xsl:when test="$controlField008-33='i'">
3963                                         <genre authority="marcgt">picture</genre>
3964                                 </xsl:when>
3965                                 <xsl:when test="$controlField008-33='k'">
3966                                         <genre authority="marcgt">graphic</genre>
3967                                 </xsl:when>
3968                                 <xsl:when test="$controlField008-33='l'">
3969                                         <genre authority="marcgt">technical drawing</genre>
3970                                 </xsl:when>
3971                                 <xsl:when test="$controlField008-33='m'">
3972                                         <genre authority="marcgt">motion picture</genre>
3973                                 </xsl:when>
3974                                 <xsl:when test="$controlField008-33='n'">
3975                                         <genre authority="marcgt">chart</genre>
3976                                 </xsl:when>
3977                                 <xsl:when test="$controlField008-33='o'">
3978                                         <genre authority="marcgt">flash card</genre>
3979                                 </xsl:when>
3980                                 <xsl:when test="$controlField008-33='p'">
3981                                         <genre authority="marcgt">microscope slide</genre>
3982                                 </xsl:when>
3983                                 <xsl:when
3984                                         test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
3985                                         <genre authority="marcgt">model</genre>
3986                                 </xsl:when>
3987                                 <xsl:when test="$controlField008-33='r'">
3988                                         <genre authority="marcgt">realia</genre>
3989                                 </xsl:when>
3990                                 <xsl:when test="$controlField008-33='s'">
3991                                         <genre authority="marcgt">slide</genre>
3992                                 </xsl:when>
3993                                 <xsl:when test="$controlField008-33='t'">
3994                                         <genre authority="marcgt">transparency</genre>
3995                                 </xsl:when>
3996                                 <xsl:when test="$controlField008-33='v'">
3997                                         <genre authority="marcgt">videorecording</genre>
3998                                 </xsl:when>
3999                                 <xsl:when test="$controlField008-33='w'">
4000                                         <genre authority="marcgt">toy</genre>
4001                                 </xsl:when>
4002                         </xsl:choose>
4003                 </xsl:if>
4004
4005                 <!-- 1.20 047 genre tmee-->
4006
4007                 <xsl:for-each select="marc:datafield[@tag=047]">
4008                         <genre authority="marcgt">
4009                                 <xsl:attribute name="authority">
4010                                         <xsl:value-of select="marc:subfield[@code='2']"/>
4011                                 </xsl:attribute>
4012                                 <xsl:call-template name="subfieldSelect">
4013                                         <xsl:with-param name="codes">abcdef</xsl:with-param>
4014                                         <xsl:with-param name="delimeter">-</xsl:with-param>
4015                                 </xsl:call-template>
4016                         </genre>
4017                 </xsl:for-each>
4018                 <xsl:for-each select="marc:datafield[@tag=655]">
4019                         <genre authority="marcgt">
4020                                 <xsl:attribute name="authority">
4021                                         <xsl:value-of select="marc:subfield[@code='2']"/>
4022                                 </xsl:attribute>
4023                                 <xsl:call-template name="subfieldSelect">
4024                                         <xsl:with-param name="codes">abvxyz</xsl:with-param>
4025                                         <xsl:with-param name="delimeter">-</xsl:with-param>
4026                                 </xsl:call-template>
4027                         </genre>
4028                 </xsl:for-each>
4029                 <originInfo>
4030                         <xsl:variable name="MARCpublicationCode"
4031                                 select="normalize-space(substring($controlField008,16,3))"/>
4032                         <xsl:if test="translate($MARCpublicationCode,'|','')">
4033                                 <place>
4034                                         <placeTerm>
4035                                                 <xsl:attribute name="type">code</xsl:attribute>
4036                                                 <xsl:attribute name="authority">marccountry</xsl:attribute>
4037                                                 <xsl:value-of select="$MARCpublicationCode"/>
4038                                         </placeTerm>
4039                                 </place>
4040                         </xsl:if>
4041                         <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
4042                                 <place>
4043                                         <placeTerm>
4044                                                 <xsl:attribute name="type">code</xsl:attribute>
4045                                                 <xsl:attribute name="authority">iso3166</xsl:attribute>
4046                                                 <xsl:value-of select="."/>
4047                                         </placeTerm>
4048                                 </place>
4049                         </xsl:for-each>
4050                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a']">
4051                                 <place>
4052                                         <placeTerm>
4053                                                 <xsl:attribute name="type">text</xsl:attribute>
4054                                                 <xsl:call-template name="chopPunctuationFront">
4055                                                         <xsl:with-param name="chopString">
4056                                                                 <xsl:call-template name="chopPunctuation">
4057                                                                         <xsl:with-param name="chopString" select="."/>
4058                                                                 </xsl:call-template>
4059                                                         </xsl:with-param>
4060                                                 </xsl:call-template>
4061                                         </placeTerm>
4062                                 </place>
4063                         </xsl:for-each>
4064                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='m']">
4065                                 <dateValid point="start">
4066                                         <xsl:value-of select="."/>
4067                                 </dateValid>
4068                         </xsl:for-each>
4069                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='n']">
4070                                 <dateValid point="end">
4071                                         <xsl:value-of select="."/>
4072                                 </dateValid>
4073                         </xsl:for-each>
4074                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='j']">
4075                                 <dateModified>
4076                                         <xsl:value-of select="."/>
4077                                 </dateModified>
4078                         </xsl:for-each>
4079                         <xsl:for-each
4080                                 select="marc:datafield[@tag=260]/marc:subfield[@code='b' or @code='c' or @code='g']">
4081                                 <xsl:choose>
4082                                         <xsl:when test="@code='b'">
4083                                                 <publisher>
4084                                                         <xsl:call-template name="chopPunctuation">
4085                                                                 <xsl:with-param name="chopString" select="."/>
4086                                                                 <xsl:with-param name="punctuation">
4087                                                                         <xsl:text>:,;/ </xsl:text>
4088                                                                 </xsl:with-param>
4089                                                         </xsl:call-template>
4090                                                 </publisher>
4091                                         </xsl:when>
4092                                         <xsl:when test="@code='c'">
4093                                                 <dateIssued>
4094                                                         <xsl:call-template name="chopPunctuation">
4095                                                                 <xsl:with-param name="chopString" select="."/>
4096                                                         </xsl:call-template>
4097                                                 </dateIssued>
4098                                         </xsl:when>
4099                                         <xsl:when test="@code='g'">
4100                                                 <dateCreated>
4101                                                         <xsl:value-of select="."/>
4102                                                 </dateCreated>
4103                                         </xsl:when>
4104                                 </xsl:choose>
4105                         </xsl:for-each>
4106                         <xsl:variable name="dataField260c">
4107                                 <xsl:call-template name="chopPunctuation">
4108                                         <xsl:with-param name="chopString"
4109                                                 select="marc:datafield[@tag=260]/marc:subfield[@code='c']"/>
4110                                 </xsl:call-template>
4111                         </xsl:variable>
4112                         <xsl:variable name="controlField008-7-10"
4113                                 select="normalize-space(substring($controlField008, 8, 4))"/>
4114                         <xsl:variable name="controlField008-11-14"
4115                                 select="normalize-space(substring($controlField008, 12, 4))"/>
4116                         <xsl:variable name="controlField008-6"
4117                                 select="normalize-space(substring($controlField008, 7, 1))"/>
4118                         <xsl:if
4119                                 test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
4120                                 <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
4121                                         <dateIssued encoding="marc">
4122                                                 <xsl:value-of select="$controlField008-7-10"/>
4123                                         </dateIssued>
4124                                 </xsl:if>
4125                         </xsl:if>
4126                         <xsl:if
4127                                 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'">
4128                                 <xsl:if test="$controlField008-7-10">
4129                                         <dateIssued encoding="marc" point="start">
4130                                                 <xsl:value-of select="$controlField008-7-10"/>
4131                                         </dateIssued>
4132                                 </xsl:if>
4133                         </xsl:if>
4134                         <xsl:if
4135                                 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'">
4136                                 <xsl:if test="$controlField008-11-14">
4137                                         <dateIssued encoding="marc" point="end">
4138                                                 <xsl:value-of select="$controlField008-11-14"/>
4139                                         </dateIssued>
4140                                 </xsl:if>
4141                         </xsl:if>
4142                         <xsl:if test="$controlField008-6='q'">
4143                                 <xsl:if test="$controlField008-7-10">
4144                                         <dateIssued encoding="marc" point="start" qualifier="questionable">
4145                                                 <xsl:value-of select="$controlField008-7-10"/>
4146                                         </dateIssued>
4147                                 </xsl:if>
4148                         </xsl:if>
4149                         <xsl:if test="$controlField008-6='q'">
4150                                 <xsl:if test="$controlField008-11-14">
4151                                         <dateIssued encoding="marc" point="end" qualifier="questionable">
4152                                                 <xsl:value-of select="$controlField008-11-14"/>
4153                                         </dateIssued>
4154                                 </xsl:if>
4155                         </xsl:if>
4156                         <xsl:if test="$controlField008-6='t'">
4157                                 <xsl:if test="$controlField008-11-14">
4158                                         <copyrightDate encoding="marc">
4159                                                 <xsl:value-of select="$controlField008-11-14"/>
4160                                         </copyrightDate>
4161                                 </xsl:if>
4162                         </xsl:if>
4163                         <xsl:for-each
4164                                 select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
4165                                 <dateCaptured encoding="iso8601">
4166                                         <xsl:value-of select="."/>
4167                                 </dateCaptured>
4168                         </xsl:for-each>
4169                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
4170                                 <dateCaptured encoding="iso8601" point="start">
4171                                         <xsl:value-of select="."/>
4172                                 </dateCaptured>
4173                         </xsl:for-each>
4174                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
4175                                 <dateCaptured encoding="iso8601" point="end">
4176                                         <xsl:value-of select="."/>
4177                                 </dateCaptured>
4178                         </xsl:for-each>
4179                         <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
4180                                 <edition>
4181                                         <xsl:value-of select="."/>
4182                                 </edition>
4183                         </xsl:for-each>
4184                         <xsl:for-each select="marc:leader">
4185                                 <issuance>
4186                                         <xsl:choose>
4187                                                 <xsl:when
4188                                                         test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'"
4189                                                         >monographic</xsl:when>
4190                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'"
4191                                                 >continuing</xsl:when>
4192                                         </xsl:choose>
4193                                 </issuance>
4194                         </xsl:for-each>
4195                         <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
4196                                 <frequency>
4197                                         <xsl:call-template name="subfieldSelect">
4198                                                 <xsl:with-param name="codes">ab</xsl:with-param>
4199                                         </xsl:call-template>
4200                                 </frequency>
4201                         </xsl:for-each>
4202                 </originInfo>
4203                 <xsl:variable name="controlField008-35-37"
4204                         select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"/>
4205                 <xsl:if test="$controlField008-35-37">
4206                         <language>
4207                                 <languageTerm authority="iso639-2b" type="code">
4208                                         <xsl:value-of select="substring($controlField008,36,3)"/>
4209                                 </languageTerm>
4210                         </language>
4211                 </xsl:if>
4212                 <xsl:for-each select="marc:datafield[@tag=041]">
4213                         <xsl:for-each
4214                                 select="marc:subfield[@code='a' or @code='b' or @code='d' or @code='e' or @code='f' or @code='g' or @code='h']">
4215                                 <xsl:variable name="langCodes" select="."/>
4216                                 <xsl:choose>
4217                                         <xsl:when test="../marc:subfield[@code='2']='rfc3066'">
4218                                                 <!-- not stacked but could be repeated -->
4219                                                 <xsl:call-template name="rfcLanguages">
4220                                                         <xsl:with-param name="nodeNum">
4221                                                                 <xsl:value-of select="1"/>
4222                                                         </xsl:with-param>
4223                                                         <xsl:with-param name="usedLanguages">
4224                                                                 <xsl:text/>
4225                                                         </xsl:with-param>
4226                                                         <xsl:with-param name="controlField008-35-37">
4227                                                                 <xsl:value-of select="$controlField008-35-37"/>
4228                                                         </xsl:with-param>
4229                                                 </xsl:call-template>
4230                                         </xsl:when>
4231                                         <xsl:otherwise>
4232                                                 <!-- iso -->
4233                                                 <xsl:variable name="allLanguages">
4234                                                         <xsl:copy-of select="$langCodes"/>
4235                                                 </xsl:variable>
4236                                                 <xsl:variable name="currentLanguage">
4237                                                         <xsl:value-of select="substring($allLanguages,1,3)"/>
4238                                                 </xsl:variable>
4239                                                 <xsl:call-template name="isoLanguage">
4240                                                         <xsl:with-param name="currentLanguage">
4241                                                                 <xsl:value-of select="substring($allLanguages,1,3)"/>
4242                                                         </xsl:with-param>
4243                                                         <xsl:with-param name="remainingLanguages">
4244                                                                 <xsl:value-of
4245                                                                         select="substring($allLanguages,4,string-length($allLanguages)-3)"
4246                                                                 />
4247                                                         </xsl:with-param>
4248                                                         <xsl:with-param name="usedLanguages">
4249                                                                 <xsl:if test="$controlField008-35-37">
4250                                                                         <xsl:value-of select="$controlField008-35-37"/>
4251                                                                 </xsl:if>
4252                                                         </xsl:with-param>
4253                                                 </xsl:call-template>
4254                                         </xsl:otherwise>
4255                                 </xsl:choose>
4256                         </xsl:for-each>
4257                 </xsl:for-each>
4258                 <xsl:variable name="physicalDescription">
4259                         <!--3.2 change tmee 007/11 -->
4260                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a']">
4261                                 <digitalOrigin>reformatted digital</digitalOrigin>
4262                         </xsl:if>
4263                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='b']">
4264                                 <digitalOrigin>digitized microfilm</digitalOrigin>
4265                         </xsl:if>
4266                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='d']">
4267                                 <digitalOrigin>digitized other analog</digitalOrigin>
4268                         </xsl:if>
4269                         <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"/>
4270                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
4271                         <xsl:variable name="check008-23">
4272                                 <xsl:if
4273                                         test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
4274                                         <xsl:value-of select="true()"/>
4275                                 </xsl:if>
4276                         </xsl:variable>
4277                         <xsl:variable name="check008-29">
4278                                 <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
4279                                         <xsl:value-of select="true()"/>
4280                                 </xsl:if>
4281                         </xsl:variable>
4282                         <xsl:choose>
4283                                 <xsl:when
4284                                         test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
4285                                         <form authority="marcform">braille</form>
4286                                 </xsl:when>
4287                                 <xsl:when
4288                                         test="($controlField008-23=' ' and ($leader6='c' or $leader6='d')) or (($typeOf008='BK' or $typeOf008='SE') and ($controlField008-23=' ' or $controlField008='r'))">
4289                                         <form authority="marcform">print</form>
4290                                 </xsl:when>
4291                                 <xsl:when
4292                                         test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
4293                                         <form authority="marcform">electronic</form>
4294                                 </xsl:when>
4295                                 <xsl:when
4296                                         test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
4297                                         <form authority="marcform">microfiche</form>
4298                                 </xsl:when>
4299                                 <xsl:when
4300                                         test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
4301                                         <form authority="marcform">microfilm</form>
4302                                 </xsl:when>
4303                         </xsl:choose>
4304                         <!-- 1/04 fix -->
4305                         <xsl:if test="marc:datafield[@tag=130]/marc:subfield[@code='h']">
4306                                 <form authority="gmd">
4307                                         <xsl:call-template name="chopBrackets">
4308                                                 <xsl:with-param name="chopString">
4309                                                         <xsl:value-of select="marc:datafield[@tag=130]/marc:subfield[@code='h']"
4310                                                         />
4311                                                 </xsl:with-param>
4312                                         </xsl:call-template>
4313                                 </form>
4314                         </xsl:if>
4315                         <xsl:if test="marc:datafield[@tag=240]/marc:subfield[@code='h']">
4316                                 <form authority="gmd">
4317                                         <xsl:call-template name="chopBrackets">
4318                                                 <xsl:with-param name="chopString">
4319                                                         <xsl:value-of select="marc:datafield[@tag=240]/marc:subfield[@code='h']"
4320                                                         />
4321                                                 </xsl:with-param>
4322                                         </xsl:call-template>
4323                                 </form>
4324                         </xsl:if>
4325                         <xsl:if test="marc:datafield[@tag=242]/marc:subfield[@code='h']">
4326                                 <form authority="gmd">
4327                                         <xsl:call-template name="chopBrackets">
4328                                                 <xsl:with-param name="chopString">
4329                                                         <xsl:value-of select="marc:datafield[@tag=242]/marc:subfield[@code='h']"
4330                                                         />
4331                                                 </xsl:with-param>
4332                                         </xsl:call-template>
4333                                 </form>
4334                         </xsl:if>
4335                         <xsl:if test="marc:datafield[@tag=245]/marc:subfield[@code='h']">
4336                                 <form authority="gmd">
4337                                         <xsl:call-template name="chopBrackets">
4338                                                 <xsl:with-param name="chopString">
4339                                                         <xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='h']"
4340                                                         />
4341                                                 </xsl:with-param>
4342                                         </xsl:call-template>
4343                                 </form>
4344                         </xsl:if>
4345                         <xsl:if test="marc:datafield[@tag=246]/marc:subfield[@code='h']">
4346                                 <form authority="gmd">
4347                                         <xsl:call-template name="chopBrackets">
4348                                                 <xsl:with-param name="chopString">
4349                                                         <xsl:value-of select="marc:datafield[@tag=246]/marc:subfield[@code='h']"
4350                                                         />
4351                                                 </xsl:with-param>
4352                                         </xsl:call-template>
4353                                 </form>
4354                         </xsl:if>
4355                         <xsl:if test="marc:datafield[@tag=730]/marc:subfield[@code='h']">
4356                                 <form authority="gmd">
4357                                         <xsl:call-template name="chopBrackets">
4358                                                 <xsl:with-param name="chopString">
4359                                                         <xsl:value-of select="marc:datafield[@tag=730]/marc:subfield[@code='h']"
4360                                                         />
4361                                                 </xsl:with-param>
4362                                         </xsl:call-template>
4363                                 </form>
4364                         </xsl:if>
4365                         <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
4366                                 <form>
4367                                         <xsl:value-of select="."/>
4368                                 </form>
4369                         </xsl:for-each>
4370                         <xsl:for-each select="marc:controlfield[@tag=007][substring(text(),1,1)='c']">
4371                                 <xsl:choose>
4372                                         <xsl:when test="substring(text(),14,1)='a'">
4373                                                 <reformattingQuality>access</reformattingQuality>
4374                                         </xsl:when>
4375                                         <xsl:when test="substring(text(),14,1)='p'">
4376                                                 <reformattingQuality>preservation</reformattingQuality>
4377                                         </xsl:when>
4378                                         <xsl:when test="substring(text(),14,1)='r'">
4379                                                 <reformattingQuality>replacement</reformattingQuality>
4380                                         </xsl:when>
4381                                 </xsl:choose>
4382                         </xsl:for-each>
4383                         <!--3.2 change tmee 007/01 -->
4384                         <xsl:if
4385                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='b']">
4386                                 <form authority="smd">chip cartridge</form>
4387                         </xsl:if>
4388                         <xsl:if
4389                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='c']">
4390                                 <form authority="smd">computer optical disc cartridge</form>
4391                         </xsl:if>
4392                         <xsl:if
4393                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='j']">
4394                                 <form authority="smd">magnetic disc</form>
4395                         </xsl:if>
4396                         <xsl:if
4397                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='m']">
4398                                 <form authority="smd">magneto-optical disc</form>
4399                         </xsl:if>
4400                         <xsl:if
4401                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='o']">
4402                                 <form authority="smd">optical disc</form>
4403                         </xsl:if>
4404                         <xsl:if
4405                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='r']">
4406                                 <form authority="smd">remote</form>
4407                         </xsl:if>
4408                         <xsl:if
4409                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='a']">
4410                                 <form authority="smd">tape cartridge</form>
4411                         </xsl:if>
4412                         <xsl:if
4413                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='f']">
4414                                 <form authority="smd">tape cassette</form>
4415                         </xsl:if>
4416                         <xsl:if
4417                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='h']">
4418                                 <form authority="smd">tape reel</form>
4419                         </xsl:if>
4420
4421                         <xsl:if
4422                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='a']">
4423                                 <form authority="smd">celestial globe</form>
4424                         </xsl:if>
4425                         <xsl:if
4426                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='e']">
4427                                 <form authority="smd">earth moon globe</form>
4428                         </xsl:if>
4429                         <xsl:if
4430                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='b']">
4431                                 <form authority="smd">planetary or lunar globe</form>
4432                         </xsl:if>
4433                         <xsl:if
4434                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='c']">
4435                                 <form authority="smd">terrestrial globe</form>
4436                         </xsl:if>
4437
4438                         <xsl:if
4439                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='o'][substring(text(),2,1)='o']">
4440                                 <form authority="smd">kit</form>
4441                         </xsl:if>
4442
4443                         <xsl:if
4444                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
4445                                 <form authority="smd">atlas</form>
4446                         </xsl:if>
4447                         <xsl:if
4448                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='g']">
4449                                 <form authority="smd">diagram</form>
4450                         </xsl:if>
4451                         <xsl:if
4452                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='j']">
4453                                 <form authority="smd">map</form>
4454                         </xsl:if>
4455                         <xsl:if
4456                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
4457                                 <form authority="smd">model</form>
4458                         </xsl:if>
4459                         <xsl:if
4460                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='k']">
4461                                 <form authority="smd">profile</form>
4462                         </xsl:if>
4463                         <xsl:if
4464                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
4465                                 <form authority="smd">remote-sensing image</form>
4466                         </xsl:if>
4467                         <xsl:if
4468                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='s']">
4469                                 <form authority="smd">section</form>
4470                         </xsl:if>
4471                         <xsl:if
4472                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='y']">
4473                                 <form authority="smd">view</form>
4474                         </xsl:if>
4475
4476                         <xsl:if
4477                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='a']">
4478                                 <form authority="smd">aperture card</form>
4479                         </xsl:if>
4480                         <xsl:if
4481                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='e']">
4482                                 <form authority="smd">microfiche</form>
4483                         </xsl:if>
4484                         <xsl:if
4485                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='f']">
4486                                 <form authority="smd">microfiche cassette</form>
4487                         </xsl:if>
4488                         <xsl:if
4489                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='b']">
4490                                 <form authority="smd">microfilm cartridge</form>
4491                         </xsl:if>
4492                         <xsl:if
4493                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='c']">
4494                                 <form authority="smd">microfilm cassette</form>
4495                         </xsl:if>
4496                         <xsl:if
4497                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='d']">
4498                                 <form authority="smd">microfilm reel</form>
4499                         </xsl:if>
4500                         <xsl:if
4501                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='g']">
4502                                 <form authority="smd">microopaque</form>
4503                         </xsl:if>
4504
4505                         <xsl:if
4506                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='c']">
4507                                 <form authority="smd">film cartridge</form>
4508                         </xsl:if>
4509                         <xsl:if
4510                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='f']">
4511                                 <form authority="smd">film cassette</form>
4512                         </xsl:if>
4513                         <xsl:if
4514                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='r']">
4515                                 <form authority="smd">film reel</form>
4516                         </xsl:if>
4517
4518                         <xsl:if
4519                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='n']">
4520                                 <form authority="smd">chart</form>
4521                         </xsl:if>
4522                         <xsl:if
4523                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='c']">
4524                                 <form authority="smd">collage</form>
4525                         </xsl:if>
4526                         <xsl:if
4527                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='d']">
4528                                 <form authority="smd">drawing</form>
4529                         </xsl:if>
4530                         <xsl:if
4531                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='o']">
4532                                 <form authority="smd">flash card</form>
4533                         </xsl:if>
4534                         <xsl:if
4535                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='e']">
4536                                 <form authority="smd">painting</form>
4537                         </xsl:if>
4538                         <xsl:if
4539                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='f']">
4540                                 <form authority="smd">photomechanical print</form>
4541                         </xsl:if>
4542                         <xsl:if
4543                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='g']">
4544                                 <form authority="smd">photonegative</form>
4545                         </xsl:if>
4546                         <xsl:if
4547                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='h']">
4548                                 <form authority="smd">photoprint</form>
4549                         </xsl:if>
4550                         <xsl:if
4551                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='i']">
4552                                 <form authority="smd">picture</form>
4553                         </xsl:if>
4554                         <xsl:if
4555                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='j']">
4556                                 <form authority="smd">print</form>
4557                         </xsl:if>
4558                         <xsl:if
4559                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='l']">
4560                                 <form authority="smd">technical drawing</form>
4561                         </xsl:if>
4562
4563                         <xsl:if
4564                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='q'][substring(text(),2,1)='q']">
4565                                 <form authority="smd">notated music</form>
4566                         </xsl:if>
4567
4568                         <xsl:if
4569                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='d']">
4570                                 <form authority="smd">filmslip</form>
4571                         </xsl:if>
4572                         <xsl:if
4573                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='c']">
4574                                 <form authority="smd">filmstrip cartridge</form>
4575                         </xsl:if>
4576                         <xsl:if
4577                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='o']">
4578                                 <form authority="smd">filmstrip roll</form>
4579                         </xsl:if>
4580                         <xsl:if
4581                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='f']">
4582                                 <form authority="smd">other filmstrip type</form>
4583                         </xsl:if>
4584                         <xsl:if
4585                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='s']">
4586                                 <form authority="smd">slide</form>
4587                         </xsl:if>
4588                         <xsl:if
4589                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='t']">
4590                                 <form authority="smd">transparency</form>
4591                         </xsl:if>
4592                         <xsl:if
4593                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='r'][substring(text(),2,1)='r']">
4594                                 <form authority="smd">remote-sensing image</form>
4595                         </xsl:if>
4596                         <xsl:if
4597                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='e']">
4598                                 <form authority="smd">cylinder</form>
4599                         </xsl:if>
4600                         <xsl:if
4601                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='q']">
4602                                 <form authority="smd">roll</form>
4603                         </xsl:if>
4604                         <xsl:if
4605                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='g']">
4606                                 <form authority="smd">sound cartridge</form>
4607                         </xsl:if>
4608                         <xsl:if
4609                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='s']">
4610                                 <form authority="smd">sound cassette</form>
4611                         </xsl:if>
4612                         <xsl:if
4613                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='d']">
4614                                 <form authority="smd">sound disc</form>
4615                         </xsl:if>
4616                         <xsl:if
4617                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='t']">
4618                                 <form authority="smd">sound-tape reel</form>
4619                         </xsl:if>
4620                         <xsl:if
4621                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='i']">
4622                                 <form authority="smd">sound-track film</form>
4623                         </xsl:if>
4624                         <xsl:if
4625                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='w']">
4626                                 <form authority="smd">wire recording</form>
4627                         </xsl:if>
4628
4629                         <xsl:if
4630                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='c']">
4631                                 <form authority="smd">braille</form>
4632                         </xsl:if>
4633                         <xsl:if
4634                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='b']">
4635                                 <form authority="smd">combination</form>
4636                         </xsl:if>
4637                         <xsl:if
4638                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='a']">
4639                                 <form authority="smd">moon</form>
4640                         </xsl:if>
4641                         <xsl:if
4642                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='d']">
4643                                 <form authority="smd">tactile, with no writing system</form>
4644                         </xsl:if>
4645
4646                         <xsl:if
4647                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='c']">
4648                                 <form authority="smd">braille</form>
4649                         </xsl:if>
4650                         <xsl:if
4651                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='b']">
4652                                 <form authority="smd">large print</form>
4653                         </xsl:if>
4654                         <xsl:if
4655                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='a']">
4656                                 <form authority="smd">regular print</form>
4657                         </xsl:if>
4658                         <xsl:if
4659                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='d']">
4660                                 <form authority="smd">text in looseleaf binder</form>
4661                         </xsl:if>
4662
4663                         <xsl:if
4664                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='c']">
4665                                 <form authority="smd">videocartridge</form>
4666                         </xsl:if>
4667                         <xsl:if
4668                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='f']">
4669                                 <form authority="smd">videocassette</form>
4670                         </xsl:if>
4671                         <xsl:if
4672                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='d']">
4673                                 <form authority="smd">videodisc</form>
4674                         </xsl:if>
4675                         <xsl:if
4676                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='r']">
4677                                 <form authority="smd">videoreel</form>
4678                         </xsl:if>
4679
4680                         <xsl:for-each
4681                                 select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)&gt;1]">
4682                                 <internetMediaType>
4683                                         <xsl:value-of select="."/>
4684                                 </internetMediaType>
4685                         </xsl:for-each>
4686                         <xsl:for-each select="marc:datafield[@tag=300]">
4687                                 <extent>
4688                                         <xsl:call-template name="subfieldSelect">
4689                                                 <xsl:with-param name="codes">abce</xsl:with-param>
4690                                         </xsl:call-template>
4691                                 </extent>
4692                         </xsl:for-each>
4693                 </xsl:variable>
4694                 <xsl:if test="string-length(normalize-space($physicalDescription))">
4695                         <physicalDescription>
4696                                 <xsl:copy-of select="$physicalDescription"/>
4697                         </physicalDescription>
4698                 </xsl:if>
4699                 <xsl:for-each select="marc:datafield[@tag=520]">
4700                         <abstract>
4701                                 <xsl:call-template name="uri"/>
4702                                 <xsl:call-template name="subfieldSelect">
4703                                         <xsl:with-param name="codes">ab</xsl:with-param>
4704                                 </xsl:call-template>
4705                         </abstract>
4706                 </xsl:for-each>
4707                 <xsl:for-each select="marc:datafield[@tag=505]">
4708                         <tableOfContents>
4709                                 <xsl:call-template name="uri"/>
4710                                 <xsl:call-template name="subfieldSelect">
4711                                         <xsl:with-param name="codes">agrt</xsl:with-param>
4712                                 </xsl:call-template>
4713                         </tableOfContents>
4714                 </xsl:for-each>
4715                 <xsl:for-each select="marc:datafield[@tag=521]">
4716                         <targetAudience>
4717                                 <xsl:call-template name="subfieldSelect">
4718                                         <xsl:with-param name="codes">ab</xsl:with-param>
4719                                 </xsl:call-template>
4720                         </targetAudience>
4721                 </xsl:for-each>
4722                 <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
4723                         <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"/>
4724                         <xsl:choose>
4725                                 <!-- 01/04 fix -->
4726                                 <xsl:when test="$controlField008-22='d'">
4727                                         <targetAudience authority="marctarget">adolescent</targetAudience>
4728                                 </xsl:when>
4729                                 <xsl:when test="$controlField008-22='e'">
4730                                         <targetAudience authority="marctarget">adult</targetAudience>
4731                                 </xsl:when>
4732                                 <xsl:when test="$controlField008-22='g'">
4733                                         <targetAudience authority="marctarget">general</targetAudience>
4734                                 </xsl:when>
4735                                 <xsl:when
4736                                         test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
4737                                         <targetAudience authority="marctarget">juvenile</targetAudience>
4738                                 </xsl:when>
4739                                 <xsl:when test="$controlField008-22='a'">
4740                                         <targetAudience authority="marctarget">preschool</targetAudience>
4741                                 </xsl:when>
4742                                 <xsl:when test="$controlField008-22='f'">
4743                                         <targetAudience authority="marctarget">specialized</targetAudience>
4744                                 </xsl:when>
4745                         </xsl:choose>
4746                 </xsl:if>
4747                 <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
4748                         <note type="statement of responsibility">
4749                                 <xsl:value-of select="."/>
4750                         </note>
4751                 </xsl:for-each>
4752                 <xsl:for-each select="marc:datafield[@tag=500]">
4753                         <note>
4754                                 <xsl:value-of select="marc:subfield[@code='a']"/>
4755                                 <xsl:call-template name="uri"/>
4756                         </note>
4757                 </xsl:for-each>
4758
4759                 <!--3.2 change tmee additional note fields-->
4760
4761                 <xsl:for-each select="marc:datafield[@tag=502]">
4762                         <note type="thesis">
4763                                 <xsl:call-template name="uri"/>
4764                                 <xsl:variable name="str">
4765                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4766                                                 <xsl:value-of select="."/>
4767                                                 <xsl:text> </xsl:text>
4768                                         </xsl:for-each>
4769                                 </xsl:variable>
4770                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4771                         </note>
4772                 </xsl:for-each>
4773
4774                 <xsl:for-each select="marc:datafield[@tag=504]">
4775                         <note type="bibliography">
4776                                 <xsl:call-template name="uri"/>
4777                                 <xsl:variable name="str">
4778                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4779                                                 <xsl:value-of select="."/>
4780                                                 <xsl:text> </xsl:text>
4781                                         </xsl:for-each>
4782                                 </xsl:variable>
4783                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4784                         </note>
4785                 </xsl:for-each>
4786
4787                 <xsl:for-each select="marc:datafield[@tag=508]">
4788                         <note type="creation/production credits">
4789                                 <xsl:call-template name="uri"/>
4790                                 <xsl:variable name="str">
4791                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4792                                                 <xsl:value-of select="."/>
4793                                                 <xsl:text> </xsl:text>
4794                                         </xsl:for-each>
4795                                 </xsl:variable>
4796                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4797                         </note>
4798                 </xsl:for-each>
4799
4800                 <xsl:for-each select="marc:datafield[@tag=506]">
4801                         <note type="restrictions">
4802                                 <xsl:call-template name="uri"/>
4803                                 <xsl:variable name="str">
4804                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4805                                                 <xsl:value-of select="."/>
4806                                                 <xsl:text> </xsl:text>
4807                                         </xsl:for-each>
4808                                 </xsl:variable>
4809                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4810                         </note>
4811                 </xsl:for-each>
4812
4813                 <xsl:for-each select="marc:datafield[@tag=510]">
4814                         <note type="citation/reference">
4815                                 <xsl:call-template name="uri"/>
4816                                 <xsl:variable name="str">
4817                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4818                                                 <xsl:value-of select="."/>
4819                                                 <xsl:text> </xsl:text>
4820                                         </xsl:for-each>
4821                                 </xsl:variable>
4822                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4823                         </note>
4824                 </xsl:for-each>
4825
4826
4827                 <xsl:for-each select="marc:datafield[@tag=511]">
4828                         <note type="performers">
4829                                 <xsl:call-template name="uri"/>
4830                                 <xsl:value-of select="marc:subfield[@code='a']"/>
4831                         </note>
4832                 </xsl:for-each>
4833                 <xsl:for-each select="marc:datafield[@tag=518]">
4834                         <note type="venue">
4835                                 <xsl:call-template name="uri"/>
4836                                 <xsl:value-of select="marc:subfield[@code='a']"/>
4837                         </note>
4838                 </xsl:for-each>
4839
4840                 <xsl:for-each select="marc:datafield[@tag=530]">
4841                         <note type="additional physical form">
4842                                 <xsl:call-template name="uri"/>
4843                                 <xsl:variable name="str">
4844                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4845                                                 <xsl:value-of select="."/>
4846                                                 <xsl:text> </xsl:text>
4847                                         </xsl:for-each>
4848                                 </xsl:variable>
4849                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4850                         </note>
4851                 </xsl:for-each>
4852
4853                 <xsl:for-each select="marc:datafield[@tag=533]">
4854                         <note type="reproduction">
4855                                 <xsl:call-template name="uri"/>
4856                                 <xsl:variable name="str">
4857                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4858                                                 <xsl:value-of select="."/>
4859                                                 <xsl:text> </xsl:text>
4860                                         </xsl:for-each>
4861                                 </xsl:variable>
4862                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4863                         </note>
4864                 </xsl:for-each>
4865
4866                 <xsl:for-each select="marc:datafield[@tag=534]">
4867                         <note type="original version">
4868                                 <xsl:call-template name="uri"/>
4869                                 <xsl:variable name="str">
4870                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4871                                                 <xsl:value-of select="."/>
4872                                                 <xsl:text> </xsl:text>
4873                                         </xsl:for-each>
4874                                 </xsl:variable>
4875                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4876                         </note>
4877                 </xsl:for-each>
4878
4879                 <xsl:for-each select="marc:datafield[@tag=538]">
4880                         <note type="system details">
4881                                 <xsl:call-template name="uri"/>
4882                                 <xsl:variable name="str">
4883                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4884                                                 <xsl:value-of select="."/>
4885                                                 <xsl:text> </xsl:text>
4886                                         </xsl:for-each>
4887                                 </xsl:variable>
4888                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4889                         </note>
4890                 </xsl:for-each>
4891
4892                 <xsl:for-each select="marc:datafield[@tag=583]">
4893                         <note type="action">
4894                                 <xsl:call-template name="uri"/>
4895                                 <xsl:variable name="str">
4896                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4897                                                 <xsl:value-of select="."/>
4898                                                 <xsl:text> </xsl:text>
4899                                         </xsl:for-each>
4900                                 </xsl:variable>
4901                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4902                         </note>
4903                 </xsl:for-each>
4904
4905                 <xsl:for-each
4906                         select="marc:datafield[@tag=501 or @tag=507 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=535 or @tag=536 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=584 or @tag=585 or @tag=586]">
4907                         <note>
4908                                 <xsl:call-template name="uri"/>
4909                                 <xsl:variable name="str">
4910                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4911                                                 <xsl:value-of select="."/>
4912                                                 <xsl:text> </xsl:text>
4913                                         </xsl:for-each>
4914                                 </xsl:variable>
4915                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4916                         </note>
4917                 </xsl:for-each>
4918                 <xsl:for-each
4919                         select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
4920                         <subject>
4921                                 <cartographics>
4922                                         <coordinates>
4923                                                 <xsl:call-template name="subfieldSelect">
4924                                                         <xsl:with-param name="codes">defg</xsl:with-param>
4925                                                 </xsl:call-template>
4926                                         </coordinates>
4927                                 </cartographics>
4928                         </subject>
4929                 </xsl:for-each>
4930                 <xsl:for-each select="marc:datafield[@tag=043]">
4931                         <subject>
4932                                 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
4933                                         <geographicCode>
4934                                                 <xsl:attribute name="authority">
4935                                                         <xsl:if test="@code='a'">
4936                                                                 <xsl:text>marcgac</xsl:text>
4937                                                         </xsl:if>
4938                                                         <xsl:if test="@code='b'">
4939                                                                 <xsl:value-of select="following-sibling::marc:subfield[@code=2]"/>
4940                                                         </xsl:if>
4941                                                         <xsl:if test="@code='c'">
4942                                                                 <xsl:text>iso3166</xsl:text>
4943                                                         </xsl:if>
4944                                                 </xsl:attribute>
4945                                                 <xsl:value-of select="self::marc:subfield"/>
4946                                         </geographicCode>
4947                                 </xsl:for-each>
4948                         </subject>
4949                 </xsl:for-each>
4950                 <!-- tmee 2006/11/27 -->
4951                 <xsl:for-each select="marc:datafield[@tag=255]">
4952                         <subject>
4953                                 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
4954                                         <cartographics>
4955                                                 <xsl:if test="@code='a'">
4956                                                         <scale>
4957                                                                 <xsl:value-of select="."/>
4958                                                         </scale>
4959                                                 </xsl:if>
4960                                                 <xsl:if test="@code='b'">
4961                                                         <projection>
4962                                                                 <xsl:value-of select="."/>
4963                                                         </projection>
4964                                                 </xsl:if>
4965                                                 <xsl:if test="@code='c'">
4966                                                         <coordinates>
4967                                                                 <xsl:value-of select="."/>
4968                                                         </coordinates>
4969                                                 </xsl:if>
4970                                         </cartographics>
4971                                 </xsl:for-each>
4972                         </subject>
4973                 </xsl:for-each>
4974
4975                 <xsl:apply-templates select="marc:datafield[653 &gt;= @tag and @tag &gt;= 600]"/>
4976                 <xsl:apply-templates select="marc:datafield[@tag=656]"/>
4977                 <xsl:for-each select="marc:datafield[@tag=752 or @tag=662]">
4978                         <subject>
4979                                 <hierarchicalGeographic>
4980                                         <xsl:for-each select="marc:subfield[@code='a']">
4981                                                 <country>
4982                                                         <xsl:call-template name="chopPunctuation">
4983                                                                 <xsl:with-param name="chopString" select="."/>
4984                                                         </xsl:call-template>
4985                                                 </country>
4986                                         </xsl:for-each>
4987                                         <xsl:for-each select="marc:subfield[@code='b']">
4988                                                 <state>
4989                                                         <xsl:call-template name="chopPunctuation">
4990                                                                 <xsl:with-param name="chopString" select="."/>
4991                                                         </xsl:call-template>
4992                                                 </state>
4993                                         </xsl:for-each>
4994                                         <xsl:for-each select="marc:subfield[@code='c']">
4995                                                 <county>
4996                                                         <xsl:call-template name="chopPunctuation">
4997                                                                 <xsl:with-param name="chopString" select="."/>
4998                                                         </xsl:call-template>
4999                                                 </county>
5000                                         </xsl:for-each>
5001                                         <xsl:for-each select="marc:subfield[@code='d']">
5002                                                 <city>
5003                                                         <xsl:call-template name="chopPunctuation">
5004                                                                 <xsl:with-param name="chopString" select="."/>
5005                                                         </xsl:call-template>
5006                                                 </city>
5007                                         </xsl:for-each>
5008                                         <xsl:for-each select="marc:subfield[@code='e']">
5009                                                 <citySection>
5010                                                         <xsl:call-template name="chopPunctuation">
5011                                                                 <xsl:with-param name="chopString" select="."/>
5012                                                         </xsl:call-template>
5013                                                 </citySection>
5014                                         </xsl:for-each>
5015                                         <xsl:for-each select="marc:subfield[@code='g']">
5016                                                 <region>
5017                                                         <xsl:call-template name="chopPunctuation">
5018                                                                 <xsl:with-param name="chopString" select="."/>
5019                                                         </xsl:call-template>
5020                                                 </region>
5021                                         </xsl:for-each>
5022                                         <xsl:for-each select="marc:subfield[@code='h']">
5023                                                 <extraterrestrialArea>
5024                                                         <xsl:call-template name="chopPunctuation">
5025                                                                 <xsl:with-param name="chopString" select="."/>
5026                                                         </xsl:call-template>
5027                                                 </extraterrestrialArea>
5028                                         </xsl:for-each>
5029                                 </hierarchicalGeographic>
5030                         </subject>
5031                 </xsl:for-each>
5032                 <xsl:for-each select="marc:datafield[@tag=045][marc:subfield[@code='b']]">
5033                         <subject>
5034                                 <xsl:choose>
5035                                         <xsl:when test="@ind1=2">
5036                                                 <temporal encoding="iso8601" point="start">
5037                                                         <xsl:call-template name="chopPunctuation">
5038                                                                 <xsl:with-param name="chopString">
5039                                                                         <xsl:value-of select="marc:subfield[@code='b'][1]"/>
5040                                                                 </xsl:with-param>
5041                                                         </xsl:call-template>
5042                                                 </temporal>
5043                                                 <temporal encoding="iso8601" point="end">
5044                                                         <xsl:call-template name="chopPunctuation">
5045                                                                 <xsl:with-param name="chopString">
5046                                                                         <xsl:value-of select="marc:subfield[@code='b'][2]"/>
5047                                                                 </xsl:with-param>
5048                                                         </xsl:call-template>
5049                                                 </temporal>
5050                                         </xsl:when>
5051                                         <xsl:otherwise>
5052                                                 <xsl:for-each select="marc:subfield[@code='b']">
5053                                                         <temporal encoding="iso8601">
5054                                                                 <xsl:call-template name="chopPunctuation">
5055                                                                         <xsl:with-param name="chopString" select="."/>
5056                                                                 </xsl:call-template>
5057                                                         </temporal>
5058                                                 </xsl:for-each>
5059                                         </xsl:otherwise>
5060                                 </xsl:choose>
5061                         </subject>
5062                 </xsl:for-each>
5063                 <xsl:for-each select="marc:datafield[@tag=050]">
5064                         <xsl:for-each select="marc:subfield[@code='b']">
5065                                 <classification authority="lcc">
5066                                         <xsl:if test="../marc:subfield[@code='3']">
5067                                                 <xsl:attribute name="displayLabel">
5068                                                         <xsl:value-of select="../marc:subfield[@code='3']"/>
5069                                                 </xsl:attribute>
5070                                         </xsl:if>
5071                                         <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"/>
5072                                         <xsl:text> </xsl:text>
5073                                         <xsl:value-of select="text()"/>
5074                                 </classification>
5075                         </xsl:for-each>
5076                         <xsl:for-each
5077                                 select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
5078                                 <classification authority="lcc">
5079                                         <xsl:if test="../marc:subfield[@code='3']">
5080                                                 <xsl:attribute name="displayLabel">
5081                                                         <xsl:value-of select="../marc:subfield[@code='3']"/>
5082                                                 </xsl:attribute>
5083                                         </xsl:if>
5084                                         <xsl:value-of select="text()"/>
5085                                 </classification>
5086                         </xsl:for-each>
5087                 </xsl:for-each>
5088                 <xsl:for-each select="marc:datafield[@tag=082]">
5089                         <classification authority="ddc">
5090                                 <xsl:if test="marc:subfield[@code='2']">
5091                                         <xsl:attribute name="edition">
5092                                                 <xsl:value-of select="marc:subfield[@code='2']"/>
5093                                         </xsl:attribute>
5094                                 </xsl:if>
5095                                 <xsl:call-template name="subfieldSelect">
5096                                         <xsl:with-param name="codes">ab</xsl:with-param>
5097                                 </xsl:call-template>
5098                         </classification>
5099                 </xsl:for-each>
5100                 <xsl:for-each select="marc:datafield[@tag=080]">
5101                         <classification authority="udc">
5102                                 <xsl:call-template name="subfieldSelect">
5103                                         <xsl:with-param name="codes">abx</xsl:with-param>
5104                                 </xsl:call-template>
5105                         </classification>
5106                 </xsl:for-each>
5107                 <xsl:for-each select="marc:datafield[@tag=060]">
5108                         <classification authority="nlm">
5109                                 <xsl:call-template name="subfieldSelect">
5110                                         <xsl:with-param name="codes">ab</xsl:with-param>
5111                                 </xsl:call-template>
5112                         </classification>
5113                 </xsl:for-each>
5114                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
5115                         <classification authority="sudocs">
5116                                 <xsl:value-of select="marc:subfield[@code='a']"/>
5117                         </classification>
5118                 </xsl:for-each>
5119                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
5120                         <classification authority="candoc">
5121                                 <xsl:value-of select="marc:subfield[@code='a']"/>
5122                         </classification>
5123                 </xsl:for-each>
5124                 <xsl:for-each select="marc:datafield[@tag=086]">
5125                         <classification>
5126                                 <xsl:attribute name="authority">
5127                                         <xsl:value-of select="marc:subfield[@code='2']"/>
5128                                 </xsl:attribute>
5129                                 <xsl:value-of select="marc:subfield[@code='a']"/>
5130                         </classification>
5131                 </xsl:for-each>
5132                 <xsl:for-each select="marc:datafield[@tag=084]">
5133                         <classification>
5134                                 <xsl:attribute name="authority">
5135                                         <xsl:value-of select="marc:subfield[@code='2']"/>
5136                                 </xsl:attribute>
5137                                 <xsl:call-template name="subfieldSelect">
5138                                         <xsl:with-param name="codes">ab</xsl:with-param>
5139                                 </xsl:call-template>
5140                         </classification>
5141                 </xsl:for-each>
5142                 <xsl:for-each select="marc:datafield[@tag=440]">
5143                         <relatedItem type="series">
5144                                 <titleInfo>
5145                                         <title>
5146                                                 <xsl:call-template name="chopPunctuation">
5147                                                         <xsl:with-param name="chopString">
5148                                                                 <xsl:call-template name="subfieldSelect">
5149                                                                         <xsl:with-param name="codes">av</xsl:with-param>
5150                                                                 </xsl:call-template>
5151                                                         </xsl:with-param>
5152                                                 </xsl:call-template>
5153                                         </title>
5154                                         <xsl:call-template name="part"/>
5155                                 </titleInfo>
5156                         </relatedItem>
5157                 </xsl:for-each>
5158                 <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
5159                         <relatedItem type="series">
5160                                 <titleInfo>
5161                                         <title>
5162                                                 <xsl:call-template name="chopPunctuation">
5163                                                         <xsl:with-param name="chopString">
5164                                                                 <xsl:call-template name="subfieldSelect">
5165                                                                         <xsl:with-param name="codes">av</xsl:with-param>
5166                                                                 </xsl:call-template>
5167                                                         </xsl:with-param>
5168                                                 </xsl:call-template>
5169                                         </title>
5170                                         <xsl:call-template name="part"/>
5171                                 </titleInfo>
5172                         </relatedItem>
5173                 </xsl:for-each>
5174                 <xsl:for-each select="marc:datafield[@tag=510]">
5175                         <relatedItem type="isReferencedBy">
5176                                 <note>
5177                                         <xsl:call-template name="subfieldSelect">
5178                                                 <xsl:with-param name="codes">abcx3</xsl:with-param>
5179                                         </xsl:call-template>
5180                                 </note>
5181                         </relatedItem>
5182                 </xsl:for-each>
5183                 <xsl:for-each select="marc:datafield[@tag=534]">
5184                         <relatedItem type="original">
5185                                 <xsl:call-template name="relatedTitle"/>
5186                                 <xsl:call-template name="relatedName"/>
5187                                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
5188                                         <originInfo>
5189                                                 <xsl:for-each select="marc:subfield[@code='c']">
5190                                                         <publisher>
5191                                                                 <xsl:value-of select="."/>
5192                                                         </publisher>
5193                                                 </xsl:for-each>
5194                                                 <xsl:for-each select="marc:subfield[@code='b']">
5195                                                         <edition>
5196                                                                 <xsl:value-of select="."/>
5197                                                         </edition>
5198                                                 </xsl:for-each>
5199                                         </originInfo>
5200                                 </xsl:if>
5201                                 <xsl:call-template name="relatedIdentifierISSN"/>
5202                                 <xsl:for-each select="marc:subfield[@code='z']">
5203                                         <identifier type="isbn">
5204                                                 <xsl:value-of select="."/>
5205                                         </identifier>
5206                                 </xsl:for-each>
5207                                 <xsl:call-template name="relatedNote"/>
5208                         </relatedItem>
5209                 </xsl:for-each>
5210                 <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
5211                         <relatedItem>
5212                                 <xsl:call-template name="constituentOrRelatedType"/>
5213                                 <titleInfo>
5214                                         <title>
5215                                                 <xsl:call-template name="chopPunctuation">
5216                                                         <xsl:with-param name="chopString">
5217                                                                 <xsl:call-template name="specialSubfieldSelect">
5218                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5219                                                                         <xsl:with-param name="axis">t</xsl:with-param>
5220                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
5221                                                                 </xsl:call-template>
5222                                                         </xsl:with-param>
5223                                                 </xsl:call-template>
5224                                         </title>
5225                                         <xsl:call-template name="part"/>
5226                                 </titleInfo>
5227                                 <name type="personal">
5228                                         <namePart>
5229                                                 <xsl:call-template name="specialSubfieldSelect">
5230                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
5231                                                         <xsl:with-param name="axis">t</xsl:with-param>
5232                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
5233                                                 </xsl:call-template>
5234                                         </namePart>
5235                                         <xsl:call-template name="termsOfAddress"/>
5236                                         <xsl:call-template name="nameDate"/>
5237                                         <xsl:call-template name="role"/>
5238                                 </name>
5239                                 <xsl:call-template name="relatedForm"/>
5240                                 <xsl:call-template name="relatedIdentifierISSN"/>
5241                         </relatedItem>
5242                 </xsl:for-each>
5243                 <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
5244                         <relatedItem>
5245                                 <xsl:call-template name="constituentOrRelatedType"/>
5246                                 <titleInfo>
5247                                         <title>
5248                                                 <xsl:call-template name="chopPunctuation">
5249                                                         <xsl:with-param name="chopString">
5250                                                                 <xsl:call-template name="specialSubfieldSelect">
5251                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5252                                                                         <xsl:with-param name="axis">t</xsl:with-param>
5253                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
5254                                                                 </xsl:call-template>
5255                                                         </xsl:with-param>
5256                                                 </xsl:call-template>
5257                                         </title>
5258                                         <xsl:call-template name="relatedPartNumName"/>
5259                                 </titleInfo>
5260                                 <name type="corporate">
5261                                         <xsl:for-each select="marc:subfield[@code='a']">
5262                                                 <namePart>
5263                                                         <xsl:value-of select="."/>
5264                                                 </namePart>
5265                                         </xsl:for-each>
5266                                         <xsl:for-each select="marc:subfield[@code='b']">
5267                                                 <namePart>
5268                                                         <xsl:value-of select="."/>
5269                                                 </namePart>
5270                                         </xsl:for-each>
5271                                         <xsl:variable name="tempNamePart">
5272                                                 <xsl:call-template name="specialSubfieldSelect">
5273                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
5274                                                         <xsl:with-param name="axis">t</xsl:with-param>
5275                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
5276                                                 </xsl:call-template>
5277                                         </xsl:variable>
5278                                         <xsl:if test="normalize-space($tempNamePart)">
5279                                                 <namePart>
5280                                                         <xsl:value-of select="$tempNamePart"/>
5281                                                 </namePart>
5282                                         </xsl:if>
5283                                         <xsl:call-template name="role"/>
5284                                 </name>
5285                                 <xsl:call-template name="relatedForm"/>
5286                                 <xsl:call-template name="relatedIdentifierISSN"/>
5287                         </relatedItem>
5288                 </xsl:for-each>
5289                 <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
5290                         <relatedItem>
5291                                 <xsl:call-template name="constituentOrRelatedType"/>
5292                                 <titleInfo>
5293                                         <title>
5294                                                 <xsl:call-template name="chopPunctuation">
5295                                                         <xsl:with-param name="chopString">
5296                                                                 <xsl:call-template name="specialSubfieldSelect">
5297                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
5298                                                                         <xsl:with-param name="axis">t</xsl:with-param>
5299                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
5300                                                                 </xsl:call-template>
5301                                                         </xsl:with-param>
5302                                                 </xsl:call-template>
5303                                         </title>
5304                                         <xsl:call-template name="relatedPartNumName"/>
5305                                 </titleInfo>
5306                                 <name type="conference">
5307                                         <namePart>
5308                                                 <xsl:call-template name="specialSubfieldSelect">
5309                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
5310                                                         <xsl:with-param name="axis">t</xsl:with-param>
5311                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
5312                                                 </xsl:call-template>
5313                                         </namePart>
5314                                 </name>
5315                                 <xsl:call-template name="relatedForm"/>
5316                                 <xsl:call-template name="relatedIdentifierISSN"/>
5317                         </relatedItem>
5318                 </xsl:for-each>
5319                 <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
5320                         <relatedItem>
5321                                 <xsl:call-template name="constituentOrRelatedType"/>
5322                                 <titleInfo>
5323                                         <title>
5324                                                 <xsl:call-template name="chopPunctuation">
5325                                                         <xsl:with-param name="chopString">
5326                                                                 <xsl:call-template name="subfieldSelect">
5327                                                                         <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
5328                                                                 </xsl:call-template>
5329                                                         </xsl:with-param>
5330                                                 </xsl:call-template>
5331                                         </title>
5332                                         <xsl:call-template name="part"/>
5333                                 </titleInfo>
5334                                 <xsl:call-template name="relatedForm"/>
5335                                 <xsl:call-template name="relatedIdentifierISSN"/>
5336                         </relatedItem>
5337                 </xsl:for-each>
5338                 <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
5339                         <relatedItem>
5340                                 <xsl:call-template name="constituentOrRelatedType"/>
5341                                 <titleInfo>
5342                                         <title>
5343                                                 <xsl:call-template name="chopPunctuation">
5344                                                         <xsl:with-param name="chopString">
5345                                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
5346                                                         </xsl:with-param>
5347                                                 </xsl:call-template>
5348                                         </title>
5349                                         <xsl:call-template name="part"/>
5350                                 </titleInfo>
5351                                 <xsl:call-template name="relatedForm"/>
5352                         </relatedItem>
5353                 </xsl:for-each>
5354                 <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
5355                         <relatedItem type="series">
5356                                 <xsl:call-template name="relatedItem76X-78X"/>
5357                         </relatedItem>
5358                 </xsl:for-each>
5359                 <xsl:for-each
5360                         select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
5361                         <relatedItem>
5362                                 <xsl:call-template name="relatedItem76X-78X"/>
5363                         </relatedItem>
5364                 </xsl:for-each>
5365                 <xsl:for-each select="marc:datafield[@tag=775]">
5366                         <relatedItem type="otherVersion">
5367                                 <xsl:call-template name="relatedItem76X-78X"/>
5368                         </relatedItem>
5369                 </xsl:for-each>
5370                 <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
5371                         <relatedItem type="constituent">
5372                                 <xsl:call-template name="relatedItem76X-78X"/>
5373                         </relatedItem>
5374                 </xsl:for-each>
5375                 <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
5376                         <relatedItem type="host">
5377                                 <xsl:call-template name="relatedItem76X-78X"/>
5378                         </relatedItem>
5379                 </xsl:for-each>
5380                 <xsl:for-each select="marc:datafield[@tag=776]">
5381                         <relatedItem type="otherFormat">
5382                                 <xsl:call-template name="relatedItem76X-78X"/>
5383                         </relatedItem>
5384                 </xsl:for-each>
5385                 <xsl:for-each select="marc:datafield[@tag=780]">
5386                         <relatedItem type="preceding">
5387                                 <xsl:call-template name="relatedItem76X-78X"/>
5388                         </relatedItem>
5389                 </xsl:for-each>
5390                 <xsl:for-each select="marc:datafield[@tag=785]">
5391                         <relatedItem type="succeeding">
5392                                 <xsl:call-template name="relatedItem76X-78X"/>
5393                         </relatedItem>
5394                 </xsl:for-each>
5395                 <xsl:for-each select="marc:datafield[@tag=786]">
5396                         <relatedItem type="original">
5397                                 <xsl:call-template name="relatedItem76X-78X"/>
5398                         </relatedItem>
5399                 </xsl:for-each>
5400                 <xsl:for-each select="marc:datafield[@tag=800]">
5401                         <relatedItem type="series">
5402                                 <titleInfo>
5403                                         <title>
5404                                                 <xsl:call-template name="chopPunctuation">
5405                                                         <xsl:with-param name="chopString">
5406                                                                 <xsl:call-template name="specialSubfieldSelect">
5407                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5408                                                                         <xsl:with-param name="axis">t</xsl:with-param>
5409                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
5410                                                                 </xsl:call-template>
5411                                                         </xsl:with-param>
5412                                                 </xsl:call-template>
5413                                         </title>
5414                                         <xsl:call-template name="part"/>
5415                                 </titleInfo>
5416                                 <name type="personal">
5417                                         <namePart>
5418                                                 <xsl:call-template name="chopPunctuation">
5419                                                         <xsl:with-param name="chopString">
5420                                                                 <xsl:call-template name="specialSubfieldSelect">
5421                                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
5422                                                                         <xsl:with-param name="axis">t</xsl:with-param>
5423                                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
5424                                                                 </xsl:call-template>
5425                                                         </xsl:with-param>
5426                                                 </xsl:call-template>
5427                                         </namePart>
5428                                         <xsl:call-template name="termsOfAddress"/>
5429                                         <xsl:call-template name="nameDate"/>
5430                                         <xsl:call-template name="role"/>
5431                                 </name>
5432                                 <xsl:call-template name="relatedForm"/>
5433                         </relatedItem>
5434                 </xsl:for-each>
5435                 <xsl:for-each select="marc:datafield[@tag=810]">
5436                         <relatedItem type="series">
5437                                 <titleInfo>
5438                                         <title>
5439                                                 <xsl:call-template name="chopPunctuation">
5440                                                         <xsl:with-param name="chopString">
5441                                                                 <xsl:call-template name="specialSubfieldSelect">
5442                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5443                                                                         <xsl:with-param name="axis">t</xsl:with-param>
5444                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
5445                                                                 </xsl:call-template>
5446                                                         </xsl:with-param>
5447                                                 </xsl:call-template>
5448                                         </title>
5449                                         <xsl:call-template name="relatedPartNumName"/>
5450                                 </titleInfo>
5451                                 <name type="corporate">
5452                                         <xsl:for-each select="marc:subfield[@code='a']">
5453                                                 <namePart>
5454                                                         <xsl:value-of select="."/>
5455                                                 </namePart>
5456                                         </xsl:for-each>
5457                                         <xsl:for-each select="marc:subfield[@code='b']">
5458                                                 <namePart>
5459                                                         <xsl:value-of select="."/>
5460                                                 </namePart>
5461                                         </xsl:for-each>
5462                                         <namePart>
5463                                                 <xsl:call-template name="specialSubfieldSelect">
5464                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
5465                                                         <xsl:with-param name="axis">t</xsl:with-param>
5466                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
5467                                                 </xsl:call-template>
5468                                         </namePart>
5469                                         <xsl:call-template name="role"/>
5470                                 </name>
5471                                 <xsl:call-template name="relatedForm"/>
5472                         </relatedItem>
5473                 </xsl:for-each>
5474                 <xsl:for-each select="marc:datafield[@tag=811]">
5475                         <relatedItem type="series">
5476                                 <titleInfo>
5477                                         <title>
5478                                                 <xsl:call-template name="chopPunctuation">
5479                                                         <xsl:with-param name="chopString">
5480                                                                 <xsl:call-template name="specialSubfieldSelect">
5481                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
5482                                                                         <xsl:with-param name="axis">t</xsl:with-param>
5483                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
5484                                                                 </xsl:call-template>
5485                                                         </xsl:with-param>
5486                                                 </xsl:call-template>
5487                                         </title>
5488                                         <xsl:call-template name="relatedPartNumName"/>
5489                                 </titleInfo>
5490                                 <name type="conference">
5491                                         <namePart>
5492                                                 <xsl:call-template name="specialSubfieldSelect">
5493                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
5494                                                         <xsl:with-param name="axis">t</xsl:with-param>
5495                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
5496                                                 </xsl:call-template>
5497                                         </namePart>
5498                                         <xsl:call-template name="role"/>
5499                                 </name>
5500                                 <xsl:call-template name="relatedForm"/>
5501                         </relatedItem>
5502                 </xsl:for-each>
5503                 <xsl:for-each select="marc:datafield[@tag='830']">
5504                         <relatedItem type="series">
5505                                 <titleInfo>
5506                                         <title>
5507                                                 <xsl:call-template name="chopPunctuation">
5508                                                         <xsl:with-param name="chopString">
5509                                                                 <xsl:call-template name="subfieldSelect">
5510                                                                         <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
5511                                                                 </xsl:call-template>
5512                                                         </xsl:with-param>
5513                                                 </xsl:call-template>
5514                                         </title>
5515                                         <xsl:call-template name="part"/>
5516                                 </titleInfo>
5517                                 <xsl:call-template name="relatedForm"/>
5518                         </relatedItem>
5519                 </xsl:for-each>
5520                 <xsl:for-each select="marc:datafield[@tag='856'][@ind2='2']/marc:subfield[@code='q']">
5521                         <relatedItem>
5522                                 <internetMediaType>
5523                                         <xsl:value-of select="."/>
5524                                 </internetMediaType>
5525                         </relatedItem>
5526                 </xsl:for-each>
5527                 <xsl:for-each select="marc:datafield[@tag='020']">
5528                         <xsl:call-template name="isInvalid">
5529                                 <xsl:with-param name="type">isbn</xsl:with-param>
5530                         </xsl:call-template>
5531                         <xsl:if test="marc:subfield[@code='a']">
5532                                 <identifier type="isbn">
5533                                         <xsl:value-of select="marc:subfield[@code='a']"/>
5534                                 </identifier>
5535                         </xsl:if>
5536                 </xsl:for-each>
5537                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='0']">
5538                         <xsl:call-template name="isInvalid">
5539                                 <xsl:with-param name="type">isrc</xsl:with-param>
5540                         </xsl:call-template>
5541                         <xsl:if test="marc:subfield[@code='a']">
5542                                 <identifier type="isrc">
5543                                         <xsl:value-of select="marc:subfield[@code='a']"/>
5544                                 </identifier>
5545                         </xsl:if>
5546                 </xsl:for-each>
5547                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='2']">
5548                         <xsl:call-template name="isInvalid">
5549                                 <xsl:with-param name="type">ismn</xsl:with-param>
5550                         </xsl:call-template>
5551                         <xsl:if test="marc:subfield[@code='a']">
5552                                 <identifier type="ismn">
5553                                         <xsl:value-of select="marc:subfield[@code='a']"/>
5554                                 </identifier>
5555                         </xsl:if>
5556                 </xsl:for-each>
5557                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='4']">
5558                         <xsl:call-template name="isInvalid">
5559                                 <xsl:with-param name="type">sici</xsl:with-param>
5560                         </xsl:call-template>
5561                         <identifier type="sici">
5562                                 <xsl:call-template name="subfieldSelect">
5563                                         <xsl:with-param name="codes">ab</xsl:with-param>
5564                                 </xsl:call-template>
5565                         </identifier>
5566                 </xsl:for-each>
5567                 <xsl:for-each select="marc:datafield[@tag='022']">
5568                         <xsl:if test="marc:subfield[@code='a']">
5569                                 <xsl:call-template name="isInvalid">
5570                                         <xsl:with-param name="type">issn</xsl:with-param>
5571                                 </xsl:call-template>
5572                                 <identifier type="issn">
5573                                         <xsl:value-of select="marc:subfield[@code='a']"/>
5574                                 </identifier>
5575                         </xsl:if>
5576                         <xsl:if test="marc:subfield[@code='l']">
5577                                 <xsl:call-template name="isInvalid">
5578                                         <xsl:with-param name="type">issn-l</xsl:with-param>
5579                                 </xsl:call-template>
5580                                 <identifier type="issn-l">
5581                                         <xsl:value-of select="marc:subfield[@code='l']"/>
5582                                 </identifier>
5583                         </xsl:if>
5584                 </xsl:for-each>
5585
5586
5587
5588                 <xsl:for-each select="marc:datafield[@tag='010']">
5589                         <xsl:call-template name="isInvalid">
5590                                 <xsl:with-param name="type">lccn</xsl:with-param>
5591                         </xsl:call-template>
5592                         <identifier type="lccn">
5593                                 <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
5594                         </identifier>
5595                 </xsl:for-each>
5596                 <xsl:for-each select="marc:datafield[@tag='028']">
5597                         <identifier>
5598                                 <xsl:attribute name="type">
5599                                         <xsl:choose>
5600                                                 <xsl:when test="@ind1='0'">issue number</xsl:when>
5601                                                 <xsl:when test="@ind1='1'">matrix number</xsl:when>
5602                                                 <xsl:when test="@ind1='2'">music plate</xsl:when>
5603                                                 <xsl:when test="@ind1='3'">music publisher</xsl:when>
5604                                                 <xsl:when test="@ind1='4'">videorecording identifier</xsl:when>
5605                                         </xsl:choose>
5606                                 </xsl:attribute>
5607                                 <!--<xsl:call-template name="isInvalid"/>-->
5608                                 <!-- no $z in 028 -->
5609                                 <xsl:call-template name="subfieldSelect">
5610                                         <xsl:with-param name="codes">
5611                                                 <xsl:choose>
5612                                                         <xsl:when test="@ind1='0'">ba</xsl:when>
5613                                                         <xsl:otherwise>ab</xsl:otherwise>
5614                                                 </xsl:choose>
5615                                         </xsl:with-param>
5616                                 </xsl:call-template>
5617                         </identifier>
5618                 </xsl:for-each>
5619                 <xsl:for-each select="marc:datafield[@tag='037']">
5620                         <identifier type="stock number">
5621                                 <!--<xsl:call-template name="isInvalid"/>-->
5622                                 <!-- no $z in 037 -->
5623                                 <xsl:call-template name="subfieldSelect">
5624                                         <xsl:with-param name="codes">ab</xsl:with-param>
5625                                 </xsl:call-template>
5626                         </identifier>
5627                 </xsl:for-each>
5628                 <xsl:for-each select="marc:datafield[@tag='856'][marc:subfield[@code='u']]">
5629                         <identifier>
5630                                 <xsl:attribute name="type">
5631                                         <xsl:choose>
5632                                                 <xsl:when
5633                                                         test="starts-with(marc:subfield[@code='u'],'urn:doi') or starts-with(marc:subfield[@code='u'],'doi')"
5634                                                         >doi</xsl:when>
5635                                                 <xsl:when
5636                                                         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')"
5637                                                         >hdl</xsl:when>
5638                                                 <xsl:otherwise>uri</xsl:otherwise>
5639                                         </xsl:choose>
5640                                 </xsl:attribute>
5641                                 <xsl:choose>
5642                                         <xsl:when
5643                                                 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') ">
5644                                                 <xsl:value-of
5645                                                         select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"
5646                                                 />
5647                                         </xsl:when>
5648                                         <xsl:otherwise>
5649                                                 <xsl:value-of select="marc:subfield[@code='u']"/>
5650                                         </xsl:otherwise>
5651                                 </xsl:choose>
5652                         </identifier>
5653                         <xsl:if
5654                                 test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl')">
5655                                 <identifier type="hdl">
5656                                         <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
5657                                                 <xsl:attribute name="displayLabel">
5658                                                         <xsl:call-template name="subfieldSelect">
5659                                                                 <xsl:with-param name="codes">y3z</xsl:with-param>
5660                                                         </xsl:call-template>
5661                                                 </xsl:attribute>
5662                                         </xsl:if>
5663                                         <xsl:value-of
5664                                                 select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"
5665                                         />
5666                                 </identifier>
5667                         </xsl:if>
5668                 </xsl:for-each>
5669                 <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]">
5670                         <identifier type="upc">
5671                                 <xsl:call-template name="isInvalid"/>
5672                                 <xsl:value-of select="marc:subfield[@code='a']"/>
5673                         </identifier>
5674                 </xsl:for-each>
5675
5676                 <!-- 1/04 fix added $y -->
5677
5678                 <!-- 1.21  tmee-->
5679                 <xsl:for-each select="marc:datafield[@tag=856][@ind2=1][marc:subfield[@code='u']]">
5680                         <relatedItem type="otherVersion">
5681                                 <location>
5682                                         <url>
5683                                                 <xsl:if test="marc:subfield[@code='y' or @code='3']">
5684                                                         <xsl:attribute name="displayLabel">
5685                                                                 <xsl:call-template name="subfieldSelect">
5686                                                                         <xsl:with-param name="codes">y3</xsl:with-param>
5687                                                                 </xsl:call-template>
5688                                                         </xsl:attribute>
5689                                                 </xsl:if>
5690                                                 <xsl:if test="marc:subfield[@code='z' ]">
5691                                                         <xsl:attribute name="note">
5692                                                                 <xsl:call-template name="subfieldSelect">
5693                                                                         <xsl:with-param name="codes">z</xsl:with-param>
5694                                                                 </xsl:call-template>
5695                                                         </xsl:attribute>
5696                                                 </xsl:if>
5697                                                 <xsl:value-of select="marc:subfield[@code='u']"/>
5698                                         </url>
5699                                 </location>
5700                         </relatedItem>
5701                 </xsl:for-each>
5702                 <xsl:for-each select="marc:datafield[@tag=856][@ind2=2][marc:subfield[@code='u']]">
5703                         <relatedItem>
5704                                 <location>
5705                                         <url>
5706                                                 <xsl:if test="marc:subfield[@code='y' or @code='3']">
5707                                                         <xsl:attribute name="displayLabel">
5708                                                                 <xsl:call-template name="subfieldSelect">
5709                                                                         <xsl:with-param name="codes">y3</xsl:with-param>
5710                                                                 </xsl:call-template>
5711                                                         </xsl:attribute>
5712                                                 </xsl:if>
5713                                                 <xsl:if test="marc:subfield[@code='z' ]">
5714                                                         <xsl:attribute name="note">
5715                                                                 <xsl:call-template name="subfieldSelect">
5716                                                                         <xsl:with-param name="codes">z</xsl:with-param>
5717                                                                 </xsl:call-template>
5718                                                         </xsl:attribute>
5719                                                 </xsl:if>
5720                                                 <xsl:value-of select="marc:subfield[@code='u']"/>
5721                                         </url>
5722                                 </location>
5723                         </relatedItem>
5724                 </xsl:for-each>
5725
5726                 <!-- 3.2 change tmee 856z  -->
5727
5728                 <!-- 1.24  tmee  -->
5729                 <xsl:for-each select="marc:datafield[@tag=852]">
5730                         <location>
5731                                 <xsl:if test="marc:subfield[@code='a' or @code='b' or @code='e']">
5732                                         <physicalLocation>
5733                                                 <xsl:call-template name="subfieldSelect">
5734                                                         <xsl:with-param name="codes">abe</xsl:with-param>
5735                                                 </xsl:call-template>
5736                                         </physicalLocation>
5737                                 </xsl:if>
5738
5739                                 <xsl:if test="marc:subfield[@code='u']">
5740                                         <physicalLocation>
5741                                                 <xsl:call-template name="uri"/>
5742                                                 <xsl:call-template name="subfieldSelect">
5743                                                         <xsl:with-param name="codes">u</xsl:with-param>
5744                                                 </xsl:call-template>
5745                                         </physicalLocation>
5746                                 </xsl:if>
5747
5748                                 <xsl:if
5749                                         test="marc:subfield[@code='h' or @code='i' or @code='j' or @code='k' or @code='l' or @code='m' or @code='t']">
5750                                         <shelfLocation>
5751                                                 <xsl:call-template name="subfieldSelect">
5752                                                         <xsl:with-param name="codes">hijklmt</xsl:with-param>
5753                                                 </xsl:call-template>
5754                                         </shelfLocation>
5755                                 </xsl:if>
5756                         </location>
5757                 </xsl:for-each>
5758
5759                 <xsl:for-each select="marc:datafield[@tag=506]">
5760                         <accessCondition type="restrictionOnAccess">
5761                                 <xsl:call-template name="subfieldSelect">
5762                                         <xsl:with-param name="codes">abcd35</xsl:with-param>
5763                                 </xsl:call-template>
5764                         </accessCondition>
5765                 </xsl:for-each>
5766                 <xsl:for-each select="marc:datafield[@tag=540]">
5767                         <accessCondition type="useAndReproduction">
5768                                 <xsl:call-template name="subfieldSelect">
5769                                         <xsl:with-param name="codes">abcde35</xsl:with-param>
5770                                 </xsl:call-template>
5771                         </accessCondition>
5772                 </xsl:for-each>
5773
5774                 <recordInfo>
5775                         <!-- 1.25  tmee-->
5776
5777
5778                         <xsl:for-each select="marc:leader[substring($leader,19,1)='a']">
5779                                 <descriptionStandard>aacr2</descriptionStandard>
5780                         </xsl:for-each>
5781
5782                         <xsl:for-each select="marc:datafield[@tag=040]">
5783                                 <xsl:if test="marc:subfield[@code='e']">
5784                                         <descriptionStandard>
5785                                                 <xsl:value-of select="marc:subfield[@code='e']"/>
5786                                         </descriptionStandard>
5787                                 </xsl:if>
5788                                 <recordContentSource authority="marcorg">
5789                                         <xsl:value-of select="marc:subfield[@code='a']"/>
5790                                 </recordContentSource>
5791                         </xsl:for-each>
5792                         <xsl:for-each select="marc:controlfield[@tag=008]">
5793                                 <recordCreationDate encoding="marc">
5794                                         <xsl:value-of select="substring(.,1,6)"/>
5795                                 </recordCreationDate>
5796                         </xsl:for-each>
5797
5798                         <xsl:for-each select="marc:controlfield[@tag=005]">
5799                                 <recordChangeDate encoding="iso8601">
5800                                         <xsl:value-of select="."/>
5801                                 </recordChangeDate>
5802                         </xsl:for-each>
5803                         <xsl:for-each select="marc:controlfield[@tag=001]">
5804                                 <recordIdentifier>
5805                                         <xsl:if test="../marc:controlfield[@tag=003]">
5806                                                 <xsl:attribute name="source">
5807                                                         <xsl:value-of select="../marc:controlfield[@tag=003]"/>
5808                                                 </xsl:attribute>
5809                                         </xsl:if>
5810                                         <xsl:value-of select="."/>
5811                                 </recordIdentifier>
5812                         </xsl:for-each>
5813                         <xsl:for-each select="marc:datafield[@tag=040]/marc:subfield[@code='b']">
5814                                 <languageOfCataloging>
5815                                         <languageTerm authority="iso639-2b" type="code">
5816                                                 <xsl:value-of select="."/>
5817                                         </languageTerm>
5818                                 </languageOfCataloging>
5819                         </xsl:for-each>
5820                 </recordInfo>
5821         </xsl:template>
5822         <xsl:template name="displayForm">
5823                 <xsl:for-each select="marc:subfield[@code='c']">
5824                         <displayForm>
5825                                 <xsl:value-of select="."/>
5826                         </displayForm>
5827                 </xsl:for-each>
5828         </xsl:template>
5829         <xsl:template name="affiliation">
5830                 <xsl:for-each select="marc:subfield[@code='u']">
5831                         <affiliation>
5832                                 <xsl:value-of select="."/>
5833                         </affiliation>
5834                 </xsl:for-each>
5835         </xsl:template>
5836         <xsl:template name="uri">
5837                 <xsl:for-each select="marc:subfield[@code='u']">
5838                         <xsl:attribute name="xlink:href">
5839                                 <xsl:value-of select="."/>
5840                         </xsl:attribute>
5841                 </xsl:for-each>
5842                 <xsl:for-each select="marc:subfield[@code='0']">
5843                         <xsl:choose>
5844                                 <xsl:when test="contains(text(), ')')">
5845                                         <xsl:attribute name="xlink:href">
5846                                                 <xsl:value-of select="substring-after(text(), ')')"></xsl:value-of>
5847                                         </xsl:attribute>
5848                                 </xsl:when>
5849                                 <xsl:otherwise>
5850                                         <xsl:attribute name="xlink:href">
5851                                                 <xsl:value-of select="."></xsl:value-of>
5852                                         </xsl:attribute>
5853                                 </xsl:otherwise>
5854                         </xsl:choose>
5855                 </xsl:for-each>
5856         </xsl:template>
5857         <xsl:template name="role">
5858                 <xsl:for-each select="marc:subfield[@code='e']">
5859                         <role>
5860                                 <roleTerm type="text">
5861                                         <xsl:value-of select="."/>
5862                                 </roleTerm>
5863                         </role>
5864                 </xsl:for-each>
5865                 <xsl:for-each select="marc:subfield[@code='4']">
5866                         <role>
5867                                 <roleTerm authority="marcrelator" type="code">
5868                                         <xsl:value-of select="."/>
5869                                 </roleTerm>
5870                         </role>
5871                 </xsl:for-each>
5872         </xsl:template>
5873         <xsl:template name="part">
5874                 <xsl:variable name="partNumber">
5875                         <xsl:call-template name="specialSubfieldSelect">
5876                                 <xsl:with-param name="axis">n</xsl:with-param>
5877                                 <xsl:with-param name="anyCodes">n</xsl:with-param>
5878                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
5879                         </xsl:call-template>
5880                 </xsl:variable>
5881                 <xsl:variable name="partName">
5882                         <xsl:call-template name="specialSubfieldSelect">
5883                                 <xsl:with-param name="axis">p</xsl:with-param>
5884                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
5885                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
5886                         </xsl:call-template>
5887                 </xsl:variable>
5888                 <xsl:if test="string-length(normalize-space($partNumber))">
5889                         <partNumber>
5890                                 <xsl:call-template name="chopPunctuation">
5891                                         <xsl:with-param name="chopString" select="$partNumber"/>
5892                                 </xsl:call-template>
5893                         </partNumber>
5894                 </xsl:if>
5895                 <xsl:if test="string-length(normalize-space($partName))">
5896                         <partName>
5897                                 <xsl:call-template name="chopPunctuation">
5898                                         <xsl:with-param name="chopString" select="$partName"/>
5899                                 </xsl:call-template>
5900                         </partName>
5901                 </xsl:if>
5902         </xsl:template>
5903         <xsl:template name="relatedPart">
5904                 <xsl:if test="@tag=773">
5905                         <xsl:for-each select="marc:subfield[@code='g']">
5906                                 <part>
5907                                         <text>
5908                                                 <xsl:value-of select="."/>
5909                                         </text>
5910                                 </part>
5911                         </xsl:for-each>
5912                         <xsl:for-each select="marc:subfield[@code='q']">
5913                                 <part>
5914                                         <xsl:call-template name="parsePart"/>
5915                                 </part>
5916                         </xsl:for-each>
5917                 </xsl:if>
5918         </xsl:template>
5919         <xsl:template name="relatedPartNumName">
5920                 <xsl:variable name="partNumber">
5921                         <xsl:call-template name="specialSubfieldSelect">
5922                                 <xsl:with-param name="axis">g</xsl:with-param>
5923                                 <xsl:with-param name="anyCodes">g</xsl:with-param>
5924                                 <xsl:with-param name="afterCodes">pst</xsl:with-param>
5925                         </xsl:call-template>
5926                 </xsl:variable>
5927                 <xsl:variable name="partName">
5928                         <xsl:call-template name="specialSubfieldSelect">
5929                                 <xsl:with-param name="axis">p</xsl:with-param>
5930                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
5931                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
5932                         </xsl:call-template>
5933                 </xsl:variable>
5934                 <xsl:if test="string-length(normalize-space($partNumber))">
5935                         <partNumber>
5936                                 <xsl:value-of select="$partNumber"/>
5937                         </partNumber>
5938                 </xsl:if>
5939                 <xsl:if test="string-length(normalize-space($partName))">
5940                         <partName>
5941                                 <xsl:value-of select="$partName"/>
5942                         </partName>
5943                 </xsl:if>
5944         </xsl:template>
5945         <xsl:template name="relatedName">
5946                 <xsl:for-each select="marc:subfield[@code='a']">
5947                         <name>
5948                                 <namePart>
5949                                         <xsl:value-of select="."/>
5950                                 </namePart>
5951                         </name>
5952                 </xsl:for-each>
5953         </xsl:template>
5954         <xsl:template name="relatedForm">
5955                 <xsl:for-each select="marc:subfield[@code='h']">
5956                         <physicalDescription>
5957                                 <form>
5958                                         <xsl:value-of select="."/>
5959                                 </form>
5960                         </physicalDescription>
5961                 </xsl:for-each>
5962         </xsl:template>
5963         <xsl:template name="relatedExtent">
5964                 <xsl:for-each select="marc:subfield[@code='h']">
5965                         <physicalDescription>
5966                                 <extent>
5967                                         <xsl:value-of select="."/>
5968                                 </extent>
5969                         </physicalDescription>
5970                 </xsl:for-each>
5971         </xsl:template>
5972         <xsl:template name="relatedNote">
5973                 <xsl:for-each select="marc:subfield[@code='n']">
5974                         <note>
5975                                 <xsl:value-of select="."/>
5976                         </note>
5977                 </xsl:for-each>
5978         </xsl:template>
5979         <xsl:template name="relatedSubject">
5980                 <xsl:for-each select="marc:subfield[@code='j']">
5981                         <subject>
5982                                 <temporal encoding="iso8601">
5983                                         <xsl:call-template name="chopPunctuation">
5984                                                 <xsl:with-param name="chopString" select="."/>
5985                                         </xsl:call-template>
5986                                 </temporal>
5987                         </subject>
5988                 </xsl:for-each>
5989         </xsl:template>
5990         <xsl:template name="relatedIdentifierISSN">
5991                 <xsl:for-each select="marc:subfield[@code='x']">
5992                         <identifier type="issn">
5993                                 <xsl:value-of select="."/>
5994                         </identifier>
5995                 </xsl:for-each>
5996         </xsl:template>
5997         <xsl:template name="relatedIdentifierLocal">
5998                 <xsl:for-each select="marc:subfield[@code='w']">
5999                         <identifier type="local">
6000                                 <xsl:value-of select="."/>
6001                         </identifier>
6002                 </xsl:for-each>
6003         </xsl:template>
6004         <xsl:template name="relatedIdentifier">
6005                 <xsl:for-each select="marc:subfield[@code='o']">
6006                         <identifier>
6007                                 <xsl:value-of select="."/>
6008                         </identifier>
6009                 </xsl:for-each>
6010         </xsl:template>
6011         <xsl:template name="relatedItem76X-78X">
6012                 <xsl:call-template name="displayLabel"/>
6013                 <xsl:call-template name="relatedTitle76X-78X"/>
6014                 <xsl:call-template name="relatedName"/>
6015                 <xsl:call-template name="relatedOriginInfo"/>
6016                 <xsl:call-template name="relatedLanguage"/>
6017                 <xsl:call-template name="relatedExtent"/>
6018                 <xsl:call-template name="relatedNote"/>
6019                 <xsl:call-template name="relatedSubject"/>
6020                 <xsl:call-template name="relatedIdentifier"/>
6021                 <xsl:call-template name="relatedIdentifierISSN"/>
6022                 <xsl:call-template name="relatedIdentifierLocal"/>
6023                 <xsl:call-template name="relatedPart"/>
6024         </xsl:template>
6025         <xsl:template name="subjectGeographicZ">
6026                 <geographic>
6027                         <xsl:call-template name="chopPunctuation">
6028                                 <xsl:with-param name="chopString" select="."/>
6029                         </xsl:call-template>
6030                 </geographic>
6031         </xsl:template>
6032         <xsl:template name="subjectTemporalY">
6033                 <temporal>
6034                         <xsl:call-template name="chopPunctuation">
6035                                 <xsl:with-param name="chopString" select="."/>
6036                         </xsl:call-template>
6037                 </temporal>
6038         </xsl:template>
6039         <xsl:template name="subjectTopic">
6040                 <topic>
6041                         <xsl:call-template name="chopPunctuation">
6042                                 <xsl:with-param name="chopString" select="."/>
6043                         </xsl:call-template>
6044                 </topic>
6045         </xsl:template>
6046         <!-- 3.2 change tmee 6xx $v genre -->
6047         <xsl:template name="subjectGenre">
6048                 <genre>
6049                         <xsl:call-template name="chopPunctuation">
6050                                 <xsl:with-param name="chopString" select="."/>
6051                         </xsl:call-template>
6052                 </genre>
6053         </xsl:template>
6054
6055         <xsl:template name="nameABCDN">
6056                 <xsl:for-each select="marc:subfield[@code='a']">
6057                         <namePart>
6058                                 <xsl:call-template name="chopPunctuation">
6059                                         <xsl:with-param name="chopString" select="."/>
6060                                 </xsl:call-template>
6061                         </namePart>
6062                 </xsl:for-each>
6063                 <xsl:for-each select="marc:subfield[@code='b']">
6064                         <namePart>
6065                                 <xsl:value-of select="."/>
6066                         </namePart>
6067                 </xsl:for-each>
6068                 <xsl:if
6069                         test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
6070                         <namePart>
6071                                 <xsl:call-template name="subfieldSelect">
6072                                         <xsl:with-param name="codes">cdn</xsl:with-param>
6073                                 </xsl:call-template>
6074                         </namePart>
6075                 </xsl:if>
6076         </xsl:template>
6077         <xsl:template name="nameABCDQ">
6078                 <namePart>
6079                         <xsl:call-template name="chopPunctuation">
6080                                 <xsl:with-param name="chopString">
6081                                         <xsl:call-template name="subfieldSelect">
6082                                                 <xsl:with-param name="codes">aq</xsl:with-param>
6083                                         </xsl:call-template>
6084                                 </xsl:with-param>
6085                                 <xsl:with-param name="punctuation">
6086                                         <xsl:text>:,;/ </xsl:text>
6087                                 </xsl:with-param>
6088                         </xsl:call-template>
6089                 </namePart>
6090                 <xsl:call-template name="termsOfAddress"/>
6091                 <xsl:call-template name="nameDate"/>
6092         </xsl:template>
6093         <xsl:template name="nameACDEQ">
6094                 <namePart>
6095                         <xsl:call-template name="subfieldSelect">
6096                                 <xsl:with-param name="codes">acdeq</xsl:with-param>
6097                         </xsl:call-template>
6098                 </namePart>
6099         </xsl:template>
6100         <xsl:template name="constituentOrRelatedType">
6101                 <xsl:if test="@ind2=2">
6102                         <xsl:attribute name="type">constituent</xsl:attribute>
6103                 </xsl:if>
6104         </xsl:template>
6105         <xsl:template name="relatedTitle">
6106                 <xsl:for-each select="marc:subfield[@code='t']">
6107                         <titleInfo>
6108                                 <title>
6109                                         <xsl:call-template name="chopPunctuation">
6110                                                 <xsl:with-param name="chopString">
6111                                                         <xsl:value-of select="."/>
6112                                                 </xsl:with-param>
6113                                         </xsl:call-template>
6114                                 </title>
6115                         </titleInfo>
6116                 </xsl:for-each>
6117         </xsl:template>
6118         <xsl:template name="relatedTitle76X-78X">
6119                 <xsl:for-each select="marc:subfield[@code='t']">
6120                         <titleInfo>
6121                                 <title>
6122                                         <xsl:call-template name="chopPunctuation">
6123                                                 <xsl:with-param name="chopString">
6124                                                         <xsl:value-of select="."/>
6125                                                 </xsl:with-param>
6126                                         </xsl:call-template>
6127                                 </title>
6128                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
6129                                         <xsl:call-template name="relatedPartNumName"/>
6130                                 </xsl:if>
6131                         </titleInfo>
6132                 </xsl:for-each>
6133                 <xsl:for-each select="marc:subfield[@code='p']">
6134                         <titleInfo type="abbreviated">
6135                                 <title>
6136                                         <xsl:call-template name="chopPunctuation">
6137                                                 <xsl:with-param name="chopString">
6138                                                         <xsl:value-of select="."/>
6139                                                 </xsl:with-param>
6140                                         </xsl:call-template>
6141                                 </title>
6142                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
6143                                         <xsl:call-template name="relatedPartNumName"/>
6144                                 </xsl:if>
6145                         </titleInfo>
6146                 </xsl:for-each>
6147                 <xsl:for-each select="marc:subfield[@code='s']">
6148                         <titleInfo type="uniform">
6149                                 <title>
6150                                         <xsl:call-template name="chopPunctuation">
6151                                                 <xsl:with-param name="chopString">
6152                                                         <xsl:value-of select="."/>
6153                                                 </xsl:with-param>
6154                                         </xsl:call-template>
6155                                 </title>
6156                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
6157                                         <xsl:call-template name="relatedPartNumName"/>
6158                                 </xsl:if>
6159                         </titleInfo>
6160                 </xsl:for-each>
6161         </xsl:template>
6162         <xsl:template name="relatedOriginInfo">
6163                 <xsl:if test="marc:subfield[@code='b' or @code='d'] or marc:subfield[@code='f']">
6164                         <originInfo>
6165                                 <xsl:if test="@tag=775">
6166                                         <xsl:for-each select="marc:subfield[@code='f']">
6167                                                 <place>
6168                                                         <placeTerm>
6169                                                                 <xsl:attribute name="type">code</xsl:attribute>
6170                                                                 <xsl:attribute name="authority">marcgac</xsl:attribute>
6171                                                                 <xsl:value-of select="."/>
6172                                                         </placeTerm>
6173                                                 </place>
6174                                         </xsl:for-each>
6175                                 </xsl:if>
6176                                 <xsl:for-each select="marc:subfield[@code='d']">
6177                                         <publisher>
6178                                                 <xsl:value-of select="."/>
6179                                         </publisher>
6180                                 </xsl:for-each>
6181                                 <xsl:for-each select="marc:subfield[@code='b']">
6182                                         <edition>
6183                                                 <xsl:value-of select="."/>
6184                                         </edition>
6185                                 </xsl:for-each>
6186                         </originInfo>
6187                 </xsl:if>
6188         </xsl:template>
6189         <xsl:template name="relatedLanguage">
6190                 <xsl:for-each select="marc:subfield[@code='e']">
6191                         <xsl:call-template name="getLanguage">
6192                                 <xsl:with-param name="langString">
6193                                         <xsl:value-of select="."/>
6194                                 </xsl:with-param>
6195                         </xsl:call-template>
6196                 </xsl:for-each>
6197         </xsl:template>
6198         <xsl:template name="nameDate">
6199                 <xsl:for-each select="marc:subfield[@code='d']">
6200                         <namePart type="date">
6201                                 <xsl:call-template name="chopPunctuation">
6202                                         <xsl:with-param name="chopString" select="."/>
6203                                 </xsl:call-template>
6204                         </namePart>
6205                 </xsl:for-each>
6206         </xsl:template>
6207         <xsl:template name="subjectAuthority">
6208                 <xsl:if test="@ind2!=4">
6209                         <xsl:if test="@ind2!=' '">
6210                                 <xsl:if test="@ind2!=8">
6211                                         <xsl:if test="@ind2!=9">
6212                                                 <xsl:attribute name="authority">
6213                                                         <xsl:choose>
6214                                                                 <xsl:when test="@ind2=0">lcsh</xsl:when>
6215                                                                 <xsl:when test="@ind2=1">lcshac</xsl:when>
6216                                                                 <xsl:when test="@ind2=2">mesh</xsl:when>
6217                                                                 <!-- 1/04 fix -->
6218                                                                 <xsl:when test="@ind2=3">nal</xsl:when>
6219                                                                 <xsl:when test="@ind2=5">csh</xsl:when>
6220                                                                 <xsl:when test="@ind2=6">rvm</xsl:when>
6221                                                                 <xsl:when test="@ind2=7">
6222                                                                         <xsl:value-of select="marc:subfield[@code='2']"/>
6223                                                                 </xsl:when>
6224                                                         </xsl:choose>
6225                                                 </xsl:attribute>
6226                                         </xsl:if>
6227                                 </xsl:if>
6228                         </xsl:if>
6229                 </xsl:if>
6230         </xsl:template>
6231         <xsl:template name="subjectAnyOrder">
6232                 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
6233                         <xsl:choose>
6234                                 <xsl:when test="@code='v'">
6235                                         <xsl:call-template name="subjectGenre"/>
6236                                 </xsl:when>
6237                                 <xsl:when test="@code='x'">
6238                                         <xsl:call-template name="subjectTopic"/>
6239                                 </xsl:when>
6240                                 <xsl:when test="@code='y'">
6241                                         <xsl:call-template name="subjectTemporalY"/>
6242                                 </xsl:when>
6243                                 <xsl:when test="@code='z'">
6244                                         <xsl:call-template name="subjectGeographicZ"/>
6245                                 </xsl:when>
6246                         </xsl:choose>
6247                 </xsl:for-each>
6248         </xsl:template>
6249         <xsl:template name="specialSubfieldSelect">
6250                 <xsl:param name="anyCodes"/>
6251                 <xsl:param name="axis"/>
6252                 <xsl:param name="beforeCodes"/>
6253                 <xsl:param name="afterCodes"/>
6254                 <xsl:variable name="str">
6255                         <xsl:for-each select="marc:subfield">
6256                                 <xsl:if
6257                                         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])">
6258                                         <xsl:value-of select="text()"/>
6259                                         <xsl:text> </xsl:text>
6260                                 </xsl:if>
6261                         </xsl:for-each>
6262                 </xsl:variable>
6263                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
6264         </xsl:template>
6265
6266         <!-- 3.2 change tmee 6xx $v genre -->
6267         <xsl:template match="marc:datafield[@tag=600]">
6268                 <subject>
6269                         <xsl:call-template name="subjectAuthority"/>
6270                         <name type="personal">
6271                                 <xsl:call-template name="termsOfAddress"/>
6272                                 <namePart>
6273                                         <xsl:call-template name="chopPunctuation">
6274                                                 <xsl:with-param name="chopString">
6275                                                         <xsl:call-template name="subfieldSelect">
6276                                                                 <xsl:with-param name="codes">aq</xsl:with-param>
6277                                                         </xsl:call-template>
6278                                                 </xsl:with-param>
6279                                         </xsl:call-template>
6280                                 </namePart>
6281                                 <xsl:call-template name="nameDate"/>
6282                                 <xsl:call-template name="affiliation"/>
6283                                 <xsl:call-template name="role"/>
6284                         </name>
6285                         <xsl:call-template name="subjectAnyOrder"/>
6286                 </subject>
6287         </xsl:template>
6288         <xsl:template match="marc:datafield[@tag=610]">
6289                 <subject>
6290                         <xsl:call-template name="subjectAuthority"/>
6291                         <name type="corporate">
6292                                 <xsl:for-each select="marc:subfield[@code='a']">
6293                                         <namePart>
6294                                                 <xsl:value-of select="."/>
6295                                         </namePart>
6296                                 </xsl:for-each>
6297                                 <xsl:for-each select="marc:subfield[@code='b']">
6298                                         <namePart>
6299                                                 <xsl:value-of select="."/>
6300                                         </namePart>
6301                                 </xsl:for-each>
6302                                 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
6303                                         <namePart>
6304                                                 <xsl:call-template name="subfieldSelect">
6305                                                         <xsl:with-param name="codes">cdnp</xsl:with-param>
6306                                                 </xsl:call-template>
6307                                         </namePart>
6308                                 </xsl:if>
6309                                 <xsl:call-template name="role"/>
6310                         </name>
6311                         <xsl:call-template name="subjectAnyOrder"/>
6312                 </subject>
6313         </xsl:template>
6314         <xsl:template match="marc:datafield[@tag=611]">
6315                 <subject>
6316                         <xsl:call-template name="subjectAuthority"/>
6317                         <name type="conference">
6318                                 <namePart>
6319                                         <xsl:call-template name="subfieldSelect">
6320                                                 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
6321                                         </xsl:call-template>
6322                                 </namePart>
6323                                 <xsl:for-each select="marc:subfield[@code='4']">
6324                                         <role>
6325                                                 <roleTerm authority="marcrelator" type="code">
6326                                                         <xsl:value-of select="."/>
6327                                                 </roleTerm>
6328                                         </role>
6329                                 </xsl:for-each>
6330                         </name>
6331                         <xsl:call-template name="subjectAnyOrder"/>
6332                 </subject>
6333         </xsl:template>
6334         <xsl:template match="marc:datafield[@tag=630]">
6335                 <subject>
6336                         <xsl:call-template name="subjectAuthority"/>
6337                         <titleInfo>
6338                                 <title>
6339                                         <xsl:call-template name="chopPunctuation">
6340                                                 <xsl:with-param name="chopString">
6341                                                         <xsl:call-template name="subfieldSelect">
6342                                                                 <xsl:with-param name="codes">adfhklor</xsl:with-param>
6343                                                         </xsl:call-template>
6344                                                 </xsl:with-param>
6345                                         </xsl:call-template>
6346                                 </title>
6347                                 <xsl:call-template name="part"/>
6348                         </titleInfo>
6349                         <xsl:call-template name="subjectAnyOrder"/>
6350                 </subject>
6351         </xsl:template>
6352         <!-- 1.27 648 tmee-->
6353         <xsl:template match="marc:datafield[@tag=648]">
6354                 <subject>
6355                         <xsl:if test="marc:subfield[@code=2]">
6356                                 <xsl:attribute name="authority">
6357                                         <xsl:value-of select="marc:subfield[@code=2]"/>
6358                                 </xsl:attribute>
6359                         </xsl:if>
6360                         <xsl:call-template name="uri"/>
6361
6362                         <xsl:call-template name="subjectAuthority"/>
6363                         <temporal>
6364                                 <xsl:call-template name="chopPunctuation">
6365                                         <xsl:with-param name="chopString">
6366                                                 <xsl:call-template name="subfieldSelect">
6367                                                         <xsl:with-param name="codes">abcd</xsl:with-param>
6368                                                 </xsl:call-template>
6369                                         </xsl:with-param>
6370                                 </xsl:call-template>
6371                         </temporal>
6372                         <xsl:call-template name="subjectAnyOrder"/>
6373
6374                 </subject>
6375         </xsl:template>
6376         <xsl:template match="marc:datafield[@tag=650]">
6377                 <subject>
6378                         <xsl:call-template name="subjectAuthority"/>
6379                         <topic>
6380                                 <xsl:call-template name="chopPunctuation">
6381                                         <xsl:with-param name="chopString">
6382                                                 <xsl:call-template name="subfieldSelect">
6383                                                         <xsl:with-param name="codes">abcd</xsl:with-param>
6384                                                 </xsl:call-template>
6385                                         </xsl:with-param>
6386                                 </xsl:call-template>
6387                         </topic>
6388                         <xsl:call-template name="subjectAnyOrder"/>
6389                 </subject>
6390         </xsl:template>
6391         <xsl:template match="marc:datafield[@tag=651]">
6392                 <subject>
6393                         <xsl:call-template name="subjectAuthority"/>
6394                         <xsl:for-each select="marc:subfield[@code='a']">
6395                                 <geographic>
6396                                         <xsl:call-template name="chopPunctuation">
6397                                                 <xsl:with-param name="chopString" select="."/>
6398                                         </xsl:call-template>
6399                                 </geographic>
6400                         </xsl:for-each>
6401                         <xsl:call-template name="subjectAnyOrder"/>
6402                 </subject>
6403         </xsl:template>
6404         <xsl:template match="marc:datafield[@tag=653]">
6405                 <subject>
6406                         <xsl:for-each select="marc:subfield[@code='a']">
6407                                 <topic>
6408                                         <xsl:value-of select="."/>
6409                                 </topic>
6410                         </xsl:for-each>
6411                 </subject>
6412         </xsl:template>
6413         <xsl:template match="marc:datafield[@tag=656]">
6414                 <subject>
6415                         <xsl:if test="marc:subfield[@code=2]">
6416                                 <xsl:attribute name="authority">
6417                                         <xsl:value-of select="marc:subfield[@code=2]"/>
6418                                 </xsl:attribute>
6419                         </xsl:if>
6420                         <occupation>
6421                                 <xsl:call-template name="chopPunctuation">
6422                                         <xsl:with-param name="chopString">
6423                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
6424                                         </xsl:with-param>
6425                                 </xsl:call-template>
6426                         </occupation>
6427                 </subject>
6428         </xsl:template>
6429         <xsl:template name="termsOfAddress">
6430                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
6431                         <namePart type="termsOfAddress">
6432                                 <xsl:call-template name="chopPunctuation">
6433                                         <xsl:with-param name="chopString">
6434                                                 <xsl:call-template name="subfieldSelect">
6435                                                         <xsl:with-param name="codes">bc</xsl:with-param>
6436                                                 </xsl:call-template>
6437                                         </xsl:with-param>
6438                                 </xsl:call-template>
6439                         </namePart>
6440                 </xsl:if>
6441         </xsl:template>
6442         <xsl:template name="displayLabel">
6443                 <xsl:if test="marc:subfield[@code='i']">
6444                         <xsl:attribute name="displayLabel">
6445                                 <xsl:value-of select="marc:subfield[@code='i']"/>
6446                         </xsl:attribute>
6447                 </xsl:if>
6448                 <xsl:if test="marc:subfield[@code='3']">
6449                         <xsl:attribute name="displayLabel">
6450                                 <xsl:value-of select="marc:subfield[@code='3']"/>
6451                         </xsl:attribute>
6452                 </xsl:if>
6453         </xsl:template>
6454         <xsl:template name="isInvalid">
6455                 <xsl:param name="type"/>
6456                 <xsl:if
6457                         test="marc:subfield[@code='z'] or marc:subfield[@code='y']  or marc:subfield[@code='m']">
6458                         <identifier>
6459                                 <xsl:attribute name="type">
6460                                         <xsl:value-of select="$type"/>
6461                                 </xsl:attribute>
6462                                 <xsl:attribute name="invalid">
6463                                         <xsl:text>yes</xsl:text>
6464                                 </xsl:attribute>
6465                                 <xsl:if test="marc:subfield[@code='z']">
6466                                         <xsl:value-of select="marc:subfield[@code='z']"/>
6467                                 </xsl:if>
6468                                 <xsl:if test="marc:subfield[@code='y']">
6469                                         <xsl:value-of select="marc:subfield[@code='y']"/>
6470                                 </xsl:if>
6471                                 <xsl:if test="marc:subfield[@code='m']">
6472                                         <xsl:value-of select="marc:subfield[@code='m']"/>
6473                                 </xsl:if>
6474                         </identifier>
6475                 </xsl:if>
6476         </xsl:template>
6477         <xsl:template name="subtitle">
6478                 <xsl:if test="marc:subfield[@code='b']">
6479                         <subTitle>
6480                                 <xsl:call-template name="chopPunctuation">
6481                                         <xsl:with-param name="chopString">
6482                                                 <xsl:value-of select="marc:subfield[@code='b']"/>
6483                                                 <!--<xsl:call-template name="subfieldSelect">
6484                                                         <xsl:with-param name="codes">b</xsl:with-param>
6485                                                 </xsl:call-template>-->
6486                                         </xsl:with-param>
6487                                 </xsl:call-template>
6488                         </subTitle>
6489                 </xsl:if>
6490         </xsl:template>
6491         <xsl:template name="script">
6492                 <xsl:param name="scriptCode"/>
6493                 <xsl:attribute name="script">
6494                         <xsl:choose>
6495                                 <xsl:when test="$scriptCode='(3'">Arabic</xsl:when>
6496                                 <xsl:when test="$scriptCode='(B'">Latin</xsl:when>
6497                                 <xsl:when test="$scriptCode='$1'">Chinese, Japanese, Korean</xsl:when>
6498                                 <xsl:when test="$scriptCode='(N'">Cyrillic</xsl:when>
6499                                 <xsl:when test="$scriptCode='(2'">Hebrew</xsl:when>
6500                                 <xsl:when test="$scriptCode='(S'">Greek</xsl:when>
6501                         </xsl:choose>
6502                 </xsl:attribute>
6503         </xsl:template>
6504         <xsl:template name="parsePart">
6505                 <!-- assumes 773$q= 1:2:3<4
6506                      with up to 3 levels and one optional start page
6507                 -->
6508                 <xsl:variable name="level1">
6509                         <xsl:choose>
6510                                 <xsl:when test="contains(text(),':')">
6511                                         <!-- 1:2 -->
6512                                         <xsl:value-of select="substring-before(text(),':')"/>
6513                                 </xsl:when>
6514                                 <xsl:when test="not(contains(text(),':'))">
6515                                         <!-- 1 or 1<3 -->
6516                                         <xsl:if test="contains(text(),'&lt;')">
6517                                                 <!-- 1<3 -->
6518                                                 <xsl:value-of select="substring-before(text(),'&lt;')"/>
6519                                         </xsl:if>
6520                                         <xsl:if test="not(contains(text(),'&lt;'))">
6521                                                 <!-- 1 -->
6522                                                 <xsl:value-of select="text()"/>
6523                                         </xsl:if>
6524                                 </xsl:when>
6525                         </xsl:choose>
6526                 </xsl:variable>
6527                 <xsl:variable name="sici2">
6528                         <xsl:choose>
6529                                 <xsl:when test="starts-with(substring-after(text(),$level1),':')">
6530                                         <xsl:value-of select="substring(substring-after(text(),$level1),2)"/>
6531                                 </xsl:when>
6532                                 <xsl:otherwise>
6533                                         <xsl:value-of select="substring-after(text(),$level1)"/>
6534                                 </xsl:otherwise>
6535                         </xsl:choose>
6536                 </xsl:variable>
6537                 <xsl:variable name="level2">
6538                         <xsl:choose>
6539                                 <xsl:when test="contains($sici2,':')">
6540                                         <!--  2:3<4  -->
6541                                         <xsl:value-of select="substring-before($sici2,':')"/>
6542                                 </xsl:when>
6543                                 <xsl:when test="contains($sici2,'&lt;')">
6544                                         <!-- 1: 2<4 -->
6545                                         <xsl:value-of select="substring-before($sici2,'&lt;')"/>
6546                                 </xsl:when>
6547                                 <xsl:otherwise>
6548                                         <xsl:value-of select="$sici2"/>
6549                                         <!-- 1:2 -->
6550                                 </xsl:otherwise>
6551                         </xsl:choose>
6552                 </xsl:variable>
6553                 <xsl:variable name="sici3">
6554                         <xsl:choose>
6555                                 <xsl:when test="starts-with(substring-after($sici2,$level2),':')">
6556                                         <xsl:value-of select="substring(substring-after($sici2,$level2),2)"/>
6557                                 </xsl:when>
6558                                 <xsl:otherwise>
6559                                         <xsl:value-of select="substring-after($sici2,$level2)"/>
6560                                 </xsl:otherwise>
6561                         </xsl:choose>
6562                 </xsl:variable>
6563                 <xsl:variable name="level3">
6564                         <xsl:choose>
6565                                 <xsl:when test="contains($sici3,'&lt;')">
6566                                         <!-- 2<4 -->
6567                                         <xsl:value-of select="substring-before($sici3,'&lt;')"/>
6568                                 </xsl:when>
6569                                 <xsl:otherwise>
6570                                         <xsl:value-of select="$sici3"/>
6571                                         <!-- 3 -->
6572                                 </xsl:otherwise>
6573                         </xsl:choose>
6574                 </xsl:variable>
6575                 <xsl:variable name="page">
6576                         <xsl:if test="contains(text(),'&lt;')">
6577                                 <xsl:value-of select="substring-after(text(),'&lt;')"/>
6578                         </xsl:if>
6579                 </xsl:variable>
6580                 <xsl:if test="$level1">
6581                         <detail level="1">
6582                                 <number>
6583                                         <xsl:value-of select="$level1"/>
6584                                 </number>
6585                         </detail>
6586                 </xsl:if>
6587                 <xsl:if test="$level2">
6588                         <detail level="2">
6589                                 <number>
6590                                         <xsl:value-of select="$level2"/>
6591                                 </number>
6592                         </detail>
6593                 </xsl:if>
6594                 <xsl:if test="$level3">
6595                         <detail level="3">
6596                                 <number>
6597                                         <xsl:value-of select="$level3"/>
6598                                 </number>
6599                         </detail>
6600                 </xsl:if>
6601                 <xsl:if test="$page">
6602                         <extent unit="page">
6603                                 <start>
6604                                         <xsl:value-of select="$page"/>
6605                                 </start>
6606                         </extent>
6607                 </xsl:if>
6608         </xsl:template>
6609         <xsl:template name="getLanguage">
6610                 <xsl:param name="langString"/>
6611                 <xsl:param name="controlField008-35-37"/>
6612                 <xsl:variable name="length" select="string-length($langString)"/>
6613                 <xsl:choose>
6614                         <xsl:when test="$length=0"/>
6615                         <xsl:when test="$controlField008-35-37=substring($langString,1,3)">
6616                                 <xsl:call-template name="getLanguage">
6617                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
6618                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
6619                                 </xsl:call-template>
6620                         </xsl:when>
6621                         <xsl:otherwise>
6622                                 <language>
6623                                         <languageTerm authority="iso639-2b" type="code">
6624                                                 <xsl:value-of select="substring($langString,1,3)"/>
6625                                         </languageTerm>
6626                                 </language>
6627                                 <xsl:call-template name="getLanguage">
6628                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
6629                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
6630                                 </xsl:call-template>
6631                         </xsl:otherwise>
6632                 </xsl:choose>
6633         </xsl:template>
6634         <xsl:template name="isoLanguage">
6635                 <xsl:param name="currentLanguage"/>
6636                 <xsl:param name="usedLanguages"/>
6637                 <xsl:param name="remainingLanguages"/>
6638                 <xsl:choose>
6639                         <xsl:when test="string-length($currentLanguage)=0"/>
6640                         <xsl:when test="not(contains($usedLanguages, $currentLanguage))">
6641                                 <language>
6642                                         <xsl:if test="@code!='a'">
6643                                                 <xsl:attribute name="objectPart">
6644                                                         <xsl:choose>
6645                                                                 <xsl:when test="@code='b'">summary or subtitle</xsl:when>
6646                                                                 <xsl:when test="@code='d'">sung or spoken text</xsl:when>
6647                                                                 <xsl:when test="@code='e'">libretto</xsl:when>
6648                                                                 <xsl:when test="@code='f'">table of contents</xsl:when>
6649                                                                 <xsl:when test="@code='g'">accompanying material</xsl:when>
6650                                                                 <xsl:when test="@code='h'">translation</xsl:when>
6651                                                         </xsl:choose>
6652                                                 </xsl:attribute>
6653                                         </xsl:if>
6654                                         <languageTerm authority="iso639-2b" type="code">
6655                                                 <xsl:value-of select="$currentLanguage"/>
6656                                         </languageTerm>
6657                                 </language>
6658                                 <xsl:call-template name="isoLanguage">
6659                                         <xsl:with-param name="currentLanguage">
6660                                                 <xsl:value-of select="substring($remainingLanguages,1,3)"/>
6661                                         </xsl:with-param>
6662                                         <xsl:with-param name="usedLanguages">
6663                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
6664                                         </xsl:with-param>
6665                                         <xsl:with-param name="remainingLanguages">
6666                                                 <xsl:value-of
6667                                                         select="substring($remainingLanguages,4,string-length($remainingLanguages))"
6668                                                 />
6669                                         </xsl:with-param>
6670                                 </xsl:call-template>
6671                         </xsl:when>
6672                         <xsl:otherwise>
6673                                 <xsl:call-template name="isoLanguage">
6674                                         <xsl:with-param name="currentLanguage">
6675                                                 <xsl:value-of select="substring($remainingLanguages,1,3)"/>
6676                                         </xsl:with-param>
6677                                         <xsl:with-param name="usedLanguages">
6678                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
6679                                         </xsl:with-param>
6680                                         <xsl:with-param name="remainingLanguages">
6681                                                 <xsl:value-of
6682                                                         select="substring($remainingLanguages,4,string-length($remainingLanguages))"
6683                                                 />
6684                                         </xsl:with-param>
6685                                 </xsl:call-template>
6686                         </xsl:otherwise>
6687                 </xsl:choose>
6688         </xsl:template>
6689         <xsl:template name="chopBrackets">
6690                 <xsl:param name="chopString"/>
6691                 <xsl:variable name="string">
6692                         <xsl:call-template name="chopPunctuation">
6693                                 <xsl:with-param name="chopString" select="$chopString"/>
6694                         </xsl:call-template>
6695                 </xsl:variable>
6696                 <xsl:if test="substring($string, 1,1)='['">
6697                         <xsl:value-of select="substring($string,2, string-length($string)-2)"/>
6698                 </xsl:if>
6699                 <xsl:if test="substring($string, 1,1)!='['">
6700                         <xsl:value-of select="$string"/>
6701                 </xsl:if>
6702         </xsl:template>
6703         <xsl:template name="rfcLanguages">
6704                 <xsl:param name="nodeNum"/>
6705                 <xsl:param name="usedLanguages"/>
6706                 <xsl:param name="controlField008-35-37"/>
6707                 <xsl:variable name="currentLanguage" select="."/>
6708                 <xsl:choose>
6709                         <xsl:when test="not($currentLanguage)"/>
6710                         <xsl:when
6711                                 test="$currentLanguage!=$controlField008-35-37 and $currentLanguage!='rfc3066'">
6712                                 <xsl:if test="not(contains($usedLanguages,$currentLanguage))">
6713                                         <language>
6714                                                 <xsl:if test="@code!='a'">
6715                                                         <xsl:attribute name="objectPart">
6716                                                                 <xsl:choose>
6717                                                                         <xsl:when test="@code='b'">summary or subtitle</xsl:when>
6718                                                                         <xsl:when test="@code='d'">sung or spoken text</xsl:when>
6719                                                                         <xsl:when test="@code='e'">libretto</xsl:when>
6720                                                                         <xsl:when test="@code='f'">table of contents</xsl:when>
6721                                                                         <xsl:when test="@code='g'">accompanying material</xsl:when>
6722                                                                         <xsl:when test="@code='h'">translation</xsl:when>
6723                                                                 </xsl:choose>
6724                                                         </xsl:attribute>
6725                                                 </xsl:if>
6726                                                 <languageTerm authority="rfc3066" type="code">
6727                                                         <xsl:value-of select="$currentLanguage"/>
6728                                                 </languageTerm>
6729                                         </language>
6730                                 </xsl:if>
6731                         </xsl:when>
6732                         <xsl:otherwise> </xsl:otherwise>
6733                 </xsl:choose>
6734         </xsl:template>
6735
6736     <xsl:template name="datafield">
6737                 <xsl:param name="tag"/>
6738                 <xsl:param name="ind1">
6739                         <xsl:text> </xsl:text>
6740                 </xsl:param>
6741                 <xsl:param name="ind2">
6742                         <xsl:text> </xsl:text>
6743                 </xsl:param>
6744                 <xsl:param name="subfields"/>
6745                 <xsl:element name="marc:datafield">
6746                         <xsl:attribute name="tag">
6747                                 <xsl:value-of select="$tag"/>
6748                         </xsl:attribute>
6749                         <xsl:attribute name="ind1">
6750                                 <xsl:value-of select="$ind1"/>
6751                         </xsl:attribute>
6752                         <xsl:attribute name="ind2">
6753                                 <xsl:value-of select="$ind2"/>
6754                         </xsl:attribute>
6755                         <xsl:copy-of select="$subfields"/>
6756                 </xsl:element>
6757         </xsl:template>
6758
6759         <xsl:template name="subfieldSelect">
6760                 <xsl:param name="codes">abcdefghijklmnopqrstuvwxyz</xsl:param>
6761                 <xsl:param name="delimeter">
6762                         <xsl:text> </xsl:text>
6763                 </xsl:param>
6764                 <xsl:variable name="str">
6765                         <xsl:for-each select="marc:subfield">
6766                                 <xsl:if test="contains($codes, @code)">
6767                                         <xsl:value-of select="text()"/>
6768                                         <xsl:value-of select="$delimeter"/>
6769                                 </xsl:if>
6770                         </xsl:for-each>
6771                 </xsl:variable>
6772                 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
6773         </xsl:template>
6774
6775         <xsl:template name="buildSpaces">
6776                 <xsl:param name="spaces"/>
6777                 <xsl:param name="char">
6778                         <xsl:text> </xsl:text>
6779                 </xsl:param>
6780                 <xsl:if test="$spaces>0">
6781                         <xsl:value-of select="$char"/>
6782                         <xsl:call-template name="buildSpaces">
6783                                 <xsl:with-param name="spaces" select="$spaces - 1"/>
6784                                 <xsl:with-param name="char" select="$char"/>
6785                         </xsl:call-template>
6786                 </xsl:if>
6787         </xsl:template>
6788
6789         <xsl:template name="chopPunctuation">
6790                 <xsl:param name="chopString"/>
6791                 <xsl:param name="punctuation">
6792                         <xsl:text>.:,;/ </xsl:text>
6793                 </xsl:param>
6794                 <xsl:variable name="length" select="string-length($chopString)"/>
6795                 <xsl:choose>
6796                         <xsl:when test="$length=0"/>
6797                         <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
6798                                 <xsl:call-template name="chopPunctuation">
6799                                         <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
6800                                         <xsl:with-param name="punctuation" select="$punctuation"/>
6801                                 </xsl:call-template>
6802                         </xsl:when>
6803                         <xsl:when test="not($chopString)"/>
6804                         <xsl:otherwise>
6805                                 <xsl:value-of select="$chopString"/>
6806                         </xsl:otherwise>
6807                 </xsl:choose>
6808         </xsl:template>
6809
6810         <xsl:template name="chopPunctuationFront">
6811                 <xsl:param name="chopString"/>
6812                 <xsl:variable name="length" select="string-length($chopString)"/>
6813                 <xsl:choose>
6814                         <xsl:when test="$length=0"/>
6815                         <xsl:when test="contains('.:,;/[ ', substring($chopString,1,1))">
6816                                 <xsl:call-template name="chopPunctuationFront">
6817                                         <xsl:with-param name="chopString" select="substring($chopString,2,$length - 1)"
6818                                         />
6819                                 </xsl:call-template>
6820                         </xsl:when>
6821                         <xsl:when test="not($chopString)"/>
6822                         <xsl:otherwise>
6823                                 <xsl:value-of select="$chopString"/>
6824                         </xsl:otherwise>
6825                 </xsl:choose>
6826         </xsl:template>
6827
6828         <xsl:template name="chopPunctuationBack">
6829                 <xsl:param name="chopString"/>
6830                 <xsl:param name="punctuation">
6831                         <xsl:text>.:,;/] </xsl:text>
6832                 </xsl:param>
6833                 <xsl:variable name="length" select="string-length($chopString)"/>
6834                 <xsl:choose>
6835                         <xsl:when test="$length=0"/>
6836                         <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
6837                                 <xsl:call-template name="chopPunctuation">
6838                                         <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
6839                                         <xsl:with-param name="punctuation" select="$punctuation"/>
6840                                 </xsl:call-template>
6841                         </xsl:when>
6842                         <xsl:when test="not($chopString)"/>
6843                         <xsl:otherwise>
6844                                 <xsl:value-of select="$chopString"/>
6845                         </xsl:otherwise>
6846                 </xsl:choose>
6847         </xsl:template>
6848
6849         <!-- nate added 12/14/2007 for lccn.loc.gov: url encode ampersand, etc. -->
6850         <xsl:template name="url-encode">
6851
6852                 <xsl:param name="str"/>
6853
6854                 <xsl:if test="$str">
6855                         <xsl:variable name="first-char" select="substring($str,1,1)"/>
6856                         <xsl:choose>
6857                                 <xsl:when test="contains($safe,$first-char)">
6858                                         <xsl:value-of select="$first-char"/>
6859                                 </xsl:when>
6860                                 <xsl:otherwise>
6861                                         <xsl:variable name="codepoint">
6862                                                 <xsl:choose>
6863                                                         <xsl:when test="contains($ascii,$first-char)">
6864                                                                 <xsl:value-of
6865                                                                         select="string-length(substring-before($ascii,$first-char)) + 32"
6866                                                                 />
6867                                                         </xsl:when>
6868                                                         <xsl:when test="contains($latin1,$first-char)">
6869                                                                 <xsl:value-of
6870                                                                         select="string-length(substring-before($latin1,$first-char)) + 160"/>
6871                                                                 <!-- was 160 -->
6872                                                         </xsl:when>
6873                                                         <xsl:otherwise>
6874                                                                 <xsl:message terminate="no">Warning: string contains a character
6875                                                                         that is out of range! Substituting "?".</xsl:message>
6876                                                                 <xsl:text>63</xsl:text>
6877                                                         </xsl:otherwise>
6878                                                 </xsl:choose>
6879                                         </xsl:variable>
6880                                         <xsl:variable name="hex-digit1"
6881                                                 select="substring($hex,floor($codepoint div 16) + 1,1)"/>
6882                                         <xsl:variable name="hex-digit2" select="substring($hex,$codepoint mod 16 + 1,1)"/>
6883                                         <!-- <xsl:value-of select="concat('%',$hex-digit2)"/> -->
6884                                         <xsl:value-of select="concat('%',$hex-digit1,$hex-digit2)"/>
6885                                 </xsl:otherwise>
6886                         </xsl:choose>
6887                         <xsl:if test="string-length($str) &gt; 1">
6888                                 <xsl:call-template name="url-encode">
6889                                         <xsl:with-param name="str" select="substring($str,2)"/>
6890                                 </xsl:call-template>
6891                         </xsl:if>
6892                 </xsl:if>
6893         </xsl:template>
6894 </xsl:stylesheet>$XXXX$ where name = $$mods33$$;
6895
6896 COMMIT;
6897