Project

General

Profile

« Previous | Next » 

Revision 9779

merge from 2.6 branch: add support for EML 2.1.1 to DC crosswalking for OAI provider. https://projects.ecoinformatics.org/ecoinfo/issues/7030

View differences:

lib/oaipmh/eml211toDublinCore.xsl
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.1.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/metacat/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:call-template name="publisher"></xsl:call-template>
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="publisher">
167
    <xsl:choose>
168
      <xsl:when test="eml:eml/dataset/publisher/individualName/surName">
169
        <xsl:choose>
170
          <xsl:when test="eml:eml/dataset/publisher/individualName/givenName">
171
            <xsl:value-of select="eml:eml/dataset/publisher/individualName/givenName" />
172
            <xsl:text>&#x20;</xsl:text>
173
          </xsl:when>
174
        </xsl:choose>
175
        <xsl:value-of select="eml:eml/dataset/publisher/individualName/surName" />
176
      </xsl:when>
177
      <xsl:when test="eml:eml/dataset/publisher/organizationName">
178
        <xsl:value-of select="eml:eml/dataset/publisher/organizationName" />
179
      </xsl:when>
180
      <xsl:when test="eml:eml/dataset/publisher/positionName">
181
        <xsl:value-of select="eml:eml/dataset/publisher/positionName" />
182
      </xsl:when>
183
    </xsl:choose>
184
  </xsl:template>
185

  
186
  <xsl:template name="type">
187
    <xsl:element name="dc:type">
188
      <xsl:choose>
189
        <xsl:when test="eml:eml/dataset">dataset</xsl:when>
190
        <xsl:when test="eml:eml/citation">citation</xsl:when>
191
        <xsl:when test="eml:eml/software">software</xsl:when>
192
        <xsl:when test="eml:eml/protocol">protocol</xsl:when>
193
      </xsl:choose>
194
    </xsl:element>
195
  </xsl:template>
196

  
197
  <xsl:template name="format">
198
    <xsl:choose>
199
      <xsl:when test="textFormat">text/plain</xsl:when>
200
      <xsl:when test="externallyDefinedFormat"><xsl:value-of select="formatName" /></xsl:when>
201
      <xsl:when test="binaryRasterFormat">binary raster</xsl:when>
202
    </xsl:choose>
203
  </xsl:template>
204

  
205
  <xsl:template name="coverageBoundingCoordinates">
206
    <xsl:text>&#xA;</xsl:text>
207
    <xsl:value-of select="westBoundingCoordinate" /> W
208
    <xsl:value-of select="eastBoundingCoordinate" /> E
209
    <xsl:value-of select="northBoundingCoordinate" /> N
210
    <xsl:value-of select="southBoundingCoordinate" /> S
211
  </xsl:template>
212

  
213
  <xsl:template name="coverageTemporal">
214
    <xsl:choose>
215
      <xsl:when test="singleDateTime">
216
        <xsl:value-of select="singleDateTime/calendarDate" />
217
      </xsl:when>
218
      <xsl:when test="rangeOfDates">
219
        <xsl:value-of select="rangeOfDates/beginDate/calendarDate" />
220
        <xsl:text> to </xsl:text>
221
        <xsl:value-of select="rangeOfDates/endDate/calendarDate" />
222
      </xsl:when>
223
    </xsl:choose>
224
  </xsl:template>
225

  
226
</xsl:stylesheet>
0 227

  
src/edu/ucsb/nceas/metacat/oaipmh/provider/server/crosswalk/Eml2oai_dc.java
44 44
  private static final String XSLT_NAME_200 = "eml200toDublinCore.xsl";
45 45
  private static final String XSLT_NAME_201 = "eml201toDublinCore.xsl";
46 46
  private static final String XSLT_NAME_210 = "eml210toDublinCore.xsl";
47
  private static final String XSLT_NAME_211 = "eml211toDublinCore.xsl";
48

  
47 49
  private static final String SCHEMA_LOCATION =
48 50
    "http://www.openarchives.org/OAI/2.0/oai_dc/ " +
49 51
    "http://www.openarchives.org/OAI/2.0/oai_dc.xsd";
......
55 57
  private Transformer transformer200 = null;
56 58
  private Transformer transformer201 = null;
57 59
  private Transformer transformer210 = null;
60
  private Transformer transformer211 = null;
58 61
  
59 62
  
60 63
  /* Constructors */
......
71 74
    String xsltPath200 = dirPath + "/" + XSLT_NAME_200;
72 75
    String xsltPath201 = dirPath + "/" + XSLT_NAME_201;
73 76
    String xsltPath210 = dirPath + "/" + XSLT_NAME_210;
77
    String xsltPath211 = dirPath + "/" + XSLT_NAME_211;
78

  
74 79
    FileInputStream fileInputStream200 = null;
75 80
    FileInputStream fileInputStream201 = null;
76 81
    FileInputStream fileInputStream210 = null;
82
    FileInputStream fileInputStream211 = null;
83

  
77 84
    
78 85
    try {
79 86
      TransformerFactory tFactory200 = TransformerFactory.newInstance();
......
93 100
      StreamSource xslSource210 = new StreamSource(fileInputStream210);
94 101
      this.transformer210 = tFactory210.newTransformer(xslSource210);
95 102
      fileInputStream210.close();
103
      
104
      TransformerFactory tFactory211 = TransformerFactory.newInstance();
105
      fileInputStream211 = new FileInputStream(xsltPath211);
106
      StreamSource xslSource211 = new StreamSource(fileInputStream211);
107
      this.transformer211 = tFactory210.newTransformer(xslSource211);
108
      fileInputStream211.close();
96 109

  
97 110
    } 
98 111
    catch (Exception e) {
......
102 115
        IOUtils.closeQuietly(fileInputStream200);
103 116
        IOUtils.closeQuietly(fileInputStream201);
104 117
        IOUtils.closeQuietly(fileInputStream210);
118
        IOUtils.closeQuietly(fileInputStream211);
119

  
105 120
    }
106 121
  }
107 122
  
......
152 167
      else if (xmlRec.contains("eml://ecoinformatics.org/eml-2.1.0")) {
153 168
        transformer = transformer210;
154 169
      }
170
      else if (xmlRec.contains("eml://ecoinformatics.org/eml-2.1.1")) {
171
          transformer = transformer211;
172
        }
155 173
      
156 174
      StringReader stringReader = new StringReader(xmlRec);
157 175
      StreamSource streamSource = new StreamSource(stringReader);
......
162 180
      return stringWriter.toString();
163 181
    } 
164 182
    catch (Exception e) {
183
    	e.printStackTrace();
165 184
      throw new CannotDisseminateFormatException(e.getMessage());
166 185
    }
167 186
  }

Also available in: Unified diff