]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xsl/MARC21slim2MODS33.xsl
updating the MARC21slimUtils and MODS xsl
[working/Evergreen.git] / Open-ILS / xsl / MARC21slim2MODS33.xsl
1 <xsl:stylesheet xmlns="http://www.loc.gov/mods/v3" xmlns:marc="http://www.loc.gov/MARC21/slim"
2         xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3         exclude-result-prefixes="xlink marc" version="1.0">
4         <xsl:include href="MARC21slimUtils.xsl"/>
5         <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
6
7         <!--
8 MARC21slim2MODS3-3.xsl
9 2008/10/16
10
11 Revision 1.26 - Added subfield $s mapping for 130/240/730  2008/10/16 tmee
12 Revision 1.25 - Mapped 040e to <descriptiveStandard> and Leader/18 to <descriptive standard>aacr2  2008/09/18 tmee
13 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
14 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
15 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
16 Revision 1.21 - Mapped 856 ind2=1 or ind2=2 to <relatedItem><location><url>  2008/07/03  tmee
17 Revision 1.20 - Added genre w/@auth="contents of 2" and type= "musical composition"  2008/07/01  tmee
18 Revision 1.19 - Added genre offprint for 008/24+ BK code 2  2008/07/01  tmee
19 Revision 1.18 - Added xlink/uri for subfield 0 for 130/240/730, 100/700, 110/710, 111/711  2008/06/26  tmee
20 Revision 1.17 - Added mapping of 662 2008/05/14 tmee    
21 Revision 1.16 - Changed @authority from "marc" to "marcgt" for 007 and 008 codes mapped to a term in <genre> 2007/07/10  tmee
22 Revision 1.15 - For field 630, moved call to part template outside title element  2007/07/10  tmee
23 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
24 Revision 1.13 - Changed order of output under cartographics to reflect schema  2006/11/28  tmee
25 Revision 1.12 - Updated to reflect MODS 3.2 Mapping  2006/10/11  tmee
26 Revision 1.11 - The attribute objectPart moved from <languageTerm> to <language>  2006/04/08  jrad
27 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
28 Revision 1.9 - Subfield $y was added to field 242 2004/09/02 10:57 jrad
29 Revision 1.8 - Subject chopPunctuation expanded and attribute fixes 2004/08/12 jrad
30 Revision 1.7 - 2004/03/25 08:29 jrad
31 Revision 1.6 - Various validation fixes 2004/02/20 ntra
32 Revision 1.5 - MODS2 to MODS3 updates, language unstacking and de-duping, chopPunctuation expanded  2003/10/02 16:18:58  ntra
33 Revision 1.3 - Additional Changes not related to MODS Version 2.0 by ntra
34 Revision 1.2 - Added Log Comment  2003/03/24 19:37:42  ckeith
35
36 -->
37         <xsl:template match="/">
38                 <xsl:choose>
39                         <xsl:when test="//marc:collection">
40                                 <modsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
41                                         xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
42                                         <xsl:for-each select="//marc:collection/marc:record">
43                                                 <mods version="3.3">
44                                                         <xsl:call-template name="marcRecord"/>
45                                                 </mods>
46                                         </xsl:for-each>
47                                 </modsCollection>
48                         </xsl:when>
49                         <xsl:otherwise>
50                                 <mods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"
51                                         xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
52                                         <xsl:for-each select="//marc:record">
53                                                 <xsl:call-template name="marcRecord"/>
54                                         </xsl:for-each>
55                                 </mods>
56                         </xsl:otherwise>
57                 </xsl:choose>
58         </xsl:template>
59         <xsl:template name="marcRecord">
60                 <xsl:variable name="leader" select="marc:leader"/>
61                 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
62                 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
63                 <xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
64                 <xsl:variable name="typeOf008">
65                         <xsl:choose>
66                                 <xsl:when test="$leader6='a'">
67                                         <xsl:choose>
68                                                 <xsl:when
69                                                         test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
70                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
71                                         </xsl:choose>
72                                 </xsl:when>
73                                 <xsl:when test="$leader6='t'">BK</xsl:when>
74                                 <xsl:when test="$leader6='p'">MM</xsl:when>
75                                 <xsl:when test="$leader6='m'">CF</xsl:when>
76                                 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
77                                 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
78                                 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'"
79                                 >MU</xsl:when>
80                         </xsl:choose>
81                 </xsl:variable>
82                 <xsl:for-each select="marc:datafield[@tag='245']">
83                         <titleInfo>
84                                 <xsl:variable name="title">
85                                         <xsl:choose>
86                                                 <xsl:when test="marc:subfield[@code='b']">
87                                                         <xsl:call-template name="specialSubfieldSelect">
88                                                                 <xsl:with-param name="axis">b</xsl:with-param>
89                                                                 <xsl:with-param name="beforeCodes">afgk</xsl:with-param>
90                                                         </xsl:call-template>
91                                                 </xsl:when>
92                                                 <xsl:otherwise>
93                                                         <xsl:call-template name="subfieldSelect">
94                                                                 <xsl:with-param name="codes">abfgk</xsl:with-param>
95                                                         </xsl:call-template>
96                                                 </xsl:otherwise>
97                                         </xsl:choose>
98                                 </xsl:variable>
99                                 <xsl:variable name="titleChop">
100                                         <xsl:call-template name="chopPunctuation">
101                                                 <xsl:with-param name="chopString">
102                                                         <xsl:value-of select="$title"/>
103                                                 </xsl:with-param>
104                                         </xsl:call-template>
105                                 </xsl:variable>
106                                 <xsl:choose>
107                                         <xsl:when test="@ind2&gt;0">
108                                                 <nonSort>
109                                                         <xsl:value-of select="substring($titleChop,1,@ind2)"/>
110                                                 </nonSort>
111                                                 <title>
112                                                         <xsl:value-of select="substring($titleChop,@ind2+1)"/>
113                                                 </title>
114                                         </xsl:when>
115                                         <xsl:otherwise>
116                                                 <title>
117                                                         <xsl:value-of select="$titleChop"/>
118                                                 </title>
119                                         </xsl:otherwise>
120                                 </xsl:choose>
121                                 <xsl:if test="marc:subfield[@code='b']">
122                                         <subTitle>
123                                                 <xsl:call-template name="chopPunctuation">
124                                                         <xsl:with-param name="chopString">
125                                                                 <xsl:call-template name="specialSubfieldSelect">
126                                                                         <xsl:with-param name="axis">b</xsl:with-param>
127                                                                         <xsl:with-param name="anyCodes">b</xsl:with-param>
128                                                                         <xsl:with-param name="afterCodes">afgk</xsl:with-param>
129                                                                 </xsl:call-template>
130                                                         </xsl:with-param>
131                                                 </xsl:call-template>
132                                         </subTitle>
133                                 </xsl:if>
134                                 <xsl:call-template name="part"/>
135                         </titleInfo>
136                 </xsl:for-each>
137                 <xsl:for-each select="marc:datafield[@tag='210']">
138                         <titleInfo type="abbreviated">
139                                 <title>
140                                         <xsl:call-template name="chopPunctuation">
141                                                 <xsl:with-param name="chopString">
142                                                         <xsl:call-template name="subfieldSelect">
143                                                                 <xsl:with-param name="codes">a</xsl:with-param>
144                                                         </xsl:call-template>
145                                                 </xsl:with-param>
146                                         </xsl:call-template>
147                                 </title>
148                                 <xsl:call-template name="subtitle"/>
149                         </titleInfo>
150                 </xsl:for-each>
151                 <xsl:for-each select="marc:datafield[@tag='242']">
152                         <titleInfo type="translated">
153                                 <!--09/01/04 Added subfield $y-->
154                                 <xsl:for-each select="marc:subfield[@code='y']">
155                                         <xsl:attribute name="lang">
156                                                 <xsl:value-of select="text()"/>
157                                         </xsl:attribute>
158                                 </xsl:for-each>
159                                 <title>
160                                         <xsl:call-template name="chopPunctuation">
161                                                 <xsl:with-param name="chopString">
162                                                         <xsl:call-template name="subfieldSelect">
163                                                                 <!-- 1/04 removed $h, b -->
164                                                                 <xsl:with-param name="codes">a</xsl:with-param>
165                                                         </xsl:call-template>
166                                                 </xsl:with-param>
167                                         </xsl:call-template>
168                                 </title>
169                                 <!-- 1/04 fix -->
170                                 <xsl:call-template name="subtitle"/>
171                                 <xsl:call-template name="part"/>
172                         </titleInfo>
173                 </xsl:for-each>
174                 <xsl:for-each select="marc:datafield[@tag='246']">
175                         <titleInfo type="alternative">
176                                 <xsl:for-each select="marc:subfield[@code='i']">
177                                         <xsl:attribute name="displayLabel">
178                                                 <xsl:value-of select="text()"/>
179                                         </xsl:attribute>
180                                 </xsl:for-each>
181                                 <title>
182                                         <xsl:call-template name="chopPunctuation">
183                                                 <xsl:with-param name="chopString">
184                                                         <xsl:call-template name="subfieldSelect">
185                                                                 <!-- 1/04 removed $h, $b -->
186                                                                 <xsl:with-param name="codes">af</xsl:with-param>
187                                                         </xsl:call-template>
188                                                 </xsl:with-param>
189                                         </xsl:call-template>
190                                 </title>
191                                 <xsl:call-template name="subtitle"/>
192                                 <xsl:call-template name="part"/>
193                         </titleInfo>
194                 </xsl:for-each>
195                 <xsl:for-each
196                         select="marc:datafield[@tag='130']|marc:datafield[@tag='240']|marc:datafield[@tag='730'][@ind2!='2']">
197                         <titleInfo type="uniform">
198                                 <title>
199                                         <!-- deleted uri for subfield 0
200                                                 <xsl:call-template name="uri"/>
201                                         -->
202
203                                         <xsl:variable name="str">
204                                                 <xsl:for-each select="marc:subfield">
205                                                         <xsl:if
206                                                                 test="(contains('adfklmors',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
207                                                                 <xsl:value-of select="text()"/>
208                                                                 <xsl:text> </xsl:text>
209                                                         </xsl:if>
210                                                 </xsl:for-each>
211                                         </xsl:variable>
212                                         <xsl:call-template name="chopPunctuation">
213                                                 <xsl:with-param name="chopString">
214                                                         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
215                                                 </xsl:with-param>
216                                         </xsl:call-template>
217                                 </title>
218                                 <xsl:call-template name="part"/>
219                         </titleInfo>
220                 </xsl:for-each>
221                 <xsl:for-each select="marc:datafield[@tag='740'][@ind2!='2']">
222                         <titleInfo type="alternative">
223                                 <title>
224                                         <xsl:call-template name="chopPunctuation">
225                                                 <xsl:with-param name="chopString">
226                                                         <xsl:call-template name="subfieldSelect">
227                                                                 <xsl:with-param name="codes">ah</xsl:with-param>
228                                                         </xsl:call-template>
229                                                 </xsl:with-param>
230                                         </xsl:call-template>
231                                 </title>
232                                 <xsl:call-template name="part"/>
233                         </titleInfo>
234                 </xsl:for-each>
235                 <xsl:for-each select="marc:datafield[@tag='100']">
236                         <name type="personal">
237
238                                 <!-- deleted uri for subfield 0
239                                 <xsl:call-template name="uri"/>
240                                 -->
241
242                                 <xsl:call-template name="nameABCDQ"/>
243                                 <xsl:call-template name="affiliation"/>
244                                 <role>
245                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
246                                 </role>
247                                 <xsl:call-template name="role"/>
248                         </name>
249                 </xsl:for-each>
250                 <xsl:for-each select="marc:datafield[@tag='110']">
251                         <name type="corporate">
252
253                                 <!-- deleted uri for subfield 0
254                                         <xsl:call-template name="uri"/>
255                                 -->
256
257                                 <xsl:call-template name="nameABCDN"/>
258                                 <role>
259                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
260                                 </role>
261                                 <xsl:call-template name="role"/>
262                         </name>
263                 </xsl:for-each>
264                 <xsl:for-each select="marc:datafield[@tag='111']">
265                         <name type="conference">
266
267                                 <!-- deleted uri for subfield 0
268                                         <xsl:call-template name="uri"/>
269                                 -->
270
271                                 <xsl:call-template name="nameACDEQ"/>
272                                 <role>
273                                         <roleTerm authority="marcrelator" type="text">creator</roleTerm>
274                                 </role>
275                                 <xsl:call-template name="role"/>
276                         </name>
277                 </xsl:for-each>
278                 <xsl:for-each select="marc:datafield[@tag='700'][not(marc:subfield[@code='t'])]">
279                         <name type="personal">
280
281                                 <!-- deleted uri for subfield 0
282                                         <xsl:call-template name="uri"/>
283                                 -->
284
285                                 <xsl:call-template name="nameABCDQ"/>
286                                 <xsl:call-template name="affiliation"/>
287                                 <xsl:call-template name="role"/>
288                         </name>
289                 </xsl:for-each>
290                 <xsl:for-each select="marc:datafield[@tag='710'][not(marc:subfield[@code='t'])]">
291                         <name type="corporate">
292
293                                 <!-- deleted uri for subfield 0
294                                         <xsl:call-template name="uri"/>
295                                 -->
296
297                                 <xsl:call-template name="nameABCDN"/>
298                                 <xsl:call-template name="role"/>
299                         </name>
300                 </xsl:for-each>
301                 <xsl:for-each select="marc:datafield[@tag='711'][not(marc:subfield[@code='t'])]">
302                         <name type="conference">
303
304                                 <!-- deleted uri for subfield 0
305                                         <xsl:call-template name="uri"/>
306                                 -->
307
308                                 <xsl:call-template name="nameACDEQ"/>
309                                 <xsl:call-template name="role"/>
310                         </name>
311                 </xsl:for-each>
312                 <xsl:for-each select="marc:datafield[@tag='720'][not(marc:subfield[@code='t'])]">
313                         <name>
314                                 <xsl:if test="@ind1=1">
315                                         <xsl:attribute name="type">
316                                                 <xsl:text>personal</xsl:text>
317                                         </xsl:attribute>
318                                 </xsl:if>
319                                 <namePart>
320                                         <xsl:value-of select="marc:subfield[@code='a']"/>
321                                 </namePart>
322                                 <xsl:call-template name="role"/>
323                         </name>
324                 </xsl:for-each>
325                 <typeOfResource>
326                         <xsl:if test="$leader7='c'">
327                                 <xsl:attribute name="collection">yes</xsl:attribute>
328                         </xsl:if>
329                         <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
330                                 <xsl:attribute name="manuscript">yes</xsl:attribute>
331                         </xsl:if>
332                         <xsl:choose>
333                                 <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
334                                 <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
335                                 <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
336                                 <xsl:when test="$leader6='i'">sound recording-nonmusical</xsl:when>
337                                 <xsl:when test="$leader6='j'">sound recording-musical</xsl:when>
338                                 <xsl:when test="$leader6='k'">still image</xsl:when>
339                                 <xsl:when test="$leader6='g'">moving image</xsl:when>
340                                 <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
341                                 <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
342                                 <xsl:when test="$leader6='p'">mixed material</xsl:when>
343                         </xsl:choose>
344                 </typeOfResource>
345                 <xsl:if test="substring($controlField008,26,1)='d'">
346                         <genre authority="marcgt">globe</genre>
347                 </xsl:if>
348                 <xsl:if
349                         test="marc:controlfield[@tag='007'][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
350                         <genre authority="marcgt">remote-sensing image</genre>
351                 </xsl:if>
352                 <xsl:if test="$typeOf008='MP'">
353                         <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"/>
354                         <xsl:choose>
355                                 <xsl:when
356                                         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']">
357                                         <genre authority="marcgt">map</genre>
358                                 </xsl:when>
359                                 <xsl:when
360                                         test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
361                                         <genre authority="marcgt">atlas</genre>
362                                 </xsl:when>
363                         </xsl:choose>
364                 </xsl:if>
365                 <xsl:if test="$typeOf008='SE'">
366                         <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"/>
367                         <xsl:choose>
368                                 <xsl:when test="$controlField008-21='d'">
369                                         <genre authority="marcgt">database</genre>
370                                 </xsl:when>
371                                 <xsl:when test="$controlField008-21='l'">
372                                         <genre authority="marcgt">loose-leaf</genre>
373                                 </xsl:when>
374                                 <xsl:when test="$controlField008-21='m'">
375                                         <genre authority="marcgt">series</genre>
376                                 </xsl:when>
377                                 <xsl:when test="$controlField008-21='n'">
378                                         <genre authority="marcgt">newspaper</genre>
379                                 </xsl:when>
380                                 <xsl:when test="$controlField008-21='p'">
381                                         <genre authority="marcgt">periodical</genre>
382                                 </xsl:when>
383                                 <xsl:when test="$controlField008-21='w'">
384                                         <genre authority="marcgt">web site</genre>
385                                 </xsl:when>
386                         </xsl:choose>
387                 </xsl:if>
388                 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
389                         <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"/>
390                         <xsl:choose>
391                                 <xsl:when test="contains($controlField008-24,'a')">
392                                         <genre authority="marcgt">abstract or summary</genre>
393                                 </xsl:when>
394                                 <xsl:when test="contains($controlField008-24,'b')">
395                                         <genre authority="marcgt">bibliography</genre>
396                                 </xsl:when>
397                                 <xsl:when test="contains($controlField008-24,'c')">
398                                         <genre authority="marcgt">catalog</genre>
399                                 </xsl:when>
400                                 <xsl:when test="contains($controlField008-24,'d')">
401                                         <genre authority="marcgt">dictionary</genre>
402                                 </xsl:when>
403                                 <xsl:when test="contains($controlField008-24,'e')">
404                                         <genre authority="marcgt">encyclopedia</genre>
405                                 </xsl:when>
406                                 <xsl:when test="contains($controlField008-24,'f')">
407                                         <genre authority="marcgt">handbook</genre>
408                                 </xsl:when>
409                                 <xsl:when test="contains($controlField008-24,'g')">
410                                         <genre authority="marcgt">legal article</genre>
411                                 </xsl:when>
412                                 <xsl:when test="contains($controlField008-24,'i')">
413                                         <genre authority="marcgt">index</genre>
414                                 </xsl:when>
415                                 <xsl:when test="contains($controlField008-24,'k')">
416                                         <genre authority="marcgt">discography</genre>
417                                 </xsl:when>
418                                 <xsl:when test="contains($controlField008-24,'l')">
419                                         <genre authority="marcgt">legislation</genre>
420                                 </xsl:when>
421                                 <xsl:when test="contains($controlField008-24,'m')">
422                                         <genre authority="marcgt">theses</genre>
423                                 </xsl:when>
424                                 <xsl:when test="contains($controlField008-24,'n')">
425                                         <genre authority="marcgt">survey of literature</genre>
426                                 </xsl:when>
427                                 <xsl:when test="contains($controlField008-24,'o')">
428                                         <genre authority="marcgt">review</genre>
429                                 </xsl:when>
430                                 <xsl:when test="contains($controlField008-24,'p')">
431                                         <genre authority="marcgt">programmed text</genre>
432                                 </xsl:when>
433                                 <xsl:when test="contains($controlField008-24,'q')">
434                                         <genre authority="marcgt">filmography</genre>
435                                 </xsl:when>
436                                 <xsl:when test="contains($controlField008-24,'r')">
437                                         <genre authority="marcgt">directory</genre>
438                                 </xsl:when>
439                                 <xsl:when test="contains($controlField008-24,'s')">
440                                         <genre authority="marcgt">statistics</genre>
441                                 </xsl:when>
442                                 <xsl:when test="contains($controlField008-24,'t')">
443                                         <genre authority="marcgt">technical report</genre>
444                                 </xsl:when>
445                                 <xsl:when test="contains($controlField008-24,'v')">
446                                         <genre authority="marcgt">legal case and case notes</genre>
447                                 </xsl:when>
448                                 <xsl:when test="contains($controlField008-24,'w')">
449                                         <genre authority="marcgt">law report or digest</genre>
450                                 </xsl:when>
451                                 <xsl:when test="contains($controlField008-24,'z')">
452                                         <genre authority="marcgt">treaty</genre>
453                                 </xsl:when>
454                         </xsl:choose>
455                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
456                         <xsl:choose>
457                                 <xsl:when test="$controlField008-29='1'">
458                                         <genre authority="marcgt">conference publication</genre>
459                                 </xsl:when>
460                         </xsl:choose>
461                 </xsl:if>
462                 <xsl:if test="$typeOf008='CF'">
463                         <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"/>
464                         <xsl:choose>
465                                 <xsl:when test="$controlField008-26='a'">
466                                         <genre authority="marcgt">numeric data</genre>
467                                 </xsl:when>
468                                 <xsl:when test="$controlField008-26='e'">
469                                         <genre authority="marcgt">database</genre>
470                                 </xsl:when>
471                                 <xsl:when test="$controlField008-26='f'">
472                                         <genre authority="marcgt">font</genre>
473                                 </xsl:when>
474                                 <xsl:when test="$controlField008-26='g'">
475                                         <genre authority="marcgt">game</genre>
476                                 </xsl:when>
477                         </xsl:choose>
478                 </xsl:if>
479                 <xsl:if test="$typeOf008='BK'">
480                         <xsl:if test="substring($controlField008,25,1)='j'">
481                                 <genre authority="marcgt">patent</genre>
482                         </xsl:if>
483                         <xsl:if test="substring($controlField008,25,1)='2'">
484                                 <genre authority="marcgt">offprint</genre>
485                         </xsl:if>
486                         <xsl:if test="substring($controlField008,31,1)='1'">
487                                 <genre authority="marcgt">festschrift</genre>
488                         </xsl:if>
489                         <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"/>
490                         <xsl:if
491                                 test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
492                                 <genre authority="marcgt">biography</genre>
493                         </xsl:if>
494                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
495                         <xsl:choose>
496                                 <xsl:when test="$controlField008-33='e'">
497                                         <genre authority="marcgt">essay</genre>
498                                 </xsl:when>
499                                 <xsl:when test="$controlField008-33='d'">
500                                         <genre authority="marcgt">drama</genre>
501                                 </xsl:when>
502                                 <xsl:when test="$controlField008-33='c'">
503                                         <genre authority="marcgt">comic strip</genre>
504                                 </xsl:when>
505                                 <xsl:when test="$controlField008-33='l'">
506                                         <genre authority="marcgt">fiction</genre>
507                                 </xsl:when>
508                                 <xsl:when test="$controlField008-33='h'">
509                                         <genre authority="marcgt">humor, satire</genre>
510                                 </xsl:when>
511                                 <xsl:when test="$controlField008-33='i'">
512                                         <genre authority="marcgt">letter</genre>
513                                 </xsl:when>
514                                 <xsl:when test="$controlField008-33='f'">
515                                         <genre authority="marcgt">novel</genre>
516                                 </xsl:when>
517                                 <xsl:when test="$controlField008-33='j'">
518                                         <genre authority="marcgt">short story</genre>
519                                 </xsl:when>
520                                 <xsl:when test="$controlField008-33='s'">
521                                         <genre authority="marcgt">speech</genre>
522                                 </xsl:when>
523                         </xsl:choose>
524                 </xsl:if>
525                 <xsl:if test="$typeOf008='MU'">
526                         <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"/>
527                         <xsl:if test="contains($controlField008-30-31,'b')">
528                                 <genre authority="marcgt">biography</genre>
529                         </xsl:if>
530                         <xsl:if test="contains($controlField008-30-31,'c')">
531                                 <genre authority="marcgt">conference publication</genre>
532                         </xsl:if>
533                         <xsl:if test="contains($controlField008-30-31,'d')">
534                                 <genre authority="marcgt">drama</genre>
535                         </xsl:if>
536                         <xsl:if test="contains($controlField008-30-31,'e')">
537                                 <genre authority="marcgt">essay</genre>
538                         </xsl:if>
539                         <xsl:if test="contains($controlField008-30-31,'f')">
540                                 <genre authority="marcgt">fiction</genre>
541                         </xsl:if>
542                         <xsl:if test="contains($controlField008-30-31,'o')">
543                                 <genre authority="marcgt">folktale</genre>
544                         </xsl:if>
545                         <xsl:if test="contains($controlField008-30-31,'h')">
546                                 <genre authority="marcgt">history</genre>
547                         </xsl:if>
548                         <xsl:if test="contains($controlField008-30-31,'k')">
549                                 <genre authority="marcgt">humor, satire</genre>
550                         </xsl:if>
551                         <xsl:if test="contains($controlField008-30-31,'m')">
552                                 <genre authority="marcgt">memoir</genre>
553                         </xsl:if>
554                         <xsl:if test="contains($controlField008-30-31,'p')">
555                                 <genre authority="marcgt">poetry</genre>
556                         </xsl:if>
557                         <xsl:if test="contains($controlField008-30-31,'r')">
558                                 <genre authority="marcgt">rehearsal</genre>
559                         </xsl:if>
560                         <xsl:if test="contains($controlField008-30-31,'g')">
561                                 <genre authority="marcgt">reporting</genre>
562                         </xsl:if>
563                         <xsl:if test="contains($controlField008-30-31,'s')">
564                                 <genre authority="marcgt">sound</genre>
565                         </xsl:if>
566                         <xsl:if test="contains($controlField008-30-31,'l')">
567                                 <genre authority="marcgt">speech</genre>
568                         </xsl:if>
569                 </xsl:if>
570                 <xsl:if test="$typeOf008='VM'">
571                         <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
572                         <xsl:choose>
573                                 <xsl:when test="$controlField008-33='a'">
574                                         <genre authority="marcgt">art original</genre>
575                                 </xsl:when>
576                                 <xsl:when test="$controlField008-33='b'">
577                                         <genre authority="marcgt">kit</genre>
578                                 </xsl:when>
579                                 <xsl:when test="$controlField008-33='c'">
580                                         <genre authority="marcgt">art reproduction</genre>
581                                 </xsl:when>
582                                 <xsl:when test="$controlField008-33='d'">
583                                         <genre authority="marcgt">diorama</genre>
584                                 </xsl:when>
585                                 <xsl:when test="$controlField008-33='f'">
586                                         <genre authority="marcgt">filmstrip</genre>
587                                 </xsl:when>
588                                 <xsl:when test="$controlField008-33='g'">
589                                         <genre authority="marcgt">legal article</genre>
590                                 </xsl:when>
591                                 <xsl:when test="$controlField008-33='i'">
592                                         <genre authority="marcgt">picture</genre>
593                                 </xsl:when>
594                                 <xsl:when test="$controlField008-33='k'">
595                                         <genre authority="marcgt">graphic</genre>
596                                 </xsl:when>
597                                 <xsl:when test="$controlField008-33='l'">
598                                         <genre authority="marcgt">technical drawing</genre>
599                                 </xsl:when>
600                                 <xsl:when test="$controlField008-33='m'">
601                                         <genre authority="marcgt">motion picture</genre>
602                                 </xsl:when>
603                                 <xsl:when test="$controlField008-33='n'">
604                                         <genre authority="marcgt">chart</genre>
605                                 </xsl:when>
606                                 <xsl:when test="$controlField008-33='o'">
607                                         <genre authority="marcgt">flash card</genre>
608                                 </xsl:when>
609                                 <xsl:when test="$controlField008-33='p'">
610                                         <genre authority="marcgt">microscope slide</genre>
611                                 </xsl:when>
612                                 <xsl:when
613                                         test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
614                                         <genre authority="marcgt">model</genre>
615                                 </xsl:when>
616                                 <xsl:when test="$controlField008-33='r'">
617                                         <genre authority="marcgt">realia</genre>
618                                 </xsl:when>
619                                 <xsl:when test="$controlField008-33='s'">
620                                         <genre authority="marcgt">slide</genre>
621                                 </xsl:when>
622                                 <xsl:when test="$controlField008-33='t'">
623                                         <genre authority="marcgt">transparency</genre>
624                                 </xsl:when>
625                                 <xsl:when test="$controlField008-33='v'">
626                                         <genre authority="marcgt">videorecording</genre>
627                                 </xsl:when>
628                                 <xsl:when test="$controlField008-33='w'">
629                                         <genre authority="marcgt">toy</genre>
630                                 </xsl:when>
631                         </xsl:choose>
632                 </xsl:if>
633
634                 <!-- 1.20 047 genre tmee-->
635
636                 <xsl:for-each select="marc:datafield[@tag=047]">
637                         <genre authority="marcgt">
638                                 <xsl:attribute name="authority">
639                                         <xsl:value-of select="marc:subfield[@code='2']"/>
640                                 </xsl:attribute>
641                                 <xsl:call-template name="subfieldSelect">
642                                         <xsl:with-param name="codes">abcdef</xsl:with-param>
643                                         <xsl:with-param name="delimeter">-</xsl:with-param>
644                                 </xsl:call-template>
645                         </genre>
646                 </xsl:for-each>
647                 <xsl:for-each select="marc:datafield[@tag=655]">
648                         <genre authority="marcgt">
649                                 <xsl:attribute name="authority">
650                                         <xsl:value-of select="marc:subfield[@code='2']"/>
651                                 </xsl:attribute>
652                                 <xsl:call-template name="subfieldSelect">
653                                         <xsl:with-param name="codes">abvxyz</xsl:with-param>
654                                         <xsl:with-param name="delimeter">-</xsl:with-param>
655                                 </xsl:call-template>
656                         </genre>
657                 </xsl:for-each>
658                 <originInfo>
659                         <xsl:variable name="MARCpublicationCode"
660                                 select="normalize-space(substring($controlField008,16,3))"/>
661                         <xsl:if test="translate($MARCpublicationCode,'|','')">
662                                 <place>
663                                         <placeTerm>
664                                                 <xsl:attribute name="type">code</xsl:attribute>
665                                                 <xsl:attribute name="authority">marccountry</xsl:attribute>
666                                                 <xsl:value-of select="$MARCpublicationCode"/>
667                                         </placeTerm>
668                                 </place>
669                         </xsl:if>
670                         <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
671                                 <place>
672                                         <placeTerm>
673                                                 <xsl:attribute name="type">code</xsl:attribute>
674                                                 <xsl:attribute name="authority">iso3166</xsl:attribute>
675                                                 <xsl:value-of select="."/>
676                                         </placeTerm>
677                                 </place>
678                         </xsl:for-each>
679                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a']">
680                                 <place>
681                                         <placeTerm>
682                                                 <xsl:attribute name="type">text</xsl:attribute>
683                                                 <xsl:call-template name="chopPunctuationFront">
684                                                         <xsl:with-param name="chopString">
685                                                                 <xsl:call-template name="chopPunctuation">
686                                                                         <xsl:with-param name="chopString" select="."/>
687                                                                 </xsl:call-template>
688                                                         </xsl:with-param>
689                                                 </xsl:call-template>
690                                         </placeTerm>
691                                 </place>
692                         </xsl:for-each>
693                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='m']">
694                                 <dateValid point="start">
695                                         <xsl:value-of select="."/>
696                                 </dateValid>
697                         </xsl:for-each>
698                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='n']">
699                                 <dateValid point="end">
700                                         <xsl:value-of select="."/>
701                                 </dateValid>
702                         </xsl:for-each>
703                         <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='j']">
704                                 <dateModified>
705                                         <xsl:value-of select="."/>
706                                 </dateModified>
707                         </xsl:for-each>
708                         <xsl:for-each
709                                 select="marc:datafield[@tag=260]/marc:subfield[@code='b' or @code='c' or @code='g']">
710                                 <xsl:choose>
711                                         <xsl:when test="@code='b'">
712                                                 <publisher>
713                                                         <xsl:call-template name="chopPunctuation">
714                                                                 <xsl:with-param name="chopString" select="."/>
715                                                                 <xsl:with-param name="punctuation">
716                                                                         <xsl:text>:,;/ </xsl:text>
717                                                                 </xsl:with-param>
718                                                         </xsl:call-template>
719                                                 </publisher>
720                                         </xsl:when>
721                                         <xsl:when test="@code='c'">
722                                                 <dateIssued>
723                                                         <xsl:call-template name="chopPunctuation">
724                                                                 <xsl:with-param name="chopString" select="."/>
725                                                         </xsl:call-template>
726                                                 </dateIssued>
727                                         </xsl:when>
728                                         <xsl:when test="@code='g'">
729                                                 <dateCreated>
730                                                         <xsl:value-of select="."/>
731                                                 </dateCreated>
732                                         </xsl:when>
733                                 </xsl:choose>
734                         </xsl:for-each>
735                         <xsl:variable name="dataField260c">
736                                 <xsl:call-template name="chopPunctuation">
737                                         <xsl:with-param name="chopString"
738                                                 select="marc:datafield[@tag=260]/marc:subfield[@code='c']"/>
739                                 </xsl:call-template>
740                         </xsl:variable>
741                         <xsl:variable name="controlField008-7-10"
742                                 select="normalize-space(substring($controlField008, 8, 4))"/>
743                         <xsl:variable name="controlField008-11-14"
744                                 select="normalize-space(substring($controlField008, 12, 4))"/>
745                         <xsl:variable name="controlField008-6"
746                                 select="normalize-space(substring($controlField008, 7, 1))"/>
747                         <xsl:if
748                                 test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
749                                 <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
750                                         <dateIssued encoding="marc">
751                                                 <xsl:value-of select="$controlField008-7-10"/>
752                                         </dateIssued>
753                                 </xsl:if>
754                         </xsl:if>
755                         <xsl:if
756                                 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'">
757                                 <xsl:if test="$controlField008-7-10">
758                                         <dateIssued encoding="marc" point="start">
759                                                 <xsl:value-of select="$controlField008-7-10"/>
760                                         </dateIssued>
761                                 </xsl:if>
762                         </xsl:if>
763                         <xsl:if
764                                 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'">
765                                 <xsl:if test="$controlField008-11-14">
766                                         <dateIssued encoding="marc" point="end">
767                                                 <xsl:value-of select="$controlField008-11-14"/>
768                                         </dateIssued>
769                                 </xsl:if>
770                         </xsl:if>
771                         <xsl:if test="$controlField008-6='q'">
772                                 <xsl:if test="$controlField008-7-10">
773                                         <dateIssued encoding="marc" point="start" qualifier="questionable">
774                                                 <xsl:value-of select="$controlField008-7-10"/>
775                                         </dateIssued>
776                                 </xsl:if>
777                         </xsl:if>
778                         <xsl:if test="$controlField008-6='q'">
779                                 <xsl:if test="$controlField008-11-14">
780                                         <dateIssued encoding="marc" point="end" qualifier="questionable">
781                                                 <xsl:value-of select="$controlField008-11-14"/>
782                                         </dateIssued>
783                                 </xsl:if>
784                         </xsl:if>
785                         <xsl:if test="$controlField008-6='t'">
786                                 <xsl:if test="$controlField008-11-14">
787                                         <copyrightDate encoding="marc">
788                                                 <xsl:value-of select="$controlField008-11-14"/>
789                                         </copyrightDate>
790                                 </xsl:if>
791                         </xsl:if>
792                         <xsl:for-each
793                                 select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
794                                 <dateCaptured encoding="iso8601">
795                                         <xsl:value-of select="."/>
796                                 </dateCaptured>
797                         </xsl:for-each>
798                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
799                                 <dateCaptured encoding="iso8601" point="start">
800                                         <xsl:value-of select="."/>
801                                 </dateCaptured>
802                         </xsl:for-each>
803                         <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
804                                 <dateCaptured encoding="iso8601" point="end">
805                                         <xsl:value-of select="."/>
806                                 </dateCaptured>
807                         </xsl:for-each>
808                         <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
809                                 <edition>
810                                         <xsl:value-of select="."/>
811                                 </edition>
812                         </xsl:for-each>
813                         <xsl:for-each select="marc:leader">
814                                 <issuance>
815                                         <xsl:choose>
816                                                 <xsl:when
817                                                         test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'"
818                                                         >monographic</xsl:when>
819                                                 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'"
820                                                 >continuing</xsl:when>
821                                         </xsl:choose>
822                                 </issuance>
823                         </xsl:for-each>
824                         <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
825                                 <frequency>
826                                         <xsl:call-template name="subfieldSelect">
827                                                 <xsl:with-param name="codes">ab</xsl:with-param>
828                                         </xsl:call-template>
829                                 </frequency>
830                         </xsl:for-each>
831                 </originInfo>
832                 <xsl:variable name="controlField008-35-37"
833                         select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"/>
834                 <xsl:if test="$controlField008-35-37">
835                         <language>
836                                 <languageTerm authority="iso639-2b" type="code">
837                                         <xsl:value-of select="substring($controlField008,36,3)"/>
838                                 </languageTerm>
839                         </language>
840                 </xsl:if>
841                 <xsl:for-each select="marc:datafield[@tag=041]">
842                         <xsl:for-each
843                                 select="marc:subfield[@code='a' or @code='b' or @code='d' or @code='e' or @code='f' or @code='g' or @code='h']">
844                                 <xsl:variable name="langCodes" select="."/>
845                                 <xsl:choose>
846                                         <xsl:when test="../marc:subfield[@code='2']='rfc3066'">
847                                                 <!-- not stacked but could be repeated -->
848                                                 <xsl:call-template name="rfcLanguages">
849                                                         <xsl:with-param name="nodeNum">
850                                                                 <xsl:value-of select="1"/>
851                                                         </xsl:with-param>
852                                                         <xsl:with-param name="usedLanguages">
853                                                                 <xsl:text/>
854                                                         </xsl:with-param>
855                                                         <xsl:with-param name="controlField008-35-37">
856                                                                 <xsl:value-of select="$controlField008-35-37"/>
857                                                         </xsl:with-param>
858                                                 </xsl:call-template>
859                                         </xsl:when>
860                                         <xsl:otherwise>
861                                                 <!-- iso -->
862                                                 <xsl:variable name="allLanguages">
863                                                         <xsl:copy-of select="$langCodes"/>
864                                                 </xsl:variable>
865                                                 <xsl:variable name="currentLanguage">
866                                                         <xsl:value-of select="substring($allLanguages,1,3)"/>
867                                                 </xsl:variable>
868                                                 <xsl:call-template name="isoLanguage">
869                                                         <xsl:with-param name="currentLanguage">
870                                                                 <xsl:value-of select="substring($allLanguages,1,3)"/>
871                                                         </xsl:with-param>
872                                                         <xsl:with-param name="remainingLanguages">
873                                                                 <xsl:value-of
874                                                                         select="substring($allLanguages,4,string-length($allLanguages)-3)"
875                                                                 />
876                                                         </xsl:with-param>
877                                                         <xsl:with-param name="usedLanguages">
878                                                                 <xsl:if test="$controlField008-35-37">
879                                                                         <xsl:value-of select="$controlField008-35-37"/>
880                                                                 </xsl:if>
881                                                         </xsl:with-param>
882                                                 </xsl:call-template>
883                                         </xsl:otherwise>
884                                 </xsl:choose>
885                         </xsl:for-each>
886                 </xsl:for-each>
887                 <xsl:variable name="physicalDescription">
888                         <!--3.2 change tmee 007/11 -->
889                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a']">
890                                 <digitalOrigin>reformatted digital</digitalOrigin>
891                         </xsl:if>
892                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='b']">
893                                 <digitalOrigin>digitized microfilm</digitalOrigin>
894                         </xsl:if>
895                         <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='d']">
896                                 <digitalOrigin>digitized other analog</digitalOrigin>
897                         </xsl:if>
898                         <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"/>
899                         <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
900                         <xsl:variable name="check008-23">
901                                 <xsl:if
902                                         test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
903                                         <xsl:value-of select="true()"/>
904                                 </xsl:if>
905                         </xsl:variable>
906                         <xsl:variable name="check008-29">
907                                 <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
908                                         <xsl:value-of select="true()"/>
909                                 </xsl:if>
910                         </xsl:variable>
911                         <xsl:choose>
912                                 <xsl:when
913                                         test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
914                                         <form authority="marcform">braille</form>
915                                 </xsl:when>
916                                 <xsl:when
917                                         test="($controlField008-23=' ' and ($leader6='c' or $leader6='d')) or (($typeOf008='BK' or $typeOf008='SE') and ($controlField008-23=' ' or $controlField008='r'))">
918                                         <form authority="marcform">print</form>
919                                 </xsl:when>
920                                 <xsl:when
921                                         test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
922                                         <form authority="marcform">electronic</form>
923                                 </xsl:when>
924                                 <xsl:when
925                                         test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
926                                         <form authority="marcform">microfiche</form>
927                                 </xsl:when>
928                                 <xsl:when
929                                         test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
930                                         <form authority="marcform">microfilm</form>
931                                 </xsl:when>
932                         </xsl:choose>
933                         <!-- 1/04 fix -->
934                         <xsl:if test="marc:datafield[@tag=130]/marc:subfield[@code='h']">
935                                 <form authority="gmd">
936                                         <xsl:call-template name="chopBrackets">
937                                                 <xsl:with-param name="chopString">
938                                                         <xsl:value-of select="marc:datafield[@tag=130]/marc:subfield[@code='h']"
939                                                         />
940                                                 </xsl:with-param>
941                                         </xsl:call-template>
942                                 </form>
943                         </xsl:if>
944                         <xsl:if test="marc:datafield[@tag=240]/marc:subfield[@code='h']">
945                                 <form authority="gmd">
946                                         <xsl:call-template name="chopBrackets">
947                                                 <xsl:with-param name="chopString">
948                                                         <xsl:value-of select="marc:datafield[@tag=240]/marc:subfield[@code='h']"
949                                                         />
950                                                 </xsl:with-param>
951                                         </xsl:call-template>
952                                 </form>
953                         </xsl:if>
954                         <xsl:if test="marc:datafield[@tag=242]/marc:subfield[@code='h']">
955                                 <form authority="gmd">
956                                         <xsl:call-template name="chopBrackets">
957                                                 <xsl:with-param name="chopString">
958                                                         <xsl:value-of select="marc:datafield[@tag=242]/marc:subfield[@code='h']"
959                                                         />
960                                                 </xsl:with-param>
961                                         </xsl:call-template>
962                                 </form>
963                         </xsl:if>
964                         <xsl:if test="marc:datafield[@tag=245]/marc:subfield[@code='h']">
965                                 <form authority="gmd">
966                                         <xsl:call-template name="chopBrackets">
967                                                 <xsl:with-param name="chopString">
968                                                         <xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='h']"
969                                                         />
970                                                 </xsl:with-param>
971                                         </xsl:call-template>
972                                 </form>
973                         </xsl:if>
974                         <xsl:if test="marc:datafield[@tag=246]/marc:subfield[@code='h']">
975                                 <form authority="gmd">
976                                         <xsl:call-template name="chopBrackets">
977                                                 <xsl:with-param name="chopString">
978                                                         <xsl:value-of select="marc:datafield[@tag=246]/marc:subfield[@code='h']"
979                                                         />
980                                                 </xsl:with-param>
981                                         </xsl:call-template>
982                                 </form>
983                         </xsl:if>
984                         <xsl:if test="marc:datafield[@tag=730]/marc:subfield[@code='h']">
985                                 <form authority="gmd">
986                                         <xsl:call-template name="chopBrackets">
987                                                 <xsl:with-param name="chopString">
988                                                         <xsl:value-of select="marc:datafield[@tag=730]/marc:subfield[@code='h']"
989                                                         />
990                                                 </xsl:with-param>
991                                         </xsl:call-template>
992                                 </form>
993                         </xsl:if>
994                         <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
995                                 <form>
996                                         <xsl:value-of select="."/>
997                                 </form>
998                         </xsl:for-each>
999                         <xsl:for-each select="marc:controlfield[@tag=007][substring(text(),1,1)='c']">
1000                                 <xsl:choose>
1001                                         <xsl:when test="substring(text(),14,1)='a'">
1002                                                 <reformattingQuality>access</reformattingQuality>
1003                                         </xsl:when>
1004                                         <xsl:when test="substring(text(),14,1)='p'">
1005                                                 <reformattingQuality>preservation</reformattingQuality>
1006                                         </xsl:when>
1007                                         <xsl:when test="substring(text(),14,1)='r'">
1008                                                 <reformattingQuality>replacement</reformattingQuality>
1009                                         </xsl:when>
1010                                 </xsl:choose>
1011                         </xsl:for-each>
1012                         <!--3.2 change tmee 007/01 -->
1013                         <xsl:if
1014                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='b']">
1015                                 <form authority="smd">chip cartridge</form>
1016                         </xsl:if>
1017                         <xsl:if
1018                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='c']">
1019                                 <form authority="smd">computer optical disc cartridge</form>
1020                         </xsl:if>
1021                         <xsl:if
1022                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='j']">
1023                                 <form authority="smd">magnetic disc</form>
1024                         </xsl:if>
1025                         <xsl:if
1026                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='m']">
1027                                 <form authority="smd">magneto-optical disc</form>
1028                         </xsl:if>
1029                         <xsl:if
1030                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='o']">
1031                                 <form authority="smd">optical disc</form>
1032                         </xsl:if>
1033                         <xsl:if
1034                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='r']">
1035                                 <form authority="smd">remote</form>
1036                         </xsl:if>
1037                         <xsl:if
1038                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='a']">
1039                                 <form authority="smd">tape cartridge</form>
1040                         </xsl:if>
1041                         <xsl:if
1042                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='f']">
1043                                 <form authority="smd">tape cassette</form>
1044                         </xsl:if>
1045                         <xsl:if
1046                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='h']">
1047                                 <form authority="smd">tape reel</form>
1048                         </xsl:if>
1049
1050                         <xsl:if
1051                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='a']">
1052                                 <form authority="smd">celestial globe</form>
1053                         </xsl:if>
1054                         <xsl:if
1055                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='e']">
1056                                 <form authority="smd">earth moon globe</form>
1057                         </xsl:if>
1058                         <xsl:if
1059                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='b']">
1060                                 <form authority="smd">planetary or lunar globe</form>
1061                         </xsl:if>
1062                         <xsl:if
1063                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='c']">
1064                                 <form authority="smd">terrestrial globe</form>
1065                         </xsl:if>
1066
1067                         <xsl:if
1068                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='o'][substring(text(),2,1)='o']">
1069                                 <form authority="smd">kit</form>
1070                         </xsl:if>
1071
1072                         <xsl:if
1073                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
1074                                 <form authority="smd">atlas</form>
1075                         </xsl:if>
1076                         <xsl:if
1077                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='g']">
1078                                 <form authority="smd">diagram</form>
1079                         </xsl:if>
1080                         <xsl:if
1081                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='j']">
1082                                 <form authority="smd">map</form>
1083                         </xsl:if>
1084                         <xsl:if
1085                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
1086                                 <form authority="smd">model</form>
1087                         </xsl:if>
1088                         <xsl:if
1089                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='k']">
1090                                 <form authority="smd">profile</form>
1091                         </xsl:if>
1092                         <xsl:if
1093                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
1094                                 <form authority="smd">remote-sensing image</form>
1095                         </xsl:if>
1096                         <xsl:if
1097                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='s']">
1098                                 <form authority="smd">section</form>
1099                         </xsl:if>
1100                         <xsl:if
1101                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='y']">
1102                                 <form authority="smd">view</form>
1103                         </xsl:if>
1104
1105                         <xsl:if
1106                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='a']">
1107                                 <form authority="smd">aperture card</form>
1108                         </xsl:if>
1109                         <xsl:if
1110                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='e']">
1111                                 <form authority="smd">microfiche</form>
1112                         </xsl:if>
1113                         <xsl:if
1114                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='f']">
1115                                 <form authority="smd">microfiche cassette</form>
1116                         </xsl:if>
1117                         <xsl:if
1118                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='b']">
1119                                 <form authority="smd">microfilm cartridge</form>
1120                         </xsl:if>
1121                         <xsl:if
1122                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='c']">
1123                                 <form authority="smd">microfilm cassette</form>
1124                         </xsl:if>
1125                         <xsl:if
1126                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='d']">
1127                                 <form authority="smd">microfilm reel</form>
1128                         </xsl:if>
1129                         <xsl:if
1130                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='g']">
1131                                 <form authority="smd">microopaque</form>
1132                         </xsl:if>
1133
1134                         <xsl:if
1135                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='c']">
1136                                 <form authority="smd">film cartridge</form>
1137                         </xsl:if>
1138                         <xsl:if
1139                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='f']">
1140                                 <form authority="smd">film cassette</form>
1141                         </xsl:if>
1142                         <xsl:if
1143                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='r']">
1144                                 <form authority="smd">film reel</form>
1145                         </xsl:if>
1146
1147                         <xsl:if
1148                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='n']">
1149                                 <form authority="smd">chart</form>
1150                         </xsl:if>
1151                         <xsl:if
1152                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='c']">
1153                                 <form authority="smd">collage</form>
1154                         </xsl:if>
1155                         <xsl:if
1156                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='d']">
1157                                 <form authority="smd">drawing</form>
1158                         </xsl:if>
1159                         <xsl:if
1160                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='o']">
1161                                 <form authority="smd">flash card</form>
1162                         </xsl:if>
1163                         <xsl:if
1164                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='e']">
1165                                 <form authority="smd">painting</form>
1166                         </xsl:if>
1167                         <xsl:if
1168                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='f']">
1169                                 <form authority="smd">photomechanical print</form>
1170                         </xsl:if>
1171                         <xsl:if
1172                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='g']">
1173                                 <form authority="smd">photonegative</form>
1174                         </xsl:if>
1175                         <xsl:if
1176                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='h']">
1177                                 <form authority="smd">photoprint</form>
1178                         </xsl:if>
1179                         <xsl:if
1180                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='i']">
1181                                 <form authority="smd">picture</form>
1182                         </xsl:if>
1183                         <xsl:if
1184                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='j']">
1185                                 <form authority="smd">print</form>
1186                         </xsl:if>
1187                         <xsl:if
1188                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='l']">
1189                                 <form authority="smd">technical drawing</form>
1190                         </xsl:if>
1191
1192                         <xsl:if
1193                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='q'][substring(text(),2,1)='q']">
1194                                 <form authority="smd">notated music</form>
1195                         </xsl:if>
1196
1197                         <xsl:if
1198                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='d']">
1199                                 <form authority="smd">filmslip</form>
1200                         </xsl:if>
1201                         <xsl:if
1202                                 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
1206                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='o']">
1207                                 <form authority="smd">filmstrip roll</form>
1208                         </xsl:if>
1209                         <xsl:if
1210                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='f']">
1211                                 <form authority="smd">other filmstrip type</form>
1212                         </xsl:if>
1213                         <xsl:if
1214                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='s']">
1215                                 <form authority="smd">slide</form>
1216                         </xsl:if>
1217                         <xsl:if
1218                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='t']">
1219                                 <form authority="smd">transparency</form>
1220                         </xsl:if>
1221                         <xsl:if
1222                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='r'][substring(text(),2,1)='r']">
1223                                 <form authority="smd">remote-sensing image</form>
1224                         </xsl:if>
1225                         <xsl:if
1226                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='e']">
1227                                 <form authority="smd">cylinder</form>
1228                         </xsl:if>
1229                         <xsl:if
1230                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='q']">
1231                                 <form authority="smd">roll</form>
1232                         </xsl:if>
1233                         <xsl:if
1234                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='g']">
1235                                 <form authority="smd">sound cartridge</form>
1236                         </xsl:if>
1237                         <xsl:if
1238                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='s']">
1239                                 <form authority="smd">sound cassette</form>
1240                         </xsl:if>
1241                         <xsl:if
1242                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='d']">
1243                                 <form authority="smd">sound disc</form>
1244                         </xsl:if>
1245                         <xsl:if
1246                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='t']">
1247                                 <form authority="smd">sound-tape reel</form>
1248                         </xsl:if>
1249                         <xsl:if
1250                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='i']">
1251                                 <form authority="smd">sound-track film</form>
1252                         </xsl:if>
1253                         <xsl:if
1254                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='w']">
1255                                 <form authority="smd">wire recording</form>
1256                         </xsl:if>
1257
1258                         <xsl:if
1259                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='c']">
1260                                 <form authority="smd">braille</form>
1261                         </xsl:if>
1262                         <xsl:if
1263                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='b']">
1264                                 <form authority="smd">combination</form>
1265                         </xsl:if>
1266                         <xsl:if
1267                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='a']">
1268                                 <form authority="smd">moon</form>
1269                         </xsl:if>
1270                         <xsl:if
1271                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='d']">
1272                                 <form authority="smd">tactile, with no writing system</form>
1273                         </xsl:if>
1274
1275                         <xsl:if
1276                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='c']">
1277                                 <form authority="smd">braille</form>
1278                         </xsl:if>
1279                         <xsl:if
1280                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='b']">
1281                                 <form authority="smd">large print</form>
1282                         </xsl:if>
1283                         <xsl:if
1284                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='a']">
1285                                 <form authority="smd">regular print</form>
1286                         </xsl:if>
1287                         <xsl:if
1288                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='d']">
1289                                 <form authority="smd">text in looseleaf binder</form>
1290                         </xsl:if>
1291
1292                         <xsl:if
1293                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='c']">
1294                                 <form authority="smd">videocartridge</form>
1295                         </xsl:if>
1296                         <xsl:if
1297                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='f']">
1298                                 <form authority="smd">videocassette</form>
1299                         </xsl:if>
1300                         <xsl:if
1301                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='d']">
1302                                 <form authority="smd">videodisc</form>
1303                         </xsl:if>
1304                         <xsl:if
1305                                 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='r']">
1306                                 <form authority="smd">videoreel</form>
1307                         </xsl:if>
1308
1309                         <xsl:for-each
1310                                 select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)&gt;1]">
1311                                 <internetMediaType>
1312                                         <xsl:value-of select="."/>
1313                                 </internetMediaType>
1314                         </xsl:for-each>
1315                         <xsl:for-each select="marc:datafield[@tag=300]">
1316                                 <extent>
1317                                         <xsl:call-template name="subfieldSelect">
1318                                                 <xsl:with-param name="codes">abce</xsl:with-param>
1319                                         </xsl:call-template>
1320                                 </extent>
1321                         </xsl:for-each>
1322                 </xsl:variable>
1323                 <xsl:if test="string-length(normalize-space($physicalDescription))">
1324                         <physicalDescription>
1325                                 <xsl:copy-of select="$physicalDescription"/>
1326                         </physicalDescription>
1327                 </xsl:if>
1328                 <xsl:for-each select="marc:datafield[@tag=520]">
1329                         <abstract>
1330                                 <xsl:call-template name="uri"/>
1331                                 <xsl:call-template name="subfieldSelect">
1332                                         <xsl:with-param name="codes">ab</xsl:with-param>
1333                                 </xsl:call-template>
1334                         </abstract>
1335                 </xsl:for-each>
1336                 <xsl:for-each select="marc:datafield[@tag=505]">
1337                         <tableOfContents>
1338                                 <xsl:call-template name="uri"/>
1339                                 <xsl:call-template name="subfieldSelect">
1340                                         <xsl:with-param name="codes">agrt</xsl:with-param>
1341                                 </xsl:call-template>
1342                         </tableOfContents>
1343                 </xsl:for-each>
1344                 <xsl:for-each select="marc:datafield[@tag=521]">
1345                         <targetAudience>
1346                                 <xsl:call-template name="subfieldSelect">
1347                                         <xsl:with-param name="codes">ab</xsl:with-param>
1348                                 </xsl:call-template>
1349                         </targetAudience>
1350                 </xsl:for-each>
1351                 <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
1352                         <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"/>
1353                         <xsl:choose>
1354                                 <!-- 01/04 fix -->
1355                                 <xsl:when test="$controlField008-22='d'">
1356                                         <targetAudience authority="marctarget">adolescent</targetAudience>
1357                                 </xsl:when>
1358                                 <xsl:when test="$controlField008-22='e'">
1359                                         <targetAudience authority="marctarget">adult</targetAudience>
1360                                 </xsl:when>
1361                                 <xsl:when test="$controlField008-22='g'">
1362                                         <targetAudience authority="marctarget">general</targetAudience>
1363                                 </xsl:when>
1364                                 <xsl:when
1365                                         test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
1366                                         <targetAudience authority="marctarget">juvenile</targetAudience>
1367                                 </xsl:when>
1368                                 <xsl:when test="$controlField008-22='a'">
1369                                         <targetAudience authority="marctarget">preschool</targetAudience>
1370                                 </xsl:when>
1371                                 <xsl:when test="$controlField008-22='f'">
1372                                         <targetAudience authority="marctarget">specialized</targetAudience>
1373                                 </xsl:when>
1374                         </xsl:choose>
1375                 </xsl:if>
1376                 <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
1377                         <note type="statement of responsibility">
1378                                 <xsl:value-of select="."/>
1379                         </note>
1380                 </xsl:for-each>
1381                 <xsl:for-each select="marc:datafield[@tag=500]">
1382                         <note>
1383                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1384                                 <xsl:call-template name="uri"/>
1385                         </note>
1386                 </xsl:for-each>
1387
1388                 <!--3.2 change tmee additional note fields-->
1389
1390                 <xsl:for-each select="marc:datafield[@tag=506]">
1391                         <note type="restrictions">
1392                                 <xsl:call-template name="uri"/>
1393                                 <xsl:variable name="str">
1394                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1395                                                 <xsl:value-of select="."/>
1396                                                 <xsl:text> </xsl:text>
1397                                         </xsl:for-each>
1398                                 </xsl:variable>
1399                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1400                         </note>
1401                 </xsl:for-each>
1402
1403                 <xsl:for-each select="marc:datafield[@tag=510]">
1404                         <note type="citation/reference">
1405                                 <xsl:call-template name="uri"/>
1406                                 <xsl:variable name="str">
1407                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1408                                                 <xsl:value-of select="."/>
1409                                                 <xsl:text> </xsl:text>
1410                                         </xsl:for-each>
1411                                 </xsl:variable>
1412                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1413                         </note>
1414                 </xsl:for-each>
1415
1416
1417                 <xsl:for-each select="marc:datafield[@tag=511]">
1418                         <note type="performers">
1419                                 <xsl:call-template name="uri"/>
1420                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1421                         </note>
1422                 </xsl:for-each>
1423                 <xsl:for-each select="marc:datafield[@tag=518]">
1424                         <note type="venue">
1425                                 <xsl:call-template name="uri"/>
1426                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1427                         </note>
1428                 </xsl:for-each>
1429
1430                 <xsl:for-each select="marc:datafield[@tag=530]">
1431                         <note type="additional physical form">
1432                                 <xsl:call-template name="uri"/>
1433                                 <xsl:variable name="str">
1434                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1435                                                 <xsl:value-of select="."/>
1436                                                 <xsl:text> </xsl:text>
1437                                         </xsl:for-each>
1438                                 </xsl:variable>
1439                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1440                         </note>
1441                 </xsl:for-each>
1442
1443                 <xsl:for-each select="marc:datafield[@tag=533]">
1444                         <note type="reproduction">
1445                                 <xsl:call-template name="uri"/>
1446                                 <xsl:variable name="str">
1447                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1448                                                 <xsl:value-of select="."/>
1449                                                 <xsl:text> </xsl:text>
1450                                         </xsl:for-each>
1451                                 </xsl:variable>
1452                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1453                         </note>
1454                 </xsl:for-each>
1455
1456                 <xsl:for-each select="marc:datafield[@tag=534]">
1457                         <note type="original version">
1458                                 <xsl:call-template name="uri"/>
1459                                 <xsl:variable name="str">
1460                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1461                                                 <xsl:value-of select="."/>
1462                                                 <xsl:text> </xsl:text>
1463                                         </xsl:for-each>
1464                                 </xsl:variable>
1465                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1466                         </note>
1467                 </xsl:for-each>
1468
1469                 <xsl:for-each select="marc:datafield[@tag=538]">
1470                         <note type="system details">
1471                                 <xsl:call-template name="uri"/>
1472                                 <xsl:variable name="str">
1473                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1474                                                 <xsl:value-of select="."/>
1475                                                 <xsl:text> </xsl:text>
1476                                         </xsl:for-each>
1477                                 </xsl:variable>
1478                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1479                         </note>
1480                 </xsl:for-each>
1481
1482                 <xsl:for-each select="marc:datafield[@tag=583]">
1483                         <note type="action">
1484                                 <xsl:call-template name="uri"/>
1485                                 <xsl:variable name="str">
1486                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1487                                                 <xsl:value-of select="."/>
1488                                                 <xsl:text> </xsl:text>
1489                                         </xsl:for-each>
1490                                 </xsl:variable>
1491                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1492                         </note>
1493                 </xsl:for-each>
1494
1495
1496
1497
1498
1499                 <xsl:for-each
1500                         select="marc:datafield[@tag=501 or @tag=502 or @tag=504 or @tag=507 or @tag=508 or  @tag=513 or @tag=514 or @tag=515 or @tag=516 or @tag=522 or @tag=524 or @tag=525 or @tag=526 or @tag=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]">
1501                         <note>
1502                                 <xsl:call-template name="uri"/>
1503                                 <xsl:variable name="str">
1504                                         <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1505                                                 <xsl:value-of select="."/>
1506                                                 <xsl:text> </xsl:text>
1507                                         </xsl:for-each>
1508                                 </xsl:variable>
1509                                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1510                         </note>
1511                 </xsl:for-each>
1512                 <xsl:for-each
1513                         select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
1514                         <subject>
1515                                 <cartographics>
1516                                         <coordinates>
1517                                                 <xsl:call-template name="subfieldSelect">
1518                                                         <xsl:with-param name="codes">defg</xsl:with-param>
1519                                                 </xsl:call-template>
1520                                         </coordinates>
1521                                 </cartographics>
1522                         </subject>
1523                 </xsl:for-each>
1524                 <xsl:for-each select="marc:datafield[@tag=043]">
1525                         <subject>
1526                                 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1527                                         <geographicCode>
1528                                                 <xsl:attribute name="authority">
1529                                                         <xsl:if test="@code='a'">
1530                                                                 <xsl:text>marcgac</xsl:text>
1531                                                         </xsl:if>
1532                                                         <xsl:if test="@code='b'">
1533                                                                 <xsl:value-of select="following-sibling::marc:subfield[@code=2]"/>
1534                                                         </xsl:if>
1535                                                         <xsl:if test="@code='c'">
1536                                                                 <xsl:text>iso3166</xsl:text>
1537                                                         </xsl:if>
1538                                                 </xsl:attribute>
1539                                                 <xsl:value-of select="self::marc:subfield"/>
1540                                         </geographicCode>
1541                                 </xsl:for-each>
1542                         </subject>
1543                 </xsl:for-each>
1544                 <!-- tmee 2006/11/27 -->
1545                 <xsl:for-each select="marc:datafield[@tag=255]">
1546                         <subject>
1547                                 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1548                                         <cartographics>
1549                                                 <xsl:if test="@code='a'">
1550                                                         <scale>
1551                                                                 <xsl:value-of select="."/>
1552                                                         </scale>
1553                                                 </xsl:if>
1554                                                 <xsl:if test="@code='b'">
1555                                                         <projection>
1556                                                                 <xsl:value-of select="."/>
1557                                                         </projection>
1558                                                 </xsl:if>
1559                                                 <xsl:if test="@code='c'">
1560                                                         <coordinates>
1561                                                                 <xsl:value-of select="."/>
1562                                                         </coordinates>
1563                                                 </xsl:if>
1564                                         </cartographics>
1565                                 </xsl:for-each>
1566                         </subject>
1567                 </xsl:for-each>
1568
1569                 <xsl:apply-templates select="marc:datafield[653 &gt;= @tag and @tag &gt;= 600]"/>
1570                 <xsl:apply-templates select="marc:datafield[@tag=656]"/>
1571                 <xsl:for-each select="marc:datafield[@tag=752 or @tag=662]">
1572                         <subject>
1573                                 <hierarchicalGeographic>
1574                                         <xsl:for-each select="marc:subfield[@code='a']">
1575                                                 <country>
1576                                                         <xsl:call-template name="chopPunctuation">
1577                                                                 <xsl:with-param name="chopString" select="."/>
1578                                                         </xsl:call-template>
1579                                                 </country>
1580                                         </xsl:for-each>
1581                                         <xsl:for-each select="marc:subfield[@code='b']">
1582                                                 <state>
1583                                                         <xsl:call-template name="chopPunctuation">
1584                                                                 <xsl:with-param name="chopString" select="."/>
1585                                                         </xsl:call-template>
1586                                                 </state>
1587                                         </xsl:for-each>
1588                                         <xsl:for-each select="marc:subfield[@code='c']">
1589                                                 <county>
1590                                                         <xsl:call-template name="chopPunctuation">
1591                                                                 <xsl:with-param name="chopString" select="."/>
1592                                                         </xsl:call-template>
1593                                                 </county>
1594                                         </xsl:for-each>
1595                                         <xsl:for-each select="marc:subfield[@code='d']">
1596                                                 <city>
1597                                                         <xsl:call-template name="chopPunctuation">
1598                                                                 <xsl:with-param name="chopString" select="."/>
1599                                                         </xsl:call-template>
1600                                                 </city>
1601                                         </xsl:for-each>
1602                                         <xsl:for-each select="marc:subfield[@code='e']">
1603                                                 <citySection>
1604                                                         <xsl:call-template name="chopPunctuation">
1605                                                                 <xsl:with-param name="chopString" select="."/>
1606                                                         </xsl:call-template>
1607                                                 </citySection>
1608                                         </xsl:for-each>
1609                                         <xsl:for-each select="marc:subfield[@code='g']">
1610                                                 <region>
1611                                                         <xsl:call-template name="chopPunctuation">
1612                                                                 <xsl:with-param name="chopString" select="."/>
1613                                                         </xsl:call-template>
1614                                                 </region>
1615                                         </xsl:for-each>
1616                                         <xsl:for-each select="marc:subfield[@code='h']">
1617                                                 <extraterrestrialArea>
1618                                                         <xsl:call-template name="chopPunctuation">
1619                                                                 <xsl:with-param name="chopString" select="."/>
1620                                                         </xsl:call-template>
1621                                                 </extraterrestrialArea>
1622                                         </xsl:for-each>
1623                                 </hierarchicalGeographic>
1624                         </subject>
1625                 </xsl:for-each>
1626                 <xsl:for-each select="marc:datafield[@tag=045][marc:subfield[@code='b']]">
1627                         <subject>
1628                                 <xsl:choose>
1629                                         <xsl:when test="@ind1=2">
1630                                                 <temporal encoding="iso8601" point="start">
1631                                                         <xsl:call-template name="chopPunctuation">
1632                                                                 <xsl:with-param name="chopString">
1633                                                                         <xsl:value-of select="marc:subfield[@code='b'][1]"/>
1634                                                                 </xsl:with-param>
1635                                                         </xsl:call-template>
1636                                                 </temporal>
1637                                                 <temporal encoding="iso8601" point="end">
1638                                                         <xsl:call-template name="chopPunctuation">
1639                                                                 <xsl:with-param name="chopString">
1640                                                                         <xsl:value-of select="marc:subfield[@code='b'][2]"/>
1641                                                                 </xsl:with-param>
1642                                                         </xsl:call-template>
1643                                                 </temporal>
1644                                         </xsl:when>
1645                                         <xsl:otherwise>
1646                                                 <xsl:for-each select="marc:subfield[@code='b']">
1647                                                         <temporal encoding="iso8601">
1648                                                                 <xsl:call-template name="chopPunctuation">
1649                                                                         <xsl:with-param name="chopString" select="."/>
1650                                                                 </xsl:call-template>
1651                                                         </temporal>
1652                                                 </xsl:for-each>
1653                                         </xsl:otherwise>
1654                                 </xsl:choose>
1655                         </subject>
1656                 </xsl:for-each>
1657                 <xsl:for-each select="marc:datafield[@tag=050]">
1658                         <xsl:for-each select="marc:subfield[@code='b']">
1659                                 <classification authority="lcc">
1660                                         <xsl:if test="../marc:subfield[@code='3']">
1661                                                 <xsl:attribute name="displayLabel">
1662                                                         <xsl:value-of select="../marc:subfield[@code='3']"/>
1663                                                 </xsl:attribute>
1664                                         </xsl:if>
1665                                         <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"/>
1666                                         <xsl:text> </xsl:text>
1667                                         <xsl:value-of select="text()"/>
1668                                 </classification>
1669                         </xsl:for-each>
1670                         <xsl:for-each
1671                                 select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
1672                                 <classification authority="lcc">
1673                                         <xsl:if test="../marc:subfield[@code='3']">
1674                                                 <xsl:attribute name="displayLabel">
1675                                                         <xsl:value-of select="../marc:subfield[@code='3']"/>
1676                                                 </xsl:attribute>
1677                                         </xsl:if>
1678                                         <xsl:value-of select="text()"/>
1679                                 </classification>
1680                         </xsl:for-each>
1681                 </xsl:for-each>
1682                 <xsl:for-each select="marc:datafield[@tag=082]">
1683                         <classification authority="ddc">
1684                                 <xsl:if test="marc:subfield[@code='2']">
1685                                         <xsl:attribute name="edition">
1686                                                 <xsl:value-of select="marc:subfield[@code='2']"/>
1687                                         </xsl:attribute>
1688                                 </xsl:if>
1689                                 <xsl:call-template name="subfieldSelect">
1690                                         <xsl:with-param name="codes">ab</xsl:with-param>
1691                                 </xsl:call-template>
1692                         </classification>
1693                 </xsl:for-each>
1694                 <xsl:for-each select="marc:datafield[@tag=080]">
1695                         <classification authority="udc">
1696                                 <xsl:call-template name="subfieldSelect">
1697                                         <xsl:with-param name="codes">abx</xsl:with-param>
1698                                 </xsl:call-template>
1699                         </classification>
1700                 </xsl:for-each>
1701                 <xsl:for-each select="marc:datafield[@tag=060]">
1702                         <classification authority="nlm">
1703                                 <xsl:call-template name="subfieldSelect">
1704                                         <xsl:with-param name="codes">ab</xsl:with-param>
1705                                 </xsl:call-template>
1706                         </classification>
1707                 </xsl:for-each>
1708                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
1709                         <classification authority="sudocs">
1710                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1711                         </classification>
1712                 </xsl:for-each>
1713                 <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
1714                         <classification authority="candoc">
1715                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1716                         </classification>
1717                 </xsl:for-each>
1718                 <xsl:for-each select="marc:datafield[@tag=086]">
1719                         <classification>
1720                                 <xsl:attribute name="authority">
1721                                         <xsl:value-of select="marc:subfield[@code='2']"/>
1722                                 </xsl:attribute>
1723                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1724                         </classification>
1725                 </xsl:for-each>
1726                 <xsl:for-each select="marc:datafield[@tag=084]">
1727                         <classification>
1728                                 <xsl:attribute name="authority">
1729                                         <xsl:value-of select="marc:subfield[@code='2']"/>
1730                                 </xsl:attribute>
1731                                 <xsl:call-template name="subfieldSelect">
1732                                         <xsl:with-param name="codes">ab</xsl:with-param>
1733                                 </xsl:call-template>
1734                         </classification>
1735                 </xsl:for-each>
1736                 <xsl:for-each select="marc:datafield[@tag=440]">
1737                         <relatedItem type="series">
1738                                 <titleInfo>
1739                                         <title>
1740                                                 <xsl:call-template name="chopPunctuation">
1741                                                         <xsl:with-param name="chopString">
1742                                                                 <xsl:call-template name="subfieldSelect">
1743                                                                         <xsl:with-param name="codes">av</xsl:with-param>
1744                                                                 </xsl:call-template>
1745                                                         </xsl:with-param>
1746                                                 </xsl:call-template>
1747                                         </title>
1748                                         <xsl:call-template name="part"/>
1749                                 </titleInfo>
1750                         </relatedItem>
1751                 </xsl:for-each>
1752                 <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
1753                         <relatedItem type="series">
1754                                 <titleInfo>
1755                                         <title>
1756                                                 <xsl:call-template name="chopPunctuation">
1757                                                         <xsl:with-param name="chopString">
1758                                                                 <xsl:call-template name="subfieldSelect">
1759                                                                         <xsl:with-param name="codes">av</xsl:with-param>
1760                                                                 </xsl:call-template>
1761                                                         </xsl:with-param>
1762                                                 </xsl:call-template>
1763                                         </title>
1764                                         <xsl:call-template name="part"/>
1765                                 </titleInfo>
1766                         </relatedItem>
1767                 </xsl:for-each>
1768                 <xsl:for-each select="marc:datafield[@tag=510]">
1769                         <relatedItem type="isReferencedBy">
1770                                 <note>
1771                                         <xsl:call-template name="subfieldSelect">
1772                                                 <xsl:with-param name="codes">abcx3</xsl:with-param>
1773                                         </xsl:call-template>
1774                                 </note>
1775                         </relatedItem>
1776                 </xsl:for-each>
1777                 <xsl:for-each select="marc:datafield[@tag=534]">
1778                         <relatedItem type="original">
1779                                 <xsl:call-template name="relatedTitle"/>
1780                                 <xsl:call-template name="relatedName"/>
1781                                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
1782                                         <originInfo>
1783                                                 <xsl:for-each select="marc:subfield[@code='c']">
1784                                                         <publisher>
1785                                                                 <xsl:value-of select="."/>
1786                                                         </publisher>
1787                                                 </xsl:for-each>
1788                                                 <xsl:for-each select="marc:subfield[@code='b']">
1789                                                         <edition>
1790                                                                 <xsl:value-of select="."/>
1791                                                         </edition>
1792                                                 </xsl:for-each>
1793                                         </originInfo>
1794                                 </xsl:if>
1795                                 <xsl:call-template name="relatedIdentifierISSN"/>
1796                                 <xsl:for-each select="marc:subfield[@code='z']">
1797                                         <identifier type="isbn">
1798                                                 <xsl:value-of select="."/>
1799                                         </identifier>
1800                                 </xsl:for-each>
1801                                 <xsl:call-template name="relatedNote"/>
1802                         </relatedItem>
1803                 </xsl:for-each>
1804                 <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
1805                         <relatedItem>
1806                                 <xsl:call-template name="constituentOrRelatedType"/>
1807                                 <titleInfo>
1808                                         <title>
1809                                                 <xsl:call-template name="chopPunctuation">
1810                                                         <xsl:with-param name="chopString">
1811                                                                 <xsl:call-template name="specialSubfieldSelect">
1812                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1813                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1814                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1815                                                                 </xsl:call-template>
1816                                                         </xsl:with-param>
1817                                                 </xsl:call-template>
1818                                         </title>
1819                                         <xsl:call-template name="part"/>
1820                                 </titleInfo>
1821                                 <name type="personal">
1822                                         <namePart>
1823                                                 <xsl:call-template name="specialSubfieldSelect">
1824                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
1825                                                         <xsl:with-param name="axis">t</xsl:with-param>
1826                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
1827                                                 </xsl:call-template>
1828                                         </namePart>
1829                                         <xsl:call-template name="termsOfAddress"/>
1830                                         <xsl:call-template name="nameDate"/>
1831                                         <xsl:call-template name="role"/>
1832                                 </name>
1833                                 <xsl:call-template name="relatedForm"/>
1834                                 <xsl:call-template name="relatedIdentifierISSN"/>
1835                         </relatedItem>
1836                 </xsl:for-each>
1837                 <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
1838                         <relatedItem>
1839                                 <xsl:call-template name="constituentOrRelatedType"/>
1840                                 <titleInfo>
1841                                         <title>
1842                                                 <xsl:call-template name="chopPunctuation">
1843                                                         <xsl:with-param name="chopString">
1844                                                                 <xsl:call-template name="specialSubfieldSelect">
1845                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1846                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1847                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
1848                                                                 </xsl:call-template>
1849                                                         </xsl:with-param>
1850                                                 </xsl:call-template>
1851                                         </title>
1852                                         <xsl:call-template name="relatedPartNumName"/>
1853                                 </titleInfo>
1854                                 <name type="corporate">
1855                                         <xsl:for-each select="marc:subfield[@code='a']">
1856                                                 <namePart>
1857                                                         <xsl:value-of select="."/>
1858                                                 </namePart>
1859                                         </xsl:for-each>
1860                                         <xsl:for-each select="marc:subfield[@code='b']">
1861                                                 <namePart>
1862                                                         <xsl:value-of select="."/>
1863                                                 </namePart>
1864                                         </xsl:for-each>
1865                                         <xsl:variable name="tempNamePart">
1866                                                 <xsl:call-template name="specialSubfieldSelect">
1867                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
1868                                                         <xsl:with-param name="axis">t</xsl:with-param>
1869                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1870                                                 </xsl:call-template>
1871                                         </xsl:variable>
1872                                         <xsl:if test="normalize-space($tempNamePart)">
1873                                                 <namePart>
1874                                                         <xsl:value-of select="$tempNamePart"/>
1875                                                 </namePart>
1876                                         </xsl:if>
1877                                         <xsl:call-template name="role"/>
1878                                 </name>
1879                                 <xsl:call-template name="relatedForm"/>
1880                                 <xsl:call-template name="relatedIdentifierISSN"/>
1881                         </relatedItem>
1882                 </xsl:for-each>
1883                 <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
1884                         <relatedItem>
1885                                 <xsl:call-template name="constituentOrRelatedType"/>
1886                                 <titleInfo>
1887                                         <title>
1888                                                 <xsl:call-template name="chopPunctuation">
1889                                                         <xsl:with-param name="chopString">
1890                                                                 <xsl:call-template name="specialSubfieldSelect">
1891                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1892                                                                         <xsl:with-param name="axis">t</xsl:with-param>
1893                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
1894                                                                 </xsl:call-template>
1895                                                         </xsl:with-param>
1896                                                 </xsl:call-template>
1897                                         </title>
1898                                         <xsl:call-template name="relatedPartNumName"/>
1899                                 </titleInfo>
1900                                 <name type="conference">
1901                                         <namePart>
1902                                                 <xsl:call-template name="specialSubfieldSelect">
1903                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1904                                                         <xsl:with-param name="axis">t</xsl:with-param>
1905                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1906                                                 </xsl:call-template>
1907                                         </namePart>
1908                                 </name>
1909                                 <xsl:call-template name="relatedForm"/>
1910                                 <xsl:call-template name="relatedIdentifierISSN"/>
1911                         </relatedItem>
1912                 </xsl:for-each>
1913                 <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
1914                         <relatedItem>
1915                                 <xsl:call-template name="constituentOrRelatedType"/>
1916                                 <titleInfo>
1917                                         <title>
1918                                                 <xsl:call-template name="chopPunctuation">
1919                                                         <xsl:with-param name="chopString">
1920                                                                 <xsl:call-template name="subfieldSelect">
1921                                                                         <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1922                                                                 </xsl:call-template>
1923                                                         </xsl:with-param>
1924                                                 </xsl:call-template>
1925                                         </title>
1926                                         <xsl:call-template name="part"/>
1927                                 </titleInfo>
1928                                 <xsl:call-template name="relatedForm"/>
1929                                 <xsl:call-template name="relatedIdentifierISSN"/>
1930                         </relatedItem>
1931                 </xsl:for-each>
1932                 <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
1933                         <relatedItem>
1934                                 <xsl:call-template name="constituentOrRelatedType"/>
1935                                 <titleInfo>
1936                                         <title>
1937                                                 <xsl:call-template name="chopPunctuation">
1938                                                         <xsl:with-param name="chopString">
1939                                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1940                                                         </xsl:with-param>
1941                                                 </xsl:call-template>
1942                                         </title>
1943                                         <xsl:call-template name="part"/>
1944                                 </titleInfo>
1945                                 <xsl:call-template name="relatedForm"/>
1946                         </relatedItem>
1947                 </xsl:for-each>
1948                 <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
1949                         <relatedItem type="series">
1950                                 <xsl:call-template name="relatedItem76X-78X"/>
1951                         </relatedItem>
1952                 </xsl:for-each>
1953                 <xsl:for-each
1954                         select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
1955                         <relatedItem>
1956                                 <xsl:call-template name="relatedItem76X-78X"/>
1957                         </relatedItem>
1958                 </xsl:for-each>
1959                 <xsl:for-each select="marc:datafield[@tag=775]">
1960                         <relatedItem type="otherVersion">
1961                                 <xsl:call-template name="relatedItem76X-78X"/>
1962                         </relatedItem>
1963                 </xsl:for-each>
1964                 <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
1965                         <relatedItem type="constituent">
1966                                 <xsl:call-template name="relatedItem76X-78X"/>
1967                         </relatedItem>
1968                 </xsl:for-each>
1969                 <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
1970                         <relatedItem type="host">
1971                                 <xsl:call-template name="relatedItem76X-78X"/>
1972                         </relatedItem>
1973                 </xsl:for-each>
1974                 <xsl:for-each select="marc:datafield[@tag=776]">
1975                         <relatedItem type="otherFormat">
1976                                 <xsl:call-template name="relatedItem76X-78X"/>
1977                         </relatedItem>
1978                 </xsl:for-each>
1979                 <xsl:for-each select="marc:datafield[@tag=780]">
1980                         <relatedItem type="preceding">
1981                                 <xsl:call-template name="relatedItem76X-78X"/>
1982                         </relatedItem>
1983                 </xsl:for-each>
1984                 <xsl:for-each select="marc:datafield[@tag=785]">
1985                         <relatedItem type="succeeding">
1986                                 <xsl:call-template name="relatedItem76X-78X"/>
1987                         </relatedItem>
1988                 </xsl:for-each>
1989                 <xsl:for-each select="marc:datafield[@tag=786]">
1990                         <relatedItem type="original">
1991                                 <xsl:call-template name="relatedItem76X-78X"/>
1992                         </relatedItem>
1993                 </xsl:for-each>
1994                 <xsl:for-each select="marc:datafield[@tag=800]">
1995                         <relatedItem type="series">
1996                                 <titleInfo>
1997                                         <title>
1998                                                 <xsl:call-template name="chopPunctuation">
1999                                                         <xsl:with-param name="chopString">
2000                                                                 <xsl:call-template name="specialSubfieldSelect">
2001                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
2002                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2003                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
2004                                                                 </xsl:call-template>
2005                                                         </xsl:with-param>
2006                                                 </xsl:call-template>
2007                                         </title>
2008                                         <xsl:call-template name="part"/>
2009                                 </titleInfo>
2010                                 <name type="personal">
2011                                         <namePart>
2012                                                 <xsl:call-template name="chopPunctuation">
2013                                                         <xsl:with-param name="chopString">
2014                                                                 <xsl:call-template name="specialSubfieldSelect">
2015                                                                         <xsl:with-param name="anyCodes">aq</xsl:with-param>
2016                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2017                                                                         <xsl:with-param name="beforeCodes">g</xsl:with-param>
2018                                                                 </xsl:call-template>
2019                                                         </xsl:with-param>
2020                                                 </xsl:call-template>
2021                                         </namePart>
2022                                         <xsl:call-template name="termsOfAddress"/>
2023                                         <xsl:call-template name="nameDate"/>
2024                                         <xsl:call-template name="role"/>
2025                                 </name>
2026                                 <xsl:call-template name="relatedForm"/>
2027                         </relatedItem>
2028                 </xsl:for-each>
2029                 <xsl:for-each select="marc:datafield[@tag=810]">
2030                         <relatedItem type="series">
2031                                 <titleInfo>
2032                                         <title>
2033                                                 <xsl:call-template name="chopPunctuation">
2034                                                         <xsl:with-param name="chopString">
2035                                                                 <xsl:call-template name="specialSubfieldSelect">
2036                                                                         <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
2037                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2038                                                                         <xsl:with-param name="afterCodes">dg</xsl:with-param>
2039                                                                 </xsl:call-template>
2040                                                         </xsl:with-param>
2041                                                 </xsl:call-template>
2042                                         </title>
2043                                         <xsl:call-template name="relatedPartNumName"/>
2044                                 </titleInfo>
2045                                 <name type="corporate">
2046                                         <xsl:for-each select="marc:subfield[@code='a']">
2047                                                 <namePart>
2048                                                         <xsl:value-of select="."/>
2049                                                 </namePart>
2050                                         </xsl:for-each>
2051                                         <xsl:for-each select="marc:subfield[@code='b']">
2052                                                 <namePart>
2053                                                         <xsl:value-of select="."/>
2054                                                 </namePart>
2055                                         </xsl:for-each>
2056                                         <namePart>
2057                                                 <xsl:call-template name="specialSubfieldSelect">
2058                                                         <xsl:with-param name="anyCodes">c</xsl:with-param>
2059                                                         <xsl:with-param name="axis">t</xsl:with-param>
2060                                                         <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
2061                                                 </xsl:call-template>
2062                                         </namePart>
2063                                         <xsl:call-template name="role"/>
2064                                 </name>
2065                                 <xsl:call-template name="relatedForm"/>
2066                         </relatedItem>
2067                 </xsl:for-each>
2068                 <xsl:for-each select="marc:datafield[@tag=811]">
2069                         <relatedItem type="series">
2070                                 <titleInfo>
2071                                         <title>
2072                                                 <xsl:call-template name="chopPunctuation">
2073                                                         <xsl:with-param name="chopString">
2074                                                                 <xsl:call-template name="specialSubfieldSelect">
2075                                                                         <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
2076                                                                         <xsl:with-param name="axis">t</xsl:with-param>
2077                                                                         <xsl:with-param name="afterCodes">g</xsl:with-param>
2078                                                                 </xsl:call-template>
2079                                                         </xsl:with-param>
2080                                                 </xsl:call-template>
2081                                         </title>
2082                                         <xsl:call-template name="relatedPartNumName"/>
2083                                 </titleInfo>
2084                                 <name type="conference">
2085                                         <namePart>
2086                                                 <xsl:call-template name="specialSubfieldSelect">
2087                                                         <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
2088                                                         <xsl:with-param name="axis">t</xsl:with-param>
2089                                                         <xsl:with-param name="beforeCodes">gn</xsl:with-param>
2090                                                 </xsl:call-template>
2091                                         </namePart>
2092                                         <xsl:call-template name="role"/>
2093                                 </name>
2094                                 <xsl:call-template name="relatedForm"/>
2095                         </relatedItem>
2096                 </xsl:for-each>
2097                 <xsl:for-each select="marc:datafield[@tag='830']">
2098                         <relatedItem type="series">
2099                                 <titleInfo>
2100                                         <title>
2101                                                 <xsl:call-template name="chopPunctuation">
2102                                                         <xsl:with-param name="chopString">
2103                                                                 <xsl:call-template name="subfieldSelect">
2104                                                                         <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
2105                                                                 </xsl:call-template>
2106                                                         </xsl:with-param>
2107                                                 </xsl:call-template>
2108                                         </title>
2109                                         <xsl:call-template name="part"/>
2110                                 </titleInfo>
2111                                 <xsl:call-template name="relatedForm"/>
2112                         </relatedItem>
2113                 </xsl:for-each>
2114                 <xsl:for-each select="marc:datafield[@tag='856'][@ind2='2']/marc:subfield[@code='q']">
2115                         <relatedItem>
2116                                 <internetMediaType>
2117                                         <xsl:value-of select="."/>
2118                                 </internetMediaType>
2119                         </relatedItem>
2120                 </xsl:for-each>
2121                 <xsl:for-each select="marc:datafield[@tag='020']">
2122                         <xsl:call-template name="isInvalid">
2123                                 <xsl:with-param name="type">isbn</xsl:with-param>
2124                         </xsl:call-template>
2125                         <xsl:if test="marc:subfield[@code='a']">
2126                                 <identifier type="isbn">
2127                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2128                                 </identifier>
2129                         </xsl:if>
2130                 </xsl:for-each>
2131                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='0']">
2132                         <xsl:call-template name="isInvalid">
2133                                 <xsl:with-param name="type">isrc</xsl:with-param>
2134                         </xsl:call-template>
2135                         <xsl:if test="marc:subfield[@code='a']">
2136                                 <identifier type="isrc">
2137                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2138                                 </identifier>
2139                         </xsl:if>
2140                 </xsl:for-each>
2141                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='2']">
2142                         <xsl:call-template name="isInvalid">
2143                                 <xsl:with-param name="type">ismn</xsl:with-param>
2144                         </xsl:call-template>
2145                         <xsl:if test="marc:subfield[@code='a']">
2146                                 <identifier type="ismn">
2147                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2148                                 </identifier>
2149                         </xsl:if>
2150                 </xsl:for-each>
2151                 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='4']">
2152                         <xsl:call-template name="isInvalid">
2153                                 <xsl:with-param name="type">sici</xsl:with-param>
2154                         </xsl:call-template>
2155                         <identifier type="sici">
2156                                 <xsl:call-template name="subfieldSelect">
2157                                         <xsl:with-param name="codes">ab</xsl:with-param>
2158                                 </xsl:call-template>
2159                         </identifier>
2160                 </xsl:for-each>
2161                 <xsl:for-each select="marc:datafield[@tag='022']">
2162                         <xsl:if test="marc:subfield[@code='a']">
2163                                 <xsl:call-template name="isInvalid">
2164                                         <xsl:with-param name="type">issn</xsl:with-param>
2165                                 </xsl:call-template>
2166                                 <identifier type="issn">
2167                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2168                                 </identifier>
2169                         </xsl:if>
2170                         <xsl:if test="marc:subfield[@code='l']">
2171                                 <xsl:call-template name="isInvalid">
2172                                         <xsl:with-param name="type">issn-l</xsl:with-param>
2173                                 </xsl:call-template>
2174                                 <identifier type="issn-l">
2175                                         <xsl:value-of select="marc:subfield[@code='l']"/>
2176                                 </identifier>
2177                         </xsl:if>
2178                 </xsl:for-each>
2179
2180
2181
2182                 <xsl:for-each select="marc:datafield[@tag='010']">
2183                         <xsl:call-template name="isInvalid">
2184                                 <xsl:with-param name="type">lccn</xsl:with-param>
2185                         </xsl:call-template>
2186                         <identifier type="lccn">
2187                                 <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
2188                         </identifier>
2189                 </xsl:for-each>
2190                 <xsl:for-each select="marc:datafield[@tag='028']">
2191                         <identifier>
2192                                 <xsl:attribute name="type">
2193                                         <xsl:choose>
2194                                                 <xsl:when test="@ind1='0'">issue number</xsl:when>
2195                                                 <xsl:when test="@ind1='1'">matrix number</xsl:when>
2196                                                 <xsl:when test="@ind1='2'">music plate</xsl:when>
2197                                                 <xsl:when test="@ind1='3'">music publisher</xsl:when>
2198                                                 <xsl:when test="@ind1='4'">videorecording identifier</xsl:when>
2199                                         </xsl:choose>
2200                                 </xsl:attribute>
2201                                 <!--<xsl:call-template name="isInvalid"/>-->
2202                                 <!-- no $z in 028 -->
2203                                 <xsl:call-template name="subfieldSelect">
2204                                         <xsl:with-param name="codes">
2205                                                 <xsl:choose>
2206                                                         <xsl:when test="@ind1='0'">ba</xsl:when>
2207                                                         <xsl:otherwise>ab</xsl:otherwise>
2208                                                 </xsl:choose>
2209                                         </xsl:with-param>
2210                                 </xsl:call-template>
2211                         </identifier>
2212                 </xsl:for-each>
2213                 <xsl:for-each select="marc:datafield[@tag='037']">
2214                         <identifier type="stock number">
2215                                 <!--<xsl:call-template name="isInvalid"/>-->
2216                                 <!-- no $z in 037 -->
2217                                 <xsl:call-template name="subfieldSelect">
2218                                         <xsl:with-param name="codes">ab</xsl:with-param>
2219                                 </xsl:call-template>
2220                         </identifier>
2221                 </xsl:for-each>
2222                 <xsl:for-each select="marc:datafield[@tag='856'][marc:subfield[@code='u']]">
2223                         <identifier>
2224                                 <xsl:attribute name="type">
2225                                         <xsl:choose>
2226                                                 <xsl:when
2227                                                         test="starts-with(marc:subfield[@code='u'],'urn:doi') or starts-with(marc:subfield[@code='u'],'doi')"
2228                                                         >doi</xsl:when>
2229                                                 <xsl:when
2230                                                         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')"
2231                                                         >hdl</xsl:when>
2232                                                 <xsl:otherwise>uri</xsl:otherwise>
2233                                         </xsl:choose>
2234                                 </xsl:attribute>
2235                                 <xsl:choose>
2236                                         <xsl:when
2237                                                 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') ">
2238                                                 <xsl:value-of
2239                                                         select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"
2240                                                 />
2241                                         </xsl:when>
2242                                         <xsl:otherwise>
2243                                                 <xsl:value-of select="marc:subfield[@code='u']"/>
2244                                         </xsl:otherwise>
2245                                 </xsl:choose>
2246                         </identifier>
2247                         <xsl:if
2248                                 test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl')">
2249                                 <identifier type="hdl">
2250                                         <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
2251                                                 <xsl:attribute name="displayLabel">
2252                                                         <xsl:call-template name="subfieldSelect">
2253                                                                 <xsl:with-param name="codes">y3z</xsl:with-param>
2254                                                         </xsl:call-template>
2255                                                 </xsl:attribute>
2256                                         </xsl:if>
2257                                         <xsl:value-of
2258                                                 select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"
2259                                         />
2260                                 </identifier>
2261                         </xsl:if>
2262                 </xsl:for-each>
2263                 <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]">
2264                         <identifier type="upc">
2265                                 <xsl:call-template name="isInvalid"/>
2266                                 <xsl:value-of select="marc:subfield[@code='a']"/>
2267                         </identifier>
2268                 </xsl:for-each>
2269
2270                 <!-- 1/04 fix added $y -->
2271
2272                 <!-- 1.21  tmee-->
2273                 <xsl:for-each select="marc:datafield[@tag=856][@ind2=1][marc:subfield[@code='u']]">
2274                         <relatedItem type="otherVersion">
2275                                 <location>
2276                                         <url>
2277                                                 <xsl:if test="marc:subfield[@code='y' or @code='3']">
2278                                                         <xsl:attribute name="displayLabel">
2279                                                                 <xsl:call-template name="subfieldSelect">
2280                                                                         <xsl:with-param name="codes">y3</xsl:with-param>
2281                                                                 </xsl:call-template>
2282                                                         </xsl:attribute>
2283                                                 </xsl:if>
2284                                                 <xsl:if test="marc:subfield[@code='z' ]">
2285                                                         <xsl:attribute name="note">
2286                                                                 <xsl:call-template name="subfieldSelect">
2287                                                                         <xsl:with-param name="codes">z</xsl:with-param>
2288                                                                 </xsl:call-template>
2289                                                         </xsl:attribute>
2290                                                 </xsl:if>
2291                                                 <xsl:value-of select="marc:subfield[@code='u']"/>
2292                                         </url>
2293                                 </location>
2294                         </relatedItem>
2295                 </xsl:for-each>
2296                 <xsl:for-each select="marc:datafield[@tag=856][@ind2=2][marc:subfield[@code='u']]">
2297                         <relatedItem>
2298                                 <location>
2299                                         <url>
2300                                                 <xsl:if test="marc:subfield[@code='y' or @code='3']">
2301                                                         <xsl:attribute name="displayLabel">
2302                                                                 <xsl:call-template name="subfieldSelect">
2303                                                                         <xsl:with-param name="codes">y3</xsl:with-param>
2304                                                                 </xsl:call-template>
2305                                                         </xsl:attribute>
2306                                                 </xsl:if>
2307                                                 <xsl:if test="marc:subfield[@code='z' ]">
2308                                                         <xsl:attribute name="note">
2309                                                                 <xsl:call-template name="subfieldSelect">
2310                                                                         <xsl:with-param name="codes">z</xsl:with-param>
2311                                                                 </xsl:call-template>
2312                                                         </xsl:attribute>
2313                                                 </xsl:if>
2314                                                 <xsl:value-of select="marc:subfield[@code='u']"/>
2315                                         </url>
2316                                 </location>
2317                         </relatedItem>
2318                 </xsl:for-each>
2319
2320                 <!-- 3.2 change tmee 856z  -->
2321
2322                 <!-- 1.24  tmee  -->
2323                 <xsl:for-each select="marc:datafield[@tag=852]">
2324                         <location>
2325                                 <xsl:if test="marc:subfield[@code='a' or @code='b' or @code='e']">
2326                                         <physicalLocation>
2327                                                 <xsl:call-template name="subfieldSelect">
2328                                                         <xsl:with-param name="codes">abe</xsl:with-param>
2329                                                 </xsl:call-template>
2330                                         </physicalLocation>
2331                                 </xsl:if>
2332
2333                                 <xsl:if test="marc:subfield[@code='u']">
2334                                         <physicalLocation>
2335                                                 <xsl:call-template name="uri"/>
2336                                                 <xsl:call-template name="subfieldSelect">
2337                                                         <xsl:with-param name="codes">u</xsl:with-param>
2338                                                 </xsl:call-template>
2339                                         </physicalLocation>
2340                                 </xsl:if>
2341
2342                                 <xsl:if
2343                                         test="marc:subfield[@code='h' or @code='i' or @code='j' or @code='k' or @code='l' or @code='m' or @code='t']">
2344                                         <shelfLocation>
2345                                                 <xsl:call-template name="subfieldSelect">
2346                                                         <xsl:with-param name="codes">hijklmt</xsl:with-param>
2347                                                 </xsl:call-template>
2348                                         </shelfLocation>
2349                                 </xsl:if>
2350                         </location>
2351                 </xsl:for-each>
2352
2353                 <xsl:for-each select="marc:datafield[@tag=506]">
2354                         <accessCondition type="restrictionOnAccess">
2355                                 <xsl:call-template name="subfieldSelect">
2356                                         <xsl:with-param name="codes">abcd35</xsl:with-param>
2357                                 </xsl:call-template>
2358                         </accessCondition>
2359                 </xsl:for-each>
2360                 <xsl:for-each select="marc:datafield[@tag=540]">
2361                         <accessCondition type="useAndReproduction">
2362                                 <xsl:call-template name="subfieldSelect">
2363                                         <xsl:with-param name="codes">abcde35</xsl:with-param>
2364                                 </xsl:call-template>
2365                         </accessCondition>
2366                 </xsl:for-each>
2367
2368                 <recordInfo>
2369                         <!-- 1.25  tmee-->
2370
2371
2372                         <xsl:for-each select="marc:leader[substring($leader,19,1)='a']">
2373                                 <descriptionStandard>aacr2</descriptionStandard>
2374                         </xsl:for-each>
2375
2376                         <xsl:for-each select="marc:datafield[@tag=040]">
2377                                 <xsl:if test="marc:subfield[@code='e']">
2378                                         <descriptionStandard>
2379                                                 <xsl:value-of select="marc:subfield[@code='e']"/>
2380                                         </descriptionStandard>
2381                                 </xsl:if>
2382                                 <recordContentSource authority="marcorg">
2383                                         <xsl:value-of select="marc:subfield[@code='a']"/>
2384                                 </recordContentSource>
2385                         </xsl:for-each>
2386                         <xsl:for-each select="marc:controlfield[@tag=008]">
2387                                 <recordCreationDate encoding="marc">
2388                                         <xsl:value-of select="substring(.,1,6)"/>
2389                                 </recordCreationDate>
2390                         </xsl:for-each>
2391
2392                         <xsl:for-each select="marc:controlfield[@tag=005]">
2393                                 <recordChangeDate encoding="iso8601">
2394                                         <xsl:value-of select="."/>
2395                                 </recordChangeDate>
2396                         </xsl:for-each>
2397                         <xsl:for-each select="marc:controlfield[@tag=001]">
2398                                 <recordIdentifier>
2399                                         <xsl:if test="../marc:controlfield[@tag=003]">
2400                                                 <xsl:attribute name="source">
2401                                                         <xsl:value-of select="../marc:controlfield[@tag=003]"/>
2402                                                 </xsl:attribute>
2403                                         </xsl:if>
2404                                         <xsl:value-of select="."/>
2405                                 </recordIdentifier>
2406                         </xsl:for-each>
2407                         <xsl:for-each select="marc:datafield[@tag=040]/marc:subfield[@code='b']">
2408                                 <languageOfCataloging>
2409                                         <languageTerm authority="iso639-2b" type="code">
2410                                                 <xsl:value-of select="."/>
2411                                         </languageTerm>
2412                                 </languageOfCataloging>
2413                         </xsl:for-each>
2414                 </recordInfo>
2415         </xsl:template>
2416         <xsl:template name="displayForm">
2417                 <xsl:for-each select="marc:subfield[@code='c']">
2418                         <displayForm>
2419                                 <xsl:value-of select="."/>
2420                         </displayForm>
2421                 </xsl:for-each>
2422         </xsl:template>
2423         <xsl:template name="affiliation">
2424                 <xsl:for-each select="marc:subfield[@code='u']">
2425                         <affiliation>
2426                                 <xsl:value-of select="."/>
2427                         </affiliation>
2428                 </xsl:for-each>
2429         </xsl:template>
2430         <xsl:template name="uri">
2431                 <xsl:for-each select="marc:subfield[@code='u']|marc:subfield[@code='0']">
2432                         <xsl:attribute name="xlink:href">
2433                                 <xsl:value-of select="."/>
2434                         </xsl:attribute>
2435                 </xsl:for-each>
2436         </xsl:template>
2437         <xsl:template name="role">
2438                 <xsl:for-each select="marc:subfield[@code='e']">
2439                         <role>
2440                                 <roleTerm type="text">
2441                                         <xsl:value-of select="."/>
2442                                 </roleTerm>
2443                         </role>
2444                 </xsl:for-each>
2445                 <xsl:for-each select="marc:subfield[@code='4']">
2446                         <role>
2447                                 <roleTerm authority="marcrelator" type="code">
2448                                         <xsl:value-of select="."/>
2449                                 </roleTerm>
2450                         </role>
2451                 </xsl:for-each>
2452         </xsl:template>
2453         <xsl:template name="part">
2454                 <xsl:variable name="partNumber">
2455                         <xsl:call-template name="specialSubfieldSelect">
2456                                 <xsl:with-param name="axis">n</xsl:with-param>
2457                                 <xsl:with-param name="anyCodes">n</xsl:with-param>
2458                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2459                         </xsl:call-template>
2460                 </xsl:variable>
2461                 <xsl:variable name="partName">
2462                         <xsl:call-template name="specialSubfieldSelect">
2463                                 <xsl:with-param name="axis">p</xsl:with-param>
2464                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
2465                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2466                         </xsl:call-template>
2467                 </xsl:variable>
2468                 <xsl:if test="string-length(normalize-space($partNumber))">
2469                         <partNumber>
2470                                 <xsl:call-template name="chopPunctuation">
2471                                         <xsl:with-param name="chopString" select="$partNumber"/>
2472                                 </xsl:call-template>
2473                         </partNumber>
2474                 </xsl:if>
2475                 <xsl:if test="string-length(normalize-space($partName))">
2476                         <partName>
2477                                 <xsl:call-template name="chopPunctuation">
2478                                         <xsl:with-param name="chopString" select="$partName"/>
2479                                 </xsl:call-template>
2480                         </partName>
2481                 </xsl:if>
2482         </xsl:template>
2483         <xsl:template name="relatedPart">
2484                 <xsl:if test="@tag=773">
2485                         <xsl:for-each select="marc:subfield[@code='g']">
2486                                 <part>
2487                                         <text>
2488                                                 <xsl:value-of select="."/>
2489                                         </text>
2490                                 </part>
2491                         </xsl:for-each>
2492                         <xsl:for-each select="marc:subfield[@code='q']">
2493                                 <part>
2494                                         <xsl:call-template name="parsePart"/>
2495                                 </part>
2496                         </xsl:for-each>
2497                 </xsl:if>
2498         </xsl:template>
2499         <xsl:template name="relatedPartNumName">
2500                 <xsl:variable name="partNumber">
2501                         <xsl:call-template name="specialSubfieldSelect">
2502                                 <xsl:with-param name="axis">g</xsl:with-param>
2503                                 <xsl:with-param name="anyCodes">g</xsl:with-param>
2504                                 <xsl:with-param name="afterCodes">pst</xsl:with-param>
2505                         </xsl:call-template>
2506                 </xsl:variable>
2507                 <xsl:variable name="partName">
2508                         <xsl:call-template name="specialSubfieldSelect">
2509                                 <xsl:with-param name="axis">p</xsl:with-param>
2510                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
2511                                 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2512                         </xsl:call-template>
2513                 </xsl:variable>
2514                 <xsl:if test="string-length(normalize-space($partNumber))">
2515                         <partNumber>
2516                                 <xsl:value-of select="$partNumber"/>
2517                         </partNumber>
2518                 </xsl:if>
2519                 <xsl:if test="string-length(normalize-space($partName))">
2520                         <partName>
2521                                 <xsl:value-of select="$partName"/>
2522                         </partName>
2523                 </xsl:if>
2524         </xsl:template>
2525         <xsl:template name="relatedName">
2526                 <xsl:for-each select="marc:subfield[@code='a']">
2527                         <name>
2528                                 <namePart>
2529                                         <xsl:value-of select="."/>
2530                                 </namePart>
2531                         </name>
2532                 </xsl:for-each>
2533         </xsl:template>
2534         <xsl:template name="relatedForm">
2535                 <xsl:for-each select="marc:subfield[@code='h']">
2536                         <physicalDescription>
2537                                 <form>
2538                                         <xsl:value-of select="."/>
2539                                 </form>
2540                         </physicalDescription>
2541                 </xsl:for-each>
2542         </xsl:template>
2543         <xsl:template name="relatedExtent">
2544                 <xsl:for-each select="marc:subfield[@code='h']">
2545                         <physicalDescription>
2546                                 <extent>
2547                                         <xsl:value-of select="."/>
2548                                 </extent>
2549                         </physicalDescription>
2550                 </xsl:for-each>
2551         </xsl:template>
2552         <xsl:template name="relatedNote">
2553                 <xsl:for-each select="marc:subfield[@code='n']">
2554                         <note>
2555                                 <xsl:value-of select="."/>
2556                         </note>
2557                 </xsl:for-each>
2558         </xsl:template>
2559         <xsl:template name="relatedSubject">
2560                 <xsl:for-each select="marc:subfield[@code='j']">
2561                         <subject>
2562                                 <temporal encoding="iso8601">
2563                                         <xsl:call-template name="chopPunctuation">
2564                                                 <xsl:with-param name="chopString" select="."/>
2565                                         </xsl:call-template>
2566                                 </temporal>
2567                         </subject>
2568                 </xsl:for-each>
2569         </xsl:template>
2570         <xsl:template name="relatedIdentifierISSN">
2571                 <xsl:for-each select="marc:subfield[@code='x']">
2572                         <identifier type="issn">
2573                                 <xsl:value-of select="."/>
2574                         </identifier>
2575                 </xsl:for-each>
2576         </xsl:template>
2577         <xsl:template name="relatedIdentifierLocal">
2578                 <xsl:for-each select="marc:subfield[@code='w']">
2579                         <identifier type="local">
2580                                 <xsl:value-of select="."/>
2581                         </identifier>
2582                 </xsl:for-each>
2583         </xsl:template>
2584         <xsl:template name="relatedIdentifier">
2585                 <xsl:for-each select="marc:subfield[@code='o']">
2586                         <identifier>
2587                                 <xsl:value-of select="."/>
2588                         </identifier>
2589                 </xsl:for-each>
2590         </xsl:template>
2591         <xsl:template name="relatedItem76X-78X">
2592                 <xsl:call-template name="displayLabel"/>
2593                 <xsl:call-template name="relatedTitle76X-78X"/>
2594                 <xsl:call-template name="relatedName"/>
2595                 <xsl:call-template name="relatedOriginInfo"/>
2596                 <xsl:call-template name="relatedLanguage"/>
2597                 <xsl:call-template name="relatedExtent"/>
2598                 <xsl:call-template name="relatedNote"/>
2599                 <xsl:call-template name="relatedSubject"/>
2600                 <xsl:call-template name="relatedIdentifier"/>
2601                 <xsl:call-template name="relatedIdentifierISSN"/>
2602                 <xsl:call-template name="relatedIdentifierLocal"/>
2603                 <xsl:call-template name="relatedPart"/>
2604         </xsl:template>
2605         <xsl:template name="subjectGeographicZ">
2606                 <geographic>
2607                         <xsl:call-template name="chopPunctuation">
2608                                 <xsl:with-param name="chopString" select="."/>
2609                         </xsl:call-template>
2610                 </geographic>
2611         </xsl:template>
2612         <xsl:template name="subjectTemporalY">
2613                 <temporal>
2614                         <xsl:call-template name="chopPunctuation">
2615                                 <xsl:with-param name="chopString" select="."/>
2616                         </xsl:call-template>
2617                 </temporal>
2618         </xsl:template>
2619         <xsl:template name="subjectTopic">
2620                 <topic>
2621                         <xsl:call-template name="chopPunctuation">
2622                                 <xsl:with-param name="chopString" select="."/>
2623                         </xsl:call-template>
2624                 </topic>
2625         </xsl:template>
2626         <!-- 3.2 change tmee 6xx $v genre -->
2627         <xsl:template name="subjectGenre">
2628                 <genre>
2629                         <xsl:call-template name="chopPunctuation">
2630                                 <xsl:with-param name="chopString" select="."/>
2631                         </xsl:call-template>
2632                 </genre>
2633         </xsl:template>
2634
2635         <xsl:template name="nameABCDN">
2636                 <xsl:for-each select="marc:subfield[@code='a']">
2637                         <namePart>
2638                                 <xsl:call-template name="chopPunctuation">
2639                                         <xsl:with-param name="chopString" select="."/>
2640                                 </xsl:call-template>
2641                         </namePart>
2642                 </xsl:for-each>
2643                 <xsl:for-each select="marc:subfield[@code='b']">
2644                         <namePart>
2645                                 <xsl:value-of select="."/>
2646                         </namePart>
2647                 </xsl:for-each>
2648                 <xsl:if
2649                         test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
2650                         <namePart>
2651                                 <xsl:call-template name="subfieldSelect">
2652                                         <xsl:with-param name="codes">cdn</xsl:with-param>
2653                                 </xsl:call-template>
2654                         </namePart>
2655                 </xsl:if>
2656         </xsl:template>
2657         <xsl:template name="nameABCDQ">
2658                 <namePart>
2659                         <xsl:call-template name="chopPunctuation">
2660                                 <xsl:with-param name="chopString">
2661                                         <xsl:call-template name="subfieldSelect">
2662                                                 <xsl:with-param name="codes">aq</xsl:with-param>
2663                                         </xsl:call-template>
2664                                 </xsl:with-param>
2665                                 <xsl:with-param name="punctuation">
2666                                         <xsl:text>:,;/ </xsl:text>
2667                                 </xsl:with-param>
2668                         </xsl:call-template>
2669                 </namePart>
2670                 <xsl:call-template name="termsOfAddress"/>
2671                 <xsl:call-template name="nameDate"/>
2672         </xsl:template>
2673         <xsl:template name="nameACDEQ">
2674                 <namePart>
2675                         <xsl:call-template name="subfieldSelect">
2676                                 <xsl:with-param name="codes">acdeq</xsl:with-param>
2677                         </xsl:call-template>
2678                 </namePart>
2679         </xsl:template>
2680         <xsl:template name="constituentOrRelatedType">
2681                 <xsl:if test="@ind2=2">
2682                         <xsl:attribute name="type">constituent</xsl:attribute>
2683                 </xsl:if>
2684         </xsl:template>
2685         <xsl:template name="relatedTitle">
2686                 <xsl:for-each select="marc:subfield[@code='t']">
2687                         <titleInfo>
2688                                 <title>
2689                                         <xsl:call-template name="chopPunctuation">
2690                                                 <xsl:with-param name="chopString">
2691                                                         <xsl:value-of select="."/>
2692                                                 </xsl:with-param>
2693                                         </xsl:call-template>
2694                                 </title>
2695                         </titleInfo>
2696                 </xsl:for-each>
2697         </xsl:template>
2698         <xsl:template name="relatedTitle76X-78X">
2699                 <xsl:for-each select="marc:subfield[@code='t']">
2700                         <titleInfo>
2701                                 <title>
2702                                         <xsl:call-template name="chopPunctuation">
2703                                                 <xsl:with-param name="chopString">
2704                                                         <xsl:value-of select="."/>
2705                                                 </xsl:with-param>
2706                                         </xsl:call-template>
2707                                 </title>
2708                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2709                                         <xsl:call-template name="relatedPartNumName"/>
2710                                 </xsl:if>
2711                         </titleInfo>
2712                 </xsl:for-each>
2713                 <xsl:for-each select="marc:subfield[@code='p']">
2714                         <titleInfo type="abbreviated">
2715                                 <title>
2716                                         <xsl:call-template name="chopPunctuation">
2717                                                 <xsl:with-param name="chopString">
2718                                                         <xsl:value-of select="."/>
2719                                                 </xsl:with-param>
2720                                         </xsl:call-template>
2721                                 </title>
2722                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2723                                         <xsl:call-template name="relatedPartNumName"/>
2724                                 </xsl:if>
2725                         </titleInfo>
2726                 </xsl:for-each>
2727                 <xsl:for-each select="marc:subfield[@code='s']">
2728                         <titleInfo type="uniform">
2729                                 <title>
2730                                         <xsl:call-template name="chopPunctuation">
2731                                                 <xsl:with-param name="chopString">
2732                                                         <xsl:value-of select="."/>
2733                                                 </xsl:with-param>
2734                                         </xsl:call-template>
2735                                 </title>
2736                                 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2737                                         <xsl:call-template name="relatedPartNumName"/>
2738                                 </xsl:if>
2739                         </titleInfo>
2740                 </xsl:for-each>
2741         </xsl:template>
2742         <xsl:template name="relatedOriginInfo">
2743                 <xsl:if test="marc:subfield[@code='b' or @code='d'] or marc:subfield[@code='f']">
2744                         <originInfo>
2745                                 <xsl:if test="@tag=775">
2746                                         <xsl:for-each select="marc:subfield[@code='f']">
2747                                                 <place>
2748                                                         <placeTerm>
2749                                                                 <xsl:attribute name="type">code</xsl:attribute>
2750                                                                 <xsl:attribute name="authority">marcgac</xsl:attribute>
2751                                                                 <xsl:value-of select="."/>
2752                                                         </placeTerm>
2753                                                 </place>
2754                                         </xsl:for-each>
2755                                 </xsl:if>
2756                                 <xsl:for-each select="marc:subfield[@code='d']">
2757                                         <publisher>
2758                                                 <xsl:value-of select="."/>
2759                                         </publisher>
2760                                 </xsl:for-each>
2761                                 <xsl:for-each select="marc:subfield[@code='b']">
2762                                         <edition>
2763                                                 <xsl:value-of select="."/>
2764                                         </edition>
2765                                 </xsl:for-each>
2766                         </originInfo>
2767                 </xsl:if>
2768         </xsl:template>
2769         <xsl:template name="relatedLanguage">
2770                 <xsl:for-each select="marc:subfield[@code='e']">
2771                         <xsl:call-template name="getLanguage">
2772                                 <xsl:with-param name="langString">
2773                                         <xsl:value-of select="."/>
2774                                 </xsl:with-param>
2775                         </xsl:call-template>
2776                 </xsl:for-each>
2777         </xsl:template>
2778         <xsl:template name="nameDate">
2779                 <xsl:for-each select="marc:subfield[@code='d']">
2780                         <namePart type="date">
2781                                 <xsl:call-template name="chopPunctuation">
2782                                         <xsl:with-param name="chopString" select="."/>
2783                                 </xsl:call-template>
2784                         </namePart>
2785                 </xsl:for-each>
2786         </xsl:template>
2787         <xsl:template name="subjectAuthority">
2788                 <xsl:if test="@ind2!=4">
2789                         <xsl:if test="@ind2!=' '">
2790                                 <xsl:if test="@ind2!=8">
2791                                         <xsl:if test="@ind2!=9">
2792                                                 <xsl:attribute name="authority">
2793                                                         <xsl:choose>
2794                                                                 <xsl:when test="@ind2=0">lcsh</xsl:when>
2795                                                                 <xsl:when test="@ind2=1">lcshac</xsl:when>
2796                                                                 <xsl:when test="@ind2=2">mesh</xsl:when>
2797                                                                 <!-- 1/04 fix -->
2798                                                                 <xsl:when test="@ind2=3">nal</xsl:when>
2799                                                                 <xsl:when test="@ind2=5">csh</xsl:when>
2800                                                                 <xsl:when test="@ind2=6">rvm</xsl:when>
2801                                                                 <xsl:when test="@ind2=7">
2802                                                                         <xsl:value-of select="marc:subfield[@code='2']"/>
2803                                                                 </xsl:when>
2804                                                         </xsl:choose>
2805                                                 </xsl:attribute>
2806                                         </xsl:if>
2807                                 </xsl:if>
2808                         </xsl:if>
2809                 </xsl:if>
2810         </xsl:template>
2811         <xsl:template name="subjectAnyOrder">
2812                 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
2813                         <xsl:choose>
2814                                 <xsl:when test="@code='v'">
2815                                         <xsl:call-template name="subjectGenre"/>
2816                                 </xsl:when>
2817                                 <xsl:when test="@code='x'">
2818                                         <xsl:call-template name="subjectTopic"/>
2819                                 </xsl:when>
2820                                 <xsl:when test="@code='y'">
2821                                         <xsl:call-template name="subjectTemporalY"/>
2822                                 </xsl:when>
2823                                 <xsl:when test="@code='z'">
2824                                         <xsl:call-template name="subjectGeographicZ"/>
2825                                 </xsl:when>
2826                         </xsl:choose>
2827                 </xsl:for-each>
2828         </xsl:template>
2829         <xsl:template name="specialSubfieldSelect">
2830                 <xsl:param name="anyCodes"/>
2831                 <xsl:param name="axis"/>
2832                 <xsl:param name="beforeCodes"/>
2833                 <xsl:param name="afterCodes"/>
2834                 <xsl:variable name="str">
2835                         <xsl:for-each select="marc:subfield">
2836                                 <xsl:if
2837                                         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])">
2838                                         <xsl:value-of select="text()"/>
2839                                         <xsl:text> </xsl:text>
2840                                 </xsl:if>
2841                         </xsl:for-each>
2842                 </xsl:variable>
2843                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
2844         </xsl:template>
2845
2846         <!-- 3.2 change tmee 6xx $v genre -->
2847         <xsl:template match="marc:datafield[@tag=600]">
2848                 <subject>
2849                         <xsl:call-template name="subjectAuthority"/>
2850                         <name type="personal">
2851                                 <xsl:call-template name="termsOfAddress"/>
2852                                 <namePart>
2853                                         <xsl:call-template name="chopPunctuation">
2854                                                 <xsl:with-param name="chopString">
2855                                                         <xsl:call-template name="subfieldSelect">
2856                                                                 <xsl:with-param name="codes">aq</xsl:with-param>
2857                                                         </xsl:call-template>
2858                                                 </xsl:with-param>
2859                                         </xsl:call-template>
2860                                 </namePart>
2861                                 <xsl:call-template name="nameDate"/>
2862                                 <xsl:call-template name="affiliation"/>
2863                                 <xsl:call-template name="role"/>
2864                         </name>
2865                         <xsl:call-template name="subjectAnyOrder"/>
2866                 </subject>
2867         </xsl:template>
2868         <xsl:template match="marc:datafield[@tag=610]">
2869                 <subject>
2870                         <xsl:call-template name="subjectAuthority"/>
2871                         <name type="corporate">
2872                                 <xsl:for-each select="marc:subfield[@code='a']">
2873                                         <namePart>
2874                                                 <xsl:value-of select="."/>
2875                                         </namePart>
2876                                 </xsl:for-each>
2877                                 <xsl:for-each select="marc:subfield[@code='b']">
2878                                         <namePart>
2879                                                 <xsl:value-of select="."/>
2880                                         </namePart>
2881                                 </xsl:for-each>
2882                                 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
2883                                         <namePart>
2884                                                 <xsl:call-template name="subfieldSelect">
2885                                                         <xsl:with-param name="codes">cdnp</xsl:with-param>
2886                                                 </xsl:call-template>
2887                                         </namePart>
2888                                 </xsl:if>
2889                                 <xsl:call-template name="role"/>
2890                         </name>
2891                         <xsl:call-template name="subjectAnyOrder"/>
2892                 </subject>
2893         </xsl:template>
2894         <xsl:template match="marc:datafield[@tag=611]">
2895                 <subject>
2896                         <xsl:call-template name="subjectAuthority"/>
2897                         <name type="conference">
2898                                 <namePart>
2899                                         <xsl:call-template name="subfieldSelect">
2900                                                 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
2901                                         </xsl:call-template>
2902                                 </namePart>
2903                                 <xsl:for-each select="marc:subfield[@code='4']">
2904                                         <role>
2905                                                 <roleTerm authority="marcrelator" type="code">
2906                                                         <xsl:value-of select="."/>
2907                                                 </roleTerm>
2908                                         </role>
2909                                 </xsl:for-each>
2910                         </name>
2911                         <xsl:call-template name="subjectAnyOrder"/>
2912                 </subject>
2913         </xsl:template>
2914         <xsl:template match="marc:datafield[@tag=630]">
2915                 <subject>
2916                         <xsl:call-template name="subjectAuthority"/>
2917                         <titleInfo>
2918                                 <title>
2919                                         <xsl:call-template name="chopPunctuation">
2920                                                 <xsl:with-param name="chopString">
2921                                                         <xsl:call-template name="subfieldSelect">
2922                                                                 <xsl:with-param name="codes">adfhklor</xsl:with-param>
2923                                                         </xsl:call-template>
2924                                                 </xsl:with-param>
2925                                         </xsl:call-template>
2926                                 </title>
2927                                 <xsl:call-template name="part"/>
2928                         </titleInfo>
2929                         <xsl:call-template name="subjectAnyOrder"/>
2930                 </subject>
2931         </xsl:template>
2932         <xsl:template match="marc:datafield[@tag=650]">
2933                 <subject>
2934                         <xsl:call-template name="subjectAuthority"/>
2935                         <topic>
2936                                 <xsl:call-template name="chopPunctuation">
2937                                         <xsl:with-param name="chopString">
2938                                                 <xsl:call-template name="subfieldSelect">
2939                                                         <xsl:with-param name="codes">abcd</xsl:with-param>
2940                                                 </xsl:call-template>
2941                                         </xsl:with-param>
2942                                 </xsl:call-template>
2943                         </topic>
2944                         <xsl:call-template name="subjectAnyOrder"/>
2945                 </subject>
2946         </xsl:template>
2947         <xsl:template match="marc:datafield[@tag=651]">
2948                 <subject>
2949                         <xsl:call-template name="subjectAuthority"/>
2950                         <xsl:for-each select="marc:subfield[@code='a']">
2951                                 <geographic>
2952                                         <xsl:call-template name="chopPunctuation">
2953                                                 <xsl:with-param name="chopString" select="."/>
2954                                         </xsl:call-template>
2955                                 </geographic>
2956                         </xsl:for-each>
2957                         <xsl:call-template name="subjectAnyOrder"/>
2958                 </subject>
2959         </xsl:template>
2960         <xsl:template match="marc:datafield[@tag=653]">
2961                 <subject>
2962                         <xsl:for-each select="marc:subfield[@code='a']">
2963                                 <topic>
2964                                         <xsl:value-of select="."/>
2965                                 </topic>
2966                         </xsl:for-each>
2967                 </subject>
2968         </xsl:template>
2969         <xsl:template match="marc:datafield[@tag=656]">
2970                 <subject>
2971                         <xsl:if test="marc:subfield[@code=2]">
2972                                 <xsl:attribute name="authority">
2973                                         <xsl:value-of select="marc:subfield[@code=2]"/>
2974                                 </xsl:attribute>
2975                         </xsl:if>
2976                         <occupation>
2977                                 <xsl:call-template name="chopPunctuation">
2978                                         <xsl:with-param name="chopString">
2979                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
2980                                         </xsl:with-param>
2981                                 </xsl:call-template>
2982                         </occupation>
2983                 </subject>
2984         </xsl:template>
2985         <xsl:template name="termsOfAddress">
2986                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
2987                         <namePart type="termsOfAddress">
2988                                 <xsl:call-template name="chopPunctuation">
2989                                         <xsl:with-param name="chopString">
2990                                                 <xsl:call-template name="subfieldSelect">
2991                                                         <xsl:with-param name="codes">bc</xsl:with-param>
2992                                                 </xsl:call-template>
2993                                         </xsl:with-param>
2994                                 </xsl:call-template>
2995                         </namePart>
2996                 </xsl:if>
2997         </xsl:template>
2998         <xsl:template name="displayLabel">
2999                 <xsl:if test="marc:subfield[@code='i']">
3000                         <xsl:attribute name="displayLabel">
3001                                 <xsl:value-of select="marc:subfield[@code='i']"/>
3002                         </xsl:attribute>
3003                 </xsl:if>
3004                 <xsl:if test="marc:subfield[@code='3']">
3005                         <xsl:attribute name="displayLabel">
3006                                 <xsl:value-of select="marc:subfield[@code='3']"/>
3007                         </xsl:attribute>
3008                 </xsl:if>
3009         </xsl:template>
3010         <xsl:template name="isInvalid">
3011                 <xsl:param name="type"/>
3012                 <xsl:if
3013                         test="marc:subfield[@code='z'] or marc:subfield[@code='y']  or marc:subfield[@code='m']">
3014                         <identifier>
3015                                 <xsl:attribute name="type">
3016                                         <xsl:value-of select="$type"/>
3017                                 </xsl:attribute>
3018                                 <xsl:attribute name="invalid">
3019                                         <xsl:text>yes</xsl:text>
3020                                 </xsl:attribute>
3021                                 <xsl:if test="marc:subfield[@code='z']">
3022                                         <xsl:value-of select="marc:subfield[@code='z']"/>
3023                                 </xsl:if>
3024                                 <xsl:if test="marc:subfield[@code='y']">
3025                                         <xsl:value-of select="marc:subfield[@code='y']"/>
3026                                 </xsl:if>
3027                                 <xsl:if test="marc:subfield[@code='m']">
3028                                         <xsl:value-of select="marc:subfield[@code='m']"/>
3029                                 </xsl:if>
3030                         </identifier>
3031                 </xsl:if>
3032         </xsl:template>
3033         <xsl:template name="subtitle">
3034                 <xsl:if test="marc:subfield[@code='b']">
3035                         <subTitle>
3036                                 <xsl:call-template name="chopPunctuation">
3037                                         <xsl:with-param name="chopString">
3038                                                 <xsl:value-of select="marc:subfield[@code='b']"/>
3039                                                 <!--<xsl:call-template name="subfieldSelect">
3040                                                         <xsl:with-param name="codes">b</xsl:with-param>                                                                 
3041                                                 </xsl:call-template>-->
3042                                         </xsl:with-param>
3043                                 </xsl:call-template>
3044                         </subTitle>
3045                 </xsl:if>
3046         </xsl:template>
3047         <xsl:template name="script">
3048                 <xsl:param name="scriptCode"/>
3049                 <xsl:attribute name="script">
3050                         <xsl:choose>
3051                                 <xsl:when test="$scriptCode='(3'">Arabic</xsl:when>
3052                                 <xsl:when test="$scriptCode='(B'">Latin</xsl:when>
3053                                 <xsl:when test="$scriptCode='$1'">Chinese, Japanese, Korean</xsl:when>
3054                                 <xsl:when test="$scriptCode='(N'">Cyrillic</xsl:when>
3055                                 <xsl:when test="$scriptCode='(2'">Hebrew</xsl:when>
3056                                 <xsl:when test="$scriptCode='(S'">Greek</xsl:when>
3057                         </xsl:choose>
3058                 </xsl:attribute>
3059         </xsl:template>
3060         <xsl:template name="parsePart">
3061                 <!-- assumes 773$q= 1:2:3<4
3062                      with up to 3 levels and one optional start page
3063                 -->
3064                 <xsl:variable name="level1">
3065                         <xsl:choose>
3066                                 <xsl:when test="contains(text(),':')">
3067                                         <!-- 1:2 -->
3068                                         <xsl:value-of select="substring-before(text(),':')"/>
3069                                 </xsl:when>
3070                                 <xsl:when test="not(contains(text(),':'))">
3071                                         <!-- 1 or 1<3 -->
3072                                         <xsl:if test="contains(text(),'&lt;')">
3073                                                 <!-- 1<3 -->
3074                                                 <xsl:value-of select="substring-before(text(),'&lt;')"/>
3075                                         </xsl:if>
3076                                         <xsl:if test="not(contains(text(),'&lt;'))">
3077                                                 <!-- 1 -->
3078                                                 <xsl:value-of select="text()"/>
3079                                         </xsl:if>
3080                                 </xsl:when>
3081                         </xsl:choose>
3082                 </xsl:variable>
3083                 <xsl:variable name="sici2">
3084                         <xsl:choose>
3085                                 <xsl:when test="starts-with(substring-after(text(),$level1),':')">
3086                                         <xsl:value-of select="substring(substring-after(text(),$level1),2)"/>
3087                                 </xsl:when>
3088                                 <xsl:otherwise>
3089                                         <xsl:value-of select="substring-after(text(),$level1)"/>
3090                                 </xsl:otherwise>
3091                         </xsl:choose>
3092                 </xsl:variable>
3093                 <xsl:variable name="level2">
3094                         <xsl:choose>
3095                                 <xsl:when test="contains($sici2,':')">
3096                                         <!--  2:3<4  -->
3097                                         <xsl:value-of select="substring-before($sici2,':')"/>
3098                                 </xsl:when>
3099                                 <xsl:when test="contains($sici2,'&lt;')">
3100                                         <!-- 1: 2<4 -->
3101                                         <xsl:value-of select="substring-before($sici2,'&lt;')"/>
3102                                 </xsl:when>
3103                                 <xsl:otherwise>
3104                                         <xsl:value-of select="$sici2"/>
3105                                         <!-- 1:2 -->
3106                                 </xsl:otherwise>
3107                         </xsl:choose>
3108                 </xsl:variable>
3109                 <xsl:variable name="sici3">
3110                         <xsl:choose>
3111                                 <xsl:when test="starts-with(substring-after($sici2,$level2),':')">
3112                                         <xsl:value-of select="substring(substring-after($sici2,$level2),2)"/>
3113                                 </xsl:when>
3114                                 <xsl:otherwise>
3115                                         <xsl:value-of select="substring-after($sici2,$level2)"/>
3116                                 </xsl:otherwise>
3117                         </xsl:choose>
3118                 </xsl:variable>
3119                 <xsl:variable name="level3">
3120                         <xsl:choose>
3121                                 <xsl:when test="contains($sici3,'&lt;')">
3122                                         <!-- 2<4 -->
3123                                         <xsl:value-of select="substring-before($sici3,'&lt;')"/>
3124                                 </xsl:when>
3125                                 <xsl:otherwise>
3126                                         <xsl:value-of select="$sici3"/>
3127                                         <!-- 3 -->
3128                                 </xsl:otherwise>
3129                         </xsl:choose>
3130                 </xsl:variable>
3131                 <xsl:variable name="page">
3132                         <xsl:if test="contains(text(),'&lt;')">
3133                                 <xsl:value-of select="substring-after(text(),'&lt;')"/>
3134                         </xsl:if>
3135                 </xsl:variable>
3136                 <xsl:if test="$level1">
3137                         <detail level="1">
3138                                 <number>
3139                                         <xsl:value-of select="$level1"/>
3140                                 </number>
3141                         </detail>
3142                 </xsl:if>
3143                 <xsl:if test="$level2">
3144                         <detail level="2">
3145                                 <number>
3146                                         <xsl:value-of select="$level2"/>
3147                                 </number>
3148                         </detail>
3149                 </xsl:if>
3150                 <xsl:if test="$level3">
3151                         <detail level="3">
3152                                 <number>
3153                                         <xsl:value-of select="$level3"/>
3154                                 </number>
3155                         </detail>
3156                 </xsl:if>
3157                 <xsl:if test="$page">
3158                         <extent unit="page">
3159                                 <start>
3160                                         <xsl:value-of select="$page"/>
3161                                 </start>
3162                         </extent>
3163                 </xsl:if>
3164         </xsl:template>
3165         <xsl:template name="getLanguage">
3166                 <xsl:param name="langString"/>
3167                 <xsl:param name="controlField008-35-37"/>
3168                 <xsl:variable name="length" select="string-length($langString)"/>
3169                 <xsl:choose>
3170                         <xsl:when test="$length=0"/>
3171                         <xsl:when test="$controlField008-35-37=substring($langString,1,3)">
3172                                 <xsl:call-template name="getLanguage">
3173                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
3174                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
3175                                 </xsl:call-template>
3176                         </xsl:when>
3177                         <xsl:otherwise>
3178                                 <language>
3179                                         <languageTerm authority="iso639-2b" type="code">
3180                                                 <xsl:value-of select="substring($langString,1,3)"/>
3181                                         </languageTerm>
3182                                 </language>
3183                                 <xsl:call-template name="getLanguage">
3184                                         <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
3185                                         <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
3186                                 </xsl:call-template>
3187                         </xsl:otherwise>
3188                 </xsl:choose>
3189         </xsl:template>
3190         <xsl:template name="isoLanguage">
3191                 <xsl:param name="currentLanguage"/>
3192                 <xsl:param name="usedLanguages"/>
3193                 <xsl:param name="remainingLanguages"/>
3194                 <xsl:choose>
3195                         <xsl:when test="string-length($currentLanguage)=0"/>
3196                         <xsl:when test="not(contains($usedLanguages, $currentLanguage))">
3197                                 <language>
3198                                         <xsl:if test="@code!='a'">
3199                                                 <xsl:attribute name="objectPart">
3200                                                         <xsl:choose>
3201                                                                 <xsl:when test="@code='b'">summary or subtitle</xsl:when>
3202                                                                 <xsl:when test="@code='d'">sung or spoken text</xsl:when>
3203                                                                 <xsl:when test="@code='e'">libretto</xsl:when>
3204                                                                 <xsl:when test="@code='f'">table of contents</xsl:when>
3205                                                                 <xsl:when test="@code='g'">accompanying material</xsl:when>
3206                                                                 <xsl:when test="@code='h'">translation</xsl:when>
3207                                                         </xsl:choose>
3208                                                 </xsl:attribute>
3209                                         </xsl:if>
3210                                         <languageTerm authority="iso639-2b" type="code">
3211                                                 <xsl:value-of select="$currentLanguage"/>
3212                                         </languageTerm>
3213                                 </language>
3214                                 <xsl:call-template name="isoLanguage">
3215                                         <xsl:with-param name="currentLanguage">
3216                                                 <xsl:value-of select="substring($remainingLanguages,1,3)"/>
3217                                         </xsl:with-param>
3218                                         <xsl:with-param name="usedLanguages">
3219                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
3220                                         </xsl:with-param>
3221                                         <xsl:with-param name="remainingLanguages">
3222                                                 <xsl:value-of
3223                                                         select="substring($remainingLanguages,4,string-length($remainingLanguages))"
3224                                                 />
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)"/>
3232                                         </xsl:with-param>
3233                                         <xsl:with-param name="usedLanguages">
3234                                                 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
3235                                         </xsl:with-param>
3236                                         <xsl:with-param name="remainingLanguages">
3237                                                 <xsl:value-of
3238                                                         select="substring($remainingLanguages,4,string-length($remainingLanguages))"
3239                                                 />
3240                                         </xsl:with-param>
3241                                 </xsl:call-template>
3242                         </xsl:otherwise>
3243                 </xsl:choose>
3244         </xsl:template>
3245         <xsl:template name="chopBrackets">
3246                 <xsl:param name="chopString"/>
3247                 <xsl:variable name="string">
3248                         <xsl:call-template name="chopPunctuation">
3249                                 <xsl:with-param name="chopString" select="$chopString"/>
3250                         </xsl:call-template>
3251                 </xsl:variable>
3252                 <xsl:if test="substring($string, 1,1)='['">
3253                         <xsl:value-of select="substring($string,2, string-length($string)-2)"/>
3254                 </xsl:if>
3255                 <xsl:if test="substring($string, 1,1)!='['">
3256                         <xsl:value-of select="$string"/>
3257                 </xsl:if>
3258         </xsl:template>
3259         <xsl:template name="rfcLanguages">
3260                 <xsl:param name="nodeNum"/>
3261                 <xsl:param name="usedLanguages"/>
3262                 <xsl:param name="controlField008-35-37"/>
3263                 <xsl:variable name="currentLanguage" select="."/>
3264                 <xsl:choose>
3265                         <xsl:when test="not($currentLanguage)"/>
3266                         <xsl:when
3267                                 test="$currentLanguage!=$controlField008-35-37 and $currentLanguage!='rfc3066'">
3268                                 <xsl:if test="not(contains($usedLanguages,$currentLanguage))">
3269                                         <language>
3270                                                 <xsl:if test="@code!='a'">
3271                                                         <xsl:attribute name="objectPart">
3272                                                                 <xsl:choose>
3273                                                                         <xsl:when test="@code='b'">summary or subtitle</xsl:when>
3274                                                                         <xsl:when test="@code='d'">sung or spoken text</xsl:when>
3275                                                                         <xsl:when test="@code='e'">libretto</xsl:when>
3276                                                                         <xsl:when test="@code='f'">table of contents</xsl:when>
3277                                                                         <xsl:when test="@code='g'">accompanying material</xsl:when>
3278                                                                         <xsl:when test="@code='h'">translation</xsl:when>
3279                                                                 </xsl:choose>
3280                                                         </xsl:attribute>
3281                                                 </xsl:if>
3282                                                 <languageTerm authority="rfc3066" type="code">
3283                                                         <xsl:value-of select="$currentLanguage"/>
3284                                                 </languageTerm>
3285                                         </language>
3286                                 </xsl:if>
3287                         </xsl:when>
3288                         <xsl:otherwise> </xsl:otherwise>
3289                 </xsl:choose>
3290         </xsl:template>
3291 </xsl:stylesheet>