source: ndgCommon/trunk/ndg/common/xmldb/xquery/mdip2moles.xq @ 4938

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

Update xqueries:

  • make more precise to improve search performance
  • add in full paths to libs to ease use in eXist
  • create new xquery for searching for DIF docs
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(: Not producing valid MOLES as still got to work out parameter vocabulary namespaces in the subject field :) 
5
6import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery';
7import module namespace inputParse='http://ndg.nerc.ac.uk/xquery/lib/inputParse' at 'xmldb:exist:///db/xqueryLib/Utilities/inputParse_xquery_lib.xquery';
8
9declare default element namespace 'http://ndg.nerc.ac.uk/moles';
10declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';
11declare namespace mdip='http://www.oceannet.org/mdip/xml';
12declare namespace gco='http://www.isotc211.org/2005/gco';
13
14declare variable $targetCollection as xs:string := 'TargetCollection';
15declare variable $input_repository as xs:string := 'RepositoryID';
16declare variable $input_repository_local as xs:string := 'repository_localid';
17declare variable $input_DatasetIdentifier as xs:string := 'Input_Entry_ID';
18declare variable $output_local_id as xs:string := 'LocalID';
19
20
21for $MDIP in collection($targetCollection)/mdip:Metadata[mdip:DatasetIdentifier=$input_DatasetIdentifier]
22return
23element dgMetadata {
24        element dgMetadataRecord {
25                element dgMetadataID {
26                        element schemeIdentifier {'NDG-B0'},
27                        element repositoryIdentifier {$input_repository},
28                        if ($output_local_id != 'Output_LocalID') then
29                                element localIdentifier {$output_local_id}
30                        else
31                                element localIdentifier {encode-for-uri(data($MDIP/mdip:DatasetIdentifier))}
32                },
33                element dgMetadataDescription {
34                        element metadataDescriptionID {
35                                element schemeIdentifier {'NDG-B0'},
36                                element repositoryIdentifier {$input_repository},
37                                if ($output_local_id != 'Output_LocalID') then
38                                        element localIdentifier {concat('generated_desc-', $output_local_id)}
39                                else
40                                        element localIdentifier {concat('generated_desc-', encode-for-uri(string($MDIP/mdip:DatasetIdentifier)))}
41                        },
42                        element metadataDescriptionLastUpdated {current-date()}                 ,
43                        element abstract {
44                                element abstractText {string($MDIP/mdip:Abstract)}
45                        }
46                },
47                element name {string($MDIP/mdip:Title)},
48                element abbreviation {string($MDIP/mdip:Title)},
49                element dgDataEntity {
50                        element dgDataSetType {''},
51                        element dgDataSummary {
52                                for $parameter in $MDIP/mdip:Subject[SubjectVocab=$voclib:bodc_parameter_discovery_vocab]
53                                return
54                                        element dgParameterSummary {
55                                                element dgParameterValue {
56                                                        element dgValueDataParameter {
57                                                                element Value {''},
58                                                                element dgStandardUnit {
59                                                                        element dgValidTerm {'dummy'},
60                                                                        element dgValidTermID {
61                                                                                element ParentListID {$voclib:unknown_vocab_id},
62                                                                                element TermID {encode-for-uri('dummy unit')}
63                                                                        }
64                                                                }
65                                                        }
66                                                },
67                                                element dgStdParameterMeasured {
68                                                element dgValidTerm {string($parameter/mdip:SubjectName)},
69                                                                element dgValidTermID {
70                                                                        element ParentListID {string($parameter/mdip:SubjectVocab)},
71                                                                        element TermID {string($parameter/mdip:SubjectCode)}
72                                                                }
73                                                },
74                                                element ParameterName {string($parameter/mdip:SubjectName)},
75                                                element ParameterAbbreviation {string($parameter/mdip:SubjectName)}
76                                        },
77                                element dgDataCoverage {
78                                                element dgSpatialCoverage {
79                                                        element BoundingBox {
80                                                        element LimitNorth {data(inputParse:fix-coord($MDIP/mdip:NorthCoOrdinate))},
81                                                        element LimitSouth {data(inputParse:fix-coord($MDIP/mdip:SouthCoOrdinate))},
82                                                        element LimitWest {data(inputParse:fix-coord($MDIP/mdip:WestCoOrdinate))},
83                                                        element LimitEast {data(inputParse:fix-coord($MDIP/mdip:EastCoOrdinate))}
84                                                        },
85                                                        for $location in $MDIP/mdip:Extent
86                                                        return
87                                                                element dgArea {
88                                                                        element dgValidTerm {string($location/mdip:ExtentName)},
89                                                                        element dgValidTermID {
90                                                                                element ParentListID {string($location/mdip:ExtentVocab)},
91                                                                                element TermID {string($location/mdip:ExtentCode)}
92                                                                        }
93                                                                },
94                                                        for $location in $MDIP/mdip:VerticalExtent
95                                                        return
96                                                                element dgVerticalExtent {
97                                                                        element dgVerticalExtentBaseRef {
98                                                                                element dgValidTerm {if (exists($location/VerticalDatum)) then $location/VerticalDatum else 'default'},
99                                                                                element dgValidTermID {
100                                                                                        element ParentListID {'$voclib:unknown_vocab_id'},
101                                                                                        element TermID {encode-for-uri(string($location/mdip:VerticalDatum))}
102                                                                                }
103                                                                        },
104                                                                        if (exists($location/mdip:Minimum) and exists($location/mdip:Maximum)) then
105                                                                                element dgVerticalExtentRange{
106                                                                                        element dgVerticalExtentRangeMin {data($location/mdip:Minimum)},
107                                                                                        element dgVerticalExtentRangeMax {data($location/mdip:Maximum)}
108                                                                                }
109                                                                        else
110                                                                                element dgVerticalExtentLevel{
111                                                                                        if (exists($location/mdip:Minimum)) then element dgVerticalExtentLevelValue {data($location/mdip:Minimum)}
112                                                                                        else element dgVerticalExtentLevelValue {data($location/mdip:Maximum)}
113                                                                                }
114                                                                }
115                                                } (: /dgSpatialCoverage :),
116                                                element dgTemporalCoverage {
117                                                (: didn't bother trying to validate the Dates as the example is naff to start with :)
118                                                        for $date in $MDIP/mdip:Date
119                                                        return
120                                                                if (exists($MDIP/mdip:Date/mdip:DatasetStartDate) and exists($MDIP/mdip:Date/mdip:DatasetEndDate) ) then
121                                                                        element DateRange {
122                                                                                element DateRangeStart {data($MDIP/mdip:Date/mdip:DatasetStartDate)},
123                                                                                element DateRangeEnd {data($MDIP/mdip:Date/mdip:DatasetEndDate)}
124                                                                        }
125                                                                else if (exists($MDIP/mdip:Date/mdip:DatasetStartDate)) then  element DateSingle {data($MDIP/mdip:Date/mdip:DatasetStartDate)}
126                                                                else element DateSingle {data($MDIP/mdip:Date/mdip:DatasetEndDate)}
127                                                                } (: /dgTemporalCoverage :)
128                                                        } (: /dgDataCoverage :),
129                                        if (exists($MDIP/mdip:DatasetRefDate)) then
130                                                element dgDatasetProvenance {element dgDataPublicationDate {data($MDIP/mdip:DatasetRefDate)}}
131                                        else ()
132                        } (: /dgDataSummary :),
133                        element dgDataRoles {
134                                if (exists($MDIP/mdip:Originator)) then
135                                        element dgDataCreator {
136                                                element dgMetadataID {
137                                                        element schemeIdentifier {'NDG-B0'},
138                                                        element repositoryIdentifier {$input_repository},
139                                                        if ($output_local_id != 'Output_LocalID') then
140                                                                element localIdentifier {concat('generated_creator-', $output_local_id)}
141                                                        else
142                                                                element localIdentifier {concat('generated_creator-', encode-for-uri(string($MDIP/mdip:DatasetIdentifier)))}
143                                                },
144                                                element roleName {'Data Creator'},
145                                                element abbreviation {'Creator'},
146                                                for $creator in $MDIP/mdip:Originator
147                                                return
148                                                element dgRoleHolder {
149                                                        element dgOrganisationID {
150                                                                element schemeIdentifier {'NDG-B0'},
151                                                                element repositoryIdentifier {$input_repository},
152                                                                if ($output_local_id != 'Output_LocalID') then
153                                                                        element localIdentifier {encode-for-uri(concat('generated_orgcit-', string($creator/mdip:OriginatorName), '-', $output_local_id))}
154                                                                else
155                                                                        element localIdentifier {encode-for-uri(concat('generated_orgcit-', string($creator/mdip:OriginatorName), '-', data($MDIP/mdip:DatasetIdentifier)))}
156                                                        },
157                                                element startDate {current-date()}
158                                                }
159                                        }
160                                else if (exists($MDIP/mdip:Originating_Center)) then
161                                        element dgDataCreator {
162                                                element dgMetadataID {
163                                                        element schemeIdentifier {'NDG-B0'},
164                                                        element repositoryIdentifier {$input_repository},
165                                                        if ($output_local_id != 'Output_LocalID') then
166                                                                element localIdentifier {concat('generated_creator-', $output_local_id)}
167                                                        else
168                                                                element localIdentifier {concat('generated_creator-', encode-for-uri(string($MDIP/mdip:DatasetIdentifier)))}
169                                                },
170                                                element roleName {'Data Creator'},
171                                                element abbreviation {'Creator'},
172                                                for $creator in $MDIP/mdip:Originating_Center
173                                                return
174                                                element dgRoleHolder {
175                                                        element dgOrganisationID {
176                                                                element schemeIdentifier {'NDG-B0'},
177                                                                element repositoryIdentifier {$input_repository},
178                                                                if ($output_local_id != 'Output_LocalID') then
179                                                                        element localIdentifier {encode-for-uri(concat('generated_orgcit-', string($creator/mdip:OriginatorName), '-', $output_local_id))}
180                                                                else
181                                                                        element localIdentifier {encode-for-uri(concat('generated_orgcit-', string($creator/mdip:OriginatorName), '-', data($MDIP/mdip:DatasetIdentifier)))}
182                                                        },
183                                                element startDate {current-date()}
184                                                }
185                                        }
186                                else (),
187                                element dgDataCurator {
188                                        element dgMetadataID {
189                                                element schemeIdentifier {'NDG-B0'},
190                                                element repositoryIdentifier {$input_repository},
191                                                if ($output_local_id != 'Output_LocalID') then
192                                                        element localIdentifier {concat('generated_curator-', $output_local_id)}
193                                                else
194                                                        element localIdentifier {concat('generated_curator-', encode-for-uri(string($MDIP/mdip:DatasetIdentifier)))}
195                                        },
196                                        element roleName {'Data Curator'},
197                                        element abbreviation {'Curator'},
198                                        element dgRoleHolder {
199                                                element dgOrganisationID {
200                                                        element schemeIdentifier {'NDG-B0'},
201                                                        element repositoryIdentifier {$input_repository},
202                                                        element localIdentifier {$input_repository_local}
203                                                },
204                                        element startDate {current-date()}
205                                        }
206                                }
207                        } (: /dgDataRoles :)
208                } (: /dgDataEntity :),
209                element dgStructuredKeyword {
210                        element dgValidTerm {'d2b converted record'},
211                        element dgValidTermID {
212                                element ParentListID {$voclib:unknown_vocab_id},
213                                element TermID {'d2b'}
214                        }
215                },
216                for $structuredKeywords in $MDIP/mdip:TopicCategory
217                return
218                        element dgStructuredKeyword {
219                                element dgValidTerm {string($structuredKeywords/mdip:TopicCategory)},
220                                element dgValidTermID {
221                                        element ParentListID {data($structuredKeywords/mdip:TopicCategoryVocab)},
222                                        element TermID {data($structuredKeywords/mdip:TopicCategoryCode)}
223                                }
224                        },
225                for $structuredKeywords in $MDIP/mdip:Subject
226                return
227                        element dgStructuredKeyword {
228                                element dgValidTerm {string($structuredKeywords/mdip:SubjectName)},
229                                element dgValidTermID {
230                                        element ParentListID {data($structuredKeywords/mdip:SubjectVocab)},
231                                        element TermID {data($structuredKeywords/mdip:SubjectCode)}
232                                }
233                        },
234                for $structuredKeywords in $MDIP/mdip:Target
235                return
236                        element dgStructuredKeyword {
237                        element dgValidTerm {string($structuredKeywords/mdip:TargetName)},
238                        element dgValidTermID {
239                        element ParentListID {data($structuredKeywords/mdip:TargetVocab)},
240                        element TermID {data($structuredKeywords/mdip:TargetCode)}
241                        }
242                        },
243                        if (exists($MDIP/mdip:DateOfUpdateOfMetadata)) then
244                        element dgMetadataProvenance {
245                                if (exists($MDIP/mdip:DateOfUpdateOfMetadata)) then
246                                        element RecordCreation {
247                                                element CreatedDate {
248                                                        if (string($MDIP/mdip:DateOfUpdateOfMetadata) castable as xs:date) then
249                                                                string($MDIP/mdip:DateOfUpdateOfMetadata) cast as xs:date
250                                                        else (current-date())
251                                                },
252                                        element CreatedBy {$input_repository}
253                                        }
254                                else
255                                        element RecordCreation {
256                                                element CreatedDate {current-date()},
257                                                element CreatedBy {'MOLES Import'}
258                                        }
259                        } (: dgMetadataProvenance :)
260                else ()
261        } (: </dgMetadataRecord>:),
262        for $creator in $MDIP/mdip:Distributor
263        return
264                element dgOrganisation {
265                (: needs expansion... :)
266                        element dgMetadataID {
267                                element schemeIdentifier {'NDG-B0'},
268                                element repositoryIdentifier {$input_repository},
269                                if ($output_local_id != 'Output_LocalID') then
270                                        element localIdentifier {encode-for-uri(concat('generated_orgcit-', string($creator/mdip:OriginatorName), '-', $output_local_id))}
271                                else
272                                        element localIdentifier {encode-for-uri(concat('generated_orgcit-', string($creator/mdip:OriginatorName), '-', data($MDIP/mdip:DatasetIdentifier)))}
273                        },
274                        element name {data($creator/mdip:DistributorName/mdip:DistributorNameName)},
275                        element abbreviation {data($creator/mdip:DistributorName/mdip:DistributorNameCode)},
276                        element contactDetails {
277                            element eMail {data($creator/mdip:Email)},
278                            element URI {data($creator/../mdip:OnlineResource)}                 
279                        }
280                }
281}
282(:    </dgMetadata> :)
Note: See TracBrowser for help on using the repository browser.