1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink"
3 xmlns:marc="http://www.loc.gov/MARC21/slim"
4 xmlns="http://www.loc.gov/mods/v3"
5 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="marc">
6 <xsl:include href="MARC21slimUtils.xsl"/>
7 <xsl:output method="xml" indent="yes"/>
11 Revision 1.5 2003/10/02 16:18:58 ntra
12 MODS2 to MODS3 updates, language unstacking and
13 de-duping, chopPunctuation expanded
15 Revision 1.3 2003/04/03 00:07:19 ntra
16 Revision 1.3 Additional Changes not related to MODS Version 2.0 by ntra
18 Revision 1.2 2003/03/24 19:37:42 ckeith
22 <xsl:template match="/">
24 <xsl:when test="marc:collection">
25 <modsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
26 xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd">
27 <xsl:for-each select="marc:collection/marc:record">
29 <xsl:call-template name="marcRecord"/>
35 <mods 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-0.xsd">
36 <xsl:for-each select="marc:record">
37 <xsl:call-template name="marcRecord"/>
44 <xsl:template name="marcRecord">
45 <xsl:variable name="leader" select="marc:leader"/>
46 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
47 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
48 <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>
49 <xsl:variable name="typeOf008">
51 <xsl:when test="$leader6='a'">
53 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">BK</xsl:when>
54 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">SE</xsl:when>
57 <xsl:when test="$leader6='t'">BK</xsl:when>
58 <xsl:when test="$leader6='p'">MM</xsl:when>
59 <xsl:when test="$leader6='m'">CF</xsl:when>
60 <xsl:when test="$leader6='e' or $leader6='f'">MP</xsl:when>
61 <xsl:when test="$leader6='g' or $leader6='k' or $leader6='o' or $leader6='r'">VM</xsl:when>
62 <xsl:when test="$leader6='c' or $leader6='d' or $leader6='i' or $leader6='j'">MU</xsl:when>
66 <xsl:for-each select="marc:datafield[@tag=245]">
68 <xsl:variable name="title">
70 <xsl:when test="marc:subfield[@code='b']">
71 <xsl:call-template name="specialSubfieldSelect">
72 <xsl:with-param name="axis">b</xsl:with-param>
73 <xsl:with-param name="beforeCodes">afghk</xsl:with-param>
77 <xsl:call-template name="subfieldSelect">
78 <xsl:with-param name="codes">abfghk</xsl:with-param>
84 <xsl:variable name="titleChop">
85 <xsl:call-template name="chopPunctuation">
86 <xsl:with-param name="chopString">
87 <xsl:value-of select="$title"/>
92 <xsl:when test="@ind2>0">
94 <xsl:value-of select="substring($titleChop,1,@ind2)"/>
97 <xsl:value-of select="substring($titleChop,@ind2+1)"/>
102 <xsl:value-of select="$titleChop"/>
106 <xsl:if test="marc:subfield[@code='b']">
108 <xsl:call-template name="chopPunctuation">
109 <xsl:with-param name="chopString">
110 <xsl:call-template name="specialSubfieldSelect">
111 <xsl:with-param name="axis">b</xsl:with-param>
112 <xsl:with-param name="anyCodes">b</xsl:with-param>
113 <xsl:with-param name="afterCodes">afghk</xsl:with-param>
119 <xsl:call-template name="part"/>
123 <xsl:for-each select="marc:datafield[@tag=210]">
124 <titleInfo type="abbreviated">
126 <xsl:call-template name="chopPunctuation">
127 <xsl:with-param name="chopString">
128 <xsl:call-template name="subfieldSelect">
129 <xsl:with-param name="codes">ab</xsl:with-param>
137 <xsl:for-each select="marc:datafield[@tag=242]">
138 <titleInfo type="translated">
140 <xsl:call-template name="chopPunctuation">
141 <xsl:with-param name="chopString">
142 <xsl:call-template name="subfieldSelect">
143 <!-- 1/04 removed $h -->
144 <xsl:with-param name="codes">ab</xsl:with-param>
149 <xsl:call-template name="part"/>
153 <xsl:for-each select="marc:datafield[@tag=246]">
154 <titleInfo type="alternative">
155 <xsl:for-each select="marc:subfield[@code='i']">
156 <xsl:attribute name="displayLabel">
157 <xsl:value-of select="text()"/>
161 <xsl:call-template name="chopPunctuation">
162 <xsl:with-param name="chopString">
163 <xsl:call-template name="subfieldSelect">
164 <!-- 1/04 removed $h -->
165 <xsl:with-param name="codes">abf</xsl:with-param>
170 <xsl:call-template name="part"/>
174 <xsl:for-each select="marc:datafield[@tag=130]|marc:datafield[@tag=240]|marc:datafield[@tag=730][@ind2!=2]">
175 <titleInfo type="uniform">
177 <xsl:variable name="str">
178 <xsl:for-each select="marc:subfield">
179 <xsl:if test="(contains('adfhklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))">
180 <xsl:value-of select="text()"/>
181 <xsl:text> </xsl:text>
186 <xsl:call-template name="chopPunctuation">
187 <xsl:with-param name="chopString">
188 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
192 <xsl:call-template name="part"/>
196 <xsl:for-each select="marc:datafield[@tag=740][@ind2!=2]">
197 <titleInfo type="alternative">
199 <xsl:call-template name="chopPunctuation">
200 <xsl:with-param name="chopString">
201 <xsl:call-template name="subfieldSelect">
202 <xsl:with-param name="codes">ah</xsl:with-param>
207 <xsl:call-template name="part"/>
211 <xsl:for-each select="marc:datafield[@tag=100]">
212 <name type="personal">
213 <xsl:call-template name="nameABCDQ"/>
214 <xsl:call-template name="affiliation"/>
216 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
218 <xsl:call-template name="role"/>
222 <xsl:for-each select="marc:datafield[@tag=110]">
223 <name type="corporate">
224 <xsl:call-template name="nameABCDN"/>
226 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
228 <xsl:call-template name="role"/>
232 <xsl:for-each select="marc:datafield[@tag=111]">
233 <name type="conference">
234 <xsl:call-template name="nameACDEQ"/>
236 <roleTerm authority="marcrelator" type="text">creator</roleTerm>
238 <xsl:call-template name="role"/>
242 <xsl:for-each select="marc:datafield[@tag=700][not(marc:subfield[@code='t'])]">
243 <name type="personal">
244 <xsl:call-template name="nameABCDQ"/>
245 <xsl:call-template name="affiliation"/>
246 <xsl:call-template name="role"/>
250 <xsl:for-each select="marc:datafield[@tag=710][not(marc:subfield[@code='t'])]">
251 <name type="corporate">
252 <xsl:call-template name="nameABCDN"/>
253 <xsl:call-template name="role"/>
257 <xsl:for-each select="marc:datafield[@tag=711][not(marc:subfield[@code='t'])]">
258 <name type="conference">
259 <xsl:call-template name="nameACDEQ"/>
260 <xsl:call-template name="role"/>
264 <xsl:for-each select="marc:datafield[@tag=720][not(marc:subfield[@code='t'])]">
266 <xsl:if test="@ind1=1">
267 <xsl:attribute name="type"><xsl:text>personal</xsl:text></xsl:attribute>
270 <xsl:value-of select="marc:subfield[@code='a']"/>
272 <xsl:call-template name="role"/>
277 <xsl:if test="$leader7='c'">
278 <xsl:attribute name="collection">yes</xsl:attribute>
280 <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
281 <xsl:attribute name="manuscript">yes</xsl:attribute>
284 <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
285 <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
286 <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
287 <xsl:when test="$leader6='i'">sound recording-nonmusical</xsl:when>
288 <xsl:when test="$leader6='j'">sound recording-musical</xsl:when>
289 <xsl:when test="$leader6='k'">still image</xsl:when>
290 <xsl:when test="$leader6='g'">moving image</xsl:when>
291 <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
292 <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
293 <xsl:when test="$leader6='p'">mixed material</xsl:when>
297 <xsl:if test="substring($controlField008,26,1)='d'">
298 <genre authority="marc">globe</genre>
301 <xsl:if test="marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='r']">
302 <genre authority="marc">remote sensing image</genre>
305 <xsl:if test="$typeOf008='MP'">
306 <xsl:variable name="controlField008-25" select="substring($controlField008,26,1)"/>
308 <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']">
309 <genre authority="marc">map</genre>
311 <xsl:when test="$controlField008-25='e' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='d']">
312 <genre authority="marc">atlas</genre>
317 <xsl:if test="$typeOf008='SE'">
318 <xsl:variable name="controlField008-21" select="substring($controlField008,22,1)"/>
320 <xsl:when test="$controlField008-21='d'">
321 <genre authority="marc">database</genre>
323 <xsl:when test="$controlField008-21='l'">
324 <genre authority="marc">loose-leaf</genre>
326 <xsl:when test="$controlField008-21='m'">
327 <genre authority="marc">series</genre>
329 <xsl:when test="$controlField008-21='n'">
330 <genre authority="marc">newspaper</genre>
332 <xsl:when test="$controlField008-21='p'">
333 <genre authority="marc">periodical</genre>
335 <xsl:when test="$controlField008-21='w'">
336 <genre authority="marc">web site</genre>
341 <xsl:if test="$typeOf008='BK' or $typeOf008='SE'">
342 <xsl:variable name="controlField008-24" select="substring($controlField008,25,4)"/>
344 <xsl:when test="contains($controlField008-24,'a')">
345 <genre authority="marc">abstract or summary</genre>
347 <xsl:when test="contains($controlField008-24,'b')">
348 <genre authority="marc">bibliography</genre>
350 <xsl:when test="contains($controlField008-24,'c')">
351 <genre authority="marc">catalog</genre>
353 <xsl:when test="contains($controlField008-24,'d')">
354 <genre authority="marc">dictionary</genre>
356 <xsl:when test="contains($controlField008-24,'e')">
357 <genre authority="marc">encyclopedia</genre>
359 <xsl:when test="contains($controlField008-24,'f')">
360 <genre authority="marc">handbook</genre>
362 <xsl:when test="contains($controlField008-24,'g')">
363 <genre authority="marc">legal article</genre>
365 <xsl:when test="contains($controlField008-24,'i')">
366 <genre authority="marc">index</genre>
368 <xsl:when test="contains($controlField008-24,'k')">
369 <genre authority="marc">discography</genre>
371 <xsl:when test="contains($controlField008-24,'l')">
372 <genre authority="marc">legislation</genre>
374 <xsl:when test="contains($controlField008-24,'m')">
375 <genre authority="marc">theses</genre>
377 <xsl:when test="contains($controlField008-24,'n')">
378 <genre authority="marc">survey of literature</genre>
380 <xsl:when test="contains($controlField008-24,'o')">
381 <genre authority="marc">review</genre>
383 <xsl:when test="contains($controlField008-24,'p')">
384 <genre authority="marc">programmed text</genre>
386 <xsl:when test="contains($controlField008-24,'q')">
387 <genre authority="marc">filmography</genre>
389 <xsl:when test="contains($controlField008-24,'r')">
390 <genre authority="marc">directory</genre>
392 <xsl:when test="contains($controlField008-24,'s')">
393 <genre authority="marc">statistics</genre>
395 <xsl:when test="contains($controlField008-24,'t')">
396 <genre authority="marc">technical report</genre>
398 <xsl:when test="contains($controlField008-24,'v')">
399 <genre authority="marc">legal case and case notes</genre>
401 <xsl:when test="contains($controlField008-24,'w')">
402 <genre authority="marc">law report or digest</genre>
404 <xsl:when test="contains($controlField008-24,'z')">
405 <genre authority="marc">treaty</genre>
408 <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
410 <xsl:when test="$controlField008-29='1'">
411 <genre authority="marc">conference publication</genre>
416 <xsl:if test="$typeOf008='CF'">
417 <xsl:variable name="controlField008-26" select="substring($controlField008,27,1)"/>
419 <xsl:when test="$controlField008-26='a'">
420 <genre authority="marc">numeric data</genre>
422 <xsl:when test="$controlField008-26='e'">
423 <genre authority="marc">database</genre>
425 <xsl:when test="$controlField008-26='f'">
426 <genre authority="marc">font</genre>
428 <xsl:when test="$controlField008-26='g'">
429 <genre authority="marc">game</genre>
434 <xsl:if test="$typeOf008='BK'">
435 <xsl:if test="substring($controlField008,25,1)='j'">
436 <genre authority="marc">patent</genre>
438 <xsl:if test="substring($controlField008,31,1)='1'">
439 <genre authority="marc">festschrift</genre>
442 <xsl:variable name="controlField008-34" select="substring($controlField008,35,1)"/>
443 <xsl:if test="$controlField008-34='a' or $controlField008-34='b' or $controlField008-34='c' or $controlField008-34='d'">
444 <genre authority="marc">biography</genre>
447 <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
449 <xsl:when test="$controlField008-33='e'">
450 <genre authority="marc">essay</genre>
452 <xsl:when test="$controlField008-33='d'">
453 <genre authority="marc">drama</genre>
455 <xsl:when test="$controlField008-33='c'">
456 <genre authority="marc">comic strip</genre>
458 <xsl:when test="$controlField008-33='l'">
459 <genre authority="marc">fiction</genre>
461 <xsl:when test="$controlField008-33='h'">
462 <genre authority="marc">humor, satire</genre>
464 <xsl:when test="$controlField008-33='i'">
465 <genre authority="marc">letter</genre>
467 <xsl:when test="$controlField008-33='f'">
468 <genre authority="marc">novel</genre>
470 <xsl:when test="$controlField008-33='j'">
471 <genre authority="marc">short story</genre>
473 <xsl:when test="$controlField008-33='s'">
474 <genre authority="marc">speech</genre>
479 <xsl:if test="$typeOf008='MU'">
480 <xsl:variable name="controlField008-30-31" select="substring($controlField008,31,2)"/>
481 <xsl:if test="contains($controlField008-30-31,'b')">
482 <genre authority="marc">biography</genre>
484 <xsl:if test="contains($controlField008-30-31,'c')">
485 <genre authority="marc">conference publication</genre>
487 <xsl:if test="contains($controlField008-30-31,'d')">
488 <genre authority="marc">drama</genre>
490 <xsl:if test="contains($controlField008-30-31,'e')">
491 <genre authority="marc">essay</genre>
493 <xsl:if test="contains($controlField008-30-31,'f')">
494 <genre authority="marc">fiction</genre>
496 <xsl:if test="contains($controlField008-30-31,'o')">
497 <genre authority="marc">folktale</genre>
499 <xsl:if test="contains($controlField008-30-31,'h')">
500 <genre authority="marc">history</genre>
502 <xsl:if test="contains($controlField008-30-31,'k')">
503 <genre authority="marc">humor, satire</genre>
505 <xsl:if test="contains($controlField008-30-31,'m')">
506 <genre authority="marc">memoir</genre>
508 <xsl:if test="contains($controlField008-30-31,'p')">
509 <genre authority="marc">poetry</genre>
511 <xsl:if test="contains($controlField008-30-31,'r')">
512 <genre authority="marc">rehersal</genre>
514 <xsl:if test="contains($controlField008-30-31,'g')">
515 <genre authority="marc">reporting</genre>
517 <xsl:if test="contains($controlField008-30-31,'s')">
518 <genre authority="marc">sound</genre>
520 <xsl:if test="contains($controlField008-30-31,'l')">
521 <genre authority="marc">speech</genre>
525 <xsl:if test="$typeOf008='VM'">
526 <xsl:variable name="controlField008-33" select="substring($controlField008,34,1)"/>
528 <xsl:when test="$controlField008-33='a'">
529 <genre authority="marc">art original</genre>
531 <xsl:when test="$controlField008-33='b'">
532 <genre authority="marc">kit</genre>
534 <xsl:when test="$controlField008-33='c'">
535 <genre authority="marc">art reproduction</genre>
537 <xsl:when test="$controlField008-33='d'">
538 <genre authority="marc">diorama</genre>
540 <xsl:when test="$controlField008-33='f'">
541 <genre authority="marc">filmstrip</genre>
543 <xsl:when test="$controlField008-33='g'">
544 <genre authority="marc">legal article</genre>
546 <xsl:when test="$controlField008-33='i'">
547 <genre authority="marc">picture</genre>
549 <xsl:when test="$controlField008-33='k'">
550 <genre authority="marc">graphic</genre>
552 <xsl:when test="$controlField008-33='l'">
553 <genre authority="marc">technical drawing</genre>
555 <xsl:when test="$controlField008-33='m'">
556 <genre authority="marc">motion picture</genre>
558 <xsl:when test="$controlField008-33='n'">
559 <genre authority="marc">chart</genre>
561 <xsl:when test="$controlField008-33='o'">
562 <genre authority="marc">flash card</genre>
564 <xsl:when test="$controlField008-33='p'">
565 <genre authority="marc">microscope slide</genre>
567 <xsl:when test="$controlField008-33='q' or marc:controlfield[@tag=007][substring(text(),1,1)='a'][substring(text(),2,1)='q']">
568 <genre authority="marc">model</genre>
570 <xsl:when test="$controlField008-33='r'">
571 <genre authority="marc">realia</genre>
573 <xsl:when test="$controlField008-33='s'">
574 <genre authority="marc">slide</genre>
576 <xsl:when test="$controlField008-33='t'">
577 <genre authority="marc">transparency</genre>
579 <xsl:when test="$controlField008-33='v'">
580 <genre authority="marc">videorecording</genre>
582 <xsl:when test="$controlField008-33='w'">
583 <genre authority="marc">toy</genre>
588 <xsl:for-each select="marc:datafield[@tag=655]">
589 <genre authority="marc">
590 <xsl:attribute name="authority">
591 <xsl:value-of select="marc:subfield[@code='2']"/>
593 <xsl:call-template name="subfieldSelect">
594 <xsl:with-param name="codes">abvxyz</xsl:with-param>
595 <xsl:with-param name="delimeter">-</xsl:with-param>
601 <xsl:variable name="MARCpublicationCode" select="normalize-space(substring($controlField008,16,3))"/>
603 <xsl:if test="translate($MARCpublicationCode,'|','')">
606 <xsl:attribute name="type">code</xsl:attribute>
607 <xsl:attribute name="authority">marccountry</xsl:attribute>
608 <xsl:value-of select="$MARCpublicationCode"/>
613 <xsl:for-each select="marc:datafield[@tag=044]/marc:subfield[@code='c']">
616 <xsl:attribute name="type">code</xsl:attribute>
617 <xsl:attribute name="authority">iso3166</xsl:attribute>
618 <xsl:value-of select="."/>
623 <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='a']">
626 <xsl:attribute name="type">text</xsl:attribute>
627 <xsl:call-template name="chopPunctuationFront">
628 <xsl:with-param name="chopString">
629 <xsl:call-template name="chopPunctuation">
630 <xsl:with-param name="chopString" select="."/>
638 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='m']">
639 <dateValid point="start">
640 <xsl:value-of select="."/>
643 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='n']">
644 <dateValid point="end">
645 <xsl:value-of select="."/>
648 <xsl:for-each select="marc:datafield[@tag=046]/marc:subfield[@code='j']">
650 <xsl:value-of select="."/>
654 <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='b' or @code='c' or @code='g']">
656 <xsl:when test="@code='b'">
658 <xsl:call-template name="chopPunctuation">
659 <xsl:with-param name="chopString" select="."/>
663 <xsl:when test="@code='c'">
665 <xsl:call-template name="chopPunctuation">
666 <xsl:with-param name="chopString" select="."/>
670 <xsl:when test="@code='g'">
672 <xsl:value-of select="."/>
678 <xsl:variable name="dataField260c">
679 <xsl:call-template name="chopPunctuation">
680 <xsl:with-param name="chopString" select="marc:datafield[@tag=260]/marc:subfield[@code='c']"/>
684 <xsl:variable name="controlField008-7-10" select="normalize-space(substring($controlField008, 8, 4))"/>
685 <xsl:variable name="controlField008-11-14" select="normalize-space(substring($controlField008, 12, 4))"/>
686 <xsl:variable name="controlField008-6" select="normalize-space(substring($controlField008, 7, 1))"/>
688 <xsl:if test="$controlField008-6='e' or $controlField008-6='p' or $controlField008-6='r' or $controlField008-6='t' or $controlField008-6='s'">
689 <xsl:if test="$controlField008-7-10 and ($controlField008-7-10 != $dataField260c)">
690 <dateIssued encoding="marc">
691 <xsl:value-of select="$controlField008-7-10"/>
696 <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'">
697 <xsl:if test="$controlField008-7-10">
698 <dateIssued encoding="marc" point="start">
699 <xsl:value-of select="$controlField008-7-10"/>
704 <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'">
705 <xsl:if test="$controlField008-11-14">
706 <dateIssued encoding="marc" point="end">
707 <xsl:value-of select="$controlField008-11-14"/>
712 <xsl:if test="$controlField008-6='q'">
713 <xsl:if test="$controlField008-7-10">
714 <dateIssued encoding="marc" point="start" qualifier="questionable">
715 <xsl:value-of select="$controlField008-7-10"/>
720 <xsl:if test="$controlField008-6='q'">
721 <xsl:if test="$controlField008-11-14">
722 <dateIssued encoding="marc" point="end" qualifier="questionable">
723 <xsl:value-of select="$controlField008-11-14"/>
728 <xsl:if test="$controlField008-6='t'">
729 <xsl:if test="$controlField008-11-14">
730 <copyrightDate encoding="marc">
731 <xsl:value-of select="$controlField008-11-14"/>
736 <xsl:for-each select="marc:datafield[@tag=033][@ind1=0 or @ind1=1]/marc:subfield[@code='a']">
737 <dateCaptured encoding="iso8601">
738 <xsl:value-of select="."/>
742 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][1]">
743 <dateCaptured encoding="iso8601" point="start">
744 <xsl:value-of select="."/>
748 <xsl:for-each select="marc:datafield[@tag=033][@ind1=2]/marc:subfield[@code='a'][2]">
749 <dateCaptured encoding="iso8601" point="end">
750 <xsl:value-of select="."/>
754 <xsl:for-each select="marc:datafield[@tag=250]/marc:subfield[@code='a']">
756 <xsl:value-of select="."/>
760 <xsl:for-each select="marc:leader">
763 <xsl:when test="$leader7='a' or $leader7='c' or $leader7='d' or $leader7='m'">monographic</xsl:when>
764 <xsl:when test="$leader7='b' or $leader7='i' or $leader7='s'">continuing</xsl:when>
769 <xsl:for-each select="marc:datafield[@tag=310]|marc:datafield[@tag=321]">
771 <xsl:call-template name="subfieldSelect">
772 <xsl:with-param name="codes">ab</xsl:with-param>
777 <xsl:variable name="controlField008-35-37" select="normalize-space(translate(substring($controlField008,36,3),'|#',''))"/>
778 <xsl:if test="$controlField008-35-37">
780 <languageTerm authority="iso639-2b" type="code">
781 <xsl:value-of select="substring($controlField008,36,3)"/>
786 <xsl:for-each select="marc:datafield[@tag=041]">
787 <xsl:variable name="langCodes">
788 <xsl:copy-of select="marc:subfield[@code='a'or @code='d' or @code='e' or @code='2']"/>
792 <xsl:when test="$langCodes/child::*[@code='2']='rfc3066'">
793 <xsl:call-template name="rfcLanguages">
794 <xsl:with-param name="langCodes"><xsl:copy-of select="$langCodes"/></xsl:with-param>
795 <xsl:with-param name="nodeNum"><xsl:value-of select="1"/></xsl:with-param>
796 <xsl:with-param name="usedLanguages">
797 <xsl:text></xsl:text>
799 <xsl:with-param name="controlField008-35-37">
800 <xsl:value-of select="$controlField008-35-37"/>
805 <xsl:variable name="allLanguages">
806 <xsl:value-of select="$langCodes"/>
808 <xsl:variable name="currentLanguage">
809 <xsl:value-of select="substring($allLanguages,1,3)"/>
811 <xsl:call-template name="isoLanguage">
812 <xsl:with-param name="currentLanguage">
813 <xsl:value-of select="substring($allLanguages,1,3)"/>
815 <xsl:with-param name="remainingLanguages">
816 <xsl:value-of select="substring($allLanguages,4,string-length($allLanguages)-3)"/>
818 <xsl:with-param name="usedLanguages">
819 <xsl:if test="$controlField008-35-37">
820 <xsl:value-of select="substring($controlField008,36,3)"/>
828 <xsl:variable name="physicalDescription">
829 <xsl:if test="$typeOf008='CF' and marc:controlfield[@tag=007][substring(.,12,1)='a' or substring(.,12,1)='b']">
830 <digitalOrigin>reformatted digital</digitalOrigin>
833 <xsl:variable name="controlField008-23" select="substring($controlField008,24,1)"/>
834 <xsl:variable name="controlField008-29" select="substring($controlField008,30,1)"/>
836 <xsl:variable name="check008-23">
837 <xsl:if test="$typeOf008='BK' or $typeOf008='MU' or $typeOf008='SE' or $typeOf008='MM'">
838 <xsl:value-of select="true()"/>
842 <xsl:variable name="check008-29">
843 <xsl:if test="$typeOf008='MP' or $typeOf008='VM'">
844 <xsl:value-of select="true()"/>
849 <xsl:when test="($check008-23 and $controlField008-23='f') or ($check008-29 and $controlField008-29='f')">
850 <form authority="marcform">braille</form>
852 <xsl:when test="($controlField008-23=' ' and ($leader6='c' or $leader6='d')) or (($typeOf008='BK' or $typeOf008='SE') and ($controlField008-23=' ' or $controlField008='r'))">
853 <form authority="marcform">print</form>
855 <xsl:when test="$leader6 = 'm' or ($check008-23 and $controlField008-23='s') or ($check008-29 and $controlField008-29='s')">
856 <form authority="marcform">electronic</form>
858 <xsl:when test="($check008-23 and $controlField008-23='b') or ($check008-29 and $controlField008-29='b')">
859 <form authority="marcform">microfiche</form>
861 <xsl:when test="($check008-23 and $controlField008-23='a') or ($check008-29 and $controlField008-29='a')">
862 <form authority="marcform">microfilm</form>
866 <xsl:if test="marc:datafield[@tag=242]/marc:subfield[@code='h']">
867 <form authority='gmd'>
868 <xsl:call-template name="chopBrackets">
869 <xsl:with-param name="chopString">
870 <xsl:value-of select="marc:datafield[@tag=242]/marc:subfield[@code='h']"/>
875 <xsl:if test="marc:datafield[@tag=245]/marc:subfield[@code='h']">
876 <form authority='gmd'>
877 <xsl:call-template name="chopBrackets">
878 <xsl:with-param name="chopString">
879 <xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='h']"/>
884 <xsl:if test="marc:datafield[@tag=246]/marc:subfield[@code='h']">
885 <form authority='gmd'>
886 <xsl:call-template name="chopBrackets">
887 <xsl:with-param name="chopString">
888 <xsl:value-of select="marc:datafield[@tag=246]/marc:subfield[@code='h']"/>
893 <xsl:for-each select="marc:controlfield[@tag=007][substring(text(),1,1)='c']">
895 <xsl:when test="substring(text(),14,1)='a'">
896 <reformattingQuality>access</reformattingQuality>
898 <xsl:when test="substring(text(),14,1)='p'">
899 <reformattingQuality>preservation</reformattingQuality>
901 <xsl:when test="substring(text(),14,1)='r'">
902 <reformattingQuality>replacement</reformattingQuality>
907 <xsl:for-each select="marc:datafield[@tag=856]/marc:subfield[@code='q'][string-length(.)>1]">
909 <xsl:value-of select="."/>
913 <xsl:for-each select="marc:datafield[@tag=256]/marc:subfield[@code='a']">
914 <form><xsl:value-of select="."/></form>
917 <xsl:for-each select="marc:datafield[@tag=300]">
919 <xsl:call-template name="subfieldSelect">
920 <xsl:with-param name="codes">abce</xsl:with-param>
926 <xsl:if test="string-length(normalize-space($physicalDescription))">
927 <physicalDescription>
928 <xsl:copy-of select="$physicalDescription"/>
929 </physicalDescription>
932 <xsl:for-each select="marc:datafield[@tag=520]">
934 <xsl:call-template name="uri"/>
935 <xsl:call-template name="subfieldSelect">
936 <xsl:with-param name="codes">ab</xsl:with-param>
941 <xsl:for-each select="marc:datafield[@tag=505]">
943 <xsl:call-template name="uri"/>
944 <xsl:call-template name="subfieldSelect">
945 <xsl:with-param name="codes">agrt</xsl:with-param>
950 <xsl:for-each select="marc:datafield[@tag=521]">
952 <xsl:call-template name="subfieldSelect">
953 <xsl:with-param name="codes">ab</xsl:with-param>
958 <xsl:if test="$typeOf008='BK' or $typeOf008='CF' or $typeOf008='MU' or $typeOf008='VM'">
959 <xsl:variable name="controlField008-22" select="substring($controlField008,23,1)"/>
961 <xsl:when test="$controlField008-22='d'">
962 <targetAudience>adolescent</targetAudience>
964 <xsl:when test="$controlField008-22='e'">
965 <targetAudience>adult</targetAudience>
967 <xsl:when test="$controlField008-22='g'">
968 <targetAudience>general</targetAudience>
970 <xsl:when test="$controlField008-22='b' or $controlField008-22='c' or $controlField008-22='j'">
971 <targetAudience>juvenile</targetAudience>
973 <xsl:when test="$controlField008-22='a'">
974 <targetAudience>preschool</targetAudience>
976 <xsl:when test="$controlField008-22='f'">
977 <targetAudience>specialized</targetAudience>
982 <xsl:for-each select="marc:datafield[@tag=245]/marc:subfield[@code='c']">
983 <note type="statement of responsibility">
984 <xsl:value-of select="."/>
988 <xsl:for-each select="marc:datafield[@tag=500]">
990 <xsl:value-of select="marc:subfield[@code='a']"/>
991 <xsl:call-template name="uri"/>
995 <xsl:for-each select="marc:datafield[@tag=511]">
996 <note type="performers">
997 <xsl:call-template name="uri"/>
998 <xsl:value-of select="marc:subfield[@code='a']"/>
1002 <xsl:for-each select="marc:datafield[@tag=518]">
1004 <xsl:call-template name="uri"/>
1005 <xsl:value-of select="marc:subfield[@code='a']"/>
1009 <xsl:for-each select="marc:datafield[@tag=501 or @tag=502 or @tag=504 or @tag=506 or @tag=507 or @tag=508 or @tag=513 or @tag=514 or @tag=515 or @tag=516 or @tag=522 or @tag=524 or @tag=525 or @tag=526 or @tag=530 or @tag=533 or @tag=534 or @tag=535 or @tag=536 or @tag=538 or @tag=540 or @tag=541 or @tag=544 or @tag=545 or @tag=546 or @tag=547 or @tag=550 or @tag=552 or @tag=555 or @tag=556 or @tag=561 or @tag=562 or @tag=565 or @tag=567 or @tag=580 or @tag=581 or @tag=583 or @tag=584 or @tag=585 or @tag=586]">
1011 <xsl:call-template name="uri"/>
1012 <xsl:variable name="str">
1013 <xsl:for-each select="marc:subfield[@code!='6' or @code!='8']">
1014 <xsl:value-of select="."/>
1015 <xsl:text> </xsl:text>
1018 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
1022 <xsl:for-each select="marc:datafield[@tag=034][marc:subfield[@code='d' or @code='e' or @code='f' or @code='g']]">
1026 <xsl:call-template name="subfieldSelect">
1027 <xsl:with-param name="codes">defg</xsl:with-param>
1028 </xsl:call-template>
1034 <xsl:for-each select="marc:datafield[@tag=043]">
1036 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c']">
1038 <xsl:attribute name="authority">
1039 <xsl:if test="@code='a'">
1040 <xsl:text>marcgac</xsl:text>
1042 <xsl:if test="@code='b'">
1043 <xsl:value-of select="following-sibling::marc:subfield[@code=2]"/>
1045 <xsl:if test="@code='c'">
1046 <xsl:text>iso3166</xsl:text>
1049 <xsl:value-of select="self::marc:subfield"/>
1055 <xsl:for-each select="marc:datafield[@tag=255]">
1058 <xsl:for-each select="marc:subfield[@code='c']">
1060 <xsl:value-of select="."/>
1063 <xsl:for-each select="marc:subfield[@code='a']">
1065 <xsl:value-of select="."/>
1068 <xsl:for-each select="marc:subfield[@code='b']">
1070 <xsl:value-of select="."/>
1077 <xsl:apply-templates select="marc:datafield[653 >= @tag and @tag >= 600]"/>
1079 <xsl:apply-templates select="marc:datafield[@tag=656]"/>
1081 <xsl:for-each select="marc:datafield[@tag=752]">
1083 <hierarchicalGeographic>
1084 <xsl:for-each select="marc:subfield[@code='a']">
1086 <xsl:value-of select="."/>
1089 <xsl:for-each select="marc:subfield[@code='b']">
1091 <xsl:value-of select="."/>
1094 <xsl:for-each select="marc:subfield[@code='c']">
1096 <xsl:value-of select="."/>
1099 <xsl:for-each select="marc:subfield[@code='d']">
1101 <xsl:value-of select="."/>
1104 </hierarchicalGeographic>
1108 <xsl:for-each select="marc:datafield[@tag=045][marc:subfield[@code='b']]">
1111 <xsl:when test="@ind1=2">
1112 <temporal encoding="iso8601" point="start">
1113 <xsl:value-of select="marc:subfield[@code='b'][1]"/>
1115 <temporal encoding="iso8601" point="end">
1116 <xsl:value-of select="marc:subfield[@code='b'][2]"/>
1120 <xsl:for-each select="marc:subfield[@code='b']">
1121 <temporal encoding="iso8601">
1122 <xsl:value-of select="."/>
1130 <xsl:for-each select="marc:datafield[@tag=050]">
1131 <xsl:for-each select="marc:subfield[@code='b']">
1132 <classification authority="lcc">
1133 <xsl:value-of select="preceding-sibling::marc:subfield[@code='a'][1]"/>
1134 <xsl:text> </xsl:text>
1135 <xsl:value-of select="text()"/>
1138 <xsl:for-each select="marc:subfield[@code='a'][not(following-sibling::marc:subfield[@code='b'])]">
1139 <classification authority="lcc">
1140 <xsl:value-of select="text()"/>
1145 <xsl:for-each select="marc:datafield[@tag=082]">
1146 <classification authority="ddc">
1147 <xsl:if test="marc:subfield[@code='2']">
1148 <xsl:attribute name="edition">
1149 <xsl:value-of select="marc:subfield[@code='2']"/>
1152 <xsl:call-template name="subfieldSelect">
1153 <xsl:with-param name="codes">ab</xsl:with-param>
1154 </xsl:call-template>
1158 <xsl:for-each select="marc:datafield[@tag=080]">
1159 <classification authority="udc">
1160 <xsl:call-template name="subfieldSelect">
1161 <xsl:with-param name="codes">abx</xsl:with-param>
1162 </xsl:call-template>
1166 <xsl:for-each select="marc:datafield[@tag=060]">
1167 <classification authority="nlm">
1168 <xsl:call-template name="subfieldSelect">
1169 <xsl:with-param name="codes">ab</xsl:with-param>
1170 </xsl:call-template>
1174 <xsl:for-each select="marc:datafield[@tag=086][@ind1=0]">
1175 <classification authority="sudocs">
1176 <xsl:value-of select="marc:subfield[@code='a']"/>
1180 <xsl:for-each select="marc:datafield[@tag=086][@ind1=1]">
1181 <classification authority="candoc">
1182 <xsl:value-of select="marc:subfield[@code='a']"/>
1186 <xsl:for-each select="marc:datafield[@tag=086]">
1188 <xsl:attribute name="authority">
1189 <xsl:value-of select="marc:subfield[@code='2']"/>
1191 <xsl:value-of select="marc:subfield[@code='a']"/>
1195 <xsl:for-each select="marc:datafield[@tag=084]">
1197 <xsl:attribute name="authority">
1198 <xsl:value-of select="marc:subfield[@code='2']"/>
1200 <xsl:call-template name="subfieldSelect">
1201 <xsl:with-param name="codes">ab</xsl:with-param>
1202 </xsl:call-template>
1206 <xsl:for-each select="marc:datafield[@tag=440]">
1207 <relatedItem type="series">
1210 <xsl:call-template name="chopPunctuation">
1211 <xsl:with-param name="chopString">
1212 <xsl:call-template name="subfieldSelect">
1213 <xsl:with-param name="codes">av</xsl:with-param>
1214 </xsl:call-template>
1216 </xsl:call-template>
1218 <xsl:call-template name="part"/>
1223 <xsl:for-each select="marc:datafield[@tag=490][@ind1=0]">
1224 <relatedItem type="series">
1227 <xsl:call-template name="chopPunctuation">
1228 <xsl:with-param name="chopString">
1229 <xsl:call-template name="subfieldSelect">
1230 <xsl:with-param name="codes">av</xsl:with-param>
1231 </xsl:call-template> \
1233 </xsl:call-template>
1235 <xsl:call-template name="part"/>
1240 <xsl:for-each select="marc:datafield[@tag=510]">
1241 <relatedItem type="isReferencedBy">
1243 <xsl:call-template name="subfieldSelect">
1244 <xsl:with-param name="codes">abcx3</xsl:with-param>
1245 </xsl:call-template>
1250 <xsl:for-each select="marc:datafield[@tag=534]">
1251 <relatedItem type="original">
1252 <xsl:call-template name="relatedTitle"/>
1253 <xsl:call-template name="relatedName"/>
1254 <xsl:if test="marc:subfield[@code='b' or @code='c']">
1256 <xsl:for-each select="marc:subfield[@code='c']">
1258 <xsl:value-of select="."/>
1261 <xsl:for-each select="marc:subfield[@code='b']">
1263 <xsl:value-of select="."/>
1268 <xsl:call-template name="relatedIdentifierISSN"/>
1269 <xsl:for-each select="marc:subfield[@code='z']">
1270 <identifier type="isbn">
1271 <xsl:value-of select="."/>
1274 <xsl:call-template name="relatedNote"/>
1278 <xsl:for-each select="marc:datafield[@tag=700][marc:subfield[@code='t']]">
1280 <xsl:call-template name="constituentOrRelatedType"/>
1283 <xsl:call-template name="chopPunctuation">
1284 <xsl:with-param name="chopString">
1285 <xsl:call-template name="specialSubfieldSelect">
1286 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1287 <xsl:with-param name="axis">t</xsl:with-param>
1288 <xsl:with-param name="afterCodes">g</xsl:with-param>
1289 </xsl:call-template>
1291 </xsl:call-template>
1293 <xsl:call-template name="part"/>
1295 <name type="personal">
1297 <xsl:call-template name="specialSubfieldSelect">
1298 <xsl:with-param name="anyCodes">aq</xsl:with-param>
1299 <xsl:with-param name="axis">t</xsl:with-param>
1300 <xsl:with-param name="beforeCodes">g</xsl:with-param>
1301 </xsl:call-template>
1303 <xsl:call-template name="termsOfAddress"/>
1304 <xsl:call-template name="nameDate"/>
1305 <xsl:call-template name="role"/>
1307 <xsl:call-template name="relatedForm"/>
1308 <xsl:call-template name="relatedIdentifierISSN"/>
1312 <xsl:for-each select="marc:datafield[@tag=710][marc:subfield[@code='t']]">
1314 <xsl:call-template name="constituentOrRelatedType"/>
1317 <xsl:call-template name="chopPunctuation">
1318 <xsl:with-param name="chopString">
1319 <xsl:call-template name="specialSubfieldSelect">
1320 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1321 <xsl:with-param name="axis">t</xsl:with-param>
1322 <xsl:with-param name="afterCodes">dg</xsl:with-param>
1323 </xsl:call-template>
1325 </xsl:call-template>
1327 <xsl:call-template name="relatedPartNumName"/>
1329 <name type="corporate">
1330 <xsl:for-each select="marc:subfield[@code='a']">
1332 <xsl:value-of select="."/>
1335 <xsl:for-each select="marc:subfield[@code='b']">
1337 <xsl:value-of select="."/>
1340 <xsl:variable name="tempNamePart">
1341 <xsl:call-template name="specialSubfieldSelect">
1342 <xsl:with-param name="anyCodes">c</xsl:with-param>
1343 <xsl:with-param name="axis">t</xsl:with-param>
1344 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1345 </xsl:call-template>
1347 <xsl:if test="normalize-space($tempNamePart)">
1349 <xsl:value-of select="$tempNamePart"/>
1352 <xsl:call-template name="role"/>
1354 <xsl:call-template name="relatedForm"/>
1355 <xsl:call-template name="relatedIdentifierISSN"/>
1359 <xsl:for-each select="marc:datafield[@tag=711][marc:subfield[@code='t']]">
1361 <xsl:call-template name="constituentOrRelatedType"/>
1364 <xsl:call-template name="chopPunctuation">
1365 <xsl:with-param name="chopString">
1366 <xsl:call-template name="specialSubfieldSelect">
1367 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1368 <xsl:with-param name="axis">t</xsl:with-param>
1369 <xsl:with-param name="afterCodes">g</xsl:with-param>
1370 </xsl:call-template>
1372 </xsl:call-template>
1374 <xsl:call-template name="relatedPartNumName"/>
1376 <name type="conference">
1378 <xsl:call-template name="specialSubfieldSelect">
1379 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1380 <xsl:with-param name="axis">t</xsl:with-param>
1381 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1382 </xsl:call-template>
1385 <xsl:call-template name="relatedForm"/>
1386 <xsl:call-template name="relatedIdentifierISSN"/>
1390 <xsl:for-each select="marc:datafield[@tag=730][@ind2=2]">
1392 <xsl:call-template name="constituentOrRelatedType"/>
1395 <xsl:call-template name="chopPunctuation">
1396 <xsl:with-param name="chopString">
1397 <xsl:call-template name="subfieldSelect">
1398 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1399 </xsl:call-template>
1401 </xsl:call-template>
1403 <xsl:call-template name="part"/>
1405 <xsl:call-template name="relatedForm"/>
1406 <xsl:call-template name="relatedIdentifierISSN"/>
1410 <xsl:for-each select="marc:datafield[@tag=740][@ind2=2]">
1412 <xsl:call-template name="constituentOrRelatedType"/>
1415 <xsl:call-template name="chopPunctuation">
1416 <xsl:with-param name="chopString">
1417 <xsl:value-of select="marc:subfield[@code='a']"/>
1419 </xsl:call-template>
1421 <xsl:call-template name="part"/>
1423 <xsl:call-template name="relatedForm"/>
1427 <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]">
1428 <relatedItem type="series">
1429 <xsl:call-template name="relatedItem76X-78X"/>
1433 <xsl:for-each select="marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=777]|marc:datafield[@tag=787]">
1435 <xsl:call-template name="relatedItem76X-78X"/>
1439 <xsl:for-each select="marc:datafield[@tag=775]">
1440 <relatedItem type="otherVersion">
1441 <xsl:call-template name="relatedItem76X-78X"/>
1445 <xsl:for-each select="marc:datafield[@tag=770]|marc:datafield[@tag=774]">
1446 <relatedItem type="constituent">
1447 <xsl:call-template name="relatedItem76X-78X"/>
1451 <xsl:for-each select="marc:datafield[@tag=772]|marc:datafield[@tag=773]">
1452 <relatedItem type="host">
1453 <xsl:call-template name="relatedItem76X-78X"/>
1457 <xsl:for-each select="marc:datafield[@tag=776]">
1458 <relatedItem type="otherFormat">
1459 <xsl:call-template name="relatedItem76X-78X"/>
1463 <xsl:for-each select="marc:datafield[@tag=780]">
1464 <relatedItem type="preceding">
1465 <xsl:call-template name="relatedItem76X-78X"/>
1469 <xsl:for-each select="marc:datafield[@tag=785]">
1470 <relatedItem type="succeeding">
1471 <xsl:call-template name="relatedItem76X-78X"/>
1475 <xsl:for-each select="marc:datafield[@tag=786]">
1476 <relatedItem type="original">
1477 <xsl:call-template name="relatedItem76X-78X"/>
1481 <xsl:for-each select="marc:datafield[@tag=800]">
1482 <relatedItem type="series">
1485 <xsl:call-template name="chopPunctuation">
1486 <xsl:with-param name="chopString">
1487 <xsl:call-template name="specialSubfieldSelect">
1488 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1489 <xsl:with-param name="axis">t</xsl:with-param>
1490 <xsl:with-param name="afterCodes">g</xsl:with-param>
1491 </xsl:call-template>
1493 </xsl:call-template>
1495 <xsl:call-template name="part"/>
1497 <name type="personal">
1499 <xsl:call-template name="chopPunctuation">
1500 <xsl:with-param name="chopString">
1501 <xsl:call-template name="specialSubfieldSelect">
1502 <xsl:with-param name="anyCodes">aq</xsl:with-param>
1503 <xsl:with-param name="axis">t</xsl:with-param>
1504 <xsl:with-param name="beforeCodes">g</xsl:with-param>
1505 </xsl:call-template>
1507 </xsl:call-template>
1509 <xsl:call-template name="termsOfAddress"/>
1510 <xsl:call-template name="nameDate"/>
1511 <xsl:call-template name="role"/>
1513 <xsl:call-template name="relatedForm"/>
1517 <xsl:for-each select="marc:datafield[@tag=810]">
1518 <relatedItem type="series">
1521 <xsl:call-template name="chopPunctuation">
1522 <xsl:with-param name="chopString">
1523 <xsl:call-template name="specialSubfieldSelect">
1524 <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param>
1525 <xsl:with-param name="axis">t</xsl:with-param>
1526 <xsl:with-param name="afterCodes">dg</xsl:with-param>
1527 </xsl:call-template>
1529 </xsl:call-template>
1531 <xsl:call-template name="relatedPartNumName"/>
1533 <name type="corporate">
1534 <xsl:for-each select="marc:subfield[@code='a']">
1536 <xsl:value-of select="."/>
1539 <xsl:for-each select="marc:subfield[@code='b']">
1542 <xsl:value-of select="."/>
1546 <xsl:call-template name="specialSubfieldSelect">
1547 <xsl:with-param name="anyCodes">c</xsl:with-param>
1548 <xsl:with-param name="axis">t</xsl:with-param>
1549 <xsl:with-param name="beforeCodes">dgn</xsl:with-param>
1550 </xsl:call-template>
1552 <xsl:call-template name="role"/>
1554 <xsl:call-template name="relatedForm"/>
1558 <xsl:for-each select="marc:datafield[@tag=811]">
1559 <relatedItem type="series">
1562 <xsl:call-template name="chopPunctuation">
1563 <xsl:with-param name="chopString">
1564 <xsl:call-template name="specialSubfieldSelect">
1565 <xsl:with-param name="anyCodes">tfklsv</xsl:with-param>
1566 <xsl:with-param name="axis">t</xsl:with-param>
1567 <xsl:with-param name="afterCodes">g</xsl:with-param>
1568 </xsl:call-template>
1570 </xsl:call-template>
1572 <xsl:call-template name="relatedPartNumName"/>
1574 <name type="conference">
1576 <xsl:call-template name="specialSubfieldSelect">
1577 <xsl:with-param name="anyCodes">aqdc</xsl:with-param>
1578 <xsl:with-param name="axis">t</xsl:with-param>
1579 <xsl:with-param name="beforeCodes">gn</xsl:with-param>
1580 </xsl:call-template>
1582 <xsl:call-template name="role"/>
1584 <xsl:call-template name="relatedForm"/>
1588 <xsl:for-each select="marc:datafield[@tag=830]">
1589 <relatedItem type="series">
1592 <xsl:call-template name="chopPunctuation">
1593 <xsl:with-param name="chopString">
1594 <xsl:call-template name="subfieldSelect">
1595 <xsl:with-param name="codes">adfgklmorsv</xsl:with-param>
1596 </xsl:call-template>
1598 </xsl:call-template>
1600 <xsl:call-template name="part"/>
1602 <xsl:call-template name="relatedForm"/>
1606 <xsl:for-each select="marc:datafield[@tag=856][@ind2=2]/marc:subfield[@code='q']">
1609 <xsl:value-of select="."/>
1610 </internetMediaType>
1614 <xsl:for-each select="marc:datafield[@tag=020]">
1615 <identifier type="isbn">
1616 <xsl:call-template name="isInvalid"/>
1617 <xsl:value-of select="marc:subfield[@code='a']"/>
1621 <xsl:for-each select="marc:datafield[@tag=024][@ind1=0]">
1622 <identifier type="isrc">
1623 <xsl:call-template name="isInvalid"/>
1624 <xsl:value-of select="marc:subfield[@code='a']"/>
1628 <xsl:for-each select="marc:datafield[@tag=024][@ind1=2]">
1629 <identifier type="ismn">
1630 <xsl:call-template name="isInvalid"/>
1631 <xsl:value-of select="marc:subfield[@code='a']"/>
1635 <xsl:for-each select="marc:datafield[@tag=022]">
1636 <identifier type="issn">
1637 <xsl:call-template name="isInvalid"/>
1638 <xsl:value-of select="marc:subfield[@code='a']"/>
1642 <xsl:for-each select="marc:datafield[@tag=010]">
1643 <identifier type="lccn">
1644 <xsl:call-template name="isInvalid"/>
1645 <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
1649 <xsl:for-each select="marc:datafield[@tag=028]">
1651 <xsl:call-template name="isInvalid"/>
1652 <xsl:attribute name="type">
1654 <xsl:when test="@ind1=0">issue number</xsl:when>
1655 <xsl:when test="@ind1=1">matrix number</xsl:when>
1656 <xsl:when test="@ind1=2">music plate</xsl:when>
1657 <xsl:when test="@ind1=3">music publisher</xsl:when>
1658 <xsl:when test="@ind1=4">videorecording identifier</xsl:when>
1661 <xsl:call-template name="subfieldSelect">
1662 <xsl:with-param name="codes">ab</xsl:with-param>
1663 </xsl:call-template>
1667 <xsl:for-each select="marc:datafield[@tag=024][@ind1='4']">
1668 <identifier type="sici">
1669 <xsl:call-template name="isInvalid"/>
1670 <xsl:call-template name="subfieldSelect">
1671 <xsl:with-param name="codes">ab</xsl:with-param>
1672 </xsl:call-template>
1676 <xsl:for-each select="marc:datafield[@tag=037]">
1677 <identifier type="stock number">
1678 <xsl:call-template name="isInvalid"/>
1679 <xsl:call-template name="subfieldSelect">
1680 <xsl:with-param name="codes">ab</xsl:with-param>
1681 </xsl:call-template>
1685 <xsl:for-each select="marc:datafield[@tag=856][marc:subfield[@code='u']]">
1687 <xsl:attribute name="type">
1689 <xsl:when test="starts-with(marc:subfield[@code='u'],'urn:doi') or starts-with(marc:subfield[@code='u'],'doi')">doi</xsl:when>
1690 <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>
1691 <xsl:otherwise>uri</xsl:otherwise>
1695 <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') ">
1696 <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/'))"/>
1698 <xsl:otherwise><xsl:value-of select="marc:subfield[@code='u']"/></xsl:otherwise>
1701 <xsl:if test="starts-with(marc:subfield[@code='u'],'urn:hdl') or starts-with(marc:subfield[@code='u'],'hdl')">
1702 <identifier type="hdl">
1703 <xsl:if test="marc:subfield[@code='y' or @code='3' or @code='z']">
1704 <xsl:attribute name="displayLabel">
1705 <xsl:call-template name="subfieldSelect">
1706 <xsl:with-param name="codes">y3z</xsl:with-param>
1707 </xsl:call-template>
1710 <xsl:value-of select="concat('hdl:',substring-after(marc:subfield[@code='u'],'http://hdl.loc.gov/')"/>
1715 <xsl:for-each select="marc:datafield[@tag=024][@ind1=1]">
1716 <identifier type="upc">
1717 <xsl:call-template name="isInvalid"/>
1718 <xsl:value-of select="marc:subfield[@code='a']"/>
1722 <xsl:for-each select="marc:datafield[@tag=856][marc:subfield[@code='u']]">
1725 <xsl:if test="marc:subfield[@code=3]">
1726 <xsl:attribute name="displayLabel">
1727 <xsl:call-template name="subfieldSelect">
1728 <xsl:with-param name="codes">3</xsl:with-param>
1729 </xsl:call-template>
1732 <xsl:value-of select="marc:subfield[@code='u']"/>
1737 <xsl:for-each select="marc:datafield[@tag=852]">
1740 <xsl:call-template name="displayLabel"/>
1741 <xsl:call-template name="subfieldSelect">
1742 <xsl:with-param name="codes">abje</xsl:with-param>
1743 </xsl:call-template>
1748 <xsl:for-each select="marc:datafield[@tag=506]">
1749 <accessCondition type="restrictionOnAccess">
1750 <xsl:call-template name="subfieldSelect">
1751 <xsl:with-param name="codes">abcd35</xsl:with-param>
1752 </xsl:call-template>
1756 <xsl:for-each select="marc:datafield[@tag=540]">
1757 <accessCondition type="useAndReproduction">
1758 <xsl:call-template name="subfieldSelect">
1759 <xsl:with-param name="codes">abcde35</xsl:with-param>
1760 </xsl:call-template>
1765 <xsl:for-each select="marc:datafield[@tag=040]">
1766 <recordContentSource authority="marcorg">
1767 <xsl:value-of select="marc:subfield[@code='a']"/>
1768 </recordContentSource>
1771 <xsl:for-each select="marc:controlfield[@tag=008]">
1772 <recordCreationDate encoding="marc">
1773 <xsl:value-of select="substring(.,1,6)"/>
1774 </recordCreationDate>
1777 <xsl:for-each select="marc:controlfield[@tag=005]">
1778 <recordChangeDate encoding="iso8601">
1779 <xsl:value-of select="."/>
1783 <xsl:for-each select="marc:controlfield[@tag=001]">
1785 <xsl:if test="../marc:controlfield[@tag=003]">
1786 <xsl:attribute name="source">
1787 <xsl:value-of select="../marc:controlfield[@tag=003]"/>
1790 <xsl:value-of select="."/>
1794 <xsl:for-each select="marc:datafield[@tag=040]/marc:subfield[@code='b']">
1795 <languageOfCataloging>
1796 <languageTerm authority="iso639-2b" type="code">
1797 <xsl:value-of select="."/>
1799 </languageOfCataloging>
1804 <xsl:template name="displayForm">
1805 <xsl:for-each select="marc:subfield[@code='c']">
1807 <xsl:value-of select="."/>
1812 <xsl:template name="affiliation">
1813 <xsl:for-each select="marc:subfield[@code='u']">
1815 <xsl:value-of select="."/>
1820 <xsl:template name="uri">
1821 <xsl:for-each select="marc:subfield[@code='u']">
1822 <xsl:attribute name="xlink:href">
1823 <xsl:value-of select="."/>
1828 <xsl:template name="role">
1829 <xsl:for-each select="marc:subfield[@code='e']">
1831 <roleTerm type="text">
1832 <xsl:value-of select="."/>
1836 <xsl:for-each select="marc:subfield[@code='4']">
1838 <roleTerm authority="marcrelator" type="code">
1839 <xsl:value-of select="."/>
1845 <xsl:template name="part">
1846 <xsl:variable name="partNumber">
1847 <xsl:call-template name="specialSubfieldSelect">
1848 <xsl:with-param name="axis">n</xsl:with-param>
1849 <xsl:with-param name="anyCodes">n</xsl:with-param>
1850 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
1851 </xsl:call-template>
1853 <xsl:variable name="partName">
1854 <xsl:call-template name="specialSubfieldSelect">
1855 <xsl:with-param name="axis">p</xsl:with-param>
1856 <xsl:with-param name="anyCodes">p</xsl:with-param>
1857 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
1858 </xsl:call-template>
1860 <xsl:if test="string-length(normalize-space($partNumber))">
1862 <xsl:call-template name="chopPunctuation">
1863 <xsl:with-param name="chopString" select="$partNumber"/>
1864 </xsl:call-template>
1867 <xsl:if test="string-length(normalize-space($partName))">
1869 <xsl:call-template name="chopPunctuation">
1870 <xsl:with-param name="chopString" select="$partName"/>
1871 </xsl:call-template>
1876 <xsl:template name="relatedPart">
1877 <xsl:if test="@tag=773">
1878 <xsl:for-each select="marc:subfield[@code='g']">
1881 <xsl:value-of select="."/>
1885 <xsl:for-each select="marc:subfield[@code='q']">
1887 <xsl:call-template name="parsePart"/>
1893 <xsl:template name="relatedPartNumName">
1894 <xsl:variable name="partNumber">
1895 <xsl:call-template name="specialSubfieldSelect">
1896 <xsl:with-param name="axis">g</xsl:with-param>
1897 <xsl:with-param name="anyCodes">g</xsl:with-param>
1898 <xsl:with-param name="afterCodes">pst</xsl:with-param>
1899 </xsl:call-template>
1901 <xsl:variable name="partName">
1902 <xsl:call-template name="specialSubfieldSelect">
1903 <xsl:with-param name="axis">p</xsl:with-param>
1904 <xsl:with-param name="anyCodes">p</xsl:with-param>
1905 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
1906 </xsl:call-template>
1908 <xsl:if test="string-length(normalize-space($partNumber))">
1910 <xsl:value-of select="$partNumber"/>
1913 <xsl:if test="string-length(normalize-space($partName))">
1915 <xsl:value-of select="$partName"/>
1920 <xsl:template name="relatedName">
1921 <xsl:for-each select="marc:subfield[@code='a']">
1924 <xsl:value-of select="."/>
1930 <xsl:template name="relatedForm">
1931 <xsl:for-each select="marc:subfield[@code='h']">
1932 <physicalDescription>
1934 <xsl:value-of select="."/>
1936 </physicalDescription>
1940 <xsl:template name="relatedExtent">
1941 <xsl:for-each select="marc:subfield[@code='h']">
1942 <physicalDescription>
1944 <xsl:value-of select="."/>
1946 </physicalDescription>
1950 <xsl:template name="relatedNote">
1951 <xsl:for-each select="marc:subfield[@code='n']">
1953 <xsl:value-of select="."/>
1958 <xsl:template name="relatedSubject">
1959 <xsl:for-each select="marc:subfield[@code='j']">
1961 <temporal encoding="iso8601">
1962 <xsl:value-of select="."/>
1968 <xsl:template name="relatedIdentifierISSN">
1969 <xsl:for-each select="marc:subfield[@code='x']">
1970 <identifier type="issn">
1971 <xsl:value-of select="."/>
1976 <xsl:template name="relatedIdentifierLocal">
1977 <xsl:for-each select="marc:subfield[@code='w']">
1978 <identifier type="local">
1979 <xsl:value-of select="."/>
1984 <xsl:template name="relatedIdentifier">
1985 <xsl:for-each select="marc:subfield[@code='o']">
1987 <xsl:value-of select="."/>
1992 <xsl:template name="relatedItem76X-78X">
1993 <xsl:call-template name="displayLabel"/>
1994 <xsl:call-template name="relatedTitle76X-78X"/>
1995 <xsl:call-template name="relatedName"/>
1996 <xsl:call-template name="relatedOriginInfo"/>
1997 <xsl:call-template name="relatedLanguage"/>
1998 <xsl:call-template name="relatedExtent"/>
1999 <xsl:call-template name="relatedNote"/>
2000 <xsl:call-template name="relatedSubject"/>
2001 <xsl:call-template name="relatedIdentifier"/>
2002 <xsl:call-template name="relatedIdentifierISSN"/>
2003 <xsl:call-template name="relatedIdentifierLocal"/>
2004 <xsl:call-template name="relatedPart"/>
2007 <xsl:template name="subjectGeographicZ">
2009 <xsl:value-of select="."/>
2013 <xsl:template name="subjectTemporalY">
2015 <xsl:value-of select="."/>
2019 <xsl:template name="subjectTopic">
2021 <xsl:call-template name="chopPunctuation">
2022 <xsl:with-param name="chopString" select="."/>
2023 </xsl:call-template>
2027 <xsl:template name="nameABCDN">
2028 <xsl:for-each select="marc:subfield[@code='a']">
2030 <xsl:call-template name="chopPunctuation">
2031 <xsl:with-param name="chopString" select="."/>
2032 </xsl:call-template>
2035 <xsl:for-each select="marc:subfield[@code='b']">
2037 <xsl:value-of select="."/>
2040 <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
2042 <xsl:call-template name="subfieldSelect">
2043 <xsl:with-param name="codes">cdn</xsl:with-param>
2044 </xsl:call-template>
2049 <xsl:template name="nameABCDQ">
2051 <xsl:call-template name="chopPunctuation">
2052 <xsl:with-param name="chopString">
2053 <xsl:call-template name="subfieldSelect">
2054 <xsl:with-param name="codes">aq</xsl:with-param>
2055 </xsl:call-template>
2057 </xsl:call-template>
2059 <xsl:call-template name="termsOfAddress"/>
2060 <xsl:call-template name="nameDate"/>
2063 <xsl:template name="nameACDEQ">
2065 <xsl:call-template name="subfieldSelect">
2066 <xsl:with-param name="codes">acdeq</xsl:with-param>
2067 </xsl:call-template>
2071 <xsl:template name="constituentOrRelatedType">
2072 <xsl:if test="@ind2=2">
2073 <xsl:attribute name="type">constituent</xsl:attribute>
2077 <xsl:template name="relatedTitle">
2078 <xsl:for-each select="marc:subfield[@code='t']">
2081 <xsl:call-template name="chopPunctuation">
2082 <xsl:with-param name="chopString">
2083 <xsl:value-of select="."/>
2085 </xsl:call-template>
2091 <xsl:template name="relatedTitle76X-78X">
2092 <xsl:for-each select="marc:subfield[@code='t']">
2095 <xsl:call-template name="chopPunctuation">
2096 <xsl:with-param name="chopString">
2097 <xsl:value-of select="."/>
2099 </xsl:call-template>
2101 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2102 <xsl:call-template name="relatedPartNumName"/>
2106 <xsl:for-each select="marc:subfield[@code='p']">
2107 <titleInfo type="abbreviated">
2109 <xsl:call-template name="chopPunctuation">
2110 <xsl:with-param name="chopString">
2111 <xsl:value-of select="."/>
2113 </xsl:call-template>
2115 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2116 <xsl:call-template name="relatedPartNumName"/>
2120 <xsl:for-each select="marc:subfield[@code='s']">
2121 <titleInfo type="uniform">
2123 <xsl:call-template name="chopPunctuation">
2124 <xsl:with-param name="chopString">
2125 <xsl:value-of select="."/>
2127 </xsl:call-template>
2129 <xsl:if test="marc:datafield[@tag!=773]and marc:subfield[@code='g']">
2130 <xsl:call-template name="relatedPartNumName"/>
2136 <xsl:template name="relatedOriginInfo">
2137 <xsl:if test="marc:subfield[@code='b' or @code='d'] or marc:subfield[@code='f']">
2139 <xsl:if test="@tag=775">
2140 <xsl:for-each select="marc:subfield[@code='f']">
2143 <xsl:attribute name="type">code</xsl:attribute>
2144 <xsl:attribute name="authority">marcgac</xsl:attribute>
2145 <xsl:value-of select="."/>
2150 <xsl:for-each select="marc:subfield[@code='d']">
2152 <xsl:value-of select="."/>
2155 <xsl:for-each select="marc:subfield[@code='b']">
2157 <xsl:value-of select="."/>
2164 <xsl:template name="relatedLanguage">
2165 <xsl:for-each select="marc:subfield[@code='e']">
2166 <xsl:call-template name="getLanguage">
2167 <xsl:with-param name="langString">
2168 <xsl:value-of select="."/>
2170 </xsl:call-template>
2173 <xsl:template name="nameDate">
2174 <xsl:for-each select="marc:subfield[@code='d']">
2175 <namePart type="date">
2176 <xsl:call-template name="chopPunctuation">
2177 <xsl:with-param name="chopString" select="."/>
2178 </xsl:call-template>
2183 <xsl:template name="subjectAuthority">
2184 <xsl:attribute name="authority">
2186 <xsl:when test="@ind2=0">lcsh</xsl:when>
2187 <xsl:when test="@ind2=1">lcshac</xsl:when>
2188 <xsl:when test="@ind2=2">mesh</xsl:when>
2190 <xsl:when test="@ind2=3">nal</xsl:when>
2191 <xsl:when test="@ind2=5">csh</xsl:when>
2192 <xsl:when test="@ind2=6">rvm</xsl:when>
2193 <xsl:when test="@ind2=7">
2194 <xsl:value-of select="marc:subfield[@code='2']"/>
2200 <xsl:template name="subjectAnyOrder">
2201 <xsl:for-each select="marc:subfield[@code='v' or @code='x' or @code='y' or @code='z']">
2203 <xsl:when test="@code='v'">
2204 <xsl:call-template name="subjectTopic"/>
2206 <xsl:when test="@code='x'">
2207 <xsl:call-template name="subjectTopic"/>
2209 <xsl:when test="@code='y'">
2210 <xsl:call-template name="subjectTemporalY"/>
2212 <xsl:when test="@code='z'">
2213 <xsl:call-template name="subjectGeographicZ"/>
2219 <xsl:template name="specialSubfieldSelect">
2220 <xsl:param name="anyCodes"/>
2221 <xsl:param name="axis"/>
2222 <xsl:param name="beforeCodes"/>
2223 <xsl:param name="afterCodes"/>
2224 <xsl:variable name="str">
2225 <xsl:for-each select="marc:subfield">
2226 <xsl:if test="contains($anyCodes, @code)
2227 or (contains($beforeCodes,@code) and following-sibling::marc:subfield[@code=$axis])
2228 or (contains($afterCodes,@code) and preceding-sibling::marc:subfield[@code=$axis])">
2229 <xsl:value-of select="text()"/>
2230 <xsl:text> </xsl:text>
2234 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
2237 <xsl:template match="marc:datafield[@tag=600]">
2239 <xsl:call-template name="subjectAuthority"/>
2240 <name type="personal">
2241 <xsl:call-template name="termsOfAddress"/>
2243 <xsl:call-template name="chopPunctuation">
2244 <xsl:with-param name="chopString">
2245 <xsl:call-template name="subfieldSelect">
2246 <xsl:with-param name="codes">aq</xsl:with-param>
2247 </xsl:call-template>
2249 </xsl:call-template>
2251 <xsl:call-template name="nameDate"/>
2252 <xsl:call-template name="affiliation"/>
2253 <xsl:call-template name="role"/>
2255 <xsl:call-template name="subjectAnyOrder"/>
2259 <xsl:template match="marc:datafield[@tag=610]">
2261 <xsl:call-template name="subjectAuthority"/>
2262 <name type="corporate">
2263 <xsl:for-each select="marc:subfield[@code='a']">
2265 <xsl:value-of select="."/>
2268 <xsl:for-each select="marc:subfield[@code='b']">
2270 <xsl:value-of select="."/>
2273 <xsl:if test="marc:subfield[@code='c' or @code='d' or @code='n' or @code='p']">
2275 <xsl:call-template name="subfieldSelect">
2276 <xsl:with-param name="codes">cdnp</xsl:with-param>
2277 </xsl:call-template>
2280 <xsl:call-template name="role"/>
2282 <xsl:call-template name="subjectAnyOrder"/>
2286 <xsl:template match="marc:datafield[@tag=611]">
2288 <xsl:call-template name="subjectAuthority"/>
2289 <name type="conference">
2291 <xsl:call-template name="subfieldSelect">
2292 <xsl:with-param name="codes">abcdeqnp</xsl:with-param>
2293 </xsl:call-template>
2295 <xsl:for-each select="marc:subfield[@code='4']">
2297 <roleTerm authority="marcrelator" type="code">
2298 <xsl:value-of select="."/>
2303 <xsl:call-template name="subjectAnyOrder"/>
2307 <xsl:template match="marc:datafield[@tag=630]">
2309 <xsl:call-template name="subjectAuthority"/>
2312 <xsl:call-template name="chopPunctuation">
2313 <xsl:with-param name="chopString">
2314 <xsl:call-template name="subfieldSelect">
2315 <xsl:with-param name="codes">adfhklor</xsl:with-param>
2316 </xsl:call-template>
2318 </xsl:call-template>
2319 <xsl:call-template name="part"/>
2322 <xsl:call-template name="subjectAnyOrder"/>
2326 <xsl:template match="marc:datafield[@tag=650]">
2328 <xsl:call-template name="subjectAuthority"/>
2330 <xsl:call-template name="chopPunctuation">
2331 <xsl:with-param name="chopString">
2332 <xsl:call-template name="subfieldSelect">
2333 <xsl:with-param name="codes">abcd</xsl:with-param>
2334 </xsl:call-template>
2336 </xsl:call-template>
2338 <xsl:call-template name="subjectAnyOrder"/>
2342 <xsl:template match="marc:datafield[@tag=651]">
2344 <xsl:call-template name="subjectAuthority"/>
2345 <xsl:for-each select="marc:subfield[@code='a']">
2347 <xsl:value-of select="."/>
2350 <xsl:call-template name="subjectAnyOrder"/>
2354 <xsl:template match="marc:datafield[@tag=653]">
2356 <xsl:for-each select="marc:subfield[@code='a']">
2358 <xsl:value-of select="."/>
2364 <xsl:template match="marc:datafield[@tag=656]">
2366 <xsl:if test="marc:subfield[@code=2]">
2367 <xsl:attribute name="authority">
2368 <xsl:value-of select="marc:subfield[@code=2]"/>
2372 <xsl:call-template name="chopPunctuation">
2373 <xsl:with-param name="chopString">
2374 <xsl:value-of select="marc:subfield[@code='a']"/>
2376 </xsl:call-template>
2381 <xsl:template name="termsOfAddress">
2382 <xsl:if test="marc:subfield[@code='b' or @code='c']">
2383 <namePart type="termsOfAddress">
2384 <xsl:call-template name="chopPunctuation">
2385 <xsl:with-param name="chopString">
2386 <xsl:call-template name="subfieldSelect">
2387 <xsl:with-param name="codes">bc</xsl:with-param>
2388 </xsl:call-template>
2390 </xsl:call-template>
2395 <xsl:template name="displayLabel">
2396 <xsl:if test="marc:subfield[@code='i']">
2397 <xsl:attribute name="displayLabel">
2398 <xsl:value-of select="marc:subfield[@code='i']"/>
2401 <xsl:if test="marc:subfield[@code='3']">
2402 <xsl:attribute name="displayLabel">
2403 <xsl:value-of select="marc:subfield[@code='3']"/>
2408 <xsl:template name="isInvalid">
2409 <xsl:if test="marc:subfield[@code='z']">
2410 <xsl:attribute name="invalid">yes</xsl:attribute>
2414 <xsl:template name="script">
2415 <xsl:param name="scriptCode"/>
2416 <xsl:attribute name="script">
2418 <xsl:when test="$scriptCode='(3'">Arabic</xsl:when>
2419 <xsl:when test="$scriptCode='(B'">Latin</xsl:when>
2420 <xsl:when test="$scriptCode='$1'">Chinese, Japanese, Korean</xsl:when>
2421 <xsl:when test="$scriptCode='(N'">Cyrillic</xsl:when>
2422 <xsl:when test="$scriptCode='(2'">Hebrew</xsl:when>
2423 <xsl:when test="$scriptCode='(S'">Greek</xsl:when>
2428 <xsl:template name="parsePart">
2429 <!-- assumes 773$q= 1:2:3<4
2430 with up to 3 levels and one optional start page
2432 <xsl:variable name="level1">
2434 <xsl:when test="contains(text(),':')"><!-- 1:2 -->
2435 <xsl:value-of select="substring-before(text(),':')"/>
2437 <xsl:when test="not(contains(text(),':'))"><!-- 1 or 1<3 -->
2438 <xsl:if test="contains(text(),'<')"><!-- 1<3 -->
2439 <xsl:value-of select="substring-before(text(),'<')"/>
2441 <xsl:if test="not(contains(text(),'<'))"><!-- 1 -->
2442 <xsl:value-of select="text()"/>
2447 <xsl:variable name="sici2">
2449 <xsl:when test="starts-with(substring-after(text(),$level1),':')">
2450 <xsl:value-of select="substring(substring-after(text(),$level1),2)"/>
2452 <xsl:otherwise><xsl:value-of select="substring-after(text(),$level1)"/></xsl:otherwise>
2455 <xsl:variable name="level2">
2457 <xsl:when test="contains($sici2,':')"><!-- 2:3<4 -->
2458 <xsl:value-of select="substring-before($sici2,':')"/>
2460 <xsl:when test="contains($sici2,'<')"><!-- 1: 2<4 -->
2461 <xsl:value-of select="substring-before($sici2,'<')"/>
2464 <xsl:value-of select="$sici2"/><!-- 1:2 -->
2468 <xsl:variable name="sici3">
2470 <xsl:when test="starts-with(substring-after($sici2,$level2),':')">
2471 <xsl:value-of select="substring(substring-after($sici2,$level2),2)"/>
2473 <xsl:otherwise><xsl:value-of select="substring-after($sici2,$level2)"/></xsl:otherwise>
2476 <xsl:variable name="level3">
2478 <xsl:when test="contains($sici3,'<')"><!-- 2<4 -->
2479 <xsl:value-of select="substring-before($sici3,'<')"/>
2482 <xsl:value-of select="$sici3"/><!-- 3 -->
2486 <xsl:variable name="page">
2487 <xsl:if test="contains(text(),'<')">
2488 <xsl:value-of select="substring-after(text(),'<')"/>
2491 <xsl:if test="$level1">
2492 <detail level = "1">
2493 <number><xsl:value-of select="$level1"/></number>
2496 <xsl:if test="$level2">
2497 <detail level = "2">
2498 <number><xsl:value-of select="$level2"/></number>
2501 <xsl:if test="$level3">
2502 <detail level = "3">
2503 <number><xsl:value-of select="$level3"/></number>
2506 <xsl:if test="$page">
2507 <extent unit="page">
2508 <start><xsl:value-of select="$page"/></start>
2513 <xsl:template name="getLanguage">
2514 <xsl:param name="langString"/>
2515 <xsl:param name="controlField008-35-37"/>
2516 <xsl:variable name="length" select="string-length($langString)"/>
2518 <xsl:when test="$length=0"/>
2519 <xsl:when test="$controlField008-35-37=substring($langString,1,3)">
2520 <xsl:call-template name="getLanguage">
2521 <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
2522 <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
2523 </xsl:call-template>
2527 <languageTerm authority="iso639-2b" type="code">
2528 <xsl:value-of select="substring($langString,1,3)"/>
2531 <xsl:call-template name="getLanguage">
2532 <xsl:with-param name="langString" select="substring($langString,4,$length)"/>
2533 <xsl:with-param name="controlField008-35-37" select="$controlField008-35-37"/>
2534 </xsl:call-template>
2539 <xsl:template name="isoLanguage">
2540 <xsl:param name="currentLanguage"/>
2541 <xsl:param name="usedLanguages"/>
2542 <xsl:param name="remainingLanguages"/>
2544 <xsl:when test="string-length($currentLanguage)=0"/>
2545 <xsl:when test="not(contains($usedLanguages, $currentLanguage))">
2547 <languageTerm authority="iso639-2b" type="code">
2548 <xsl:value-of select="$currentLanguage"/>
2551 <xsl:call-template name="isoLanguage">
2552 <xsl:with-param name="currentLanguage"><xsl:value-of select="substring($remainingLanguages,1,3)"/></xsl:with-param>
2553 <xsl:with-param name="usedLanguages"><xsl:value-of select="concat($usedLanguages,$currentLanguage)"/></xsl:with-param>
2554 <xsl:with-param name="remainingLanguages"><xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"/></xsl:with-param>
2555 </xsl:call-template>
2558 <xsl:call-template name="isoLanguage">
2559 <xsl:with-param name="currentLanguage"><xsl:value-of select="substring($remainingLanguages,1,3)"/></xsl:with-param>
2560 <xsl:with-param name="usedLanguages"><xsl:value-of select="concat($usedLanguages,$currentLanguage)"/></xsl:with-param>
2561 <xsl:with-param name="remainingLanguages"><xsl:value-of select="substring($remainingLanguages,4,string-length($remainingLanguages))"/></xsl:with-param>
2562 </xsl:call-template>
2567 <xsl:template name="chopBrackets">
2568 <xsl:param name="chopString"/>
2569 <xsl:variable name="string">
2570 <xsl:call-template name="chopPunctuation">
2571 <xsl:with-param name="chopString" select="$chopString"/>
2572 </xsl:call-template>
2574 <xsl:if test="substring($string, 1,1)='['">
2575 <xsl:value-of select="substring($string,2, string-length($string)-2)"/>
2577 <xsl:if test="substring($string, 1,1)!='['">
2578 <xsl:value-of select="$string"/>
2582 <xsl:template name="rfcLanguages">
2583 <xsl:param name="langCodes"/>
2584 <xsl:param name="nodeNum"/>
2585 <xsl:param name="usedLanguages"/>
2586 <xsl:param name="controlField008-35-37"/>
2587 <xsl:variable name="currentLanguage" select="$langCodes/child::*[position()=$nodeNum]/text()"/>
2589 <xsl:when test="not($currentLanguage)"/>
2590 <xsl:when test="$currentLanguage!=$controlField008-35-37 and $currentLanguage!='rfc3066'">
2591 <xsl:if test="not(contains($usedLanguages,$currentLanguage))">
2593 <languageTerm authority="rfc3066" type="code">
2594 <xsl:value-of select="$currentLanguage"/>
2598 <xsl:call-template name="rfcLanguages">
2599 <xsl:with-param name="langCodes"><xsl:copy-of select="$langCodes"/></xsl:with-param>
2600 <xsl:with-param name="nodeNum"><xsl:value-of select="$nodeNum+1"/></xsl:with-param>
2601 <xsl:with-param name="usedLanguages"><xsl:value-of select="concat($usedLanguages,$currentLanguage)"/></xsl:with-param>
2602 <xsl:with-param name="controlField008-35-37"><xsl:value-of select="$controlField008-35-37"/></xsl:with-param>
2603 </xsl:call-template>
2606 <xsl:call-template name="rfcLanguages">
2607 <xsl:with-param name="langCodes"><xsl:copy-of select="$langCodes"/></xsl:with-param>
2608 <xsl:with-param name="nodeNum"><xsl:value-of select="$nodeNum+1"/></xsl:with-param>
2609 <xsl:with-param name="usedLanguages"><xsl:value-of select="concat($usedLanguages,$currentLanguage)"/></xsl:with-param>
2610 <xsl:with-param name="controlField008-35-37"><xsl:value-of select="$controlField008-35-37"/></xsl:with-param>
2611 </xsl:call-template>
2615 </xsl:stylesheet><!-- Stylus Studio meta-information - (c)1998-2003 Copyright Sonic Software Corporation. All rights reserved.
2617 <scenarios ><scenario default="no" name="Scenario1" userelativepaths="yes" externalpreview="no" url="..\TESTSETS\marc\78x.xml" htmlbaseurl="" outputurl="..\TESTSETS\marc\78xmods.xml" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/><scenario default="yes" name="v3Test" userelativepaths="yes" externalpreview="no" url="v3.xml" htmlbaseurl="" outputurl="..\modsv3Test.xml" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/><scenario default="no" name="Apr 02 Test" userelativepaths="yes" externalpreview="no" url="..\TESTSETS\marc\MODStest.Apr.02.03.xml" htmlbaseurl="" outputurl="" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/><scenario default="no" name="v3Test1" userelativepaths="yes" externalpreview="no" url="..\test_files\marcxml.xml" htmlbaseurl="" outputurl="..\test_files\modsv3Converted.xml" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/><scenario default="no" name="subfieldh" userelativepaths="yes" externalpreview="no" url="v3.xml" htmlbaseurl="" outputurl="" processortype="internal" commandline="" additionalpath="" additionalclasspath="" postprocessortype="none" postprocesscommandline="" postprocessadditionalpath="" postprocessgeneratedext=""/></scenarios><MapperInfo srcSchemaPath="" srcSchemaRoot="" srcSchemaPathIsRelative="yes" srcSchemaInterpretAsXML="no" destSchemaPath="" destSchemaRoot="" destSchemaPathIsRelative="yes" destSchemaInterpretAsXML="no"/>