6f151f9f1905c244c1cc5fc428c169c4b9da20ea
[pazpar2-moved-to-github.git] / etc / dads-pz2.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0"
3   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
4   xmlns:pz="http://www.indexdata.com/pazpar2/1.0"
5   xmlns:zs="http://www.loc.gov/zing/srw/"
6   xmlns:tmarc="http://www.indexdata.com/turbomarc">
7
8   <xsl:output indent="yes" method="xml" version="1.0"
9     encoding="UTF-8" />
10   <xsl:param name="medium"/>
11
12   <!-- Extract metadata from MARC21/USMARC from streamlined marcxml format 
13     http://www.loc.gov/marc/bibliographic/ecbdhome.html -->
14   <xsl:template name="record-hook" />
15
16
17   <xsl:template match="/">
18       <xsl:apply-templates />
19   </xsl:template>
20
21   <xsl:template match="zs:searchRetrieveResponse">
22       <xsl:apply-templates />
23   </xsl:template>
24
25   <xsl:template match="zs:records">
26     <collection>
27       <xsl:apply-templates />
28     </collection>
29   </xsl:template>
30
31   <xsl:template match="zs:record">
32       <xsl:apply-templates />
33   </xsl:template>  
34
35   <xsl:template match="zs:recordData">
36       <xsl:apply-templates />
37   </xsl:template>
38
39   <xsl:template match="doc">
40     <collection>
41       <xsl:apply-templates />
42     </collection>
43   </xsl:template>
44
45   <xsl:template match="art">
46     <xsl:variable name="journal_title" select="journal/title" />
47     <xsl:variable name="journal_issn" select="journal/issn" />
48     <xsl:variable name="date" select="journal/year" />
49     <xsl:variable name="description" select="abstract/abstract" />
50
51     <xsl:variable name="has_fulltext" select="article/fulltext"/>
52     <xsl:variable name="has_title" select="article/title"/>
53
54     <xsl:variable name="vmedium">
55       <xsl:choose>
56         <xsl:when  test="$has_title and $has_fulltext">
57           <xsl:text>e-article</xsl:text>
58         </xsl:when>
59         <xsl:when  test="$has_title and not($has_fulltext)">
60           <xsl:text>article</xsl:text>
61         </xsl:when>
62         <xsl:otherwise>
63           <xsl:text>other</xsl:text>
64         </xsl:otherwise>
65       </xsl:choose>
66     </xsl:variable>
67     
68     <pz:record>
69
70       <xsl:for-each select="localInfo/systemno"> 
71         <pz:metadata type="id">
72           <xsl:value-of select="."/>
73         </pz:metadata>
74       </xsl:for-each>
75
76       <!-- IDs for url recipe -->
77       <xsl:for-each select="recordID/DOI"> 
78         <pz:metadata type="doi"><xsl:value-of select="."/></pz:metadata>
79       </xsl:for-each>
80       <xsl:for-each select="recordID/artId"> 
81         <pz:metadata type="artid"><xsl:value-of select="."/></pz:metadata>
82       </xsl:for-each>
83       <xsl:for-each select="recordID/accessNr"> 
84         <pz:metadata type="accessnr"><xsl:value-of select="."/></pz:metadata>
85       </xsl:for-each>
86
87       <xsl:for-each select="author/name">
88         <pz:metadata type="author">
89           <xsl:value-of select="." />
90         </pz:metadata>
91       </xsl:for-each>
92       
93       <xsl:for-each select="article/title">
94         <pz:metadata type="title">
95           <xsl:value-of select="." />
96         </pz:metadata>
97       </xsl:for-each>
98
99       <xsl:for-each select="journal/issn">
100         <pz:metadata type="issn">
101           <xsl:value-of select="." />
102         </pz:metadata>
103       </xsl:for-each>
104
105       <xsl:for-each select="journal/title">
106         <pz:metadata type="journal-title">
107           <xsl:value-of select="." />
108         </pz:metadata>
109       </xsl:for-each>
110
111       <xsl:for-each select="journal/vol">
112         <pz:metadata type="journal-number">
113           <xsl:value-of select="." />
114         </pz:metadata>
115       </xsl:for-each>
116
117       <xsl:for-each select="journal/issue">
118         <pz:metadata type="issue-number">
119           <xsl:value-of select="." />
120         </pz:metadata>
121       </xsl:for-each>
122
123       <xsl:for-each select="journal"> 
124         <pz:metadata type="journal-subpart">
125           <xsl:text>Vol. </xsl:text><xsl:value-of select="vol" /><xsl:text>,</xsl:text>
126           <xsl:if test="issue">
127             <xsl:text> no. </xsl:text><xsl:value-of select="issue" />
128           </xsl:if>
129           <xsl:text> (</xsl:text>
130           <xsl:choose>
131             <xsl:when test="month='01'">
132               <xsl:text>Jan. </xsl:text>
133             </xsl:when>
134             <xsl:when test="month='02'">
135               <xsl:text>Feb. </xsl:text>
136             </xsl:when>
137             <xsl:when test="month='03'">
138               <xsl:text>Mar. </xsl:text>
139             </xsl:when>
140             <xsl:when test="month='04'">
141               <xsl:text>Apr. </xsl:text>
142             </xsl:when>
143             <xsl:when test="month='05'">
144               <xsl:text>May </xsl:text>
145             </xsl:when>
146             <xsl:when test="month='06'">
147               <xsl:text>June </xsl:text>
148             </xsl:when>
149             <xsl:when test="month='07'">
150               <xsl:text>July </xsl:text>
151             </xsl:when>
152             <xsl:when test="month='08'">
153               <xsl:text>Aug. </xsl:text>
154             </xsl:when>
155             <xsl:when test="month='09'">
156               <xsl:text>Sept. </xsl:text>
157             </xsl:when>
158             <xsl:when test="month='10'">
159               <xsl:text>Oct. </xsl:text>
160             </xsl:when>
161             <xsl:when test="month='11'">
162               <xsl:text>Nov. </xsl:text>
163             </xsl:when>
164             <xsl:when test="month='12'">
165               <xsl:text>Dec. </xsl:text>
166             </xsl:when>
167             <xsl:otherwise>
168               <xsl:value-of select="month"/><xsl:text> </xsl:text>
169             </xsl:otherwise>
170           </xsl:choose>
171           <xsl:value-of select="year" /><xsl:text>)</xsl:text>
172           <xsl:if test="page"> 
173             <xsl:text>, p. </xsl:text><xsl:value-of select="page" />
174           </xsl:if>
175         </pz:metadata>
176       </xsl:for-each>      
177
178       <pz:metadata type="description">
179         <xsl:value-of select="$description" />
180       </pz:metadata>
181       
182       <xsl:for-each select="ctrlT/term">
183         <pz:metadata type="subject">
184           <xsl:value-of select="." />
185         </pz:metadata>
186       </xsl:for-each>
187
188       <xsl:for-each select="article/fulltext">
189         <pz:metadata type="fulltext">
190           <xsl:value-of select="." />
191         </pz:metadata>
192       </xsl:for-each>
193
194       <pz:metadata type="medium">
195         <xsl:value-of select="$vmedium" />
196 <!--
197         <xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
198           <xsl:text> (electronic)</xsl:text>
199         </xsl:if>
200 -->
201       </pz:metadata>
202
203
204       <!-- passthrough id data -->
205       <xsl:for-each select="pz:metadata">
206         <xsl:copy-of select="." />
207       </xsl:for-each>
208
209       <!-- other stylesheets importing this might want to define this -->
210       <xsl:call-template name="record-hook" />
211         
212     </pz:record>
213
214   </xsl:template>
215
216   <xsl:template match="text()" />
217
218 </xsl:stylesheet>