Updated to new identifiers (again). Make SRW DC stylesheet.
[yazpp-moved-to-github.git] / etc / MARC21slim2SRWDC.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" 
3         xmlns:marc="http://www.loc.gov/MARC21/slim" 
4         xmlns:srw_dc="info:srw/schema/1/dc-schema" 
5         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
6         xmlns="http://purl.org/dc/elements/1.1/" 
7         xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
8         exclude-result-prefixes="dc">
9         <xsl:import href="MARC21slimUtils.xsl"/>
10         <xsl:output method="xml" indent="yes"/>
11 <!-- modification log 
12         NT 01/04:  added collection level element
13         and removed attributes
14
15 -->     
16         <xsl:template match="/">
17                  <srw_dc:dc xsi:schemaLocation="http://www.loc.gov/z3950/agency/zing/srw/dc-schema.xsd">
18                         <xsl:apply-templates select="marc:record"/>
19                  </srw_dc:dc>                                   
20         </xsl:template>
21
22         <xsl:template match="marc:record">
23                 <xsl:variable name="leader" select="marc:leader"/>
24                 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
25                 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
26                 <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>
27
28                         <xsl:for-each select="marc:datafield[@tag=245]">
29                                 <title>
30                                         <xsl:call-template name="subfieldSelect">
31                                                 <xsl:with-param name="codes">abfghk</xsl:with-param>
32                                         </xsl:call-template>
33                                 </title>
34                         </xsl:for-each>
35         
36                         <xsl:for-each select="marc:datafield[@tag=100]|marc:datafield[@tag=110]|marc:datafield[@tag=111]|marc:datafield[@tag=700]|marc:datafield[@tag=710]|marc:datafield[@tag=711]|marc:datafield[@tag=720]">
37                                 <creator>
38                                         <xsl:value-of select="normalize-space(.)"/>
39                                 </creator>
40                         </xsl:for-each>
41
42                         <type>          
43                                 <xsl:if test="$leader7='c'">
44                                         <!-- nt fix 1/04 -->
45                                         <!--<xsl:attribute name="collection">yes</xsl:attribute>-->
46                                         <xsl:text>collection</xsl:text>
47                                 </xsl:if>
48
49                                 <xsl:if test="$leader6='d' or $leader6='f' or $leader6='p' or $leader6='t'">
50                                         <!-- nt fix 1/04 -->
51                                         <!--<xsl:attribute name="manuscript">yes</xsl:attribute> -->
52                                         <xsl:text>manuscript</xsl:text>
53                                 </xsl:if>
54
55                                 <xsl:choose>
56                                         <xsl:when test="$leader6='a' or $leader6='t'">text</xsl:when>
57                                         <xsl:when test="$leader6='e' or $leader6='f'">cartographic</xsl:when>
58                                         <xsl:when test="$leader6='c' or $leader6='d'">notated music</xsl:when>
59                                         <xsl:when test="$leader6='i' or $leader6='j'">sound recording</xsl:when>
60                                         <xsl:when test="$leader6='k'">still image</xsl:when>
61                                         <xsl:when test="$leader6='g'">moving image</xsl:when>
62                                         <xsl:when test="$leader6='r'">three dimensional object</xsl:when>
63                                         <xsl:when test="$leader6='m'">software, multimedia</xsl:when>
64                                         <xsl:when test="$leader6='p'">mixed material</xsl:when>
65                                 </xsl:choose>
66                         </type>
67
68                         <xsl:for-each select="marc:datafield[@tag=655]">
69                                 <type>
70                                         <xsl:value-of select="normalize-space(.)"/>
71                                 </type>
72                         </xsl:for-each>
73
74                         <xsl:for-each select="marc:datafield[@tag=260]">
75                                 <publisher>
76                                         <xsl:call-template name="subfieldSelect">
77                                                 <xsl:with-param name="codes">ab</xsl:with-param>
78                                         </xsl:call-template>
79                                 </publisher>
80                         </xsl:for-each>
81
82                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='c']">
83                                 <date>
84                                         <xsl:value-of select="."/>
85                                 </date>                         
86                         </xsl:for-each>
87
88                         <language>
89                                 <xsl:value-of select="substring($controlField008,36,3)"/>
90                         </language>
91
92                         <xsl:for-each select="marc:datafield[@tag=856]/marc:subfield[@code='q']">
93                                 <format>
94                                         <xsl:value-of select="."/>
95                                 </format>
96                         </xsl:for-each>
97
98                         <xsl:for-each select="marc:datafield[@tag=520]">
99                                 <description>
100                                         <!-- nt fix 01/04 -->
101                                         <xsl:value-of select="normalize-space(marc:subfield[@code='a'])"/>
102                                 </description>
103                         </xsl:for-each>
104
105                         <xsl:for-each select="marc:datafield[@tag=521]">
106                                 <description>
107                                         <xsl:value-of select="marc:subfield[@code='a']"/>
108                                 </description>
109                         </xsl:for-each>
110
111                         <xsl:for-each select="marc:datafield[500&lt;@tag][@tag&lt;=599][not(@tag=506 or @tag=530 or @tag=540 or @tag=546)]">
112                                 <description>
113                                         <xsl:value-of select="marc:subfield[@code='a']"/>
114                                 </description>
115                         </xsl:for-each>
116
117                         <xsl:for-each select="marc:datafield[@tag=600]">
118                                 <subject>
119                                         <xsl:call-template name="subfieldSelect">
120                                                 <xsl:with-param name="codes">abcdq</xsl:with-param>
121                                         </xsl:call-template>
122                                 </subject>
123                         </xsl:for-each>
124
125                         <xsl:for-each select="marc:datafield[@tag=610]">
126                                 <subject>
127                                         <xsl:call-template name="subfieldSelect">
128                                                 <xsl:with-param name="codes">abcdq</xsl:with-param>
129                                         </xsl:call-template>
130                                 </subject>
131                         </xsl:for-each>
132
133                         <xsl:for-each select="marc:datafield[@tag=611]">
134                                 <subject>
135                                         <xsl:call-template name="subfieldSelect">
136                                                 <xsl:with-param name="codes">abcdq</xsl:with-param>
137                                         </xsl:call-template>
138                                 </subject>
139                         </xsl:for-each>
140                 
141                         <xsl:for-each select="marc:datafield[@tag=630]">
142                                 <subject>
143                                         <xsl:call-template name="subfieldSelect">
144                                                 <xsl:with-param name="codes">abcdq</xsl:with-param>
145                                         </xsl:call-template>
146                                 </subject>
147                         </xsl:for-each>
148
149                         <xsl:for-each select="marc:datafield[@tag=650]">
150                                 <subject>
151                                         <xsl:call-template name="subfieldSelect">
152                                                 <xsl:with-param name="codes">abcdq</xsl:with-param>
153                                         </xsl:call-template>
154                                 </subject>
155                         </xsl:for-each>
156
157                         <xsl:for-each select="marc:datafield[@tag=653]">
158                                 <subject>
159                                         <xsl:call-template name="subfieldSelect">
160                                                 <xsl:with-param name="codes">abcdq</xsl:with-param>
161                                         </xsl:call-template>
162                                 </subject>
163                         </xsl:for-each>
164
165                         <xsl:for-each select="marc:datafield[@tag=752]">
166                                 <coverage>
167                                         <xsl:call-template name="subfieldSelect">
168                                                 <xsl:with-param name="codes">abcd</xsl:with-param>
169                                         </xsl:call-template>
170                                 </coverage>
171                         </xsl:for-each>
172
173                         <xsl:for-each select="marc:datafield[@tag=530]">
174                         <!-- nt 01/04 attribute fix -->
175                                 <relation>
176                                         <!--<xsl:attribute name="type">original</xsl:attribute>-->
177                                         <xsl:call-template name="subfieldSelect">
178                                                 <xsl:with-param name="codes">abcdu</xsl:with-param>
179                                         </xsl:call-template>
180                                 </relation>     
181                         </xsl:for-each>
182
183                         <xsl:for-each select="marc:datafield[@tag=760]|marc:datafield[@tag=762]|marc:datafield[@tag=765]|marc:datafield[@tag=767]|marc:datafield[@tag=770]|marc:datafield[@tag=772]|marc:datafield[@tag=773]|marc:datafield[@tag=774]|marc:datafield[@tag=775]|marc:datafield[@tag=776]|marc:datafield[@tag=777]|marc:datafield[@tag=780]|marc:datafield[@tag=785]|marc:datafield[@tag=786]|marc:datafield[@tag=787]">
184                                 <relation>
185                                         <xsl:call-template name="subfieldSelect">
186                                                 <xsl:with-param name="codes">ot</xsl:with-param>
187                                         </xsl:call-template>
188                                 </relation>     
189                         </xsl:for-each>
190
191                         <xsl:for-each select="marc:datafield[@tag=856]">
192                                 <identifier>
193                                         <xsl:value-of select="marc:subfield[@code='u']"/>
194                                 </identifier>
195                         </xsl:for-each>
196
197                         <xsl:for-each select="marc:datafield[@tag=506]">
198                                 <rights>
199                                         <xsl:value-of select="marc:subfield[@code='a']"/>
200                                 </rights>
201                         </xsl:for-each>
202
203                         <xsl:for-each select="marc:datafield[@tag=540]">
204                                 <rights>
205                                         <xsl:value-of select="marc:subfield[@code='a']"/>
206                                 </rights>
207                         </xsl:for-each>         
208         </xsl:template>
209 </xsl:stylesheet>