570eaaa2f58a58bf4bed37c9630410eb13c50c33
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / xslt / MARC21slim2MADS.xsl
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">
5
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="*"/>
9
10     <!--
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
31 -->
32
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">
36         <xsl:choose>
37             <xsl:when test="$authority">
38                 <xsl:value-of select="$authority"/>
39             </xsl:when>
40             <xsl:otherwise>naf</xsl:otherwise>
41         </xsl:choose>
42     </xsl:variable>
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="/">
51         <xsl:choose>
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"/>
58                         </mads:mads>
59                     </xsl:for-each>
60                 </mads:madsCollection>
61             </xsl:when>
62             <xsl:otherwise>
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"/>
67                     </xsl:for-each>
68                 </mads:mads>
69             </xsl:otherwise>
70         </xsl:choose>
71     </xsl:template>
72
73     <xsl:template name="marcRecord">
74         <mads:authority>
75             <!-- 2.04 -->
76             <xsl:choose>
77                 <xsl:when test="$controlField008-06='d'">
78                     <xsl:attribute name="geographicSubdivision">
79                         <xsl:text>direct</xsl:text>
80                     </xsl:attribute>
81                 </xsl:when>
82                 <xsl:when test="$controlField008-06='i'">
83                     <xsl:attribute name="geographicSubdivision">
84                         <xsl:text>indirect</xsl:text>
85                     </xsl:attribute>
86                 </xsl:when>
87                 <xsl:when test="$controlField008-06='n'">
88                     <xsl:attribute name="geographicSubdivision">
89                         <xsl:text>not applicable</xsl:text>
90                     </xsl:attribute>
91                 </xsl:when>
92             </xsl:choose>
93
94             <xsl:apply-templates select="marc:datafield[100 &lt;= @tag  and @tag &lt; 200]"/>
95         </mads:authority>
96
97         <!-- related -->
98         <xsl:apply-templates
99             select="marc:datafield[500 &lt;= @tag and @tag &lt;= 585]|marc:datafield[700 &lt;= @tag and @tag &lt;= 785]"/>
100
101         <!-- variant -->
102         <xsl:apply-templates select="marc:datafield[400 &lt;= @tag and @tag &lt;= 485]"/>
103
104         <!-- notes -->
105         <xsl:apply-templates select="marc:datafield[667 &lt;= @tag and @tag &lt;= 688]"/>
106
107         <!-- url -->
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]"/>
112
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]"/>
124
125         <!-- affiliation-->
126
127         <xsl:for-each select="marc:datafield[@tag=373]">
128             <mads:affiliation>
129                 <mads:position>
130                     <xsl:value-of select="marc:subfield[@code='a']"/>
131                 </mads:position>
132                 <mads:dateValid point="start">
133                     <xsl:value-of select="marc:subfield[@code='s']"/>
134                 </mads:dateValid>
135                 <mads:dateValid point="end">
136                     <xsl:value-of select="marc:subfield[@code='t']"/>
137                 </mads:dateValid>
138             </mads:affiliation>
139         </xsl:for-each>
140         <xsl:for-each select="marc:datafield[@tag=371]">
141             <mads:affiliation>
142                 <mads:address>
143                     <mads:street>
144                         <xsl:value-of select="marc:subfield[@code='a']"/>
145                     </mads:street>
146                     <mads:city>
147                         <xsl:value-of select="marc:subfield[@code='b']"/>
148                     </mads:city>
149                     <mads:state>
150                         <xsl:value-of select="marc:subfield[@code='c']"/>
151                     </mads:state>
152                     <mads:country>
153                         <xsl:value-of select="marc:subfield[@code='d']"/>
154                     </mads:country>
155                     <mads:postcode>
156                         <xsl:value-of select="marc:subfield[@code='e']"/>
157                     </mads:postcode>
158                 </mads:address>
159                 <mads:email>
160                     <xsl:value-of select="marc:subfield[@code='m']"/>
161                 </mads:email>
162             </mads:affiliation>
163         </xsl:for-each>
164
165         <!-- extension-->
166         <xsl:for-each select="marc:datafield[@tag=336]">
167             <mads:extension>
168                 <mads:contentType>
169                     <mads:contentType type="text">
170                         <xsl:value-of select="marc:subfield[@code='a']"/>
171                     </mads:contentType>
172                     <mads:contentType type="code">
173                         <xsl:value-of select="marc:subfield[@code='b']"/>
174                     </mads:contentType>
175                 </mads:contentType>
176             </mads:extension>
177         </xsl:for-each>
178
179         <xsl:for-each select="marc:datafield[@tag=374]">
180             <mads:extension>
181                 <mads:profession>
182                     <xsl:choose>
183                         <xsl:when test="marc:subfield[@code='a']">
184                             <mads:professionTerm>
185                                 <xsl:value-of select="marc:subfield[@code='a']"/>
186                             </mads:professionTerm>
187                         </xsl:when>
188                         <xsl:when test="marc:subfield[@code='s']">
189                             <mads:dateValid point="start">
190                                 <xsl:value-of select="marc:subfield[@code='s']"/>
191                             </mads:dateValid>
192                         </xsl:when>
193                         <xsl:when test="marc:subfield[@code='t']">
194                             <mads:dateValid point="end">
195                                 <xsl:value-of select="marc:subfield[@code='t']"/>
196                             </mads:dateValid>
197                         </xsl:when>
198                     </xsl:choose>
199                 </mads:profession>
200             </mads:extension>
201         </xsl:for-each>
202
203         <xsl:for-each select="marc:datafield[@tag=375]">
204             <mads:extension>
205                 <mads:gender>
206                     <xsl:choose>
207                         <xsl:when test="marc:subfield[@code='a']">
208                             <mads:genderTerm>
209                                 <xsl:value-of select="marc:subfield[@code='a']"/>
210                             </mads:genderTerm>
211                         </xsl:when>
212                         <xsl:when test="marc:subfield[@code='s']">
213                             <mads:dateValid point="start">
214                                 <xsl:value-of select="marc:subfield[@code='s']"/>
215                             </mads:dateValid>
216                         </xsl:when>
217                         <xsl:when test="marc:subfield[@code='t']">
218                             <mads:dateValid point="end">
219                                 <xsl:value-of select="marc:subfield[@code='t']"/>
220                             </mads:dateValid>
221                         </xsl:when>
222                     </xsl:choose>
223                 </mads:gender>
224             </mads:extension>
225         </xsl:for-each>
226
227         <xsl:for-each select="marc:datafield[@tag=376]">
228             <mads:extension>
229                 <mads:familyInformation>
230                     <mads:typeOfFamily>
231                         <xsl:value-of select="marc:subfield[@code='a']"/>
232                     </mads:typeOfFamily>
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']"/>
241                     </mads:dateValid>
242                     <mads:dateValid point="end">
243                         <xsl:value-of select="marc:subfield[@code='t']"/>
244                     </mads:dateValid>
245                 </mads:familyInformation>
246             </mads:extension>
247         </xsl:for-each>
248
249         <mads:recordInfo>
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]"/> -->
252
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>
263                 </xsl:if>
264                 <xsl:if test="substring(.,11,1)='b'">
265                     <mads:descriptionStandard>
266                         <xsl:text>aacr1</xsl:text>
267                     </mads:descriptionStandard>
268                 </xsl:if>
269                 <xsl:if test="substring(.,11,1)='c'">
270                     <mads:descriptionStandard>
271                         <xsl:text>aacr2</xsl:text>
272                     </mads:descriptionStandard>
273                 </xsl:if>
274                 <xsl:if test="substring(.,11,1)='d'">
275                     <mads:descriptionStandard>
276                         <xsl:text>aacr2 compatible</xsl:text>
277                     </mads:descriptionStandard>
278                 </xsl:if>
279                 <xsl:if test="substring(.,11,1)='z'">
280                     <mads:descriptionStandard>
281                         <xsl:text>other rules</xsl:text>
282                     </mads:descriptionStandard>
283                 </xsl:if>
284             </xsl:for-each>
285         </mads:recordInfo>
286     </xsl:template>
287
288     <!-- start of secondary templates -->
289
290     <!-- ======== xlink ======== -->
291
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="."/>
296       </xsl:attribute>
297     </xsl:for-each>
298      </xsl:template>
299    -->
300     <xsl:template match="marc:subfield[@code='i']">
301         <xsl:attribute name="otherType">
302             <xsl:value-of select="."/>
303         </xsl:attribute>
304     </xsl:template>
305
306     <!-- No role/roleTerm mapped in MADS 06/24/2010
307     <xsl:template name="role">
308         <xsl:for-each select="marc:subfield[@code='e']">
309             <mads:role>
310                 <mads:roleTerm type="text">
311                     <xsl:value-of select="."/>
312                 </mads:roleTerm>
313             </mads:role>
314         </xsl:for-each>
315     </xsl:template>
316 -->
317
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>
324             </xsl:call-template>
325         </xsl:variable>
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>
331             </xsl:call-template>
332         </xsl:variable>
333         <xsl:if test="string-length(normalize-space($partNumber))">
334             <mads:partNumber>
335                 <xsl:call-template name="chopPunctuation">
336                     <xsl:with-param name="chopString" select="$partNumber"/>
337                 </xsl:call-template>
338             </mads:partNumber>
339         </xsl:if>
340         <xsl:if test="string-length(normalize-space($partName))">
341             <mads:partName>
342                 <xsl:call-template name="chopPunctuation">
343                     <xsl:with-param name="chopString" select="$partName"/>
344                 </xsl:call-template>
345             </mads:partName>
346         </xsl:if>
347     </xsl:template>
348
349     <xsl:template name="nameABCDN">
350         <xsl:for-each select="marc:subfield[@code='a']">
351             <mads:namePart>
352                 <xsl:call-template name="chopPunctuation">
353                     <xsl:with-param name="chopString" select="."/>
354                 </xsl:call-template>
355             </mads:namePart>
356         </xsl:for-each>
357         <xsl:for-each select="marc:subfield[@code='b']">
358             <mads:namePart>
359                 <xsl:value-of select="."/>
360             </mads:namePart>
361         </xsl:for-each>
362         <xsl:if
363             test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
364             <mads:namePart>
365                 <xsl:call-template name="subfieldSelect">
366                     <xsl:with-param name="codes">cdn</xsl:with-param>
367                 </xsl:call-template>
368             </mads:namePart>
369         </xsl:if>
370     </xsl:template>
371
372     <xsl:template name="nameABCDQ">
373         <mads:namePart>
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>
378                     </xsl:call-template>
379                 </xsl:with-param>
380             </xsl:call-template>
381         </mads:namePart>
382         <xsl:call-template name="termsOfAddress"/>
383         <xsl:call-template name="nameDate"/>
384     </xsl:template>
385
386     <xsl:template name="nameACDENQ">
387         <mads:namePart>
388             <xsl:call-template name="subfieldSelect">
389                 <xsl:with-param name="codes">acdenq</xsl:with-param>
390             </xsl:call-template>
391         </mads:namePart>
392     </xsl:template>
393
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="."/>
399                 </xsl:call-template>
400             </mads:namePart>
401         </xsl:for-each>
402     </xsl:template>
403
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">
411                 <xsl:if
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>
415                 </xsl:if>
416             </xsl:for-each>
417         </xsl:variable>
418         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
419     </xsl:template>
420
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>
428                         </xsl:call-template>
429                     </xsl:with-param>
430                 </xsl:call-template>
431             </mads:namePart>
432         </xsl:if>
433     </xsl:template>
434
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']"/>
439             </xsl:attribute>
440         </xsl:if>
441         <xsl:if test="marc:subfield[@code='3']">
442             <xsl:attribute name="displayLabel">
443                 <xsl:value-of select="marc:subfield[@code='3']"/>
444             </xsl:attribute>
445         </xsl:if>
446     </xsl:template>
447
448     <xsl:template name="isInvalid">
449         <xsl:if test="@code='z'">
450             <xsl:attribute name="invalid">yes</xsl:attribute>
451         </xsl:if>
452     </xsl:template>
453
454     <xsl:template name="sub2Attribute">
455         <!-- 024 -->
456         <xsl:if test="../marc:subfield[@code='2']">
457             <xsl:attribute name="type">
458                 <xsl:value-of select="../marc:subfield[@code='2']"/>
459             </xsl:attribute>
460         </xsl:if>
461     </xsl:template>
462
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]"/>
468                 </xsl:attribute>
469             </xsl:if>
470             <xsl:value-of select="."/>
471         </mads:recordIdentifier>
472     </xsl:template>
473
474     <xsl:template match="marc:controlfield[@tag=005]">
475         <mads:recordChangeDate encoding="iso8601">
476             <xsl:value-of select="."/>
477         </mads:recordChangeDate>
478     </xsl:template>
479
480     <xsl:template match="marc:controlfield[@tag=008]">
481         <mads:recordCreationDate encoding="marc">
482             <xsl:value-of select="substring(.,1,6)"/>
483         </mads:recordCreationDate>
484     </xsl:template>
485
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="."/>
491             </mads:identifier>
492         </xsl:for-each>
493     </xsl:template>
494
495     <xsl:template match="marc:datafield[@tag=024]">
496         <xsl:for-each select="marc:subfield[not(@code=2)]">
497             <mads:identifier>
498                 <xsl:call-template name="isInvalid"/>
499                 <xsl:call-template name="sub2Attribute"/>
500                 <xsl:value-of select="."/>
501             </mads:identifier>
502         </xsl:for-each>
503     </xsl:template>
504
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>
510             </xsl:call-template>
511             <xsl:text>-</xsl:text>
512             <xsl:call-template name="subfieldSelect">
513                 <xsl:with-param name="codes">st</xsl:with-param>
514             </xsl:call-template>
515         </mads:fieldOfActivity>
516     </xsl:template>
517
518
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>
524     </xsl:template>
525
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="."/>
530             </mads:languageTerm>
531         </mads:languageOfCataloging>
532     </xsl:template>
533
534     <xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='e']">
535         <mads:descriptionStandard>
536             <xsl:value-of select="."/>
537         </mads:descriptionStandard>
538     </xsl:template>
539
540     <!-- ========== classification 2.03 ========== -->
541
542     <xsl:template match="marc:datafield[@tag=053]">
543         <mads:classification>
544             <xsl:value-of select="."/>
545         </mads:classification>
546     </xsl:template>
547     <xsl:template match="marc:datafield[@tag=055]">
548         <mads:classification>
549             <xsl:value-of select="."/>
550         </mads:classification>
551     </xsl:template>
552     <xsl:template match="marc:datafield[@tag=060]">
553         <mads:classification>
554             <xsl:value-of select="."/>
555         </mads:classification>
556     </xsl:template>
557     <xsl:template match="marc:datafield[@tag=065]">
558         <mads:classification>
559             <xsl:value-of select="."/>
560         </mads:classification>
561     </xsl:template>
562     <xsl:template match="marc:datafield[@tag=070]">
563         <mads:classification>
564             <xsl:value-of select="."/>
565         </mads:classification>
566     </xsl:template>
567     <xsl:template match="marc:datafield[@tag=080]">
568         <mads:classification>
569             <xsl:value-of select="."/>
570         </mads:classification>
571     </xsl:template>
572     <xsl:template match="marc:datafield[@tag=082]">
573         <mads:classification>
574             <xsl:value-of select="."/>
575         </mads:classification>
576     </xsl:template>
577     <xsl:template match="marc:datafield[@tag=083]">
578         <mads:classification>
579             <xsl:value-of select="."/>
580         </mads:classification>
581     </xsl:template>
582     <xsl:template match="marc:datafield[@tag=086]">
583         <mads:classification>
584             <xsl:value-of select="."/>
585         </mads:classification>
586     </xsl:template>
587     <xsl:template match="marc:datafield[@tag=087]">
588         <mads:classification>
589             <xsl:value-of select="."/>
590         </mads:classification>
591     </xsl:template>
592
593
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"/>
599         </mads:name>
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']"/>
603     </xsl:template>
604
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"/>
609         </mads:name>
610         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
611     </xsl:template>
612
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"/>
617         </mads:name>
618         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
619     </xsl:template>
620
621     <xsl:template match="marc:datafield[@tag=400]">
622         <mads:variant>
623             <xsl:call-template name="variantTypeAttribute"/>
624             <mads:name type="personal">
625                 <xsl:call-template name="nameABCDQ"/>
626             </mads:name>
627             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
628             <xsl:call-template name="title"/>
629         </mads:variant>
630     </xsl:template>
631
632     <xsl:template match="marc:datafield[@tag=410]">
633         <mads:variant>
634             <xsl:call-template name="variantTypeAttribute"/>
635             <mads:name type="corporate">
636                 <xsl:call-template name="nameABCDN"/>
637             </mads:name>
638             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
639         </mads:variant>
640     </xsl:template>
641
642     <xsl:template match="marc:datafield[@tag=411]">
643         <mads:variant>
644             <xsl:call-template name="variantTypeAttribute"/>
645             <mads:name type="conference">
646                 <xsl:call-template name="nameACDENQ"/>
647             </mads:name>
648             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
649         </mads:variant>
650     </xsl:template>
651
652     <xsl:template match="marc:datafield[@tag=500]|marc:datafield[@tag=700]">
653         <mads:related>
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"/>
659             </mads:name>
660             <xsl:call-template name="title"/>
661             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
662         </mads:related>
663     </xsl:template>
664
665     <xsl:template match="marc:datafield[@tag=510]|marc:datafield[@tag=710]">
666         <mads:related>
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"/>
672             </mads:name>
673             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
674         </mads:related>
675     </xsl:template>
676
677     <xsl:template match="marc:datafield[@tag=511]|marc:datafield[@tag=711]">
678         <mads:related>
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"/>
684             </mads:name>
685             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
686         </mads:related>
687     </xsl:template>
688
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']"/>
693     </xsl:template>
694
695     <xsl:template match="marc:datafield[@tag=430]">
696         <mads:variant>
697             <xsl:call-template name="variantTypeAttribute"/>
698             <xsl:call-template name="uniform-title"/>
699             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
700         </mads:variant>
701     </xsl:template>
702
703     <xsl:template match="marc:datafield[@tag=530]|marc:datafield[@tag=730]">
704         <mads:related>
705             <xsl:call-template name="relatedTypeAttribute"/>
706             <xsl:call-template name="uniform-title"/>
707             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
708         </mads:related>
709     </xsl:template>
710
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"/>
716                 </xsl:if>
717             </xsl:for-each>
718         </xsl:variable>
719         <xsl:if test="string-length($hasTitle) &gt; 0 ">
720             <mads:titleInfo>
721                 <xsl:call-template name="setAuthority"/>
722                 <mads:title>
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>
728                             </xsl:if>
729                         </xsl:for-each>
730                     </xsl:variable>
731                     <xsl:call-template name="chopPunctuation">
732                         <xsl:with-param name="chopString">
733                             <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
734                         </xsl:with-param>
735                     </xsl:call-template>
736                 </mads:title>
737                 <xsl:call-template name="part"/>
738                 <!-- <xsl:call-template name="uri"/> -->
739             </mads:titleInfo>
740         </xsl:if>
741     </xsl:template>
742
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"/>
748                 </xsl:if>
749             </xsl:for-each>
750         </xsl:variable>
751         <xsl:if test="string-length($hasTitle) &gt; 0 ">
752             <mads:titleInfo>
753                 <xsl:call-template name="setAuthority"/>
754                 <mads:title>
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>
760                             </xsl:if>
761                         </xsl:for-each>
762                     </xsl:variable>
763                     <xsl:call-template name="chopPunctuation">
764                         <xsl:with-param name="chopString">
765                             <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
766                         </xsl:with-param>
767                     </xsl:call-template>
768                 </mads:title>
769                 <xsl:call-template name="part"/>
770                 <!-- <xsl:call-template name="uri"/> -->
771             </mads:titleInfo>
772         </xsl:if>
773     </xsl:template>
774
775
776     <!-- ========== topics  ========== -->
777     <xsl:template match="marc:subfield[@code='x']">
778         <mads:topic>
779             <xsl:call-template name="chopPunctuation">
780                 <xsl:with-param name="chopString">
781                     <xsl:value-of select="."/>
782                 </xsl:with-param>
783             </xsl:call-template>
784         </mads:topic>
785     </xsl:template>
786
787     <!-- 2.06 fix -->
788     <xsl:template
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']"/>
792     </xsl:template>
793     <xsl:template
794         match="marc:datafield[@tag=450][marc:subfield[@code='a' or @code='b']]|marc:datafield[@tag=480][marc:subfield[@code='x']]">
795         <mads:variant>
796             <xsl:call-template name="variantTypeAttribute"/>
797             <xsl:call-template name="topic"/>
798         </mads:variant>
799     </xsl:template>
800     <xsl:template
801         match="marc:datafield[@tag=550 or @tag=750][marc:subfield[@code='a' or @code='b']]">
802         <mads:related>
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']"/>
807         </mads:related>
808     </xsl:template>
809     <xsl:template name="topic">
810         <mads: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>
816                 </xsl:call-template>
817             </xsl:if>
818             -->
819             <xsl:choose>
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']"/>
824                         </xsl:with-param>
825                     </xsl:call-template>
826                 </xsl:when>
827             </xsl:choose>
828             <xsl:call-template name="chopPunctuation">
829                 <xsl:with-param name="chopString">
830                     <xsl:choose>
831                         <xsl:when test="@tag=180 or @tag=480 or @tag=580 or @tag=780">
832                             <xsl:apply-templates select="marc:subfield[@code='x']"/>
833                         </xsl:when>
834                         <xsl:otherwise>
835                             <xsl:call-template name="subfieldSelect">
836                                 <xsl:with-param name="codes">ab</xsl:with-param>
837                             </xsl:call-template>
838                         </xsl:otherwise>
839                     </xsl:choose>
840                 </xsl:with-param>
841             </xsl:call-template>
842         </mads:topic>
843     </xsl:template>
844
845     <!-- ========= temporals  ========== -->
846     <xsl:template match="marc:subfield[@code='y']">
847         <mads:temporal>
848             <xsl:call-template name="chopPunctuation">
849                 <xsl:with-param name="chopString">
850                     <xsl:value-of select="."/>
851                 </xsl:with-param>
852             </xsl:call-template>
853         </mads:temporal>
854     </xsl:template>
855     <xsl:template
856         match="marc:datafield[@tag=148][marc:subfield[@code='a']]|marc:datafield[@tag=182 ][marc:subfield[@code='y']]">
857         <xsl:call-template name="temporal"/>
858     </xsl:template>
859     <xsl:template
860         match="marc:datafield[@tag=448][marc:subfield[@code='a']]|marc:datafield[@tag=482][marc:subfield[@code='y']]">
861         <mads:variant>
862             <xsl:call-template name="variantTypeAttribute"/>
863             <xsl:call-template name="temporal"/>
864         </mads:variant>
865     </xsl:template>
866     <xsl:template
867         match="marc:datafield[@tag=548 or @tag=748][marc:subfield[@code='a']]|marc:datafield[@tag=582 or @tag=782][marc:subfield[@code='y']]">
868         <mads:related>
869             <xsl:call-template name="relatedTypeAttribute"/>
870             <!-- <xsl:call-template name="uri"/> -->
871             <xsl:call-template name="temporal"/>
872         </mads:related>
873     </xsl:template>
874     <xsl:template name="temporal">
875         <mads: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']"/>
879             </xsl:if>
880             <xsl:call-template name="chopPunctuation">
881                 <xsl:with-param name="chopString">
882                     <xsl:choose>
883                         <xsl:when test="@tag=182 or @tag=482 or @tag=582 or @tag=782">
884                             <xsl:apply-templates select="marc:subfield[@code='y']"/>
885                         </xsl:when>
886                         <xsl:otherwise>
887                             <xsl:value-of select="marc:subfield[@code='a']"/>
888                         </xsl:otherwise>
889                     </xsl:choose>
890                 </xsl:with-param>
891             </xsl:call-template>
892         </mads:temporal>
893         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
894     </xsl:template>
895
896     <!-- ========== genre  ========== -->
897     <xsl:template match="marc:subfield[@code='v']">
898         <mads:genre>
899             <xsl:call-template name="chopPunctuation">
900                 <xsl:with-param name="chopString">
901                     <xsl:value-of select="."/>
902                 </xsl:with-param>
903             </xsl:call-template>
904         </mads:genre>
905     </xsl:template>
906     <xsl:template
907         match="marc:datafield[@tag=155][marc:subfield[@code='a']]|marc:datafield[@tag=185][marc:subfield[@code='v']]">
908         <xsl:call-template name="genre"/>
909     </xsl:template>
910     <xsl:template
911         match="marc:datafield[@tag=455][marc:subfield[@code='a']]|marc:datafield[@tag=485 ][marc:subfield[@code='v']]">
912         <mads:variant>
913             <xsl:call-template name="variantTypeAttribute"/>
914             <xsl:call-template name="genre"/>
915         </mads:variant>
916     </xsl:template>
917     <!--
918     <xsl:template match="marc:datafield[@tag=555]">
919         <mads:related>
920             <xsl:call-template name="relatedTypeAttribute"/>
921             <xsl:call-template name="uri"/>
922             <xsl:call-template name="genre"/>
923         </mads:related>
924     </xsl:template>
925     -->
926     <xsl:template
927         match="marc:datafield[@tag=555 or @tag=755][marc:subfield[@code='a']]|marc:datafield[@tag=585][marc:subfield[@code='v']]">
928         <mads:related>
929             <xsl:call-template name="relatedTypeAttribute"/>
930             <xsl:call-template name="genre"/>
931         </mads:related>
932     </xsl:template>
933     <xsl:template name="genre">
934         <mads:genre>
935             <xsl:if test="@tag=555">
936                 <xsl:value-of select="marc:subfield[@code='a']"/>
937             </xsl:if>
938             <xsl:call-template name="setAuthority"/>
939             <xsl:call-template name="chopPunctuation">
940                 <xsl:with-param name="chopString">
941                     <xsl:choose>
942                         <!-- 2.07 fix -->
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']"/>
946                         </xsl:when>
947                         <xsl:otherwise>
948                             <xsl:value-of select="marc:subfield[@code='a']"/>
949                         </xsl:otherwise>
950                     </xsl:choose>
951                 </xsl:with-param>
952             </xsl:call-template>
953         </mads:genre>
954         <xsl:apply-templates/>
955     </xsl:template>
956
957     <!-- ========= geographic  ========== -->
958     <xsl:template match="marc:subfield[@code='z']">
959         <mads:geographic>
960             <xsl:call-template name="chopPunctuation">
961                 <xsl:with-param name="chopString">
962                     <xsl:value-of select="."/>
963                 </xsl:with-param>
964             </xsl:call-template>
965         </mads:geographic>
966     </xsl:template>
967     <xsl:template name="geographic">
968         <mads:geographic>
969             <xsl:if test="@tag=551">
970                 <xsl:value-of select="marc:subfield[@code='a']"/>
971             </xsl:if>
972             <xsl:call-template name="setAuthority"/>
973             <xsl:call-template name="chopPunctuation">
974                 <xsl:with-param name="chopString">
975                     <xsl:choose>
976                         <xsl:when test="@tag=181 or @tag=481 or @tag=581">
977                             <xsl:apply-templates select="marc:subfield[@code='z']"/>
978                         </xsl:when>
979                         <xsl:otherwise>
980                             <xsl:value-of select="marc:subfield[@code='a']"/>
981                         </xsl:otherwise>
982                     </xsl:choose>
983                 </xsl:with-param>
984             </xsl:call-template>
985         </mads:geographic>
986         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
987     </xsl:template>
988     <xsl:template
989         match="marc:datafield[@tag=151][marc:subfield[@code='a']]|marc:datafield[@tag=181][marc:subfield[@code='z']]">
990         <xsl:call-template name="geographic"/>
991     </xsl:template>
992     <xsl:template
993         match="marc:datafield[@tag=451][marc:subfield[@code='a']]|marc:datafield[@tag=481][marc:subfield[@code='z']]">
994         <mads:variant>
995             <xsl:call-template name="variantTypeAttribute"/>
996             <xsl:call-template name="geographic"/>
997         </mads:variant>
998     </xsl:template>
999     <xsl:template
1000         match="marc:datafield[@tag=551]|marc:datafield[@tag=581][marc:subfield[@code='z']]">
1001         <mads:related>
1002             <xsl:call-template name="relatedTypeAttribute"/>
1003             <!-- <xsl:call-template name="uri"/> -->
1004             <xsl:call-template name="geographic"/>
1005         </mads:related>
1006     </xsl:template>
1007     <xsl:template match="marc:datafield[@tag=580]">
1008         <mads:related>
1009             <xsl:call-template name="relatedTypeAttribute"/>
1010             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1011         </mads:related>
1012     </xsl:template>
1013     <xsl:template
1014         match="marc:datafield[@tag=751][marc:subfield[@code='z']]|marc:datafield[@tag=781][marc:subfield[@code='z']]">
1015         <mads:related>
1016             <xsl:call-template name="relatedTypeAttribute"/>
1017             <xsl:call-template name="geographic"/>
1018         </mads:related>
1019     </xsl:template>
1020     <xsl:template match="marc:datafield[@tag=755]">
1021         <mads:related>
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']"/>
1026         </mads:related>
1027     </xsl:template>
1028     <xsl:template match="marc:datafield[@tag=780]">
1029         <mads:related>
1030             <xsl:call-template name="relatedTypeAttribute"/>
1031             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1032         </mads:related>
1033     </xsl:template>
1034     <xsl:template match="marc:datafield[@tag=785]">
1035         <mads:related>
1036             <xsl:call-template name="relatedTypeAttribute"/>
1037             <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1038         </mads:related>
1039     </xsl:template>
1040
1041     <!-- ========== notes  ========== -->
1042     <xsl:template match="marc:datafield[667 &lt;= @tag and @tag &lt;= 688]">
1043         <mads:note>
1044             <xsl:choose>
1045                 <xsl:when test="@tag=667">
1046                     <xsl:attribute name="type">nonpublic</xsl:attribute>
1047                 </xsl:when>
1048                 <xsl:when test="@tag=670">
1049                     <xsl:attribute name="type">source</xsl:attribute>
1050                 </xsl:when>
1051                 <xsl:when test="@tag=675">
1052                     <xsl:attribute name="type">notFound</xsl:attribute>
1053                 </xsl:when>
1054                 <xsl:when test="@tag=678">
1055                     <xsl:attribute name="type">history</xsl:attribute>
1056                 </xsl:when>
1057                 <xsl:when test="@tag=681">
1058                     <xsl:attribute name="type">subject example</xsl:attribute>
1059                 </xsl:when>
1060                 <xsl:when test="@tag=682">
1061                     <xsl:attribute name="type">deleted heading information</xsl:attribute>
1062                 </xsl:when>
1063                 <xsl:when test="@tag=688">
1064                     <xsl:attribute name="type">application history</xsl:attribute>
1065                 </xsl:when>
1066             </xsl:choose>
1067             <xsl:call-template name="chopPunctuation">
1068                 <xsl:with-param name="chopString">
1069                     <xsl:choose>
1070                         <xsl:when test="@tag=667 or @tag=675">
1071                             <xsl:value-of select="marc:subfield[@code='a']"/>
1072                         </xsl:when>
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>
1077                         </xsl:when>
1078                         <xsl:when test="680 &lt;= @tag and @tag &lt;=688">
1079                             <xsl:call-template name="subfieldSelect">
1080                                 <xsl:with-param name="codes">ai</xsl:with-param>
1081                             </xsl:call-template>
1082                         </xsl:when>
1083                     </xsl:choose>
1084                 </xsl:with-param>
1085             </xsl:call-template>
1086         </mads:note>
1087     </xsl:template>
1088
1089     <!-- ========== url  ========== -->
1090     <xsl:template match="marc:datafield[@tag=856][marc:subfield[@code='u']]">
1091         <mads:url>
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>
1097                 </xsl:attribute>
1098             </xsl:if>
1099             <xsl:value-of select="marc:subfield[@code='u']"/>
1100         </mads:url>
1101     </xsl:template>
1102
1103     <xsl:template name="relatedTypeAttribute">
1104         <xsl:choose>
1105             <xsl:when
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>
1109                 </xsl:if>
1110                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='b'">
1111                     <xsl:attribute name="type">later</xsl:attribute>
1112                 </xsl:if>
1113                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='t'">
1114                     <xsl:attribute name="type">parentOrg</xsl:attribute>
1115                 </xsl:if>
1116                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='g'">
1117                     <xsl:attribute name="type">broader</xsl:attribute>
1118                 </xsl:if>
1119                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='h'">
1120                     <xsl:attribute name="type">narrower</xsl:attribute>
1121                 </xsl:if>
1122                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='r'">
1123                     <xsl:attribute name="type">other</xsl:attribute>
1124                 </xsl:if>
1125                 <xsl:if test="contains('fin|', substring(marc:subfield[@code='w'],1,1))">
1126                     <xsl:attribute name="type">other</xsl:attribute>
1127                 </xsl:if>
1128             </xsl:when>
1129             <xsl:when test="@tag=530 or @tag=730">
1130                 <xsl:attribute name="type">other</xsl:attribute>
1131             </xsl:when>
1132             <xsl:otherwise>
1133                 <!-- 7xx -->
1134                 <xsl:attribute name="type">equivalent</xsl:attribute>
1135             </xsl:otherwise>
1136         </xsl:choose>
1137         <xsl:apply-templates select="marc:subfield[@code='i']"/>
1138     </xsl:template>
1139
1140     <xsl:template name="variantTypeAttribute">
1141         <xsl:choose>
1142             <xsl:when
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>
1146                 </xsl:if>
1147                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='n'">
1148                     <xsl:attribute name="type">other</xsl:attribute>
1149                 </xsl:if>
1150                 <xsl:if test="contains('fit', substring(marc:subfield[@code='w'],1,1))">
1151                     <xsl:attribute name="type">other</xsl:attribute>
1152                 </xsl:if>
1153             </xsl:when>
1154             <xsl:otherwise>
1155                 <!-- 430  -->
1156                 <xsl:attribute name="type">other</xsl:attribute>
1157             </xsl:otherwise>
1158         </xsl:choose>
1159         <xsl:apply-templates select="marc:subfield[@code='i']"/>
1160     </xsl:template>
1161
1162     <xsl:template name="setAuthority">
1163         <xsl:choose>
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 -->
1166
1167             <xsl:when
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>
1171                 </xsl:attribute>
1172             </xsl:when>
1173             <xsl:when
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>
1177                 </xsl:attribute>
1178             </xsl:when>
1179             <xsl:when
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>
1183                 </xsl:attribute>
1184             </xsl:when>
1185             <xsl:when
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>
1189                 </xsl:attribute>
1190             </xsl:when>
1191             <xsl:when
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>
1194             </xsl:when>
1195             <xsl:when
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>
1198             </xsl:when>
1199             <xsl:when
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>
1202             </xsl:when>
1203             <xsl:when
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>
1207                 </xsl:attribute>
1208             </xsl:when>
1209             <xsl:when
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>
1213                 </xsl:attribute>
1214             </xsl:when>
1215             <xsl:when
1216                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='b'">
1217                 <xsl:attribute name="authority">
1218                     <xsl:text>lcshcl</xsl:text>
1219                 </xsl:attribute>
1220             </xsl:when>
1221             <xsl:when
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>
1225                 </xsl:attribute>
1226             </xsl:when>
1227             <xsl:when
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>
1231                 </xsl:attribute>
1232             </xsl:when>
1233             <xsl:when
1234                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='r'">
1235                 <xsl:attribute name="authority">
1236                     <xsl:text>aat</xsl:text>
1237                 </xsl:attribute>
1238             </xsl:when>
1239             <xsl:when
1240                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='s'">
1241                 <xsl:attribute name="authority">sears</xsl:attribute>
1242             </xsl:when>
1243             <xsl:when
1244                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='v'">
1245                 <xsl:attribute name="authority">rvm</xsl:attribute>
1246             </xsl:when>
1247             <xsl:when
1248                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='z'">
1249                 <xsl:attribute name="authority">
1250                     <xsl:value-of
1251                         select="../marc:datafield[ancestor-or-self::marc:datafield/@tag=040]/marc:subfield[@code='f']"
1252                     />
1253                 </xsl:attribute>
1254             </xsl:when>
1255             <xsl:when
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>
1259                 </xsl:attribute>
1260             </xsl:when>
1261             <xsl:when
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>
1265                 </xsl:attribute>
1266             </xsl:when>
1267             <xsl:when
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>
1271                 </xsl:attribute>
1272             </xsl:when>
1273             <xsl:when
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>
1277                 </xsl:attribute>
1278             </xsl:when>
1279             <xsl:when
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>
1283                 </xsl:attribute>
1284             </xsl:when>
1285             <xsl:when
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>
1289                 </xsl:attribute>
1290             </xsl:when>
1291             <xsl:when
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>
1295                 </xsl:attribute>
1296             </xsl:when>
1297             <xsl:when
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>
1301                 </xsl:attribute>
1302             </xsl:when>
1303             <xsl:when
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>
1307                 </xsl:attribute>
1308             </xsl:when>
1309             <xsl:when
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>
1312             </xsl:when>
1313             <xsl:when
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>
1316             </xsl:when>
1317             <xsl:when
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>
1320             </xsl:when>
1321             <xsl:when
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>
1324             </xsl:when>
1325             <xsl:when
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>
1328             </xsl:when>
1329             <xsl:when
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>
1332             </xsl:when>
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>
1335             </xsl:when>
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>
1338             </xsl:when>
1339             <xsl:when
1340                 test="(700 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 755 ) and @ind2='1'">
1341                 <xsl:attribute name="authority">lcshcl</xsl:attribute>
1342             </xsl:when>
1343             <xsl:when
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>
1346             </xsl:when>
1347             <xsl:when
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>
1350             </xsl:when>
1351             <xsl:when
1352                 test="(700 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 755 ) and @ind2='6'">
1353                 <xsl:attribute name="authority">rvm</xsl:attribute>
1354             </xsl:when>
1355             <xsl:when
1356                 test="(700 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 755 ) and @ind2='7'">
1357                 <xsl:attribute name="authority">
1358                     <xsl:value-of select="marc:subfield[@code='2']"/>
1359                 </xsl:attribute>
1360             </xsl:when>
1361             <xsl:when
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>
1364             </xsl:when>
1365             <xsl:when
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>
1368             </xsl:when>
1369             <xsl:when
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>
1372             </xsl:when>
1373             <xsl:when
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>
1376             </xsl:when>
1377             <xsl:when
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>
1380             </xsl:when>
1381             <xsl:when
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>
1384             </xsl:when>
1385         </xsl:choose>
1386     </xsl:template>
1387     <xsl:template match="*"/>
1388 </xsl:stylesheet>