source: TI07-MOLES/trunk/DIF/XQuery/DIF2MOLES.xquery @ 1826

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/DIF/XQuery/DIF2MOLES.xquery@1826
Revision 1826, 9.1 KB checked in by ko23, 13 years ago (diff)

Enhancements to parameter naming

Line 
1(: Version for one DIF per dgMetadata instance :)
2(: Note algoritm for creating non-pre-existing organisations :)
3 (: dgPersons are not created as one can't tell automatically which are people and which are orgs, and orgs are simpler :) 
4
5declare default element namespace 'http://ndg.nerc.ac.uk/moles';
6declare namespace dif='http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/';
7declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';
8declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions';
9declare variable $input_collection as xs:string {'TargetCollection'};
10declare variable $unknown_vocab_id as xs:string {'http://vocab.ndg.nerc.ac.uk/null'};
11declare variable $ndg_data_provider_vocab as xs:string {'http://vocab.ndg.nerc.ac.uk/N010'};
12declare variable $gcmd_science_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html'};
13declare variable $gcmd_project_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/projects.html'};
14declare variable $gcmd_location_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/locations.html'};
15declare variable $gcmd_iso_topic_list as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/iso_topic_list.html'};
16declare variable $cf_standard_names as xs:string {'http://www.cgd.ucar.edu/cms/eaton/cf-metadata/standard_name.html'};
17declare variable $iso_topic_list as xs:string {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'};
18declare variable $input_repository as xs:string {'Input_Repository_Code'};
19declare variable $input_repository_local as xs:string {'Input_Repository_LocalID'};
20declare variable $input_entry_id as xs:string {'Input_Entry_ID'};
21
22for $DIF in collection($input_collection)/dif:DIF[dif:Entry_ID=$input_entry_id]
23return
24element dgMetadata {
25        element dgMetadataRecord {
26                element dgMetadataID {
27                        element schemeIdentifier {'NDG-B0'},
28                        element repositoryIdentifier {$input_repository},
29                        element localIdentifier {string($DIF/dif:Entry_ID)}
30                },
31                element dgMetadataDescription {
32                        element metadataDescriptionID {
33                                element schemeIdentifier {'NDG-B0'},
34                                element repositoryIdentifier {$input_repository},
35                                element localIdentifier {concat('generated_desc-', string($DIF/dif:Entry_ID))}
36                        },
37                        element metadataDescriptionLastUpdated {current-date()}                 ,
38                        element abstract {
39                                element abstractText {string($DIF/dif:Summary)}
40                        }
41                },
42                element name {string($DIF/dif:Entry_Title)},
43                element abbreviation {string($DIF/dif:Entry_Title)},
44                element dgDataEntity {
45                        element dgDataSetType {''},
46                        element dgDataSummary {
47                                for $parameter in $DIF/dif:Parameters
48                                return
49                                        element dgParameterSummary {
50                                                element dgParameterValue {
51                                                        element dgValueDataParameter {
52                                                                element Value {''},
53                                                                element dgStandardUnit {
54                                                                        element dgValidTerm {'dummy'},
55                                                                        element dgValidTermID {
56                                                                                element ParentListID {$unknown_vocab_id},
57                                                                                element TermID {escape-uri('dummy unit', true())}
58                                                                        }
59                                                                }
60                                                        }
61                                                },
62                                                element dgStdParameterMeasured {
63                                                        element dgValidTerm {
64                                                                concat (string($parameter/dif:Category), ' > ', string($parameter/dif:Topic), ' > ', string($parameter/dif:Term)),
65                                                                if (exists($parameter/dif:Variable)) then
66                                                                        concat(' > ', string($parameter/dif:Variable))
67                                                                else (),
68                                                                if (exists($parameter/dif:Detailed_Variable)) then
69                                                                        concat(' > ', string($parameter/dif:Detailed_Variable))
70                                                                else ()
71                                                        },
72                                                                element dgValidTermID {
73                                                                        element ParentListID {$gcmd_science_valids},
74                                                                        element TermID {escape-uri($parameter/dif:Category, true())}
75                                                                }
76                                                },
77                                                element ParameterName {'dummy term'},
78                                                element ParameterAbbreviation {'dummy term'}
79                                        },
80                                if (exists($DIF/dif:Spatial_Coverage) or exists($DIF/dif:Location) or exists($DIF/dif:Temporal_Coverage)) then
81                                        element dgDataCoverage {
82                                                if (exists($DIF/dif:Spatial_Coverage/dif:Northernmost_Latitude) or exists($DIF/(dif:Location)))  then
83                                                        element dgSpatialCoverage {
84                                                                for $boundingbox in $DIF/dif:Spatial_Coverage[exists(dif:Northernmost_Latitude)]
85                                                                return
86                                                                        element BoundingBox {
87                                                                                element LimitNorth {string($boundingbox/dif:Northernmost_Latitude)},
88                                                                                element LimitSouth {string($boundingbox/dif:Southernmost_Latitude)},
89                                                                                element LimitWest {string($boundingbox/dif:Westernmost_Longitude)},
90                                                                                element LimitEast {string($boundingbox/dif:Easternmost_Longitude)}
91                                                                        },
92                                                                for $location in $DIF/dif:Location
93                                                                return
94                                                                        element dgArea {
95                                                                                element dgValidTerm {string($location)},
96                                                                                element dgValidTermID {
97                                                                                        element ParentListID {$gcmd_location_valids},
98                                                                                        element TermID {escape-uri($location, true())}
99                                                                                }
100                                                                        }
101                                                        }
102                                                else (),
103                                                if (exists($DIF/dif:Temporal_Coverage/dif:Start_Date)) then
104                                                        element dgTemporalCoverage {
105                                                                for $temporalcoverage in $DIF/dif:Temporal_Coverage[exists(dif:Start_Date) and exists(dif:Stop_Date)]
106                                                                return
107                                                                        element DateRange {
108                                                                                element DateRangeStart {string($temporalcoverage/dif:Start_Date)},
109                                                                                element DateRangeEnd {string($temporalcoverage/dif:Stop_Date)}
110                                                                        }
111                                                        }
112                                                else ()
113                                        }
114                                else ()
115                        },
116                        element dgDataRoles {
117                                if (exists($DIF/(dif:Data_Set_Citation/dif:Dataset_Creator | dif:Originating_Center))) then
118                                        element dgDataCreator {
119                                                element dgMetadataID {
120                                                        element schemeIdentifier {'NDG-B0'},
121                                                        element repositoryIdentifier {$input_repository},
122                                                        element localIdentifier {concat('generated_creator-', string($DIF/dif:Entry_ID))}
123                                                },
124                                                element roleName {'Data Creator'},
125                                                element abbreviation {'Creator'},
126                                                for $creatorID in $DIF/(dif:Data_Set_Citation/dif:Dataset_Creator | dif:Originating_Center)
127                                                return
128                                                element dgRoleHolder {
129                                                        element dgOrganisationID {
130                                                                element schemeIdentifier {'NDG-B0'},
131                                                                element repositoryIdentifier {$input_repository},
132                                                                element localIdentifier  {escape-uri(concat('generated_orgcit-', string($creatorID)), true())}
133                                                        },
134                                                element startDate {current-date()}
135                                                }
136                                        }
137                                else (),
138                                element dgDataCurator {
139                                        element dgMetadataID {
140                                                element schemeIdentifier {'NDG-B0'},
141                                                element repositoryIdentifier {$input_repository},
142                                                element localIdentifier {concat('generated_curator-', string($DIF/dif:Entry_ID))}
143                                        },
144                                        element roleName {'Data Curator'},
145                                        element abbreviation {'Curator'},
146                                        element dgRoleHolder {
147                                                element dgOrganisationID {
148                                                        element schemeIdentifier {'NDG-B0'},
149                                                        element repositoryIdentifier {$input_repository},
150                                                        element localIdentifier {$input_repository_local}
151                                                },
152                                        element startDate {current-date()}
153                                        }
154                                }
155                        }
156                },
157                element dgStructuredKeyword {
158                        element dgValidTerm {'MDIP'},
159                        element dgValidTermID {
160                                element ParentListID {$ndg_data_provider_vocab},
161                                element TermID {'NDGO0001'}
162                        }
163                },
164                for $structuredKeywords in $DIF/dif:Keywords
165                return
166                        element dgStructuredKeyword {
167                                element dgValidTerm {$structuredKeywords},
168                                element dgValidTermID {
169                                        element ParentListID {$unknown_vocab_id},
170                                        element TermID {escape-uri($structuredKeywords, true())}
171                                }
172                        },
173                for $structuredKeywords in $DIF/dif:ISO_Topic_Category
174                return
175                        element dgStructuredKeyword {
176                                element dgValidTerm {string($structuredKeywords)},
177                                element dgValidTermID {
178                                        element ParentListID {$gcmd_iso_topic_list},
179                                        element TermID {escape-uri($structuredKeywords, true())}
180                                }
181                        },
182                if (exists($DIF/dif:DIF_Creation_Date) or exists($DIF/dif:Last_DIF_Revision_Date)) then
183                        element dgMetadataProvenance {
184                                if (exists($DIF/dif:DIF_Creation_Date)) then
185                                        element RecordCreation {
186                                                element CreatedDate {
187                                                        if (string($DIF/dif:DIF_Creation_Date) castable as xs:date) then
188                                                                string($DIF/dif:DIF_Creation_Date) cast as xs:date
189                                                        else (current-date())
190                                                },
191                                        element CreatedBy {$input_repository}
192                                        }
193                                else
194                                        element RecordCreation {
195                                                element CreatedDate {current-date()},
196                                                element CreatedBy {'MOLES Import'}
197                                        },
198                                if (exists($DIF/dif:Last_DIF_Revision_Date)) then
199                                        element RecordUpdate {
200                                                element UpdateDate {
201                                                        if (string($DIF/dif:Last_DIF_Revision_Date) castable as xs:date) then
202                                                                string($DIF/dif:Last_DIF_Revision_Date) cast as xs:date
203                                                        else (current-date())
204                                                },
205                                                element UpdatedBy {$input_repository}
206                                        }
207                                else ()
208                        }
209                else ()
210        } (: </dgMetadataRecord>:),
211        for $creator in distinct-values($DIF/(dif:Data_Set_Citation/dif:Dataset_Creator | dif:Originating_Center))
212        return
213                element dgOrganisation {
214                        element dgMetadataID {
215                                element schemeIdentifier {'NDG-B0'},
216                                element repositoryIdentifier {$input_repository},
217                                element localIdentifier {escape-uri(concat('generated_orgcit-', string($creator)), true())}
218                        },
219                        element name {string($creator)},
220                        element abbreviation {string($creator)},
221                        element contactDetails {''}
222                }
223} (:    </dgMetadata> :)
Note: See TracBrowser for help on using the repository browser.