09286ea902ee0a307b9d4dd1fe9ee27f0655c7cd
[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="month" select="journal/month" />
50     <xsl:variable name="description" select="abstract/abstract" />
51
52     <xsl:variable name="has_fulltext" select="article/fulltext"/>
53     <xsl:variable name="has_title" select="article/title"/>
54
55     <xsl:variable name="vmedium">
56       <xsl:choose>
57         <xsl:when  test="$has_title and $has_fulltext">
58           <xsl:text>e-article</xsl:text>
59         </xsl:when>
60         <xsl:when  test="$has_title and not($has_fulltext)">
61           <xsl:text>article</xsl:text>
62         </xsl:when>
63         <xsl:otherwise>
64           <xsl:text>other</xsl:text>
65         </xsl:otherwise>
66       </xsl:choose>
67     </xsl:variable>
68     
69     <pz:record>
70
71       <xsl:for-each select="localInfo/systemno"> 
72         <pz:metadata type="id">
73           <xsl:value-of select="."/>
74         </pz:metadata>
75       </xsl:for-each>
76
77       <!-- IDs for url recipe -->
78       <xsl:for-each select="recordID/DOI"> 
79         <pz:metadata type="doi"><xsl:value-of select="."/></pz:metadata>
80       </xsl:for-each>
81       <xsl:for-each select="recordID/artId"> 
82         <pz:metadata type="artid"><xsl:value-of select="."/></pz:metadata>
83       </xsl:for-each>
84       <xsl:for-each select="recordID/accessNr"> 
85         <pz:metadata type="accessnr"><xsl:value-of select="."/></pz:metadata>
86       </xsl:for-each>
87
88       <xsl:for-each select="author/name">
89         <pz:metadata type="author">
90           <xsl:value-of select="." />
91         </pz:metadata>
92       </xsl:for-each>
93       
94       <xsl:for-each select="article/title">
95         <pz:metadata type="title">
96           <xsl:value-of select="." />
97         </pz:metadata>
98       </xsl:for-each>
99
100       <xsl:for-each select="journal/issn">
101         <pz:metadata type="issn">
102           <xsl:value-of select="." />
103         </pz:metadata>
104       </xsl:for-each>
105
106       <xsl:for-each select="journal/title">
107         <pz:metadata type="journal-title">
108           <xsl:value-of select="." />
109         </pz:metadata>
110       </xsl:for-each>
111
112       <xsl:for-each select="journal/vol">
113         <pz:metadata type="journal-number">
114           <xsl:value-of select="." />
115         </pz:metadata>
116       </xsl:for-each>
117
118       <xsl:for-each select="journal/issue">
119         <pz:metadata type="issue-number">
120           <xsl:value-of select="." />
121         </pz:metadata>
122       </xsl:for-each>
123
124       <xsl:for-each select="journal"> 
125         <pz:metadata type="journal-subpart">
126           <xsl:if test="vol">
127             <xsl:text>Vol. </xsl:text><xsl:value-of select="vol" /><xsl:text>,</xsl:text>
128           </xsl:if>
129           <xsl:if test="issue">
130             <xsl:if test="vol">
131               <xsl:text> no. </xsl:text>
132             </xsl:if>
133             <xsl:if test="not(vol)">
134               <xsl:text>No. </xsl:text>
135             </xsl:if>
136             <xsl:value-of select="issue" />
137           </xsl:if>
138           <xsl:text> (</xsl:text>
139           <xsl:if test="month">
140             <xsl:choose>
141               <xsl:when test="$month='01'">
142                 <xsl:text>Jan. </xsl:text>
143               </xsl:when>
144               <xsl:when test="$month='02'">
145                 <xsl:text>Feb. </xsl:text>
146               </xsl:when>
147               <xsl:when test="$month='03'">
148                 <xsl:text>Mar. </xsl:text>
149               </xsl:when>
150               <xsl:when test="$month='04'">
151                 <xsl:text>Apr. </xsl:text>
152               </xsl:when>
153               <xsl:when test="$month='05'">
154                 <xsl:text>May </xsl:text>
155               </xsl:when>
156               <xsl:when test="$month='06'">
157                 <xsl:text>June </xsl:text>
158               </xsl:when>
159               <xsl:when test="$month='07'">
160                 <xsl:text>July </xsl:text>
161               </xsl:when>
162               <xsl:when test="$month='08'">
163                 <xsl:text>Aug. </xsl:text>
164               </xsl:when>
165               <xsl:when test="$month='09'">
166                 <xsl:text>Sept. </xsl:text>
167               </xsl:when>
168               <xsl:when test="$month='10'">
169                 <xsl:text>Oct. </xsl:text>
170               </xsl:when>
171               <xsl:when test="$month='11'">
172                 <xsl:text>Nov. </xsl:text>
173               </xsl:when>
174               <xsl:when test="$month='12'">
175                 <xsl:text>Dec. </xsl:text>
176               </xsl:when>
177               <xsl:otherwise>
178                 <xsl:value-of select="$month"/><xsl:text> </xsl:text>
179               </xsl:otherwise>
180             </xsl:choose>
181           </xsl:if>
182           <xsl:value-of select="year" /><xsl:text>)</xsl:text>
183           <xsl:if test="page"> 
184             <xsl:text>, p. </xsl:text><xsl:value-of select="page" />
185           </xsl:if>
186         </pz:metadata>
187       </xsl:for-each>      
188
189       <pz:metadata type="description">
190         <xsl:value-of select="$description" />
191       </pz:metadata>
192       
193       <xsl:for-each select="ctrlT/term">
194         <pz:metadata type="subject">
195           <xsl:value-of select="." />
196         </pz:metadata>
197       </xsl:for-each>
198
199       <xsl:for-each select="article/fulltext">
200         <pz:metadata type="fulltext">
201           <xsl:value-of select="." />
202         </pz:metadata>
203       </xsl:for-each>
204
205       <pz:metadata type="medium">
206         <xsl:value-of select="$vmedium" />
207 <!--
208         <xsl:if test="string-length($electronic) and $vmedium != 'electronic'">
209           <xsl:text> (electronic)</xsl:text>
210         </xsl:if>
211 -->
212       </pz:metadata>
213
214       <xsl:for-each select="recordID/DOI"> 
215         <pz:metadata type="url-doi"><xsl:text>http://dx.doi.org/</xsl:text><xsl:value-of select="."/></pz:metadata>
216       </xsl:for-each>
217
218       <!-- passthrough id data -->
219       <xsl:for-each select="pz:metadata">
220         <xsl:copy-of select="." />
221       </xsl:for-each>
222
223       <!-- other stylesheets importing this might want to define this -->
224       <xsl:call-template name="record-hook" />
225         
226     </pz:record>
227
228   </xsl:template>
229
230   <xsl:template match="text()" />
231
232 </xsl:stylesheet>