Project

General

Profile

1
<?xml version="1.0" encoding="UTF-8"?>
2

    
3
<xsl:stylesheet version="2.0" 
4
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
5
    xmlns:eml="eml://ecoinformatics.org/eml-2.0.1"
6
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
7
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
8
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
9
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
10
>
11
  
12
  <xsl:output method="xml"
13
              omit-xml-declaration="yes"
14
              encoding="utf-8"/>
15
  <xsl:strip-space elements="*"/>
16

    
17
  
18
  <!-- create a variable that contains all the elements that have an 'id' 
19
       attribute. Do this so that the the search for such elements only has
20
       to be carried out once.
21
    -->     
22
  <xsl:variable name="ids" select="//*[@id!='']"/>
23
  <xsl:variable name="metacat-server">http://metacat.lternet.edu/knb/metacat</xsl:variable>
24

    
25
  <xsl:template match="/">
26
    <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" 
27
               xmlns:dc="http://purl.org/dc/elements/1.1/" 
28
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
29
               xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
30
    <xsl:text>&#xA;</xsl:text>
31
     
32
    <xsl:variable name="packageId">
33
	  <xsl:value-of select="eml:eml/@packageId" />
34
	</xsl:variable>
35

    
36
    <xsl:for-each select="eml:eml/dataset/title">
37
      <xsl:element name="dc:title">
38
        <xsl:call-template name="title"></xsl:call-template>
39
      </xsl:element>
40
    </xsl:for-each>
41

    
42
    <xsl:for-each select="eml:eml/dataset/creator">
43
      <xsl:element name="dc:creator">
44
        <xsl:call-template name="creator"></xsl:call-template>
45
      </xsl:element>
46
    </xsl:for-each>
47

    
48
    <xsl:for-each select="eml:eml/dataset/keywordSet/keyword">
49
      <xsl:element name="dc:subject">
50
        <xsl:call-template name="subject"></xsl:call-template>
51
      </xsl:element>
52
    </xsl:for-each>
53

    
54
    <xsl:if test="eml:eml/dataset/abstract">
55
      <xsl:element name="dc:description">
56
        <xsl:value-of select="eml:eml/dataset/abstract" />
57
      </xsl:element>
58
    </xsl:if>
59

    
60
    <xsl:if test="eml:eml/dataset/publisher">
61
      <xsl:element name="dc:publisher">
62
        <xsl:value-of select="eml:eml/dataset/publisher" />
63
      </xsl:element>
64
    </xsl:if>
65

    
66
    <xsl:for-each select="eml:eml/dataset//associatedParty">
67
      <xsl:element name="dc:contributor">
68
        <xsl:call-template name="contributor"></xsl:call-template>
69
      </xsl:element>
70
    </xsl:for-each>
71

    
72
    <xsl:if test="eml:eml/dataset/pubDate">
73
      <xsl:element name="dc:date">
74
        <xsl:value-of select="eml:eml/dataset/pubDate" />
75
      </xsl:element>
76
    </xsl:if>
77
    
78
    <xsl:call-template name="type"></xsl:call-template>
79

    
80
    <xsl:for-each select="eml:eml/dataset//physical/dataFormat">
81
      <xsl:element name="dc:format">
82
        <xsl:call-template name="format"></xsl:call-template>
83
      </xsl:element>
84
    </xsl:for-each>
85

    
86
    <xsl:element name="dc:identifier"><xsl:value-of select="$metacat-server" />/<xsl:value-of select="$packageId" />/xml</xsl:element>
87

    
88
    <xsl:element name="dc:identifier">
89
      <xsl:value-of select="$packageId"/>
90
    </xsl:element>
91

    
92
    <xsl:for-each select="eml:eml/dataset//geographicCoverage/geographicDescription">
93
      <xsl:element name="dc:coverage">
94
        <xsl:value-of select="."/>
95
      </xsl:element>
96
    </xsl:for-each>
97

    
98
    <xsl:for-each select="eml:eml/dataset//geographicCoverage/boundingCoordinates">
99
      <xsl:element name="dc:coverage">
100
        <xsl:call-template name="coverageBoundingCoordinates"></xsl:call-template>
101
      </xsl:element>
102
    </xsl:for-each>
