0e411aac09329bb056776300ea842fd5be3c3984
[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="text()"/>
132
133 </xsl:stylesheet>