Construct md-pages-number form page/endpage PAZ-998
[pazpar2-moved-to-github.git] / etc / xsl / 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     <xsl:variable name="startpage" select="/record/page" />
20     <xsl:variable name="endpage" select="/record/endpage" />
21
22   <!-- Use medium parameter if given. Default to medium from connector -->
23   <xsl:template match="/record">
24     <pz:record>
25       <pz:metadata type="medium">
26         <xsl:choose>
27           <xsl:when test="string-length($medium)">
28             <xsl:value-of select="$medium" />
29           </xsl:when>
30           <xsl:otherwise>
31             <xsl:if test="medium">
32              <xsl:value-of select="medium" />
33             </xsl:if>
34           </xsl:otherwise>
35         </xsl:choose>
36       </pz:metadata>
37
38       <!-- calculate md-pages-number for startpage/endpage -->
39       <xsl:if test="string-length($startpage)">
40         <pz:metadata type="pages-number">
41           <xsl:value-of select="$startpage" />
42           <xsl:if test="string-length($endpage)">
43             <xsl:text>-</xsl:text>
44             <xsl:value-of select="$endpage" />
45           </xsl:if>
46         </pz:metadata>
47       </xsl:if>
48
49       <xsl:apply-templates/>
50
51     </pz:record>
52   </xsl:template>
53
54   <!--
55       The elements mapped in the following clauses should be kept more
56       or less in sync with those named in builder/templates/search.cft
57       in the "cf" git module.
58   -->
59
60   <xsl:template match="date">
61     <pz:metadata type="publication-date">
62       <xsl:value-of select="."/>
63     </pz:metadata>
64     <pz:metadata type="date">
65       <xsl:value-of select="."/>
66     </pz:metadata>
67   </xsl:template>
68
69   <xsl:template match="url">
70     <pz:metadata type="electronic-url">
71       <xsl:value-of select="."/>
72     </pz:metadata>
73   </xsl:template>
74
75   <xsl:template match="title">
76     <pz:metadata type="title">
77       <xsl:value-of select="."/>
78     </pz:metadata>
79     <pz:metadata type="title-complete">
80       <xsl:value-of select="." />
81     </pz:metadata>
82   </xsl:template>
83
84   <xsl:template match="journaltitle">
85     <pz:metadata type="journal-title">
86       <xsl:value-of select="."/>
87     </pz:metadata>
88   </xsl:template>
89
90   <!--
91     According to cf/builder/templates/parseTask.cff, connectors can
92     also generate a "holding" field, but it's not clear how that is
93     different from "item".  Perhaps this "item" rule should also
94     handle "holding" in the same way?
95   -->
96
97   <xsl:template match="item">
98     <pz:metadata type="due" empty="PAZPAR2_NULL_VALUE">
99       <xsl:value-of select="due"/>
100     </pz:metadata>
101     <pz:metadata type="locallocation" empty="PAZPAR2_NULL_VALUE">
102       <xsl:value-of select="location"/>
103     </pz:metadata>
104     <pz:metadata type="callnumber" empty="PAZPAR2_NULL_VALUE">
105       <xsl:value-of select="callno"/>
106     </pz:metadata>
107     <pz:metadata type="available" empty="PAZPAR_NULL_VALUE">
108       <xsl:value-of select="available"/>
109     </pz:metadata>
110     <pz:metadata type="publicnote" empty="PAZPAR2_NULL_VALUE">
111       <xsl:value-of select="publicnote"/>
112     </pz:metadata>
113   </xsl:template>
114
115   <xsl:template match="location">
116     <pz:metadata type="locallocation">
117       <xsl:value-of select="."/>
118     </pz:metadata>
119   </xsl:template>
120
121   <xsl:template match="callno">
122     <pz:metadata type="callnumber">
123       <xsl:value-of select="."/>
124     </pz:metadata>
125   </xsl:template>
126
127   <!-- no-op template to avoid printing medium out -->
128   <xsl:template match="medium" />
129
130   <xsl:template match="volume">
131     <pz:metadata type="volume-number">
132       <xsl:value-of select="."/>
133     </pz:metadata>
134   </xsl:template>
135
136   <xsl:template match="issue">
137     <pz:metadata type="issue-number">
138       <xsl:value-of select="."/>
139     </pz:metadata>
140   </xsl:template>
141
142   <xsl:template match="*" >
143     <pz:metadata type="{local-name()}">
144       <xsl:value-of select="."/>
145     </pz:metadata>
146   </xsl:template>
147
148   <xsl:template match="text()"/>
149
150 </xsl:stylesheet>