1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" xmlns:mads="http://www.loc.gov/mads/v2"
3 xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:marc="http://www.loc.gov/MARC21/slim"
4 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="marc">
6 <xsl:include href="http://www.loc.gov/marcxml/xslt/MARC21slimUtils.xsl"/>
7 <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
8 <xsl:strip-space elements="*"/>
11 2.10 fixed type=other and type=otherType for mads:related tmee 09/16/2011
12 2.09 fixed professionTerm and genreTerm empty tag error tmee 09/16/2011
13 2.08 fixed marc:subfield @code='i' matching error tmee 09/16/2011
14 2.07 fixed 555 duplication error tmee 08/10/2011
15 2.06 fixed topic subfield error tmee 08/10/2011
16 2.05 fixed title subfield error tmee 06/20/2011
17 2.04 fixed geographicSubdivision mapping for authority element tmee 06/16/2011
18 2.03 added classification for 053, 055, 060, 065, 070, 080, 082, 083, 086, 087 tmee 06/03/2011
19 2.02 added descriptionStandard for 008/10 tmee 04/27/2011
20 2.01 added extensions for 046, 336, 370, 374, 375, 376 tmee 04/08/2011
21 2.00 redefined imported MODS elements in version 1.0 to MADS elements in version 2.0 tmee 02/08/2011
22 1.08 added 372 subfields $a $s $t for <fieldOfActivity> tmee 06/24/2010
23 1.07 removed role/roleTerm 100, 110, 111, 400, 410, 411, 500, 510, 511, 700, 710, 711 tmee 06/24/2010
24 1.06 added strip-space tmee 06/24/2010
25 1.05 added subfield $a for 130, 430, 530 tmee 06/21/2010
26 1.04 fixed 550 z omission ntra 08/11/2008
27 1.03 removed duplication of 550 $a text tmee 11/01/2006
28 1.02 fixed namespace references between mads and mods ntra 10/06/2006
29 1.01 revised rgue/jrad 11/29/05
30 1.00 adapted from MARC21Slim2MODS3.xsl ntra 07/06/05
33 <!-- authority attribute defaults to 'naf' if not set using this authority parameter, for <authority> descriptors: name, titleInfo, geographic -->
34 <xsl:param name="authority"/>
35 <xsl:variable name="auth">
37 <xsl:when test="$authority">
38 <xsl:value-of select="$authority"/>
40 <xsl:otherwise>naf</xsl:otherwise>
43 <xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
44 <xsl:variable name="controlField008-06"
45 select="substring(descendant-or-self::marc:controlfield[@tag=008],7,1)"/>
46 <xsl:variable name="controlField008-11"
47 select="substring(descendant-or-self::marc:controlfield[@tag=008],12,1)"/>
48 <xsl:variable name="controlField008-14"
49 select="substring(descendant-or-self::marc:controlfield[@tag=008],15,1)"/>
50 <xsl:template match="/">
52 <xsl:when test="descendant-or-self::marc:collection">
53 <mads:madsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
54 xsi:schemaLocation="http://www.loc.gov/mads/v2 http://www.loc.gov/standards/mads/v2/mads-2-0.xsd">
55 <xsl:for-each select="descendant-or-self::marc:collection/marc:record">
56 <mads:mads version="2.0">
57 <xsl:call-template name="marcRecord"/>
60 </mads:madsCollection>
63 <mads:mads version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
64 xsi:schemaLocation="http://www.loc.gov/mads/v2 http://www.loc.gov/standards/mads/mads-2-0.xsd">
65 <xsl:for-each select="descendant-or-self::marc:record">
66 <xsl:call-template name="marcRecord"/>
73 <xsl:template name="marcRecord">
77 <xsl:when test="$controlField008-06='d'">
78 <xsl:attribute name="geographicSubdivision">
79 <xsl:text>direct</xsl:text>
82 <xsl:when test="$controlField008-06='i'">
83 <xsl:attribute name="geographicSubdivision">
84 <xsl:text>indirect</xsl:text>
87 <xsl:when test="$controlField008-06='n'">
88 <xsl:attribute name="geographicSubdivision">
89 <xsl:text>not applicable</xsl:text>
94 <xsl:apply-templates select="marc:datafield[100 <= @tag and @tag < 200]"/>
99 select="marc:datafield[500 <= @tag and @tag <= 585]|marc:datafield[700 <= @tag and @tag <= 785]"/>
102 <xsl:apply-templates select="marc:datafield[400 <= @tag and @tag <= 485]"/>
105 <xsl:apply-templates select="marc:datafield[667 <= @tag and @tag <= 688]"/>
108 <xsl:apply-templates select="marc:datafield[@tag=856]"/>
109 <xsl:apply-templates select="marc:datafield[@tag=010]"/>
110 <xsl:apply-templates select="marc:datafield[@tag=024]"/>
111 <xsl:apply-templates select="marc:datafield[@tag=372]"/>
113 <!-- classification -->
114 <xsl:apply-templates select="marc:datafield[@tag=053]"/>
115 <xsl:apply-templates select="marc:datafield[@tag=055]"/>
116 <xsl:apply-templates select="marc:datafield[@tag=060]"/>
117 <xsl:apply-templates select="marc:datafield[@tag=065]"/>
118 <xsl:apply-templates select="marc:datafield[@tag=070]"/>
119 <xsl:apply-templates select="marc:datafield[@tag=080]"/>
120 <xsl:apply-templates select="marc:datafield[@tag=082]"/>
121 <xsl:apply-templates select="marc:datafield[@tag=083]"/>
122 <xsl:apply-templates select="marc:datafield[@tag=086]"/>
123 <xsl:apply-templates select="marc:datafield[@tag=087]"/>
127 <xsl:for-each select="marc:datafield[@tag=373]">
130 <xsl:value-of select="marc:subfield[@code='a']"/>
132 <mads:dateValid point="start">
133 <xsl:value-of select="marc:subfield[@code='s']"/>
135 <mads:dateValid point="end">
136 <xsl:value-of select="marc:subfield[@code='t']"/>
140 <xsl:for-each select="marc:datafield[@tag=371]">
144 <xsl:value-of select="marc:subfield[@code='a']"/>
147 <xsl:value-of select="marc:subfield[@code='b']"/>
150 <xsl:value-of select="marc:subfield[@code='c']"/>
153 <xsl:value-of select="marc:subfield[@code='d']"/>
156 <xsl:value-of select="marc:subfield[@code='e']"/>
160 <xsl:value-of select="marc:subfield[@code='m']"/>
166 <xsl:for-each select="marc:datafield[@tag=336]">
169 <mads:contentType type="text">
170 <xsl:value-of select="marc:subfield[@code='a']"/>
172 <mads:contentType type="code">
173 <xsl:value-of select="marc:subfield[@code='b']"/>
179 <xsl:for-each select="marc:datafield[@tag=374]">
183 <xsl:when test="marc:subfield[@code='a']">
184 <mads:professionTerm>
185 <xsl:value-of select="marc:subfield[@code='a']"/>
186 </mads:professionTerm>
188 <xsl:when test="marc:subfield[@code='s']">
189 <mads:dateValid point="start">
190 <xsl:value-of select="marc:subfield[@code='s']"/>
193 <xsl:when test="marc:subfield[@code='t']">
194 <mads:dateValid point="end">
195 <xsl:value-of select="marc:subfield[@code='t']"/>
203 <xsl:for-each select="marc:datafield[@tag=375]">
207 <xsl:when test="marc:subfield[@code='a']">
209 <xsl:value-of select="marc:subfield[@code='a']"/>
212 <xsl:when test="marc:subfield[@code='s']">
213 <mads:dateValid point="start">
214 <xsl:value-of select="marc:subfield[@code='s']"/>
217 <xsl:when test="marc:subfield[@code='t']">
218 <mads:dateValid point="end">
219 <xsl:value-of select="marc:subfield[@code='t']"/>
227 <xsl:for-each select="marc:datafield[@tag=376]">
229 <mads:familyInformation>
231 <xsl:value-of select="marc:subfield[@code='a']"/>
233 <mads:nameOfProminentMember>
234 <xsl:value-of select="marc:subfield[@code='b']"/>
235 </mads:nameOfProminentMember>
236 <mads:hereditaryTitle>
237 <xsl:value-of select="marc:subfield[@code='c']"/>
238 </mads:hereditaryTitle>
239 <mads:dateValid point="start">
240 <xsl:value-of select="marc:subfield[@code='s']"/>
242 <mads:dateValid point="end">
243 <xsl:value-of select="marc:subfield[@code='t']"/>
245 </mads:familyInformation>
250 <mads:recordOrigin>Converted from MARCXML to MADS version 2.0 (Revision 2.10)</mads:recordOrigin>
251 <!-- <xsl:apply-templates select="marc:datafield[@tag=024]"/> -->
253 <xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='a']"/>
254 <xsl:apply-templates select="marc:controlfield[@tag=005]"/>
255 <xsl:apply-templates select="marc:controlfield[@tag=001]"/>
256 <xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='b']"/>
257 <xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='e']"/>
258 <xsl:for-each select="marc:controlfield[@tag=008]">
259 <xsl:if test="substring(.,11,1)='a'">
260 <mads:descriptionStandard>
261 <xsl:text>earlier rules</xsl:text>
262 </mads:descriptionStandard>
264 <xsl:if test="substring(.,11,1)='b'">
265 <mads:descriptionStandard>
266 <xsl:text>aacr1</xsl:text>
267 </mads:descriptionStandard>
269 <xsl:if test="substring(.,11,1)='c'">
270 <mads:descriptionStandard>
271 <xsl:text>aacr2</xsl:text>
272 </mads:descriptionStandard>
274 <xsl:if test="substring(.,11,1)='d'">
275 <mads:descriptionStandard>
276 <xsl:text>aacr2 compatible</xsl:text>
277 </mads:descriptionStandard>
279 <xsl:if test="substring(.,11,1)='z'">
280 <mads:descriptionStandard>
281 <xsl:text>other rules</xsl:text>
282 </mads:descriptionStandard>
288 <!-- start of secondary templates -->
290 <!-- ======== xlink ======== -->
292 <!-- <xsl:template name="uri">
293 <xsl:for-each select="marc:subfield[@code='0']">
294 <xsl:attribute name="xlink:href">
295 <xsl:value-of select="."/>
300 <xsl:template match="marc:subfield[@code='i']">
301 <xsl:attribute name="otherType">
302 <xsl:value-of select="."/>
306 <!-- No role/roleTerm mapped in MADS 06/24/2010
307 <xsl:template name="role">
308 <xsl:for-each select="marc:subfield[@code='e']">
310 <mads:roleTerm type="text">
311 <xsl:value-of select="."/>
318 <xsl:template name="part">
319 <xsl:variable name="partNumber">
320 <xsl:call-template name="specialSubfieldSelect">
321 <xsl:with-param name="axis">n</xsl:with-param>
322 <xsl:with-param name="anyCodes">n</xsl:with-param>
323 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
326 <xsl:variable name="partName">
327 <xsl:call-template name="specialSubfieldSelect">
328 <xsl:with-param name="axis">p</xsl:with-param>
329 <xsl:with-param name="anyCodes">p</xsl:with-param>
330 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
333 <xsl:if test="string-length(normalize-space($partNumber))">
335 <xsl:call-template name="chopPunctuation">
336 <xsl:with-param name="chopString" select="$partNumber"/>
340 <xsl:if test="string-length(normalize-space($partName))">
342 <xsl:call-template name="chopPunctuation">
343 <xsl:with-param name="chopString" select="$partName"/>
349 <xsl:template name="nameABCDN">
350 <xsl:for-each select="marc:subfield[@code='a']">
352 <xsl:call-template name="chopPunctuation">
353 <xsl:with-param name="chopString" select="."/>
357 <xsl:for-each select="marc:subfield[@code='b']">
359 <xsl:value-of select="."/>
363 test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
365 <xsl:call-template name="subfieldSelect">
366 <xsl:with-param name="codes">cdn</xsl:with-param>
372 <xsl:template name="nameABCDQ">
374 <xsl:call-template name="chopPunctuation">
375 <xsl:with-param name="chopString">
376 <xsl:call-template name="subfieldSelect">
377 <xsl:with-param name="codes">aq</xsl:with-param>
382 <xsl:call-template name="termsOfAddress"/>
383 <xsl:call-template name="nameDate"/>
386 <xsl:template name="nameACDENQ">
388 <xsl:call-template name="subfieldSelect">
389 <xsl:with-param name="codes">acdenq</xsl:with-param>
394 <xsl:template name="nameDate">
395 <xsl:for-each select="marc:subfield[@code='d']">
396 <mads:namePart type="date">
397 <xsl:call-template name="chopPunctuation">
398 <xsl:with-param name="chopString" select="."/>
404 <xsl:template name="specialSubfieldSelect">
405 <xsl:param name="anyCodes"/>
406 <xsl:param name="axis"/>
407 <xsl:param name="beforeCodes"/>
408 <xsl:param name="afterCodes"/>
409 <xsl:variable name="str">
410 <xsl:for-each select="marc:subfield">
412 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])">
413 <xsl:value-of select="text()"/>
414 <xsl:text> </xsl:text>
418 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
421 <xsl:template name="termsOfAddress">
422 <xsl:if test="marc:subfield[@code='b' or @code='c']">
423 <mads:namePart type="termsOfAddress">
424 <xsl:call-template name="chopPunctuation">
425 <xsl:with-param name="chopString">
426 <xsl:call-template name="subfieldSelect">
427 <xsl:with-param name="codes">bc</xsl:with-param>
435 <xsl:template name="displayLabel">
436 <xsl:if test="marc:subfield[@code='z']">
437 <xsl:attribute name="displayLabel">
438 <xsl:value-of select="marc:subfield[@code='z']"/>
441 <xsl:if test="marc:subfield[@code='3']">
442 <xsl:attribute name="displayLabel">
443 <xsl:value-of select="marc:subfield[@code='3']"/>
448 <xsl:template name="isInvalid">
449 <xsl:if test="@code='z'">
450 <xsl:attribute name="invalid">yes</xsl:attribute>
454 <xsl:template name="sub2Attribute">
456 <xsl:if test="../marc:subfield[@code='2']">
457 <xsl:attribute name="type">
458 <xsl:value-of select="../marc:subfield[@code='2']"/>
463 <xsl:template match="marc:controlfield[@tag=001]">
464 <mads:recordIdentifier>
465 <xsl:if test="../marc:controlfield[@tag=003]">
466 <xsl:attribute name="source">
467 <xsl:value-of select="../marc:controlfield[@tag=003]"/>
470 <xsl:value-of select="."/>
471 </mads:recordIdentifier>
474 <xsl:template match="marc:controlfield[@tag=005]">
475 <mads:recordChangeDate encoding="iso8601">
476 <xsl:value-of select="."/>
477 </mads:recordChangeDate>
480 <xsl:template match="marc:controlfield[@tag=008]">
481 <mads:recordCreationDate encoding="marc">
482 <xsl:value-of select="substring(.,1,6)"/>
483 </mads:recordCreationDate>
486 <xsl:template match="marc:datafield[@tag=010]">
487 <xsl:for-each select="marc:subfield">
488 <mads:identifier type="lccn">
489 <xsl:call-template name="isInvalid"/>
490 <xsl:value-of select="."/>
495 <xsl:template match="marc:datafield[@tag=024]">
496 <xsl:for-each select="marc:subfield[not(@code=2)]">
498 <xsl:call-template name="isInvalid"/>
499 <xsl:call-template name="sub2Attribute"/>
500 <xsl:value-of select="."/>
505 <!-- ========== 372 ========== -->
506 <xsl:template match="marc:datafield[@tag=372]">
507 <mads:fieldOfActivity>
508 <xsl:call-template name="subfieldSelect">
509 <xsl:with-param name="codes">a</xsl:with-param>
511 <xsl:text>-</xsl:text>
512 <xsl:call-template name="subfieldSelect">
513 <xsl:with-param name="codes">st</xsl:with-param>
515 </mads:fieldOfActivity>
519 <!-- ========== 040 ========== -->
520 <xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='a']">
521 <mads:recordContentSource authority="marcorg">
522 <xsl:value-of select="."/>
523 </mads:recordContentSource>
526 <xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='b']">
527 <mads:languageOfCataloging>
528 <mads:languageTerm authority="iso639-2b" type="code">
529 <xsl:value-of select="."/>
531 </mads:languageOfCataloging>
534 <xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='e']">
535 <mads:descriptionStandard>
536 <xsl:value-of select="."/>
537 </mads:descriptionStandard>
540 <!-- ========== classification 2.03 ========== -->
542 <xsl:template match="marc:datafield[@tag=053]">
543 <mads:classification>
544 <xsl:value-of select="."/>
545 </mads:classification>
547 <xsl:template match="marc:datafield[@tag=055]">
548 <mads:classification>
549 <xsl:value-of select="."/>
550 </mads:classification>
552 <xsl:template match="marc:datafield[@tag=060]">
553 <mads:classification>
554 <xsl:value-of select="."/>
555 </mads:classification>
557 <xsl:template match="marc:datafield[@tag=065]">
558 <mads:classification>
559 <xsl:value-of select="."/>
560 </mads:classification>
562 <xsl:template match="marc:datafield[@tag=070]">
563 <mads:classification>
564 <xsl:value-of select="."/>
565 </mads:classification>
567 <xsl:template match="marc:datafield[@tag=080]">
568 <mads:classification>
569 <xsl:value-of select="."/>
570 </mads:classification>
572 <xsl:template match="marc:datafield[@tag=082]">
573 <mads:classification>
574 <xsl:value-of select="."/>
575 </mads:classification>
577 <xsl:template match="marc:datafield[@tag=083]">
578 <mads:classification>
579 <xsl:value-of select="."/>
580 </mads:classification>
582 <xsl:template match="marc:datafield[@tag=086]">
583 <mads:classification>
584 <xsl:value-of select="."/>
585 </mads:classification>
587 <xsl:template match="marc:datafield[@tag=087]">
588 <mads:classification>
589 <xsl:value-of select="."/>
590 </mads:classification>
594 <!-- ========== names ========== -->
595 <xsl:template match="marc:datafield[@tag=100]">
596 <mads:name type="personal">
597 <xsl:call-template name="setAuthority"/>
598 <xsl:call-template name="nameABCDQ"/>
600 <xsl:apply-templates select="*[marc:subfield[not(contains('abcdeq',@code))]]"/>
601 <xsl:call-template name="title"/>
602 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
605 <xsl:template match="marc:datafield[@tag=110]">
606 <mads:name type="corporate">
607 <xsl:call-template name="setAuthority"/>
608 <xsl:call-template name="nameABCDN"/>
610 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
613 <xsl:template match="marc:datafield[@tag=111]">
614 <mads:name type="conference">
615 <xsl:call-template name="setAuthority"/>
616 <xsl:call-template name="nameACDENQ"/>
618 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
621 <xsl:template match="marc:datafield[@tag=400]">
623 <xsl:call-template name="variantTypeAttribute"/>
624 <mads:name type="personal">
625 <xsl:call-template name="nameABCDQ"/>
627 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
628 <xsl:call-template name="title"/>
632 <xsl:template match="marc:datafield[@tag=410]">
634 <xsl:call-template name="variantTypeAttribute"/>
635 <mads:name type="corporate">
636 <xsl:call-template name="nameABCDN"/>
638 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
642 <xsl:template match="marc:datafield[@tag=411]">
644 <xsl:call-template name="variantTypeAttribute"/>
645 <mads:name type="conference">
646 <xsl:call-template name="nameACDENQ"/>
648 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
652 <xsl:template match="marc:datafield[@tag=500]|marc:datafield[@tag=700]">
654 <xsl:call-template name="relatedTypeAttribute"/>
655 <!-- <xsl:call-template name="uri"/> -->
656 <mads:name type="personal">
657 <xsl:call-template name="setAuthority"/>
658 <xsl:call-template name="nameABCDQ"/>
660 <xsl:call-template name="title"/>
661 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
665 <xsl:template match="marc:datafield[@tag=510]|marc:datafield[@tag=710]">
667 <xsl:call-template name="relatedTypeAttribute"/>
668 <!-- <xsl:call-template name="uri"/> -->
669 <mads:name type="corporate">
670 <xsl:call-template name="setAuthority"/>
671 <xsl:call-template name="nameABCDN"/>
673 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
677 <xsl:template match="marc:datafield[@tag=511]|marc:datafield[@tag=711]">
679 <xsl:call-template name="relatedTypeAttribute"/>
680 <!-- <xsl:call-template name="uri"/> -->
681 <mads:name type="conference">
682 <xsl:call-template name="setAuthority"/>
683 <xsl:call-template name="nameACDENQ"/>
685 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
689 <!-- ========== titles ========== -->
690 <xsl:template match="marc:datafield[@tag=130]">
691 <xsl:call-template name="uniform-title"/>
692 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
695 <xsl:template match="marc:datafield[@tag=430]">
697 <xsl:call-template name="variantTypeAttribute"/>
698 <xsl:call-template name="uniform-title"/>
699 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
703 <xsl:template match="marc:datafield[@tag=530]|marc:datafield[@tag=730]">
705 <xsl:call-template name="relatedTypeAttribute"/>
706 <xsl:call-template name="uniform-title"/>
707 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
711 <xsl:template name="title">
712 <xsl:variable name="hasTitle">
713 <xsl:for-each select="marc:subfield">
714 <xsl:if test="(contains('tfghklmors',@code) )">
715 <xsl:value-of select="@code"/>
719 <xsl:if test="string-length($hasTitle) > 0 ">
721 <xsl:call-template name="setAuthority"/>
723 <xsl:variable name="str">
724 <xsl:for-each select="marc:subfield">
725 <xsl:if test="(contains('atfghklmors',@code) )">
726 <xsl:value-of select="text()"/>
727 <xsl:text> </xsl:text>
731 <xsl:call-template name="chopPunctuation">
732 <xsl:with-param name="chopString">
733 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
737 <xsl:call-template name="part"/>
738 <!-- <xsl:call-template name="uri"/> -->
743 <xsl:template name="uniform-title">
744 <xsl:variable name="hasTitle">
745 <xsl:for-each select="marc:subfield">
746 <xsl:if test="(contains('atfghklmors',@code) )">
747 <xsl:value-of select="@code"/>
751 <xsl:if test="string-length($hasTitle) > 0 ">
753 <xsl:call-template name="setAuthority"/>
755 <xsl:variable name="str">
756 <xsl:for-each select="marc:subfield">
757 <xsl:if test="(contains('adfghklmors',@code) )">
758 <xsl:value-of select="text()"/>
759 <xsl:text> </xsl:text>
763 <xsl:call-template name="chopPunctuation">
764 <xsl:with-param name="chopString">
765 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
769 <xsl:call-template name="part"/>
770 <!-- <xsl:call-template name="uri"/> -->
776 <!-- ========== topics ========== -->
777 <xsl:template match="marc:subfield[@code='x']">
779 <xsl:call-template name="chopPunctuation">
780 <xsl:with-param name="chopString">
781 <xsl:value-of select="."/>
789 match="marc:datafield[@tag=150][marc:subfield[@code='a' or @code='b']]|marc:datafield[@tag=180][marc:subfield[@code='x']]">
790 <xsl:call-template name="topic"/>
791 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
794 match="marc:datafield[@tag=450][marc:subfield[@code='a' or @code='b']]|marc:datafield[@tag=480][marc:subfield[@code='x']]">
796 <xsl:call-template name="variantTypeAttribute"/>
797 <xsl:call-template name="topic"/>
801 match="marc:datafield[@tag=550 or @tag=750][marc:subfield[@code='a' or @code='b']]">
803 <xsl:call-template name="relatedTypeAttribute"/>
804 <!-- <xsl:call-template name="uri"/> -->
805 <xsl:call-template name="topic"/>
806 <xsl:apply-templates select="marc:subfield[@code='z']"/>
809 <xsl:template name="topic">
811 <xsl:call-template name="setAuthority"/>
812 <!-- tmee2006 dedupe 550a
813 <xsl:if test="@tag=550 or @tag=750">
814 <xsl:call-template name="subfieldSelect">
815 <xsl:with-param name="codes">ab</xsl:with-param>
820 <xsl:when test="@tag=180 or @tag=480 or @tag=580 or @tag=780">
821 <xsl:call-template name="chopPunctuation">
822 <xsl:with-param name="chopString">
823 <xsl:apply-templates select="marc:subfield[@code='x']"/>
828 <xsl:call-template name="chopPunctuation">
829 <xsl:with-param name="chopString">
831 <xsl:when test="@tag=180 or @tag=480 or @tag=580 or @tag=780">
832 <xsl:apply-templates select="marc:subfield[@code='x']"/>
835 <xsl:call-template name="subfieldSelect">
836 <xsl:with-param name="codes">ab</xsl:with-param>
845 <!-- ========= temporals ========== -->
846 <xsl:template match="marc:subfield[@code='y']">
848 <xsl:call-template name="chopPunctuation">
849 <xsl:with-param name="chopString">
850 <xsl:value-of select="."/>
856 match="marc:datafield[@tag=148][marc:subfield[@code='a']]|marc:datafield[@tag=182 ][marc:subfield[@code='y']]">
857 <xsl:call-template name="temporal"/>
860 match="marc:datafield[@tag=448][marc:subfield[@code='a']]|marc:datafield[@tag=482][marc:subfield[@code='y']]">
862 <xsl:call-template name="variantTypeAttribute"/>
863 <xsl:call-template name="temporal"/>
867 match="marc:datafield[@tag=548 or @tag=748][marc:subfield[@code='a']]|marc:datafield[@tag=582 or @tag=782][marc:subfield[@code='y']]">
869 <xsl:call-template name="relatedTypeAttribute"/>
870 <!-- <xsl:call-template name="uri"/> -->
871 <xsl:call-template name="temporal"/>
874 <xsl:template name="temporal">
876 <xsl:call-template name="setAuthority"/>
877 <xsl:if test="@tag=548 or @tag=748">
878 <xsl:value-of select="marc:subfield[@code='a']"/>
880 <xsl:call-template name="chopPunctuation">
881 <xsl:with-param name="chopString">
883 <xsl:when test="@tag=182 or @tag=482 or @tag=582 or @tag=782">
884 <xsl:apply-templates select="marc:subfield[@code='y']"/>
887 <xsl:value-of select="marc:subfield[@code='a']"/>
893 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
896 <!-- ========== genre ========== -->
897 <xsl:template match="marc:subfield[@code='v']">
899 <xsl:call-template name="chopPunctuation">
900 <xsl:with-param name="chopString">
901 <xsl:value-of select="."/>
907 match="marc:datafield[@tag=155][marc:subfield[@code='a']]|marc:datafield[@tag=185][marc:subfield[@code='v']]">
908 <xsl:call-template name="genre"/>
911 match="marc:datafield[@tag=455][marc:subfield[@code='a']]|marc:datafield[@tag=485 ][marc:subfield[@code='v']]">
913 <xsl:call-template name="variantTypeAttribute"/>
914 <xsl:call-template name="genre"/>
918 <xsl:template match="marc:datafield[@tag=555]">
920 <xsl:call-template name="relatedTypeAttribute"/>
921 <xsl:call-template name="uri"/>
922 <xsl:call-template name="genre"/>
927 match="marc:datafield[@tag=555 or @tag=755][marc:subfield[@code='a']]|marc:datafield[@tag=585][marc:subfield[@code='v']]">
929 <xsl:call-template name="relatedTypeAttribute"/>
930 <xsl:call-template name="genre"/>
933 <xsl:template name="genre">
935 <xsl:if test="@tag=555">
936 <xsl:value-of select="marc:subfield[@code='a']"/>
938 <xsl:call-template name="setAuthority"/>
939 <xsl:call-template name="chopPunctuation">
940 <xsl:with-param name="chopString">
943 <xsl:when test="@tag='555'"/>
944 <xsl:when test="@tag=185 or @tag=485 or @tag=585">
945 <xsl:apply-templates select="marc:subfield[@code='v']"/>
948 <xsl:value-of select="marc:subfield[@code='a']"/>
954 <xsl:apply-templates/>
957 <!-- ========= geographic ========== -->
958 <xsl:template match="marc:subfield[@code='z']">
960 <xsl:call-template name="chopPunctuation">
961 <xsl:with-param name="chopString">
962 <xsl:value-of select="."/>
967 <xsl:template name="geographic">
969 <xsl:if test="@tag=551">
970 <xsl:value-of select="marc:subfield[@code='a']"/>
972 <xsl:call-template name="setAuthority"/>
973 <xsl:call-template name="chopPunctuation">
974 <xsl:with-param name="chopString">
976 <xsl:when test="@tag=181 or @tag=481 or @tag=581">
977 <xsl:apply-templates select="marc:subfield[@code='z']"/>
980 <xsl:value-of select="marc:subfield[@code='a']"/>
986 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
989 match="marc:datafield[@tag=151][marc:subfield[@code='a']]|marc:datafield[@tag=181][marc:subfield[@code='z']]">
990 <xsl:call-template name="geographic"/>
993 match="marc:datafield[@tag=451][marc:subfield[@code='a']]|marc:datafield[@tag=481][marc:subfield[@code='z']]">
995 <xsl:call-template name="variantTypeAttribute"/>
996 <xsl:call-template name="geographic"/>
1000 match="marc:datafield[@tag=551]|marc:datafield[@tag=581][marc:subfield[@code='z']]">
1002 <xsl:call-template name="relatedTypeAttribute"/>
1003 <!-- <xsl:call-template name="uri"/> -->
1004 <xsl:call-template name="geographic"/>
1007 <xsl:template match="marc:datafield[@tag=580]">
1009 <xsl:call-template name="relatedTypeAttribute"/>
1010 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1014 match="marc:datafield[@tag=751][marc:subfield[@code='z']]|marc:datafield[@tag=781][marc:subfield[@code='z']]">
1016 <xsl:call-template name="relatedTypeAttribute"/>
1017 <xsl:call-template name="geographic"/>
1020 <xsl:template match="marc:datafield[@tag=755]">
1022 <xsl:call-template name="relatedTypeAttribute"/>
1023 <xsl:call-template name="genre"/>
1024 <xsl:call-template name="setAuthority"/>
1025 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1028 <xsl:template match="marc:datafield[@tag=780]">
1030 <xsl:call-template name="relatedTypeAttribute"/>
1031 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1034 <xsl:template match="marc:datafield[@tag=785]">
1036 <xsl:call-template name="relatedTypeAttribute"/>
1037 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1041 <!-- ========== notes ========== -->
1042 <xsl:template match="marc:datafield[667 <= @tag and @tag <= 688]">
1045 <xsl:when test="@tag=667">
1046 <xsl:attribute name="type">nonpublic</xsl:attribute>
1048 <xsl:when test="@tag=670">
1049 <xsl:attribute name="type">source</xsl:attribute>
1051 <xsl:when test="@tag=675">
1052 <xsl:attribute name="type">notFound</xsl:attribute>
1054 <xsl:when test="@tag=678">
1055 <xsl:attribute name="type">history</xsl:attribute>
1057 <xsl:when test="@tag=681">
1058 <xsl:attribute name="type">subject example</xsl:attribute>
1060 <xsl:when test="@tag=682">
1061 <xsl:attribute name="type">deleted heading information</xsl:attribute>
1063 <xsl:when test="@tag=688">
1064 <xsl:attribute name="type">application history</xsl:attribute>
1067 <xsl:call-template name="chopPunctuation">
1068 <xsl:with-param name="chopString">
1070 <xsl:when test="@tag=667 or @tag=675">
1071 <xsl:value-of select="marc:subfield[@code='a']"/>
1073 <xsl:when test="@tag=670 or @tag=678">
1074 <xsl:call-template name="subfieldSelect">
1075 <xsl:with-param name="codes">ab</xsl:with-param>
1076 </xsl:call-template>
1078 <xsl:when test="680 <= @tag and @tag <=688">
1079 <xsl:call-template name="subfieldSelect">
1080 <xsl:with-param name="codes">ai</xsl:with-param>
1081 </xsl:call-template>
1085 </xsl:call-template>
1089 <!-- ========== url ========== -->
1090 <xsl:template match="marc:datafield[@tag=856][marc:subfield[@code='u']]">
1092 <xsl:if test="marc:subfield[@code='z' or @code='3']">
1093 <xsl:attribute name="displayLabel">
1094 <xsl:call-template name="subfieldSelect">
1095 <xsl:with-param name="codes">z3</xsl:with-param>
1096 </xsl:call-template>
1099 <xsl:value-of select="marc:subfield[@code='u']"/>
1103 <xsl:template name="relatedTypeAttribute">
1106 test="@tag=500 or @tag=510 or @tag=511 or @tag=548 or @tag=550 or @tag=551 or @tag=555 or @tag=580 or @tag=581 or @tag=582 or @tag=585">
1107 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='a'">
1108 <xsl:attribute name="type">earlier</xsl:attribute>
1110 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='b'">
1111 <xsl:attribute name="type">later</xsl:attribute>
1113 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='t'">
1114 <xsl:attribute name="type">parentOrg</xsl:attribute>
1116 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='g'">
1117 <xsl:attribute name="type">broader</xsl:attribute>
1119 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='h'">
1120 <xsl:attribute name="type">narrower</xsl:attribute>
1122 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='r'">
1123 <xsl:attribute name="type">other</xsl:attribute>
1125 <xsl:if test="contains('fin|', substring(marc:subfield[@code='w'],1,1))">
1126 <xsl:attribute name="type">other</xsl:attribute>
1129 <xsl:when test="@tag=530 or @tag=730">
1130 <xsl:attribute name="type">other</xsl:attribute>
1134 <xsl:attribute name="type">equivalent</xsl:attribute>
1137 <xsl:apply-templates select="marc:subfield[@code='i']"/>
1140 <xsl:template name="variantTypeAttribute">
1143 test="@tag=400 or @tag=410 or @tag=411 or @tag=451 or @tag=455 or @tag=480 or @tag=481 or @tag=482 or @tag=485">
1144 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='d'">
1145 <xsl:attribute name="type">acronym</xsl:attribute>
1147 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='n'">
1148 <xsl:attribute name="type">other</xsl:attribute>
1150 <xsl:if test="contains('fit', substring(marc:subfield[@code='w'],1,1))">
1151 <xsl:attribute name="type">other</xsl:attribute>
1156 <xsl:attribute name="type">other</xsl:attribute>
1159 <xsl:apply-templates select="marc:subfield[@code='i']"/>
1162 <xsl:template name="setAuthority">
1164 <!-- can be called from the datafield or subfield level, so "..//@tag" means
1165 the tag can be at the subfield's parent level or at the datafields own level -->
1168 test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='a' and $controlField008-14='a'">
1169 <xsl:attribute name="authority">
1170 <xsl:text>naf</xsl:text>
1174 test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='a' and $controlField008-14='b'">
1175 <xsl:attribute name="authority">
1176 <xsl:text>lcsh</xsl:text>
1180 test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='k'">
1181 <xsl:attribute name="authority">
1182 <xsl:text>lacnaf</xsl:text>
1186 test="ancestor-or-self::marc:datafield/@tag=100 and @ind1=3 and $controlField008-11='a' and $controlField008-14='b'">
1187 <xsl:attribute name="authority">
1188 <xsl:text>lcsh</xsl:text>
1192 test="ancestor-or-self::marc:datafield/@tag=100 and @ind1=3 and $controlField008-11='k' and $controlField008-14='b'">
1193 <xsl:attribute name="authority">cash</xsl:attribute>
1196 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='a' and $controlField008-14='a'">
1197 <xsl:attribute name="authority">naf</xsl:attribute>
1200 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='a' and $controlField008-14='b'">
1201 <xsl:attribute name="authority">lcsh</xsl:attribute>
1204 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='k' and $controlField008-14='a'">
1205 <xsl:attribute name="authority">
1206 <xsl:text>lacnaf</xsl:text>
1210 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='k' and $controlField008-14='b'">
1211 <xsl:attribute name="authority">
1212 <xsl:text>cash</xsl:text>
1216 test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='b'">
1217 <xsl:attribute name="authority">
1218 <xsl:text>lcshcl</xsl:text>
1222 test="(ancestor-or-self::marc:datafield/@tag=100 or ancestor-or-self::marc:datafield/@tag=110 or ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130 or ancestor-or-self::marc:datafield/@tag=151) and $controlField008-11='c'">
1223 <xsl:attribute name="authority">
1224 <xsl:text>nlmnaf</xsl:text>
1228 test="(ancestor-or-self::marc:datafield/@tag=100 or ancestor-or-self::marc:datafield/@tag=110 or ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130 or ancestor-or-self::marc:datafield/@tag=151) and $controlField008-11='d'">
1229 <xsl:attribute name="authority">
1230 <xsl:text>nalnaf</xsl:text>
1234 test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='r'">
1235 <xsl:attribute name="authority">
1236 <xsl:text>aat</xsl:text>
1240 test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='s'">
1241 <xsl:attribute name="authority">sears</xsl:attribute>
1244 test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='v'">
1245 <xsl:attribute name="authority">rvm</xsl:attribute>
1248 test="100 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 155 and $controlField008-11='z'">
1249 <xsl:attribute name="authority">
1251 select="../marc:datafield[ancestor-or-self::marc:datafield/@tag=040]/marc:subfield[@code='f']"
1256 test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='a' and $controlField008-14='a'">
1257 <xsl:attribute name="authority">
1258 <xsl:text>naf</xsl:text>
1262 test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='a' and $controlField008-14='b'">
1263 <xsl:attribute name="authority">
1264 <xsl:text>lcsh</xsl:text>
1268 test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='k' ">
1269 <xsl:attribute name="authority">
1270 <xsl:text>lacnaf</xsl:text>
1274 test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='a' ">
1275 <xsl:attribute name="authority">
1276 <xsl:text>lcsh</xsl:text>
1280 test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='a' ">
1281 <xsl:attribute name="authority">
1282 <xsl:text>lcsh</xsl:text>
1286 test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='c' ">
1287 <xsl:attribute name="authority">
1288 <xsl:text>mesh</xsl:text>
1292 test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='d' ">
1293 <xsl:attribute name="authority">
1294 <xsl:text>nal</xsl:text>
1298 test="(ancestor-or-self::marc:datafield/@tag=148 or ancestor-or-self::marc:datafield/@tag=150 or ancestor-or-self::marc:datafield/@tag=155) and $controlField008-11='k' ">
1299 <xsl:attribute name="authority">
1300 <xsl:text>cash</xsl:text>
1304 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='a' and $controlField008-14='a'">
1305 <xsl:attribute name="authority">
1306 <xsl:text>naf</xsl:text>
1310 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='a' and $controlField008-14='b'">
1311 <xsl:attribute name="authority">lcsh</xsl:attribute>
1314 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='k' and $controlField008-14='a'">
1315 <xsl:attribute name="authority">lacnaf</xsl:attribute>
1318 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='k' and $controlField008-14='b'">
1319 <xsl:attribute name="authority">cash</xsl:attribute>
1322 test="(..//ancestor-or-self::marc:datafield/@tag=180 or ..//ancestor-or-self::marc:datafield/@tag=181 or ..//ancestor-or-self::marc:datafield/@tag=182 or ..//ancestor-or-self::marc:datafield/@tag=185) and $controlField008-11='a'">
1323 <xsl:attribute name="authority">lcsh</xsl:attribute>
1326 test="ancestor-or-self::marc:datafield/@tag=700 and (@ind1='0' or @ind1='1') and @ind2='0'">
1327 <xsl:attribute name="authority">naf</xsl:attribute>
1330 test="ancestor-or-self::marc:datafield/@tag=700 and (@ind1='0' or @ind1='1') and @ind2='5'">
1331 <xsl:attribute name="authority">lacnaf</xsl:attribute>
1333 <xsl:when test="ancestor-or-self::marc:datafield/@tag=700 and @ind1='3' and @ind2='0'">
1334 <xsl:attribute name="authority">lcsh</xsl:attribute>
1336 <xsl:when test="ancestor-or-self::marc:datafield/@tag=700 and @ind1='3' and @ind2='5'">
1337 <xsl:attribute name="authority">cash</xsl:attribute>
1340 test="(700 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 755 ) and @ind2='1'">
1341 <xsl:attribute name="authority">lcshcl</xsl:attribute>
1344 test="(ancestor-or-self::marc:datafield/@tag=700 or ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='2'">
1345 <xsl:attribute name="authority">nlmnaf</xsl:attribute>
1348 test="(ancestor-or-self::marc:datafield/@tag=700 or ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='3'">
1349 <xsl:attribute name="authority">nalnaf</xsl:attribute>
1352 test="(700 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 755 ) and @ind2='6'">
1353 <xsl:attribute name="authority">rvm</xsl:attribute>
1356 test="(700 <= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag <= 755 ) and @ind2='7'">
1357 <xsl:attribute name="authority">
1358 <xsl:value-of select="marc:subfield[@code='2']"/>
1362 test="(ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='5'">
1363 <xsl:attribute name="authority">lacnaf</xsl:attribute>
1366 test="(ancestor-or-self::marc:datafield/@tag=710 or ancestor-or-self::marc:datafield/@tag=711 or ancestor-or-self::marc:datafield/@tag=730 or ancestor-or-self::marc:datafield/@tag=751) and @ind2='0'">
1367 <xsl:attribute name="authority">naf</xsl:attribute>
1370 test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='0'">
1371 <xsl:attribute name="authority">lcsh</xsl:attribute>
1374 test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='2'">
1375 <xsl:attribute name="authority">mesh</xsl:attribute>
1378 test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='3'">
1379 <xsl:attribute name="authority">nal</xsl:attribute>
1382 test="(ancestor-or-self::marc:datafield/@tag=748 or ancestor-or-self::marc:datafield/@tag=750 or ancestor-or-self::marc:datafield/@tag=755) and @ind2='5'">
1383 <xsl:attribute name="authority">cash</xsl:attribute>
1387 <xsl:template match="*"/>