source: TI07-MOLES/trunk/MDIP/XQueries/MDIP2MOLES.xquery @ 1977

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/MDIP/XQueries/MDIP2MOLES.xquery@1977
Revision 1977, 12.6 KB checked in by ko23, 13 years ago (diff)

MOLES schema error fix

Line 
1(: Version for one MDIP 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 xsi='http://www.w3.org/2001/XMLSchema-instance';
7declare namespace mdip='http://www.dassh.ac.uk';
8declare namespace gco='http://www.isotc211.org/2005/gco';
9declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions';
10declare variable $input_collection as xs:string {'TargetCollection'};
11
12declare variable $input_repository as xs:string {'Input_Repository_Code'};
13declare variable $input_repository_local as xs:string {'Input_Repository_LocalID'};
14declare variable $input_DatasetIdentifier as xs:string {'Input_Entry_ID'};
15
16declare variable $unknown_vocab_id as xs:string {'http://vocab.ndg.nerc.ac.uk/null'};
17
18declare variable $bodc_parameter_discovery_vocab as xs:string {'http://vocab.ndg.nerc.ac.uk/P021'};
19
20declare variable $cf_standard_names as xs:string {'http://www.cgd.ucar.edu/cms/eaton/cf-metadata/standard_name.html'};
21
22(: declare variable $gcmd_science_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html'}; :)
23declare variable $gcmd_science_valids as xs:string {'http://vocab.ndg.nerc.ac.uk/041'};
24declare variable $gcmd_project_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/projects.html'};
25declare variable $gcmd_location_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/locations.html'};
26declare variable $gcmd_paleotemporal_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/paleotemporal.html'};
27declare variable $gcmd_iso_topic_list as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/iso_topic_list.html'};
28
29declare variable $iho_s23_list as xs:string {'http://vocab.ndg.nerc.ac.uk/C161'};
30
31(: declare variable $iso_topic_list as xs:string {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'}; :)
32declare variable $iso_topic_list as xs:string {'http://vocab.ndg.nerc.ac.uk/P051'};
33declare variable $ISO_639-2_ns as xs:string{'UKGemini_Langauge_Categories'};
34declare variable $ISO_3166_ns as xs:string{'UKGemini_Land_Area_Categories'};
35
36declare variable $ndg_data_provider_vocab as xs:string {'http://vocab.ndg.nerc.ac.uk/N010'};
37declare variable $ndg_vertical_extent_base as xs:string {'http://vocab.ndg.nerc.ac.uk/null'};
38
39declare function f:fix-coord($e as element()) as element()
40(: Parse a non-decimal co-ordinate element,  parse to see if it's possible to convert to
41    a decimal co-ordinate, and do so, else return the rubbish provided :)
42{
43if ($e castable as xs:decimal) then 
44        $e
45else
46        let $value := substring(data($e), 1, string-length($e)-1)
47        let $point := lower-case(data($e))
48        return
49        if ($value  castable as xs:decimal) then 
50                if (ends-with($point, 'n')) then
51                        element {name($e)} {$value}
52                else if (ends-with($point, 's')) then
53                        element {name($e)} {concat('-', $value)}
54                else if (ends-with($point, 'e')) then
55                        element {name($e)} {$value}
56                else if (ends-with($point, 'w')) then
57                        element {name($e)} {concat('-', $value)}
58                else $e
59        else  $e
60} ;
61
62for $MDIP in collection($input_collection)/mdip:Metadata[mdip:DatasetIdentifier=$input_DatasetIdentifier]
63return
64element dgMetadata {
65        element dgMetadataRecord {
66                element dgMetadataID {
67                        element schemeIdentifier {'NDG-B0'},
68                        element repositoryIdentifier {$input_repository},
69                        element localIdentifier {string($MDIP/mdip:DatasetIdentifier)}
70                },
71                element dgMetadataDescription {
72                        element metadataDescriptionID {
73                                element schemeIdentifier {'NDG-B0'},
74                                element repositoryIdentifier {$input_repository},
75                                element localIdentifier {concat('generated_desc-', string($MDIP/mdip:DatasetIdentifier))}
76                        },
77                        element metadataDescriptionLastUpdated {current-date()}                 ,
78                        element abstract {
79                                element abstractText {string($MDIP/mdip:Abstract)}
80                        }
81                },
82                element name {string($MDIP/mdip:Title)},
83                element abbreviation {string($MDIP/mdip:Title)},
84                element dgDataEntity {
85                        element dgDataSetType {''},
86                        element dgDataSummary {
87                                for $parameter in $MDIP/mdip:Subject[SubjectVocab=$bodc_parameter_discovery_vocab]
88                                return
89                                        element dgParameterSummary {
90                                                element dgParameterValue {
91                                                        element dgValueDataParameter {
92                                                                element Value {''},
93                                                                element dgStandardUnit {
94                                                                        element dgValidTerm {'dummy'},
95                                                                        element dgValidTermID {
96                                                                                element ParentListID {$unknown_vocab_id},
97                                                                                element TermID {escape-uri('dummy unit', true())}
98                                                                        }
99                                                                }
100                                                        }
101                                                },
102                                                element dgStdParameterMeasured {
103                                                        element dgValidTerm {string($parameter/mdip:SubjectName)},
104                                                                element dgValidTermID {
105                                                                        element ParentListID {string($parameter/mdip:SubjectVocab)},
106                                                                        element TermID {string($parameter/mdip:SubjectCode)}
107                                                                }
108                                                },
109                                                element ParameterName {string($parameter/mdip:SubjectName)},
110                                                element ParameterAbbreviation {string($parameter/mdip:SubjectName)}
111                                        },
112                                element dgDataCoverage {
113                                                element dgSpatialCoverage {
114                                                        element BoundingBox {
115                                                                element LimitNorth {data(f:fix-coord($MDIP/mdip:NorthCoOrdinate))},
116                                                                element LimitSouth {data(f:fix-coord($MDIP/mdip:SouthCoOrdinate))},
117                                                                element LimitWest {data(f:fix-coord($MDIP/mdip:WestCoOrdinate))},
118                                                                element LimitEast {data(f:fix-coord($MDIP/mdip:EastCoOrdinate))}
119                                                        },
120                                                        for $location in $MDIP/mdip:Extent
121                                                        return
122                                                                element dgArea {
123                                                                        element dgValidTerm {string($location/mdip:ExtentName)},
124                                                                        element dgValidTermID {
125                                                                                element ParentListID {string($location/mdip:ExtentVocab)},
126                                                                                element TermID {string($location/mdip:ExtentCode)}
127                                                                        }
128                                                                },
129                                                        for $location in $MDIP/mdip:VerticalExtent
130                                                        return
131                                                                element dgVerticalExtent {
132                                                                        element dgVerticalExtentBaseRef {
133                                                                                element dgValidTerm {if (exists($location/VerticalDatum)) then $location/VerticalDatum else 'default'},
134                                                                                element dgValidTermID {
135                                                                                        element ParentListID {'$unknown_vocab_id'},
136                                                                                        element TermID {escape-uri(string($location/mdip:VerticalDatum), true())}
137                                                                                }
138                                                                        },
139                                                                        if (exists($location/mdip:Minimum) and exists($location/mdip:Maximum)) then
140                                                                                element dgVerticalExtentRange{
141                                                                                        element dgVerticalExtentRangeMin {data($location/mdip:Minimum)},
142                                                                                        element dgVerticalExtentRangeMax {data($location/mdip:Maximum)}
143                                                                                }
144                                                                        else
145                                                                                element dgVerticalExtentLevel{
146                                                                                        if (exists($location/mdip:Minimum)) then element dgVerticalExtentLevelValue {data($location/mdip:Minimum)}
147                                                                                        else element dgVerticalExtentLevelValue {data($location/mdip:Maximum)}
148                                                                                }
149                                                                }
150                                                } (: /dgSpatialCoverage :),
151                                                element dgTemporalCoverage { (: didn't bother trying to validate the Dates as the example is naff to start with :)
152                                                        for $date in $MDIP/mdip:Date
153                                                        return
154                                                                if (exists($MDIP/mdip:Date/mdip:DatasetStartDate) and exists($MDIP/mdip:Date/mdip:DatasetEndDate) ) then
155                                                                        element DateRange {
156                                                                                element DateRangeStart {data($MDIP/mdip:Date/mdip:DatasetStartDate)},
157                                                                                element DateRangeEnd {data($MDIP/mdip:Date/mdip:DatasetEndDate)}
158                                                                        }
159                                                                else if (exists($MDIP/mdip:Date/mdip:DatasetStartDate)) then  element DataSingle {data($MDIP/mdip:Date/mdip:DatasetStartDate)}
160                                                                else element DataSingle {data($MDIP/mdip:Date/mdip:DatasetEndDate)}
161                                                }
162                                        } (: /dgDataCoverage :),
163                                        if (exists($MDIP/mdip:DatasetRefDate)) then
164                                                element dgDatasetProvenance {element dgDataPublicationData {data($MDIP/mdip:DatasetRefDate)}}
165                                        else ()
166                        } (: /dgDataSummary :),
167                        element dgDataRoles {
168                                if (exists($MDIP/mdip:Originator)) then
169                                        element dgDataCreator {
170                                                element dgMetadataID {
171                                                        element schemeIdentifier {'NDG-B0'},
172                                                        element repositoryIdentifier {$input_repository},
173                                                        element localIdentifier {concat('generated_creator-', string($MDIP/mdip:DatasetIdentifier))}
174                                                },
175                                                element roleName {'Data Creator'},
176                                                element abbreviation {'Creator'},
177                                                for $creatorID in $MDIP/mdip:Data_Set_Citation/mdip:Dataset_Creator
178                                                return
179                                                element dgRoleHolder {
180                                                        element dgOrganisationID {
181                                                                element schemeIdentifier {'NDG-B0'},
182                                                                element repositoryIdentifier {$input_repository},
183                                                                element localIdentifier  {escape-uri(concat('generated_orgcit-', string($creatorID)), true())}
184                                                        },
185                                                element startDate {current-date()}
186                                                }
187                                        }
188                                else if (exists($MDIP/mdip:Originating_Center)) then
189                                        element dgDataCreator {
190                                                element dgMetadataID {
191                                                        element schemeIdentifier {'NDG-B0'},
192                                                        element repositoryIdentifier {$input_repository},
193                                                        element localIdentifier {concat('generated_creator-', string($MDIP/mdip:DatasetIdentifier))}
194                                                },
195                                                element roleName {'Data Creator'},
196                                                element abbreviation {'Creator'},
197                                                for $creatorID in $MDIP/mdip:Originating_Center
198                                                return
199                                                element dgRoleHolder {
200                                                        element dgOrganisationID {
201                                                                element schemeIdentifier {'NDG-B0'},
202                                                                element repositoryIdentifier {$input_repository},
203                                                                element localIdentifier  {escape-uri(concat('generated_orgcit-', string($creatorID)), true())}
204                                                        },
205                                                element startDate {current-date()}
206                                                }
207                                        }
208                                else (),
209                                element dgDataCurator {
210                                        element dgMetadataID {
211                                                element schemeIdentifier {'NDG-B0'},
212                                                element repositoryIdentifier {$input_repository},
213                                                element localIdentifier {concat('generated_curator-', string($MDIP/mdip:DatasetIdentifier))}
214                                        },
215                                        element roleName {'Data Curator'},
216                                        element abbreviation {'Curator'},
217                                        element dgRoleHolder {
218                                                element dgOrganisationID {
219                                                        element schemeIdentifier {'NDG-B0'},
220                                                        element repositoryIdentifier {$input_repository},
221                                                        element localIdentifier {$input_repository_local}
222                                                },
223                                        element startDate {current-date()}
224                                        }
225                                }
226                        } (: /dgDataRoles :)
227                } (: /dgDataEntity :),
228                element dgStructuredKeyword {
229                        element dgValidTerm {'d2b converted record'},
230                        element dgValidTermID {
231                                element ParentListID {$unknown_vocab_id},
232                                element TermID {'d2b'}
233                        }
234                },
235                for $structuredKeywords in $MDIP/mdip:TopicCategory
236                return
237                        element dgStructuredKeyword {
238                                element dgValidTerm {string($structuredKeywords/mdip:TopicCategory)},
239                                element dgValidTermID {
240                                        element ParentListID {data($structuredKeywords/mdip:TopicCategoryVocab)},
241                                        element TermID {data($structuredKeywords/mdip:TopicCategoryCode)}
242                                }
243                        },
244                for $structuredKeywords in $MDIP/mdip:Subject
245                return
246                        element dgStructuredKeyword {
247                                element dgValidTerm {string($structuredKeywords/mdip:SubjectName)},
248                                element dgValidTermID {
249                                        element ParentListID {data($structuredKeywords/mdip:SubjectVocab)},
250                                        element TermID {data($structuredKeywords/mdip:SubjectCode)}
251                                }
252                        },
253                if (exists($MDIP/mdip:DIF_Creation_Date) or exists($MDIP/mdip:Last_DIF_Revision_Date)) then
254                        element dgMetadataProvenance {
255                                if (exists($MDIP/mdip:DIF_Creation_Date)) then
256                                        element RecordCreation {
257                                                element CreatedDate {
258                                                        if (string($MDIP/mdip:DIF_Creation_Date) castable as xs:date) then
259                                                                string($MDIP/mdip:DIF_Creation_Date) cast as xs:date
260                                                        else (current-date())
261                                                },
262                                        element CreatedBy {$input_repository}
263                                        }
264                                else
265                                        element RecordCreation {
266                                                element CreatedDate {current-date()},
267                                                element CreatedBy {'MOLES Import'}
268                                        },
269                                if (exists($MDIP/mdip:Last_DIF_Revision_Date)) then
270                                        element RecordUpdate {
271                                                element UpdateDate {
272                                                        if (string($MDIP/mdip:Last_DIF_Revision_Date) castable as xs:dateTime) then
273                                                                string($MDIP/mdip:Last_DIF_Revision_Date) cast as xs:dateTime
274                                                        else (current-dateTime())
275                                                },
276                                                element UpdatedBy {$input_repository}
277                                        }
278                                else ()
279                        }
280                else ()
281        } (: </dgMetadataRecord>:),
282        for $creator in $MDIP/mdip:Originator
283        return
284                element dgOrganisation { (: needs expansion... :)
285                        element dgMetadataID {
286                                element schemeIdentifier {'NDG-B0'},
287                                element repositoryIdentifier {$input_repository},
288                                element localIdentifier {escape-uri(concat('generated_orgcit-', string($creator/mdip:OriginatorName)), true())}
289                        },
290                        element name {data($creator/mdip:OriginatorName)},
291                        element abbreviation {data($creator/mdip:OriginatorName)},
292                        element contactDetails {''}
293                }
294} (:    </dgMetadata> :)
Note: See TracBrowser for help on using the repository browser.