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

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

fix - missing return statement

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                    (:}:)
321                }
322            },
323           
324            element gmd:abstract {
325                element gco:CharacterString {
326                    data ($DIF/dif:Summary)
327                 }
328             },
329             
330           
331            (: pointOf Contact info in here :)
332             
333              if (exists($DIF/dif:Data_Center)) then
334              (:for $roleID in $DIF/dif:Data_Center
335         return:)
336         
337             element gmd:pointOfContact {
338              element gmd:CI_ResponsibleParty {
339                  element   gmd:individualName {
340                      element gco:CharacterString {
341                      data($DIF/dif:Data_Center/dif:Personnel/dif:Role)
342                  }
343               },
344               element organisationName {
345                   element gco:CharacterString {
346                      data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Short_Name)
347                    }
348               },
349               element contactInfo {
350                   element gmd:CI_Contact {
351                        if (exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone) or exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
352                           element phone {
353                               element gmd:CI_Telephone {
354                                   if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone)) then
355                                       element voice {
356                                           element gco:CharacterString {
357                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Phone)
358                                                }
359                                       }
360                                     else (),
361                                     if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
362                                       element facsimile {
363                                           element gco:CharacterString {
364                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Fax)
365                                                }
366                                       }
367                                     else ()                                     
368                               }                           
369                        } else ()
370                    },(:/phone:)
371                    element address {
372                        element gmd:CI_Address {
373                       
374                            (:NOTE: in stubISO - first line of address is ALWAYS data centre longname (or if its not available, the short name again) :)
375                            if (exists($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)) then
376                            element deliveryPoint {
377                                element gco:CharacterString {
378                                              data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)
379                                }
380                            }
381                            else (),
382                            (: Now the rest of the address - delimit with commas to save some elements!:)
383                            for $Address in $DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Address
384                            return
385                                element deliveryPoint {
386                                    element gco:CharacterString {
387                                             data($Address)
388                                    }
389                                },
390                             element city {
391                                 element gco:CharacterString {
392                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:City)
393                                    }
394                             },
395                             element postalCode {
396                                 element gco:CharacterString {
397                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Postal_Code)
398                                    }
399                             },
400                             element country {
401                                  element gco:CharacterString {
402                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Country)
403                                    }
404                             },
405                             element electronicMailAddress {
406                                  element gco:CharacterString {
407                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Email)
408                                    }
409                             }
410                        }
411                    } (:/address:)
412               }, (:/contactInfo:)
413              element role {
414                  element gmd:CI_RoleCode {
415                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
416                      attribute codeListValue {"CI_RoleCode_distributor"},
417                      string('distributor')
418                  }
419              }
420           }
421       
422             
423             } (: /pointOfContact :)
424             else (),
425             
426             (: Originating data centre - Mandatory :)
427             if (exists($DIF/dif:Originating_Center)) then
428      element gmd:pointOfContact {
429          element gmd:CI_ResponsibleParty {
430              element   gmd:organisationName {
431                  element gco:CharacterString {
432                      data($DIF/dif:Originating_Center)
433              },             
434              element role {
435                  element gmd:CI_RoleCode {
436                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
437                      attribute codeListValue {"CI_RoleCode_originator"},
438                      string('originator')
439                  }
440              }
441           }
442      } (: /gmd:pointOfContact :)
443       }     
444       
445       else     
446      (: otherwise take it from the Data_Centre field - should be there in CEDA records
447      else (), :)
448     
449      if (exists($DIF/dif:Data_Center)) then
450              (:for $roleID in $DIF/dif:Data_Center
451         return:)
452         element gmd:pointOfContact {
453          element gmd:CI_ResponsibleParty {
454              element   gmd:individualName {
455                  element gco:CharacterString {
456                      data($DIF/dif:Data_Center/dif:Personnel/dif:Role)
457                  }
458               },
459               element organisationName {
460                   element gco:CharacterString {
461                      data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Short_Name)
462                    }
463               },
464               element contactInfo {
465                   element gmd:CI_Contact {
466                        if (exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone) or exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
467                           element phone {
468                               element gmd:CI_Telephone {
469                                   if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Phone)) then
470                                       element voice {
471                                           element gco:CharacterString {
472                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Phone)
473                                                }
474                                       }
475                                     else (),
476                                     if(exists($DIF/dif:Data_Center/dif:Personnel/dif:Fax)) then
477                                       element facsimile {
478                                           element gco:CharacterString {
479                                              data($DIF/dif:Data_Center/dif:Personnel/dif:Fax)
480                                                }
481                                       }
482                                     else ()                                     
483                               }                           
484                        } else ()
485                    },(:/phone:)
486                    element address {
487                        element gmd:CI_Address {
488                       
489                            (:NOTE: in stubISO - first line of address is ALWAYS data centre longname (or if its not available, the short name again) :)
490                            if (exists($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)) then
491                            element deliveryPoint {
492                                element gco:CharacterString {
493                                              data($DIF/dif:Data_Center/dif:Data_Center_Name/dif:Long_Name)
494                                }
495                            }
496                            else (),
497                            (: Now the rest of the address - delimit with commas to save some elements!:)
498                            for $Address in $DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Address
499                            return
500                                element deliveryPoint {
501                                    element gco:CharacterString {
502                                             data($Address)
503                                    }
504                                },
505                             element city {
506                                 element gco:CharacterString {
507                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:City)
508                                    }
509                             },
510                             element postalCode {
511                                 element gco:CharacterString {
512                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Postal_Code)
513                                    }
514                             },
515                             element country {
516                                  element gco:CharacterString {
517                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Contact_Address/dif:Country)
518                                    }
519                             },
520                             element electronicMailAddress {
521                                  element gco:CharacterString {
522                                             data($DIF/dif:Data_Center/dif:Personnel/dif:Email)
523                                    }
524                             }
525                        }
526                    } (:/address:)
527               }, (:/contactInfo:)
528              element role {
529                  element gmd:CI_RoleCode {
530                      attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
531                      attribute codeListValue {"CI_RoleCode_originator"},
532                      string('originator')
533                  }
534              }
535           }
536       
537             
538             } (: /pointOfContact :)
539             else ()
540             
541        }, (: /MD_DataIdentification :)
542     
543      (: ************* Keyword **********************:)
544      if (exists ($DIF/dif:Keyword)) then
545          for $keyword in $DIF/dif:Keyword
546          return
547              element gmd:descriptiveKeywords {
548                  element gmd:MD_Keywords {
549                      element gmd:keyword {
550                          (: this is how you add an attribute in xquery..! :)
551                          attribute xlink:href {"http://vocab.ndg.nerc.ac.uk/term/N010/0"},
552                          attribute xlink:title {"DIF Keyword"},
553                          element gmx:anchor  {                             
554                              data($keyword)
555                          }
556                         }
557                        }
558                       } (:/gmd:descriptiveKeywords:)
559      else (),           
560      (: ************* /Keyword **********************:)
561     
562      (: ************* Parameters **********************:)
563      (:
564     
565      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
566      MD_Metadata/distributionInfo/gmd:MD_Distribution/transferOptions/gmd:MD_DigitalTransferOptions/online/gmd:CI_OnlineResource  :
567     
568      TODO: look up GCMD topic categories as an ISO codelist for this element?
569     
570      ) :)
571       if (exists ($DIF/dif:Parameters)) then
572           for $Parameters in $DIF/dif:Parameters
573           return
574           element gmd:topicCategory {
575                  element gmd:MD_TopicCategoryCode {
576                      data($Parameters/dif:Term)
577                     
578                      (:element gmd:keyword {
579                           this is how you add an attribute in xquery..!
580                          attribute xlink:href {"http://vocab.ndg.nerc.ac.uk/term/N010/0"},
581                          attribute xlink:title {"DIF Parameter"},
582                          attribute xlink:Category {"DIF Parameter"},
583                          attribute xlink:Topic {"DIF Parameter"},
584                         
585                          element gmx:anchor  {                             
586                             
587                          }
588                         } :)
589                        }
590                       } (:/gmd:descriptiveKeywords:)
591      else (),
592       
593       (: ************* /Parameters **********************:)
594     
595      (: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:)
596        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
597       
598                element gmd:extent {
599                  element gmd:EX_Extent {
600                 
601                  (: Spatial Information - if its there... :)     
602                  if (exists($DIF/dif:Spatial_Coverage)  or exists($DIF/dif:Location))  then
603     
604                      for $boundingbox in $DIF/dif:Spatial_Coverage[exists(dif:Northernmost_Latitude)
605                        and exists(dif:Southernmost_Latitude)
606                        and exists(dif:Easternmost_Longitude)
607                        and exists(dif:Westernmost_Longitude)]
608                     return
609                 
610                      element gmd:geographicElement {
611                          element gmd:EX_GeographicBoundingBox {                     
612                             
613                              element gmd:westBoundLongitude {
614                                  element gco:Decimal {
615                                      data(inputParse:fix-coord($boundingbox/dif:Westernmost_Longitude))
616                                   }
617                                },
618                                element gmd:eastBoundLongitude {
619                                  element gco:Decimal {
620                                      data(inputParse:fix-coord($boundingbox/dif:Easternmost_Longitude))
621                                   }
622                                },
623                                element gmd:southBoundLongitude {
624                                  element gco:Decimal {
625                                      data(inputParse:fix-coord($boundingbox/dif:Southernmost_Latitude))
626                                   }
627                                },
628                                 element gmd:northBoundLongitude {
629                                  element gco:Decimal {
630                                      data(inputParse:fix-coord($boundingbox/dif:Northernmost_Latitude))
631                                   }
632                                }
633                               }
634                              }  (: /gmd:geographicElement:)
635                              else (),
636                             
637                              (: temporal info - if it exists :)
638                              if (exists($DIF/dif:Temporal_Coverage) or exists($DIF/dif:Paleo_Temporal_Coverage) or exists($DIF/dif:Chronostratigraphic_Unit)) then
639                              for $temporalcoverage in $DIF/dif:Temporal_Coverage[exists(dif:Start_Date)]
640                              return
641                              element  gmd:temporalElement {                   
642                                    element gmd:EX_TemporalExtent {
643                                        element gmd:extent {
644                                            element gml:TimePeriod {
645                                            (: Note in ISO19139 schemas both start and end elements must be there even if data for only one... :)
646                                                element gml:beginPosition {
647                                                    string($temporalcoverage/dif:Start_Date)
648                                                },
649                                                element gml:endPosition {
650                                                    string($temporalcoverage/dif:End_Date)
651                                                }
652                                            }
653                                    }                                 
654                               },                                                           
655                             for $paleotemporalcoverage in $DIF/dif:Paleo_Temporal_Coverage[exists(dif:Paleo_Start_Date)]
656                             return
657                             element  gmd:temporalElement {                   
658                                    element gmd:EX_TemporalExtent {
659                                        element gmd:extent {
660                                            element gml:TimePeriod {
661                                            (: Note in ISO19139 schemas both start and end elements must be there even if data for only one... :)
662                                                element gml:beginPosition {
663                                                    string($paleotemporalcoverage/dif:Paleo_Start_Date)
664                                                },
665                                                element gml:endPosition {
666                                                    string($paleotemporalcoverage/dif:Paleo_Stop_Date)
667                                                }
668                                            }
669                                    }                                 
670                               }                             
671                             }                             
672                             } (: /gmd:temporalElement :)                             
673                             else ()                 
674                            }                             
675                } (: /gmd:extent :)       
676       else ()                     
677      },     (: /gmd:identificationInfo  :)
678     
679       (: ***** distributionInfo ****:)     
680      (:
681      This is to hold Parameters and Related_URL
682      :)
683      if (exists ($DIF/dif:Parameters) or exists ($DIF/dif:Related_URL)) then
684           element distributionInfo {
685              element gmd:MD_Distribution {
686                  element gmd:distributionFormat {
687                      attribute gco:nilReason {"inapplicable"} (: According to MEDIN docs this element needed for ISO19115 compliancy :)
688                  }, (:/gmd/distributionFormat :)
689                  (:
690                      NOTE: this element sequence is designed to hold the full GCMD DIF Parameter element - see topicCategory in identificationInfo for breif inspire compliant codes
691                  :)
692                  if (exists ($DIF/dif:Parameters)) then
693                  for $Parameters in $DIF/dif:Parameters
694                   return             
695                       element transferOptions {
696                          element gmd:MD_DigitalTransferOptions {
697                               element onLine {
698                                   element gmd:CI_OnlineResource {
699                                       element linkage {
700                                           element gmd:URL {
701                                               data($Parameters/dif:Topic)  (: this should take the topic URL to the GCMD list :)
702                                           }
703                                       },
704                                       element name {
705                                           element gco:CharacterString {
706                                               data ($Parameters/dif:Category) (: this should take the Category to the GCMD list :)
707                                           }
708                                       },
709                                      element description {
710                                          element gco:CharacterString {
711                                               data ($Parameters/dif:Term) (: this should take the Term to the GCMD list :)
712                                           }
713                                      },
714                                      element function {
715                                          element gmd:CI_onLineFunctionCode {
716                                              string('DIF:PARAMETERS')
717                                          }
718                                      }
719                                    }
720                                }
721                           }
722                      } (: /transferOptions :)
723                      else (), 
724                  (: end of Parameters :)
725                  (:
726                     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)
727                  :)
728                   if (exists ($DIF/dif:Related_URL)) then
729                      for $Related_URL in $DIF/dif:Related_URL
730                       return             
731                           element transferOptions {
732                              element gmd:MD_DigitalTransferOptions {
733                               element onLine {
734                                   element gmd:CI_OnlineResource {
735                                       element linkage {
736                                           element gmd:URL {
737                                               data($Related_URL/dif:URL)  (: this should take the topic URL to the GCMD list :)
738                                           }
739                                       },
740                                       element name {
741                                           element gco:CharacterString {
742                                               data ($Related_URL/dif:URL_Content_Type) (: this should take the Category to the GCMD list :)
743                                           }
744                                       },
745                                      element description {
746                                          element gco:CharacterString {
747                                               data ($Related_URL/dif:Description) (: this should take the Term to the GCMD list :)
748                                           }
749                                      },
750                                      element function {
751                                          element gmd:CI_onLineFunctionCode {
752                                              string('DIF:RELATED_URL')
753                                          }
754                                      }
755                                    }
756                                }
757                           }
758                           } (: /transferOptions :)
759                       else ()
760                       (: end of Related_URL :)
761                 }                 
762               } (: /distributionInfo :)
763        else ()             
764      } (: /MD_Metadata:)
765   
766
767
Note: See TracBrowser for help on using the repository browser.