More still!!!
[pazpar2-moved-to-github.git] / etc / marc22.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet
3     version="1.0"
4     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5     xmlns:pz="http://www.indexdata.com/pazpar2/1.0"
6     xmlns:marc="http://www.loc.gov/MARC21/slim">
7   
8   <xsl:output indent="yes" method="xml" version="1.0" encoding="UTF-8"/>
9
10 <!-- Extract metadata from MARC21/USMARC 
11       http://www.loc.gov/marc/bibliographic/ecbdhome.html
12 -->  
13   <xsl:template name="record-hook"/>
14
15   <xsl:template match="/">
16     <xsl:apply-templates/>
17   </xsl:template>
18
19   <xsl:template match="marc:record">
20     <xsl:variable name="title_medium" select="marc:datafield[@tag='245']/marc:subfield[@code='h']"/>
21     <xsl:variable name="journal_title" select="marc:datafield[@tag='773']/marc:subfield[@code='t']"/>
22     <xsl:variable name="electronic_location_url" select="marc:datafield[@tag='856']/marc:subfield[@code='u']"/>
23     <xsl:variable name="fulltext_a" select="marc:datafield[@tag='900']/marc:subfield[@code='a']"/>
24     <xsl:variable name="fulltext_b" select="marc:datafield[@tag='900']/marc:subfield[@code='b']"/>
25     <xsl:variable name="medium">
26       <xsl:choose>
27         <xsl:when test="$title_medium">
28           <xsl:value-of select="substring-after(substring-before($title_medium,']'),'[')"/>
29         </xsl:when>
30         <xsl:when test="$fulltext_a">
31           <xsl:text>electronic resource</xsl:text>
32         </xsl:when>
33         <xsl:when test="$fulltext_b">
34           <xsl:text>electronic resource</xsl:text>
35         </xsl:when>
36         <xsl:when test="$journal_title">
37           <xsl:text>article</xsl:text>
38         </xsl:when>
39         <xsl:otherwise>
40           <xsl:text>book</xsl:text>
41         </xsl:otherwise>
42       </xsl:choose>
43     </xsl:variable>
44
45     <pz:record>
46       <xsl:attribute name="mergekey">
47         <xsl:text>title </xsl:text>
48         <xsl:value-of select="marc:datafield[@tag='245']/marc:subfield[@code='a']"/>
49         <xsl:text> author </xsl:text>
50         <xsl:value-of select="marc:datafield[@tag='100']/marc:subfield[@code='a']"/>
51         <xsl:text> medium </xsl:text>
52         <xsl:value-of select="$medium"/>
53       </xsl:attribute>
54
55       <xsl:apply-templates/>
56
57       <!-- other stylesheets importing this might want to define this -->
58       <xsl:call-template name="record-hook"/>
59
60     </pz:record>    
61   </xsl:template>
62
63   <xsl:template match="marc:controlfield[@tag='001']">
64     <pz:metadata type="id">
65       <xsl:value-of select="."/>
66     </pz:metadata>
67   </xsl:template>
68
69   <xsl:template match="marc:datafield[@tag='010']">
70     <pz:metadata type="lccn">
71       <xsl:value-of select="marc:subfield[@code='a']"/>
72     </pz:metadata>
73   </xsl:template>
74
75   <xsl:template match="marc:datafield[@tag='020']">
76     <pz:metadata type="isbn">
77       <xsl:value-of select="marc:subfield[@code='a']"/>
78     </pz:metadata>
79   </xsl:template>
80   
81   <!-- does ANYONE need this?
82   <xsl:template match="marc:datafield[@tag='027']">
83     <pz:metadata type="tech-rep-nr">
84       <xsl:value-of select="marc:subfield[@code='a']"/>
85     </pz:metadata>
86   </xsl:template>
87   -->
88   
89   <xsl:template match="marc:datafield[@tag='035']">
90     <pz:metadata type="system-control-nr">
91       <xsl:value-of select="marc:subfield[@code='a']"/>
92     </pz:metadata>
93   </xsl:template>
94   
95   <xsl:template match="marc:datafield[@tag='100' or @tag='700']">
96     <pz:metadata type="author">
97       <xsl:value-of select="marc:subfield[@code='a']"/>
98     </pz:metadata>
99     <pz:metadata type="author-title">
100       <xsl:value-of select="marc:subfield[@code='c']"/>
101     </pz:metadata>
102     <pz:metadata type="author-date">
103       <xsl:value-of select="marc:subfield[@code='d']"/>
104     </pz:metadata>
105   </xsl:template>
106
107   <xsl:template match="marc:datafield[@tag='110']">
108     <pz:metadata type="corporate-name">
109       <xsl:value-of select="marc:subfield[@code='a']"/>
110     </pz:metadata>
111     <pz:metadata type="corporate-location">
112       <xsl:value-of select="marc:subfield[@code='c']"/>
113     </pz:metadata>
114     <pz:metadata type="corporate-date">
115       <xsl:value-of select="marc:subfield[@code='d']"/>
116     </pz:metadata>
117   </xsl:template>
118
119   <xsl:template match="marc:datafield[@tag='111']">
120     <pz:metadata type="meeting-name">
121       <xsl:value-of select="marc:subfield[@code='a']"/>
122     </pz:metadata>
123     <pz:metadata type="meeting-location">
124       <xsl:value-of select="marc:subfield[@code='c']"/>
125     </pz:metadata>
126     <pz:metadata type="meeting-date">
127       <xsl:value-of select="marc:subfield[@code='d']"/>
128     </pz:metadata>
129   </xsl:template>
130
131   <xsl:template match="marc:datafield[@tag='245']">
132     <pz:metadata type="title">
133       <xsl:value-of select="marc:subfield[@code='a']"/>
134     </pz:metadata>
135     <pz:metadata type="title-remainder">
136       <xsl:value-of select="marc:subfield[@code='b']"/>
137     </pz:metadata>
138     <pz:metadata type="title-responsibility">
139       <xsl:value-of select="marc:subfield[@code='c']"/>
140     </pz:metadata>
141     <pz:metadata type="title-dates">
142       <xsl:value-of select="marc:subfield[@code='f']"/>
143     </pz:metadata>
144     <pz:metadata type="title-medium">
145       <xsl:value-of select="marc:subfield[@code='h']"/>
146     </pz:metadata>
147     <pz:metadata type="title-number-section">
148       <xsl:value-of select="marc:subfield[@code='n']"/>
149     </pz:metadata>
150   </xsl:template>
151
152   <xsl:template match="marc:datafield[@tag='250']">
153     <pz:metadata type="edition">
154         <xsl:value-of select="marc:subfield[@code='a']"/>
155     </pz:metadata>
156   </xsl:template>
157
158   <xsl:template match="marc:datafield[@tag='260']">
159     <pz:metadata type="publication-place">
160       <xsl:value-of select="marc:subfield[@code='a']"/>
161     </pz:metadata>
162     <pz:metadata type="publication-name">
163       <xsl:value-of select="marc:subfield[@code='b']"/>
164     </pz:metadata>
165     <pz:metadata type="publication-date">
166       <xsl:value-of select="marc:subfield[@code='c']"/>
167     </pz:metadata>
168     <pz:metadata type="date">
169       <xsl:value-of select="marc:subfield[@code='c']"/>
170     </pz:metadata>
171   </xsl:template>
172
173   <xsl:template match="marc:datafield[@tag='300']">
174     <pz:metadata type="physical-extent">
175       <xsl:value-of select="marc:subfield[@code='a']"/>
176     </pz:metadata>
177     <pz:metadata type="physical-format">
178       <xsl:value-of select="marc:subfield[@code='b']"/>
179     </pz:metadata>
180     <pz:metadata type="physical-dimensions">
181       <xsl:value-of select="marc:subfield[@code='c']"/>
182     </pz:metadata>
183     <pz:metadata type="physical-accomp">
184       <xsl:value-of select="marc:subfield[@code='e']"/>
185     </pz:metadata>
186     <pz:metadata type="physical-unittype">
187       <xsl:value-of select="marc:subfield[@code='f']"/>
188     </pz:metadata>
189     <pz:metadata type="physical-unitsize">
190       <xsl:value-of select="marc:subfield[@code='g']"/>
191     </pz:metadata>
192     <pz:metadata type="physical-specified">
193       <xsl:value-of select="marc:subfield[@code='3']"/>
194     </pz:metadata>
195   </xsl:template>
196
197   <xsl:template match="text()"/>
198
199 </xsl:stylesheet>