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