103

    
104
    <xsl:for-each select="eml:eml/dataset//temporalCoverage">
105
      <xsl:element name="dc:coverage">
106
        <xsl:call-template name="coverageTemporal"></xsl:call-template>
107
      </xsl:element>
108
    </xsl:for-each>
109

    
110
    <xsl:if test="eml:eml/dataset/intellectualRights">
111
      <xsl:element name="dc:rights">
112
        <xsl:value-of select="eml:eml/dataset/intellectualRights"/>
113
      </xsl:element>
114
    </xsl:if>
115

    
116
    <xsl:text>&#xA;</xsl:text>
117
    </oai_dc:dc>
118
  </xsl:template>
119

    
120

    
121
  <xsl:template name="title">
122
    <xsl:value-of select="." />
123
  </xsl:template>
124

    
125

    
126
  <xsl:template name="creator">
127
    <xsl:choose>
128
      <xsl:when test="individualName/surName">
129
        <xsl:choose>
130
          <xsl:when test="individualName/givenName">
131
            <xsl:value-of select="individualName/givenName" />
132
            <xsl:text>&#x20;</xsl:text>
133
          </xsl:when>
134
        </xsl:choose>
135
        <xsl:value-of select="individualName/surName" />
136
      </xsl:when>
137
      <xsl:when test="organizationName">
138
        <xsl:value-of select="organizationName" />
139
      </xsl:when>
140
    </xsl:choose>
141
  </xsl:template>
142

    
143

    
144
  <xsl:template name="subject">
145
    <xsl:value-of select="." />
146
  </xsl:template>
147

    
148

    
149
  <xsl:template name="contributor">
150
    <xsl:choose>
151
      <xsl:when test="individualName/surName">
152
        <xsl:choose>
153
          <xsl:when test="individualName/givenName">
154
            <xsl:value-of select="individualName/givenName" />
155
            <xsl:text>&#x20;</xsl:text>
156
          </xsl:when>
157
        </xsl:choose>
158
        <xsl:value-of select="individualName/surName" />
159
      </xsl:when>
160
      <xsl:when test="organizationName">
161
        <xsl:value-of select="organizationName" />
162
      </xsl:when>
163
    </xsl:choose>
164
  </xsl:template>
165

    
166
  <xsl:template name="type">
167
    <xsl:element name="dc:type">
168
      <xsl:choose>
169
        <xsl:when test="eml:eml/dataset">dataset</xsl:when>
170
        <xsl:when test="eml:eml/citation">citation</xsl:when>
171
        <xsl:when test="eml:eml/software">software</xsl:when>
172
        <xsl:when test="eml:eml/protocol">protocol</xsl:when>
173
      </xsl:choose>
174
    </xsl:element>
175
  </xsl:template>
176

    
177
  <xsl:template name="format">
178
    <xsl:choose>
179
      <xsl:when test="textFormat">text/plain</xsl:when>
180
      <xsl:when test="externallyDefinedFormat"><xsl:value-of select="formatName" /></xsl:when>
181
      <xsl:when test="binaryRasterFormat">binary raster</xsl:when>
182
    </xsl:choose>
183
  </xsl:template>
184

    
185
  <xsl:template name="coverageBoundingCoordinates">
186
    <xsl:text>&#xA;</xsl:text>
187
    <xsl:value-of select="westBoundingCoordinate" /> W
188
    <xsl:value-of select="eastBoundingCoordinate" /> E
189
    <xsl:value-of select="northBoundingCoordinate" /> N
190
    <xsl:value-of select="southBoundingCoordinate" /> S
191
  </xsl:template>
192

    
193
  <xsl:template name="coverageTemporal">
194
    <xsl:choose>
195
      <xsl:when test="singleDateTime">
196
        <xsl:value-of select="singleDateTime/calendarDate" />
197
      </xsl:when>
198
      <xsl:when test="rangeOfDates">
199
        <xsl:value-of select="rangeOfDates/beginDate/calendarDate" />
200
        <xsl:text> to </xsl:text>
201
        <xsl:value-of select="rangeOfDates/endDate/calendarDate" />
202
      </xsl:when>
203
    </xsl:choose>
204
  </xsl:template>
205

    
206
</xsl:stylesheet>
(2-2/6)