more experimental work on grouping with pazpar2
[koha.git] / etc / pazpar2 / marc21-work-groups.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- $Id: marc21.xsl,v 1.22 2007-10-04 12:01:15 adam Exp $ -->
3 <xsl:stylesheet
4     version="1.0"
5     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
6     xmlns:pz="http://www.indexdata.com/pazpar2/1.0"
7     xmlns:marc="http://www.loc.gov/MARC21/slim">
8
9   
10   <xsl:output indent="yes" method="xml" version="1.0" encoding="UTF-8"/>
11
12 <!-- Extract metadata from MARC21/USMARC 
13       http://www.loc.gov/marc/bibliographic/ecbdhome.html
14 -->  
15   <xsl:include href="MARC21slimUtils.xsl" />
16   <xsl:include href="pz2-ourl-marc21.xsl" />
17   
18   <xsl:template match="/marc:record">
19     <xsl:variable name="title_medium" select="marc:datafield[@tag='245']/marc:subfield[@code='h']"/>
20     <xsl:variable name="journal_title" select="marc:datafield[@tag='773']/marc:subfield[@code='t']"/>
21     <xsl:variable name="electronic_location_url" select="marc:datafield[@tag='856']/marc:subfield[@code='u']"/>
22     <xsl:variable name="medium">
23       <xsl:choose>
24         <xsl:when test="$title_medium">
25           <xsl:value-of select="substring-after(substring-before($title_medium,']'),'[')"/>
26         </xsl:when>
27         <xsl:when test="$electronic_location_url">
28           <xsl:text>electronic resource</xsl:text>
29         </xsl:when>
30         <xsl:when test="$journal_title">
31           <xsl:text>article</xsl:text>
32         </xsl:when>
33         <xsl:otherwise>
34           <xsl:text>book</xsl:text>
35         </xsl:otherwise>
36       </xsl:choose>
37     </xsl:variable>
38
39     <xsl:variable name="uniform_title_key">
40         <xsl:choose>
41             <xsl:when test="marc:datafield[@tag='130']">
42                 <xsl:for-each select="marc:datafield[@tag='130']">
43                     <xsl:call-template name="subfieldSelect">
44                         <xsl:with-param name="codes">adfgkmnoprs</xsl:with-param>
45                     </xsl:call-template>
46                 </xsl:for-each>
47             </xsl:when>
48             <xsl:when test="marc:datafield[@tag='240']">
49                 <xsl:for-each select="marc:datafield[@tag='240']">
50                     <xsl:call-template name="subfieldSelect">
51                         <xsl:with-param name="codes">adfgkmnoprs</xsl:with-param>
52                     </xsl:call-template>
53                 </xsl:for-each>
54             </xsl:when>
55         </xsl:choose>
56     </xsl:variable>
57
58     <xsl:variable name="title_key">
59         <xsl:for-each select="marc:datafield[@tag='245']">
60             <xsl:call-template name="subfieldSelect">
61                 <xsl:with-param name="codes">abnp</xsl:with-param>
62             </xsl:call-template>
63         </xsl:for-each>
64     </xsl:variable>
65
66     <xsl:variable name="work_title">
67         <xsl:choose>
68           <xsl:when test="$uniform_title_key != ''">
69              <xsl:value-of select="$uniform_title_key" />
70           </xsl:when>
71           <xsl:otherwise>
72              <xsl:value-of select="$title_key" />
73           </xsl:otherwise>
74         </xsl:choose>
75     </xsl:variable>
76
77     <xsl:variable name="non_ut_main_entry_key">
78         <xsl:choose>
79             <xsl:when test="marc:datafield[@tag='100']">
80                 <xsl:for-each select="marc:datafield[@tag='100']">
81                     <xsl:call-template name="subfieldSelect">
82                         <xsl:with-param name="codes">abcd</xsl:with-param>
83                     </xsl:call-template>
84                 </xsl:for-each>
85             </xsl:when>
86         </xsl:choose>
87     </xsl:variable>
88
89     <xsl:variable name="mergekey">
90         <xsl:text>titlekey </xsl:text>
91         <xsl:value-of select="$work_title" />
92         <xsl:if test="$non_ut_main_entry_key != ''">
93             <xsl:text> namemainentry </xsl:text>
94             <xsl:value-of select="$non_ut_main_entry_key" />
95         </xsl:if>
96     </xsl:variable>
97
98     <pz:record>
99       <xsl:attribute name="mergekey">
100         <xsl:value-of select="$mergekey"/>
101       </xsl:attribute>
102
103       <xsl:for-each select="marc:datafield[@tag='999']">
104         <pz:metadata type="kohaid">
105           <xsl:value-of select="marc:subfield[@code='c']"/>
106         </pz:metadata>
107       </xsl:for-each>
108
109 <!--
110       <xsl:for-each select="marc:datafield[@tag='020']">
111         <pz:metadata type="isbn">
112           <xsl:value-of select="marc:subfield[@code='a']"/>
113         </pz:metadata>
114       </xsl:for-each>
115 -->
116
117       <xsl:for-each select="marc:datafield[@tag='245']">
118         <pz:metadata type="work-title">
119           <xsl:value-of select="$work_title" />
120         </pz:metadata>
121       </xsl:for-each>
122
123 <!--
124       <xsl:for-each select="marc:datafield[@tag='250']">
125         <pz:metadata type="edition">
126             <xsl:value-of select="marc:subfield[@code='a']"/>
127         </pz:metadata>
128       </xsl:for-each>
129
130       <xsl:for-each select="marc:datafield[@tag='260']">
131         <pz:metadata type="publication-place">
132           <xsl:value-of select="marc:subfield[@code='a']"/>
133         </pz:metadata>
134         <pz:metadata type="publication-name">
135           <xsl:value-of select="marc:subfield[@code='b']"/>
136         </pz:metadata>
137         <pz:metadata type="publication-date">
138           <xsl:value-of select="marc:subfield[@code='c']"/>
139         </pz:metadata>
140       </xsl:for-each>
141 -->
142
143 <!--
144       <xsl:for-each select="marc:datafield[@tag='300']">
145         <pz:metadata type="physical-extent">
146           <xsl:value-of select="marc:subfield[@code='a']"/>
147         </pz:metadata>
148         <pz:metadata type="physical-format">
149           <xsl:value-of select="marc:subfield[@code='b']"/>
150         </pz:metadata>
151         <pz:metadata type="physical-dimensions">
152           <xsl:value-of select="marc:subfield[@code='c']"/>
153         </pz:metadata>
154         <pz:metadata type="physical-accomp">
155           <xsl:value-of select="marc:subfield[@code='e']"/>
156         </pz:metadata>
157         <pz:metadata type="physical-unittype">
158           <xsl:value-of select="marc:subfield[@code='f']"/>
159         </pz:metadata>
160         <pz:metadata type="physical-unitsize">
161           <xsl:value-of select="marc:subfield[@code='g']"/>
162         </pz:metadata>
163         <pz:metadata type="physical-specified">
164           <xsl:value-of select="marc:subfield[@code='3']"/>
165         </pz:metadata>
166       </xsl:for-each>
167 -->
168
169     </pz:record>
170
171   </xsl:template>
172
173 </xsl:stylesheet>