source: ndgCommon/trunk/ndg/common/xmldb/xquery/dif2stubISO.xq @ 7274

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/ndgCommon/trunk/ndg/common/xmldb/xquery/dif2stubISO.xq@7274
Revision 7274, 39.4 KB checked in by sdonegan, 10 years ago (diff)

get rid of windows char

Line 
1(:Development DIF2ISO xquery - designed to convert most important DIF elements and produce a "stub" iso:)
2
3(: NOTE: stored these directly into eXist - taken from current head ndgCommon - 26/11/09 :)
4(:import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xquery/lib/Vocabs/vocab_xquery_lib.xquery';
5import module namespace inputParse='http://ndg.nerc.ac.uk/xquery/lib/inputParse' at 'xmldb:exist:///db/xquery/lib/Utilities/inputParse_xquery_lib.xquery'; :)
6
7(:Production -use these :)
8import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'vocab_xquery_lib.xquery';
9import module namespace inputParse='http://ndg.nerc.ac.uk/xquery/lib/inputParse' at 'inputParse_xquery_lib.xquery';
10
11(: default NS of the ISO metadata :)
12declare default element namespace 'http://www.isotc211.org/2005/gmd';
13
14(: NS of the xml we're reading from :)
15declare namespace dif='http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/';
16declare namespace ns0='http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/';
17
18(: other NS we need to produce the stub ISO :)
19declare namespace gmd='http://www.isotc211.org/2005/gmd';
20declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';
21declare namespace gco='http://www.isotc211.org/2005/gco';
22declare namespace gmx='http://www.isotc211.org/2005/gmx';
23declare namespace gml='http://www.opengis.net/gml/3.2';
24declare namespace xlink='http://www.w3.org/1999/xlink';
25
26(: development stuff for testing against ceda bora eXist :)
27(:
28declare variable $targetCollection as xs:string := '/db/DIF/neodc.nerc.ac.uk/';
29declare variable $thisDateTime as xs:string := '2009-12-01T17:00:00';
30declare variable $input_repository as xs:string := 'neodc.nerc.ac.uk';
31declare variable $input_repository_local as xs:string := 'neodc.nerc.ac.uk';
32declare variable $input_entry_id as xs:string := 'neodc.nerc.ac.uk:DIF:dataent_11658383444211836';
33declare variable $output_local_id as xs:string := 'dataent_11658383444211836';
34:)
35
36declare variable $targetCollection as xs:string := 'TargetCollection';
37declare variable $input_repository as xs:string := 'RepositoryID';
38declare variable $input_repository_local as xs:string := 'repository_localid';
39declare variable $input_entry_id as xs:string := 'Input_Entry_ID';
40declare variable $output_local_id as xs:string := 'LocalID';
41declare variable $thisDateTime as xs:string := substring(current-dateTime() cast as xs:string,1,19);
42
43(: Loop through the dif and pick the important stuff we need to produce a stub iso :)
44for $DIF in collection($targetCollection)/dif:DIF[dif:Entry_ID=$input_entry_id]
45return
46element gmd:MD_Metadata {
47
48    (: add various namespaces
49    attribute xmlns:gco {"http://www.isotc211.org/2005/gco"}, :)   
50   
51    (:
52    attribute xmlns:gmx {"http://www.isotc211.org/2005/gmx"},
53    attribute xmlns:gml{"http://www.opengis.net/gml/3.2"},
54    attribute xmlns:xlink {"http://www.w3.org/1999/xlink"}, 
55    attribute xmlns:geonet {"http://www.fao.org/geonetwork"},
56    :)
57    (: Unique Identifier :)
58    element gmd:fileIdentifier {
59   
60        element gco:CharacterString {   
61          data($DIF/dif:Entry_ID)
62        }
63       
64      }, (: /gmd:fileIdentifier :)
65     
66       (: ************* ISO Author information **************** - several places in DIF to get this :)
67      if (exists($DIF/dif:Data_Set_Citation/dif:Dataset_Creator)) then
68      for $creatorID in $DIF/dif:Data_Set_Citation/dif:Dataset_Creator
69      return
70      element gmd:contact {
71          element gmd:CI_ResponsibleParty {
72              element   gmd:individualName {
73                  element gco:CharacterString {
74                      data($creatorID)
75                  }
76               },
77              element role {
78                  element gmd:CI_RoleCode {
79                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
80                      attribute codeListValue {"CI_RoleCode_pointOfContact"},
81                      string('pointOfContact')
82                  }
83              }
84           }
85      }(: /gmd:contact :)
86      (: if there's an originating centre in the dif, stuff it in here :)
87      (: NOTE: 17/07/2010 Mandatory MEDIN element so if originator not known just use distributor for now :)
88      else (),
89      if (exists($DIF/dif:Originating_Center)) then
90      element gmd:contact {
91          element gmd:CI_ResponsibleParty {
92              element   gmd:organisationName {
93                  element gco:CharacterString {
94                      data($DIF/dif:Originating_Center)
95              },             
96              element role {
97                  element gmd:CI_RoleCode {
98                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
99                      attribute codeListValue {"CI_RoleCode_originator"},
100                      string('originator')
101                  }
102              }
103           }
104      } (: /gmd:contact :)
105      }
106      (:Pick up any contacts in the datacentre//role axis - note just take the first one for simplicity, for now :)     
107      else
108      if (exists($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)) then
109      for $creatorID in $DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name
110      return
111      element gmd:contact {
112          element gmd:CI_ResponsibleParty {
113              element   gmd:individualName {
114                  element gco:CharacterString {
115                      data($creatorID)
116                  }
117               },
118              element role {
119                  element gmd:CI_RoleCode {
120                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
121                      attribute codeListValue {"CI_RoleCode_originator"},
122                      string('originator')
123                  }
124              }
125           }
126      } else ()
127     
128      ,
129      (:
130      NOTE- here is the main information on the holding data centre
131      :)
132     
133      if (exists($DIF/dif:Data_Center)) then
134       
135         (:for $roleID in $DIF/dif:Data_Center
136         return:)
137         element gmd:contact {
138          element gmd:CI_ResponsibleParty {
139              element   gmd:individualName {
140                  element gco:CharacterString {
141                      data($DIF/dif:Data_Center/dif:Personnel/dif:Role)
142                  }
143               },
144               element organisationName {
145                   element gco:CharacterString {
146                      data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Short_Name)
147                    }
148               },
149               element contactInfo {
150                   element gmd:CI_Contact {
151                        if (exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone) or exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
152                           element phone {
153                               element gmd:CI_Telephone {
154                                   if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone)) then
155                                       element voice {
156                                           element gco:CharacterString {
157                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Phone)
158                                                }
159                                       }
160                                     else (),
161                                     if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
162                                       element facsimile {
163                                           element gco:CharacterString {
164                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Fax)
165                                                }
166                                       }
167                                     else ()                                     
168                               }                           
169                        } else ()
170                    },(:/phone:)
171                    element address {
172                        element gmd:CI_Address {
173                       
174                            (:NOTE: in stubISO - first line of address is ALWAYS data centre longname (or if its not available, the short name again) :)
175                            if (exists($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)) then
176                            element deliveryPoint {
177                                element gco:CharacterString {
178                                              data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)
179                                }
180                            }
181                            else (),
182                            (: Now the rest of the address - delimit with commas to save some elements!:)
183                            for $Address in $DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Address
184                            return
185                                element deliveryPoint {
186                                    element gco:CharacterString {
187                                             data($Address)
188                                    }
189                                },
190                             element city {
191                                 element gco:CharacterString {
192                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:City)
193                                    }
194                             },
195                             element postalCode {
196                                 element gco:CharacterString {
197                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Postal_Code)
198                                    }
199                             },
200                             element country {
201                                  element gco:CharacterString {
202                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Country)
203                                    }
204                             },
205                             element electronicMailAddress {
206                                  element gco:CharacterString {
207                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Email)
208                                    }
209                             }
210                        }
211                    } (:/address:)
212               }, (:/contactInfo:)
213              element role {
214                  element gmd:CI_RoleCode {
215                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
216                      attribute codeListValue {"CI_RoleCode_distributor"},
217                      string('disributor')
218                  }
219              }
220           }
221      }  (: /gmd:contact :)
222      else (),
223      (: ************* END ISO Author information END **************** :)
224     
225      (: ************* dateStamp ******************* :)
226      (:
227      NOTE: this is the datestamp of the dif=>iso conversion
228      :)
229      element dateStamp {
230         
231          element gco:DateTime {data($thisDateTime)}             
232         
233      },     
234      (: ************* END dateStamp ******************* :)
235     
236      (: ************* metadataStandardName & version******************* :)
237      (:
238      NOTE: this is the name of the standard we have converted dif TO i.e. ndg_isoStub
239     
240      TODO: rationalise list of standards & profiles (not done 01/12/09)
241     
242      :)
243      element metadataStandardName {
244          element gco:CharacterString { string('NDG_StubISO19139')}
245      },
246      element metadataStandardVersion {
247          element gco:CharacterString { string('v0.1')}
248      }, 
249      (: ************* END metadataStandardName ******************* :)
250     
251      (: dataSetURL :)
252      (:
253      NOTE: converting from DIF - at least in CEDA records, this is held in one of the Related_URL elements with the description 'URI', other possible places are online_resource..
254      .. don't worry too much about this as this is what the metadata content group is for!!!  So if centres moan, point out they have to have it in the correct place in the dif for it to appear here!!!
255      :)
256      if (exists($DIF/dif:Data_Set_Citation/dif:Online_Resource)) then
257          element dataSetURI {
258              element gco:CharacterString {
259              data ($DIF/dif:Data_Set_Citation/dif:Online_Resource)
260              }
261          }
262      else
263         for $RelatedURL in $DIF/dif:Related_URL
264         let $DescriptionVal := $RelatedURL/dif:Description
265         where $DescriptionVal = 'URI'
266         return
267          element dataSetURI {
268              element gco:CharacterString {
269                  data ($RelatedURL/dif:URL)
270              }
271          },
272      (:/END dataset url :)
273           
274    (: ISO dataset identification info etc :)   
275    element gmd:identificationInfo {
276   
277        (: Dataset name :)
278        element gmd:MD_DataIdentification {
279            element gmd:citation {
280                element gmd:CI_Citation {
281                    element title {
282                        element gco:CharacterString {
283                          data ($DIF/dif:Entry_Title)
284                          }
285                    },
286                    (: Creation date : note use codeList value! :)
287                    element date {
288                        element gmd:CI_Date {
289                            element date {
290                                element gco:DateTime {
291                                    data($DIF/dif:DIF_Creation_Date)
292                                }
293                             },
294                            element dateType {
295                                    element gmd:CI_DateTypeCode {
296                                        attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"},
297                                        attribute codeListValue {"CI_DateTypeCode"},
298                                        string('creation')
299                                    }
300                                }
301                            } (::)
302                        }, (:/date :)
303                        element date {
304                            element gmd:CI_Date {
305                                element date {
306                                        element gco:DateTime {
307                                            data($DIF/dif:DIF_Revision_History)
308                                         }
309                                 },
310                                 element dateType {
311                                      element gmd:CI_DateTypeCode {
312                                                attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"},
313                                                attribute codeListValue {"CI_DateTypeCode"},
314                                                string('revision')
315                                            }
316                                       
317                                 }
318                            }
319                        },
320                       (:identifier - MEDIN unique ID goes in here :)
321                       element identifier {                                             
322                           element RS_Identifier{
323                               element code {
324                                   element gco:CharacterString {
325                                       data($DIF/dif:Entry_ID)
326                                   }
327                               }
328                           }
329                       } (: /identifier :)
330                    (:}:)
331                }
332            },
333           
334            element gmd:abstract {
335                element gco:CharacterString {
336                    data ($DIF/dif:Summary)
337                 }
338             },
339             
340           
341            (: pointOf Contact info in here :)
342             
343              if (exists($DIF/dif:Data_Center)) then
344              (:for $roleID in $DIF/dif:Data_Center
345         return:)
346         
347             element gmd:pointOfContact {
348              element gmd:CI_ResponsibleParty {
349                  element   gmd:individualName {
350                      element gco:CharacterString {
351                      data($DIF/dif:Data_Center/dif:Personnel/dif:Role)
352                  }
353               },
354               element organisationName {
355                   element gco:CharacterString {
356                      data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Short_Name)
357                    }
358               },
359               element contactInfo {
360                   element gmd:CI_Contact {
361                        if (exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone) or exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
362                           element phone {
363                               element gmd:CI_Telephone {
364                                   if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone)) then
365                                       element voice {
366                                           element gco:CharacterString {
367                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Phone)
368                                                }
369                                       }
370                                     else (),
371                                     if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
372                                       element facsimile {
373                                           element gco:CharacterString {
374                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Fax)
375                                                }
376                                       }
377                                     else ()                                     
378                               }                           
379                        } else ()
380                    },(:/phone:)
381                    element address {
382                        element gmd:CI_Address {
383                       
384                            (:NOTE: in stubISO - first line of address is ALWAYS data centre longname (or if its not available, the short name again) :)
385                            if (exists($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)) then
386                            element deliveryPoint {
387                                element gco:CharacterString {
388                                              data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)
389                                }
390                            }
391                            else (),
392                            (: Now the rest of the address - delimit with commas to save some elements!:)
393                            for $Address in $DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Address
394                            return
395                                element deliveryPoint {
396                                    element gco:CharacterString {
397                                             data($Address)
398                                    }
399                                },
400                             element city {
401                                 element gco:CharacterString {
402                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:City)
403                                    }
404                             },
405                             element postalCode {
406                                 element gco:CharacterString {
407                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Postal_Code)
408                                    }
409                             },
410                             element country {
411                                  element gco:CharacterString {
412                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Country)
413                                    }
414                             },
415                             element electronicMailAddress {
416                                  element gco:CharacterString {
417                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Email)
418                                    }
419                             }
420                        }
421                    } (:/address:)
422               }, (:/contactInfo:)
423              element role {
424                  element gmd:CI_RoleCode {
425                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
426                      attribute codeListValue {"CI_RoleCode_distributor"},
427                      string('distributor')
428                  }
429              }
430           }
431       
432             
433             } (: /pointOfContact :)
434             else (),
435             
436             (: Originating data centre - Mandatory :)
437             if (exists($DIF/dif:Originating_Center)) then
438      element gmd:pointOfContact {
439          element gmd:CI_ResponsibleParty {
440              element   gmd:organisationName {
441                  element gco:CharacterString {
442                      data($DIF/dif:Originating_Center)
443              },             
444              element role {
445                  element gmd:CI_RoleCode {
446                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
447                      attribute codeListValue {"CI_RoleCode_originator"},
448                      string('originator')
449                  }
450              }
451           }
452      } (: /gmd:pointOfContact :)
453       }     
454       
455       else     
456      (: otherwise take it from the Data_Centre field - should be there in CEDA records
457      else (), :)
458     
459      if (exists($DIF/dif:Data_Center)) then
460              (:for $roleID in $DIF/dif:Data_Center
461         return:)
462         element gmd:pointOfContact {
463          element gmd:CI_ResponsibleParty {
464              element   gmd:individualName {
465                  element gco:CharacterString {
466                      data($DIF/dif:Data_Center/dif:Personnel/dif:Role)
467                  }
468               },
469               element organisationName {
470                   element gco:CharacterString {
471                      data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Short_Name)
472                    }
473               },
474               element contactInfo {
475                   element gmd:CI_Contact {
476                        if (exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone) or exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
477                           element phone {
478                               element gmd:CI_Telephone {
479                                   if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone)) then
480                                       element voice {
481                                           element gco:CharacterString {
482                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Phone)
483                                                }
484                                       }
485                                     else (),
486                                     if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
487                                       element facsimile {
488                                           element gco:CharacterString {
489                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Fax)
490                                                }
491                                       }
492                                     else ()                                     
493                               }                           
494                        } else ()
495                    },(:/phone:)
496                    element address {
497                        element gmd:CI_Address {
498                       
499                            (:NOTE: in stubISO - first line of address is ALWAYS data centre longname (or if its not available, the short name again) :)
500                            if (exists($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)) then
501                            element deliveryPoint {
502                                element gco:CharacterString {
503                                              data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)
504                                }
505                            }
506                            else (),
507                            (: Now the rest of the address - delimit with commas to save some elements!:)
508                            for $Address in $DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Address
509                            return
510                                element deliveryPoint {
511                                    element gco:CharacterString {
512                                             data($Address)
513                                    }
514                                },
515                             element city {
516                                 element gco:CharacterString {
517                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:City)
518                                    }
519                             },
520                             element postalCode {
521                                 element gco:CharacterString {
522                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Postal_Code)
523                                    }
524                             },
525                             element country {
526                                  element gco:CharacterString {
527                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Country)
528                                    }
529                             },
530                             element electronicMailAddress {
531                                  element gco:CharacterString {
532                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Email)
533                                    }
534                             }
535                        }
536                    } (:/address:)
537               }, (:/contactInfo:)
538              element role {
539                  element gmd:CI_RoleCode {
540                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
541                      attribute codeListValue {"CI_RoleCode_originator"},
542                      string('originator')
543                  }
544              }
545           }
546       
547             
548             } (: /pointOfContact :)
549             else ()
550             
551        }, (: /MD_DataIdentification :)
552     
553      (: ************* Keyword **********************:)
554      if (exists ($DIF/dif:Keyword)) then
555          for $keyword in $DIF/dif:Keyword
556          return
557              element gmd:descriptiveKeywords {
558                  element gmd:MD_Keywords {
559                      element gmd:keyword {
560                          (: this is how you add an attribute in xquery..! :)
561                          attribute xlink:href {"http://vocab.ndg.nerc.ac.uk/term/N010/0"},
562                          attribute xlink:title {"DIF Keyword"},
563                          element gmx:anchor  {                             
564                              data($keyword)
565                          }
566                         }
567                        }
568                       } (:/gmd:descriptiveKeywords:)
569      else (),           
570      (: ************* /Keyword **********************:)
571     
572      (: ************* Parameters **********************:)
573      (:
574     
575      NOTE:  In order to translate the GCMD Parameter element into ISO, this single ISO topicCategory element holds the DIF/Parameters/Term - the full "Triple" is held in
576      MD_Metadata/distributionInfo/gmd:MD_Distribution/transferOptions/gmd:MD_DigitalTransferOptions/online/gmd:CI_OnlineResource  :
577     
578      TODO: look up GCMD topic categories as an ISO codelist for this element?
579     
580      ) :)
581       if (exists ($DIF/dif:Parameters)) then
582           for $Parameters in $DIF/dif:Parameters
583           return
584           element gmd:topicCategory {
585                  element gmd:MD_TopicCategoryCode {
586                      data($Parameters/dif:Term)
587                     
588                      (:element gmd:keyword {
589                           this is how you add an attribute in xquery..!
590                          attribute xlink:href {"http://vocab.ndg.nerc.ac.uk/term/N010/0"},
591                          attribute xlink:title {"DIF Parameter"},
592                          attribute xlink:Category {"DIF Parameter"},
593                          attribute xlink:Topic {"DIF Parameter"},
594                         
595                          element gmx:anchor  {                             
596                             
597                          }
598                         } :)
599                        }
600                       } (:/gmd:descriptiveKeywords:)
601      else (),
602       
603       (: ************* /Parameters **********************:)
604     
605      (:If any space or time elements in original dif then must put in the gmd:extent element  - remember this is "stub" iso so doesnt have to be valid:)
606        if (exists($DIF/dif:Spatial_Coverage) or exists($DIF/dif:Paleo_Temporal_Coverage) or exists($DIF/dif:Location) or exists($DIF/dif:Temporal_Coverage)) then
607       
608                element gmd:extent {
609                  element gmd:EX_Extent {
610                 
611                  (: Spatial Information - if its there... :)     
612                  if (exists($DIF/dif:Spatial_Coverage)  or exists($DIF/dif:Location))  then
613     
614                      for $boundingbox in $DIF/dif:Spatial_Coverage[exists(dif:Northernmost_Latitude)
615                        and exists(dif:Southernmost_Latitude)
616                        and exists(dif:Easternmost_Longitude)
617                        and exists(dif:Westernmost_Longitude)]
618                     return
619                 
620                      element gmd:geographicElement {
621                          element gmd:EX_GeographicBoundingBox {                     
622                             
623                              element gmd:westBoundLongitude {
624                                  element gco:Decimal {
625                                      data(inputParse:fix-coord($boundingbox/dif:Westernmost_Longitude))
626                                   }
627                                },
628                                element gmd:eastBoundLongitude {
629                                  element gco:Decimal {
630                                      data(inputParse:fix-coord($boundingbox/dif:Easternmost_Longitude))
631                                   }
632                                },
633                                element gmd:southBoundLongitude {
634                                  element gco:Decimal {
635                                      data(inputParse:fix-coord($boundingbox/dif:Southernmost_Latitude))
636                                   }
637                                },
638                                 element gmd:northBoundLongitude {
639                                  element gco:Decimal {
640                                      data(inputParse:fix-coord($boundingbox/dif:Northernmost_Latitude))
641                                   }
642                                }
643                               }
644                              }  (: /gmd:geographicElement:)
645                              else (),
646                             
647                              (: temporal info - if it exists :)
648                              if (exists($DIF/dif:Temporal_Coverage) or exists($DIF/dif:Paleo_Temporal_Coverage) or exists($DIF/dif:Chronostratigraphic_Unit)) then
649                              for $temporalcoverage in $DIF/dif:Temporal_Coverage[exists(dif:Start_Date)]
650                              return
651                              element  gmd:temporalElement {                   
652                                    element gmd:EX_TemporalExtent {
653                                        element gmd:extent {
654                                            element gml:TimePeriod {
655                                            (: Note in ISO19139 schemas both start and end elements must be there even if data for only one... :)
656                                                element gml:beginPosition {
657                                                    string($temporalcoverage/dif:Start_Date)
658                                                },
659                                                element gml:endPosition {
660                                                    string($temporalcoverage/dif:End_Date)
661                                                }
662                                            }
663                                    }                                 
664                               },                                                           
665                             for $paleotemporalcoverage in $DIF/dif:Paleo_Temporal_Coverage[exists(dif:Paleo_Start_Date)]
666                             return
667                             element  gmd:temporalElement {                   
668                                    element gmd:EX_TemporalExtent {
669                                        element gmd:extent {
670                                            element gml:TimePeriod {
671                                            (: Note in ISO19139 schemas both start and end elements must be there even if data for only one... :)
672                                                element gml:beginPosition {
673                                                    string($paleotemporalcoverage/dif:Paleo_Start_Date)
674                                                },
675                                                element gml:endPosition {
676                                                    string($paleotemporalcoverage/dif:Paleo_Stop_Date)
677                                                }
678                                            }
679                                    }                                 
680                               }                             
681                             }                             
682                             } (: /gmd:temporalElement :)                             
683                             else ()                 
684                            }                             
685                } (: /gmd:extent :)       
686       else ()                     
687      },     (: /gmd:identificationInfo  :)
688     
689       (: ***** distributionInfo ****:)     
690      (:
691      This is to hold Parameters and Related_URL
692      :)
693      if (exists ($DIF/dif:Parameters) or exists ($DIF/dif:Related_URL)) then
694           element distributionInfo {
695              element gmd:MD_Distribution {
696                  element gmd:distributionFormat {
697                      attribute gco:nilReason {"inapplicable"} (: According to MEDIN docs this element needed for ISO19115 compliancy :)
698                  }, (:/gmd/distributionFormat :)
699                  (:
700                      NOTE: this element sequence is designed to hold the full GCMD DIF Parameter element - see topicCategory in identificationInfo for breif inspire compliant codes
701                  :)
702                  if (exists ($DIF/dif:Parameters)) then
703                  for $Parameters in $DIF/dif:Parameters
704                   return             
705                       element transferOptions {
706                          element gmd:MD_DigitalTransferOptions {
707                               element onLine {
708                                   element gmd:CI_OnlineResource {
709                                       element linkage {
710                                           element gmd:URL {
711                                               data($Parameters/dif:Topic)  (: this should take the topic URL to the GCMD list :)
712                                           }
713                                       },
714                                       element name {
715                                           element gco:CharacterString {
716                                               data ($Parameters/dif:Category) (: this should take the Category to the GCMD list :)
717                                           }
718                                       },
719                                      element description {
720                                          element gco:CharacterString {
721                                               data ($Parameters/dif:Term) (: this should take the Term to the GCMD list :)
722                                           }
723                                      },
724                                      element function {
725                                          element gmd:CI_onLineFunctionCode {
726                                              string('DIF:PARAMETERS')
727                                          }
728                                      }
729                                    }
730                                }
731                           }
732                      } (: /transferOptions :)
733                      else (), 
734                  (: end of Parameters :)
735                  (:
736                     Deal with online resources now - dif:Related_URL - NOTE: currently handle services in this way until we can resolve the srv namespace issue and schema (MEDIN docs p15)
737                  :)
738                   if (exists ($DIF/dif:Related_URL)) then
739                      for $Related_URL in $DIF/dif:Related_URL
740                       return             
741                           element transferOptions {
742                              element gmd:MD_DigitalTransferOptions {
743                               element onLine {
744                                   element gmd:CI_OnlineResource {
745                                       element linkage {
746                                           element gmd:URL {
747                                               data($Related_URL/dif:URL)  (: this should take the topic URL to the GCMD list :)
748                                           }
749                                       },
750                                       element name {
751                                           element gco:CharacterString {
752                                               data ($Related_URL/dif:URL_Content_Type) (: this should take the Category to the GCMD list :)
753                                           }
754                                       },
755                                      element description {
756                                          element gco:CharacterString {
757                                               data ($Related_URL/dif:Description) (: this should take the Term to the GCMD list :)
758                                           }
759                                      },
760                                      element function {
761                                          element gmd:CI_onLineFunctionCode {
762                                              string('DIF:RELATED_URL')
763                                          }
764                                      }
765                                    }
766                                }
767                           }
768                           } (: /transferOptions :)
769                       else ()
770                       (: end of Related_URL :)
771                 }                 
772               } (: /distributionInfo :)
773        else ()             
774      } (: /MD_Metadata:)
775   
776
777
Note: See TracBrowser for help on using the repository browser.