Statistics
| Revision:

svn-gvsig-desktop / tags / v1_9_Build_1240 / extensions / extMetadata / xslt / DC_ISO.xsl @ 32257

History | View | Annotate | Download (50.7 KB)

1
<?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, '&#xA;')"/>
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>