svn-gvsig-desktop / tags / v1_9_Build_1240 / extensions / extMetadata / xslt / DC_ISO.xsl @ 32257
History | View | Annotate | Download (50.7 KB)
1 | 24620 | allaves | <?xml version="1.0" encoding="ISO-8859-1"?> |
---|---|---|---|
2 | <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
||
3 | xmlns:dc="http://purl.org/dc/elements/1.1/" |
||
4 | xmlns:dcterms="http://purl.org/dc/terms/" |
||
5 | xmlns:xsi="http://www.w3.org/2001/XMSchema-instance" exclude-result-prefixes="dc dcterms xsi"> |
||
6 | <!-- xmlns:iso19115="http://www.isotc211.org/iso19115" --> |
||
7 | |||
8 | <xsl:param name="_date">0000-00-00</xsl:param> |
||
9 | |||
10 | <xsl:output indent="yes" encoding="ISO-8859-1"/> |
||
11 | |||
12 | <!-- Stylesheet that translates a correct DC qualified data into a correct --> |
||
13 | <!-- ISO data --> |
||
14 | |||
15 | <!-- Author: IAAA --> |
||
16 | <!-- History: [jnog 5/2/2004] Elimino uso de "iso19115:" |
||
17 | [jnog 6/2/2004] Se tratan nombres de clases (CI_Date, CI_ResponsibleParty,...), language --> |
||
18 | |||
19 | <xsl:template match="/"> |
||
20 | <xsl:apply-templates select="qualifieddc"/> |
||
21 | </xsl:template> |
||
22 | |||
23 | <xsl:template match="qualifieddc"> |
||
24 | |||
25 | <xsl:variable name="xsltsl-str-lower" select="'a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z'"/> |
||
26 | <xsl:variable name="xsltsl-str-upper" select="'A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z'"/> |
||
27 | |||
28 | <!-- A file in ISO represents a resource. --> |
||
29 | |||
30 | <!--xsl:if test="rdf:Description"--> |
||
31 | <MD_Metadata> |
||
32 | <!--xsl:element name="MD_Metadata"--> |
||
33 | <xsl:element name="identificationInfo"> |
||
34 | <xsl:element name="MD_DataIdentification"> |
||
35 | <xsl:element name="citation"><xsl:element name="CI_Citation"> |
||
36 | |||
37 | <!-- Element Title conversion: --> |
||
38 | <!-- There is no title in DC: default value "default Title" --> |
||
39 | <!-- There is only one title in DC: perfect. It goes to citation.title --> |
||
40 | <!-- There is more than one titles in DC: the fist goes to citation.title--> |
||
41 | <!-- the others to citation.alternateTitle, repeteable element --> |
||
42 | |||
43 | <xsl:element name="title"> |
||
44 | <xsl:choose> |
||
45 | <xsl:when test="./dc:title"> |
||
46 | <xsl:value-of select="./dc:title"/> |
||
47 | </xsl:when> |
||
48 | <xsl:otherwise> |
||
49 | <!-- No hay title en DC. ?Que pongo? --> |
||
50 | <xsl:text>Default Title</xsl:text> |
||
51 | </xsl:otherwise> |
||
52 | </xsl:choose> |
||
53 | </xsl:element> |
||
54 | |||
55 | |||
56 | <!--xsl:text>CON EL PUNTO Y LA BARRA</xsl:text> |
||
57 | <xsl:value-of select="./dc:title"/> |
||
58 | |||
59 | <xsl:text>SIN EL PUNTO: </xsl:text> |
||
60 | <xsl:value-of select="dc:title"/> |
||
61 | |||
62 | <xsl:text>TODO </xsl:text> |
||
63 | <xsl:value-of select="."/--> |
||
64 | |||
65 | |||
66 | <!-- Element Date conversion: --> |
||
67 | <!-- There is no date in DC: If we can obtain the date of the application--> |
||
68 | <!-- that uses this stylesheet, this date is used. If not, the default --> |
||
69 | <!-- value 0000-00-00 is used. --> |
||
70 | <!-- There are one or more date in DC: the element citation.date is --> |
||
71 | <!-- repeteable, so, a new date of publication is generated for every --> |
||
72 | <!-- dc:date. --> |
||
73 | |||
74 | <xsl:choose> |
||
75 | <xsl:when test="./dc:date"> |
||
76 | <xsl:for-each select="./dc:date"> |
||
77 | <xsl:element name="date"><xsl:element name="CI_Date"> |
||
78 | <xsl:element name="date"> |
||
79 | <xsl:value-of select="."/> |
||
80 | </xsl:element> |
||
81 | <xsl:element name="dateType"> |
||
82 | <xsl:text>publication</xsl:text> |
||
83 | </xsl:element> |
||
84 | </xsl:element></xsl:element> |
||
85 | </xsl:for-each> |
||
86 | </xsl:when> |
||
87 | <xsl:otherwise> |
||
88 | <xsl:element name="date"><xsl:element name="CI_Date"> |
||
89 | <xsl:element name="date"> |
||
90 | <!-- If there is no date, the parameter passed from the |
||
91 | application is taken. If there is no parameter, the default |
||
92 | value 0000-00-00 is considered--> |
||
93 | <xsl:value-of select="$_date"/> |
||
94 | </xsl:element> |
||
95 | <xsl:element name="dateType"> |
||
96 | <xsl:text>publication</xsl:text> |
||
97 | </xsl:element> |
||
98 | </xsl:element></xsl:element> |
||
99 | </xsl:otherwise> |
||
100 | </xsl:choose> |
||
101 | |||
102 | <!-- Element identifier conversion (1) --> |
||
103 | <!-- If there are dc:identifiers that not correspond neither file, http --> |
||
104 | <!-- ftp, ISSN nor ISBN, a element citation.identifier is generated --> |
||
105 | |||
106 | <xsl:for-each select="./dc:identifier"> |
||
107 | <xsl:choose> |
||
108 | <xsl:when test="contains(normalize-space(.), 'file') |
||
109 | or contains(normalize-space(.), 'http') |
||
110 | or contains(normalize-space(.), 'ftp') |
||
111 | or contains(normalize-space(.), 'www') |
||
112 | or contains(normalize-space(.), 'ISSN') |
||
113 | or contains(normalize-space(.), 'ISBN')"> |
||
114 | </xsl:when> |
||
115 | <xsl:otherwise> |
||
116 | <xsl:element name="identifier"><xsl:element name="MD_Identifier"> |
||
117 | <xsl:element name="code"> |
||
118 | <xsl:value-of select="normalize-space(.)"/> |
||
119 | </xsl:element> |
||
120 | </xsl:element></xsl:element> |
||
121 | </xsl:otherwise> |
||
122 | </xsl:choose> |
||
123 | </xsl:for-each> |
||
124 | |||
125 | |||
126 | <!-- Element creator conversion: --> |
||
127 | <!-- If there is no creator in DC: nothing happen. In both standards is --> |
||
128 | <!-- optional. --> |
||
129 | <!-- If it appers once or more: a new citedResponsibleParty with role --> |
||
130 | <!-- originator is created for each apparition. --> |
||
131 | <!-- the text of the enter is written in organisationName. --> |
||
132 | |||
133 | <xsl:for-each select="./dc:creator"> |
||
134 | <xsl:element name="citedResponsibleParty"><xsl:element name="CI_ResponsibleParty"> |
||
135 | <xsl:element name="organisationName"> |
||
136 | <xsl:value-of select="."/> |
||
137 | </xsl:element> |
||
138 | <xsl:element name="role"> |
||
139 | <xsl:text>originator</xsl:text> |
||
140 | </xsl:element> |
||
141 | </xsl:element></xsl:element> |
||
142 | </xsl:for-each> |
||
143 | |||
144 | |||
145 | <!-- Element publisher conversion: --> |
||
146 | <!-- If there is no publisher in DC: nothing happen. In both standards --> |
||
147 | <!-- is optional. --> |
||
148 | <!-- If it appers once or more: a new citedResponsibleParty with role --> |
||
149 | <!-- publisher is created for each apparition. --> |
||
150 | <!-- the text of the enter is written in organisationName. --> |
||
151 | |||
152 | |||
153 | <xsl:for-each select="./dc:publisher"> |
||
154 | <xsl:element name="citedResponsibleParty"><xsl:element name="CI_ResponsibleParty"> |
||
155 | <xsl:element name="organisationName"> |
||
156 | <xsl:value-of select="."/> |
||
157 | </xsl:element> |
||
158 | <xsl:element name="role"> |
||
159 | <xsl:text>publisher</xsl:text> |
||
160 | </xsl:element> |
||
161 | </xsl:element></xsl:element> |
||
162 | </xsl:for-each> |
||
163 | |||
164 | |||
165 | <!-- type element conversion(1): --> |
||
166 | <!-- If the value is equal to one code of --> |
||
167 | <!-- CI_PresentationFormCode_CodeList, a presentationForm value is --> |
||
168 | <!-- generated. --> |
||
169 | |||
170 | <xsl:for-each select="./dc:type"> |
||
171 | <xsl:variable name="typeVar"> |
||
172 | <!-- it's traslated to lower case --> |
||
173 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
174 | </xsl:variable> |
||
175 | <xsl:choose> |
||
176 | <xsl:when test="$typeVar='documentdigital' or |
||
177 | $typeVar='documenthardcopy' or |
||
178 | $typeVar='imagedigital' or |
||
179 | $typeVar='imagehardcopy' or |
||
180 | $typeVar='mapdigital' or |
||
181 | $typeVar='maphardcopy' or |
||
182 | $typeVar='modeldigital' or |
||
183 | $typeVar='modelhardcopy' or |
||
184 | $typeVar='profiledigital' or |
||
185 | $typeVar='profilehardcopy' or |
||
186 | $typeVar='tabledigital' or |
||
187 | $typeVar='tablehardcopy' or |
||
188 | $typeVar='videodigital' or |
||
189 | $typeVar='videohardcopy'"> |
||
190 | <xsl:element name="presentationForm"> |
||
191 | <xsl:value-of select="normalize-space(.)"/> |
||
192 | </xsl:element> |
||
193 | </xsl:when> |
||
194 | <xsl:otherwise> |
||
195 | </xsl:otherwise> |
||
196 | </xsl:choose> |
||
197 | </xsl:for-each> |
||
198 | |||
199 | |||
200 | <!-- relation element conversion(1): --> |
||
201 | <!-- If there is no dc:relation in DC, nothing happens because it's --> |
||
202 | <!-- optional. --> |
||
203 | <!-- If it appears in DC, only the first ocurrence is mapped in --> |
||
204 | <!-- series.name. The rest occurrences are lost. --> |
||
205 | |||
206 | <xsl:if test="./dc:relation"> |
||
207 | <xsl:element name="series"><xsl:element name="CI_Series"> |
||
208 | <xsl:element name="name"> |
||
209 | <xsl:value-of select="./dc:relation"/> |
||
210 | </xsl:element> |
||
211 | </xsl:element></xsl:element> |
||
212 | </xsl:if> |
||
213 | |||
214 | <!-- If there are more than one title, all except the first go to --> |
||
215 | <!-- alternateTitle. --> |
||
216 | |||
217 | <xsl:for-each select="./dc:title"> |
||
218 | <xsl:choose> |
||
219 | <xsl:when test="position()=1"> |
||
220 | <!-- The first dc:title go to citation.title --> |
||
221 | </xsl:when> |
||
222 | <xsl:otherwise> |
||
223 | <xsl:element name="alternateTitle"> |
||
224 | <xsl:value-of select="."/> |
||
225 | </xsl:element> |
||
226 | </xsl:otherwise> |
||
227 | </xsl:choose> |
||
228 | </xsl:for-each> |
||
229 | |||
230 | |||
231 | |||
232 | <!-- Element identifier conversion (2) --> |
||
233 | <!-- If there are dc:identifiers that contains the word ISSN or ISBN a --> |
||
234 | <!-- element citation.issn or citation.isbn is generated --> |
||
235 | |||
236 | <xsl:for-each select="./dc:identifier"> |
||
237 | <xsl:if test="contains(normalize-space(.), 'ISBN')"> |
||
238 | <xsl:element name="ISBN"> |
||
239 | <xsl:value-of select="."/> |
||
240 | </xsl:element> |
||
241 | </xsl:if> |
||
242 | </xsl:for-each> |
||
243 | |||
244 | <xsl:for-each select="./dc:identifier"> |
||
245 | <xsl:if test="contains(normalize-space(.), 'ISSN')"> |
||
246 | <xsl:element name="ISSN"> |
||
247 | <xsl:value-of select="."/> |
||
248 | </xsl:element> |
||
249 | </xsl:if> |
||
250 | </xsl:for-each> |
||
251 | |||
252 | </xsl:element> </xsl:element><!-- De citation --> |
||
253 | |||
254 | |||
255 | <!-- description element conversion: --> |
||
256 | <!-- An only abstract will be generated, so, if there are more than one --> |
||
257 | <!-- occurrences of dc:description, they will be concatenated with carry --> |
||
258 | <!-- returns. --> |
||
259 | |||
260 | <xsl:choose> |
||
261 | <xsl:when test="./dc:description"> |
||
262 | <xsl:element name="abstract"> |
||
263 | <xsl:variable name="abstractElement"/> |
||
264 | <xsl:for-each select="./dc:description"> |
||
265 | <xsl:value-of select="concat($abstractElement, normalize-space(.))"/> |
||
266 | <xsl:if test="position()!=last()"> |
||
267 | <xsl:value-of select="concat($abstractElement, '
')"/> |
||
268 | </xsl:if> |
||
269 | </xsl:for-each> |
||
270 | <xsl:value-of select="$abstractElement"/> |
||
271 | </xsl:element> |
||
272 | </xsl:when> |
||
273 | <xsl:otherwise> |
||
274 | <xsl:element name="abstract"> |
||
275 | <!-- This element is compulsory, so, if there is no dc:description |
||
276 | in DC, a default value is generated. --> |
||
277 | <xsl:text>Default abstract</xsl:text> |
||
278 | </xsl:element> |
||
279 | </xsl:otherwise> |
||
280 | </xsl:choose> |
||
281 | |||
282 | |||
283 | <!-- contributor element conversion: --> |
||
284 | <!-- If there is no dc:contributor in DC, it doesn't matter because in --> |
||
285 | <!-- both languages is optional. --> |
||
286 | <!-- If it appears more than once, a new laber credit will be generated --> |
||
287 | <!-- for each dc:contributor. --> |
||
288 | <xsl:for-each select="./dc:contributor"> |
||
289 | <xsl:element name="credit"> |
||
290 | <xsl:value-of select="."/> |
||
291 | </xsl:element> |
||
292 | </xsl:for-each> |
||
293 | |||
294 | |||
295 | |||
296 | <!-- Element creator conversion(2): --> |
||
297 | <!-- If there is no creator in DC: nothing happen. In both standards is --> |
||
298 | <!-- optional. --> |
||
299 | <!-- If it appers once or more: a new pointOfContact is created --> |
||
300 | <!-- for each apparition. --> |
||
301 | <!-- the text of the enter is written in organisationName. --> |
||
302 | |||
303 | <xsl:for-each select="./dc:creator"> |
||
304 | <xsl:element name="pointOfContact"><xsl:element name="CI_ResponsibleParty"> |
||
305 | <xsl:element name="organisationName"> |
||
306 | <xsl:value-of select="."/> |
||
307 | </xsl:element> |
||
308 | <xsl:element name="role"> |
||
309 | <xsl:text>originator</xsl:text> |
||
310 | </xsl:element> |
||
311 | </xsl:element></xsl:element> |
||
312 | </xsl:for-each> |
||
313 | |||
314 | |||
315 | <!-- Element publisher conversion: --> |
||
316 | <!-- If there is no publisher in DC: nothing happen. In both standards --> |
||
317 | <!-- is optional. --> |
||
318 | <!-- If it appers once or more: a new pointOfContact with role publisher--> |
||
319 | <!-- is created for each apparition. --> |
||
320 | <!-- the text of the enter is written in organisationName. --> |
||
321 | |||
322 | <xsl:for-each select="./dc:publisher"> |
||
323 | <xsl:element name="pointOfContact"><xsl:element name="CI_ResponsibleParty"> |
||
324 | <xsl:element name="organisationName"> |
||
325 | <xsl:value-of select="."/> |
||
326 | </xsl:element> |
||
327 | <xsl:element name="role"> |
||
328 | <xsl:text>publisher</xsl:text> |
||
329 | </xsl:element> |
||
330 | </xsl:element></xsl:element> |
||
331 | </xsl:for-each> |
||
332 | |||
333 | |||
334 | |||
335 | <!-- rights element conversion: --> |
||
336 | <!-- If there is no rights in DC, nothing happens because in ISO is --> |
||
337 | <!-- optional. --> |
||
338 | <!-- If there are rights, they will be mapped with useConstraints if the --> |
||
339 | <!-- value is included in the restricted list. If not, useConstraints --> |
||
340 | <!-- will be documented with otherConstraints, and the value will be --> |
||
341 | <!-- mapped with otherRestrictions. --> |
||
342 | |||
343 | <xsl:if test="./dc:rights"> |
||
344 | |||
345 | <xsl:element name="resourceConstraints"> |
||
346 | <xsl:element name="MD_LegalConstraints"> |
||
347 | |||
348 | <xsl:variable name="rightsISO"/> |
||
349 | <xsl:for-each select="./dc:rights"> |
||
350 | <xsl:variable name="rightsVar"> |
||
351 | <!-- it's traslated to lower case --> |
||
352 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
353 | </xsl:variable> |
||
354 | |||
355 | <xsl:choose> |
||
356 | <xsl:when test="$rightsVar='copyright'"> |
||
357 | <xsl:element name="useConstraints"> |
||
358 | <xsl:value-of select="normalize-space(.)"/> |
||
359 | </xsl:element> |
||
360 | </xsl:when> |
||
361 | <xsl:when test="$rightsVar='patent'"> |
||
362 | <xsl:element name="useConstraints"> |
||
363 | <xsl:value-of select="normalize-space(.)"/> |
||
364 | </xsl:element> |
||
365 | </xsl:when> |
||
366 | <xsl:when test="$rightsVar='patentpending'"> |
||
367 | <xsl:element name="useConstraints"> |
||
368 | <xsl:value-of select="normalize-space(.)"/> |
||
369 | </xsl:element> |
||
370 | </xsl:when> |
||
371 | <xsl:when test="$rightsVar='trademark'"> |
||
372 | <xsl:element name="useConstraints"> |
||
373 | <xsl:value-of select="normalize-space(.)"/> |
||
374 | </xsl:element> |
||
375 | </xsl:when> |
||
376 | <xsl:when test="$rightsVar='license'"> |
||
377 | <xsl:element name="useConstraints"> |
||
378 | <xsl:value-of select="normalize-space(.)"/> |
||
379 | </xsl:element> |
||
380 | </xsl:when> |
||
381 | <xsl:when test="$rightsVar='intellectualpropertyrights'"> |
||
382 | <xsl:element name="useConstraints"> |
||
383 | <xsl:value-of select="normalize-space(.)"/> |
||
384 | </xsl:element> |
||
385 | </xsl:when> |
||
386 | <xsl:when test="$rightsVar='restricted'"> |
||
387 | <xsl:element name="useConstraints"> |
||
388 | <xsl:value-of select="normalize-space(.)"/> |
||
389 | </xsl:element> |
||
390 | </xsl:when> |
||
391 | <xsl:when test="$rightsVar='otherrestrictions'"> |
||
392 | <xsl:element name="useConstraints"> |
||
393 | <xsl:value-of select="normalize-space(.)"/> |
||
394 | </xsl:element> |
||
395 | </xsl:when> |
||
396 | <xsl:otherwise> |
||
397 | <xsl:element name="useConstraints"> |
||
398 | <xsl:text>otherRestrictions</xsl:text> |
||
399 | </xsl:element> |
||
400 | </xsl:otherwise> |
||
401 | </xsl:choose> |
||
402 | </xsl:for-each> |
||
403 | |||
404 | <xsl:for-each select="./dc:rights"> |
||
405 | <xsl:variable name="rightsVar"> |
||
406 | <!-- it's traslated to lower case --> |
||
407 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
408 | </xsl:variable> |
||
409 | <xsl:choose> |
||
410 | <xsl:when test="$rightsVar='copyright'"> |
||
411 | </xsl:when> |
||
412 | <xsl:when test="$rightsVar='patent'"> |
||
413 | </xsl:when> |
||
414 | <xsl:when test="$rightsVar='patentpending'"> |
||
415 | </xsl:when> |
||
416 | <xsl:when test="$rightsVar='trademark'"> |
||
417 | </xsl:when> |
||
418 | <xsl:when test="$rightsVar='license'"> |
||
419 | </xsl:when> |
||
420 | <xsl:when test="$rightsVar='intellectualpropertyrights'"> |
||
421 | </xsl:when> |
||
422 | <xsl:when test="$rightsVar='restricted'"> |
||
423 | </xsl:when> |
||
424 | <xsl:when test="$rightsVar='otherrestrictions'"> |
||
425 | </xsl:when> |
||
426 | <xsl:otherwise> |
||
427 | <xsl:element name="otherConstraints"> |
||
428 | <xsl:value-of select="normalize-space(.)"/> |
||
429 | </xsl:element> |
||
430 | </xsl:otherwise> |
||
431 | </xsl:choose> |
||
432 | </xsl:for-each> |
||
433 | </xsl:element> |
||
434 | </xsl:element> |
||
435 | </xsl:if> |
||
436 | |||
437 | |||
438 | |||
439 | <!-- format element conversion (1): --> |
||
440 | <!-- If in DC doesn't appear, nothing happens because is optional. --> |
||
441 | <!-- If it appears N times, a new distributorFormat will be generated --> |
||
442 | <!-- for each dc:format. --> |
||
443 | |||
444 | <xsl:for-each select="./dc:format"> |
||
445 | <xsl:element name="resourceFormat"> |
||
446 | <xsl:element name="MD_Format"> |
||
447 | <xsl:choose> |
||
448 | <xsl:when test="contains(normalize-space(.), '//')"> |
||
449 | <xsl:element name="name"> |
||
450 | <xsl:value-of select="substring-before(normalize-space(.), '//')"/> |
||
451 | </xsl:element> |
||
452 | <xsl:element name="version"> |
||
453 | <xsl:value-of select="substring-after(normalize-space(.), '//')"/> |
||
454 | </xsl:element> |
||
455 | </xsl:when> |
||
456 | <xsl:otherwise> |
||
457 | <xsl:element name="name"> |
||
458 | <xsl:value-of select="normalize-space(.)"/> |
||
459 | </xsl:element> |
||
460 | <xsl:element name="version"> |
||
461 | <xsl:text>Unknown</xsl:text> |
||
462 | </xsl:element> |
||
463 | </xsl:otherwise> |
||
464 | </xsl:choose> |
||
465 | </xsl:element> |
||
466 | </xsl:element> |
||
467 | </xsl:for-each> |
||
468 | |||
469 | |||
470 | <!-- Element subject conversion: --> |
||
471 | <!-- If there is no dc:subject in DC nothing happens because in both --> |
||
472 | <!-- standars are optative. --> |
||
473 | <!-- If there are some occurrences, only the values that have not been --> |
||
474 | <!-- mapped as topicCategory will be mapped here, as a keyword. --> |
||
475 | <!-- In this case, also the element type is completed with the "theme" --> |
||
476 | <!-- value. --> |
||
477 | |||
478 | <xsl:element name="descriptiveKeywords"> |
||
479 | <xsl:for-each select="./dc:subject"> |
||
480 | <xsl:variable name="enter"> |
||
481 | <!-- it's translated to lower case --> |
||
482 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
483 | </xsl:variable> |
||
484 | <xsl:choose> |
||
485 | <xsl:when test="$enter='farming' or $enter=' farming' or $enter='farming ' or $enter=' farming '"> |
||
486 | </xsl:when> |
||
487 | <xsl:when test="$enter='biota' or $enter=' biota' or $enter='biota ' or $enter=' biota '"> |
||
488 | </xsl:when> |
||
489 | <xsl:when test="$enter='boundaries' or $enter=' boundaries' or $enter='boundaries ' or $enter=' boundaries '"> |
||
490 | </xsl:when> |
||
491 | <xsl:when test="$enter='climatologymeteorologyatmosphere' or $enter=' climatologymeteorologyatmosphere' or $enter='climatologymeteorologyatmosphere ' or $enter=' climatologymeteorologyatmosphere '"> |
||
492 | </xsl:when> |
||
493 | <xsl:when test="$enter='economy' or $enter=' economy' or $enter='economy ' or $enter=' economy '"> |
||
494 | </xsl:when> |
||
495 | <xsl:when test="$enter='elevation' or $enter=' elevation' or $enter='elevation ' or $enter=' elevation '"> |
||
496 | </xsl:when> |
||
497 | <xsl:when test="$enter='environment' or $enter=' environment' or $enter='environment ' or $enter=' environment '"> |
||
498 | </xsl:when> |
||
499 | <xsl:when test="$enter='geoscientificinformation' or $enter=' geoscientificinformation' or $enter='geoscientificinformation ' or $enter=' geoscientificinformation '"> |
||
500 | </xsl:when> |
||
501 | <xsl:when test="$enter='health' or $enter=' health' or $enter='health ' or $enter=' health '"> |
||
502 | </xsl:when> |
||
503 | <xsl:when test="$enter='imagerybasemapsearthc' or $enter=' imagerybasemapsearthc' or $enter='imagerybasemapsearthc ' or $enter=' imagerybasemapsearthc '"> |
||
504 | </xsl:when> |
||
505 | <xsl:when test="$enter='intelligencemilitary' or $enter=' intelligencemilitary' or $enter='intelligencemilitary ' or $enter=' intelligencemilitary '"> |
||
506 | </xsl:when> |
||
507 | <xsl:when test="$enter='inlandwaters' or $enter=' inlandwaters' or $enter='inlandwaters ' or $enter=' inlandwaters '"> |
||
508 | </xsl:when> |
||
509 | <xsl:when test="$enter='location' or $enter=' location' or $enter='location ' or $enter=' location '"> |
||
510 | </xsl:when> |
||
511 | <xsl:when test="$enter='oceans' or $enter=' oceans' or $enter='oceans ' or $enter=' oceans '"> |
||
512 | </xsl:when> |
||
513 | <xsl:when test="$enter='planningcadastre' or $enter=' planningcadastre' or $enter='planningcadastre ' or $enter=' planningcadastre '"> |
||
514 | </xsl:when> |
||
515 | <xsl:when test="$enter='society' or $enter=' society' or $enter='society ' or $enter=' society '"> |
||
516 | </xsl:when> |
||
517 | <xsl:when test="$enter='structure' or $enter=' structure' or $enter='structure ' or $enter=' structure '"> |
||
518 | </xsl:when> |
||
519 | <xsl:when test="$enter='transportation' or $enter=' transportation' or $enter='transportation ' or $enter=' transportation '"> |
||
520 | </xsl:when> |
||
521 | <xsl:when test="$enter='utilitiescommunication' or $enter=' utilitiescommunication' or $enter='utilitiescommunication ' or $enter=' utilitiescommunication '"> |
||
522 | </xsl:when> |
||
523 | <xsl:otherwise> |
||
524 | <xsl:element name="MD_Keywords"> |
||
525 | <xsl:element name="keyword"> |
||
526 | <xsl:value-of select="."/> |
||
527 | </xsl:element> |
||
528 | <xsl:element name="type"> |
||
529 | <xsl:text>theme</xsl:text> |
||
530 | </xsl:element> |
||
531 | </xsl:element> |
||
532 | </xsl:otherwise> |
||
533 | </xsl:choose> |
||
534 | </xsl:for-each> |
||
535 | |||
536 | <!-- coverage:placename element conversion: --> |
||
537 | <!-- For separating the different names, a template is used. This --> |
||
538 | <!-- template separated the string by the commas. --> |
||
539 | |||
540 | <xsl:for-each select="./dcterms:spatial"> |
||
541 | <xsl:choose> |
||
542 | <xsl:when test="contains(., 'northlimit')"> |
||
543 | </xsl:when> |
||
544 | <xsl:otherwise> |
||
545 | <xsl:element name="MD_Keywords"> |
||
546 | <xsl:element name="keyword"> |
||
547 | <xsl:value-of select="."/> |
||
548 | </xsl:element> |
||
549 | <xsl:element name="type"> |
||
550 | <xsl:text>place</xsl:text> |
||
551 | </xsl:element> |
||
552 | </xsl:element> |
||
553 | </xsl:otherwise> |
||
554 | </xsl:choose> |
||
555 | </xsl:for-each> |
||
556 | |||
557 | |||
558 | |||
559 | <!-- coverage:periodName element conversion: --> |
||
560 | <!-- Like the previous one. --> |
||
561 | <xsl:for-each select="./dcterms:temporal"> |
||
562 | <xsl:choose> |
||
563 | <xsl:when test="contains(., 'begin')"> |
||
564 | </xsl:when> |
||
565 | <xsl:otherwise> |
||
566 | <xsl:element name="MD_Keywords"> |
||
567 | <xsl:element name="keyword"> |
||
568 | <xsl:value-of select="."/> |
||
569 | </xsl:element> |
||
570 | <xsl:element name="type"> |
||
571 | <xsl:text>temporal</xsl:text> |
||
572 | </xsl:element> |
||
573 | </xsl:element> |
||
574 | </xsl:otherwise> |
||
575 | </xsl:choose> |
||
576 | </xsl:for-each> |
||
577 | |||
578 | </xsl:element> |
||
579 | |||
580 | <!-- relation element conversion(2): --> |
||
581 | <!-- If there is no dc:relation in DC, nothing happens because it's --> |
||
582 | <!-- optional. --> |
||
583 | <!-- If it appears in DC, an aggregationInfo will be generated for each --> |
||
584 | <!-- dc:relation element. --> |
||
585 | <xsl:if test="./dc:relation"> |
||
586 | <xsl:element name="aggregationInfo"> |
||
587 | <xsl:for-each select="./dc:relation"> |
||
588 | <xsl:element name="MD_AggregateInformation"> |
||
589 | <xsl:element name="aggregateDataSetIdentifier"> |
||
590 | <xsl:element name="code"> |
||
591 | <xsl:value-of select="normalize-space(.)"/> |
||
592 | </xsl:element> |
||
593 | </xsl:element> |
||
594 | <xsl:element name="associationType"> |
||
595 | <xsl:text>crossReference</xsl:text> |
||
596 | </xsl:element> |
||
597 | </xsl:element> |
||
598 | </xsl:for-each> |
||
599 | </xsl:element> |
||
600 | </xsl:if> |
||
601 | |||
602 | |||
603 | <!-- type element conversion(2): --> |
||
604 | <!-- If there is no type in DC, nothing happens because it's not --> |
||
605 | <!-- compulsory in IsoCore. --> |
||
606 | <!-- If it appears more than one, a new spatialRepresentationType will --> |
||
607 | <!-- be generated for each dc:type. --> |
||
608 | |||
609 | <xsl:for-each select="./dc:type"> |
||
610 | <xsl:variable name="typeVar2"> |
||
611 | <!-- it's translated to lower case --> |
||
612 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
613 | </xsl:variable> |
||
614 | <xsl:if test="$typeVar2='vector' or |
||
615 | $typeVar2='grid' or |
||
616 | $typeVar2='texttable' or |
||
617 | $typeVar2='tin' or |
||
618 | $typeVar2='stereomodel' or |
||
619 | $typeVar2='video'"> |
||
620 | <xsl:element name="spatialRepresentationType"> |
||
621 | <xsl:value-of select="normalize-space(.)"/> |
||
622 | </xsl:element> |
||
623 | </xsl:if> |
||
624 | </xsl:for-each> |
||
625 | |||
626 | |||
627 | <!-- language element conversion. --> |
||
628 | <xsl:choose> |
||
629 | <xsl:when test="./dc:language"> |
||
630 | <xsl:for-each select="./dc:language"> |
||
631 | <xsl:element name="language"> |
||
632 | <!-- Here begin a big dissertation about the correct position |
||
633 | of the value: isoCode, isoName or otherLang. --> |
||
634 | <xsl:variable name="lang"> |
||
635 | <xsl:value-of select="."/> |
||
636 | </xsl:variable> |
||
637 | <xsl:choose> |
||
638 | <xsl:when test="string-length($lang) = 3"> |
||
639 | <!-- If the text has three letters, it's supposed to be an |
||
640 | isoCode. --> |
||
641 | <!--xsl:element name="isoCode"--> |
||
642 | <xsl:value-of select="$lang"/> |
||
643 | <!--/xsl:element--> |
||
644 | </xsl:when> |
||
645 | <xsl:otherwise> |
||
646 | <!-- If not, it's putted in otherLang. --> |
||
647 | <!--xsl:element name="otherLang"--> |
||
648 | <xsl:value-of select="$lang"/> |
||
649 | <!--/xsl:element--> |
||
650 | </xsl:otherwise> |
||
651 | </xsl:choose> |
||
652 | </xsl:element> |
||
653 | </xsl:for-each> |
||
654 | </xsl:when> |
||
655 | <xsl:otherwise> |
||
656 | <xsl:element name="language"> |
||
657 | <!--xsl:element name="isoCode"--> |
||
658 | <xsl:text>eng</xsl:text> |
||
659 | </xsl:element> |
||
660 | <!--/xsl:element--> |
||
661 | </xsl:otherwise> |
||
662 | </xsl:choose> |
||
663 | |||
664 | |||
665 | <!-- element subject conversion(2): --> |
||
666 | <!-- This element is compulsory only if hierarchyLevel=Dataset. --> |
||
667 | <!-- Hence, if no dc:subject appears in DC, it's assumed that --> |
||
668 | <!-- hierarchyLevel!=dataset. --> |
||
669 | <!-- As ISO-CORE: --> |
||
670 | |||
671 | <xsl:choose> |
||
672 | <xsl:when test="./dc:subject"> |
||
673 | <xsl:for-each select="./dc:subject"> |
||
674 | <xsl:variable name="enter"> |
||
675 | <!-- it's traslated to lower case --> |
||
676 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
677 | </xsl:variable> |
||
678 | |||
679 | <xsl:choose> |
||
680 | <xsl:when test="$enter='farming' or $enter=' farming' or $enter='farming ' or $enter=' farming '"> |
||
681 | <xsl:element name="topicCategory"> |
||
682 | <xsl:text>farming</xsl:text> |
||
683 | </xsl:element> |
||
684 | </xsl:when> |
||
685 | <xsl:when test="$enter='biota' or $enter=' biota' or $enter='biota ' or $enter=' biota '"> |
||
686 | <xsl:element name="topicCategory"> |
||
687 | <xsl:text>biota</xsl:text> |
||
688 | </xsl:element> |
||
689 | </xsl:when> |
||
690 | <xsl:when test="$enter='boundaries' or $enter=' boundaries' or $enter='boundaries ' or $enter=' boundaries '"> |
||
691 | <xsl:element name="topicCategory"> |
||
692 | <xsl:text>boundaries</xsl:text> |
||
693 | </xsl:element> |
||
694 | </xsl:when> |
||
695 | <xsl:when test="$enter='climatologymeteorologyatmosphere' or $enter=' climatologymeteorologyatmosphere' or $enter='climatologymeteorologyatmosphere ' or $enter=' climatologymeteorologyatmosphere '"> |
||
696 | <xsl:element name="topicCategory"> |
||
697 | <xsl:text>climatologyMeteorologyAtmosphere</xsl:text> |
||
698 | </xsl:element> |
||
699 | </xsl:when> |
||
700 | <xsl:when test="$enter='economy' or $enter=' economy' or $enter='economy ' or $enter=' economy '"> |
||
701 | <xsl:element name="topicCategory"> |
||
702 | <xsl:text>economy</xsl:text> |
||
703 | </xsl:element> |
||
704 | </xsl:when> |
||
705 | <xsl:when test="$enter='elevation' or $enter=' elevation' or $enter='elevation ' or $enter=' elevation '"> |
||
706 | <xsl:element name="topicCategory"> |
||
707 | <xsl:text>elevation</xsl:text> |
||
708 | </xsl:element> |
||
709 | </xsl:when> |
||
710 | <xsl:when test="$enter='environment' or $enter=' environment' or $enter='environment ' or $enter=' environment '"> |
||
711 | <xsl:element name="topicCategory"> |
||
712 | <xsl:text>environment</xsl:text> |
||
713 | </xsl:element> |
||
714 | </xsl:when> |
||
715 | <xsl:when test="$enter='geoscientificinformation' or $enter=' geoscientificinformation' or $enter='geoscientificinformation ' or $enter=' geoscientificinformation '"> |
||
716 | <xsl:element name="topicCategory"> |
||
717 | <xsl:text>geoscientificInformation</xsl:text> |
||
718 | </xsl:element> |
||
719 | </xsl:when> |
||
720 | <xsl:when test="$enter='health' or $enter=' health' or $enter='health ' or $enter=' health '"> |
||
721 | <xsl:element name="topicCategory"> |
||
722 | <xsl:text>health</xsl:text> |
||
723 | </xsl:element> |
||
724 | </xsl:when> |
||
725 | <xsl:when test="$enter='imagerybasemapsearthcover' or $enter=' imagerybasemapsearthcover' or $enter='imagerybasemapsearthcover ' or $enter=' imagerybasemapsearthcover '"> |
||
726 | <xsl:element name="topicCategory"> |
||
727 | <xsl:text>imageryBaseMapsEarthCover</xsl:text> |
||
728 | </xsl:element> |
||
729 | </xsl:when> |
||
730 | <xsl:when test="$enter='intelligencemilitary' or $enter=' intelligencemilitary' or $enter='intelligencemilitary ' or $enter=' intelligencemilitary '"> |
||
731 | <xsl:element name="topicCategory"> |
||
732 | <xsl:text>intelligenceMilitary</xsl:text> |
||
733 | </xsl:element> |
||
734 | </xsl:when> |
||
735 | <xsl:when test="$enter='inlandwaters' or $enter=' inlandwaters' or $enter='inlandwaters ' or $enter=' inlandwaters '"> |
||
736 | <xsl:element name="topicCategory"> |
||
737 | <xsl:text>inlandWaters</xsl:text> |
||
738 | </xsl:element> |
||
739 | </xsl:when> |
||
740 | <xsl:when test="$enter='location' or $enter=' location' or $enter='location ' or $enter=' location '"> |
||
741 | <xsl:element name="topicCategory"> |
||
742 | <xsl:text>location</xsl:text> |
||
743 | </xsl:element> |
||
744 | </xsl:when> |
||
745 | <xsl:when test="$enter='oceans' or $enter=' oceans' or $enter='oceans ' or $enter=' oceans '"> |
||
746 | <xsl:element name="topicCategory"> |
||
747 | <xsl:text>oceans</xsl:text> |
||
748 | </xsl:element> |
||
749 | </xsl:when> |
||
750 | <xsl:when test="$enter='planningcadastre' or $enter=' planningcadastre' or $enter='planningcadastre ' or $enter=' planningcadastre '"> |
||
751 | <xsl:element name="topicCategory"> |
||
752 | <xsl:text>planningCadastre</xsl:text> |
||
753 | </xsl:element> |
||
754 | </xsl:when> |
||
755 | <xsl:when test="$enter='society' or $enter=' society' or $enter='society ' or $enter=' society '"> |
||
756 | <xsl:element name="topicCategory"> |
||
757 | <xsl:text>society</xsl:text> |
||
758 | </xsl:element> |
||
759 | </xsl:when> |
||
760 | <xsl:when test="$enter='structure' or $enter=' structure' or $enter='structure ' or $enter=' structure '"> |
||
761 | <xsl:element name="topicCategory"> |
||
762 | <xsl:text>structure</xsl:text> |
||
763 | </xsl:element> |
||
764 | </xsl:when> |
||
765 | <xsl:when test="$enter='transportation' or $enter=' transportation' or $enter='transportation ' or $enter=' transportation '"> |
||
766 | <xsl:element name="topicCategory"> |
||
767 | <xsl:text>transportation</xsl:text> |
||
768 | </xsl:element> |
||
769 | </xsl:when> |
||
770 | <xsl:when test="$enter='utilitiescommunication' or $enter=' utilitiescommunication' or $enter='utilitiescommunication ' or $enter=' utilitiescommunication '"> |
||
771 | <xsl:element name="topicCategory"> |
||
772 | <xsl:text>utilitiesCommunication</xsl:text> |
||
773 | </xsl:element> |
||
774 | </xsl:when> |
||
775 | <xsl:otherwise> |
||
776 | <!-- this field is compulsory only if the resource has a |
||
777 | hierarchyLevel equals to Dataset. Hense, if the element |
||
778 | doesn't appear in the list, it's not translated to DC --> |
||
779 | </xsl:otherwise> |
||
780 | </xsl:choose> |
||
781 | </xsl:for-each> |
||
782 | </xsl:when> |
||
783 | <xsl:otherwise> |
||
784 | <!-- nothing is written. In ISO it's understood by default that |
||
785 | it's a dataset. --> |
||
786 | </xsl:otherwise> |
||
787 | </xsl:choose> |
||
788 | |||
789 | |||
790 | |||
791 | <!-- coverage:periodTime element conversion. --> |
||
792 | |||
793 | <xsl:if test="./dcterms:temporal or ./dcterms:spatial"> |
||
794 | |||
795 | <xsl:if test="count(./dcterms:temporal[contains(., 'begin')])>0"> |
||
796 | <xsl:element name="extent"><xsl:element name="EX_Extent"> |
||
797 | <xsl:element name="temporalElement"> |
||
798 | <xsl:for-each select="./dcterms:temporal"> |
||
799 | <xsl:if test="contains(., 'begin')"> |
||
800 | <xsl:element name="EX_TemporalExtent"> |
||
801 | <xsl:element name="extent"> |
||
802 | <xsl:element name="beginEnd"> |
||
803 | <xsl:element name="begin"> |
||
804 | <xsl:value-of select="substring-before(substring-after(., 'begin='), ';')"/> |
||
805 | </xsl:element> |
||
806 | <xsl:element name="end"> |
||
807 | <xsl:value-of select="substring-before(substring-after(., 'end='), ';')"/> |
||
808 | </xsl:element> |
||
809 | </xsl:element> |
||
810 | </xsl:element> |
||
811 | </xsl:element> |
||
812 | </xsl:if> |
||
813 | </xsl:for-each> |
||
814 | </xsl:element></xsl:element></xsl:element> |
||
815 | </xsl:if> |
||
816 | |||
817 | <xsl:if test="count(./dcterms:spatial[contains(., 'northlimit')])>0"> |
||
818 | <xsl:element name="extent"><xsl:element name="EX_Extent"> |
||
819 | <xsl:element name="geographicElement"> |
||
820 | <xsl:for-each select="./dcterms:spatial"> |
||
821 | <xsl:if test="contains(., 'northlimit')"> |
||
822 | <xsl:element name="EX_GeographicBoundingBox"> |
||
823 | <xsl:element name="westBoundLongitude"> |
||
824 | <xsl:value-of select="substring-before(substring-after(., 'westlimit='), ';')"/> |
||
825 | </xsl:element> |
||
826 | <xsl:element name="eastBoundLongitude"> |
||
827 | <xsl:value-of select="substring-before(substring-after(., 'eastlimit='), ';')"/> |
||
828 | </xsl:element> |
||
829 | <xsl:element name="southBoundLatitude"> |
||
830 | <xsl:value-of select="substring-before(substring-after(., 'southlimit='), ';')"/> |
||
831 | </xsl:element> |
||
832 | <xsl:element name="northBoundLatitude"> |
||
833 | <xsl:value-of select="substring-before(substring-after(., 'northlimit='), ';')"/> |
||
834 | </xsl:element> |
||
835 | |||
836 | </xsl:element> |
||
837 | </xsl:if> |
||
838 | </xsl:for-each> |
||
839 | |||
840 | </xsl:element></xsl:element></xsl:element> |
||
841 | </xsl:if> |
||
842 | |||
843 | </xsl:if> |
||
844 | |||
845 | |||
846 | |||
847 | </xsl:element> <!-- _MD_Identification --> |
||
848 | </xsl:element> <!-- identificationInfo--> |
||
849 | <!-- source element conversion: --> |
||
850 | <!-- If there is no source in DC, nothing happens because it's optional --> |
||
851 | <!-- If it appears, a new dataQualityInfo.lineage.source is generated by --> |
||
852 | <!-- each occurrence. dataQualityInfo has, also, a compulsory attribute --> |
||
853 | <!-- that is, scope. This attribute will be automatically generated with--> |
||
854 | <!-- the value 'dataset'. --> |
||
855 | |||
856 | |||
857 | <xsl:if test="./dc:source"> |
||
858 | <xsl:element name="dataQualityInfo"> |
||
859 | <xsl:element name="DQ_DataQuality"> |
||
860 | <xsl:element name="scope"> |
||
861 | <xsl:element name="level"> |
||
862 | <xsl:text>dataset</xsl:text> |
||
863 | </xsl:element> |
||
864 | </xsl:element> |
||
865 | <xsl:element name="lineage"> |
||
866 | <xsl:element name="LI_Lineage"> |
||
867 | <xsl:for-each select="./dc:source"> |
||
868 | <xsl:element name="source"> |
||
869 | <xsl:element name="LI_Source"> |
||
870 | <xsl:element name="description"> |
||
871 | <xsl:value-of select="."/> |
||
872 | </xsl:element> |
||
873 | </xsl:element> |
||
874 | </xsl:element> |
||
875 | </xsl:for-each> |
||
876 | </xsl:element> |
||
877 | </xsl:element> |
||
878 | </xsl:element> |
||
879 | </xsl:element> |
||
880 | </xsl:if> |
||
881 | |||
882 | |||
883 | <!-- format element conversion (2): --> |
||
884 | <!-- If in DC doesn't appear, nothing happens because is optional. --> |
||
885 | <!-- If it appears N times, a new distributionInfo will be generated --> |
||
886 | <!-- for each dc:format. --> |
||
887 | |||
888 | <!-- Element identifier conversion (3) --> |
||
889 | <!-- If there are dc:identifiers that correspond with a file a element --> |
||
890 | <!-- a MD_DigitalTransferOptions is also generated --> |
||
891 | |||
892 | |||
893 | <xsl:if test="./dc:format"> |
||
894 | <!-- DistributionInfo must appear only once --> |
||
895 | <xsl:element name="distributionInfo"> |
||
896 | <xsl:element name="MD_Distribution"> |
||
897 | <xsl:for-each select="./dc:format"> |
||
898 | <xsl:variable name="pos"> |
||
899 | <xsl:value-of select="position()"/> |
||
900 | </xsl:variable> |
||
901 | |||
902 | <xsl:element name="distributionFormat"> |
||
903 | <xsl:element name="MD_Format"> |
||
904 | <xsl:choose> |
||
905 | <xsl:when test="contains(normalize-space(.), '//')"> |
||
906 | <xsl:element name="name"> |
||
907 | <xsl:value-of select="substring-before(normalize-space(.), '//')"/> |
||
908 | </xsl:element> |
||
909 | <xsl:element name="version"> |
||
910 | <xsl:value-of select="substring-after(normalize-space(.), '//')"/> |
||
911 | </xsl:element> |
||
912 | </xsl:when> |
||
913 | <xsl:otherwise> |
||
914 | <xsl:element name="name"> |
||
915 | <xsl:value-of select="normalize-space(.)"/> |
||
916 | </xsl:element> |
||
917 | <xsl:element name="version"> |
||
918 | <xsl:text>Unknown</xsl:text> |
||
919 | </xsl:element> |
||
920 | </xsl:otherwise> |
||
921 | </xsl:choose> |
||
922 | </xsl:element> |
||
923 | </xsl:element> |
||
924 | |||
925 | </xsl:for-each> |
||
926 | <xsl:for-each select="./dc:identifier"> |
||
927 | <xsl:variable name="identifierVar"> |
||
928 | <!-- it's translated to lower case --> |
||
929 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
930 | </xsl:variable> |
||
931 | <xsl:if test="contains($identifierVar, 'file') |
||
932 | or contains($identifierVar, 'http') |
||
933 | or contains($identifierVar, 'ftp') |
||
934 | or contains($identifierVar, 'www')"> |
||
935 | <xsl:element name="transferOptions"> |
||
936 | <xsl:element name="MD_DigitalTransferOptions"> |
||
937 | <xsl:element name="onLine"><xsl:element name="CI_OnlineResource"> |
||
938 | <xsl:element name="linkage"> |
||
939 | <xsl:value-of select="."/> |
||
940 | </xsl:element> |
||
941 | </xsl:element></xsl:element> |
||
942 | </xsl:element> |
||
943 | </xsl:element> |
||
944 | </xsl:if> |
||
945 | </xsl:for-each> |
||
946 | |||
947 | </xsl:element> |
||
948 | </xsl:element> |
||
949 | </xsl:if> |
||
950 | |||
951 | |||
952 | <!-- file identifier --> |
||
953 | <xsl:if test="./@fileID"> |
||
954 | <xsl:element name="fileIdentifier"> |
||
955 | <xsl:value-of select="./@fileID"/> |
||
956 | </xsl:element> |
||
957 | </xsl:if> |
||
958 | |||
959 | |||
960 | <!-- language --> |
||
961 | <xsl:if test="./@xml:lang"> |
||
962 | <xsl:element name="language"> |
||
963 | <!--xsl:element name="isoCode"--> |
||
964 | <xsl:value-of select="./@xml:lang"/> |
||
965 | <!--/xsl:element--> |
||
966 | </xsl:element> |
||
967 | </xsl:if> |
||
968 | |||
969 | |||
970 | |||
971 | <!-- type element conversion(3) (iso-comprehensive): --> |
||
972 | <!-- If there is no type in DC, nothing happens, it's optional. --> |
||
973 | <!-- If it appears more than one, a new hierarchyLevel will --> |
||
974 | <!-- be generated for each dc:type. --> |
||
975 | <!-- Also the values of DCMI Type Vocabulary are mapped into --> |
||
976 | <!-- hierarchyLevel. --> |
||
977 | |||
978 | <xsl:for-each select="./dc:type"> |
||
979 | <xsl:variable name="typeVar3"> |
||
980 | <!-- it's translated to lower case --> |
||
981 | <xsl:value-of select="translate(normalize-space(.),$xsltsl-str-upper, $xsltsl-str-lower)"/> |
||
982 | </xsl:variable> |
||
983 | <xsl:choose> |
||
984 | <xsl:when test="$typeVar3='attribute' or |
||
985 | $typeVar3='attributetype' or |
||
986 | $typeVar3='collectionhardware' or |
||
987 | $typeVar3='collectionsession' or |
||
988 | $typeVar3='dataset' or |
||
989 | $typeVar3='series' or |
||
990 | $typeVar3='nongeographicdataset' or |
||
991 | $typeVar3='dimensiongroup' or |
||
992 | $typeVar3='feature' or |
||
993 | $typeVar3='featuretype' or |
||
994 | $typeVar3='propertytype' or |
||
995 | $typeVar3='fieldsession' or |
||
996 | $typeVar3='software' or |
||
997 | $typeVar3='service' or |
||
998 | $typeVar3='model' or |
||
999 | $typeVar3='tile'"> |
||
1000 | <xsl:element name="hierarchyLevel"> |
||
1001 | <xsl:value-of select="normalize-space(.)"/> |
||
1002 | </xsl:element> |
||
1003 | </xsl:when> |
||
1004 | <xsl:when test="$typeVar3='collection'"> |
||
1005 | <xsl:element name="hierarchyLevel"> |
||
1006 | <xsl:text>series</xsl:text> |
||
1007 | </xsl:element> |
||
1008 | </xsl:when> |
||
1009 | <xsl:when test="$typeVar3='dataset'"> |
||
1010 | <xsl:element name="hierarchyLevel"> |
||
1011 | <xsl:text>dataset</xsl:text> |
||
1012 | </xsl:element> |
||
1013 | </xsl:when> |
||
1014 | <!--xsl:when test="$typeVar3='event'"> |
||
1015 | <xsl:element name="hierarchyLevel"> |
||
1016 | <xsl:text>collectionSession</xsl:text> |
||
1017 | </xsl:element> |
||
1018 | </xsl:when--> |
||
1019 | <xsl:when test="$typeVar3='image'"> |
||
1020 | <xsl:element name="hierarchyLevel"> |
||
1021 | <xsl:text>dataset</xsl:text> |
||
1022 | </xsl:element> |
||
1023 | </xsl:when> |
||
1024 | <xsl:when test="$typeVar3='service'"> |
||
1025 | <xsl:element name="hierarchyLevel"> |
||
1026 | <xsl:text>service</xsl:text> |
||
1027 | </xsl:element> |
||
1028 | </xsl:when> |
||
1029 | <xsl:when test="$typeVar3='software'"> |
||
1030 | <xsl:element name="hierarchyLevel"> |
||
1031 | <xsl:text>sotfware</xsl:text> |
||
1032 | </xsl:element> |
||
1033 | </xsl:when> |
||
1034 | <xsl:otherwise> |
||
1035 | <!-- If the value doesn't correspond with one of the values of |
||
1036 | the list, it doesn't matter. hierarchyLevel is not compulsory --> |
||
1037 | </xsl:otherwise> |
||
1038 | </xsl:choose> |
||
1039 | </xsl:for-each> |
||
1040 | |||
1041 | |||
1042 | <!-- Element publisher conversion: --> |
||
1043 | <!-- If there is no publisher in DC: the element contact in ISO is --> |
||
1044 | <!-- compulsory. A default value is needed. --> |
||
1045 | <!-- If it appers once or more: a new contact with role --> |
||
1046 | <!-- publisher is created for each apparition. --> |
||
1047 | <!-- the text of the enter is written in organisationName. --> |
||
1048 | |||
1049 | <xsl:choose> |
||
1050 | <xsl:when test="./dc:publisher"> |
||
1051 | <xsl:for-each select="./dc:publisher"> |
||
1052 | <xsl:element name="contact"><xsl:element name="CI_ResponsibleParty"> |
||
1053 | <xsl:element name="organisationName"> |
||
1054 | <xsl:value-of select="./dc:publisher"/> |
||
1055 | </xsl:element> |
||
1056 | <xsl:element name="role"> |
||
1057 | <xsl:text>publisher</xsl:text> |
||
1058 | </xsl:element> |
||
1059 | </xsl:element></xsl:element> |
||
1060 | </xsl:for-each> |
||
1061 | </xsl:when> |
||
1062 | <xsl:otherwise> |
||
1063 | <xsl:element name="contact"><xsl:element name="CI_ResponsibleParty"> |
||
1064 | <xsl:element name="organisationName"> |
||
1065 | <xsl:text>Default organisation</xsl:text> |
||
1066 | </xsl:element> |
||
1067 | <xsl:element name="role"> |
||
1068 | <xsl:text>publisher</xsl:text> |
||
1069 | </xsl:element> |
||
1070 | </xsl:element></xsl:element> |
||
1071 | </xsl:otherwise> |
||
1072 | </xsl:choose> |
||
1073 | |||
1074 | <!-- Here, a final compulsory date is generated. The publication date --> |
||
1075 | <!-- is used for that. --> |
||
1076 | |||
1077 | <xsl:element name="dateStamp"> |
||
1078 | <xsl:choose> |
||
1079 | <xsl:when test="./dc:date"> |
||
1080 | <xsl:value-of select="./dc:date"/> |
||
1081 | </xsl:when> |
||
1082 | <xsl:otherwise> |
||
1083 | <!-- If there is no date in the DC date, the same that with the |
||
1084 | publication date is done. --> |
||
1085 | <xsl:value-of select="$_date"/> |
||
1086 | </xsl:otherwise> |
||
1087 | </xsl:choose> |
||
1088 | </xsl:element> |
||
1089 | <!-- dataSetURI element. The first URI is used. --> |
||
1090 | <xsl:if test="count(./dc:identifier[contains(.,'file') or contains(., 'www') or contains(., 'http') or contains (., 'ftp')]) > 0"> |
||
1091 | <xsl:element name="dataSet"> |
||
1092 | <xsl:value-of select="./dc:identifier[contains(.,'file') or contains(., 'www') or contains(., 'http') or contains (., 'ftp')][1]"/> |
||
1093 | </xsl:element> |
||
1094 | </xsl:if> |
||
1095 | |||
1096 | <!--/xsl:element--> <!-- MD_Metadata --> |
||
1097 | |||
1098 | </MD_Metadata> |
||
1099 | |||
1100 | <!--/xsl:if--> <!-- of: <xsl:if test="rdf:Description"--> |
||
1101 | </xsl:template> |
||
1102 | |||
1103 | </xsl:stylesheet> |