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

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

update to get rid of windows dodgy character

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