]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xsl/MARC21slim2ATOM.xsl
lp1739277 OrgSelect Class Callback Holdings Implementation
[Evergreen.git] / Open-ILS / xsl / MARC21slim2ATOM.xsl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="marc">
3         <xsl:import href="MARC21slimUtils.xsl"/>
4         <xsl:output method="xml" indent="yes"/>
5         
6         <!--Added ISBN and deleted attributes 6/04 jer-->
7         <!--Added BIBID to facilitate covert art lookup 2019-03-04 jrs-->
8         
9         <xsl:template match="/">
10                         <xsl:apply-templates/>
11         </xsl:template>
12
13         <xsl:template match="marc:record">
14                 <xsl:variable name="leader" select="marc:leader"/>
15                 <xsl:variable name="leader6" select="substring($leader,7,1)"/>
16                 <xsl:variable name="leader7" select="substring($leader,8,1)"/>
17                 <xsl:variable name="controlField008" select="marc:controlfield[@tag=008]"/>
18
19           <entry xmlns="http://www.w3.org/2005/Atom">
20
21                         <xsl:for-each select="marc:controlfield[@tag=001]">
22                                 <id>
23                                         <xsl:text>urn:tcn:</xsl:text>
24                                         <xsl:value-of select="."/>
25                                 </id>
26                         </xsl:for-each>
27
28                         <!-- Spec wants RFC 3339 format - fix it outside of XSL? -->
29                         <xsl:for-each select="marc:controlfield[@tag=005]">
30                                 <updated>
31                                         <xsl:value-of select="."/>
32                                 </updated>
33                         </xsl:for-each>
34
35
36                         <xsl:for-each select="marc:datafield[@tag=245]">
37                                 <title>
38                                         <xsl:call-template name="subfieldSelect">
39                                                 <xsl:with-param name="codes">abfghk</xsl:with-param>
40                                         </xsl:call-template>
41                                 </title>
42                         </xsl:for-each>
43
44         
45                         <xsl:for-each select="marc:datafield[@tag=100]">
46                                 <author>
47                                         <name>
48                                                 <xsl:value-of select="."/>
49                                         </name>
50                                 </author>
51                         </xsl:for-each>
52
53                         <xsl:for-each select="marc:datafield[@tag=110]|marc:datafield[@tag=111]|marc:datafield[@tag=700]|marc:datafield[@tag=710]|marc:datafield[@tag=711]|marc:datafield[@tag=720]">
54                                 <author>
55                                         <name>
56                                                 <xsl:value-of select="."/>
57                                         </name>
58                                 </author>
59                         </xsl:for-each>
60
61                         <xsl:for-each select="marc:datafield[@tag=655]">
62                                 <category>
63                                         <xsl:attribute name="term">
64                                                 <xsl:value-of select="./marc:subfield[@code='a' or @code='v']"/>
65                                         </xsl:attribute>
66                                 </category>
67                         </xsl:for-each>
68
69                         <xsl:for-each select="marc:datafield[@tag=260]">
70                                 <rights>
71                                         <xsl:text>&#169; </xsl:text>
72                                         <xsl:call-template name="subfieldSelect">
73                                                 <xsl:with-param name="codes">c</xsl:with-param>
74                                         </xsl:call-template>
75                                         <xsl:text>, </xsl:text>
76                                         <xsl:call-template name="subfieldSelect">
77                                                 <xsl:with-param name="codes">b</xsl:with-param>
78                                         </xsl:call-template>
79                                 </rights>
80                         </xsl:for-each>
81
82                         <!-- Spec wants RFC 3339 format - fix it outside of XSL? -->
83                         <xsl:for-each select="marc:datafield[@tag=260]/marc:subfield[@code='c']">
84                                 <published>
85                                         <xsl:value-of select="."/>
86                                 </published>                            
87                         </xsl:for-each>
88
89                         <!--
90                         Spec wants zero or one summary elements per item; best option
91                         would be to test for one of these elements and only create
92                         if one exists, but for now we simply merge all candidates
93                         -->
94                         <summary>
95                                 <xsl:for-each select="marc:datafield[500&lt;@tag][@tag&lt;=599][not(@tag=506 or @tag=530 or @tag=540 or @tag=546)]">
96                                                 <xsl:value-of select="marc:subfield[@code='a']"/>
97                                 </xsl:for-each>
98                         </summary>
99
100                         <xsl:for-each select="marc:datafield[@tag=600 or @tag=610 or @tag=611 or @tag=630 or @tag=650 or @tag=653]">
101                                 <category>
102                                         <xsl:attribute name="term">
103                                                 <xsl:call-template name="subfieldSelect">
104                                                         <xsl:with-param name="codes">abcdq</xsl:with-param>
105                                                 </xsl:call-template>
106                                         </xsl:attribute>
107                                 </category>
108                         </xsl:for-each>
109
110                         <xsl:for-each select="marc:datafield[@tag=856]">
111                                 <dc:identifier>
112                                         <xsl:value-of select="marc:subfield[@code='u']"/>
113                                 </dc:identifier>
114                         </xsl:for-each>
115                         
116                         <xsl:for-each select="marc:datafield[@tag=020]">
117                                 <dc:identifier>
118                                         <xsl:text>URN:ISBN:</xsl:text>
119                                         <xsl:value-of select="marc:subfield[@code='a']"/>
120                                 </dc:identifier>
121                         </xsl:for-each>
122
123                         <xsl:for-each select="marc:datafield[@tag=901]">
124                                 <dc:identifier>
125                                         <xsl:text>URN:BIBID:</xsl:text>
126                                         <xsl:value-of select="marc:subfield[@code='c']"/>
127                                 </dc:identifier>
128                         </xsl:for-each>
129
130
131                         <xsl:for-each select="marc:datafield[@tag=506]">
132                                 <rights>
133                                         <xsl:value-of select="marc:subfield[@code='a']"/>
134                                 </rights>
135                         </xsl:for-each>
136
137                         <xsl:for-each select="marc:datafield[@tag=540]">
138                                 <rights>
139                                         <xsl:value-of select="marc:subfield[@code='a']"/>
140                                 </rights>
141                         </xsl:for-each>
142                 </entry>
143         </xsl:template>
144 </xsl:stylesheet>
145