3 update config.xml_transform set xslt = $XXXX$<?xml version="1.0" encoding="UTF-8"?>
4 <xsl:stylesheet xmlns="http://www.loc.gov/mods/v3" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xlink marc" version="1.0">
5 <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
7 Revision 1.14 - Fixed template isValid and fields 010, 020, 022, 024, 028, and 037 to output additional identifier elements
8 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
10 Revision 1.13 - Changed order of output under cartographics to reflect schema 2006/11/28 tmee
12 Revision 1.12 - Updated to reflect MODS 3.2 Mapping 2006/10/11 tmee
14 Revision 1.11 - The attribute objectPart moved from <languageTerm> to <language>
17 Revision 1.10 MODS 3.1 revisions to language and classification elements
18 (plus ability to find marc:collection embedded in wrapper elements such as SRU zs: wrappers)
21 Revision 1.9 subfield $y was added to field 242 2004/09/02 10:57 jrad
23 Revision 1.8 Subject chopPunctuation expanded and attribute fixes 2004/08/12 jrad
25 Revision 1.7 2004/03/25 08:29 jrad
27 Revision 1.6 various validation fixes 2004/02/20 ntra
29 Revision 1.5 2003/10/02 16:18:58 ntra
30 MODS2 to MODS3 updates, language unstacking and
31 de-duping, chopPunctuation expanded
33 Revision 1.3 2003/04/03 00:07:19 ntra
34 Revision 1.3 Additional Changes not related to MODS Version 2.0 by ntra
36 Revision 1.2 2003/03/24 19:37:42 ckeith
40 <xsl:template match="/">
42 <xsl:when test="//marc:collection">
43 <modsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
44 <xsl:for-each select="//marc:collection/marc:record">
46 <xsl:call-template name="marcRecord"/>
52 <mods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
53 <xsl:for-each select="//marc:record">
54 <xsl:call-template name="marcRecord"/>
60 <xsl:template name="marcRecord">
61 <xsl:variable name="leader" select="marc:leader"/>
62 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
63 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
64 <xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
65 <xsl:variable name="typeOf008">
67 <xsl:when test="$leader6='a'">
69 <xsl:when 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>
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'">MU</xsl:when>
81 <xsl:for-each select="marc:datafield[@tag='245']">
83 <xsl:variable name="title">
85 <xsl:when test="marc:subfield[@code='b']">
86 <xsl:call-template name="specialSubfieldSelect">
87 <xsl:with-param name="axis">b</xsl:with-param>
88 <xsl:with-param name="beforeCodes">afgk</xsl:with-param>
92 <xsl:call-template name="subfieldSelect">
93 <xsl:with-param name="codes">abfgk</xsl:with-param>
98 <xsl:variable name="titleChop">
99 <xsl:call-template name="chopPunctuation">
100 <xsl:with-param name="chopString">
101 <xsl:value-of select="$title"/>
103 <xsl:with-param name="punctuation">
104 <xsl:text>,;/ </xsl:text>
109 <xsl:when test="@ind2>0">
111 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
114 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
119 <xsl:value-of select="$titleChop"/>
123 <xsl:if test="marc:subfield[@code='b']">
125 <xsl:call-template name="chopPunctuation">
126 <xsl:with-param name="chopString">
127 <xsl:call-template name="specialSubfieldSelect">
128 <xsl:with-param name="axis">b</xsl:with-param>
129 <xsl:with-param name="anyCodes">b</xsl:with-param>
130 <xsl:with-param name="afterCodes">afgk</xsl:with-param>
136 <xsl:call-template name="part"></xsl:call-template>
138 <!-- A form of title that ignores non-filing characters; useful
139 for not converting "L'Oreal" into "L' Oreal" at index time -->
142 <xsl:call-template name="chopPunctuation">
143 <xsl:with-param name="chopString">
144 <xsl:call-template name="subfieldSelect">
145 <xsl:with-param name="codes">abfgk</xsl:with-param>
150 <xsl:call-template name="part"></xsl:call-template>
152 <!-- hybrid of titleInfo and titleNonfiling which will give us a preformatted string (for punctuation)
153 but also keep the nonSort stuff in a separate field (for sorting) -->
155 <xsl:variable name="titleBrowseChop">
156 <xsl:call-template name="chopPunctuation">
157 <xsl:with-param name="chopString">
158 <xsl:call-template name="subfieldSelect">
159 <xsl:with-param name="codes">abfgk</xsl:with-param>
165 <xsl:when test="@ind2>0">
167 <xsl:value-of select="substring($titleBrowseChop,1,@ind2)"/>
170 <xsl:value-of select="substring($titleBrowseChop,@ind2+1)"/>
175 <xsl:value-of select="$titleBrowseChop"/>
179 <xsl:call-template name="part"></xsl:call-template>
182 <xsl:for-each select="marc:datafield[@tag='210']">
183 <titleInfo type="abbreviated">
185 <xsl:call-template name="chopPunctuation">
186 <xsl:with-param name="chopString">
187 <xsl:call-template name="subfieldSelect">
188 <xsl:with-param name="codes">a</xsl:with-param>
193 <xsl:call-template name="subtitle"/>
196 <xsl:for-each select="marc:datafield[@tag='242']">
197 <xsl:variable name="titleChop">
198 <xsl:call-template name="chopPunctuation">
199 <xsl:with-param name="chopString">
200 <xsl:call-template name="subfieldSelect">
201 <!-- 1/04 removed $h, b -->
202 <xsl:with-param name="codes">a</xsl:with-param>
207 <titleInfo type="translated">
208 <!--09/01/04 Added subfield $y-->
209 <xsl:for-each select="marc:subfield[@code='y']">
210 <xsl:attribute name="lang">
211 <xsl:value-of select="text()"/>
215 <xsl:value-of select="$titleChop" />
218 <xsl:call-template name="subtitle"/>
219 <xsl:call-template name="part"/>
221 <titleInfo type="translated-nfi">
222 <xsl:for-each select="marc:subfield[@code='y']">
223 <xsl:attribute name="lang">
224 <xsl:value-of select="text()"/>
228 <xsl:when test="@ind2>0">
230 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
233 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
238 <xsl:value-of select="$titleChop" />
242 <xsl:call-template name="subtitle"/>
243 <xsl:call-template name="part"/>
246 <xsl:for-each select="marc:datafield[@tag='246']">
247 <titleInfo type="alternative">
248 <xsl:for-each select="marc:subfield[@code='i']">
249 <xsl:attribute name="displayLabel">
250 <xsl:value-of select="text()"/>
254 <xsl:call-template name="chopPunctuation">
255 <xsl:with-param name="chopString">
256 <xsl:call-template name="subfieldSelect">
257 <!-- 1/04 removed $h, $b -->
258 <xsl:with-param name="codes">af</xsl:with-param>
263 <xsl:call-template name="subtitle"/>
264 <xsl:call-template name="part"/>
267 <xsl:for-each select="marc:datafield[@tag='130']|marc:datafield[@tag='240']|marc:datafield[@tag='730'][@ind2!='2']">
268 <xsl:variable name="nfi">
270 <xsl:when test="@tag='240'">
271 <xsl:value-of select="@ind2"/>
274 <xsl:value-of select="@ind1"/>
278 <xsl:variable name="titleChop">
279 <xsl:call-template name="uri" />
280 <xsl:variable name="str">
281 <xsl:for-each select="marc:subfield">
282 <xsl:if test="(contains('adfklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
283 <xsl:value-of select="text()"/>
284 <xsl:text> </xsl:text>
288 <xsl:call-template name="chopPunctuation">
289 <xsl:with-param name="chopString">
290 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
294 <titleInfo type="uniform">
296 <xsl:value-of select="$titleChop"/>
298 <xsl:call-template name="part"/>
300 <titleInfo type="uniform-nfi">
302 <xsl:when test="$nfi>0">
304 <xsl:value-of select="substring($titleChop,1,$nfi)"/>
307 <xsl:value-of select="substring($titleChop,$nfi+1)"/>
312 <xsl:value-of select="$titleChop"/>
316 <xsl:call-template name="part"/>
319 <xsl:for-each select="marc:datafield[@tag='740'][@ind2!='2']">
320 <xsl:variable name="titleChop">
321 <xsl:call-template name="chopPunctuation">
322 <xsl:with-param name="chopString">
323 <xsl:call-template name="subfieldSelect">
324 <xsl:with-param name="codes">ah</xsl:with-param>
329 <titleInfo type="alternative">
331 <xsl:value-of select="$titleChop" />
333 <xsl:call-template name="part"/>
335 <titleInfo type="alternative-nfi">
337 <xsl:when test="@ind1>0">
339 <xsl:value-of select="substring($titleChop,1,@ind1)"/>
342 <xsl:value-of select="substring($titleChop,@ind1+1)"/>
347 <xsl:value-of select="$titleChop" />
351 <xsl:call-template name="part"/>
354 <xsl:for-each select="marc:datafield[@tag='100']">
355 <name type="personal">
356 <xsl:call-template name="uri" />
357 <xsl:call-template name="nameABCDQ"/>
358 <xsl:call-template name="affiliation"/>
360 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
362 <xsl:call-template name="role"/>
365 <xsl:for-each select="marc:datafield[@tag='110']">
366 <name type="corporate">
367 <xsl:call-template name="uri" />
368 <xsl:call-template name="nameABCDN"/>
370 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
372 <xsl:call-template name="role"/>
375 <xsl:for-each select="marc:datafield[@tag='111']">
376 <name type="conference">
377 <xsl:call-template name="uri" />
378 <xsl:call-template name="nameACDEQ"/>
380 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
382 <xsl:call-template name="role"/>
385 <xsl:for-each select="marc:datafield[@tag='700'][not(marc:subfield[@code='t'])]">
386 <name type="personal">
387 <xsl:call-template name="uri" />
388 <xsl:call-template name="nameABCDQ"/>
389 <xsl:call-template name="affiliation"/>
390 <xsl:call-template name="role"/>
393 <xsl:for-each select="marc:datafield[@tag='710'][not(marc:subfield[@code='t'])]">
394 <name type="corporate">
395 <xsl:call-template name="uri" />
396 <xsl:call-template name="nameABCDN"/>
397 <xsl:call-template name="role"/>
400 <xsl:for-each select="marc:datafield[@tag='711'][not(marc:subfield[@code='t'])]">
401 <name type="conference">
402 <xsl:call-template name="uri" />
403 <xsl:call-template name="nameACDEQ"/>
404 <xsl:call-template name="role"/>
407 <xsl:for-each select="marc:datafield[@tag='720'][not(marc:subfield[@code='t'])]">
409 <xsl:if test="@ind1=1">
410 <xsl:attribute name="type">
411 <xsl:text>personal</xsl:text>
415 <xsl:value-of select="marc:subfield[@code='a']"/>
417 <xsl:call-template name="role"/>
421 <xsl:if test="$leader7='c'">
422 <xsl:attribute name="collection">yes</xsl:attribute>
424 <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
425 <xsl:attribute name="manuscript">yes</xsl:attribute>
428 <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
429 <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
430 <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
431 <xsl:when test="$leader6='i'">sound recording-nonmusical</xsl:when>
432 <xsl:when test="$leader6='j'">sound recording-musical</xsl:when>
433 <xsl:when test="$leader6='k'">still image</xsl:when>
434 <xsl:when test="$leader6='g'">moving image</xsl:when>
435 <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
436 <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
437 <xsl:when test="$leader6='p'">mixed material</xsl:when>
440 <xsl:if test="substring($controlField008,26,1)='d'">
441 <genre authority="marc">globe</genre>
443 <xsl:if test="marc:controlfield[@tag='007'][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
444 <genre authority="marc">remote sensing image</genre>
446 <xsl:if test="$typeOf008='MP'">
447 <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"></xsl:variable>
449 <xsl:when test="$controlField008-25='a' or $controlField008-25='b' or $controlField008-25='c' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='j']">
450 <genre authority="marc">map</genre>
452 <xsl:when test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
453 <genre authority="marc">atlas</genre>
457 <xsl:if test="$typeOf008='SE'">
458 <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"></xsl:variable>
460 <xsl:when test="$controlField008-21='d'">
461 <genre authority="marc">database</genre>
463 <xsl:when test="$controlField008-21='l'">
464 <genre authority="marc">loose-leaf</genre>
466 <xsl:when test="$controlField008-21='m'">
467 <genre authority="marc">series</genre>
469 <xsl:when test="$controlField008-21='n'">
470 <genre authority="marc">newspaper</genre>
472 <xsl:when test="$controlField008-21='p'">
473 <genre authority="marc">periodical</genre>
475 <xsl:when test="$controlField008-21='w'">
476 <genre authority="marc">web site</genre>
480 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
481 <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"></xsl:variable>
483 <xsl:when test="contains($controlField008-24,'a')">
484 <genre authority="marc">abstract or summary</genre>
486 <xsl:when test="contains($controlField008-24,'b')">
487 <genre authority="marc">bibliography</genre>
489 <xsl:when test="contains($controlField008-24,'c')">
490 <genre authority="marc">catalog</genre>
492 <xsl:when test="contains($controlField008-24,'d')">
493 <genre authority="marc">dictionary</genre>
495 <xsl:when test="contains($controlField008-24,'e')">
496 <genre authority="marc">encyclopedia</genre>
498 <xsl:when test="contains($controlField008-24,'f')">
499 <genre authority="marc">handbook</genre>
501 <xsl:when test="contains($controlField008-24,'g')">
502 <genre authority="marc">legal article</genre>
504 <xsl:when test="contains($controlField008-24,'i')">
505 <genre authority="marc">index</genre>
507 <xsl:when test="contains($controlField008-24,'k')">
508 <genre authority="marc">discography</genre>
510 <xsl:when test="contains($controlField008-24,'l')">
511 <genre authority="marc">legislation</genre>
513 <xsl:when test="contains($controlField008-24,'m')">
514 <genre authority="marc">theses</genre>
516 <xsl:when test="contains($controlField008-24,'n')">
517 <genre authority="marc">survey of literature</genre>
519 <xsl:when test="contains($controlField008-24,'o')">
520 <genre authority="marc">review</genre>
522 <xsl:when test="contains($controlField008-24,'p')">
523 <genre authority="marc">programmed text</genre>
525 <xsl:when test="contains($controlField008-24,'q')">
526 <genre authority="marc">filmography</genre>
528 <xsl:when test="contains($controlField008-24,'r')">
529 <genre authority="marc">directory</genre>
531 <xsl:when test="contains($controlField008-24,'s')">
532 <genre authority="marc">statistics</genre>
534 <xsl:when test="contains($controlField008-24,'t')">
535 <genre authority="marc">technical report</genre>
537 <xsl:when test="contains($controlField008-24,'v')">
538 <genre authority="marc">legal case and case notes</genre>
540 <xsl:when test="contains($controlField008-24,'w')">
541 <genre authority="marc">law report or digest</genre>
543 <xsl:when test="contains($controlField008-24,'z')">
544 <genre authority="marc">treaty</genre>
547 <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"></xsl:variable>
549 <xsl:when test="$controlField008-29='1'">
550 <genre authority="marc">conference publication</genre>
554 <xsl:if test="$typeOf008='CF'">
555 <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"></xsl:variable>
557 <xsl:when test="$controlField008-26='a'">
558 <genre authority="marc">numeric data</genre>
560 <xsl:when test="$controlField008-26='e'">
561 <genre authority="marc">database</genre>
563 <xsl:when test="$controlField008-26='f'">
564 <genre authority="marc">font</genre>
566 <xsl:when test="$controlField008-26='g'">
567 <genre authority="marc">game</genre>
571 <xsl:if test="$typeOf008='BK'">
572 <xsl:if test="substring($controlField008,25,1)='j'">
573 <genre authority="marc">patent</genre>
575 <xsl:if test="substring($controlField008,31,1)='1'">
576 <genre authority="marc">festschrift</genre>
578 <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"></xsl:variable>
579 <xsl:if test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
580 <genre authority="marc">biography</genre>
582 <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"></xsl:variable>
584 <xsl:when test="$controlField008-33='e'">
585 <genre authority="marc">essay</genre>
587 <xsl:when test="$controlField008-33='d'">
588 <genre authority="marc">drama</genre>
590 <xsl:when test="$controlField008-33='c'">
591 <genre authority="marc">comic strip</genre>
593 <xsl:when test="$controlField008-33='l'">
594 <genre authority="marc">fiction</genre>
596 <xsl:when test="$controlField008-33='h'">
597 <genre authority="marc">humor, satire</genre>
599 <xsl:when test="$controlField008-33='i'">
600 <genre authority="marc">letter</genre>
602 <xsl:when test="$controlField008-33='f'">
603 <genre authority="marc">novel</genre>
605 <xsl:when test="$controlField008-33='j'">
606 <genre authority="marc">short story</genre>
608 <xsl:when test="$controlField008-33='s'">
609 <genre authority="marc">speech</genre>
613 <xsl:if test="$typeOf008='MU'">
614 <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"></xsl:variable>
615 <xsl:if test="contains($controlField008-30-31,'b')">
616 <genre authority="marc">biography</genre>
618 <xsl:if test="contains($controlField008-30-31,'c')">
619 <genre authority="marc">conference publication</genre>
621 <xsl:if test="contains($controlField008-30-31,'d')">
622 <genre authority="marc">drama</genre>
624 <xsl:if test="contains($controlField008-30-31,'e')">
625 <genre authority="marc">essay</genre>
627 <xsl:if test="contains($controlField008-30-31,'f')">
628 <genre authority="marc">fiction</genre>
630 <xsl:if test="contains($controlField008-30-31,'o')">
631 <genre authority="marc">folktale</genre>
633 <xsl:if test="contains($controlField008-30-31,'h')">
634 <genre authority="marc">history</genre>
636 <xsl:if test="contains($controlField008-30-31,'k')">
637 <genre authority="marc">humor, satire</genre>
639 <xsl:if test="contains($controlField008-30-31,'m')">
640 <genre authority="marc">memoir</genre>
642 <xsl:if test="contains($controlField008-30-31,'p')">
643 <genre authority="marc">poetry</genre>
645 <xsl:if test="contains($controlField008-30-31,'r')">
646 <genre authority="marc">rehearsal</genre>
648 <xsl:if test="contains($controlField008-30-31,'g')">
649 <genre authority="marc">reporting</genre>
651 <xsl:if test="contains($controlField008-30-31,'s')">
652 <genre authority="marc">sound</genre>
654 <xsl:if test="contains($controlField008-30-31,'l')">
655 <genre authority="marc">speech</genre>
658 <xsl:if test="$typeOf008='VM'">
659 <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"></xsl:variable>
661 <xsl:when test="$controlField008-33='a'">
662 <genre authority="marc">art original</genre>
664 <xsl:when test="$controlField008-33='b'">
665 <genre authority="marc">kit</genre>
667 <xsl:when test="$controlField008-33='c'">
668 <genre authority="marc">art reproduction</genre>
670 <xsl:when test="$controlField008-33='d'">
671 <genre authority="marc">diorama</genre>
673 <xsl:when test="$controlField008-33='f'">
674 <genre authority="marc">filmstrip</genre>
676 <xsl:when test="$controlField008-33='g'">
677 <genre authority="marc">legal article</genre>
679 <xsl:when test="$controlField008-33='i'">
680 <genre authority="marc">picture</genre>
682 <xsl:when test="$controlField008-33='k'">
683 <genre authority="marc">graphic</genre>
685 <xsl:when test="$controlField008-33='l'">
686 <genre authority="marc">technical drawing</genre>
688 <xsl:when test="$controlField008-33='m'">
689 <genre authority="marc">motion picture</genre>
691 <xsl:when test="$controlField008-33='n'">
692 <genre authority="marc">chart</genre>
694 <xsl:when test="$controlField008-33='o'">
695 <genre authority="marc">flash card</genre>
697 <xsl:when test="$controlField008-33='p'">
698 <genre authority="marc">microscope slide</genre>
700 <xsl:when test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
701 <genre authority="marc">model</genre>
703 <xsl:when test="$controlField008-33='r'">
704 <genre authority="marc">realia</genre>
706 <xsl:when test="$controlField008-33='s'">
707 <genre authority="marc">slide</genre>
709 <xsl:when test="$controlField008-33='t'">
710 <genre authority="marc">transparency</genre>
712 <xsl:when test="$controlField008-33='v'">
713 <genre authority="marc">videorecording</genre>
715 <xsl:when test="$controlField008-33='w'">
716 <genre authority="marc">toy</genre>
720 <xsl:for-each select="marc:datafield[@tag=655]">
721 <genre authority="marc">
722 <xsl:attribute name="authority">
723 <xsl:value-of select="marc:subfield[@code='2']"/>
725 <xsl:call-template name="subfieldSelect">
726 <xsl:with-param name="codes">abvxyz</xsl:with-param>
727 <xsl:with-param name="delimeter">-</xsl:with-param>
732 <xsl:variable name="MARCpublicationCode" select="normalize-space(substring($controlField008,16,3))"></xsl:variable>
733 <xsl:if test="translate($MARCpublicationCode,'|','')">
736 <xsl:attribute name="type">code</xsl:attribute>
737 <xsl:attribute name="authority">marccountry</xsl:attribute>
738 <xsl:value-of select="$MARCpublicationCode"/>
742 <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
745 <xsl:attribute name="type">code</xsl:attribute>
746 <xsl:attribute name="authority">iso3166</xsl:attribute>
747 <xsl:value-of select="."/>
751 <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a']">
754 <xsl:attribute name="type">text</xsl:attribute>
755 <xsl:call-template name="chopPunctuationFront">
756 <xsl:with-param name="chopString">
757 <xsl:call-template name="chopPunctuation">
758 <xsl:with-param name="chopString" select="."/>
765 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='m']">
766 <dateValid point="start">
767 <xsl:value-of select="."/>
770 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='n']">
771 <dateValid point="end">
772 <xsl:value-of select="."/>
775 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='j']">
777 <xsl:value-of select="."/>
780 <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='b' or @code='c' or @code='g']">
782 <xsl:when test="@code='b'">
784 <xsl:call-template name="chopPunctuation">
785 <xsl:with-param name="chopString" select="."/>
786 <xsl:with-param name="punctuation">
787 <xsl:text>:,;/ </xsl:text>
792 <xsl:when test="@code='c'">
794 <xsl:call-template name="chopPunctuation">
795 <xsl:with-param name="chopString" select="."/>
799 <xsl:when test="@code='g'">
801 <xsl:value-of select="."/>
806 <xsl:variable name="dataField260c">
807 <xsl:call-template name="chopPunctuation">
808 <xsl:with-param name="chopString" select="marc:datafield[@tag=260]/marc:subfield[@code='c']"></xsl:with-param>
811 <xsl:variable name="controlField008-7-10" select="normalize-space(substring($controlField008, 8, 4))"></xsl:variable>
812 <xsl:variable name="controlField008-11-14" select="normalize-space(substring($controlField008, 12, 4))"></xsl:variable>
813 <xsl:variable name="controlField008-6" select="normalize-space(substring($controlField008, 7, 1))"></xsl:variable>
814 <xsl:if test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
815 <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
816 <dateIssued encoding="marc">
817 <xsl:value-of select="$controlField008-7-10"/>
821 <xsl:if test="$controlField008-6='c' or $controlField008-6='d' or $controlField008-6='i' or $controlField008-6='k' or $controlField008-6='m' or $controlField008-6='q' or $controlField008-6='u'">
822 <xsl:if test="$controlField008-7-10">
823 <dateIssued encoding="marc" point="start">
824 <xsl:value-of select="$controlField008-7-10"/>
828 <xsl:if test="$controlField008-6='c' or $controlField008-6='d' or $controlField008-6='i' or $controlField008-6='k' or $controlField008-6='m' or $controlField008-6='q' or $controlField008-6='u'">
829 <xsl:if test="$controlField008-11-14">
830 <dateIssued encoding="marc" point="end">
831 <xsl:value-of select="$controlField008-11-14"/>
835 <xsl:if test="$controlField008-6='q'">
836 <xsl:if test="$controlField008-7-10">
837 <dateIssued encoding="marc" point="start" qualifier="questionable">
838 <xsl:value-of select="$controlField008-7-10"/>
842 <xsl:if test="$controlField008-6='q'">
843 <xsl:if test="$controlField008-11-14">
844 <dateIssued encoding="marc" point="end" qualifier="questionable">
845 <xsl:value-of select="$controlField008-11-14"/>
849 <xsl:if test="$controlField008-6='t'">
850 <xsl:if test="$controlField008-11-14">
851 <copyrightDate encoding="marc">
852 <xsl:value-of select="$controlField008-11-14"/>
856 <xsl:for-each select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
857 <dateCaptured encoding="iso8601">
858 <xsl:value-of select="."/>
861 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
862 <dateCaptured encoding="iso8601" point="start">
863 <xsl:value-of select="."/>
866 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
867 <dateCaptured encoding="iso8601" point="end">
868 <xsl:value-of select="."/>
871 <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
873 <xsl:value-of select="."/>
876 <xsl:for-each select="marc:leader">
879 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">monographic</xsl:when>
880 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">continuing</xsl:when>
884 <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
886 <xsl:call-template name="subfieldSelect">
887 <xsl:with-param name="codes">ab</xsl:with-param>
892 <xsl:variable name="controlField008-35-37" select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"></xsl:variable>
893 <xsl:if test="$controlField008-35-37">
895 <languageTerm authority="iso639-2b" type="code">
896 <xsl:value-of select="substring($controlField008,36,3)"/>
900 <xsl:for-each select="marc:datafield[@tag=041]">
901 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='d' or @code='e' or @code='f' or @code='g' or @code='h']">
902 <xsl:variable name="langCodes" select="."/>
904 <xsl:when test="../marc:subfield[@code='2']='rfc3066'">
905 <!-- not stacked but could be repeated -->
906 <xsl:call-template name="rfcLanguages">
907 <xsl:with-param name="nodeNum">
908 <xsl:value-of select="1"/>
910 <xsl:with-param name="usedLanguages">
911 <xsl:text></xsl:text>
913 <xsl:with-param name="controlField008-35-37">
914 <xsl:value-of select="$controlField008-35-37"></xsl:value-of>
920 <xsl:variable name="allLanguages">
921 <xsl:copy-of select="$langCodes"></xsl:copy-of>
923 <xsl:variable name="currentLanguage">
924 <xsl:value-of select="substring($allLanguages,1,3)"></xsl:value-of>
926 <xsl:call-template name="isoLanguage">
927 <xsl:with-param name="currentLanguage">
928 <xsl:value-of select="substring($allLanguages,1,3)"></xsl:value-of>
930 <xsl:with-param name="remainingLanguages">
931 <xsl:value-of select="substring($allLanguages,4,string-length($allLanguages)-3)"></xsl:value-of>
933 <xsl:with-param name="usedLanguages">
934 <xsl:if test="$controlField008-35-37">
935 <xsl:value-of select="$controlField008-35-37"></xsl:value-of>
943 <xsl:variable name="physicalDescription">
944 <!--3.2 change tmee 007/11 -->
945 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a']">
946 <digitalOrigin>reformatted digital</digitalOrigin>
948 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='b']">
949 <digitalOrigin>digitized microfilm</digitalOrigin>
951 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='d']">
952 <digitalOrigin>digitized other analog</digitalOrigin>
954 <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"></xsl:variable>
955 <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"></xsl:variable>
956 <xsl:variable name="check008-23">
957 <xsl:if test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
958 <xsl:value-of select="true()"></xsl:value-of>
961 <xsl:variable name="check008-29">
962 <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
963 <xsl:value-of select="true()"></xsl:value-of>
967 <xsl:when test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
968 <form authority="marcform">braille</form>
970 <xsl:when test="($controlField008-23=' ' and ($leader6='c' or $leader6='d')) or (($typeOf008='BK' or $typeOf008='SE') and ($controlField008-23=' ' or $controlField008='r'))">
971 <form authority="marcform">print</form>
973 <xsl:when test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
974 <form authority="marcform">electronic</form>
976 <xsl:when test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
977 <form authority="marcform">microfiche</form>
979 <xsl:when test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
980 <form authority="marcform">microfilm</form>
984 <xsl:if test="marc:datafield[@tag=130]/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=130]/marc:subfield[@code='h']"></xsl:value-of>
993 <xsl:if test="marc:datafield[@tag=240]/marc:subfield[@code='h']">
994 <form authority="gmd">
995 <xsl:call-template name="chopBrackets">
996 <xsl:with-param name="chopString">
997 <xsl:value-of select="marc:datafield[@tag=240]/marc:subfield[@code='h']"></xsl:value-of>
1002 <xsl:if test="marc:datafield[@tag=242]/marc:subfield[@code='h']">
1003 <form authority="gmd">
1004 <xsl:call-template name="chopBrackets">
1005 <xsl:with-param name="chopString">
1006 <xsl:value-of select="marc:datafield[@tag=242]/marc:subfield[@code='h']"></xsl:value-of>
1008 </xsl:call-template>
1011 <xsl:if test="marc:datafield[@tag=245]/marc:subfield[@code='h']">
1012 <form authority="gmd">
1013 <xsl:call-template name="chopBrackets">
1014 <xsl:with-param name="chopString">
1015 <xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='h']"></xsl:value-of>
1017 </xsl:call-template>
1020 <xsl:if test="marc:datafield[@tag=246]/marc:subfield[@code='h']">
1021 <form authority="gmd">
1022 <xsl:call-template name="chopBrackets">
1023 <xsl:with-param name="chopString">
1024 <xsl:value-of select="marc:datafield[@tag=246]/marc:subfield[@code='h']"></xsl:value-of>
1026 </xsl:call-template>
1029 <xsl:if test="marc:datafield[@tag=730]/marc:subfield[@code='h']">
1030 <form authority="gmd">
1031 <xsl:call-template name="chopBrackets">
1032 <xsl:with-param name="chopString">
1033 <xsl:value-of select="marc:datafield[@tag=730]/marc:subfield[@code='h']"></xsl:value-of>
1035 </xsl:call-template>
1038 <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
1040 <xsl:value-of select="."></xsl:value-of>
1043 <xsl:for-each select="marc:controlfield[@tag=007][substring(text(),1,1)='c']">
1045 <xsl:when test="substring(text(),14,1)='a'">
1046 <reformattingQuality>access</reformattingQuality>
1048 <xsl:when test="substring(text(),14,1)='p'">
1049 <reformattingQuality>preservation</reformattingQuality>
1051 <xsl:when test="substring(text(),14,1)='r'">
1052 <reformattingQuality>replacement</reformattingQuality>
1056 <!--3.2 change tmee 007/01 -->
1057 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='b']">
1058 <form authority="smd">chip cartridge</form>
1060 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='c']">
1061 <form authority="smd">computer optical disc cartridge</form>
1063 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='j']">
1064 <form authority="smd">magnetic disc</form>
1066 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='m']">
1067 <form authority="smd">magneto-optical disc</form>
1069 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='o']">
1070 <form authority="smd">optical disc</form>
1072 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='r']">
1073 <form authority="smd">remote</form>
1075 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='a']">
1076 <form authority="smd">tape cartridge</form>
1078 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='f']">
1079 <form authority="smd">tape cassette</form>
1081 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='h']">
1082 <form authority="smd">tape reel</form>
1085 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='a']">
1086 <form authority="smd">celestial globe</form>
1088 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='e']">
1089 <form authority="smd">earth moon globe</form>
1091 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='b']">
1092 <form authority="smd">planetary or lunar globe</form>
1094 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='c']">
1095 <form authority="smd">terrestrial globe</form>
1098 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='o'][substring(text(),2,1)='o']">
1099 <form authority="smd">kit</form>
1102 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
1103 <form authority="smd">atlas</form>
1105 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='g']">
1106 <form authority="smd">diagram</form>
1108 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='j']">
1109 <form authority="smd">map</form>
1111 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
1112 <form authority="smd">model</form>
1114 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='k']">
1115 <form authority="smd">profile</form>
1117 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
1118 <form authority="smd">remote-sensing image</form>
1120 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='s']">
1121 <form authority="smd">section</form>
1123 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='y']">
1124 <form authority="smd">view</form>
1127 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='a']">
1128 <form authority="smd">aperture card</form>
1130 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='e']">
1131 <form authority="smd">microfiche</form>
1133 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='f']">
1134 <form authority="smd">microfiche cassette</form>
1136 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='b']">
1137 <form authority="smd">microfilm cartridge</form>
1139 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='c']">
1140 <form authority="smd">microfilm cassette</form>
1142 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='d']">
1143 <form authority="smd">microfilm reel</form>
1145 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='g']">
1146 <form authority="smd">microopaque</form>
1149 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='c']">
1150 <form authority="smd">film cartridge</form>
1152 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='f']">
1153 <form authority="smd">film cassette</form>
1155 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='r']">
1156 <form authority="smd">film reel</form>
1159 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='n']">
1160 <form authority="smd">chart</form>
1162 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='c']">
1163 <form authority="smd">collage</form>
1165 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='d']">
1166 <form authority="smd">drawing</form>
1168 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='o']">
1169 <form authority="smd">flash card</form>
1171 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='e']">
1172 <form authority="smd">painting</form>
1174 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='f']">
1175 <form authority="smd">photomechanical print</form>
1177 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='g']">
1178 <form authority="smd">photonegative</form>
1180 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='h']">
1181 <form authority="smd">photoprint</form>
1183 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='i']">
1184 <form authority="smd">picture</form>
1186 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='j']">
1187 <form authority="smd">print</form>
1189 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='l']">
1190 <form authority="smd">technical drawing</form>
1193 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='q'][substring(text(),2,1)='q']">
1194 <form authority="smd">notated music</form>
1197 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='d']">
1198 <form authority="smd">filmslip</form>
1200 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='c']">
1201 <form authority="smd">filmstrip cartridge</form>
1203 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='o']">
1204 <form authority="smd">filmstrip roll</form>
1206 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='f']">
1207 <form authority="smd">other filmstrip type</form>
1209 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='s']">
1210 <form authority="smd">slide</form>
1212 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='t']">
1213 <form authority="smd">transparency</form>
1215 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='r'][substring(text(),2,1)='r']">
1216 <form authority="smd">remote-sensing image</form>
1218 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='e']">
1219 <form authority="smd">cylinder</form>
1221 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='q']">
1222 <form authority="smd">roll</form>
1224 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='g']">
1225 <form authority="smd">sound cartridge</form>
1227 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='s']">
1228 <form authority="smd">sound cassette</form>
1230 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='d']">
1231 <form authority="smd">sound disc</form>
1233 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='t']">
1234 <form authority="smd">sound-tape reel</form>
1236 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='i']">
1237 <form authority="smd">sound-track film</form>
1239 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='w']">
1240 <form authority="smd">wire recording</form>
1243 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='c']">
1244 <form authority="smd">braille</form>
1246 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='b']">
1247 <form authority="smd">combination</form>
1249 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='a']">
1250 <form authority="smd">moon</form>
1252 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='d']">
1253 <form authority="smd">tactile, with no writing system</form>
1256 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='c']">
1257 <form authority="smd">braille</form>
1259 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='b']">
1260 <form authority="smd">large print</form>
1262 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='a']">
1263 <form authority="smd">regular print</form>
1265 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='d']">
1266 <form authority="smd">text in looseleaf binder</form>
1269 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='c']">
1270 <form authority="smd">videocartridge</form>
1272 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='f']">
1273 <form authority="smd">videocassette</form>
1275 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='d']">
1276 <form authority="smd">videodisc</form>
1278 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='r']">
1279 <form authority="smd">videoreel</form>
1282 <xsl:for-each select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)>1]">
1284 <xsl:value-of select="."></xsl:value-of>
1285 </internetMediaType>
1287 <xsl:for-each select="marc:datafield[@tag=300]">
1289 <xsl:call-template name="subfieldSelect">
1290 <xsl:with-param name="codes">abce</xsl:with-param>
1291 </xsl:call-template>
1295 <xsl:if test="string-length(normalize-space($physicalDescription))">
1296 <physicalDescription>
1297 <xsl:copy-of select="$physicalDescription"></xsl:copy-of>
1298 </physicalDescription>
1300 <xsl:for-each select="marc:datafield[@tag=520]">
1302 <xsl:call-template name="uri"></xsl:call-template>
1303 <xsl:call-template name="subfieldSelect">
1304 <xsl:with-param name="codes">ab</xsl:with-param>
1305 </xsl:call-template>
1308 <xsl:for-each select="marc:datafield[@tag=505]">
1310 <xsl:call-template name="uri"></xsl:call-template>
1311 <xsl:call-template name="subfieldSelect">
1312 <xsl:with-param name="codes">agrt</xsl:with-param>
1313 </xsl:call-template>
1316 <xsl:for-each select="marc:datafield[@tag=521]">
1318 <xsl:call-template name="subfieldSelect">
1319 <xsl:with-param name="codes">ab</xsl:with-param>
1320 </xsl:call-template>
1323 <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
1324 <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"></xsl:variable>
1327 <xsl:when test="$controlField008-22='d'">
1328 <targetAudience authority="marctarget">adolescent</targetAudience>
1330 <xsl:when test="$controlField008-22='e'">
1331 <targetAudience authority="marctarget">adult</targetAudience>
1333 <xsl:when test="$controlField008-22='g'">
1334 <targetAudience authority="marctarget">general</targetAudience>
1336 <xsl:when test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
1337 <targetAudience authority="marctarget">juvenile</targetAudience>
1339 <xsl:when test="$controlField008-22='a'">
1340 <targetAudience authority="marctarget">preschool</targetAudience>
1342 <xsl:when test="$controlField008-22='f'">
1343 <targetAudience authority="marctarget">specialized</targetAudience>
1347 <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
1348 <note type="statement of responsibility">
1349 <xsl:value-of select="."></xsl:value-of>
1352 <xsl:for-each select="marc:datafield[@tag=500]">
1354 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1355 <xsl:call-template name="uri"></xsl:call-template>
1359 <!--3.2 change tmee additional note fields-->
1361 <xsl:for-each select="marc:datafield[@tag=506]">
1362 <note type="restrictions">
1363 <xsl:call-template name="uri"></xsl:call-template>
1364 <xsl:variable name="str">
1365 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1366 <xsl:value-of select="."></xsl:value-of>
1367 <xsl:text> </xsl:text>
1370 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1374 <xsl:for-each select="marc:datafield[@tag=510]">
1375 <note type="citation/reference">
1376 <xsl:call-template name="uri"></xsl:call-template>
1377 <xsl:variable name="str">
1378 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1379 <xsl:value-of select="."></xsl:value-of>
1380 <xsl:text> </xsl:text>
1383 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1388 <xsl:for-each select="marc:datafield[@tag=511]">
1389 <note type="performers">
1390 <xsl:call-template name="uri"></xsl:call-template>
1391 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1394 <xsl:for-each select="marc:datafield[@tag=518]">
1396 <xsl:call-template name="uri"></xsl:call-template>
1397 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1401 <xsl:for-each select="marc:datafield[@tag=530]">
1402 <note type="additional physical form">
1403 <xsl:call-template name="uri"></xsl:call-template>
1404 <xsl:variable name="str">
1405 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1406 <xsl:value-of select="."></xsl:value-of>
1407 <xsl:text> </xsl:text>
1410 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1414 <xsl:for-each select="marc:datafield[@tag=533]">
1415 <note type="reproduction">
1416 <xsl:call-template name="uri"></xsl:call-template>
1417 <xsl:variable name="str">
1418 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1419 <xsl:value-of select="."></xsl:value-of>
1420 <xsl:text> </xsl:text>
1423 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1427 <xsl:for-each select="marc:datafield[@tag=534]">
1428 <note type="original version">
1429 <xsl:call-template name="uri"></xsl:call-template>
1430 <xsl:variable name="str">
1431 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1432 <xsl:value-of select="."></xsl:value-of>
1433 <xsl:text> </xsl:text>
1436 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1440 <xsl:for-each select="marc:datafield[@tag=538]">
1441 <note type="system details">
1442 <xsl:call-template name="uri"></xsl:call-template>
1443 <xsl:variable name="str">
1444 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1445 <xsl:value-of select="."></xsl:value-of>
1446 <xsl:text> </xsl:text>
1449 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1453 <xsl:for-each select="marc:datafield[@tag=583]">
1454 <note type="action">
1455 <xsl:call-template name="uri"></xsl:call-template>
1456 <xsl:variable name="str">
1457 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1458 <xsl:value-of select="."></xsl:value-of>
1459 <xsl:text> </xsl:text>
1462 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1470 <xsl:for-each 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]">
1472 <xsl:call-template name="uri"></xsl:call-template>
1473 <xsl:variable name="str">
1474 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1475 <xsl:value-of select="."></xsl:value-of>
1476 <xsl:text> </xsl:text>
1479 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
1482 <xsl:for-each select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
1486 <xsl:call-template name="subfieldSelect">
1487 <xsl:with-param name="codes">defg</xsl:with-param>
1488 </xsl:call-template>
1493 <xsl:for-each select="marc:datafield[@tag=043]">
1495 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1497 <xsl:attribute name="authority">
1498 <xsl:if test="@code='a'">
1499 <xsl:text>marcgac</xsl:text>
1501 <xsl:if test="@code='b'">
1502 <xsl:value-of select="following-sibling::marc:subfield[@code=2]"></xsl:value-of>
1504 <xsl:if test="@code='c'">
1505 <xsl:text>iso3166</xsl:text>
1508 <xsl:value-of select="self::marc:subfield"></xsl:value-of>
1513 <!-- tmee 2006/11/27 -->
1514 <xsl:for-each select="marc:datafield[@tag=255]">
1516 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1518 <xsl:if test="@code='a'">
1520 <xsl:value-of select="."></xsl:value-of>
1523 <xsl:if test="@code='b'">
1525 <xsl:value-of select="."></xsl:value-of>
1528 <xsl:if test="@code='c'">
1530 <xsl:value-of select="."></xsl:value-of>
1538 <xsl:apply-templates select="marc:datafield[653 >= @tag and @tag >= 600]"></xsl:apply-templates>
1539 <xsl:apply-templates select="marc:datafield[@tag=656]"></xsl:apply-templates>
1540 <xsl:for-each select="marc:datafield[@tag=752]">
1542 <hierarchicalGeographic>
1543 <xsl:for-each select="marc:subfield[@code='a']">
1545 <xsl:call-template name="chopPunctuation">
1546 <xsl:with-param name="chopString" select="."></xsl:with-param>
1547 </xsl:call-template>
1550 <xsl:for-each select="marc:subfield[@code='b']">
1552 <xsl:call-template name="chopPunctuation">
1553 <xsl:with-param name="chopString" select="."></xsl:with-param>
1554 </xsl:call-template>
1557 <xsl:for-each select="marc:subfield[@code='c']">
1559 <xsl:call-template name="chopPunctuation">
1560 <xsl:with-param name="chopString" select="."></xsl:with-param>
1561 </xsl:call-template>
1564 <xsl:for-each select="marc:subfield[@code='d']">
1566 <xsl:call-template name="chopPunctuation">
1567 <xsl:with-param name="chopString" select="."></xsl:with-param>
1568 </xsl:call-template>
1571 </hierarchicalGeographic>
1574 <xsl:for-each select="marc:datafield[@tag=045][marc:subfield[@code='b']]">
1577 <xsl:when test="@ind1=2">
1578 <temporal encoding="iso8601" point="start">
1579 <xsl:call-template name="chopPunctuation">
1580 <xsl:with-param name="chopString">
1581 <xsl:value-of select="marc:subfield[@code='b'][1]"></xsl:value-of>
1583 </xsl:call-template>
1585 <temporal encoding="iso8601" point="end">
1586 <xsl:call-template name="chopPunctuation">
1587 <xsl:with-param name="chopString">
1588 <xsl:value-of select="marc:subfield[@code='b'][2]"></xsl:value-of>
1590 </xsl:call-template>
1594 <xsl:for-each select="marc:subfield[@code='b']">
1595 <temporal encoding="iso8601">
1596 <xsl:call-template name="chopPunctuation">
1597 <xsl:with-param name="chopString" select="."></xsl:with-param>
1598 </xsl:call-template>
1605 <xsl:for-each select="marc:datafield[@tag=050]">
1606 <xsl:for-each select="marc:subfield[@code='b']">
1607 <classification authority="lcc">
1608 <xsl:if test="../marc:subfield[@code='3']">
1609 <xsl:attribute name="displayLabel">
1610 <xsl:value-of select="../marc:subfield[@code='3']"></xsl:value-of>
1613 <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"></xsl:value-of>
1614 <xsl:text> </xsl:text>
1615 <xsl:value-of select="text()"></xsl:value-of>
1618 <xsl:for-each select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
1619 <classification authority="lcc">
1620 <xsl:if test="../marc:subfield[@code='3']">
1621 <xsl:attribute name="displayLabel">
1622 <xsl:value-of select="../marc:subfield[@code='3']"></xsl:value-of>
1625 <xsl:value-of select="text()"></xsl:value-of>
1629 <xsl:for-each select="marc:datafield[@tag=082]">
1630 <classification authority="ddc">
1631 <xsl:if test="marc:subfield[@code='2']">
1632 <xsl:attribute name="edition">
1633 <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
1636 <xsl:call-template name="subfieldSelect">
1637 <xsl:with-param name="codes">ab</xsl:with-param>
1638 </xsl:call-template>
1641 <xsl:for-each select="marc:datafield[@tag=080]">
1642 <classification authority="udc">
1643 <xsl:call-template name="subfieldSelect">
1644 <xsl:with-param name="codes">abx</xsl:with-param>
1645 </xsl:call-template>
1648 <xsl:for-each select="marc:datafield[@tag=060]">
1649 <classification authority="nlm">
1650 <xsl:call-template name="subfieldSelect">
1651 <xsl:with-param name="codes">ab</xsl:with-param>
1652 </xsl:call-template>
1655 <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
1656 <classification authority="sudocs">
1657 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1660 <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
1661 <classification authority="candoc">
1662 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1665 <xsl:for-each select="marc:datafield[@tag=086]">
1667 <xsl:attribute name="authority">
1668 <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
1670 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1673 <xsl:for-each select="marc:datafield[@tag=084]">
1675 <xsl:attribute name="authority">
1676 <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
1678 <xsl:call-template name="subfieldSelect">
1679 <xsl:with-param name="codes">ab</xsl:with-param>
1680 </xsl:call-template>
1683 <xsl:for-each select="marc:datafield[@tag=440]">
1684 <relatedItem type="series">
1685 <xsl:variable name="titleChop">
1686 <xsl:call-template name="chopPunctuation">
1687 <xsl:with-param name="chopString">
1688 <xsl:call-template name="subfieldSelect">
1689 <xsl:with-param name="codes">av</xsl:with-param>
1690 </xsl:call-template>
1692 </xsl:call-template>
1696 <xsl:value-of select="$titleChop" />
1698 <xsl:call-template name="part"></xsl:call-template>
1700 <titleInfo type="nfi">
1702 <xsl:when test="@ind2>0">
1704 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
1707 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
1709 <xsl:call-template name="part"/>
1713 <xsl:value-of select="$titleChop" />
1717 <xsl:call-template name="part"></xsl:call-template>
1721 <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
1722 <relatedItem type="series">
1725 <xsl:call-template name="chopPunctuation">
1726 <xsl:with-param name="chopString">
1727 <xsl:call-template name="subfieldSelect">
1728 <xsl:with-param name="codes">av</xsl:with-param>
1729 </xsl:call-template>
1731 </xsl:call-template>
1733 <xsl:call-template name="part"></xsl:call-template>
1737 <xsl:for-each select="marc:datafield[@tag=510]">
1738 <relatedItem type="isReferencedBy">
1740 <xsl:call-template name="subfieldSelect">
1741 <xsl:with-param name="codes">abcx3</xsl:with-param>
1742 </xsl:call-template>
1746 <xsl:for-each select="marc:datafield[@tag=534]">
1747 <relatedItem type="original">
1748 <xsl:call-template name="relatedTitle"></xsl:call-template>
1749 <xsl:call-template name="relatedName"></xsl:call-template>
1750 <xsl:if test="marc:subfield[@code='b' or @code='c']">
1752 <xsl:for-each select="marc:subfield[@code='c']">
1754 <xsl:value-of select="."></xsl:value-of>
1757 <xsl:for-each select="marc:subfield[@code='b']">
1759 <xsl:value-of select="."></xsl:value-of>
1764 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1765 <xsl:for-each select="marc:subfield[@code='z']">
1766 <identifier type="isbn">
1767 <xsl:value-of select="."></xsl:value-of>
1770 <xsl:call-template name="relatedNote"></xsl:call-template>
1773 <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
1775 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1778 <xsl:call-template name="chopPunctuation">
1779 <xsl:with-param name="chopString">
1780 <xsl:call-template name="specialSubfieldSelect">
1781 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1782 <xsl:with-param name="axis">t</xsl:with-param>
1783 <xsl:with-param name="afterCodes">g</xsl:with-param>
1784 </xsl:call-template>
1786 </xsl:call-template>
1788 <xsl:call-template name="part"></xsl:call-template>
1790 <name type="personal">
1792 <xsl:call-template name="specialSubfieldSelect">
1793 <xsl:with-param name="anyCodes">aq</xsl:with-param>
1794 <xsl:with-param name="axis">t</xsl:with-param>
1795 <xsl:with-param name="beforeCodes">g</xsl:with-param>
1796 </xsl:call-template>
1798 <xsl:call-template name="termsOfAddress"></xsl:call-template>
1799 <xsl:call-template name="nameDate"></xsl:call-template>
1800 <xsl:call-template name="role"></xsl:call-template>
1802 <xsl:call-template name="relatedForm"></xsl:call-template>
1803 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1806 <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
1808 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1811 <xsl:call-template name="chopPunctuation">
1812 <xsl:with-param name="chopString">
1813 <xsl:call-template name="specialSubfieldSelect">
1814 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1815 <xsl:with-param name="axis">t</xsl:with-param>
1816 <xsl:with-param name="afterCodes">dg</xsl:with-param>
1817 </xsl:call-template>
1819 </xsl:call-template>
1821 <xsl:call-template name="relatedPartNumName"></xsl:call-template>
1823 <name type="corporate">
1824 <xsl:for-each select="marc:subfield[@code='a']">
1826 <xsl:value-of select="."></xsl:value-of>
1829 <xsl:for-each select="marc:subfield[@code='b']">
1831 <xsl:value-of select="."></xsl:value-of>
1834 <xsl:variable name="tempNamePart">
1835 <xsl:call-template name="specialSubfieldSelect">
1836 <xsl:with-param name="anyCodes">c</xsl:with-param>
1837 <xsl:with-param name="axis">t</xsl:with-param>
1838 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1839 </xsl:call-template>
1841 <xsl:if test="normalize-space($tempNamePart)">
1843 <xsl:value-of select="$tempNamePart"></xsl:value-of>
1846 <xsl:call-template name="role"></xsl:call-template>
1848 <xsl:call-template name="relatedForm"></xsl:call-template>
1849 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1852 <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
1854 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1857 <xsl:call-template name="chopPunctuation">
1858 <xsl:with-param name="chopString">
1859 <xsl:call-template name="specialSubfieldSelect">
1860 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1861 <xsl:with-param name="axis">t</xsl:with-param>
1862 <xsl:with-param name="afterCodes">g</xsl:with-param>
1863 </xsl:call-template>
1865 </xsl:call-template>
1867 <xsl:call-template name="relatedPartNumName"></xsl:call-template>
1869 <name type="conference">
1871 <xsl:call-template name="specialSubfieldSelect">
1872 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1873 <xsl:with-param name="axis">t</xsl:with-param>
1874 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1875 </xsl:call-template>
1878 <xsl:call-template name="relatedForm"></xsl:call-template>
1879 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1882 <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
1884 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1887 <xsl:call-template name="chopPunctuation">
1888 <xsl:with-param name="chopString">
1889 <xsl:call-template name="subfieldSelect">
1890 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1891 </xsl:call-template>
1893 </xsl:call-template>
1895 <xsl:call-template name="part"></xsl:call-template>
1897 <xsl:call-template name="relatedForm"></xsl:call-template>
1898 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
1901 <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
1903 <xsl:call-template name="constituentOrRelatedType"></xsl:call-template>
1904 <xsl:variable name="titleChop">
1905 <xsl:call-template name="chopPunctuation">
1906 <xsl:with-param name="chopString">
1907 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
1909 </xsl:call-template>
1913 <xsl:value-of select="$titleChop" />
1915 <xsl:call-template name="part"></xsl:call-template>
1917 <titleInfo type="nfi">
1919 <xsl:when test="@ind1>0">
1921 <xsl:value-of select="substring($titleChop,1,@ind1)"/>
1924 <xsl:value-of select="substring($titleChop,@ind1+1)"/>
1929 <xsl:value-of select="$titleChop" />
1933 <xsl:call-template name="part"></xsl:call-template>
1935 <xsl:call-template name="relatedForm"></xsl:call-template>
1938 <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
1939 <relatedItem type="series">
1940 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1943 <xsl:for-each select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
1945 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1948 <xsl:for-each select="marc:datafield[@tag=775]">
1949 <relatedItem type="otherVersion">
1950 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1953 <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
1954 <relatedItem type="constituent">
1955 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1958 <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
1959 <relatedItem type="host">
1960 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1963 <xsl:for-each select="marc:datafield[@tag=776]">
1964 <relatedItem type="otherFormat">
1965 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1968 <xsl:for-each select="marc:datafield[@tag=780]">
1969 <relatedItem type="preceding">
1970 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1973 <xsl:for-each select="marc:datafield[@tag=785]">
1974 <relatedItem type="succeeding">
1975 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1978 <xsl:for-each select="marc:datafield[@tag=786]">
1979 <relatedItem type="original">
1980 <xsl:call-template name="relatedItem76X-78X"></xsl:call-template>
1983 <xsl:for-each select="marc:datafield[@tag=800]">
1984 <relatedItem type="series">
1987 <xsl:call-template name="chopPunctuation">
1988 <xsl:with-param name="chopString">
1989 <xsl:call-template name="specialSubfieldSelect">
1990 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1991 <xsl:with-param name="axis">t</xsl:with-param>
1992 <xsl:with-param name="afterCodes">g</xsl:with-param>
1993 </xsl:call-template>
1995 </xsl:call-template>
1997 <xsl:call-template name="part"></xsl:call-template>
1999 <name type="personal">
2001 <xsl:call-template name="chopPunctuation">
2002 <xsl:with-param name="chopString">
2003 <xsl:call-template name="specialSubfieldSelect">
2004 <xsl:with-param name="anyCodes">aq</xsl:with-param>
2005 <xsl:with-param name="axis">t</xsl:with-param>
2006 <xsl:with-param name="beforeCodes">g</xsl:with-param>
2007 </xsl:call-template>
2009 </xsl:call-template>
2011 <xsl:call-template name="termsOfAddress"></xsl:call-template>
2012 <xsl:call-template name="nameDate"></xsl:call-template>
2013 <xsl:call-template name="role"></xsl:call-template>
2015 <xsl:call-template name="relatedForm"></xsl:call-template>
2018 <xsl:for-each select="marc:datafield[@tag=810]">
2019 <relatedItem type="series">
2022 <xsl:call-template name="chopPunctuation">
2023 <xsl:with-param name="chopString">
2024 <xsl:call-template name="specialSubfieldSelect">
2025 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
2026 <xsl:with-param name="axis">t</xsl:with-param>
2027 <xsl:with-param name="afterCodes">dg</xsl:with-param>
2028 </xsl:call-template>
2030 </xsl:call-template>
2032 <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2034 <name type="corporate">
2035 <xsl:for-each select="marc:subfield[@code='a']">
2037 <xsl:value-of select="."></xsl:value-of>
2040 <xsl:for-each select="marc:subfield[@code='b']">
2042 <xsl:value-of select="."></xsl:value-of>
2046 <xsl:call-template name="specialSubfieldSelect">
2047 <xsl:with-param name="anyCodes">c</xsl:with-param>
2048 <xsl:with-param name="axis">t</xsl:with-param>
2049 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
2050 </xsl:call-template>
2052 <xsl:call-template name="role"></xsl:call-template>
2054 <xsl:call-template name="relatedForm"></xsl:call-template>
2057 <xsl:for-each select="marc:datafield[@tag=811]">
2058 <relatedItem type="series">
2061 <xsl:call-template name="chopPunctuation">
2062 <xsl:with-param name="chopString">
2063 <xsl:call-template name="specialSubfieldSelect">
2064 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
2065 <xsl:with-param name="axis">t</xsl:with-param>
2066 <xsl:with-param name="afterCodes">g</xsl:with-param>
2067 </xsl:call-template>
2069 </xsl:call-template>
2071 <xsl:call-template name="relatedPartNumName"/>
2073 <name type="conference">
2075 <xsl:call-template name="specialSubfieldSelect">
2076 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
2077 <xsl:with-param name="axis">t</xsl:with-param>
2078 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
2079 </xsl:call-template>
2081 <xsl:call-template name="role"/>
2083 <xsl:call-template name="relatedForm"/>
2086 <xsl:for-each select="marc:datafield[@tag='830']">
2087 <relatedItem type="series">
2088 <xsl:variable name="titleChop">
2089 <xsl:call-template name="chopPunctuation">
2090 <xsl:with-param name="chopString">
2091 <xsl:call-template name="subfieldSelect">
2092 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
2093 </xsl:call-template>
2095 </xsl:call-template>
2099 <xsl:value-of select="$titleChop" />
2101 <xsl:call-template name="part"/>
2103 <titleInfo type="nfi">
2105 <xsl:when test="@ind2>0">
2107 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
2110 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
2115 <xsl:value-of select="$titleChop" />
2119 <xsl:call-template name="part"/>
2121 <xsl:call-template name="relatedForm"/>
2124 <xsl:for-each select="marc:datafield[@tag='856'][@ind2='2']/marc:subfield[@code='q']">
2127 <xsl:value-of select="."/>
2128 </internetMediaType>
2131 <xsl:for-each select="marc:datafield[@tag='020']">
2132 <xsl:call-template name="isInvalid">
2133 <xsl:with-param name="type">isbn</xsl:with-param>
2134 </xsl:call-template>
2135 <xsl:if test="marc:subfield[@code='a']">
2136 <identifier type="isbn">
2137 <xsl:value-of select="marc:subfield[@code='a']"/>
2141 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='0']">
2142 <xsl:call-template name="isInvalid">
2143 <xsl:with-param name="type">isrc</xsl:with-param>
2144 </xsl:call-template>
2145 <xsl:if test="marc:subfield[@code='a']">
2146 <identifier type="isrc">
2147 <xsl:value-of select="marc:subfield[@code='a']"/>
2151 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='2']">
2152 <xsl:call-template name="isInvalid">
2153 <xsl:with-param name="type">ismn</xsl:with-param>
2154 </xsl:call-template>
2155 <xsl:if test="marc:subfield[@code='a']">
2156 <identifier type="ismn">
2157 <xsl:value-of select="marc:subfield[@code='a']"/>
2161 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='4']">
2162 <xsl:call-template name="isInvalid">
2163 <xsl:with-param name="type">sici</xsl:with-param>
2164 </xsl:call-template>
2165 <identifier type="sici">
2166 <xsl:call-template name="subfieldSelect">
2167 <xsl:with-param name="codes">ab</xsl:with-param>
2168 </xsl:call-template>
2171 <xsl:for-each select="marc:datafield[@tag='022']">
2172 <xsl:call-template name="isInvalid">
2173 <xsl:with-param name="type">issn</xsl:with-param>
2174 </xsl:call-template>
2175 <identifier type="issn">
2176 <xsl:value-of select="marc:subfield[@code='a']"/>
2179 <xsl:for-each select="marc:datafield[@tag='010']">
2180 <xsl:call-template name="isInvalid">
2181 <xsl:with-param name="type">lccn</xsl:with-param>
2182 </xsl:call-template>
2183 <identifier type="lccn">
2184 <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
2187 <xsl:for-each select="marc:datafield[@tag='028']">
2189 <xsl:attribute name="type">
2191 <xsl:when test="@ind1='0'">issue number</xsl:when>
2192 <xsl:when test="@ind1='1'">matrix number</xsl:when>
2193 <xsl:when test="@ind1='2'">music plate</xsl:when>
2194 <xsl:when test="@ind1='3'">music publisher</xsl:when>
2195 <xsl:when test="@ind1='4'">videorecording identifier</xsl:when>
2198 <!--<xsl:call-template name="isInvalid"/>--> <!-- no $z in 028 -->
2199 <xsl:call-template name="subfieldSelect">
2200 <xsl:with-param name="codes">
2202 <xsl:when test="@ind1='0'">ba</xsl:when>
2203 <xsl:otherwise>ab</xsl:otherwise>
2206 </xsl:call-template>
2209 <xsl:for-each select="marc:datafield[@tag='037']">
2210 <identifier type="stock number">
2211 <!--<xsl:call-template name="isInvalid"/>--> <!-- no $z in 037 -->
2212 <xsl:call-template name="subfieldSelect">
2213 <xsl:with-param name="codes">ab</xsl:with-param>
2214 </xsl:call-template>
2217 <xsl:for-each select="marc:datafield[@tag='856'][marc:subfield[@code='u']]">
2219 <xsl:attribute name="type">
2221 <xsl:when test="starts-with(marc:subfield[@code='u'],'urn:doi') or starts-with(marc:subfield[@code='u'],'doi')">doi</xsl:when>
2222 <xsl:when test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl') or starts-with(marc:subfield[@code='u'],'http://hdl.loc.gov')">hdl</xsl:when>
2223 <xsl:otherwise>uri</xsl:otherwise>
2227 <xsl:when test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl') or starts-with(marc:subfield[@code='u'],'http://hdl.loc.gov') ">
2228 <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"></xsl:value-of>
2231 <xsl:value-of select="marc:subfield[@code='u']"></xsl:value-of>
2235 <xsl:if test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl')">
2236 <identifier type="hdl">
2237 <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
2238 <xsl:attribute name="displayLabel">
2239 <xsl:call-template name="subfieldSelect">
2240 <xsl:with-param name="codes">y3z</xsl:with-param>
2241 </xsl:call-template>
2244 <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"></xsl:value-of>
2248 <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]">
2249 <identifier type="upc">
2250 <xsl:call-template name="isInvalid"/>
2251 <xsl:value-of select="marc:subfield[@code='a']"/>
2254 <!-- 1/04 fix added $y -->
2255 <xsl:for-each select="marc:datafield[@tag=856][marc:subfield[@code='u']]">
2258 <xsl:if test="marc:subfield[@code='y' or @code='3']">
2259 <xsl:attribute name="displayLabel">
2260 <xsl:call-template name="subfieldSelect">
2261 <xsl:with-param name="codes">y3</xsl:with-param>
2262 </xsl:call-template>
2265 <xsl:if test="marc:subfield[@code='z' ]">
2266 <xsl:attribute name="note">
2267 <xsl:call-template name="subfieldSelect">
2268 <xsl:with-param name="codes">z</xsl:with-param>
2269 </xsl:call-template>
2272 <xsl:value-of select="marc:subfield[@code='u']"></xsl:value-of>
2278 <!-- 3.2 change tmee 856z -->
2281 <xsl:for-each select="marc:datafield[@tag=852]">
2284 <xsl:call-template name="displayLabel"></xsl:call-template>
2285 <xsl:call-template name="subfieldSelect">
2286 <xsl:with-param name="codes">abje</xsl:with-param>
2287 </xsl:call-template>
2291 <xsl:for-each select="marc:datafield[@tag=506]">
2292 <accessCondition type="restrictionOnAccess">
2293 <xsl:call-template name="subfieldSelect">
2294 <xsl:with-param name="codes">abcd35</xsl:with-param>
2295 </xsl:call-template>
2298 <xsl:for-each select="marc:datafield[@tag=540]">
2299 <accessCondition type="useAndReproduction">
2300 <xsl:call-template name="subfieldSelect">
2301 <xsl:with-param name="codes">abcde35</xsl:with-param>
2302 </xsl:call-template>
2306 <xsl:for-each select="marc:datafield[@tag=040]">
2307 <recordContentSource authority="marcorg">
2308 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
2309 </recordContentSource>
2311 <xsl:for-each select="marc:controlfield[@tag=008]">
2312 <recordCreationDate encoding="marc">
2313 <xsl:value-of select="substring(.,1,6)"></xsl:value-of>
2314 </recordCreationDate>
2316 <xsl:for-each select="marc:controlfield[@tag=005]">
2317 <recordChangeDate encoding="iso8601">
2318 <xsl:value-of select="."></xsl:value-of>
2321 <xsl:for-each select="marc:controlfield[@tag=001]">
2323 <xsl:if test="../marc:controlfield[@tag=003]">
2324 <xsl:attribute name="source">
2325 <xsl:value-of select="../marc:controlfield[@tag=003]"></xsl:value-of>
2328 <xsl:value-of select="."></xsl:value-of>
2331 <xsl:for-each select="marc:datafield[@tag=040]/marc:subfield[@code='b']">
2332 <languageOfCataloging>
2333 <languageTerm authority="iso639-2b" type="code">
2334 <xsl:value-of select="."></xsl:value-of>
2336 </languageOfCataloging>
2340 <xsl:template name="displayForm">
2341 <xsl:for-each select="marc:subfield[@code='c']">
2343 <xsl:value-of select="."></xsl:value-of>
2347 <xsl:template name="affiliation">
2348 <xsl:for-each select="marc:subfield[@code='u']">
2350 <xsl:value-of select="."></xsl:value-of>
2354 <xsl:template name="uri">
2355 <xsl:for-each select="marc:subfield[@code='u']">
2356 <xsl:attribute name="xlink:href">
2357 <xsl:value-of select="."></xsl:value-of>
2360 <xsl:for-each select="marc:subfield[@code='0']">
2362 <xsl:when test="contains(text(), ')')">
2363 <xsl:attribute name="xlink:href">
2364 <xsl:value-of select="substring-after(text(), ')')"></xsl:value-of>
2368 <xsl:attribute name="xlink:href">
2369 <xsl:value-of select="."></xsl:value-of>
2375 <xsl:template name="role">
2376 <xsl:for-each select="marc:subfield[@code='e']">
2378 <roleTerm type="text">
2379 <xsl:value-of select="."></xsl:value-of>
2383 <xsl:for-each select="marc:subfield[@code='4']">
2385 <roleTerm authority="marcrelator" type="code">
2386 <xsl:value-of select="."></xsl:value-of>
2391 <xsl:template name="part">
2392 <xsl:variable name="partNumber">
2393 <xsl:call-template name="specialSubfieldSelect">
2394 <xsl:with-param name="axis">n</xsl:with-param>
2395 <xsl:with-param name="anyCodes">n</xsl:with-param>
2396 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2397 </xsl:call-template>
2399 <xsl:variable name="partName">
2400 <xsl:call-template name="specialSubfieldSelect">
2401 <xsl:with-param name="axis">p</xsl:with-param>
2402 <xsl:with-param name="anyCodes">p</xsl:with-param>
2403 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2404 </xsl:call-template>
2406 <xsl:if test="string-length(normalize-space($partNumber))">
2408 <xsl:call-template name="chopPunctuation">
2409 <xsl:with-param name="chopString" select="$partNumber"></xsl:with-param>
2410 </xsl:call-template>
2413 <xsl:if test="string-length(normalize-space($partName))">
2415 <xsl:call-template name="chopPunctuation">
2416 <xsl:with-param name="chopString" select="$partName"></xsl:with-param>
2417 </xsl:call-template>
2421 <xsl:template name="relatedPart">
2422 <xsl:if test="@tag=773">
2423 <xsl:for-each select="marc:subfield[@code='g']">
2426 <xsl:value-of select="."></xsl:value-of>
2430 <xsl:for-each select="marc:subfield[@code='q']">
2432 <xsl:call-template name="parsePart"></xsl:call-template>
2437 <xsl:template name="relatedPartNumName">
2438 <xsl:variable name="partNumber">
2439 <xsl:call-template name="specialSubfieldSelect">
2440 <xsl:with-param name="axis">g</xsl:with-param>
2441 <xsl:with-param name="anyCodes">g</xsl:with-param>
2442 <xsl:with-param name="afterCodes">pst</xsl:with-param>
2443 </xsl:call-template>
2445 <xsl:variable name="partName">
2446 <xsl:call-template name="specialSubfieldSelect">
2447 <xsl:with-param name="axis">p</xsl:with-param>
2448 <xsl:with-param name="anyCodes">p</xsl:with-param>
2449 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
2450 </xsl:call-template>
2452 <xsl:if test="string-length(normalize-space($partNumber))">
2454 <xsl:value-of select="$partNumber"></xsl:value-of>
2457 <xsl:if test="string-length(normalize-space($partName))">
2459 <xsl:value-of select="$partName"></xsl:value-of>
2463 <xsl:template name="relatedName">
2464 <xsl:for-each select="marc:subfield[@code='a']">
2467 <xsl:value-of select="."></xsl:value-of>
2472 <xsl:template name="relatedForm">
2473 <xsl:for-each select="marc:subfield[@code='h']">
2474 <physicalDescription>
2476 <xsl:value-of select="."></xsl:value-of>
2478 </physicalDescription>
2481 <xsl:template name="relatedExtent">
2482 <xsl:for-each select="marc:subfield[@code='h']">
2483 <physicalDescription>
2485 <xsl:value-of select="."></xsl:value-of>
2487 </physicalDescription>
2490 <xsl:template name="relatedNote">
2491 <xsl:for-each select="marc:subfield[@code='n']">
2493 <xsl:value-of select="."></xsl:value-of>
2497 <xsl:template name="relatedSubject">
2498 <xsl:for-each select="marc:subfield[@code='j']">
2500 <temporal encoding="iso8601">
2501 <xsl:call-template name="chopPunctuation">
2502 <xsl:with-param name="chopString" select="."></xsl:with-param>
2503 </xsl:call-template>
2508 <xsl:template name="relatedIdentifierISSN">
2509 <xsl:for-each select="marc:subfield[@code='x']">
2510 <identifier type="issn">
2511 <xsl:value-of select="."></xsl:value-of>
2515 <xsl:template name="relatedIdentifierLocal">
2516 <xsl:for-each select="marc:subfield[@code='w']">
2517 <identifier type="local">
2518 <xsl:value-of select="."></xsl:value-of>
2522 <xsl:template name="relatedIdentifier">
2523 <xsl:for-each select="marc:subfield[@code='o']">
2525 <xsl:value-of select="."></xsl:value-of>
2529 <xsl:template name="relatedItem76X-78X">
2530 <xsl:call-template name="displayLabel"></xsl:call-template>
2531 <xsl:call-template name="relatedTitle76X-78X"></xsl:call-template>
2532 <xsl:call-template name="relatedName"></xsl:call-template>
2533 <xsl:call-template name="relatedOriginInfo"></xsl:call-template>
2534 <xsl:call-template name="relatedLanguage"></xsl:call-template>
2535 <xsl:call-template name="relatedExtent"></xsl:call-template>
2536 <xsl:call-template name="relatedNote"></xsl:call-template>
2537 <xsl:call-template name="relatedSubject"></xsl:call-template>
2538 <xsl:call-template name="relatedIdentifier"></xsl:call-template>
2539 <xsl:call-template name="relatedIdentifierISSN"></xsl:call-template>
2540 <xsl:call-template name="relatedIdentifierLocal"></xsl:call-template>
2541 <xsl:call-template name="relatedPart"></xsl:call-template>
2543 <xsl:template name="subjectGeographicZ">
2545 <xsl:call-template name="chopPunctuation">
2546 <xsl:with-param name="chopString" select="."></xsl:with-param>
2547 </xsl:call-template>
2550 <xsl:template name="subjectTemporalY">
2552 <xsl:call-template name="chopPunctuation">
2553 <xsl:with-param name="chopString" select="."></xsl:with-param>
2554 </xsl:call-template>
2557 <xsl:template name="subjectTopic">
2559 <xsl:call-template name="chopPunctuation">
2560 <xsl:with-param name="chopString" select="."></xsl:with-param>
2561 </xsl:call-template>
2564 <!-- 3.2 change tmee 6xx $v genre -->
2565 <xsl:template name="subjectGenre">
2567 <xsl:call-template name="chopPunctuation">
2568 <xsl:with-param name="chopString" select="."></xsl:with-param>
2569 </xsl:call-template>
2573 <xsl:template name="nameABCDN">
2574 <xsl:for-each select="marc:subfield[@code='a']">
2576 <xsl:call-template name="chopPunctuation">
2577 <xsl:with-param name="chopString" select="."></xsl:with-param>
2578 </xsl:call-template>
2581 <xsl:for-each select="marc:subfield[@code='b']">
2583 <xsl:value-of select="."></xsl:value-of>
2586 <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
2588 <xsl:call-template name="subfieldSelect">
2589 <xsl:with-param name="codes">cdn</xsl:with-param>
2590 </xsl:call-template>
2594 <xsl:template name="nameABCDQ">
2596 <xsl:call-template name="chopPunctuation">
2597 <xsl:with-param name="chopString">
2598 <xsl:call-template name="subfieldSelect">
2599 <xsl:with-param name="codes">aq</xsl:with-param>
2600 </xsl:call-template>
2602 <xsl:with-param name="punctuation">
2603 <xsl:text>:,;/ </xsl:text>
2605 </xsl:call-template>
2607 <xsl:call-template name="termsOfAddress"></xsl:call-template>
2608 <xsl:call-template name="nameDate"></xsl:call-template>
2610 <xsl:template name="nameACDEQ">
2612 <xsl:call-template name="subfieldSelect">
2613 <xsl:with-param name="codes">acdeq</xsl:with-param>
2614 </xsl:call-template>
2617 <xsl:template name="constituentOrRelatedType">
2618 <xsl:if test="@ind2=2">
2619 <xsl:attribute name="type">constituent</xsl:attribute>
2622 <xsl:template name="relatedTitle">
2623 <xsl:for-each select="marc:subfield[@code='t']">
2626 <xsl:call-template name="chopPunctuation">
2627 <xsl:with-param name="chopString">
2628 <xsl:value-of select="."></xsl:value-of>
2630 </xsl:call-template>
2635 <xsl:template name="relatedTitle76X-78X">
2636 <xsl:for-each select="marc:subfield[@code='t']">
2639 <xsl:call-template name="chopPunctuation">
2640 <xsl:with-param name="chopString">
2641 <xsl:value-of select="."></xsl:value-of>
2643 </xsl:call-template>
2645 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2646 <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2650 <xsl:for-each select="marc:subfield[@code='p']">
2651 <titleInfo type="abbreviated">
2653 <xsl:call-template name="chopPunctuation">
2654 <xsl:with-param name="chopString">
2655 <xsl:value-of select="."></xsl:value-of>
2657 </xsl:call-template>
2659 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2660 <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2664 <xsl:for-each select="marc:subfield[@code='s']">
2665 <titleInfo type="uniform">
2667 <xsl:call-template name="chopPunctuation">
2668 <xsl:with-param name="chopString">
2669 <xsl:value-of select="."></xsl:value-of>
2671 </xsl:call-template>
2673 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2674 <xsl:call-template name="relatedPartNumName"></xsl:call-template>
2679 <xsl:template name="relatedOriginInfo">
2680 <xsl:if test="marc:subfield[@code='b' or @code='d'] or marc:subfield[@code='f']">
2682 <xsl:if test="@tag=775">
2683 <xsl:for-each select="marc:subfield[@code='f']">
2686 <xsl:attribute name="type">code</xsl:attribute>
2687 <xsl:attribute name="authority">marcgac</xsl:attribute>
2688 <xsl:value-of select="."></xsl:value-of>
2693 <xsl:for-each select="marc:subfield[@code='d']">
2695 <xsl:value-of select="."></xsl:value-of>
2698 <xsl:for-each select="marc:subfield[@code='b']">
2700 <xsl:value-of select="."></xsl:value-of>
2706 <xsl:template name="relatedLanguage">
2707 <xsl:for-each select="marc:subfield[@code='e']">
2708 <xsl:call-template name="getLanguage">
2709 <xsl:with-param name="langString">
2710 <xsl:value-of select="."></xsl:value-of>
2712 </xsl:call-template>
2715 <xsl:template name="nameDate">
2716 <xsl:for-each select="marc:subfield[@code='d']">
2717 <namePart type="date">
2718 <xsl:call-template name="chopPunctuation">
2719 <xsl:with-param name="chopString" select="."></xsl:with-param>
2720 </xsl:call-template>
2724 <xsl:template name="subjectAuthority">
2725 <xsl:if test="@ind2!=4">
2726 <xsl:if test="@ind2!=' '">
2727 <xsl:if test="@ind2!=8">
2728 <xsl:if test="@ind2!=9">
2729 <xsl:attribute name="authority">
2731 <xsl:when test="@ind2=0">lcsh</xsl:when>
2732 <xsl:when test="@ind2=1">lcshac</xsl:when>
2733 <xsl:when test="@ind2=2">mesh</xsl:when>
2735 <xsl:when test="@ind2=3">nal</xsl:when>
2736 <xsl:when test="@ind2=5">csh</xsl:when>
2737 <xsl:when test="@ind2=6">rvm</xsl:when>
2738 <xsl:when test="@ind2=7">
2739 <xsl:value-of select="marc:subfield[@code='2']"></xsl:value-of>
2748 <xsl:template name="subjectAnyOrder">
2749 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
2751 <xsl:when test="@code='v'">
2752 <xsl:call-template name="subjectGenre"></xsl:call-template>
2754 <xsl:when test="@code='x'">
2755 <xsl:call-template name="subjectTopic"></xsl:call-template>
2757 <xsl:when test="@code='y'">
2758 <xsl:call-template name="subjectTemporalY"></xsl:call-template>
2760 <xsl:when test="@code='z'">
2761 <xsl:call-template name="subjectGeographicZ"></xsl:call-template>
2766 <xsl:template name="specialSubfieldSelect">
2767 <xsl:param name="anyCodes"></xsl:param>
2768 <xsl:param name="axis"></xsl:param>
2769 <xsl:param name="beforeCodes"></xsl:param>
2770 <xsl:param name="afterCodes"></xsl:param>
2771 <xsl:variable name="str">
2772 <xsl:for-each select="marc:subfield">
2773 <xsl:if test="contains($anyCodes, @code) or (contains($beforeCodes,@code) and following-sibling::marc:subfield[@code=$axis]) or (contains($afterCodes,@code) and preceding-sibling::marc:subfield[@code=$axis])">
2774 <xsl:value-of select="text()"></xsl:value-of>
2775 <xsl:text> </xsl:text>
2779 <xsl:value-of select="substring($str,1,string-length($str)-1)"></xsl:value-of>
2782 <!-- 3.2 change tmee 6xx $v genre -->
2783 <xsl:template match="marc:datafield[@tag=600]">
2785 <xsl:call-template name="subjectAuthority"></xsl:call-template>
2786 <name type="personal">
2787 <xsl:call-template name="uri" />
2789 <xsl:call-template name="chopPunctuation">
2790 <xsl:with-param name="chopString">
2791 <xsl:call-template name="subfieldSelect">
2792 <xsl:with-param name="codes">aq</xsl:with-param>
2793 </xsl:call-template>
2795 </xsl:call-template>
2797 <xsl:call-template name="termsOfAddress"></xsl:call-template>
2798 <xsl:call-template name="nameDate"></xsl:call-template>
2799 <xsl:call-template name="affiliation"></xsl:call-template>
2800 <xsl:call-template name="role"></xsl:call-template>
2802 <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2805 <xsl:template match="marc:datafield[@tag=610]">
2807 <xsl:call-template name="subjectAuthority"></xsl:call-template>
2808 <name type="corporate">
2809 <xsl:call-template name="uri" />
2810 <xsl:for-each select="marc:subfield[@code='a']">
2812 <xsl:value-of select="."></xsl:value-of>
2815 <xsl:for-each select="marc:subfield[@code='b']">
2817 <xsl:value-of select="."></xsl:value-of>
2820 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
2822 <xsl:call-template name="subfieldSelect">
2823 <xsl:with-param name="codes">cdnp</xsl:with-param>
2824 </xsl:call-template>
2827 <xsl:call-template name="role"></xsl:call-template>
2829 <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2832 <xsl:template match="marc:datafield[@tag=611]">
2834 <xsl:call-template name="subjectAuthority"></xsl:call-template>
2835 <name type="conference">
2836 <xsl:call-template name="uri" />
2838 <xsl:call-template name="subfieldSelect">
2839 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
2840 </xsl:call-template>
2842 <xsl:for-each select="marc:subfield[@code='4']">
2844 <roleTerm authority="marcrelator" type="code">
2845 <xsl:value-of select="."></xsl:value-of>
2850 <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2853 <xsl:template match="marc:datafield[@tag=630]">
2855 <xsl:call-template name="subjectAuthority"></xsl:call-template>
2856 <xsl:variable name="titleChop">
2857 <xsl:call-template name="chopPunctuation">
2858 <xsl:with-param name="chopString">
2859 <xsl:call-template name="subfieldSelect">
2860 <xsl:with-param name="codes">adfhklor</xsl:with-param>
2861 </xsl:call-template>
2863 </xsl:call-template>
2867 <xsl:value-of select="$titleChop" />
2869 <xsl:call-template name="part"></xsl:call-template>
2871 <titleInfo type="nfi">
2873 <xsl:when test="@ind1>0">
2875 <xsl:value-of select="substring($titleChop,1,@ind1)"/>
2878 <xsl:value-of select="substring($titleChop,@ind1+1)"/>
2880 <xsl:call-template name="part"/>
2884 <xsl:value-of select="$titleChop" />
2888 <xsl:call-template name="part"></xsl:call-template>
2890 <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2893 <xsl:template match="marc:datafield[@tag=650]">
2895 <xsl:call-template name="subjectAuthority"></xsl:call-template>
2897 <xsl:call-template name="uri" />
2898 <xsl:call-template name="chopPunctuation">
2899 <xsl:with-param name="chopString">
2900 <xsl:call-template name="subfieldSelect">
2901 <xsl:with-param name="codes">abcd</xsl:with-param>
2902 </xsl:call-template>
2904 </xsl:call-template>
2906 <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2909 <xsl:template match="marc:datafield[@tag=651]">
2911 <xsl:call-template name="subjectAuthority"></xsl:call-template>
2912 <xsl:for-each select="marc:subfield[@code='a']">
2914 <xsl:call-template name="uri" />
2915 <xsl:call-template name="chopPunctuation">
2916 <xsl:with-param name="chopString" select="."></xsl:with-param>
2917 </xsl:call-template>
2920 <xsl:call-template name="subjectAnyOrder"></xsl:call-template>
2923 <xsl:template match="marc:datafield[@tag=653]">
2925 <xsl:for-each select="marc:subfield[@code='a']">
2927 <xsl:call-template name="uri" />
2928 <xsl:value-of select="."></xsl:value-of>
2933 <xsl:template match="marc:datafield[@tag=656]">
2935 <xsl:if test="marc:subfield[@code=2]">
2936 <xsl:attribute name="authority">
2937 <xsl:value-of select="marc:subfield[@code=2]"></xsl:value-of>
2941 <xsl:call-template name="uri" />
2942 <xsl:call-template name="chopPunctuation">
2943 <xsl:with-param name="chopString">
2944 <xsl:value-of select="marc:subfield[@code='a']"></xsl:value-of>
2946 </xsl:call-template>
2950 <xsl:template name="termsOfAddress">
2951 <xsl:if test="marc:subfield[@code='b' or @code='c']">
2952 <namePart type="termsOfAddress">
2953 <xsl:call-template name="chopPunctuation">
2954 <xsl:with-param name="chopString">
2955 <xsl:call-template name="subfieldSelect">
2956 <xsl:with-param name="codes">bc</xsl:with-param>
2957 </xsl:call-template>
2959 </xsl:call-template>
2963 <xsl:template name="displayLabel">
2964 <xsl:if test="marc:subfield[@code='i']">
2965 <xsl:attribute name="displayLabel">
2966 <xsl:value-of select="marc:subfield[@code='i']"></xsl:value-of>
2969 <xsl:if test="marc:subfield[@code='3']">
2970 <xsl:attribute name="displayLabel">
2971 <xsl:value-of select="marc:subfield[@code='3']"></xsl:value-of>
2975 <xsl:template name="isInvalid">
2976 <xsl:param name="type"/>
2977 <xsl:if test="marc:subfield[@code='z'] or marc:subfield[@code='y']">
2979 <xsl:attribute name="type">
2980 <xsl:value-of select="$type"/>
2982 <xsl:attribute name="invalid">
2983 <xsl:text>yes</xsl:text>
2985 <xsl:if test="marc:subfield[@code='z']">
2986 <xsl:value-of select="marc:subfield[@code='z']"/>
2988 <xsl:if test="marc:subfield[@code='y']">
2989 <xsl:value-of select="marc:subfield[@code='y']"/>
2994 <xsl:template name="subtitle">
2995 <xsl:if test="marc:subfield[@code='b']">
2997 <xsl:call-template name="chopPunctuation">
2998 <xsl:with-param name="chopString">
2999 <xsl:value-of select="marc:subfield[@code='b']"/>
3000 <!--<xsl:call-template name="subfieldSelect">
3001 <xsl:with-param name="codes">b</xsl:with-param>
3002 </xsl:call-template>-->
3004 </xsl:call-template>
3008 <xsl:template name="script">
3009 <xsl:param name="scriptCode"></xsl:param>
3010 <xsl:attribute name="script">
3012 <xsl:when test="$scriptCode='(3'">Arabic</xsl:when>
3013 <xsl:when test="$scriptCode='(B'">Latin</xsl:when>
3014 <xsl:when test="$scriptCode='$1'">Chinese, Japanese, Korean</xsl:when>
3015 <xsl:when test="$scriptCode='(N'">Cyrillic</xsl:when>
3016 <xsl:when test="$scriptCode='(2'">Hebrew</xsl:when>
3017 <xsl:when test="$scriptCode='(S'">Greek</xsl:when>
3021 <xsl:template name="parsePart">
3022 <!-- assumes 773$q= 1:2:3<4
3023 with up to 3 levels and one optional start page
3025 <xsl:variable name="level1">
3027 <xsl:when test="contains(text(),':')">
3029 <xsl:value-of select="substring-before(text(),':')"></xsl:value-of>
3031 <xsl:when test="not(contains(text(),':'))">
3033 <xsl:if test="contains(text(),'<')">
3035 <xsl:value-of select="substring-before(text(),'<')"></xsl:value-of>
3037 <xsl:if test="not(contains(text(),'<'))">
3039 <xsl:value-of select="text()"></xsl:value-of>
3044 <xsl:variable name="sici2">
3046 <xsl:when test="starts-with(substring-after(text(),$level1),':')">
3047 <xsl:value-of select="substring(substring-after(text(),$level1),2)"></xsl:value-of>
3050 <xsl:value-of select="substring-after(text(),$level1)"></xsl:value-of>
3054 <xsl:variable name="level2">
3056 <xsl:when test="contains($sici2,':')">
3058 <xsl:value-of select="substring-before($sici2,':')"></xsl:value-of>
3060 <xsl:when test="contains($sici2,'<')">
3062 <xsl:value-of select="substring-before($sici2,'<')"></xsl:value-of>
3065 <xsl:value-of select="$sici2"></xsl:value-of>
3070 <xsl:variable name="sici3">
3072 <xsl:when test="starts-with(substring-after($sici2,$level2),':')">
3073 <xsl:value-of select="substring(substring-after($sici2,$level2),2)"></xsl:value-of>
3076 <xsl:value-of select="substring-after($sici2,$level2)"></xsl:value-of>
3080 <xsl:variable name="level3">
3082 <xsl:when test="contains($sici3,'<')">
3084 <xsl:value-of select="substring-before($sici3,'<')"></xsl:value-of>
3087 <xsl:value-of select="$sici3"></xsl:value-of>
3092 <xsl:variable name="page">
3093 <xsl:if test="contains(text(),'<')">
3094 <xsl:value-of select="substring-after(text(),'<')"></xsl:value-of>
3097 <xsl:if test="$level1">
3100 <xsl:value-of select="$level1"></xsl:value-of>
3104 <xsl:if test="$level2">
3107 <xsl:value-of select="$level2"></xsl:value-of>
3111 <xsl:if test="$level3">
3114 <xsl:value-of select="$level3"></xsl:value-of>
3118 <xsl:if test="$page">
3119 <extent unit="page">
3121 <xsl:value-of select="$page"></xsl:value-of>
3126 <xsl:template name="getLanguage">
3127 <xsl:param name="langString"></xsl:param>
3128 <xsl:param name="controlField008-35-37"></xsl:param>
3129 <xsl:variable name="length" select="string-length($langString)"></xsl:variable>
3131 <xsl:when test="$length=0"></xsl:when>
3132 <xsl:when test="$controlField008-35-37=substring($langString,1,3)">
3133 <xsl:call-template name="getLanguage">
3134 <xsl:with-param name="langString" select="substring($langString,4,$length)"></xsl:with-param>
3135 <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"></xsl:with-param>
3136 </xsl:call-template>
3140 <languageTerm authority="iso639-2b" type="code">
3141 <xsl:value-of select="substring($langString,1,3)"></xsl:value-of>
3144 <xsl:call-template name="getLanguage">
3145 <xsl:with-param name="langString" select="substring($langString,4,$length)"></xsl:with-param>
3146 <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"></xsl:with-param>
3147 </xsl:call-template>
3151 <xsl:template name="isoLanguage">
3152 <xsl:param name="currentLanguage"></xsl:param>
3153 <xsl:param name="usedLanguages"></xsl:param>
3154 <xsl:param name="remainingLanguages"></xsl:param>
3156 <xsl:when test="string-length($currentLanguage)=0"></xsl:when>
3157 <xsl:when test="not(contains($usedLanguages, $currentLanguage))">
3159 <xsl:if test="@code!='a'">
3160 <xsl:attribute name="objectPart">
3162 <xsl:when test="@code='b'">summary or subtitle</xsl:when>
3163 <xsl:when test="@code='d'">sung or spoken text</xsl:when>
3164 <xsl:when test="@code='e'">libretto</xsl:when>
3165 <xsl:when test="@code='f'">table of contents</xsl:when>
3166 <xsl:when test="@code='g'">accompanying material</xsl:when>
3167 <xsl:when test="@code='h'">translation</xsl:when>
3171 <languageTerm authority="iso639-2b" type="code">
3172 <xsl:value-of select="$currentLanguage"></xsl:value-of>
3175 <xsl:call-template name="isoLanguage">
3176 <xsl:with-param name="currentLanguage">
3177 <xsl:value-of select="substring($remainingLanguages,1,3)"></xsl:value-of>
3179 <xsl:with-param name="usedLanguages">
3180 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"></xsl:value-of>
3182 <xsl:with-param name="remainingLanguages">
3183 <xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"></xsl:value-of>
3185 </xsl:call-template>
3188 <xsl:call-template name="isoLanguage">
3189 <xsl:with-param name="currentLanguage">
3190 <xsl:value-of select="substring($remainingLanguages,1,3)"></xsl:value-of>
3192 <xsl:with-param name="usedLanguages">
3193 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"></xsl:value-of>
3195 <xsl:with-param name="remainingLanguages">
3196 <xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"></xsl:value-of>
3198 </xsl:call-template>
3202 <xsl:template name="chopBrackets">
3203 <xsl:param name="chopString"></xsl:param>
3204 <xsl:variable name="string">
3205 <xsl:call-template name="chopPunctuation">
3206 <xsl:with-param name="chopString" select="$chopString"></xsl:with-param>
3207 </xsl:call-template>
3209 <xsl:if test="substring($string, 1,1)='['">
3210 <xsl:value-of select="substring($string,2, string-length($string)-2)"></xsl:value-of>
3212 <xsl:if test="substring($string, 1,1)!='['">
3213 <xsl:value-of select="$string"></xsl:value-of>
3216 <xsl:template name="rfcLanguages">
3217 <xsl:param name="nodeNum"></xsl:param>
3218 <xsl:param name="usedLanguages"></xsl:param>
3219 <xsl:param name="controlField008-35-37"></xsl:param>
3220 <xsl:variable name="currentLanguage" select="."></xsl:variable>
3222 <xsl:when test="not($currentLanguage)"></xsl:when>
3223 <xsl:when test="$currentLanguage!=$controlField008-35-37 and $currentLanguage!='rfc3066'">
3224 <xsl:if test="not(contains($usedLanguages,$currentLanguage))">
3226 <xsl:if test="@code!='a'">
3227 <xsl:attribute name="objectPart">
3229 <xsl:when test="@code='b'">summary or subtitle</xsl:when>
3230 <xsl:when test="@code='d'">sung or spoken text</xsl:when>
3231 <xsl:when test="@code='e'">libretto</xsl:when>
3232 <xsl:when test="@code='f'">table of contents</xsl:when>
3233 <xsl:when test="@code='g'">accompanying material</xsl:when>
3234 <xsl:when test="@code='h'">translation</xsl:when>
3238 <languageTerm authority="rfc3066" type="code">
3239 <xsl:value-of select="$currentLanguage"/>
3248 <xsl:template name="datafield">
3249 <xsl:param name="tag"/>
3250 <xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param>
3251 <xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param>
3252 <xsl:param name="subfields"/>
3253 <xsl:element name="marc:datafield">
3254 <xsl:attribute name="tag">
3255 <xsl:value-of select="$tag"/>
3257 <xsl:attribute name="ind1">
3258 <xsl:value-of select="$ind1"/>
3260 <xsl:attribute name="ind2">
3261 <xsl:value-of select="$ind2"/>
3263 <xsl:copy-of select="$subfields"/>
3267 <xsl:template name="subfieldSelect">
3268 <xsl:param name="codes"/>
3269 <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
3270 <xsl:variable name="str">
3271 <xsl:for-each select="marc:subfield">
3272 <xsl:if test="contains($codes, @code)">
3273 <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
3277 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
3280 <xsl:template name="buildSpaces">
3281 <xsl:param name="spaces"/>
3282 <xsl:param name="char"><xsl:text> </xsl:text></xsl:param>
3283 <xsl:if test="$spaces>0">
3284 <xsl:value-of select="$char"/>
3285 <xsl:call-template name="buildSpaces">
3286 <xsl:with-param name="spaces" select="$spaces - 1"/>
3287 <xsl:with-param name="char" select="$char"/>
3288 </xsl:call-template>
3292 <xsl:template name="chopPunctuation">
3293 <xsl:param name="chopString"/>
3294 <xsl:param name="punctuation"><xsl:text>.:,;/ </xsl:text></xsl:param>
3295 <xsl:variable name="length" select="string-length($chopString)"/>
3297 <xsl:when test="$length=0"/>
3298 <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
3299 <xsl:call-template name="chopPunctuation">
3300 <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
3301 <xsl:with-param name="punctuation" select="$punctuation"/>
3302 </xsl:call-template>
3304 <xsl:when test="not($chopString)"/>
3305 <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
3309 <xsl:template name="chopPunctuationFront">
3310 <xsl:param name="chopString"/>
3311 <xsl:variable name="length" select="string-length($chopString)"/>
3313 <xsl:when test="$length=0"/>
3314 <xsl:when test="contains('.:,;/[ ', substring($chopString,1,1))">
3315 <xsl:call-template name="chopPunctuationFront">
3316 <xsl:with-param name="chopString" select="substring($chopString,2,$length - 1)"/>
3317 </xsl:call-template>
3319 <xsl:when test="not($chopString)"/>
3320 <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
3323 </xsl:stylesheet>$XXXX$ where name = $$mods32$$;
3325 update config.xml_transform set xslt = $XXXX$<xsl:stylesheet xmlns="http://www.loc.gov/mods/v3" xmlns:marc="http://www.loc.gov/MARC21/slim"
3326 xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3327 exclude-result-prefixes="xlink marc" version="1.0">
3328 <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
3330 <xsl:variable name="ascii">
3331 <xsl:text> !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~</xsl:text>
3334 <xsl:variable name="latin1">
3335 <xsl:text> ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ</xsl:text>
3337 <!-- Characters that usually don't need to be escaped -->
3338 <xsl:variable name="safe">
3339 <xsl:text>!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~</xsl:text>
3342 <xsl:variable name="hex">0123456789ABCDEF</xsl:variable>
3344 <!-- Evergreen specific: revert Revision 1.23, so we can have those authority xlink attributes back. -->
3346 <!--MARC21slim2MODS3-3.xsl
3347 Revision 1.27 - Mapped 648 to <subject> 2009/03/13 tmee
3348 Revision 1.26 - Added subfield $s mapping for 130/240/730 2008/10/16 tmee
3349 Revision 1.25 - Mapped 040e to <descriptiveStandard> and Leader/18 to <descriptive standard>aacr2 2008/09/18 tmee
3350 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
3351 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
3352 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
3353 Revision 1.21 - Mapped 856 ind2=1 or ind2=2 to <relatedItem><location><url> 2008/07/03 tmee
3354 Revision 1.20 - Added genre w/@auth="contents of 2" and type= "musical composition" 2008/07/01 tmee
3355 Revision 1.19 - Added genre offprint for 008/24+ BK code 2 2008/07/01 tmee
3356 Revision 1.18 - Added xlink/uri for subfield 0 for 130/240/730, 100/700, 110/710, 111/711 2008/06/26 tmee
3357 Revision 1.17 - Added mapping of 662 2008/05/14 tmee
3358 Revision 1.16 - Changed @authority from "marc" to "marcgt" for 007 and 008 codes mapped to a term in <genre> 2007/07/10 tmee
3359 Revision 1.15 - For field 630, moved call to part template outside title element 2007/07/10 tmee
3360 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
3361 Revision 1.13 - Changed order of output under cartographics to reflect schema 2006/11/28 tmee
3362 Revision 1.12 - Updated to reflect MODS 3.2 Mapping 2006/10/11 tmee
3363 Revision 1.11 - The attribute objectPart moved from <languageTerm> to <language> 2006/04/08 jrad
3364 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
3365 Revision 1.9 - Subfield $y was added to field 242 2004/09/02 10:57 jrad
3366 Revision 1.8 - Subject chopPunctuation expanded and attribute fixes 2004/08/12 jrad
3367 Revision 1.7 - 2004/03/25 08:29 jrad
3368 Revision 1.6 - Various validation fixes 2004/02/20 ntra
3369 Revision 1.5 - MODS2 to MODS3 updates, language unstacking and de-duping, chopPunctuation expanded 2003/10/02 16:18:58 ntra
3370 Revision 1.3 - Additional Changes not related to MODS Version 2.0 by ntra
3371 Revision 1.2 - Added Log Comment 2003/03/24 19:37:42 ckeith
3373 <xsl:template match="/">
3375 <xsl:when test="//marc:collection">
3376 <modsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3377 xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
3378 <xsl:for-each select="//marc:collection/marc:record">
3379 <mods version="3.3">
3380 <xsl:call-template name="marcRecord"/>
3386 <mods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"
3387 xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-2.xsd">
3388 <xsl:for-each select="//marc:record">
3389 <xsl:call-template name="marcRecord"/>
3395 <xsl:template name="marcRecord">
3396 <xsl:variable name="leader" select="marc:leader"/>
3397 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
3398 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
3399 <xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
3400 <xsl:variable name="typeOf008">
3402 <xsl:when test="$leader6='a'">
3405 test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
3406 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
3409 <xsl:when test="$leader6='t'">BK</xsl:when>
3410 <xsl:when test="$leader6='p'">MM</xsl:when>
3411 <xsl:when test="$leader6='m'">CF</xsl:when>
3412 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
3413 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
3414 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'"
3418 <xsl:for-each select="marc:datafield[@tag='245']">
3420 <xsl:variable name="title">
3422 <xsl:when test="marc:subfield[@code='b']">
3423 <xsl:call-template name="specialSubfieldSelect">
3424 <xsl:with-param name="axis">b</xsl:with-param>
3425 <xsl:with-param name="beforeCodes">afgk</xsl:with-param>
3426 </xsl:call-template>
3429 <xsl:call-template name="subfieldSelect">
3430 <xsl:with-param name="codes">abfgk</xsl:with-param>
3431 </xsl:call-template>
3435 <xsl:variable name="titleChop">
3436 <xsl:call-template name="chopPunctuation">
3437 <xsl:with-param name="chopString">
3438 <xsl:value-of select="$title"/>
3440 <xsl:with-param name="punctuation">
3441 <xsl:text>,;/ </xsl:text>
3443 </xsl:call-template>
3446 <xsl:when test="@ind2>0">
3448 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
3451 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
3456 <xsl:value-of select="$titleChop"/>
3460 <xsl:if test="marc:subfield[@code='b']">
3462 <xsl:call-template name="chopPunctuation">
3463 <xsl:with-param name="chopString">
3464 <xsl:call-template name="specialSubfieldSelect">
3465 <xsl:with-param name="axis">b</xsl:with-param>
3466 <xsl:with-param name="anyCodes">b</xsl:with-param>
3467 <xsl:with-param name="afterCodes">afgk</xsl:with-param>
3468 </xsl:call-template>
3470 </xsl:call-template>
3473 <xsl:call-template name="part"/>
3476 <xsl:for-each select="marc:datafield[@tag='210']">
3477 <titleInfo type="abbreviated">
3479 <xsl:call-template name="chopPunctuation">
3480 <xsl:with-param name="chopString">
3481 <xsl:call-template name="subfieldSelect">
3482 <xsl:with-param name="codes">a</xsl:with-param>
3483 </xsl:call-template>
3485 </xsl:call-template>
3487 <xsl:call-template name="subtitle"/>
3490 <xsl:for-each select="marc:datafield[@tag='242']">
3491 <titleInfo type="translated">
3492 <!--09/01/04 Added subfield $y-->
3493 <xsl:for-each select="marc:subfield[@code='y']">
3494 <xsl:attribute name="lang">
3495 <xsl:value-of select="text()"/>
3498 <xsl:for-each select="marc:subfield[@code='i']">
3499 <xsl:attribute name="displayLabel">
3500 <xsl:value-of select="text()"/>
3504 <xsl:call-template name="chopPunctuation">
3505 <xsl:with-param name="chopString">
3506 <xsl:call-template name="subfieldSelect">
3507 <!-- 1/04 removed $h, b -->
3508 <xsl:with-param name="codes">a</xsl:with-param>
3509 </xsl:call-template>
3511 </xsl:call-template>
3514 <xsl:call-template name="subtitle"/>
3515 <xsl:call-template name="part"/>
3518 <xsl:for-each select="marc:datafield[@tag='246']">
3519 <titleInfo type="alternative">
3520 <xsl:for-each select="marc:subfield[@code='i']">
3521 <xsl:attribute name="displayLabel">
3522 <xsl:value-of select="text()"/>
3526 <xsl:call-template name="chopPunctuation">
3527 <xsl:with-param name="chopString">
3528 <xsl:call-template name="subfieldSelect">
3529 <!-- 1/04 removed $h, $b -->
3530 <xsl:with-param name="codes">af</xsl:with-param>
3531 </xsl:call-template>
3533 </xsl:call-template>
3535 <xsl:call-template name="subtitle"/>
3536 <xsl:call-template name="part"/>
3540 select="marc:datafield[@tag='130']|marc:datafield[@tag='240']|marc:datafield[@tag='730'][@ind2!='2']">
3541 <titleInfo type="uniform">
3543 <xsl:call-template name="uri"/>
3545 <xsl:variable name="str">
3546 <xsl:for-each select="marc:subfield">
3548 test="(contains('adfklmors',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
3549 <xsl:value-of select="text()"/>
3550 <xsl:text> </xsl:text>
3554 <xsl:call-template name="chopPunctuation">
3555 <xsl:with-param name="chopString">
3556 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
3558 </xsl:call-template>
3560 <xsl:call-template name="part"/>
3563 <xsl:for-each select="marc:datafield[@tag='740'][@ind2!='2']">
3564 <titleInfo type="alternative">
3566 <xsl:call-template name="chopPunctuation">
3567 <xsl:with-param name="chopString">
3568 <xsl:call-template name="subfieldSelect">
3569 <xsl:with-param name="codes">ah</xsl:with-param>
3570 </xsl:call-template>
3572 </xsl:call-template>
3574 <xsl:call-template name="part"/>
3577 <xsl:for-each select="marc:datafield[@tag='100']">
3578 <name type="personal">
3580 <xsl:call-template name="uri"/>
3582 <xsl:call-template name="nameABCDQ"/>
3583 <xsl:call-template name="affiliation"/>
3585 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
3587 <xsl:call-template name="role"/>
3590 <xsl:for-each select="marc:datafield[@tag='110']">
3591 <name type="corporate">
3593 <xsl:call-template name="uri"/>
3595 <xsl:call-template name="nameABCDN"/>
3597 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
3599 <xsl:call-template name="role"/>
3602 <xsl:for-each select="marc:datafield[@tag='111']">
3603 <name type="conference">
3605 <xsl:call-template name="uri"/>
3607 <xsl:call-template name="nameACDEQ"/>
3609 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
3611 <xsl:call-template name="role"/>
3614 <xsl:for-each select="marc:datafield[@tag='700'][not(marc:subfield[@code='t'])]">
3615 <name type="personal">
3617 <xsl:call-template name="uri"/>
3619 <xsl:call-template name="nameABCDQ"/>
3620 <xsl:call-template name="affiliation"/>
3621 <xsl:call-template name="role"/>
3624 <xsl:for-each select="marc:datafield[@tag='710'][not(marc:subfield[@code='t'])]">
3625 <name type="corporate">
3627 <xsl:call-template name="uri"/>
3629 <xsl:call-template name="nameABCDN"/>
3630 <xsl:call-template name="role"/>
3633 <xsl:for-each select="marc:datafield[@tag='711'][not(marc:subfield[@code='t'])]">
3634 <name type="conference">
3636 <xsl:call-template name="uri"/>
3638 <xsl:call-template name="nameACDEQ"/>
3639 <xsl:call-template name="role"/>
3642 <xsl:for-each select="marc:datafield[@tag='720'][not(marc:subfield[@code='t'])]">
3644 <xsl:if test="@ind1=1">
3645 <xsl:attribute name="type">
3646 <xsl:text>personal</xsl:text>
3650 <xsl:value-of select="marc:subfield[@code='a']"/>
3652 <xsl:call-template name="role"/>
3656 <xsl:if test="$leader7='c'">
3657 <xsl:attribute name="collection">yes</xsl:attribute>
3659 <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
3660 <xsl:attribute name="manuscript">yes</xsl:attribute>
3663 <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
3664 <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
3665 <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
3666 <xsl:when test="$leader6='i'">sound recording-nonmusical</xsl:when>
3667 <xsl:when test="$leader6='j'">sound recording-musical</xsl:when>
3668 <xsl:when test="$leader6='k'">still image</xsl:when>
3669 <xsl:when test="$leader6='g'">moving image</xsl:when>
3670 <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
3671 <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
3672 <xsl:when test="$leader6='p'">mixed material</xsl:when>
3675 <xsl:if test="substring($controlField008,26,1)='d'">
3676 <genre authority="marcgt">globe</genre>
3679 test="marc:controlfield[@tag='007'][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
3680 <genre authority="marcgt">remote-sensing image</genre>
3682 <xsl:if test="$typeOf008='MP'">
3683 <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"/>
3686 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']">
3687 <genre authority="marcgt">map</genre>
3690 test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
3691 <genre authority="marcgt">atlas</genre>
3695 <xsl:if test="$typeOf008='SE'">
3696 <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"/>
3698 <xsl:when test="$controlField008-21='d'">
3699 <genre authority="marcgt">database</genre>
3701 <xsl:when test="$controlField008-21='l'">
3702 <genre authority="marcgt">loose-leaf</genre>
3704 <xsl:when test="$controlField008-21='m'">
3705 <genre authority="marcgt">series</genre>
3707 <xsl:when test="$controlField008-21='n'">
3708 <genre authority="marcgt">newspaper</genre>
3710 <xsl:when test="$controlField008-21='p'">
3711 <genre authority="marcgt">periodical</genre>
3713 <xsl:when test="$controlField008-21='w'">
3714 <genre authority="marcgt">web site</genre>
3718 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
3719 <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"/>
3721 <xsl:when test="contains($controlField008-24,'a')">
3722 <genre authority="marcgt">abstract or summary</genre>
3724 <xsl:when test="contains($controlField008-24,'b')">
3725 <genre authority="marcgt">bibliography</genre>
3727 <xsl:when test="contains($controlField008-24,'c')">
3728 <genre authority="marcgt">catalog</genre>
3730 <xsl:when test="contains($controlField008-24,'d')">
3731 <genre authority="marcgt">dictionary</genre>
3733 <xsl:when test="contains($controlField008-24,'e')">
3734 <genre authority="marcgt">encyclopedia</genre>
3736 <xsl:when test="contains($controlField008-24,'f')">
3737 <genre authority="marcgt">handbook</genre>
3739 <xsl:when test="contains($controlField008-24,'g')">
3740 <genre authority="marcgt">legal article</genre>
3742 <xsl:when test="contains($controlField008-24,'i')">
3743 <genre authority="marcgt">index</genre>
3745 <xsl:when test="contains($controlField008-24,'k')">
3746 <genre authority="marcgt">discography</genre>
3748 <xsl:when test="contains($controlField008-24,'l')">
3749 <genre authority="marcgt">legislation</genre>
3751 <xsl:when test="contains($controlField008-24,'m')">
3752 <genre authority="marcgt">theses</genre>
3754 <xsl:when test="contains($controlField008-24,'n')">
3755 <genre authority="marcgt">survey of literature</genre>
3757 <xsl:when test="contains($controlField008-24,'o')">
3758 <genre authority="marcgt">review</genre>
3760 <xsl:when test="contains($controlField008-24,'p')">
3761 <genre authority="marcgt">programmed text</genre>
3763 <xsl:when test="contains($controlField008-24,'q')">
3764 <genre authority="marcgt">filmography</genre>
3766 <xsl:when test="contains($controlField008-24,'r')">
3767 <genre authority="marcgt">directory</genre>
3769 <xsl:when test="contains($controlField008-24,'s')">
3770 <genre authority="marcgt">statistics</genre>
3772 <xsl:when test="contains($controlField008-24,'t')">
3773 <genre authority="marcgt">technical report</genre>
3775 <xsl:when test="contains($controlField008-24,'v')">
3776 <genre authority="marcgt">legal case and case notes</genre>
3778 <xsl:when test="contains($controlField008-24,'w')">
3779 <genre authority="marcgt">law report or digest</genre>
3781 <xsl:when test="contains($controlField008-24,'z')">
3782 <genre authority="marcgt">treaty</genre>
3785 <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
3787 <xsl:when test="$controlField008-29='1'">
3788 <genre authority="marcgt">conference publication</genre>
3792 <xsl:if test="$typeOf008='CF'">
3793 <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"/>
3795 <xsl:when test="$controlField008-26='a'">
3796 <genre authority="marcgt">numeric data</genre>
3798 <xsl:when test="$controlField008-26='e'">
3799 <genre authority="marcgt">database</genre>
3801 <xsl:when test="$controlField008-26='f'">
3802 <genre authority="marcgt">font</genre>
3804 <xsl:when test="$controlField008-26='g'">
3805 <genre authority="marcgt">game</genre>
3809 <xsl:if test="$typeOf008='BK'">
3810 <xsl:if test="substring($controlField008,25,1)='j'">
3811 <genre authority="marcgt">patent</genre>
3813 <xsl:if test="substring($controlField008,25,1)='2'">
3814 <genre authority="marcgt">offprint</genre>
3816 <xsl:if test="substring($controlField008,31,1)='1'">
3817 <genre authority="marcgt">festschrift</genre>
3819 <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"/>
3821 test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
3822 <genre authority="marcgt">biography</genre>
3824 <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
3826 <xsl:when test="$controlField008-33='e'">
3827 <genre authority="marcgt">essay</genre>
3829 <xsl:when test="$controlField008-33='d'">
3830 <genre authority="marcgt">drama</genre>
3832 <xsl:when test="$controlField008-33='c'">
3833 <genre authority="marcgt">comic strip</genre>
3835 <xsl:when test="$controlField008-33='l'">
3836 <genre authority="marcgt">fiction</genre>
3838 <xsl:when test="$controlField008-33='h'">
3839 <genre authority="marcgt">humor, satire</genre>
3841 <xsl:when test="$controlField008-33='i'">
3842 <genre authority="marcgt">letter</genre>
3844 <xsl:when test="$controlField008-33='f'">
3845 <genre authority="marcgt">novel</genre>
3847 <xsl:when test="$controlField008-33='j'">
3848 <genre authority="marcgt">short story</genre>
3850 <xsl:when test="$controlField008-33='s'">
3851 <genre authority="marcgt">speech</genre>
3855 <xsl:if test="$typeOf008='MU'">
3856 <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"/>
3857 <xsl:if test="contains($controlField008-30-31,'b')">
3858 <genre authority="marcgt">biography</genre>
3860 <xsl:if test="contains($controlField008-30-31,'c')">
3861 <genre authority="marcgt">conference publication</genre>
3863 <xsl:if test="contains($controlField008-30-31,'d')">
3864 <genre authority="marcgt">drama</genre>
3866 <xsl:if test="contains($controlField008-30-31,'e')">
3867 <genre authority="marcgt">essay</genre>
3869 <xsl:if test="contains($controlField008-30-31,'f')">
3870 <genre authority="marcgt">fiction</genre>
3872 <xsl:if test="contains($controlField008-30-31,'o')">
3873 <genre authority="marcgt">folktale</genre>
3875 <xsl:if test="contains($controlField008-30-31,'h')">
3876 <genre authority="marcgt">history</genre>
3878 <xsl:if test="contains($controlField008-30-31,'k')">
3879 <genre authority="marcgt">humor, satire</genre>
3881 <xsl:if test="contains($controlField008-30-31,'m')">
3882 <genre authority="marcgt">memoir</genre>
3884 <xsl:if test="contains($controlField008-30-31,'p')">
3885 <genre authority="marcgt">poetry</genre>
3887 <xsl:if test="contains($controlField008-30-31,'r')">
3888 <genre authority="marcgt">rehearsal</genre>
3890 <xsl:if test="contains($controlField008-30-31,'g')">
3891 <genre authority="marcgt">reporting</genre>
3893 <xsl:if test="contains($controlField008-30-31,'s')">
3894 <genre authority="marcgt">sound</genre>
3896 <xsl:if test="contains($controlField008-30-31,'l')">
3897 <genre authority="marcgt">speech</genre>
3900 <xsl:if test="$typeOf008='VM'">
3901 <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
3903 <xsl:when test="$controlField008-33='a'">
3904 <genre authority="marcgt">art original</genre>
3906 <xsl:when test="$controlField008-33='b'">
3907 <genre authority="marcgt">kit</genre>
3909 <xsl:when test="$controlField008-33='c'">
3910 <genre authority="marcgt">art reproduction</genre>
3912 <xsl:when test="$controlField008-33='d'">
3913 <genre authority="marcgt">diorama</genre>
3915 <xsl:when test="$controlField008-33='f'">
3916 <genre authority="marcgt">filmstrip</genre>
3918 <xsl:when test="$controlField008-33='g'">
3919 <genre authority="marcgt">legal article</genre>
3921 <xsl:when test="$controlField008-33='i'">
3922 <genre authority="marcgt">picture</genre>
3924 <xsl:when test="$controlField008-33='k'">
3925 <genre authority="marcgt">graphic</genre>
3927 <xsl:when test="$controlField008-33='l'">
3928 <genre authority="marcgt">technical drawing</genre>
3930 <xsl:when test="$controlField008-33='m'">
3931 <genre authority="marcgt">motion picture</genre>
3933 <xsl:when test="$controlField008-33='n'">
3934 <genre authority="marcgt">chart</genre>
3936 <xsl:when test="$controlField008-33='o'">
3937 <genre authority="marcgt">flash card</genre>
3939 <xsl:when test="$controlField008-33='p'">
3940 <genre authority="marcgt">microscope slide</genre>
3943 test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
3944 <genre authority="marcgt">model</genre>
3946 <xsl:when test="$controlField008-33='r'">
3947 <genre authority="marcgt">realia</genre>
3949 <xsl:when test="$controlField008-33='s'">
3950 <genre authority="marcgt">slide</genre>
3952 <xsl:when test="$controlField008-33='t'">
3953 <genre authority="marcgt">transparency</genre>
3955 <xsl:when test="$controlField008-33='v'">
3956 <genre authority="marcgt">videorecording</genre>
3958 <xsl:when test="$controlField008-33='w'">
3959 <genre authority="marcgt">toy</genre>
3964 <!-- 1.20 047 genre tmee-->
3966 <xsl:for-each select="marc:datafield[@tag=047]">
3967 <genre authority="marcgt">
3968 <xsl:attribute name="authority">
3969 <xsl:value-of select="marc:subfield[@code='2']"/>
3971 <xsl:call-template name="subfieldSelect">
3972 <xsl:with-param name="codes">abcdef</xsl:with-param>
3973 <xsl:with-param name="delimeter">-</xsl:with-param>
3974 </xsl:call-template>
3977 <xsl:for-each select="marc:datafield[@tag=655]">
3978 <genre authority="marcgt">
3979 <xsl:attribute name="authority">
3980 <xsl:value-of select="marc:subfield[@code='2']"/>
3982 <xsl:call-template name="subfieldSelect">
3983 <xsl:with-param name="codes">abvxyz</xsl:with-param>
3984 <xsl:with-param name="delimeter">-</xsl:with-param>
3985 </xsl:call-template>
3989 <xsl:variable name="MARCpublicationCode"
3990 select="normalize-space(substring($controlField008,16,3))"/>
3991 <xsl:if test="translate($MARCpublicationCode,'|','')">
3994 <xsl:attribute name="type">code</xsl:attribute>
3995 <xsl:attribute name="authority">marccountry</xsl:attribute>
3996 <xsl:value-of select="$MARCpublicationCode"/>
4000 <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
4003 <xsl:attribute name="type">code</xsl:attribute>
4004 <xsl:attribute name="authority">iso3166</xsl:attribute>
4005 <xsl:value-of select="."/>
4009 <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a']">
4012 <xsl:attribute name="type">text</xsl:attribute>
4013 <xsl:call-template name="chopPunctuationFront">
4014 <xsl:with-param name="chopString">
4015 <xsl:call-template name="chopPunctuation">
4016 <xsl:with-param name="chopString" select="."/>
4017 </xsl:call-template>
4019 </xsl:call-template>
4023 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='m']">
4024 <dateValid point="start">
4025 <xsl:value-of select="."/>
4028 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='n']">
4029 <dateValid point="end">
4030 <xsl:value-of select="."/>
4033 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='j']">
4035 <xsl:value-of select="."/>
4039 select="marc:datafield[@tag=260]/marc:subfield[@code='b' or @code='c' or @code='g']">
4041 <xsl:when test="@code='b'">
4043 <xsl:call-template name="chopPunctuation">
4044 <xsl:with-param name="chopString" select="."/>
4045 <xsl:with-param name="punctuation">
4046 <xsl:text>:,;/ </xsl:text>
4048 </xsl:call-template>
4051 <xsl:when test="@code='c'">
4053 <xsl:call-template name="chopPunctuation">
4054 <xsl:with-param name="chopString" select="."/>
4055 </xsl:call-template>
4058 <xsl:when test="@code='g'">
4060 <xsl:value-of select="."/>
4065 <xsl:variable name="dataField260c">
4066 <xsl:call-template name="chopPunctuation">
4067 <xsl:with-param name="chopString"
4068 select="marc:datafield[@tag=260]/marc:subfield[@code='c']"/>
4069 </xsl:call-template>
4071 <xsl:variable name="controlField008-7-10"
4072 select="normalize-space(substring($controlField008, 8, 4))"/>
4073 <xsl:variable name="controlField008-11-14"
4074 select="normalize-space(substring($controlField008, 12, 4))"/>
4075 <xsl:variable name="controlField008-6"
4076 select="normalize-space(substring($controlField008, 7, 1))"/>
4078 test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
4079 <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
4080 <dateIssued encoding="marc">
4081 <xsl:value-of select="$controlField008-7-10"/>
4086 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'">
4087 <xsl:if test="$controlField008-7-10">
4088 <dateIssued encoding="marc" point="start">
4089 <xsl:value-of select="$controlField008-7-10"/>
4094 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'">
4095 <xsl:if test="$controlField008-11-14">
4096 <dateIssued encoding="marc" point="end">
4097 <xsl:value-of select="$controlField008-11-14"/>
4101 <xsl:if test="$controlField008-6='q'">
4102 <xsl:if test="$controlField008-7-10">
4103 <dateIssued encoding="marc" point="start" qualifier="questionable">
4104 <xsl:value-of select="$controlField008-7-10"/>
4108 <xsl:if test="$controlField008-6='q'">
4109 <xsl:if test="$controlField008-11-14">
4110 <dateIssued encoding="marc" point="end" qualifier="questionable">
4111 <xsl:value-of select="$controlField008-11-14"/>
4115 <xsl:if test="$controlField008-6='t'">
4116 <xsl:if test="$controlField008-11-14">
4117 <copyrightDate encoding="marc">
4118 <xsl:value-of select="$controlField008-11-14"/>
4123 select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
4124 <dateCaptured encoding="iso8601">
4125 <xsl:value-of select="."/>
4128 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
4129 <dateCaptured encoding="iso8601" point="start">
4130 <xsl:value-of select="."/>
4133 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
4134 <dateCaptured encoding="iso8601" point="end">
4135 <xsl:value-of select="."/>
4138 <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
4140 <xsl:value-of select="."/>
4143 <xsl:for-each select="marc:leader">
4147 test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'"
4148 >monographic</xsl:when>
4149 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'"
4150 >continuing</xsl:when>
4154 <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
4156 <xsl:call-template name="subfieldSelect">
4157 <xsl:with-param name="codes">ab</xsl:with-param>
4158 </xsl:call-template>
4162 <xsl:variable name="controlField008-35-37"
4163 select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"/>
4164 <xsl:if test="$controlField008-35-37">
4166 <languageTerm authority="iso639-2b" type="code">
4167 <xsl:value-of select="substring($controlField008,36,3)"/>
4171 <xsl:for-each select="marc:datafield[@tag=041]">
4173 select="marc:subfield[@code='a' or @code='b' or @code='d' or @code='e' or @code='f' or @code='g' or @code='h']">
4174 <xsl:variable name="langCodes" select="."/>
4176 <xsl:when test="../marc:subfield[@code='2']='rfc3066'">
4177 <!-- not stacked but could be repeated -->
4178 <xsl:call-template name="rfcLanguages">
4179 <xsl:with-param name="nodeNum">
4180 <xsl:value-of select="1"/>
4182 <xsl:with-param name="usedLanguages">
4185 <xsl:with-param name="controlField008-35-37">
4186 <xsl:value-of select="$controlField008-35-37"/>
4188 </xsl:call-template>
4192 <xsl:variable name="allLanguages">
4193 <xsl:copy-of select="$langCodes"/>
4195 <xsl:variable name="currentLanguage">
4196 <xsl:value-of select="substring($allLanguages,1,3)"/>
4198 <xsl:call-template name="isoLanguage">
4199 <xsl:with-param name="currentLanguage">
4200 <xsl:value-of select="substring($allLanguages,1,3)"/>
4202 <xsl:with-param name="remainingLanguages">
4204 select="substring($allLanguages,4,string-length($allLanguages)-3)"
4207 <xsl:with-param name="usedLanguages">
4208 <xsl:if test="$controlField008-35-37">
4209 <xsl:value-of select="$controlField008-35-37"/>
4212 </xsl:call-template>
4217 <xsl:variable name="physicalDescription">
4218 <!--3.2 change tmee 007/11 -->
4219 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a']">
4220 <digitalOrigin>reformatted digital</digitalOrigin>
4222 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='b']">
4223 <digitalOrigin>digitized microfilm</digitalOrigin>
4225 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='d']">
4226 <digitalOrigin>digitized other analog</digitalOrigin>
4228 <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"/>
4229 <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
4230 <xsl:variable name="check008-23">
4232 test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
4233 <xsl:value-of select="true()"/>
4236 <xsl:variable name="check008-29">
4237 <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
4238 <xsl:value-of select="true()"/>
4243 test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
4244 <form authority="marcform">braille</form>
4247 test="($controlField008-23=' ' and ($leader6='c' or $leader6='d')) or (($typeOf008='BK' or $typeOf008='SE') and ($controlField008-23=' ' or $controlField008='r'))">
4248 <form authority="marcform">print</form>
4251 test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
4252 <form authority="marcform">electronic</form>
4255 test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
4256 <form authority="marcform">microfiche</form>
4259 test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
4260 <form authority="marcform">microfilm</form>
4264 <xsl:if test="marc:datafield[@tag=130]/marc:subfield[@code='h']">
4265 <form authority="gmd">
4266 <xsl:call-template name="chopBrackets">
4267 <xsl:with-param name="chopString">
4268 <xsl:value-of select="marc:datafield[@tag=130]/marc:subfield[@code='h']"
4271 </xsl:call-template>
4274 <xsl:if test="marc:datafield[@tag=240]/marc:subfield[@code='h']">
4275 <form authority="gmd">
4276 <xsl:call-template name="chopBrackets">
4277 <xsl:with-param name="chopString">
4278 <xsl:value-of select="marc:datafield[@tag=240]/marc:subfield[@code='h']"
4281 </xsl:call-template>
4284 <xsl:if test="marc:datafield[@tag=242]/marc:subfield[@code='h']">
4285 <form authority="gmd">
4286 <xsl:call-template name="chopBrackets">
4287 <xsl:with-param name="chopString">
4288 <xsl:value-of select="marc:datafield[@tag=242]/marc:subfield[@code='h']"
4291 </xsl:call-template>
4294 <xsl:if test="marc:datafield[@tag=245]/marc:subfield[@code='h']">
4295 <form authority="gmd">
4296 <xsl:call-template name="chopBrackets">
4297 <xsl:with-param name="chopString">
4298 <xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='h']"
4301 </xsl:call-template>
4304 <xsl:if test="marc:datafield[@tag=246]/marc:subfield[@code='h']">
4305 <form authority="gmd">
4306 <xsl:call-template name="chopBrackets">
4307 <xsl:with-param name="chopString">
4308 <xsl:value-of select="marc:datafield[@tag=246]/marc:subfield[@code='h']"
4311 </xsl:call-template>
4314 <xsl:if test="marc:datafield[@tag=730]/marc:subfield[@code='h']">
4315 <form authority="gmd">
4316 <xsl:call-template name="chopBrackets">
4317 <xsl:with-param name="chopString">
4318 <xsl:value-of select="marc:datafield[@tag=730]/marc:subfield[@code='h']"
4321 </xsl:call-template>
4324 <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
4326 <xsl:value-of select="."/>
4329 <xsl:for-each select="marc:controlfield[@tag=007][substring(text(),1,1)='c']">
4331 <xsl:when test="substring(text(),14,1)='a'">
4332 <reformattingQuality>access</reformattingQuality>
4334 <xsl:when test="substring(text(),14,1)='p'">
4335 <reformattingQuality>preservation</reformattingQuality>
4337 <xsl:when test="substring(text(),14,1)='r'">
4338 <reformattingQuality>replacement</reformattingQuality>
4342 <!--3.2 change tmee 007/01 -->
4344 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='b']">
4345 <form authority="smd">chip cartridge</form>
4348 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='c']">
4349 <form authority="smd">computer optical disc cartridge</form>
4352 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='j']">
4353 <form authority="smd">magnetic disc</form>
4356 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='m']">
4357 <form authority="smd">magneto-optical disc</form>
4360 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='o']">
4361 <form authority="smd">optical disc</form>
4364 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='r']">
4365 <form authority="smd">remote</form>
4368 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='a']">
4369 <form authority="smd">tape cartridge</form>
4372 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='f']">
4373 <form authority="smd">tape cassette</form>
4376 test="marc:controlfield[@tag=007][substring(text(),1,1)='c'][substring(text(),2,1)='h']">
4377 <form authority="smd">tape reel</form>
4381 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='a']">
4382 <form authority="smd">celestial globe</form>
4385 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='e']">
4386 <form authority="smd">earth moon globe</form>
4389 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='b']">
4390 <form authority="smd">planetary or lunar globe</form>
4393 test="marc:controlfield[@tag=007][substring(text(),1,1)='d'][substring(text(),2,1)='c']">
4394 <form authority="smd">terrestrial globe</form>
4398 test="marc:controlfield[@tag=007][substring(text(),1,1)='o'][substring(text(),2,1)='o']">
4399 <form authority="smd">kit</form>
4403 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
4404 <form authority="smd">atlas</form>
4407 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='g']">
4408 <form authority="smd">diagram</form>
4411 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='j']">
4412 <form authority="smd">map</form>
4415 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
4416 <form authority="smd">model</form>
4419 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='k']">
4420 <form authority="smd">profile</form>
4423 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
4424 <form authority="smd">remote-sensing image</form>
4427 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='s']">
4428 <form authority="smd">section</form>
4431 test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='y']">
4432 <form authority="smd">view</form>
4436 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='a']">
4437 <form authority="smd">aperture card</form>
4440 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='e']">
4441 <form authority="smd">microfiche</form>
4444 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='f']">
4445 <form authority="smd">microfiche cassette</form>
4448 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='b']">
4449 <form authority="smd">microfilm cartridge</form>
4452 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='c']">
4453 <form authority="smd">microfilm cassette</form>
4456 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='d']">
4457 <form authority="smd">microfilm reel</form>
4460 test="marc:controlfield[@tag=007][substring(text(),1,1)='h'][substring(text(),2,1)='g']">
4461 <form authority="smd">microopaque</form>
4465 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='c']">
4466 <form authority="smd">film cartridge</form>
4469 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='f']">
4470 <form authority="smd">film cassette</form>
4473 test="marc:controlfield[@tag=007][substring(text(),1,1)='m'][substring(text(),2,1)='r']">
4474 <form authority="smd">film reel</form>
4478 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='n']">
4479 <form authority="smd">chart</form>
4482 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='c']">
4483 <form authority="smd">collage</form>
4486 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='d']">
4487 <form authority="smd">drawing</form>
4490 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='o']">
4491 <form authority="smd">flash card</form>
4494 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='e']">
4495 <form authority="smd">painting</form>
4498 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='f']">
4499 <form authority="smd">photomechanical print</form>
4502 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='g']">
4503 <form authority="smd">photonegative</form>
4506 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='h']">
4507 <form authority="smd">photoprint</form>
4510 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='i']">
4511 <form authority="smd">picture</form>
4514 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='j']">
4515 <form authority="smd">print</form>
4518 test="marc:controlfield[@tag=007][substring(text(),1,1)='k'][substring(text(),2,1)='l']">
4519 <form authority="smd">technical drawing</form>
4523 test="marc:controlfield[@tag=007][substring(text(),1,1)='q'][substring(text(),2,1)='q']">
4524 <form authority="smd">notated music</form>
4528 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='d']">
4529 <form authority="smd">filmslip</form>
4532 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='c']">
4533 <form authority="smd">filmstrip cartridge</form>
4536 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='o']">
4537 <form authority="smd">filmstrip roll</form>
4540 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='f']">
4541 <form authority="smd">other filmstrip type</form>
4544 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='s']">
4545 <form authority="smd">slide</form>
4548 test="marc:controlfield[@tag=007][substring(text(),1,1)='g'][substring(text(),2,1)='t']">
4549 <form authority="smd">transparency</form>
4552 test="marc:controlfield[@tag=007][substring(text(),1,1)='r'][substring(text(),2,1)='r']">
4553 <form authority="smd">remote-sensing image</form>
4556 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='e']">
4557 <form authority="smd">cylinder</form>
4560 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='q']">
4561 <form authority="smd">roll</form>
4564 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='g']">
4565 <form authority="smd">sound cartridge</form>
4568 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='s']">
4569 <form authority="smd">sound cassette</form>
4572 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='d']">
4573 <form authority="smd">sound disc</form>
4576 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='t']">
4577 <form authority="smd">sound-tape reel</form>
4580 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='i']">
4581 <form authority="smd">sound-track film</form>
4584 test="marc:controlfield[@tag=007][substring(text(),1,1)='s'][substring(text(),2,1)='w']">
4585 <form authority="smd">wire recording</form>
4589 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='c']">
4590 <form authority="smd">braille</form>
4593 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='b']">
4594 <form authority="smd">combination</form>
4597 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='a']">
4598 <form authority="smd">moon</form>
4601 test="marc:controlfield[@tag=007][substring(text(),1,1)='f'][substring(text(),2,1)='d']">
4602 <form authority="smd">tactile, with no writing system</form>
4606 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='c']">
4607 <form authority="smd">braille</form>
4610 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='b']">
4611 <form authority="smd">large print</form>
4614 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='a']">
4615 <form authority="smd">regular print</form>
4618 test="marc:controlfield[@tag=007][substring(text(),1,1)='t'][substring(text(),2,1)='d']">
4619 <form authority="smd">text in looseleaf binder</form>
4623 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='c']">
4624 <form authority="smd">videocartridge</form>
4627 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='f']">
4628 <form authority="smd">videocassette</form>
4631 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='d']">
4632 <form authority="smd">videodisc</form>
4635 test="marc:controlfield[@tag=007][substring(text(),1,1)='v'][substring(text(),2,1)='r']">
4636 <form authority="smd">videoreel</form>
4640 select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)>1]">
4642 <xsl:value-of select="."/>
4643 </internetMediaType>
4645 <xsl:for-each select="marc:datafield[@tag=300]">
4647 <xsl:call-template name="subfieldSelect">
4648 <xsl:with-param name="codes">abce</xsl:with-param>
4649 </xsl:call-template>
4653 <xsl:if test="string-length(normalize-space($physicalDescription))">
4654 <physicalDescription>
4655 <xsl:copy-of select="$physicalDescription"/>
4656 </physicalDescription>
4658 <xsl:for-each select="marc:datafield[@tag=520]">
4660 <xsl:call-template name="uri"/>
4661 <xsl:call-template name="subfieldSelect">
4662 <xsl:with-param name="codes">ab</xsl:with-param>
4663 </xsl:call-template>
4666 <xsl:for-each select="marc:datafield[@tag=505]">
4668 <xsl:call-template name="uri"/>
4669 <xsl:call-template name="subfieldSelect">
4670 <xsl:with-param name="codes">agrt</xsl:with-param>
4671 </xsl:call-template>
4674 <xsl:for-each select="marc:datafield[@tag=521]">
4676 <xsl:call-template name="subfieldSelect">
4677 <xsl:with-param name="codes">ab</xsl:with-param>
4678 </xsl:call-template>
4681 <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
4682 <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"/>
4685 <xsl:when test="$controlField008-22='d'">
4686 <targetAudience authority="marctarget">adolescent</targetAudience>
4688 <xsl:when test="$controlField008-22='e'">
4689 <targetAudience authority="marctarget">adult</targetAudience>
4691 <xsl:when test="$controlField008-22='g'">
4692 <targetAudience authority="marctarget">general</targetAudience>
4695 test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
4696 <targetAudience authority="marctarget">juvenile</targetAudience>
4698 <xsl:when test="$controlField008-22='a'">
4699 <targetAudience authority="marctarget">preschool</targetAudience>
4701 <xsl:when test="$controlField008-22='f'">
4702 <targetAudience authority="marctarget">specialized</targetAudience>
4706 <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
4707 <note type="statement of responsibility">
4708 <xsl:value-of select="."/>
4711 <xsl:for-each select="marc:datafield[@tag=500]">
4713 <xsl:value-of select="marc:subfield[@code='a']"/>
4714 <xsl:call-template name="uri"/>
4718 <!--3.2 change tmee additional note fields-->
4720 <xsl:for-each select="marc:datafield[@tag=506]">
4721 <note type="restrictions">
4722 <xsl:call-template name="uri"/>
4723 <xsl:variable name="str">
4724 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4725 <xsl:value-of select="."/>
4726 <xsl:text> </xsl:text>
4729 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4733 <xsl:for-each select="marc:datafield[@tag=510]">
4734 <note type="citation/reference">
4735 <xsl:call-template name="uri"/>
4736 <xsl:variable name="str">
4737 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4738 <xsl:value-of select="."/>
4739 <xsl:text> </xsl:text>
4742 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4747 <xsl:for-each select="marc:datafield[@tag=511]">
4748 <note type="performers">
4749 <xsl:call-template name="uri"/>
4750 <xsl:value-of select="marc:subfield[@code='a']"/>
4753 <xsl:for-each select="marc:datafield[@tag=518]">
4755 <xsl:call-template name="uri"/>
4756 <xsl:value-of select="marc:subfield[@code='a']"/>
4760 <xsl:for-each select="marc:datafield[@tag=530]">
4761 <note type="additional physical form">
4762 <xsl:call-template name="uri"/>
4763 <xsl:variable name="str">
4764 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4765 <xsl:value-of select="."/>
4766 <xsl:text> </xsl:text>
4769 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4773 <xsl:for-each select="marc:datafield[@tag=533]">
4774 <note type="reproduction">
4775 <xsl:call-template name="uri"/>
4776 <xsl:variable name="str">
4777 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4778 <xsl:value-of select="."/>
4779 <xsl:text> </xsl:text>
4782 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4786 <xsl:for-each select="marc:datafield[@tag=534]">
4787 <note type="original version">
4788 <xsl:call-template name="uri"/>
4789 <xsl:variable name="str">
4790 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4791 <xsl:value-of select="."/>
4792 <xsl:text> </xsl:text>
4795 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4799 <xsl:for-each select="marc:datafield[@tag=538]">
4800 <note type="system details">
4801 <xsl:call-template name="uri"/>
4802 <xsl:variable name="str">
4803 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4804 <xsl:value-of select="."/>
4805 <xsl:text> </xsl:text>
4808 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4812 <xsl:for-each select="marc:datafield[@tag=583]">
4813 <note type="action">
4814 <xsl:call-template name="uri"/>
4815 <xsl:variable name="str">
4816 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4817 <xsl:value-of select="."/>
4818 <xsl:text> </xsl:text>
4821 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4826 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]">+
4828 <xsl:call-template name="uri"/>
4829 <xsl:variable name="str">
4830 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
4831 <xsl:value-of select="."/>
4832 <xsl:text> </xsl:text>
4835 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
4839 select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
4843 <xsl:call-template name="subfieldSelect">
4844 <xsl:with-param name="codes">defg</xsl:with-param>
4845 </xsl:call-template>
4850 <xsl:for-each select="marc:datafield[@tag=043]">
4852 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
4854 <xsl:attribute name="authority">
4855 <xsl:if test="@code='a'">
4856 <xsl:text>marcgac</xsl:text>
4858 <xsl:if test="@code='b'">
4859 <xsl:value-of select="following-sibling::marc:subfield[@code=2]"/>
4861 <xsl:if test="@code='c'">
4862 <xsl:text>iso3166</xsl:text>
4865 <xsl:value-of select="self::marc:subfield"/>
4870 <!-- tmee 2006/11/27 -->
4871 <xsl:for-each select="marc:datafield[@tag=255]">
4873 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
4875 <xsl:if test="@code='a'">
4877 <xsl:value-of select="."/>
4880 <xsl:if test="@code='b'">
4882 <xsl:value-of select="."/>
4885 <xsl:if test="@code='c'">
4887 <xsl:value-of select="."/>
4895 <xsl:apply-templates select="marc:datafield[653 >= @tag and @tag >= 600]"/>
4896 <xsl:apply-templates select="marc:datafield[@tag=656]"/>
4897 <xsl:for-each select="marc:datafield[@tag=752 or @tag=662]">
4899 <hierarchicalGeographic>
4900 <xsl:for-each select="marc:subfield[@code='a']">
4902 <xsl:call-template name="chopPunctuation">
4903 <xsl:with-param name="chopString" select="."/>
4904 </xsl:call-template>
4907 <xsl:for-each select="marc:subfield[@code='b']">
4909 <xsl:call-template name="chopPunctuation">
4910 <xsl:with-param name="chopString" select="."/>
4911 </xsl:call-template>
4914 <xsl:for-each select="marc:subfield[@code='c']">
4916 <xsl:call-template name="chopPunctuation">
4917 <xsl:with-param name="chopString" select="."/>
4918 </xsl:call-template>
4921 <xsl:for-each select="marc:subfield[@code='d']">
4923 <xsl:call-template name="chopPunctuation">
4924 <xsl:with-param name="chopString" select="."/>
4925 </xsl:call-template>
4928 <xsl:for-each select="marc:subfield[@code='e']">
4930 <xsl:call-template name="chopPunctuation">
4931 <xsl:with-param name="chopString" select="."/>
4932 </xsl:call-template>
4935 <xsl:for-each select="marc:subfield[@code='g']">
4937 <xsl:call-template name="chopPunctuation">
4938 <xsl:with-param name="chopString" select="."/>
4939 </xsl:call-template>
4942 <xsl:for-each select="marc:subfield[@code='h']">
4943 <extraterrestrialArea>
4944 <xsl:call-template name="chopPunctuation">
4945 <xsl:with-param name="chopString" select="."/>
4946 </xsl:call-template>
4947 </extraterrestrialArea>
4949 </hierarchicalGeographic>
4952 <xsl:for-each select="marc:datafield[@tag=045][marc:subfield[@code='b']]">
4955 <xsl:when test="@ind1=2">
4956 <temporal encoding="iso8601" point="start">
4957 <xsl:call-template name="chopPunctuation">
4958 <xsl:with-param name="chopString">
4959 <xsl:value-of select="marc:subfield[@code='b'][1]"/>
4961 </xsl:call-template>
4963 <temporal encoding="iso8601" point="end">
4964 <xsl:call-template name="chopPunctuation">
4965 <xsl:with-param name="chopString">
4966 <xsl:value-of select="marc:subfield[@code='b'][2]"/>
4968 </xsl:call-template>
4972 <xsl:for-each select="marc:subfield[@code='b']">
4973 <temporal encoding="iso8601">
4974 <xsl:call-template name="chopPunctuation">
4975 <xsl:with-param name="chopString" select="."/>
4976 </xsl:call-template>
4983 <xsl:for-each select="marc:datafield[@tag=050]">
4984 <xsl:for-each select="marc:subfield[@code='b']">
4985 <classification authority="lcc">
4986 <xsl:if test="../marc:subfield[@code='3']">
4987 <xsl:attribute name="displayLabel">
4988 <xsl:value-of select="../marc:subfield[@code='3']"/>
4991 <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"/>
4992 <xsl:text> </xsl:text>
4993 <xsl:value-of select="text()"/>
4997 select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
4998 <classification authority="lcc">
4999 <xsl:if test="../marc:subfield[@code='3']">
5000 <xsl:attribute name="displayLabel">
5001 <xsl:value-of select="../marc:subfield[@code='3']"/>
5004 <xsl:value-of select="text()"/>
5008 <xsl:for-each select="marc:datafield[@tag=082]">
5009 <classification authority="ddc">
5010 <xsl:if test="marc:subfield[@code='2']">
5011 <xsl:attribute name="edition">
5012 <xsl:value-of select="marc:subfield[@code='2']"/>
5015 <xsl:call-template name="subfieldSelect">
5016 <xsl:with-param name="codes">ab</xsl:with-param>
5017 </xsl:call-template>
5020 <xsl:for-each select="marc:datafield[@tag=080]">
5021 <classification authority="udc">
5022 <xsl:call-template name="subfieldSelect">
5023 <xsl:with-param name="codes">abx</xsl:with-param>
5024 </xsl:call-template>
5027 <xsl:for-each select="marc:datafield[@tag=060]">
5028 <classification authority="nlm">
5029 <xsl:call-template name="subfieldSelect">
5030 <xsl:with-param name="codes">ab</xsl:with-param>
5031 </xsl:call-template>
5034 <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
5035 <classification authority="sudocs">
5036 <xsl:value-of select="marc:subfield[@code='a']"/>
5039 <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
5040 <classification authority="candoc">
5041 <xsl:value-of select="marc:subfield[@code='a']"/>
5044 <xsl:for-each select="marc:datafield[@tag=086]">
5046 <xsl:attribute name="authority">
5047 <xsl:value-of select="marc:subfield[@code='2']"/>
5049 <xsl:value-of select="marc:subfield[@code='a']"/>
5052 <xsl:for-each select="marc:datafield[@tag=084]">
5054 <xsl:attribute name="authority">
5055 <xsl:value-of select="marc:subfield[@code='2']"/>
5057 <xsl:call-template name="subfieldSelect">
5058 <xsl:with-param name="codes">ab</xsl:with-param>
5059 </xsl:call-template>
5062 <xsl:for-each select="marc:datafield[@tag=440]">
5063 <relatedItem type="series">
5066 <xsl:call-template name="chopPunctuation">
5067 <xsl:with-param name="chopString">
5068 <xsl:call-template name="subfieldSelect">
5069 <xsl:with-param name="codes">av</xsl:with-param>
5070 </xsl:call-template>
5072 </xsl:call-template>
5074 <xsl:call-template name="part"/>
5078 <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
5079 <relatedItem type="series">
5082 <xsl:call-template name="chopPunctuation">
5083 <xsl:with-param name="chopString">
5084 <xsl:call-template name="subfieldSelect">
5085 <xsl:with-param name="codes">av</xsl:with-param>
5086 </xsl:call-template>
5088 </xsl:call-template>
5090 <xsl:call-template name="part"/>
5094 <xsl:for-each select="marc:datafield[@tag=510]">
5095 <relatedItem type="isReferencedBy">
5097 <xsl:call-template name="subfieldSelect">
5098 <xsl:with-param name="codes">abcx3</xsl:with-param>
5099 </xsl:call-template>
5103 <xsl:for-each select="marc:datafield[@tag=534]">
5104 <relatedItem type="original">
5105 <xsl:call-template name="relatedTitle"/>
5106 <xsl:call-template name="relatedName"/>
5107 <xsl:if test="marc:subfield[@code='b' or @code='c']">
5109 <xsl:for-each select="marc:subfield[@code='c']">
5111 <xsl:value-of select="."/>
5114 <xsl:for-each select="marc:subfield[@code='b']">
5116 <xsl:value-of select="."/>
5121 <xsl:call-template name="relatedIdentifierISSN"/>
5122 <xsl:for-each select="marc:subfield[@code='z']">
5123 <identifier type="isbn">
5124 <xsl:value-of select="."/>
5127 <xsl:call-template name="relatedNote"/>
5130 <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
5132 <xsl:call-template name="constituentOrRelatedType"/>
5135 <xsl:call-template name="chopPunctuation">
5136 <xsl:with-param name="chopString">
5137 <xsl:call-template name="specialSubfieldSelect">
5138 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5139 <xsl:with-param name="axis">t</xsl:with-param>
5140 <xsl:with-param name="afterCodes">g</xsl:with-param>
5141 </xsl:call-template>
5143 </xsl:call-template>
5145 <xsl:call-template name="part"/>
5147 <name type="personal">
5149 <xsl:call-template name="specialSubfieldSelect">
5150 <xsl:with-param name="anyCodes">aq</xsl:with-param>
5151 <xsl:with-param name="axis">t</xsl:with-param>
5152 <xsl:with-param name="beforeCodes">g</xsl:with-param>
5153 </xsl:call-template>
5155 <xsl:call-template name="termsOfAddress"/>
5156 <xsl:call-template name="nameDate"/>
5157 <xsl:call-template name="role"/>
5159 <xsl:call-template name="relatedForm"/>
5160 <xsl:call-template name="relatedIdentifierISSN"/>
5163 <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
5165 <xsl:call-template name="constituentOrRelatedType"/>
5168 <xsl:call-template name="chopPunctuation">
5169 <xsl:with-param name="chopString">
5170 <xsl:call-template name="specialSubfieldSelect">
5171 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5172 <xsl:with-param name="axis">t</xsl:with-param>
5173 <xsl:with-param name="afterCodes">dg</xsl:with-param>
5174 </xsl:call-template>
5176 </xsl:call-template>
5178 <xsl:call-template name="relatedPartNumName"/>
5180 <name type="corporate">
5181 <xsl:for-each select="marc:subfield[@code='a']">
5183 <xsl:value-of select="."/>
5186 <xsl:for-each select="marc:subfield[@code='b']">
5188 <xsl:value-of select="."/>
5191 <xsl:variable name="tempNamePart">
5192 <xsl:call-template name="specialSubfieldSelect">
5193 <xsl:with-param name="anyCodes">c</xsl:with-param>
5194 <xsl:with-param name="axis">t</xsl:with-param>
5195 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
5196 </xsl:call-template>
5198 <xsl:if test="normalize-space($tempNamePart)">
5200 <xsl:value-of select="$tempNamePart"/>
5203 <xsl:call-template name="role"/>
5205 <xsl:call-template name="relatedForm"/>
5206 <xsl:call-template name="relatedIdentifierISSN"/>
5209 <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
5211 <xsl:call-template name="constituentOrRelatedType"/>
5214 <xsl:call-template name="chopPunctuation">
5215 <xsl:with-param name="chopString">
5216 <xsl:call-template name="specialSubfieldSelect">
5217 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
5218 <xsl:with-param name="axis">t</xsl:with-param>
5219 <xsl:with-param name="afterCodes">g</xsl:with-param>
5220 </xsl:call-template>
5222 </xsl:call-template>
5224 <xsl:call-template name="relatedPartNumName"/>
5226 <name type="conference">
5228 <xsl:call-template name="specialSubfieldSelect">
5229 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
5230 <xsl:with-param name="axis">t</xsl:with-param>
5231 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
5232 </xsl:call-template>
5235 <xsl:call-template name="relatedForm"/>
5236 <xsl:call-template name="relatedIdentifierISSN"/>
5239 <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
5241 <xsl:call-template name="constituentOrRelatedType"/>
5244 <xsl:call-template name="chopPunctuation">
5245 <xsl:with-param name="chopString">
5246 <xsl:call-template name="subfieldSelect">
5247 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
5248 </xsl:call-template>
5250 </xsl:call-template>
5252 <xsl:call-template name="part"/>
5254 <xsl:call-template name="relatedForm"/>
5255 <xsl:call-template name="relatedIdentifierISSN"/>
5258 <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
5260 <xsl:call-template name="constituentOrRelatedType"/>
5263 <xsl:call-template name="chopPunctuation">
5264 <xsl:with-param name="chopString">
5265 <xsl:value-of select="marc:subfield[@code='a']"/>
5267 </xsl:call-template>
5269 <xsl:call-template name="part"/>
5271 <xsl:call-template name="relatedForm"/>
5274 <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
5275 <relatedItem type="series">
5276 <xsl:call-template name="relatedItem76X-78X"/>
5280 select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
5282 <xsl:call-template name="relatedItem76X-78X"/>
5285 <xsl:for-each select="marc:datafield[@tag=775]">
5286 <relatedItem type="otherVersion">
5287 <xsl:call-template name="relatedItem76X-78X"/>
5290 <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
5291 <relatedItem type="constituent">
5292 <xsl:call-template name="relatedItem76X-78X"/>
5295 <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
5296 <relatedItem type="host">
5297 <xsl:call-template name="relatedItem76X-78X"/>
5300 <xsl:for-each select="marc:datafield[@tag=776]">
5301 <relatedItem type="otherFormat">
5302 <xsl:call-template name="relatedItem76X-78X"/>
5305 <xsl:for-each select="marc:datafield[@tag=780]">
5306 <relatedItem type="preceding">
5307 <xsl:call-template name="relatedItem76X-78X"/>
5310 <xsl:for-each select="marc:datafield[@tag=785]">
5311 <relatedItem type="succeeding">
5312 <xsl:call-template name="relatedItem76X-78X"/>
5315 <xsl:for-each select="marc:datafield[@tag=786]">
5316 <relatedItem type="original">
5317 <xsl:call-template name="relatedItem76X-78X"/>
5320 <xsl:for-each select="marc:datafield[@tag=800]">
5321 <relatedItem type="series">
5324 <xsl:call-template name="chopPunctuation">
5325 <xsl:with-param name="chopString">
5326 <xsl:call-template name="specialSubfieldSelect">
5327 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5328 <xsl:with-param name="axis">t</xsl:with-param>
5329 <xsl:with-param name="afterCodes">g</xsl:with-param>
5330 </xsl:call-template>
5332 </xsl:call-template>
5334 <xsl:call-template name="part"/>
5336 <name type="personal">
5338 <xsl:call-template name="chopPunctuation">
5339 <xsl:with-param name="chopString">
5340 <xsl:call-template name="specialSubfieldSelect">
5341 <xsl:with-param name="anyCodes">aq</xsl:with-param>
5342 <xsl:with-param name="axis">t</xsl:with-param>
5343 <xsl:with-param name="beforeCodes">g</xsl:with-param>
5344 </xsl:call-template>
5346 </xsl:call-template>
5348 <xsl:call-template name="termsOfAddress"/>
5349 <xsl:call-template name="nameDate"/>
5350 <xsl:call-template name="role"/>
5352 <xsl:call-template name="relatedForm"/>
5355 <xsl:for-each select="marc:datafield[@tag=810]">
5356 <relatedItem type="series">
5359 <xsl:call-template name="chopPunctuation">
5360 <xsl:with-param name="chopString">
5361 <xsl:call-template name="specialSubfieldSelect">
5362 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
5363 <xsl:with-param name="axis">t</xsl:with-param>
5364 <xsl:with-param name="afterCodes">dg</xsl:with-param>
5365 </xsl:call-template>
5367 </xsl:call-template>
5369 <xsl:call-template name="relatedPartNumName"/>
5371 <name type="corporate">
5372 <xsl:for-each select="marc:subfield[@code='a']">
5374 <xsl:value-of select="."/>
5377 <xsl:for-each select="marc:subfield[@code='b']">
5379 <xsl:value-of select="."/>
5383 <xsl:call-template name="specialSubfieldSelect">
5384 <xsl:with-param name="anyCodes">c</xsl:with-param>
5385 <xsl:with-param name="axis">t</xsl:with-param>
5386 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
5387 </xsl:call-template>
5389 <xsl:call-template name="role"/>
5391 <xsl:call-template name="relatedForm"/>
5394 <xsl:for-each select="marc:datafield[@tag=811]">
5395 <relatedItem type="series">
5398 <xsl:call-template name="chopPunctuation">
5399 <xsl:with-param name="chopString">
5400 <xsl:call-template name="specialSubfieldSelect">
5401 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
5402 <xsl:with-param name="axis">t</xsl:with-param>
5403 <xsl:with-param name="afterCodes">g</xsl:with-param>
5404 </xsl:call-template>
5406 </xsl:call-template>
5408 <xsl:call-template name="relatedPartNumName"/>
5410 <name type="conference">
5412 <xsl:call-template name="specialSubfieldSelect">
5413 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
5414 <xsl:with-param name="axis">t</xsl:with-param>
5415 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
5416 </xsl:call-template>
5418 <xsl:call-template name="role"/>
5420 <xsl:call-template name="relatedForm"/>
5423 <xsl:for-each select="marc:datafield[@tag='830']">
5424 <relatedItem type="series">
5427 <xsl:call-template name="chopPunctuation">
5428 <xsl:with-param name="chopString">
5429 <xsl:call-template name="subfieldSelect">
5430 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
5431 </xsl:call-template>
5433 </xsl:call-template>
5435 <xsl:call-template name="part"/>
5437 <xsl:call-template name="relatedForm"/>
5440 <xsl:for-each select="marc:datafield[@tag='856'][@ind2='2']/marc:subfield[@code='q']">
5443 <xsl:value-of select="."/>
5444 </internetMediaType>
5447 <xsl:for-each select="marc:datafield[@tag='020']">
5448 <xsl:call-template name="isInvalid">
5449 <xsl:with-param name="type">isbn</xsl:with-param>
5450 </xsl:call-template>
5451 <xsl:if test="marc:subfield[@code='a']">
5452 <identifier type="isbn">
5453 <xsl:value-of select="marc:subfield[@code='a']"/>
5457 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='0']">
5458 <xsl:call-template name="isInvalid">
5459 <xsl:with-param name="type">isrc</xsl:with-param>
5460 </xsl:call-template>
5461 <xsl:if test="marc:subfield[@code='a']">
5462 <identifier type="isrc">
5463 <xsl:value-of select="marc:subfield[@code='a']"/>
5467 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='2']">
5468 <xsl:call-template name="isInvalid">
5469 <xsl:with-param name="type">ismn</xsl:with-param>
5470 </xsl:call-template>
5471 <xsl:if test="marc:subfield[@code='a']">
5472 <identifier type="ismn">
5473 <xsl:value-of select="marc:subfield[@code='a']"/>
5477 <xsl:for-each select="marc:datafield[@tag='024'][@ind1='4']">
5478 <xsl:call-template name="isInvalid">
5479 <xsl:with-param name="type">sici</xsl:with-param>
5480 </xsl:call-template>
5481 <identifier type="sici">
5482 <xsl:call-template name="subfieldSelect">
5483 <xsl:with-param name="codes">ab</xsl:with-param>
5484 </xsl:call-template>
5487 <xsl:for-each select="marc:datafield[@tag='022']">
5488 <xsl:if test="marc:subfield[@code='a']">
5489 <xsl:call-template name="isInvalid">
5490 <xsl:with-param name="type">issn</xsl:with-param>
5491 </xsl:call-template>
5492 <identifier type="issn">
5493 <xsl:value-of select="marc:subfield[@code='a']"/>
5496 <xsl:if test="marc:subfield[@code='l']">
5497 <xsl:call-template name="isInvalid">
5498 <xsl:with-param name="type">issn-l</xsl:with-param>
5499 </xsl:call-template>
5500 <identifier type="issn-l">
5501 <xsl:value-of select="marc:subfield[@code='l']"/>
5508 <xsl:for-each select="marc:datafield[@tag='010']">
5509 <xsl:call-template name="isInvalid">
5510 <xsl:with-param name="type">lccn</xsl:with-param>
5511 </xsl:call-template>
5512 <identifier type="lccn">
5513 <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
5516 <xsl:for-each select="marc:datafield[@tag='028']">
5518 <xsl:attribute name="type">
5520 <xsl:when test="@ind1='0'">issue number</xsl:when>
5521 <xsl:when test="@ind1='1'">matrix number</xsl:when>
5522 <xsl:when test="@ind1='2'">music plate</xsl:when>
5523 <xsl:when test="@ind1='3'">music publisher</xsl:when>
5524 <xsl:when test="@ind1='4'">videorecording identifier</xsl:when>
5527 <!--<xsl:call-template name="isInvalid"/>-->
5528 <!-- no $z in 028 -->
5529 <xsl:call-template name="subfieldSelect">
5530 <xsl:with-param name="codes">
5532 <xsl:when test="@ind1='0'">ba</xsl:when>
5533 <xsl:otherwise>ab</xsl:otherwise>
5536 </xsl:call-template>
5539 <xsl:for-each select="marc:datafield[@tag='037']">
5540 <identifier type="stock number">
5541 <!--<xsl:call-template name="isInvalid"/>-->
5542 <!-- no $z in 037 -->
5543 <xsl:call-template name="subfieldSelect">
5544 <xsl:with-param name="codes">ab</xsl:with-param>
5545 </xsl:call-template>
5548 <xsl:for-each select="marc:datafield[@tag='856'][marc:subfield[@code='u']]">
5550 <xsl:attribute name="type">
5553 test="starts-with(marc:subfield[@code='u'],'urn:doi') or starts-with(marc:subfield[@code='u'],'doi')"
5556 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')"
5558 <xsl:otherwise>uri</xsl:otherwise>
5563 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') ">
5565 select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"
5569 <xsl:value-of select="marc:subfield[@code='u']"/>
5574 test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl')">
5575 <identifier type="hdl">
5576 <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
5577 <xsl:attribute name="displayLabel">
5578 <xsl:call-template name="subfieldSelect">
5579 <xsl:with-param name="codes">y3z</xsl:with-param>
5580 </xsl:call-template>
5584 select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"
5589 <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]">
5590 <identifier type="upc">
5591 <xsl:call-template name="isInvalid"/>
5592 <xsl:value-of select="marc:subfield[@code='a']"/>
5596 <!-- 1/04 fix added $y -->
5599 <xsl:for-each select="marc:datafield[@tag=856][@ind2=1][marc:subfield[@code='u']]">
5600 <relatedItem type="otherVersion">
5603 <xsl:if test="marc:subfield[@code='y' or @code='3']">
5604 <xsl:attribute name="displayLabel">
5605 <xsl:call-template name="subfieldSelect">
5606 <xsl:with-param name="codes">y3</xsl:with-param>
5607 </xsl:call-template>
5610 <xsl:if test="marc:subfield[@code='z' ]">
5611 <xsl:attribute name="note">
5612 <xsl:call-template name="subfieldSelect">
5613 <xsl:with-param name="codes">z</xsl:with-param>
5614 </xsl:call-template>
5617 <xsl:value-of select="marc:subfield[@code='u']"/>
5622 <xsl:for-each select="marc:datafield[@tag=856][@ind2=2][marc:subfield[@code='u']]">
5626 <xsl:if test="marc:subfield[@code='y' or @code='3']">
5627 <xsl:attribute name="displayLabel">
5628 <xsl:call-template name="subfieldSelect">
5629 <xsl:with-param name="codes">y3</xsl:with-param>
5630 </xsl:call-template>
5633 <xsl:if test="marc:subfield[@code='z' ]">
5634 <xsl:attribute name="note">
5635 <xsl:call-template name="subfieldSelect">
5636 <xsl:with-param name="codes">z</xsl:with-param>
5637 </xsl:call-template>
5640 <xsl:value-of select="marc:subfield[@code='u']"/>
5646 <!-- 3.2 change tmee 856z -->
5649 <xsl:for-each select="marc:datafield[@tag=852]">
5651 <xsl:if test="marc:subfield[@code='a' or @code='b' or @code='e']">
5653 <xsl:call-template name="subfieldSelect">
5654 <xsl:with-param name="codes">abe</xsl:with-param>
5655 </xsl:call-template>
5659 <xsl:if test="marc:subfield[@code='u']">
5661 <xsl:call-template name="uri"/>
5662 <xsl:call-template name="subfieldSelect">
5663 <xsl:with-param name="codes">u</xsl:with-param>
5664 </xsl:call-template>
5669 test="marc:subfield[@code='h' or @code='i' or @code='j' or @code='k' or @code='l' or @code='m' or @code='t']">
5671 <xsl:call-template name="subfieldSelect">
5672 <xsl:with-param name="codes">hijklmt</xsl:with-param>
5673 </xsl:call-template>
5679 <xsl:for-each select="marc:datafield[@tag=506]">
5680 <accessCondition type="restrictionOnAccess">
5681 <xsl:call-template name="subfieldSelect">
5682 <xsl:with-param name="codes">abcd35</xsl:with-param>
5683 </xsl:call-template>
5686 <xsl:for-each select="marc:datafield[@tag=540]">
5687 <accessCondition type="useAndReproduction">
5688 <xsl:call-template name="subfieldSelect">
5689 <xsl:with-param name="codes">abcde35</xsl:with-param>
5690 </xsl:call-template>
5698 <xsl:for-each select="marc:leader[substring($leader,19,1)='a']">
5699 <descriptionStandard>aacr2</descriptionStandard>
5702 <xsl:for-each select="marc:datafield[@tag=040]">
5703 <xsl:if test="marc:subfield[@code='e']">
5704 <descriptionStandard>
5705 <xsl:value-of select="marc:subfield[@code='e']"/>
5706 </descriptionStandard>
5708 <recordContentSource authority="marcorg">
5709 <xsl:value-of select="marc:subfield[@code='a']"/>
5710 </recordContentSource>
5712 <xsl:for-each select="marc:controlfield[@tag=008]">
5713 <recordCreationDate encoding="marc">
5714 <xsl:value-of select="substring(.,1,6)"/>
5715 </recordCreationDate>
5718 <xsl:for-each select="marc:controlfield[@tag=005]">
5719 <recordChangeDate encoding="iso8601">
5720 <xsl:value-of select="."/>
5723 <xsl:for-each select="marc:controlfield[@tag=001]">
5725 <xsl:if test="../marc:controlfield[@tag=003]">
5726 <xsl:attribute name="source">
5727 <xsl:value-of select="../marc:controlfield[@tag=003]"/>
5730 <xsl:value-of select="."/>
5733 <xsl:for-each select="marc:datafield[@tag=040]/marc:subfield[@code='b']">
5734 <languageOfCataloging>
5735 <languageTerm authority="iso639-2b" type="code">
5736 <xsl:value-of select="."/>
5738 </languageOfCataloging>
5742 <xsl:template name="displayForm">
5743 <xsl:for-each select="marc:subfield[@code='c']">
5745 <xsl:value-of select="."/>
5749 <xsl:template name="affiliation">
5750 <xsl:for-each select="marc:subfield[@code='u']">
5752 <xsl:value-of select="."/>
5756 <xsl:template name="uri">
5757 <xsl:for-each select="marc:subfield[@code='u']">
5758 <xsl:attribute name="xlink:href">
5759 <xsl:value-of select="."/>
5762 <xsl:for-each select="marc:subfield[@code='0']">
5764 <xsl:when test="contains(text(), ')')">
5765 <xsl:attribute name="xlink:href">
5766 <xsl:value-of select="substring-after(text(), ')')"></xsl:value-of>
5770 <xsl:attribute name="xlink:href">
5771 <xsl:value-of select="."></xsl:value-of>
5777 <xsl:template name="role">
5778 <xsl:for-each select="marc:subfield[@code='e']">
5780 <roleTerm type="text">
5781 <xsl:value-of select="."/>
5785 <xsl:for-each select="marc:subfield[@code='4']">
5787 <roleTerm authority="marcrelator" type="code">
5788 <xsl:value-of select="."/>
5793 <xsl:template name="part">
5794 <xsl:variable name="partNumber">
5795 <xsl:call-template name="specialSubfieldSelect">
5796 <xsl:with-param name="axis">n</xsl:with-param>
5797 <xsl:with-param name="anyCodes">n</xsl:with-param>
5798 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
5799 </xsl:call-template>
5801 <xsl:variable name="partName">
5802 <xsl:call-template name="specialSubfieldSelect">
5803 <xsl:with-param name="axis">p</xsl:with-param>
5804 <xsl:with-param name="anyCodes">p</xsl:with-param>
5805 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
5806 </xsl:call-template>
5808 <xsl:if test="string-length(normalize-space($partNumber))">
5810 <xsl:call-template name="chopPunctuation">
5811 <xsl:with-param name="chopString" select="$partNumber"/>
5812 </xsl:call-template>
5815 <xsl:if test="string-length(normalize-space($partName))">
5817 <xsl:call-template name="chopPunctuation">
5818 <xsl:with-param name="chopString" select="$partName"/>
5819 </xsl:call-template>
5823 <xsl:template name="relatedPart">
5824 <xsl:if test="@tag=773">
5825 <xsl:for-each select="marc:subfield[@code='g']">
5828 <xsl:value-of select="."/>
5832 <xsl:for-each select="marc:subfield[@code='q']">
5834 <xsl:call-template name="parsePart"/>
5839 <xsl:template name="relatedPartNumName">
5840 <xsl:variable name="partNumber">
5841 <xsl:call-template name="specialSubfieldSelect">
5842 <xsl:with-param name="axis">g</xsl:with-param>
5843 <xsl:with-param name="anyCodes">g</xsl:with-param>
5844 <xsl:with-param name="afterCodes">pst</xsl:with-param>
5845 </xsl:call-template>
5847 <xsl:variable name="partName">
5848 <xsl:call-template name="specialSubfieldSelect">
5849 <xsl:with-param name="axis">p</xsl:with-param>
5850 <xsl:with-param name="anyCodes">p</xsl:with-param>
5851 <xsl:with-param name="afterCodes">fgkdlmor</xsl:with-param>
5852 </xsl:call-template>
5854 <xsl:if test="string-length(normalize-space($partNumber))">
5856 <xsl:value-of select="$partNumber"/>
5859 <xsl:if test="string-length(normalize-space($partName))">
5861 <xsl:value-of select="$partName"/>
5865 <xsl:template name="relatedName">
5866 <xsl:for-each select="marc:subfield[@code='a']">
5869 <xsl:value-of select="."/>
5874 <xsl:template name="relatedForm">
5875 <xsl:for-each select="marc:subfield[@code='h']">
5876 <physicalDescription>
5878 <xsl:value-of select="."/>
5880 </physicalDescription>
5883 <xsl:template name="relatedExtent">
5884 <xsl:for-each select="marc:subfield[@code='h']">
5885 <physicalDescription>
5887 <xsl:value-of select="."/>
5889 </physicalDescription>
5892 <xsl:template name="relatedNote">
5893 <xsl:for-each select="marc:subfield[@code='n']">
5895 <xsl:value-of select="."/>
5899 <xsl:template name="relatedSubject">
5900 <xsl:for-each select="marc:subfield[@code='j']">
5902 <temporal encoding="iso8601">
5903 <xsl:call-template name="chopPunctuation">
5904 <xsl:with-param name="chopString" select="."/>
5905 </xsl:call-template>
5910 <xsl:template name="relatedIdentifierISSN">
5911 <xsl:for-each select="marc:subfield[@code='x']">
5912 <identifier type="issn">
5913 <xsl:value-of select="."/>
5917 <xsl:template name="relatedIdentifierLocal">
5918 <xsl:for-each select="marc:subfield[@code='w']">
5919 <identifier type="local">
5920 <xsl:value-of select="."/>
5924 <xsl:template name="relatedIdentifier">
5925 <xsl:for-each select="marc:subfield[@code='o']">
5927 <xsl:value-of select="."/>
5931 <xsl:template name="relatedItem76X-78X">
5932 <xsl:call-template name="displayLabel"/>
5933 <xsl:call-template name="relatedTitle76X-78X"/>
5934 <xsl:call-template name="relatedName"/>
5935 <xsl:call-template name="relatedOriginInfo"/>
5936 <xsl:call-template name="relatedLanguage"/>
5937 <xsl:call-template name="relatedExtent"/>
5938 <xsl:call-template name="relatedNote"/>
5939 <xsl:call-template name="relatedSubject"/>
5940 <xsl:call-template name="relatedIdentifier"/>
5941 <xsl:call-template name="relatedIdentifierISSN"/>
5942 <xsl:call-template name="relatedIdentifierLocal"/>
5943 <xsl:call-template name="relatedPart"/>
5945 <xsl:template name="subjectGeographicZ">
5947 <xsl:call-template name="chopPunctuation">
5948 <xsl:with-param name="chopString" select="."/>
5949 </xsl:call-template>
5952 <xsl:template name="subjectTemporalY">
5954 <xsl:call-template name="chopPunctuation">
5955 <xsl:with-param name="chopString" select="."/>
5956 </xsl:call-template>
5959 <xsl:template name="subjectTopic">
5961 <xsl:call-template name="chopPunctuation">
5962 <xsl:with-param name="chopString" select="."/>
5963 </xsl:call-template>
5966 <!-- 3.2 change tmee 6xx $v genre -->
5967 <xsl:template name="subjectGenre">
5969 <xsl:call-template name="chopPunctuation">
5970 <xsl:with-param name="chopString" select="."/>
5971 </xsl:call-template>
5975 <xsl:template name="nameABCDN">
5976 <xsl:for-each select="marc:subfield[@code='a']">
5978 <xsl:call-template name="chopPunctuation">
5979 <xsl:with-param name="chopString" select="."/>
5980 </xsl:call-template>
5983 <xsl:for-each select="marc:subfield[@code='b']">
5985 <xsl:value-of select="."/>
5989 test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
5991 <xsl:call-template name="subfieldSelect">
5992 <xsl:with-param name="codes">cdn</xsl:with-param>
5993 </xsl:call-template>
5997 <xsl:template name="nameABCDQ">
5999 <xsl:call-template name="chopPunctuation">
6000 <xsl:with-param name="chopString">
6001 <xsl:call-template name="subfieldSelect">
6002 <xsl:with-param name="codes">aq</xsl:with-param>
6003 </xsl:call-template>
6005 <xsl:with-param name="punctuation">
6006 <xsl:text>:,;/ </xsl:text>
6008 </xsl:call-template>
6010 <xsl:call-template name="termsOfAddress"/>
6011 <xsl:call-template name="nameDate"/>
6013 <xsl:template name="nameACDEQ">
6015 <xsl:call-template name="subfieldSelect">
6016 <xsl:with-param name="codes">acdeq</xsl:with-param>
6017 </xsl:call-template>
6020 <xsl:template name="constituentOrRelatedType">
6021 <xsl:if test="@ind2=2">
6022 <xsl:attribute name="type">constituent</xsl:attribute>
6025 <xsl:template name="relatedTitle">
6026 <xsl:for-each select="marc:subfield[@code='t']">
6029 <xsl:call-template name="chopPunctuation">
6030 <xsl:with-param name="chopString">
6031 <xsl:value-of select="."/>
6033 </xsl:call-template>
6038 <xsl:template name="relatedTitle76X-78X">
6039 <xsl:for-each select="marc:subfield[@code='t']">
6042 <xsl:call-template name="chopPunctuation">
6043 <xsl:with-param name="chopString">
6044 <xsl:value-of select="."/>
6046 </xsl:call-template>
6048 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
6049 <xsl:call-template name="relatedPartNumName"/>
6053 <xsl:for-each select="marc:subfield[@code='p']">
6054 <titleInfo type="abbreviated">
6056 <xsl:call-template name="chopPunctuation">
6057 <xsl:with-param name="chopString">
6058 <xsl:value-of select="."/>
6060 </xsl:call-template>
6062 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
6063 <xsl:call-template name="relatedPartNumName"/>
6067 <xsl:for-each select="marc:subfield[@code='s']">
6068 <titleInfo type="uniform">
6070 <xsl:call-template name="chopPunctuation">
6071 <xsl:with-param name="chopString">
6072 <xsl:value-of select="."/>
6074 </xsl:call-template>
6076 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
6077 <xsl:call-template name="relatedPartNumName"/>
6082 <xsl:template name="relatedOriginInfo">
6083 <xsl:if test="marc:subfield[@code='b' or @code='d'] or marc:subfield[@code='f']">
6085 <xsl:if test="@tag=775">
6086 <xsl:for-each select="marc:subfield[@code='f']">
6089 <xsl:attribute name="type">code</xsl:attribute>
6090 <xsl:attribute name="authority">marcgac</xsl:attribute>
6091 <xsl:value-of select="."/>
6096 <xsl:for-each select="marc:subfield[@code='d']">
6098 <xsl:value-of select="."/>
6101 <xsl:for-each select="marc:subfield[@code='b']">
6103 <xsl:value-of select="."/>
6109 <xsl:template name="relatedLanguage">
6110 <xsl:for-each select="marc:subfield[@code='e']">
6111 <xsl:call-template name="getLanguage">
6112 <xsl:with-param name="langString">
6113 <xsl:value-of select="."/>
6115 </xsl:call-template>
6118 <xsl:template name="nameDate">
6119 <xsl:for-each select="marc:subfield[@code='d']">
6120 <namePart type="date">
6121 <xsl:call-template name="chopPunctuation">
6122 <xsl:with-param name="chopString" select="."/>
6123 </xsl:call-template>
6127 <xsl:template name="subjectAuthority">
6128 <xsl:if test="@ind2!=4">
6129 <xsl:if test="@ind2!=' '">
6130 <xsl:if test="@ind2!=8">
6131 <xsl:if test="@ind2!=9">
6132 <xsl:attribute name="authority">
6134 <xsl:when test="@ind2=0">lcsh</xsl:when>
6135 <xsl:when test="@ind2=1">lcshac</xsl:when>
6136 <xsl:when test="@ind2=2">mesh</xsl:when>
6138 <xsl:when test="@ind2=3">nal</xsl:when>
6139 <xsl:when test="@ind2=5">csh</xsl:when>
6140 <xsl:when test="@ind2=6">rvm</xsl:when>
6141 <xsl:when test="@ind2=7">
6142 <xsl:value-of select="marc:subfield[@code='2']"/>
6151 <xsl:template name="subjectAnyOrder">
6152 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
6154 <xsl:when test="@code='v'">
6155 <xsl:call-template name="subjectGenre"/>
6157 <xsl:when test="@code='x'">
6158 <xsl:call-template name="subjectTopic"/>
6160 <xsl:when test="@code='y'">
6161 <xsl:call-template name="subjectTemporalY"/>
6163 <xsl:when test="@code='z'">
6164 <xsl:call-template name="subjectGeographicZ"/>
6169 <xsl:template name="specialSubfieldSelect">
6170 <xsl:param name="anyCodes"/>
6171 <xsl:param name="axis"/>
6172 <xsl:param name="beforeCodes"/>
6173 <xsl:param name="afterCodes"/>
6174 <xsl:variable name="str">
6175 <xsl:for-each select="marc:subfield">
6177 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])">
6178 <xsl:value-of select="text()"/>
6179 <xsl:text> </xsl:text>
6183 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
6186 <!-- 3.2 change tmee 6xx $v genre -->
6187 <xsl:template match="marc:datafield[@tag=600]">
6189 <xsl:call-template name="subjectAuthority"/>
6190 <name type="personal">
6191 <xsl:call-template name="termsOfAddress"/>
6193 <xsl:call-template name="chopPunctuation">
6194 <xsl:with-param name="chopString">
6195 <xsl:call-template name="subfieldSelect">
6196 <xsl:with-param name="codes">aq</xsl:with-param>
6197 </xsl:call-template>
6199 </xsl:call-template>
6201 <xsl:call-template name="nameDate"/>
6202 <xsl:call-template name="affiliation"/>
6203 <xsl:call-template name="role"/>
6205 <xsl:call-template name="subjectAnyOrder"/>
6208 <xsl:template match="marc:datafield[@tag=610]">
6210 <xsl:call-template name="subjectAuthority"/>
6211 <name type="corporate">
6212 <xsl:for-each select="marc:subfield[@code='a']">
6214 <xsl:value-of select="."/>
6217 <xsl:for-each select="marc:subfield[@code='b']">
6219 <xsl:value-of select="."/>
6222 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
6224 <xsl:call-template name="subfieldSelect">
6225 <xsl:with-param name="codes">cdnp</xsl:with-param>
6226 </xsl:call-template>
6229 <xsl:call-template name="role"/>
6231 <xsl:call-template name="subjectAnyOrder"/>
6234 <xsl:template match="marc:datafield[@tag=611]">
6236 <xsl:call-template name="subjectAuthority"/>
6237 <name type="conference">
6239 <xsl:call-template name="subfieldSelect">
6240 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
6241 </xsl:call-template>
6243 <xsl:for-each select="marc:subfield[@code='4']">
6245 <roleTerm authority="marcrelator" type="code">
6246 <xsl:value-of select="."/>
6251 <xsl:call-template name="subjectAnyOrder"/>
6254 <xsl:template match="marc:datafield[@tag=630]">
6256 <xsl:call-template name="subjectAuthority"/>
6259 <xsl:call-template name="chopPunctuation">
6260 <xsl:with-param name="chopString">
6261 <xsl:call-template name="subfieldSelect">
6262 <xsl:with-param name="codes">adfhklor</xsl:with-param>
6263 </xsl:call-template>
6265 </xsl:call-template>
6267 <xsl:call-template name="part"/>
6269 <xsl:call-template name="subjectAnyOrder"/>
6272 <!-- 1.27 648 tmee-->
6273 <xsl:template match="marc:datafield[@tag=648]">
6275 <xsl:if test="marc:subfield[@code=2]">
6276 <xsl:attribute name="authority">
6277 <xsl:value-of select="marc:subfield[@code=2]"/>
6280 <xsl:call-template name="uri"/>
6282 <xsl:call-template name="subjectAuthority"/>
6284 <xsl:call-template name="chopPunctuation">
6285 <xsl:with-param name="chopString">
6286 <xsl:call-template name="subfieldSelect">
6287 <xsl:with-param name="codes">abcd</xsl:with-param>
6288 </xsl:call-template>
6290 </xsl:call-template>
6292 <xsl:call-template name="subjectAnyOrder"/>
6296 <xsl:template match="marc:datafield[@tag=650]">
6298 <xsl:call-template name="subjectAuthority"/>
6300 <xsl:call-template name="chopPunctuation">
6301 <xsl:with-param name="chopString">
6302 <xsl:call-template name="subfieldSelect">
6303 <xsl:with-param name="codes">abcd</xsl:with-param>
6304 </xsl:call-template>
6306 </xsl:call-template>
6308 <xsl:call-template name="subjectAnyOrder"/>
6311 <xsl:template match="marc:datafield[@tag=651]">
6313 <xsl:call-template name="subjectAuthority"/>
6314 <xsl:for-each select="marc:subfield[@code='a']">
6316 <xsl:call-template name="chopPunctuation">
6317 <xsl:with-param name="chopString" select="."/>
6318 </xsl:call-template>
6321 <xsl:call-template name="subjectAnyOrder"/>
6324 <xsl:template match="marc:datafield[@tag=653]">
6326 <xsl:for-each select="marc:subfield[@code='a']">
6328 <xsl:value-of select="."/>
6333 <xsl:template match="marc:datafield[@tag=656]">
6335 <xsl:if test="marc:subfield[@code=2]">
6336 <xsl:attribute name="authority">
6337 <xsl:value-of select="marc:subfield[@code=2]"/>
6341 <xsl:call-template name="chopPunctuation">
6342 <xsl:with-param name="chopString">
6343 <xsl:value-of select="marc:subfield[@code='a']"/>
6345 </xsl:call-template>
6349 <xsl:template name="termsOfAddress">
6350 <xsl:if test="marc:subfield[@code='b' or @code='c']">
6351 <namePart type="termsOfAddress">
6352 <xsl:call-template name="chopPunctuation">
6353 <xsl:with-param name="chopString">
6354 <xsl:call-template name="subfieldSelect">
6355 <xsl:with-param name="codes">bc</xsl:with-param>
6356 </xsl:call-template>
6358 </xsl:call-template>
6362 <xsl:template name="displayLabel">
6363 <xsl:if test="marc:subfield[@code='i']">
6364 <xsl:attribute name="displayLabel">
6365 <xsl:value-of select="marc:subfield[@code='i']"/>
6368 <xsl:if test="marc:subfield[@code='3']">
6369 <xsl:attribute name="displayLabel">
6370 <xsl:value-of select="marc:subfield[@code='3']"/>
6374 <xsl:template name="isInvalid">
6375 <xsl:param name="type"/>
6377 test="marc:subfield[@code='z'] or marc:subfield[@code='y'] or marc:subfield[@code='m']">
6379 <xsl:attribute name="type">
6380 <xsl:value-of select="$type"/>
6382 <xsl:attribute name="invalid">
6383 <xsl:text>yes</xsl:text>
6385 <xsl:if test="marc:subfield[@code='z']">
6386 <xsl:value-of select="marc:subfield[@code='z']"/>
6388 <xsl:if test="marc:subfield[@code='y']">
6389 <xsl:value-of select="marc:subfield[@code='y']"/>
6391 <xsl:if test="marc:subfield[@code='m']">
6392 <xsl:value-of select="marc:subfield[@code='m']"/>
6397 <xsl:template name="subtitle">
6398 <xsl:if test="marc:subfield[@code='b']">
6400 <xsl:call-template name="chopPunctuation">
6401 <xsl:with-param name="chopString">
6402 <xsl:value-of select="marc:subfield[@code='b']"/>
6403 <!--<xsl:call-template name="subfieldSelect">
6404 <xsl:with-param name="codes">b</xsl:with-param>
6405 </xsl:call-template>-->
6407 </xsl:call-template>
6411 <xsl:template name="script">
6412 <xsl:param name="scriptCode"/>
6413 <xsl:attribute name="script">
6415 <xsl:when test="$scriptCode='(3'">Arabic</xsl:when>
6416 <xsl:when test="$scriptCode='(B'">Latin</xsl:when>
6417 <xsl:when test="$scriptCode='$1'">Chinese, Japanese, Korean</xsl:when>
6418 <xsl:when test="$scriptCode='(N'">Cyrillic</xsl:when>
6419 <xsl:when test="$scriptCode='(2'">Hebrew</xsl:when>
6420 <xsl:when test="$scriptCode='(S'">Greek</xsl:when>
6424 <xsl:template name="parsePart">
6425 <!-- assumes 773$q= 1:2:3<4
6426 with up to 3 levels and one optional start page
6428 <xsl:variable name="level1">
6430 <xsl:when test="contains(text(),':')">
6432 <xsl:value-of select="substring-before(text(),':')"/>
6434 <xsl:when test="not(contains(text(),':'))">
6436 <xsl:if test="contains(text(),'<')">
6438 <xsl:value-of select="substring-before(text(),'<')"/>
6440 <xsl:if test="not(contains(text(),'<'))">
6442 <xsl:value-of select="text()"/>
6447 <xsl:variable name="sici2">
6449 <xsl:when test="starts-with(substring-after(text(),$level1),':')">
6450 <xsl:value-of select="substring(substring-after(text(),$level1),2)"/>
6453 <xsl:value-of select="substring-after(text(),$level1)"/>
6457 <xsl:variable name="level2">
6459 <xsl:when test="contains($sici2,':')">
6461 <xsl:value-of select="substring-before($sici2,':')"/>
6463 <xsl:when test="contains($sici2,'<')">
6465 <xsl:value-of select="substring-before($sici2,'<')"/>
6468 <xsl:value-of select="$sici2"/>
6473 <xsl:variable name="sici3">
6475 <xsl:when test="starts-with(substring-after($sici2,$level2),':')">
6476 <xsl:value-of select="substring(substring-after($sici2,$level2),2)"/>
6479 <xsl:value-of select="substring-after($sici2,$level2)"/>
6483 <xsl:variable name="level3">
6485 <xsl:when test="contains($sici3,'<')">
6487 <xsl:value-of select="substring-before($sici3,'<')"/>
6490 <xsl:value-of select="$sici3"/>
6495 <xsl:variable name="page">
6496 <xsl:if test="contains(text(),'<')">
6497 <xsl:value-of select="substring-after(text(),'<')"/>
6500 <xsl:if test="$level1">
6503 <xsl:value-of select="$level1"/>
6507 <xsl:if test="$level2">
6510 <xsl:value-of select="$level2"/>
6514 <xsl:if test="$level3">
6517 <xsl:value-of select="$level3"/>
6521 <xsl:if test="$page">
6522 <extent unit="page">
6524 <xsl:value-of select="$page"/>
6529 <xsl:template name="getLanguage">
6530 <xsl:param name="langString"/>
6531 <xsl:param name="controlField008-35-37"/>
6532 <xsl:variable name="length" select="string-length($langString)"/>
6534 <xsl:when test="$length=0"/>
6535 <xsl:when test="$controlField008-35-37=substring($langString,1,3)">
6536 <xsl:call-template name="getLanguage">
6537 <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
6538 <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
6539 </xsl:call-template>
6543 <languageTerm authority="iso639-2b" type="code">
6544 <xsl:value-of select="substring($langString,1,3)"/>
6547 <xsl:call-template name="getLanguage">
6548 <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
6549 <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
6550 </xsl:call-template>
6554 <xsl:template name="isoLanguage">
6555 <xsl:param name="currentLanguage"/>
6556 <xsl:param name="usedLanguages"/>
6557 <xsl:param name="remainingLanguages"/>
6559 <xsl:when test="string-length($currentLanguage)=0"/>
6560 <xsl:when test="not(contains($usedLanguages, $currentLanguage))">
6562 <xsl:if test="@code!='a'">
6563 <xsl:attribute name="objectPart">
6565 <xsl:when test="@code='b'">summary or subtitle</xsl:when>
6566 <xsl:when test="@code='d'">sung or spoken text</xsl:when>
6567 <xsl:when test="@code='e'">libretto</xsl:when>
6568 <xsl:when test="@code='f'">table of contents</xsl:when>
6569 <xsl:when test="@code='g'">accompanying material</xsl:when>
6570 <xsl:when test="@code='h'">translation</xsl:when>
6574 <languageTerm authority="iso639-2b" type="code">
6575 <xsl:value-of select="$currentLanguage"/>
6578 <xsl:call-template name="isoLanguage">
6579 <xsl:with-param name="currentLanguage">
6580 <xsl:value-of select="substring($remainingLanguages,1,3)"/>
6582 <xsl:with-param name="usedLanguages">
6583 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
6585 <xsl:with-param name="remainingLanguages">
6587 select="substring($remainingLanguages,4,string-length($remainingLanguages))"
6590 </xsl:call-template>
6593 <xsl:call-template name="isoLanguage">
6594 <xsl:with-param name="currentLanguage">
6595 <xsl:value-of select="substring($remainingLanguages,1,3)"/>
6597 <xsl:with-param name="usedLanguages">
6598 <xsl:value-of select="concat($usedLanguages,$currentLanguage)"/>
6600 <xsl:with-param name="remainingLanguages">
6602 select="substring($remainingLanguages,4,string-length($remainingLanguages))"
6605 </xsl:call-template>
6609 <xsl:template name="chopBrackets">
6610 <xsl:param name="chopString"/>
6611 <xsl:variable name="string">
6612 <xsl:call-template name="chopPunctuation">
6613 <xsl:with-param name="chopString" select="$chopString"/>
6614 </xsl:call-template>
6616 <xsl:if test="substring($string, 1,1)='['">
6617 <xsl:value-of select="substring($string,2, string-length($string)-2)"/>
6619 <xsl:if test="substring($string, 1,1)!='['">
6620 <xsl:value-of select="$string"/>
6623 <xsl:template name="rfcLanguages">
6624 <xsl:param name="nodeNum"/>
6625 <xsl:param name="usedLanguages"/>
6626 <xsl:param name="controlField008-35-37"/>
6627 <xsl:variable name="currentLanguage" select="."/>
6629 <xsl:when test="not($currentLanguage)"/>
6631 test="$currentLanguage!=$controlField008-35-37 and $currentLanguage!='rfc3066'">
6632 <xsl:if test="not(contains($usedLanguages,$currentLanguage))">
6634 <xsl:if test="@code!='a'">
6635 <xsl:attribute name="objectPart">
6637 <xsl:when test="@code='b'">summary or subtitle</xsl:when>
6638 <xsl:when test="@code='d'">sung or spoken text</xsl:when>
6639 <xsl:when test="@code='e'">libretto</xsl:when>
6640 <xsl:when test="@code='f'">table of contents</xsl:when>
6641 <xsl:when test="@code='g'">accompanying material</xsl:when>
6642 <xsl:when test="@code='h'">translation</xsl:when>
6646 <languageTerm authority="rfc3066" type="code">
6647 <xsl:value-of select="$currentLanguage"/>
6652 <xsl:otherwise> </xsl:otherwise>
6656 <xsl:template name="datafield">
6657 <xsl:param name="tag"/>
6658 <xsl:param name="ind1">
6659 <xsl:text> </xsl:text>
6661 <xsl:param name="ind2">
6662 <xsl:text> </xsl:text>
6664 <xsl:param name="subfields"/>
6665 <xsl:element name="marc:datafield">
6666 <xsl:attribute name="tag">
6667 <xsl:value-of select="$tag"/>
6669 <xsl:attribute name="ind1">
6670 <xsl:value-of select="$ind1"/>
6672 <xsl:attribute name="ind2">
6673 <xsl:value-of select="$ind2"/>
6675 <xsl:copy-of select="$subfields"/>
6679 <xsl:template name="subfieldSelect">
6680 <xsl:param name="codes">abcdefghijklmnopqrstuvwxyz</xsl:param>
6681 <xsl:param name="delimeter">
6682 <xsl:text> </xsl:text>
6684 <xsl:variable name="str">
6685 <xsl:for-each select="marc:subfield">
6686 <xsl:if test="contains($codes, @code)">
6687 <xsl:value-of select="text()"/>
6688 <xsl:value-of select="$delimeter"/>
6692 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
6695 <xsl:template name="buildSpaces">
6696 <xsl:param name="spaces"/>
6697 <xsl:param name="char">
6698 <xsl:text> </xsl:text>
6700 <xsl:if test="$spaces>0">
6701 <xsl:value-of select="$char"/>
6702 <xsl:call-template name="buildSpaces">
6703 <xsl:with-param name="spaces" select="$spaces - 1"/>
6704 <xsl:with-param name="char" select="$char"/>
6705 </xsl:call-template>
6709 <xsl:template name="chopPunctuation">
6710 <xsl:param name="chopString"/>
6711 <xsl:param name="punctuation">
6712 <xsl:text>.:,;/ </xsl:text>
6714 <xsl:variable name="length" select="string-length($chopString)"/>
6716 <xsl:when test="$length=0"/>
6717 <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
6718 <xsl:call-template name="chopPunctuation">
6719 <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
6720 <xsl:with-param name="punctuation" select="$punctuation"/>
6721 </xsl:call-template>
6723 <xsl:when test="not($chopString)"/>
6725 <xsl:value-of select="$chopString"/>
6730 <xsl:template name="chopPunctuationFront">
6731 <xsl:param name="chopString"/>
6732 <xsl:variable name="length" select="string-length($chopString)"/>
6734 <xsl:when test="$length=0"/>
6735 <xsl:when test="contains('.:,;/[ ', substring($chopString,1,1))">
6736 <xsl:call-template name="chopPunctuationFront">
6737 <xsl:with-param name="chopString" select="substring($chopString,2,$length - 1)"
6739 </xsl:call-template>
6741 <xsl:when test="not($chopString)"/>
6743 <xsl:value-of select="$chopString"/>
6748 <xsl:template name="chopPunctuationBack">
6749 <xsl:param name="chopString"/>
6750 <xsl:param name="punctuation">
6751 <xsl:text>.:,;/] </xsl:text>
6753 <xsl:variable name="length" select="string-length($chopString)"/>
6755 <xsl:when test="$length=0"/>
6756 <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
6757 <xsl:call-template name="chopPunctuation">
6758 <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
6759 <xsl:with-param name="punctuation" select="$punctuation"/>
6760 </xsl:call-template>
6762 <xsl:when test="not($chopString)"/>
6764 <xsl:value-of select="$chopString"/>
6769 <!-- nate added 12/14/2007 for lccn.loc.gov: url encode ampersand, etc. -->
6770 <xsl:template name="url-encode">
6772 <xsl:param name="str"/>
6774 <xsl:if test="$str">
6775 <xsl:variable name="first-char" select="substring($str,1,1)"/>
6777 <xsl:when test="contains($safe,$first-char)">
6778 <xsl:value-of select="$first-char"/>
6781 <xsl:variable name="codepoint">
6783 <xsl:when test="contains($ascii,$first-char)">
6785 select="string-length(substring-before($ascii,$first-char)) + 32"
6788 <xsl:when test="contains($latin1,$first-char)">
6790 select="string-length(substring-before($latin1,$first-char)) + 160"/>
6794 <xsl:message terminate="no">Warning: string contains a character
6795 that is out of range! Substituting "?".</xsl:message>
6796 <xsl:text>63</xsl:text>
6800 <xsl:variable name="hex-digit1"
6801 select="substring($hex,floor($codepoint div 16) + 1,1)"/>
6802 <xsl:variable name="hex-digit2" select="substring($hex,$codepoint mod 16 + 1,1)"/>
6803 <!-- <xsl:value-of select="concat('%',$hex-digit2)"/> -->
6804 <xsl:value-of select="concat('%',$hex-digit1,$hex-digit2)"/>
6807 <xsl:if test="string-length($str) > 1">
6808 <xsl:call-template name="url-encode">
6809 <xsl:with-param name="str" select="substring($str,2)"/>
6810 </xsl:call-template>
6814 </xsl:stylesheet>$XXXX$ where name = $$mods33$$;