]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/955.data.MADS21-xsl.sql
76498ebf107845dacb85daf81385526739905805
[Evergreen.git] / Open-ILS / src / sql / Pg / 955.data.MADS21-xsl.sql
1 UPDATE config.xml_transform SET xslt=$XSLT$<?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         <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
6         <xsl:strip-space elements="*"/>
7
8         <xsl:variable name="ascii">
9                 <xsl:text> !"#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~</xsl:text>
10         </xsl:variable>
11
12         <xsl:variable name="latin1">
13                 <xsl:text> ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ</xsl:text>
14         </xsl:variable>
15         <!-- Characters that usually don't need to be escaped -->
16         <xsl:variable name="safe">
17                 <xsl:text>!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~</xsl:text>
18         </xsl:variable>
19
20         <xsl:variable name="hex">0123456789ABCDEF</xsl:variable>
21
22
23         <xsl:template name="datafield">
24                 <xsl:param name="tag"/>
25                 <xsl:param name="ind1">
26                         <xsl:text> </xsl:text>
27                 </xsl:param>
28                 <xsl:param name="ind2">
29                         <xsl:text> </xsl:text>
30                 </xsl:param>
31                 <xsl:param name="subfields"/>
32                 <xsl:element name="marc:datafield">
33                         <xsl:attribute name="tag">
34                                 <xsl:value-of select="$tag"/>
35                         </xsl:attribute>
36                         <xsl:attribute name="ind1">
37                                 <xsl:value-of select="$ind1"/>
38                         </xsl:attribute>
39                         <xsl:attribute name="ind2">
40                                 <xsl:value-of select="$ind2"/>
41                         </xsl:attribute>
42                         <xsl:copy-of select="$subfields"/>
43                 </xsl:element>
44         </xsl:template>
45
46         <xsl:template name="subfieldSelect">
47                 <xsl:param name="codes">abcdefghijklmnopqrstuvwxyz</xsl:param>
48                 <xsl:param name="delimeter">
49                         <xsl:text> </xsl:text>
50                 </xsl:param>
51                 <xsl:variable name="str">
52                         <xsl:for-each select="marc:subfield">
53                                 <xsl:if test="contains($codes, @code)">
54                                         <xsl:value-of select="text()"/>
55                                         <xsl:value-of select="$delimeter"/>
56                                 </xsl:if>
57                         </xsl:for-each>
58                 </xsl:variable>
59                 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
60         </xsl:template>
61
62         <xsl:template name="buildSpaces">
63                 <xsl:param name="spaces"/>
64                 <xsl:param name="char">
65                         <xsl:text> </xsl:text>
66                 </xsl:param>
67                 <xsl:if test="$spaces>0">
68                         <xsl:value-of select="$char"/>
69                         <xsl:call-template name="buildSpaces">
70                                 <xsl:with-param name="spaces" select="$spaces - 1"/>
71                                 <xsl:with-param name="char" select="$char"/>
72                         </xsl:call-template>
73                 </xsl:if>
74         </xsl:template>
75
76         <xsl:template name="chopPunctuation">
77                 <xsl:param name="chopString"/>
78                 <xsl:param name="punctuation">
79                         <xsl:text>.:,;/ </xsl:text>
80                 </xsl:param>
81                 <xsl:variable name="length" select="string-length($chopString)"/>
82                 <xsl:choose>
83                         <xsl:when test="$length=0"/>
84                         <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
85                                 <xsl:call-template name="chopPunctuation">
86                                         <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
87                                         <xsl:with-param name="punctuation" select="$punctuation"/>
88                                 </xsl:call-template>
89                         </xsl:when>
90                         <xsl:when test="not($chopString)"/>
91                         <xsl:otherwise>
92                                 <xsl:value-of select="$chopString"/>
93                         </xsl:otherwise>
94                 </xsl:choose>
95         </xsl:template>
96
97         <xsl:template name="chopPunctuationFront">
98                 <xsl:param name="chopString"/>
99                 <xsl:variable name="length" select="string-length($chopString)"/>
100                 <xsl:choose>
101                         <xsl:when test="$length=0"/>
102                         <xsl:when test="contains('.:,;/[ ', substring($chopString,1,1))">
103                                 <xsl:call-template name="chopPunctuationFront">
104                                         <xsl:with-param name="chopString" select="substring($chopString,2,$length - 1)"
105                                         />
106                                 </xsl:call-template>
107                         </xsl:when>
108                         <xsl:when test="not($chopString)"/>
109                         <xsl:otherwise>
110                                 <xsl:value-of select="$chopString"/>
111                         </xsl:otherwise>
112                 </xsl:choose>
113         </xsl:template>
114
115         <xsl:template name="chopPunctuationBack">
116                 <xsl:param name="chopString"/>
117                 <xsl:param name="punctuation">
118                         <xsl:text>.:,;/] </xsl:text>
119                 </xsl:param>
120                 <xsl:variable name="length" select="string-length($chopString)"/>
121                 <xsl:choose>
122                         <xsl:when test="$length=0"/>
123                         <xsl:when test="contains($punctuation, substring($chopString,$length,1))">
124                                 <xsl:call-template name="chopPunctuation">
125                                         <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
126                                         <xsl:with-param name="punctuation" select="$punctuation"/>
127                                 </xsl:call-template>
128                         </xsl:when>
129                         <xsl:when test="not($chopString)"/>
130                         <xsl:otherwise>
131                                 <xsl:value-of select="$chopString"/>
132                         </xsl:otherwise>
133                 </xsl:choose>
134         </xsl:template>
135
136         <!-- nate added 12/14/2007 for lccn.loc.gov: url encode ampersand, etc. -->
137         <xsl:template name="url-encode">
138
139                 <xsl:param name="str"/>
140
141                 <xsl:if test="$str">
142                         <xsl:variable name="first-char" select="substring($str,1,1)"/>
143                         <xsl:choose>
144                                 <xsl:when test="contains($safe,$first-char)">
145                                         <xsl:value-of select="$first-char"/>
146                                 </xsl:when>
147                                 <xsl:otherwise>
148                                         <xsl:variable name="codepoint">
149                                                 <xsl:choose>
150                                                         <xsl:when test="contains($ascii,$first-char)">
151                                                                 <xsl:value-of
152                                                                         select="string-length(substring-before($ascii,$first-char)) + 32"
153                                                                 />
154                                                         </xsl:when>
155                                                         <xsl:when test="contains($latin1,$first-char)">
156                                                                 <xsl:value-of
157                                                                         select="string-length(substring-before($latin1,$first-char)) + 160"/>
158                                                                 <!-- was 160 -->
159                                                         </xsl:when>
160                                                         <xsl:otherwise>
161                                                                 <xsl:message terminate="no">Warning: string contains a character
162                                                                         that is out of range! Substituting "?".</xsl:message>
163                                                                 <xsl:text>63</xsl:text>
164                                                         </xsl:otherwise>
165                                                 </xsl:choose>
166                                         </xsl:variable>
167                                         <xsl:variable name="hex-digit1"
168                                                 select="substring($hex,floor($codepoint div 16) + 1,1)"/>
169                                         <xsl:variable name="hex-digit2" select="substring($hex,$codepoint mod 16 + 1,1)"/>
170                                         <!-- <xsl:value-of select="concat('%',$hex-digit2)"/> -->
171                                         <xsl:value-of select="concat('%',$hex-digit1,$hex-digit2)"/>
172                                 </xsl:otherwise>
173                         </xsl:choose>
174                         <xsl:if test="string-length($str) &gt; 1">
175                                 <xsl:call-template name="url-encode">
176                                         <xsl:with-param name="str" select="substring($str,2)"/>
177                                 </xsl:call-template>
178                         </xsl:if>
179                 </xsl:if>
180         </xsl:template>
181
182
183 <!--
184 2.15    reversed genre and setAuthority template order under relatedTypeAttribute                       tmee 11/13/2018
185 2.14    Fixed bug in mads:geographic attributes syntax                                      ws   05/04/2016             
186 2.13    fixed repeating <geographic>                                                                                                            tmee 01/31/2014
187 2.12    added $2 authority for <classification>                                                                                         tmee 09/18/2012
188 2.11    added delimiters between <classification> subfields                                                                     tmee 09/18/2012
189 2.10    fixed type="other" and type="otherType" for mads:related                                                        tmee 09/16/2011
190 2.09    fixed professionTerm and genreTerm empty tag error                                                                      tmee 09/16/2011
191 2.08    fixed marc:subfield @code='i' matching error                                                                            tmee 09/16/2011
192 2.07    fixed 555 duplication error                                                                                                                     tmee 08/10/2011 
193 2.06    fixed topic subfield error                                                                                                                      tmee 08/10/2011 
194 2.05    fixed title subfield error                                                                                                                      tmee 06/20/2011 
195 2.04    fixed geographicSubdivision mapping for authority element                                                       tmee 06/16/2011
196 2.03    added classification for 053, 055, 060, 065, 070, 080, 082, 083, 086, 087                       tmee 06/03/2011         
197 2.02    added descriptionStandard for 008/10                                                                                            tmee 04/27/2011
198 2.01    added extensions for 046, 336, 370, 374, 375, 376                                                                       tmee 04/08/2011
199 2.00    redefined imported MODS elements in version 1.0 to MADS elements in version 2.0         tmee 02/08/2011
200 1.08    added 372 subfields $a $s $t for <fieldOfActivity>                                                                      tmee 06/24/2010
201 1.07    removed role/roleTerm 100, 110, 111, 400, 410, 411, 500, 510, 511, 700, 710, 711        tmee 06/24/2010
202 1.06    added strip-space                                                                                                                                       tmee 06/24/2010
203 1.05    added subfield $a for 130, 430, 530                                                                                                     tmee 06/21/2010
204 1.04    fixed 550 z omission                                                                                                                            ntra 08/11/2008
205 1.03    removed duplication of 550 $a text                                                                                                      tmee 11/01/2006
206 1.02    fixed namespace references between mads and mods                                                                        ntra 10/06/2006
207 1.01    revised                                                                                                                                                         rgue/jrad 11/29/05
208 1.00    adapted from MARC21Slim2MODS3.xsl                                                                                                       ntra 07/06/05
209 -->
210
211         <!-- authority attribute defaults to 'naf' if not set using this authority parameter, for <authority> descriptors: name, titleInfo, geographic -->
212         <xsl:param name="authority"/>
213         <xsl:variable name="auth">
214                 <xsl:choose>
215                         <xsl:when test="$authority">
216                                 <xsl:value-of select="$authority"/>
217                         </xsl:when>
218                         <xsl:otherwise>naf</xsl:otherwise>
219                 </xsl:choose>
220         </xsl:variable>
221         <xsl:variable name="controlField008" select="marc:controlfield[@tag='008']"/>
222         <xsl:variable name="controlField008-06"
223                 select="substring(descendant-or-self::marc:controlfield[@tag=008],7,1)"/>
224         <xsl:variable name="controlField008-11"
225                 select="substring(descendant-or-self::marc:controlfield[@tag=008],12,1)"/>
226         <xsl:variable name="controlField008-14"
227                 select="substring(descendant-or-self::marc:controlfield[@tag=008],15,1)"/>
228         <xsl:template match="/">
229                 <xsl:choose>
230                         <xsl:when test="descendant-or-self::marc:collection">
231                                 <mads:madsCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
232                                         xsi:schemaLocation="http://www.loc.gov/mads/v2 http://www.loc.gov/standards/mads/v2/mads-2-0.xsd">
233                                         <xsl:for-each select="descendant-or-self::marc:collection/marc:record">
234                                                 <mads:mads version="2.0">
235                                                         <xsl:call-template name="marcRecord"/>
236                                                 </mads:mads>
237                                         </xsl:for-each>
238                                 </mads:madsCollection>
239                         </xsl:when>
240                         <xsl:otherwise>
241                                 <mads:mads version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
242                                         xsi:schemaLocation="http://www.loc.gov/mads/v2 http://www.loc.gov/standards/mads/mads-2-0.xsd">
243                                         <xsl:for-each select="descendant-or-self::marc:record">
244                                                 <xsl:call-template name="marcRecord"/>
245                                         </xsl:for-each>
246                                 </mads:mads>
247                         </xsl:otherwise>
248                 </xsl:choose>
249         </xsl:template>
250
251         <xsl:template name="marcRecord">
252                 <mads:authority>
253                         <!-- 2.04 -->
254                         <xsl:choose>
255                                 <xsl:when test="$controlField008-06='d'">
256                                         <xsl:attribute name="geographicSubdivision">
257                                                 <xsl:text>direct</xsl:text>
258                                         </xsl:attribute>
259                                 </xsl:when>
260                                 <xsl:when test="$controlField008-06='i'">
261                                         <xsl:attribute name="geographicSubdivision">
262                                                 <xsl:text>indirect</xsl:text>
263                                         </xsl:attribute>
264                                 </xsl:when>
265                                 <xsl:when test="$controlField008-06='n'">
266                                         <xsl:attribute name="geographicSubdivision">
267                                                 <xsl:text>not applicable</xsl:text>
268                                         </xsl:attribute>
269                                 </xsl:when>
270                         </xsl:choose>
271                         
272                         <xsl:apply-templates select="marc:datafield[100 &lt;= @tag  and @tag &lt; 200]"/>               
273                 </mads:authority>
274
275                 <!-- related -->
276                 <xsl:apply-templates
277                         select="marc:datafield[500 &lt;= @tag and @tag &lt;= 585]|marc:datafield[700 &lt;= @tag and @tag &lt;= 785]"/>
278
279                 <!-- variant -->
280                 <xsl:apply-templates select="marc:datafield[400 &lt;= @tag and @tag &lt;= 485]"/>
281
282                 <!-- notes -->
283                 <xsl:apply-templates select="marc:datafield[667 &lt;= @tag and @tag &lt;= 688]"/>
284
285                 <!-- url -->
286                 <xsl:apply-templates select="marc:datafield[@tag=856]"/>
287                 <xsl:apply-templates select="marc:datafield[@tag=010]"/>
288                 <xsl:apply-templates select="marc:datafield[@tag=024]"/>
289                 <xsl:apply-templates select="marc:datafield[@tag=372]"/>
290                 
291                 <!-- classification -->
292                 <xsl:apply-templates select="marc:datafield[@tag=053]"/>
293                 <xsl:apply-templates select="marc:datafield[@tag=055]"/>
294                 <xsl:apply-templates select="marc:datafield[@tag=060]"/>
295                 <xsl:apply-templates select="marc:datafield[@tag=065]"/>
296                 <xsl:apply-templates select="marc:datafield[@tag=070]"/>
297                 <xsl:apply-templates select="marc:datafield[@tag=080]"/>
298                 <xsl:apply-templates select="marc:datafield[@tag=082]"/>
299                 <xsl:apply-templates select="marc:datafield[@tag=083]"/>
300                 <xsl:apply-templates select="marc:datafield[@tag=086]"/>
301                 <xsl:apply-templates select="marc:datafield[@tag=087]"/>
302
303                 <!-- affiliation-->
304                 <xsl:for-each select="marc:datafield[@tag=373]">
305                         <mads:affiliation>
306                                 <mads:position>
307                                         <xsl:value-of select="marc:subfield[@code='a']"/>
308                                 </mads:position>
309                                 <mads:dateValid point="start">
310                                         <xsl:value-of select="marc:subfield[@code='s']"/>
311                                 </mads:dateValid>
312                                 <mads:dateValid point="end">
313                                         <xsl:value-of select="marc:subfield[@code='t']"/>
314                                 </mads:dateValid>
315                         </mads:affiliation>
316                 </xsl:for-each>
317                 <xsl:for-each select="marc:datafield[@tag=371]">
318                         <mads:affiliation>
319                                 <mads:address>
320                                         <mads:street>
321                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
322                                         </mads:street>
323                                         <mads:city>
324                                                 <xsl:value-of select="marc:subfield[@code='b']"/>
325                                         </mads:city>
326                                         <mads:state>
327                                                 <xsl:value-of select="marc:subfield[@code='c']"/>
328                                         </mads:state>
329                                         <mads:country>
330                                                 <xsl:value-of select="marc:subfield[@code='d']"/>
331                                         </mads:country>
332                                         <mads:postcode>
333                                                 <xsl:value-of select="marc:subfield[@code='e']"/>
334                                         </mads:postcode>
335                                 </mads:address>
336                                 <mads:email>
337                                         <xsl:value-of select="marc:subfield[@code='m']"/>
338                                 </mads:email>
339                         </mads:affiliation>
340                 </xsl:for-each>
341
342                 <!-- extension-->
343                 <xsl:for-each select="marc:datafield[@tag=336]">
344                         <mads:extension>
345                                 <mads:contentType>
346                                         <mads:contentType type="text">
347                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
348                                         </mads:contentType>
349                                         <mads:contentType type="code">
350                                                 <xsl:value-of select="marc:subfield[@code='b']"/>
351                                         </mads:contentType>
352                                 </mads:contentType>
353                         </mads:extension>
354                 </xsl:for-each>
355
356                 <xsl:for-each select="marc:datafield[@tag=374]">
357                         <mads:extension>
358                                 <mads:profession>
359                                         <xsl:choose>
360                                                 <xsl:when test="marc:subfield[@code='a']">
361                                                         <mads:professionTerm>
362                                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
363                                                         </mads:professionTerm>
364                                                 </xsl:when>
365                                                 <xsl:when test="marc:subfield[@code='s']">
366                                                         <mads:dateValid point="start">
367                                                                 <xsl:value-of select="marc:subfield[@code='s']"/>
368                                                         </mads:dateValid>
369                                                 </xsl:when>
370                                                 <xsl:when test="marc:subfield[@code='t']">
371                                                         <mads:dateValid point="end">
372                                                                 <xsl:value-of select="marc:subfield[@code='t']"/>
373                                                         </mads:dateValid>
374                                                 </xsl:when>
375                                         </xsl:choose>
376                                 </mads:profession>
377                         </mads:extension>
378                 </xsl:for-each>
379                 
380                 <xsl:for-each select="marc:datafield[@tag=375]">
381                         <mads:extension>
382                                 <mads:gender>
383                                         <xsl:choose>
384                                                 <xsl:when test="marc:subfield[@code='a']">
385                                                         <mads:genderTerm>
386                                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
387                                                         </mads:genderTerm>
388                                                 </xsl:when>
389                                                 <xsl:when test="marc:subfield[@code='s']">
390                                                         <mads:dateValid point="start">
391                                                                 <xsl:value-of select="marc:subfield[@code='s']"/>
392                                                         </mads:dateValid>
393                                                 </xsl:when>
394                                                 <xsl:when test="marc:subfield[@code='t']">
395                                                         <mads:dateValid point="end">
396                                                                 <xsl:value-of select="marc:subfield[@code='t']"/>
397                                                         </mads:dateValid>
398                                                 </xsl:when>
399                                         </xsl:choose>
400                                 </mads:gender>
401                         </mads:extension>
402                 </xsl:for-each>
403
404                 <xsl:for-each select="marc:datafield[@tag=376]">
405                         <mads:extension>
406                                 <mads:familyInformation>
407                                         <mads:typeOfFamily>
408                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
409                                         </mads:typeOfFamily>
410                                         <mads:nameOfProminentMember>
411                                                 <xsl:value-of select="marc:subfield[@code='b']"/>
412                                         </mads:nameOfProminentMember>
413                                         <mads:hereditaryTitle>
414                                                 <xsl:value-of select="marc:subfield[@code='c']"/>
415                                         </mads:hereditaryTitle>
416                                         <mads:dateValid point="start">
417                                                 <xsl:value-of select="marc:subfield[@code='s']"/>
418                                         </mads:dateValid>
419                                         <mads:dateValid point="end">
420                                                 <xsl:value-of select="marc:subfield[@code='t']"/>
421                                         </mads:dateValid>
422                                 </mads:familyInformation>
423                         </mads:extension>
424                 </xsl:for-each>
425
426                 <mads:recordInfo>
427                         <mads:recordOrigin>Converted from MARCXML to MADS version 2.0 (Revision 2.13)</mads:recordOrigin>
428                         <!-- <xsl:apply-templates select="marc:datafield[@tag=024]"/> -->
429
430                         <xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='a']"/>
431                         <xsl:apply-templates select="marc:controlfield[@tag=005]"/>
432                         <xsl:apply-templates select="marc:controlfield[@tag=001]"/>
433                         <xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='b']"/>
434                         <xsl:apply-templates select="marc:datafield[@tag=040]/marc:subfield[@code='e']"/>
435                         <xsl:for-each select="marc:controlfield[@tag=008]">
436                                 <xsl:if test="substring(.,11,1)='a'">
437                                         <mads:descriptionStandard>
438                                                 <xsl:text>earlier rules</xsl:text>
439                                         </mads:descriptionStandard>
440                                 </xsl:if>
441                                 <xsl:if test="substring(.,11,1)='b'">
442                                         <mads:descriptionStandard>
443                                                 <xsl:text>aacr1</xsl:text>
444                                         </mads:descriptionStandard>
445                                 </xsl:if>
446                                 <xsl:if test="substring(.,11,1)='c'">
447                                         <mads:descriptionStandard>
448                                                 <xsl:text>aacr2</xsl:text>
449                                         </mads:descriptionStandard>
450                                 </xsl:if>
451                                 <xsl:if test="substring(.,11,1)='d'">
452                                         <mads:descriptionStandard>
453                                                 <xsl:text>aacr2 compatible</xsl:text>
454                                         </mads:descriptionStandard>
455                                 </xsl:if>
456                                 <xsl:if test="substring(.,11,1)='z'">
457                                         <mads:descriptionStandard>
458                                                 <xsl:text>other rules</xsl:text>
459                                         </mads:descriptionStandard>
460                                 </xsl:if>
461                         </xsl:for-each>
462                 </mads:recordInfo>
463         </xsl:template>
464
465         <!-- start of secondary templates -->
466
467         <!-- ======== xlink ======== -->
468
469         <!-- <xsl:template name="uri"> 
470     <xsl:for-each select="marc:subfield[@code='0']">
471       <xsl:attribute name="xlink:href">
472         <xsl:value-of select="."/>
473       </xsl:attribute>
474     </xsl:for-each>
475      </xsl:template> 
476    -->
477         <xsl:template match="marc:subfield[@code='i']">
478                 <xsl:attribute name="otherType">
479                         <xsl:value-of select="."/>
480                 </xsl:attribute>
481         </xsl:template>
482
483         <!-- No role/roleTerm mapped in MADS 06/24/2010
484         <xsl:template name="role">
485                 <xsl:for-each select="marc:subfield[@code='e']">
486                         <mads:role>
487                                 <mads:roleTerm type="text">
488                                         <xsl:value-of select="."/>
489                                 </mads:roleTerm>
490                         </mads:role>
491                 </xsl:for-each>
492         </xsl:template>
493 -->
494
495         <xsl:template name="part">
496                 <xsl:variable name="partNumber">
497                         <xsl:call-template name="specialSubfieldSelect">
498                                 <xsl:with-param name="axis">n</xsl:with-param>
499                                 <xsl:with-param name="anyCodes">n</xsl:with-param>
500                                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
501                         </xsl:call-template>
502                 </xsl:variable>
503                 <xsl:variable name="partName">
504                         <xsl:call-template name="specialSubfieldSelect">
505                                 <xsl:with-param name="axis">p</xsl:with-param>
506                                 <xsl:with-param name="anyCodes">p</xsl:with-param>
507                                 <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
508                         </xsl:call-template>
509                 </xsl:variable>
510                 <xsl:if test="string-length(normalize-space($partNumber))">
511                         <mads:partNumber>
512                                 <xsl:call-template name="chopPunctuation">
513                                         <xsl:with-param name="chopString" select="$partNumber"/>
514                                 </xsl:call-template>
515                         </mads:partNumber>
516                 </xsl:if>
517                 <xsl:if test="string-length(normalize-space($partName))">
518                         <mads:partName>
519                                 <xsl:call-template name="chopPunctuation">
520                                         <xsl:with-param name="chopString" select="$partName"/>
521                                 </xsl:call-template>
522                         </mads:partName>
523                 </xsl:if>
524         </xsl:template>
525
526         <xsl:template name="nameABCDN">
527                 <xsl:for-each select="marc:subfield[@code='a']">
528                         <mads:namePart>
529                                 <xsl:call-template name="chopPunctuation">
530                                         <xsl:with-param name="chopString" select="."/>
531                                 </xsl:call-template>
532                         </mads:namePart>
533                 </xsl:for-each>
534                 <xsl:for-each select="marc:subfield[@code='b']">
535                         <mads:namePart>
536                                 <xsl:value-of select="."/>
537                         </mads:namePart>
538                 </xsl:for-each>
539                 <xsl:if
540                         test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
541                         <mads:namePart>
542                                 <xsl:call-template name="subfieldSelect">
543                                         <xsl:with-param name="codes">cdn</xsl:with-param>
544                                 </xsl:call-template>
545                         </mads:namePart>
546                 </xsl:if>
547         </xsl:template>
548
549         <xsl:template name="nameABCDQ">
550                 <mads:namePart>
551                         <xsl:call-template name="chopPunctuation">
552                                 <xsl:with-param name="chopString">
553                                         <xsl:call-template name="subfieldSelect">
554                                                 <xsl:with-param name="codes">aq</xsl:with-param>
555                                         </xsl:call-template>
556                                 </xsl:with-param>
557                         </xsl:call-template>
558                 </mads:namePart>
559                 <xsl:call-template name="termsOfAddress"/>
560                 <xsl:call-template name="nameDate"/>
561         </xsl:template>
562
563         <xsl:template name="nameACDENQ">
564                 <mads:namePart>
565                         <xsl:call-template name="subfieldSelect">
566                                 <xsl:with-param name="codes">acdenq</xsl:with-param>
567                         </xsl:call-template>
568                 </mads:namePart>
569         </xsl:template>
570
571         <xsl:template name="nameDate">
572                 <xsl:for-each select="marc:subfield[@code='d']">
573                         <mads:namePart type="date">
574                                 <xsl:call-template name="chopPunctuation">
575                                         <xsl:with-param name="chopString" select="."/>
576                                 </xsl:call-template>
577                         </mads:namePart>
578                 </xsl:for-each>
579         </xsl:template>
580
581         <xsl:template name="specialSubfieldSelect">
582                 <xsl:param name="anyCodes"/>
583                 <xsl:param name="axis"/>
584                 <xsl:param name="beforeCodes"/>
585                 <xsl:param name="afterCodes"/>
586                 <xsl:variable name="str">
587                         <xsl:for-each select="marc:subfield">
588                                 <xsl:if
589                                         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])">
590                                         <xsl:value-of select="text()"/>
591                                         <xsl:text> </xsl:text>
592                                 </xsl:if>
593                         </xsl:for-each>
594                 </xsl:variable>
595                 <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
596         </xsl:template>
597
598         <xsl:template name="termsOfAddress">
599                 <xsl:if test="marc:subfield[@code='b' or @code='c']">
600                         <mads:namePart type="termsOfAddress">
601                                 <xsl:call-template name="chopPunctuation">
602                                         <xsl:with-param name="chopString">
603                                                 <xsl:call-template name="subfieldSelect">
604                                                         <xsl:with-param name="codes">bc</xsl:with-param>
605                                                 </xsl:call-template>
606                                         </xsl:with-param>
607                                 </xsl:call-template>
608                         </mads:namePart>
609                 </xsl:if>
610         </xsl:template>
611
612         <xsl:template name="displayLabel">
613                 <xsl:if test="marc:subfield[@code='z']">
614                         <xsl:attribute name="displayLabel">
615                                 <xsl:value-of select="marc:subfield[@code='z']"/>
616                         </xsl:attribute>
617                 </xsl:if>
618                 <xsl:if test="marc:subfield[@code='3']">
619                         <xsl:attribute name="displayLabel">
620                                 <xsl:value-of select="marc:subfield[@code='3']"/>
621                         </xsl:attribute>
622                 </xsl:if>
623         </xsl:template>
624
625         <xsl:template name="isInvalid">
626                 <xsl:if test="@code='z'">
627                         <xsl:attribute name="invalid">yes</xsl:attribute>
628                 </xsl:if>
629         </xsl:template>
630
631         <xsl:template name="sub2Attribute">
632                 <!-- 024 -->
633                 <xsl:if test="../marc:subfield[@code='2']">
634                         <xsl:attribute name="type">
635                                 <xsl:value-of select="../marc:subfield[@code='2']"/>
636                         </xsl:attribute>
637                 </xsl:if>
638         </xsl:template>
639
640         <xsl:template match="marc:controlfield[@tag=001]">
641                 <mads:recordIdentifier>
642                         <xsl:if test="../marc:controlfield[@tag=003]">
643                                 <xsl:attribute name="source">
644                                         <xsl:value-of select="../marc:controlfield[@tag=003]"/>
645                                 </xsl:attribute>
646                         </xsl:if>
647                         <xsl:value-of select="."/>
648                 </mads:recordIdentifier>
649         </xsl:template>
650
651         <xsl:template match="marc:controlfield[@tag=005]">
652                 <mads:recordChangeDate encoding="iso8601">
653                         <xsl:value-of select="."/>
654                 </mads:recordChangeDate>
655         </xsl:template>
656
657         <xsl:template match="marc:controlfield[@tag=008]">
658                 <mads:recordCreationDate encoding="marc">
659                         <xsl:value-of select="substring(.,1,6)"/>
660                 </mads:recordCreationDate>
661         </xsl:template>
662
663         <xsl:template match="marc:datafield[@tag=010]">
664                 <xsl:for-each select="marc:subfield">
665                         <mads:identifier type="lccn">
666                                 <xsl:call-template name="isInvalid"/>
667                                 <xsl:value-of select="."/>
668                         </mads:identifier>
669                 </xsl:for-each>
670         </xsl:template>
671
672         <xsl:template match="marc:datafield[@tag=024]">
673                 <xsl:for-each select="marc:subfield[not(@code=2)]">
674                         <mads:identifier>
675                                 <xsl:call-template name="isInvalid"/>
676                                 <xsl:call-template name="sub2Attribute"/>
677                                 <xsl:value-of select="."/>
678                         </mads:identifier>
679                 </xsl:for-each>
680         </xsl:template>
681
682         <!-- ========== 372 ========== -->
683         <xsl:template match="marc:datafield[@tag=372]">
684                 <mads:fieldOfActivity>
685                         <xsl:call-template name="subfieldSelect">
686                                 <xsl:with-param name="codes">a</xsl:with-param>
687                         </xsl:call-template>
688                         <xsl:text>-</xsl:text>
689                         <xsl:call-template name="subfieldSelect">
690                                 <xsl:with-param name="codes">st</xsl:with-param>
691                         </xsl:call-template>
692                 </mads:fieldOfActivity>
693         </xsl:template>
694
695
696         <!-- ========== 040 ========== -->
697         <xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='a']">
698                 <mads:recordContentSource authority="marcorg">
699                         <xsl:value-of select="."/>
700                 </mads:recordContentSource>
701         </xsl:template>
702
703         <xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='b']">
704                 <mads:languageOfCataloging>
705                         <mads:languageTerm authority="iso639-2b" type="code">
706                                 <xsl:value-of select="."/>
707                         </mads:languageTerm>
708                 </mads:languageOfCataloging>
709         </xsl:template>
710
711         <xsl:template match="marc:datafield[@tag=040]/marc:subfield[@code='e']">
712                 <mads:descriptionStandard>
713                         <xsl:value-of select="."/>
714                 </mads:descriptionStandard>
715         </xsl:template>
716         
717         <!-- ========== classification 2.03 ========== -->
718         
719         <xsl:template match="marc:datafield[@tag=053]">
720                 <mads:classification>
721                         <xsl:call-template name="subfieldSelect">
722                                 <xsl:with-param name="codes">abcdxyz</xsl:with-param>
723                                 <xsl:with-param name="delimeter">-</xsl:with-param>
724                         </xsl:call-template>
725                 </mads:classification>
726         </xsl:template>
727         
728         <xsl:template match="marc:datafield[@tag=055]">
729                 <mads:classification>
730                         <xsl:call-template name="subfieldSelect">
731                                 <xsl:with-param name="codes">abcdxyz</xsl:with-param>
732                                 <xsl:with-param name="delimeter">-</xsl:with-param>
733                         </xsl:call-template>
734                 </mads:classification>
735         </xsl:template>
736         
737         <xsl:template match="marc:datafield[@tag=060]">
738                 <mads:classification>
739                         <xsl:call-template name="subfieldSelect">
740                                 <xsl:with-param name="codes">abcdxyz</xsl:with-param>
741                                 <xsl:with-param name="delimeter">-</xsl:with-param>
742                         </xsl:call-template>
743                 </mads:classification>
744         </xsl:template>
745         <xsl:template match="marc:datafield[@tag=065]">
746                 <mads:classification>
747                         <xsl:attribute name="authority">
748                                 <xsl:value-of select="marc:subfield[@code='2']"/>
749                         </xsl:attribute>
750                         <xsl:call-template name="subfieldSelect">
751                                 <xsl:with-param name="codes">abcdxyz</xsl:with-param>
752                                 <xsl:with-param name="delimeter">-</xsl:with-param>
753                         </xsl:call-template>
754                 </mads:classification>
755         </xsl:template>
756         <xsl:template match="marc:datafield[@tag=070]">
757                 <mads:classification>
758                         <xsl:call-template name="subfieldSelect">
759                                 <xsl:with-param name="codes">abcdxyz5</xsl:with-param>
760                                 <xsl:with-param name="delimeter">-</xsl:with-param>
761                         </xsl:call-template>
762                 </mads:classification>
763         </xsl:template>
764         <xsl:template match="marc:datafield[@tag=080]">
765                 <mads:classification>
766                         <xsl:attribute name="authority">
767                                 <xsl:value-of select="marc:subfield[@code='2']"/>
768                         </xsl:attribute>
769                         <xsl:call-template name="subfieldSelect">
770                                 <xsl:with-param name="codes">abcdxyz5</xsl:with-param>
771                                 <xsl:with-param name="delimeter">-</xsl:with-param>
772                         </xsl:call-template>
773                 </mads:classification>
774         </xsl:template>
775         <xsl:template match="marc:datafield[@tag=082]">
776                 <mads:classification>
777                         <xsl:attribute name="authority">
778                                 <xsl:value-of select="marc:subfield[@code='2']"/>
779                         </xsl:attribute>
780                         <xsl:call-template name="subfieldSelect">
781                                 <xsl:with-param name="codes">abcdxyz5</xsl:with-param>
782                                 <xsl:with-param name="delimeter">-</xsl:with-param>
783                         </xsl:call-template>
784                 </mads:classification>
785         </xsl:template>
786         <xsl:template match="marc:datafield[@tag=083]">
787                 <mads:classification>
788                         <xsl:attribute name="authority">
789                                 <xsl:value-of select="marc:subfield[@code='2']"/>
790                         </xsl:attribute>
791                         <xsl:call-template name="subfieldSelect">
792                                 <xsl:with-param name="codes">abcdxyz5</xsl:with-param>
793                                 <xsl:with-param name="delimeter">-</xsl:with-param>
794                         </xsl:call-template>
795                 </mads:classification>
796         </xsl:template>
797         <xsl:template match="marc:datafield[@tag=086]">
798                 <mads:classification>
799                         <xsl:attribute name="authority">
800                                 <xsl:value-of select="marc:subfield[@code='2']"/>
801                         </xsl:attribute>
802                         <xsl:call-template name="subfieldSelect">
803                                 <xsl:with-param name="codes">abcdxyz5</xsl:with-param>
804                                 <xsl:with-param name="delimeter">-</xsl:with-param>
805                         </xsl:call-template>
806                 </mads:classification>
807         </xsl:template>
808         <xsl:template match="marc:datafield[@tag=087]">
809                 <mads:classification>
810                         <xsl:attribute name="authority">
811                                 <xsl:value-of select="marc:subfield[@code='2']"/>
812                         </xsl:attribute>
813                         <xsl:call-template name="subfieldSelect">
814                                 <xsl:with-param name="codes">abcdxyz5</xsl:with-param>
815                                 <xsl:with-param name="delimeter">-</xsl:with-param>
816                         </xsl:call-template>
817                 </mads:classification>
818         </xsl:template>
819         
820
821         <!-- ========== names  ========== -->
822         <xsl:template match="marc:datafield[@tag=100]">
823                 <mads:name type="personal">
824                         <xsl:call-template name="setAuthority"/>
825                         <xsl:call-template name="nameABCDQ"/>
826                 </mads:name>
827                 <xsl:apply-templates select="*[marc:subfield[not(contains('abcdeq',@code))]]"/>
828                 <xsl:call-template name="title"/>
829                 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
830         </xsl:template>
831
832         <xsl:template match="marc:datafield[@tag=110]">
833                 <mads:name type="corporate">
834                         <xsl:call-template name="setAuthority"/>
835                         <xsl:call-template name="nameABCDN"/>
836                 </mads:name>
837                 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
838         </xsl:template>
839
840         <xsl:template match="marc:datafield[@tag=111]">
841                 <mads:name type="conference">
842                         <xsl:call-template name="setAuthority"/>
843                         <xsl:call-template name="nameACDENQ"/>
844                 </mads:name>
845                 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
846         </xsl:template>
847
848         <xsl:template match="marc:datafield[@tag=400]">
849                 <mads:variant>
850                         <xsl:call-template name="variantTypeAttribute"/>
851                         <mads:name type="personal">
852                                 <xsl:call-template name="nameABCDQ"/>
853                         </mads:name>
854                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
855                         <xsl:call-template name="title"/>
856                 </mads:variant>
857         </xsl:template>
858
859         <xsl:template match="marc:datafield[@tag=410]">
860                 <mads:variant>
861                         <xsl:call-template name="variantTypeAttribute"/>
862                         <mads:name type="corporate">
863                                 <xsl:call-template name="nameABCDN"/>
864                         </mads:name>
865                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
866                 </mads:variant>
867         </xsl:template>
868
869         <xsl:template match="marc:datafield[@tag=411]">
870                 <mads:variant>
871                         <xsl:call-template name="variantTypeAttribute"/>
872                         <mads:name type="conference">
873                                 <xsl:call-template name="nameACDENQ"/>
874                         </mads:name>
875                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
876                 </mads:variant>
877         </xsl:template>
878
879         <xsl:template match="marc:datafield[@tag=500]|marc:datafield[@tag=700]">
880                 <mads:related>
881                         <xsl:call-template name="relatedTypeAttribute"/>
882                         <!-- <xsl:call-template name="uri"/> -->
883                         <mads:name type="personal">
884                                 <xsl:call-template name="setAuthority"/>
885                                 <xsl:call-template name="nameABCDQ"/>
886                         </mads:name>
887                         <xsl:call-template name="title"/>
888                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
889                 </mads:related>
890         </xsl:template>
891
892         <xsl:template match="marc:datafield[@tag=510]|marc:datafield[@tag=710]">
893                 <mads:related>
894                         <xsl:call-template name="relatedTypeAttribute"/>
895                         <!-- <xsl:call-template name="uri"/> -->
896                         <mads:name type="corporate">
897                                 <xsl:call-template name="setAuthority"/>
898                                 <xsl:call-template name="nameABCDN"/>
899                         </mads:name>
900                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
901                 </mads:related>
902         </xsl:template>
903
904         <xsl:template match="marc:datafield[@tag=511]|marc:datafield[@tag=711]">
905                 <mads:related>
906                         <xsl:call-template name="relatedTypeAttribute"/>
907                         <!-- <xsl:call-template name="uri"/> -->
908                         <mads:name type="conference">
909                                 <xsl:call-template name="setAuthority"/>
910                                 <xsl:call-template name="nameACDENQ"/>
911                         </mads:name>
912                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
913                 </mads:related>
914         </xsl:template>
915
916         <!-- ========== titles  ========== -->
917         <xsl:template match="marc:datafield[@tag=130]">
918                 <xsl:call-template name="uniform-title"/>
919                 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
920         </xsl:template>
921
922         <xsl:template match="marc:datafield[@tag=430]">
923                 <mads:variant>
924                         <xsl:call-template name="variantTypeAttribute"/>
925                         <xsl:call-template name="uniform-title"/>
926                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
927                 </mads:variant>
928         </xsl:template>
929
930         <xsl:template match="marc:datafield[@tag=530]|marc:datafield[@tag=730]">
931                 <mads:related>
932                         <xsl:call-template name="relatedTypeAttribute"/>
933                         <xsl:call-template name="uniform-title"/>
934                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
935                 </mads:related>
936         </xsl:template>
937
938         <xsl:template name="title">
939                 <xsl:variable name="hasTitle">
940                         <xsl:for-each select="marc:subfield">
941                                 <xsl:if test="(contains('tfghklmors',@code) )">
942                                         <xsl:value-of select="@code"/>
943                                 </xsl:if>
944                         </xsl:for-each>
945                 </xsl:variable>
946                 <xsl:if test="string-length($hasTitle) &gt; 0 ">
947                         <mads:titleInfo>
948                                 <xsl:call-template name="setAuthority"/>
949                                 <mads:title>
950                                         <xsl:variable name="str">
951                                                 <xsl:for-each select="marc:subfield">
952                                                         <xsl:if test="(contains('atfghklmors',@code) )">
953                                                                 <xsl:value-of select="text()"/>
954                                                                 <xsl:text> </xsl:text>
955                                                         </xsl:if>
956                                                 </xsl:for-each>
957                                         </xsl:variable>
958                                         <xsl:call-template name="chopPunctuation">
959                                                 <xsl:with-param name="chopString">
960                                                         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
961                                                 </xsl:with-param>
962                                         </xsl:call-template>
963                                 </mads:title>
964                                 <xsl:call-template name="part"/>
965                                 <!-- <xsl:call-template name="uri"/> -->
966                         </mads:titleInfo>
967                 </xsl:if>
968         </xsl:template>
969
970         <xsl:template name="uniform-title">
971                 <xsl:variable name="hasTitle">
972                         <xsl:for-each select="marc:subfield">
973                                 <xsl:if test="(contains('atfghklmors',@code) )">
974                                         <xsl:value-of select="@code"/>
975                                 </xsl:if>
976                         </xsl:for-each>
977                 </xsl:variable>
978                 <xsl:if test="string-length($hasTitle) &gt; 0 ">
979                         <mads:titleInfo>
980                                 <xsl:call-template name="setAuthority"/>
981                                 <mads:title>
982                                         <xsl:variable name="str">
983                                                 <xsl:for-each select="marc:subfield">
984                                                         <xsl:if test="(contains('adfghklmors',@code) )">
985                                                                 <xsl:value-of select="text()"/>
986                                                                 <xsl:text> </xsl:text>
987                                                         </xsl:if>
988                                                 </xsl:for-each>
989                                         </xsl:variable>
990                                         <xsl:call-template name="chopPunctuation">
991                                                 <xsl:with-param name="chopString">
992                                                         <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
993                                                 </xsl:with-param>
994                                         </xsl:call-template>
995                                 </mads:title>
996                                 <xsl:call-template name="part"/>
997                                 <!-- <xsl:call-template name="uri"/> -->
998                         </mads:titleInfo>
999                 </xsl:if>
1000         </xsl:template>
1001
1002
1003         <!-- ========== topics  ========== -->
1004         <xsl:template match="marc:subfield[@code='x']">
1005                 <mads:topic>
1006                         <xsl:call-template name="chopPunctuation">
1007                                 <xsl:with-param name="chopString">
1008                                         <xsl:value-of select="."/>
1009                                 </xsl:with-param>
1010                         </xsl:call-template>
1011                 </mads:topic>
1012         </xsl:template>
1013         
1014         <!-- 2.06 fix -->
1015         <xsl:template
1016                 match="marc:datafield[@tag=150][marc:subfield[@code='a' or @code='b']]|marc:datafield[@tag=180][marc:subfield[@code='x']]">
1017                 <xsl:call-template name="topic"/>
1018                 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1019         </xsl:template>
1020         <xsl:template
1021                 match="marc:datafield[@tag=450][marc:subfield[@code='a' or @code='b']]|marc:datafield[@tag=480][marc:subfield[@code='x']]">
1022                 <mads:variant>
1023                         <xsl:call-template name="variantTypeAttribute"/>
1024                         <xsl:call-template name="topic"/>
1025                 </mads:variant>
1026         </xsl:template>
1027         <xsl:template
1028                 match="marc:datafield[@tag=550 or @tag=750][marc:subfield[@code='a' or @code='b']]">
1029                 <mads:related>
1030                         <xsl:call-template name="relatedTypeAttribute"/>
1031                         <!-- <xsl:call-template name="uri"/> -->
1032                         <xsl:call-template name="topic"/>
1033                         <xsl:apply-templates select="marc:subfield[@code='z']"/>
1034                 </mads:related>
1035         </xsl:template>
1036         <xsl:template name="topic">
1037                 <mads:topic>
1038                         <xsl:call-template name="setAuthority"/>
1039                         <!-- tmee2006 dedupe 550a
1040                         <xsl:if test="@tag=550 or @tag=750">
1041                                 <xsl:call-template name="subfieldSelect">
1042                                         <xsl:with-param name="codes">ab</xsl:with-param>
1043                                 </xsl:call-template>
1044                         </xsl:if>       
1045                         -->
1046                         <xsl:choose>
1047                                 <xsl:when test="@tag=180 or @tag=480 or @tag=580 or @tag=780">
1048                                         <xsl:call-template name="chopPunctuation">
1049                                                 <xsl:with-param name="chopString">
1050                                                         <xsl:apply-templates select="marc:subfield[@code='x']"/>
1051                                                 </xsl:with-param>
1052                                         </xsl:call-template>
1053                                 </xsl:when>
1054                         </xsl:choose>
1055                         <xsl:call-template name="chopPunctuation">
1056                                 <xsl:with-param name="chopString">
1057                                         <xsl:choose>
1058                                                 <xsl:when test="@tag=180 or @tag=480 or @tag=580 or @tag=780">
1059                                                         <xsl:apply-templates select="marc:subfield[@code='x']"/>
1060                                                 </xsl:when>
1061                                                 <xsl:otherwise>
1062                                                         <xsl:call-template name="subfieldSelect">
1063                                                                 <xsl:with-param name="codes">ab</xsl:with-param>
1064                                                         </xsl:call-template>
1065                                                 </xsl:otherwise>
1066                                         </xsl:choose>
1067                                 </xsl:with-param>
1068                         </xsl:call-template>
1069                 </mads:topic>
1070         </xsl:template>
1071
1072         <!-- ========= temporals  ========== -->
1073         <xsl:template match="marc:subfield[@code='y']">
1074                 <mads:temporal>
1075                         <xsl:call-template name="chopPunctuation">
1076                                 <xsl:with-param name="chopString">
1077                                         <xsl:value-of select="."/>
1078                                 </xsl:with-param>
1079                         </xsl:call-template>
1080                 </mads:temporal>
1081         </xsl:template>
1082         <xsl:template
1083                 match="marc:datafield[@tag=148][marc:subfield[@code='a']]|marc:datafield[@tag=182 ][marc:subfield[@code='y']]">
1084                 <xsl:call-template name="temporal"/>
1085         </xsl:template>
1086         <xsl:template
1087                 match="marc:datafield[@tag=448][marc:subfield[@code='a']]|marc:datafield[@tag=482][marc:subfield[@code='y']]">
1088                 <mads:variant>
1089                         <xsl:call-template name="variantTypeAttribute"/>
1090                         <xsl:call-template name="temporal"/>
1091                 </mads:variant>
1092         </xsl:template>
1093         <xsl:template
1094                 match="marc:datafield[@tag=548 or @tag=748][marc:subfield[@code='a']]|marc:datafield[@tag=582 or @tag=782][marc:subfield[@code='y']]">
1095                 <mads:related>
1096                         <xsl:call-template name="relatedTypeAttribute"/>
1097                         <!-- <xsl:call-template name="uri"/> -->
1098                         <xsl:call-template name="temporal"/>
1099                 </mads:related>
1100         </xsl:template>
1101         <xsl:template name="temporal">
1102                 <mads:temporal>
1103                         <xsl:call-template name="setAuthority"/>
1104                         <xsl:if test="@tag=548 or @tag=748">
1105                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1106                         </xsl:if>
1107                         <xsl:call-template name="chopPunctuation">
1108                                 <xsl:with-param name="chopString">
1109                                         <xsl:choose>
1110                                                 <xsl:when test="@tag=182 or @tag=482 or @tag=582 or @tag=782">
1111                                                         <xsl:apply-templates select="marc:subfield[@code='y']"/>
1112                                                 </xsl:when>
1113                                                 <xsl:otherwise>
1114                                                         <xsl:value-of select="marc:subfield[@code='a']"/>
1115                                                 </xsl:otherwise>
1116                                         </xsl:choose>
1117                                 </xsl:with-param>
1118                         </xsl:call-template>
1119                 </mads:temporal>
1120                 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1121         </xsl:template>
1122
1123         <!-- ========== genre  ========== -->
1124         <xsl:template match="marc:subfield[@code='v']">
1125                 <mads:genre>
1126                         <xsl:call-template name="chopPunctuation">
1127                                 <xsl:with-param name="chopString">
1128                                         <xsl:value-of select="."/>
1129                                 </xsl:with-param>
1130                         </xsl:call-template>
1131                 </mads:genre>
1132         </xsl:template>
1133         <xsl:template
1134                 match="marc:datafield[@tag=155][marc:subfield[@code='a']]|marc:datafield[@tag=185][marc:subfield[@code='v']]">
1135                 <xsl:call-template name="genre"/>
1136         </xsl:template>
1137         <xsl:template
1138                 match="marc:datafield[@tag=455][marc:subfield[@code='a']]|marc:datafield[@tag=485 ][marc:subfield[@code='v']]">
1139                 <mads:variant>
1140                         <xsl:call-template name="variantTypeAttribute"/>
1141                         <xsl:call-template name="genre"/>
1142                 </mads:variant>
1143         </xsl:template>
1144         <!--
1145         <xsl:template match="marc:datafield[@tag=555]">
1146                 <mads:related>
1147                         <xsl:call-template name="relatedTypeAttribute"/>
1148                         <xsl:call-template name="uri"/>
1149                         <xsl:call-template name="genre"/>
1150                 </mads:related>
1151         </xsl:template>
1152         -->
1153         <xsl:template
1154                 match="marc:datafield[@tag=555 or @tag=755][marc:subfield[@code='a']]|marc:datafield[@tag=585][marc:subfield[@code='v']]">
1155                 <mads:related>
1156                         <xsl:call-template name="relatedTypeAttribute"/>
1157                         <xsl:call-template name="genre"/>
1158                 </mads:related>
1159         </xsl:template>
1160         <xsl:template name="genre">
1161                 <mads:genre>
1162                         <xsl:if test="@tag=555">
1163                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1164                         </xsl:if>
1165                         <xsl:call-template name="setAuthority"/>
1166                         <xsl:call-template name="chopPunctuation">
1167                                 <xsl:with-param name="chopString">
1168                                         <xsl:choose>
1169                                                 <!-- 2.07 fix -->
1170                                                 <xsl:when test="@tag='555'"/>
1171                                                 <xsl:when test="@tag=185 or @tag=485 or @tag=585">
1172                                                         <xsl:apply-templates select="marc:subfield[@code='v']"/>
1173                                                 </xsl:when>
1174                                                 <xsl:otherwise>
1175                                                         <xsl:value-of select="marc:subfield[@code='a']"/>
1176                                                 </xsl:otherwise>
1177                                         </xsl:choose>
1178                                 </xsl:with-param>
1179                         </xsl:call-template>
1180                 </mads:genre>
1181                 <xsl:apply-templates/>
1182         </xsl:template>
1183
1184         <!-- ========= geographic  ========== -->
1185         <xsl:template match="marc:subfield[@code='z']">
1186                 <mads:geographic>
1187                         <xsl:call-template name="chopPunctuation">
1188                                 <xsl:with-param name="chopString">
1189                                         <xsl:value-of select="."/>
1190                                 </xsl:with-param>
1191                         </xsl:call-template>
1192                 </mads:geographic>
1193         </xsl:template>
1194         <xsl:template name="geographic">
1195                 <mads:geographic>
1196                         <!-- 2.14 -->
1197                         <xsl:call-template name="setAuthority"/>
1198                         <!-- 2.13 -->
1199                         <xsl:if test="@tag=151 or @tag=551">
1200                                 <xsl:value-of select="marc:subfield[@code='a']"/>
1201                         </xsl:if>
1202                         <xsl:call-template name="chopPunctuation">
1203                                 <xsl:with-param name="chopString">
1204                                                 <xsl:if test="@tag=181 or @tag=481 or @tag=581">
1205                                                                 <xsl:apply-templates select="marc:subfield[@code='z']"/>
1206                                                 </xsl:if>
1207                                                 <!-- 2.13
1208                                                         <xsl:choose>
1209                                                 <xsl:when test="@tag=181 or @tag=481 or @tag=581">
1210                                                         <xsl:apply-templates select="marc:subfield[@code='z']"/>
1211                                                 </xsl:when>
1212                                         
1213                                                 <xsl:otherwise>
1214                                                         <xsl:value-of select="marc:subfield[@code='a']"/>
1215                                                 </xsl:otherwise>
1216                                                 </xsl:choose>
1217                                                 -->
1218                                 </xsl:with-param>
1219                         </xsl:call-template>
1220                 </mads:geographic>
1221                 <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1222         </xsl:template>
1223         <xsl:template
1224                 match="marc:datafield[@tag=151][marc:subfield[@code='a']]|marc:datafield[@tag=181][marc:subfield[@code='z']]">
1225                 <xsl:call-template name="geographic"/>
1226         </xsl:template>
1227         <xsl:template
1228                 match="marc:datafield[@tag=451][marc:subfield[@code='a']]|marc:datafield[@tag=481][marc:subfield[@code='z']]">
1229                 <mads:variant>
1230                         <xsl:call-template name="variantTypeAttribute"/>
1231                         <xsl:call-template name="geographic"/>
1232                 </mads:variant>
1233         </xsl:template>
1234         <xsl:template
1235                 match="marc:datafield[@tag=551]|marc:datafield[@tag=581][marc:subfield[@code='z']]">
1236                 <mads:related>
1237                         <xsl:call-template name="relatedTypeAttribute"/>
1238                         <!-- <xsl:call-template name="uri"/> -->
1239                         <xsl:call-template name="geographic"/>
1240                 </mads:related>
1241         </xsl:template>
1242         <xsl:template match="marc:datafield[@tag=580]">
1243                 <mads:related>
1244                         <xsl:call-template name="relatedTypeAttribute"/>
1245                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1246                 </mads:related>
1247         </xsl:template>
1248         <xsl:template
1249                 match="marc:datafield[@tag=751][marc:subfield[@code='z']]|marc:datafield[@tag=781][marc:subfield[@code='z']]">
1250                 <mads:related>
1251                         <xsl:call-template name="relatedTypeAttribute"/>
1252                         <xsl:call-template name="geographic"/>
1253                 </mads:related>
1254         </xsl:template>
1255         <xsl:template match="marc:datafield[@tag=755]">
1256                 <mads:related>
1257                         <xsl:call-template name="relatedTypeAttribute"/>
1258                         <xsl:call-template name="setAuthority"/>
1259                         <xsl:call-template name="genre"/>
1260                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1261                 </mads:related>
1262         </xsl:template>
1263         <xsl:template match="marc:datafield[@tag=780]">
1264                 <mads:related>
1265                         <xsl:call-template name="relatedTypeAttribute"/>
1266                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1267                 </mads:related>
1268         </xsl:template>
1269         <xsl:template match="marc:datafield[@tag=785]">
1270                 <mads:related>
1271                         <xsl:call-template name="relatedTypeAttribute"/>
1272                         <xsl:apply-templates select="marc:subfield[@code!='i']"/>
1273                 </mads:related>
1274         </xsl:template>
1275
1276         <!-- ========== notes  ========== -->
1277         <xsl:template match="marc:datafield[667 &lt;= @tag and @tag &lt;= 688]">
1278                 <mads:note>
1279                         <xsl:choose>
1280                                 <xsl:when test="@tag=667">
1281                                         <xsl:attribute name="type">nonpublic</xsl:attribute>
1282                                 </xsl:when>
1283                                 <xsl:when test="@tag=670">
1284                                         <xsl:attribute name="type">source</xsl:attribute>
1285                                 </xsl:when>
1286                                 <xsl:when test="@tag=675">
1287                                         <xsl:attribute name="type">notFound</xsl:attribute>
1288                                 </xsl:when>
1289                                 <xsl:when test="@tag=678">
1290                                         <xsl:attribute name="type">history</xsl:attribute>
1291                                 </xsl:when>
1292                                 <xsl:when test="@tag=681">
1293                                         <xsl:attribute name="type">subject example</xsl:attribute>
1294                                 </xsl:when>
1295                                 <xsl:when test="@tag=682">
1296                                         <xsl:attribute name="type">deleted heading information</xsl:attribute>
1297                                 </xsl:when>
1298                                 <xsl:when test="@tag=688">
1299                                         <xsl:attribute name="type">application history</xsl:attribute>
1300                                 </xsl:when>
1301                         </xsl:choose>
1302                         <xsl:call-template name="chopPunctuation">
1303                                 <xsl:with-param name="chopString">
1304                                         <xsl:choose>
1305                                                 <xsl:when test="@tag=667 or @tag=675">
1306                                                         <xsl:value-of select="marc:subfield[@code='a']"/>
1307                                                 </xsl:when>
1308                                                 <xsl:when test="@tag=670 or @tag=678">
1309                                                         <xsl:call-template name="subfieldSelect">
1310                                                                 <xsl:with-param name="codes">ab</xsl:with-param>
1311                                                         </xsl:call-template>
1312                                                 </xsl:when>
1313                                                 <xsl:when test="680 &lt;= @tag and @tag &lt;=688">
1314                                                         <xsl:call-template name="subfieldSelect">
1315                                                                 <xsl:with-param name="codes">ai</xsl:with-param>
1316                                                         </xsl:call-template>
1317                                                 </xsl:when>
1318                                         </xsl:choose>
1319                                 </xsl:with-param>
1320                         </xsl:call-template>
1321                 </mads:note>
1322         </xsl:template>
1323
1324         <!-- ========== url  ========== -->
1325         <xsl:template match="marc:datafield[@tag=856][marc:subfield[@code='u']]">
1326                 <mads:url>
1327                         <xsl:if test="marc:subfield[@code='z' or @code='3']">
1328                                 <xsl:attribute name="displayLabel">
1329                                         <xsl:call-template name="subfieldSelect">
1330                                                 <xsl:with-param name="codes">z3</xsl:with-param>
1331                                         </xsl:call-template>
1332                                 </xsl:attribute>
1333                         </xsl:if>
1334                         <xsl:value-of select="marc:subfield[@code='u']"/>
1335                 </mads:url>
1336         </xsl:template>
1337
1338         <xsl:template name="relatedTypeAttribute">
1339                 <xsl:choose>
1340                         <xsl:when
1341                                 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">
1342                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='a'">
1343                                         <xsl:attribute name="type">earlier</xsl:attribute>
1344                                 </xsl:if>
1345                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='b'">
1346                                         <xsl:attribute name="type">later</xsl:attribute>
1347                                 </xsl:if>
1348                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='t'">
1349                                         <xsl:attribute name="type">parentOrg</xsl:attribute>
1350                                 </xsl:if>
1351                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='g'">
1352                                         <xsl:attribute name="type">broader</xsl:attribute>
1353                                 </xsl:if>
1354                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='h'">
1355                                         <xsl:attribute name="type">narrower</xsl:attribute>
1356                                 </xsl:if>
1357                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='r'">
1358                                         <xsl:attribute name="type">other</xsl:attribute>
1359                                 </xsl:if>
1360                                 <xsl:if test="contains('fin|', substring(marc:subfield[@code='w'],1,1))">
1361                                         <xsl:attribute name="type">other</xsl:attribute>
1362                                 </xsl:if>
1363                         </xsl:when>
1364                         <xsl:when test="@tag=530 or @tag=730">
1365                                 <xsl:attribute name="type">other</xsl:attribute>
1366                         </xsl:when>
1367                         <xsl:otherwise>
1368                                 <!-- 7xx -->
1369                                 <xsl:attribute name="type">equivalent</xsl:attribute>
1370                         </xsl:otherwise>
1371                 </xsl:choose>
1372                 <xsl:apply-templates select="marc:subfield[@code='i']"/>
1373         </xsl:template>
1374         
1375
1376
1377         <xsl:template name="variantTypeAttribute">
1378                 <xsl:choose>
1379                         <xsl:when
1380                                 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">
1381                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='d'">
1382                                         <xsl:attribute name="type">acronym</xsl:attribute>
1383                                 </xsl:if>
1384                                 <xsl:if test="substring(marc:subfield[@code='w'],1,1)='n'">
1385                                         <xsl:attribute name="type">other</xsl:attribute>
1386                                 </xsl:if>
1387                                 <xsl:if test="contains('fit', substring(marc:subfield[@code='w'],1,1))">
1388                                         <xsl:attribute name="type">other</xsl:attribute>
1389                                 </xsl:if>
1390                         </xsl:when>
1391                         <xsl:otherwise>
1392                                 <!-- 430  -->
1393                                 <xsl:attribute name="type">other</xsl:attribute>
1394                         </xsl:otherwise>
1395                 </xsl:choose>
1396                 <xsl:apply-templates select="marc:subfield[@code='i']"/>
1397         </xsl:template>
1398
1399         <xsl:template name="setAuthority">
1400                 <xsl:choose>
1401                         <!-- can be called from the datafield or subfield level, so "..//@tag" means
1402                         the tag can be at the subfield's parent level or at the datafields own level -->
1403
1404                         <xsl:when
1405                                 test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='a' and $controlField008-14='a'">
1406                                 <xsl:attribute name="authority">
1407                                         <xsl:text>naf</xsl:text>
1408                                 </xsl:attribute>
1409                         </xsl:when>
1410                         <xsl:when
1411                                 test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='a' and $controlField008-14='b'">
1412                                 <xsl:attribute name="authority">
1413                                         <xsl:text>lcsh</xsl:text>
1414                                 </xsl:attribute>
1415                         </xsl:when>
1416                         <xsl:when
1417                                 test="ancestor-or-self::marc:datafield/@tag=100 and (@ind1=0 or @ind1=1) and $controlField008-11='k'">
1418                                 <xsl:attribute name="authority">
1419                                         <xsl:text>lacnaf</xsl:text>
1420                                 </xsl:attribute>
1421                         </xsl:when>
1422                         <xsl:when
1423                                 test="ancestor-or-self::marc:datafield/@tag=100 and @ind1=3 and $controlField008-11='a' and $controlField008-14='b'">
1424                                 <xsl:attribute name="authority">
1425                                         <xsl:text>lcsh</xsl:text>
1426                                 </xsl:attribute>
1427                         </xsl:when>
1428                         <xsl:when
1429                                 test="ancestor-or-self::marc:datafield/@tag=100 and @ind1=3 and $controlField008-11='k' and $controlField008-14='b'">
1430                                 <xsl:attribute name="authority">cash</xsl:attribute>
1431                         </xsl:when>
1432                         <xsl:when
1433                                 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='a' and $controlField008-14='a'">
1434                                 <xsl:attribute name="authority">naf</xsl:attribute>
1435                         </xsl:when>
1436                         <xsl:when
1437                                 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='a' and $controlField008-14='b'">
1438                                 <xsl:attribute name="authority">lcsh</xsl:attribute>
1439                         </xsl:when>
1440                         <xsl:when
1441                                 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='k' and $controlField008-14='a'">
1442                                 <xsl:attribute name="authority">
1443                                         <xsl:text>lacnaf</xsl:text>
1444                                 </xsl:attribute>
1445                         </xsl:when>
1446                         <xsl:when
1447                                 test="ancestor-or-self::marc:datafield/@tag=110 and $controlField008-11='k' and $controlField008-14='b'">
1448                                 <xsl:attribute name="authority">
1449                                         <xsl:text>cash</xsl:text>
1450                                 </xsl:attribute>
1451                         </xsl:when>
1452                         <xsl:when
1453                                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='b'">
1454                                 <xsl:attribute name="authority">
1455                                         <xsl:text>lcshcl</xsl:text>
1456                                 </xsl:attribute>
1457                         </xsl:when>
1458                         <xsl:when
1459                                 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'">
1460                                 <xsl:attribute name="authority">
1461                                         <xsl:text>nlmnaf</xsl:text>
1462                                 </xsl:attribute>
1463                         </xsl:when>
1464                         <xsl:when
1465                                 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'">
1466                                 <xsl:attribute name="authority">
1467                                         <xsl:text>nalnaf</xsl:text>
1468                                 </xsl:attribute>
1469                         </xsl:when>
1470                         <xsl:when
1471                                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='r'">
1472                                 <xsl:attribute name="authority">
1473                                         <xsl:text>aat</xsl:text>
1474                                 </xsl:attribute>
1475                         </xsl:when>
1476                         <xsl:when
1477                                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='s'">
1478                                 <xsl:attribute name="authority">sears</xsl:attribute>
1479                         </xsl:when>
1480                         <xsl:when
1481                                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='v'">
1482                                 <xsl:attribute name="authority">rvm</xsl:attribute>
1483                         </xsl:when>
1484                         <xsl:when
1485                                 test="100 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 155 and $controlField008-11='z'">
1486                                 <xsl:attribute name="authority">
1487                                         <xsl:value-of
1488                                                 select="../marc:datafield[ancestor-or-self::marc:datafield/@tag=040]/marc:subfield[@code='f']"
1489                                         />
1490                                 </xsl:attribute>
1491                         </xsl:when>
1492                         <xsl:when
1493                                 test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='a' and $controlField008-14='a'">
1494                                 <xsl:attribute name="authority">
1495                                         <xsl:text>naf</xsl:text>
1496                                 </xsl:attribute>
1497                         </xsl:when>
1498                         <xsl:when
1499                                 test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='a' and $controlField008-14='b'">
1500                                 <xsl:attribute name="authority">
1501                                         <xsl:text>lcsh</xsl:text>
1502                                 </xsl:attribute>
1503                         </xsl:when>
1504                         <xsl:when
1505                                 test="(ancestor-or-self::marc:datafield/@tag=111 or ancestor-or-self::marc:datafield/@tag=130) and $controlField008-11='k' ">
1506                                 <xsl:attribute name="authority">
1507                                         <xsl:text>lacnaf</xsl:text>
1508                                 </xsl:attribute>
1509                         </xsl:when>
1510                         <xsl:when
1511                                 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' ">
1512                                 <xsl:attribute name="authority">
1513                                         <xsl:text>lcsh</xsl:text>
1514                                 </xsl:attribute>
1515                         </xsl:when>
1516                         <xsl:when
1517                                 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' ">
1518                                 <xsl:attribute name="authority">
1519                                         <xsl:text>lcsh</xsl:text>
1520                                 </xsl:attribute>
1521                         </xsl:when>
1522                         <xsl:when
1523                                 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' ">
1524                                 <xsl:attribute name="authority">
1525                                         <xsl:text>mesh</xsl:text>
1526                                 </xsl:attribute>
1527                         </xsl:when>
1528                         <xsl:when
1529                                 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' ">
1530                                 <xsl:attribute name="authority">
1531                                         <xsl:text>nal</xsl:text>
1532                                 </xsl:attribute>
1533                         </xsl:when>
1534                         <xsl:when
1535                                 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' ">
1536                                 <xsl:attribute name="authority">
1537                                         <xsl:text>cash</xsl:text>
1538                                 </xsl:attribute>
1539                         </xsl:when>
1540                         <xsl:when
1541                                 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='a' and $controlField008-14='a'">
1542                                 <xsl:attribute name="authority">
1543                                         <xsl:text>naf</xsl:text>
1544                                 </xsl:attribute>
1545                         </xsl:when>
1546                         <xsl:when
1547                                 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='a' and $controlField008-14='b'">
1548                                 <xsl:attribute name="authority">lcsh</xsl:attribute>
1549                         </xsl:when>
1550                         <xsl:when
1551                                 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='k' and $controlField008-14='a'">
1552                                 <xsl:attribute name="authority">lacnaf</xsl:attribute>
1553                         </xsl:when>
1554                         <xsl:when
1555                                 test="ancestor-or-self::marc:datafield/@tag=151 and $controlField008-11='k' and $controlField008-14='b'">
1556                                 <xsl:attribute name="authority">cash</xsl:attribute>
1557                         </xsl:when>
1558                         <xsl:when
1559                                 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'">
1560                                 <xsl:attribute name="authority">lcsh</xsl:attribute>
1561                         </xsl:when>
1562                         <xsl:when
1563                                 test="ancestor-or-self::marc:datafield/@tag=700 and (@ind1='0' or @ind1='1') and @ind2='0'">
1564                                 <xsl:attribute name="authority">naf</xsl:attribute>
1565                         </xsl:when>
1566                         <xsl:when
1567                                 test="ancestor-or-self::marc:datafield/@tag=700 and (@ind1='0' or @ind1='1') and @ind2='5'">
1568                                 <xsl:attribute name="authority">lacnaf</xsl:attribute>
1569                         </xsl:when>
1570                         <xsl:when test="ancestor-or-self::marc:datafield/@tag=700 and @ind1='3' and @ind2='0'">
1571                                 <xsl:attribute name="authority">lcsh</xsl:attribute>
1572                         </xsl:when>
1573                         <xsl:when test="ancestor-or-self::marc:datafield/@tag=700 and @ind1='3' and @ind2='5'">
1574                                 <xsl:attribute name="authority">cash</xsl:attribute>
1575                         </xsl:when>
1576                         <xsl:when
1577                                 test="(700 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 755 ) and @ind2='1'">
1578                                 <xsl:attribute name="authority">lcshcl</xsl:attribute>
1579                         </xsl:when>
1580                         <xsl:when
1581                                 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'">
1582                                 <xsl:attribute name="authority">nlmnaf</xsl:attribute>
1583                         </xsl:when>
1584                         <xsl:when
1585                                 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'">
1586                                 <xsl:attribute name="authority">nalnaf</xsl:attribute>
1587                         </xsl:when>
1588                         <xsl:when
1589                                 test="(700 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 755 ) and @ind2='6'">
1590                                 <xsl:attribute name="authority">rvm</xsl:attribute>
1591                         </xsl:when>
1592                         <xsl:when
1593                                 test="(700 &lt;= ancestor-or-self::marc:datafield/@tag and ancestor-or-self::marc:datafield/@tag &lt;= 755 ) and @ind2='7'">
1594                                 <xsl:attribute name="authority">
1595                                         <xsl:value-of select="marc:subfield[@code='2']"/>
1596                                 </xsl:attribute>
1597                         </xsl:when>
1598                         <xsl:when
1599                                 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'">
1600                                 <xsl:attribute name="authority">lacnaf</xsl:attribute>
1601                         </xsl:when>
1602                         <xsl:when
1603                                 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'">
1604                                 <xsl:attribute name="authority">naf</xsl:attribute>
1605                         </xsl:when>
1606                         <xsl:when
1607                                 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'">
1608                                 <xsl:attribute name="authority">lcsh</xsl:attribute>
1609                         </xsl:when>
1610                         <xsl:when
1611                                 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'">
1612                                 <xsl:attribute name="authority">mesh</xsl:attribute>
1613                         </xsl:when>
1614                         <xsl:when
1615                                 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'">
1616                                 <xsl:attribute name="authority">nal</xsl:attribute>
1617                         </xsl:when>
1618                         <xsl:when
1619                                 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'">
1620                                 <xsl:attribute name="authority">cash</xsl:attribute>
1621                         </xsl:when>
1622                 </xsl:choose>
1623         </xsl:template>
1624         <xsl:template match="*"/>
1625 </xsl:stylesheet>$XSLT$
1626 WHERE name = 'mads21';;