Changes to better support possible outputs of the Connector Framework.
[pazpar2-moved-to-github.git] / etc / cf.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3     This stylesheet expects Connector Frameworks records
4 -->
5 <xsl:stylesheet
6     version="1.0"
7     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
8     xmlns:pz="http://www.indexdata.com/pazpar2/1.0"
9     xmlns:dc="http://purl.org/dc/elements/1.1/"
10     xmlns:siebel="http://loc.gov/siebel/elements/1.0/" >
11
12  <xsl:output indent="yes"
13         method="xml"
14         version="1.0"
15         encoding="UTF-8"/>
16
17   <xsl:param name="medium" />
18
19   <!--
20     According to cf/builder/templates/parseTask.cff, connectors can
21     also generate a "medium" field, but that is ignored in this
22     stylesheet, the rule below instead using an XSLT parameter.
23     Should the data element be used in preference when it is included?
24   -->
25
26   <xsl:template match="/record">
27     <pz:record>
28       <pz:metadata type="medium">
29          <xsl:value-of select="$medium" />
30       </pz:metadata>
31       <xsl:apply-templates/>
32     </pz:record>
33   </xsl:template>
34
35   <!--
36       The elements mapped in the following clauses should be kept more
37       or less in sync with those named in builder/templates/search.cft
38       in the "cf" git module.
39   -->
40
41   <xsl:template match="date">
42     <pz:metadata type="publication-date">
43       <xsl:value-of select="."/>
44     </pz:metadata>
45     <pz:metadata type="date">
46       <xsl:value-of select="."/>
47     </pz:metadata>
48   </xsl:template>
49
50   <xsl:template match="url">
51     <pz:metadata type="electronic-url">
52       <xsl:value-of select="."/>
53     </pz:metadata>
54   </xsl:template>
55
56   <xsl:template match="title">
57     <pz:metadata type="title">
58       <xsl:value-of select="."/>
59     </pz:metadata>
60     <pz:metadata type="title-complete">
61       <xsl:value-of select="." />
62     </pz:metadata>
63   </xsl:template>
64
65   <xsl:template match="author">
66     <pz:metadata type="author">
67       <xsl:value-of select="."/>
68     </pz:metadata>
69   </xsl:template>
70
71   <xsl:template match="description">
72     <pz:metadata type="description">
73       <xsl:value-of select="."/>
74     </pz:metadata>
75   </xsl:template>
76   
77   <xsl:template match="publisher">
78     <pz:metadata type="publisher">
79       <xsl:value-of select="."/>
80     </pz:metadata>
81   </xsl:template>
82
83   <xsl:template match="subject">
84     <pz:metadata type="subject">
85       <xsl:value-of select="."/>
86     </pz:metadata>
87   </xsl:template>
88
89   <xsl:template match="isbn">
90     <pz:metadata type="isbn">
91       <xsl:value-of select="."/>
92     </pz:metadata>
93   </xsl:template>
94
95   <xsl:template match="issn">
96     <pz:metadata type="issn">
97       <xsl:value-of select="."/>
98     </pz:metadata>
99   </xsl:template>
100
101   <xsl:template match="journaltitle">
102     <pz:metadata type="journal-title">
103       <xsl:value-of select="."/>
104     </pz:metadata>
105   </xsl:template>
106
107   <xsl:template match="volume">
108     <pz:metadata type="volume">
109       <xsl:value-of select="."/>
110     </pz:metadata>
111   </xsl:template>
112
113   <xsl:template match="issue">
114     <pz:metadata type="issue">
115       <xsl:value-of select="."/>
116     </pz:metadata>
117   </xsl:template>
118
119   <xsl:template match="page">
120     <pz:metadata type="page">
121       <xsl:value-of select="."/>
122     </pz:metadata>
123   </xsl:template>
124
125   <xsl:template match="endpage">
126     <pz:metadata type="endpage">
127       <xsl:value-of select="."/>
128     </pz:metadata>
129   </xsl:template>
130
131   <!--
132     According to cf/builder/templates/parseTask.cff, connectors can
133     also generate a "holding" field, but it's not clear how that is
134     different from "item".  Perhaps this "item" rule should also
135     handle "holding" in the same way?
136   -->
137
138   <xsl:template match="item">
139     <pz:metadata type="locallocation">
140       <xsl:choose>
141         <xsl:when test="string-length(location)">
142           <xsl:value-of select="location"/>
143         </xsl:when>
144         <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
145       </xsl:choose>
146     </pz:metadata>
147     <pz:metadata type="callnumber">
148       <xsl:choose>
149         <xsl:when test="string-length(callno)">
150           <xsl:value-of select="callno"/>
151         </xsl:when>
152         <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
153       </xsl:choose>
154     </pz:metadata>
155     <pz:metadata type="available">
156       <xsl:choose>
157         <xsl:when test="string-length(available)">
158           <xsl:value-of select="available"/>
159         </xsl:when>
160         <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
161       </xsl:choose>
162     </pz:metadata>
163     <pz:metadata type="publicnote">
164       <xsl:choose>
165         <xsl:when test="string-length(publicnote)">
166           <xsl:value-of select="publicnote"/>
167         </xsl:when>
168         <xsl:otherwise>PAZPAR2_NULL_VALUE</xsl:otherwise>
169       </xsl:choose>
170     </pz:metadata>
171   </xsl:template>
172
173   <xsl:template match="due">
174     <pz:metadata type="due">
175       <xsl:value-of select="."/>
176     </pz:metadata>
177   </xsl:template>
178
179   <xsl:template match="location">
180     <pz:metadata type="locallocation">
181       <xsl:value-of select="."/>
182     </pz:metadata>
183   </xsl:template>
184
185   <xsl:template match="callno">
186     <pz:metadata type="callnumber">
187       <xsl:value-of select="."/>
188     </pz:metadata>
189   </xsl:template>
190
191   <xsl:template match="thumburl">
192     <pz:metadata type="thumburl">
193       <xsl:value-of select="."/>
194     </pz:metadata>
195   </xsl:template>
196
197   <xsl:template match="score">
198     <pz:metadata type="score">
199       <xsl:value-of select="."/>
200     </pz:metadata>
201   </xsl:template>
202
203   <xsl:template match="id">
204     <pz:metadata type="id">
205       <xsl:value-of select="."/>
206     </pz:metadata>
207   </xsl:template>
208
209   <xsl:template match="available">
210     <pz:metadata type="available">
211       <xsl:value-of select="."/>
212     </pz:metadata>
213   </xsl:template>
214
215   <xsl:template match="citation">
216     <pz:metadata type="citation">
217       <xsl:value-of select="."/>
218       </pz:metadata>
219   </xsl:template>
220
221   <xsl:template match="relevance">
222     <pz:metadata type="relevance">
223       <xsl:value-of select="."/>
224     </pz:metadata>
225   </xsl:template>
226
227   <xsl:template match="booktitle">
228     <pz:metadata type="booktitle">
229       <xsl:value-of select="."/>
230     </pz:metadata>
231   </xsl:template>
232
233   <xsl:template match="copyright">
234     <pz:metadata type="copyright">
235       <xsl:value-of select="."/>
236     </pz:metadata>
237   </xsl:template>
238
239   <xsl:template match="copyrightabstract">
240     <pz:metadata type="copyrightabstract">
241       <xsl:value-of select="."/>
242     </pz:metadata>
243   </xsl:template>
244
245   <xsl:template match="pubtype">
246     <pz:metadata type="pubtype">
247       <xsl:value-of select="."/>
248     </pz:metadata>
249   </xsl:template>
250
251   <xsl:template match="doctype">
252     <pz:metadata type="doctype">
253       <xsl:value-of select="."/>
254     </pz:metadata>
255   </xsl:template>
256
257   <xsl:template match="extent">
258     <pz:metadata type="extent">
259       <xsl:value-of select="."/>
260     </pz:metadata>
261   </xsl:template>
262
263   <xsl:template match="format">
264     <pz:metadata type="format">
265       <xsl:value-of select="."/>
266     </pz:metadata>
267   </xsl:template>
268
269   <xsl:template match="languageitem">
270     <pz:metadata type="languageitem">
271       <xsl:value-of select="."/>
272     </pz:metadata>
273   </xsl:template>
274
275   <xsl:template match="languageabstract">
276     <pz:metadata type="languageabstract">
277       <xsl:value-of select="."/>
278     </pz:metadata>
279   </xsl:template>
280
281   <xsl:template match="permalink">
282     <pz:metadata type="permalink">
283       <xsl:value-of select="."/>
284     </pz:metadata>
285   </xsl:template>
286
287   <xsl:template match="text()"/>
288
289 </xsl:stylesheet>