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

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

Change d2b to operate "per discovery record"

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 {'/db/discovery'};
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_iso_topic_list as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/iso_topic_list.html'};
15declare variable $cf_standard_names as xs:string {'http://www.cgd.ucar.edu/cms/eaton/cf-metadata/standard_name.html'};
16declare variable $iso_topic_list as xs:string {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'};
17declare variable $input_repository as xs:string {'Input_Repository_Code'};
18declare variable $input_repository_local as xs:string {'Input_Repository_Code_LocalID'};
19
20for $DIF in collection($input_collection)/dif:DIF[dif:Entry_ID='NOCSDAT100']
21return
22element dgMetadata {
23        element dgMetadataRecord {
24                element dgMetadataID {
25                        element schemeIdentifier {'NDG-B0'},
26                        element repositoryIdentifier {$input_repository},
27                        element localIdentifier {string($DIF/dif:Entry_ID)}
28                },
29                element dgMetadataDescription {
30                        element metadataDescriptionID {
31                                element schemeIdentifier {'NDG-B0'},
32                                element repositoryIdentifier {$input_repository},
33                                element localIdentifier {concat('generated_desc-', string($DIF/dif:Entry_ID))}
34                        },
35                        element metadataDescriptionLastUpdated {current-date()}                 ,
36                        element abstract {
37                                element abstractText {string($DIF/dif:Summary)}
38                        }
39                },
40                element name {string($DIF/dif:Entry_Title)},
41                element abbreviation {string($DIF/dif:Entry_Title)},
42                element dgDataEntity {
43                        element dgDataSetType {''},
44                        element dgDataSummary {
45                                element dgParameterSummary {
46                                        element dgParameterValue {
47                                                element dgValueDataParameter {
48                                                        element Value {''},
49                                                        element dgStandardUnit {
50                                                                element dgValidTerm {'dummy'},
51                                                                element dgValidTermID {
52                                                                        element ParentListID {'http://vocabs.ndg.nerc.ac.uk/null.'},
53                                                                        element TermID {escape-uri('dummy unit', true())}
54                                                                }
55                                                        }
56                                                }
57                                        },
58                                        element dgStdParameterMeasured {
59                                                element dgValidTerm {'dummy'},
60                                                element dgValidTermID {
61                                                        element ParentListID {'http://vocabs.ndg.nerc.ac.uk/null.'},
62                                                        element TermID {escape-uri('dummy term', true())}
63                                                }
64                                        },
65                                        element ParameterName {'dummy term'},
66                                        element ParameterAbbreviation {'dummy term'}
67                                },
68                                if (exists($DIF/(dif:Spatial_Coverage)) or exists($DIF/dif:Temporal_Coverage)) then
69                                        element dgDataCoverage {
70                                                if (exists($DIF/dif:Spatial_Coverage/dif:Northernmost_Latitude)) then
71                                                        element dgSpatialCoverage {
72                                                                for $boundingbox in $DIF/dif:Spatial_Coverage[exists(dif:Northernmost_Latitude)]
73                                                                return
74                                                                        element BoundingBox {
75                                                                                element Limit_North {string($boundingbox/dif:Northernmost_Latitude)},
76                                                                                element Limit_South {string($boundingbox/dif:Southernmost_Latitude)},
77                                                                                element Limit_West {string($boundingbox/dif:Westernmost_Longitude)},
78                                                                                element Limit_East {string($boundingbox/dif:Easternmost_Longitude)}
79                                                                        }
80                                                        }
81                                                else (),
82                                                if (exists($DIF/dif:Temporal_Coverage/dif:Start_Date)) then
83                                                        element dgTemporalCoverage {
84                                                                for $temporalcoverage in $DIF/dif:Temporal_Coverage[exists(dif:Start_Date) and exists(dif:Stop_Date)]
85                                                                return
86                                                                        element DateRange {
87                                                                                element DateRangeStart {string($temporalcoverage/dif:Start_Date)},
88                                                                                element DateRangeEnd {string($temporalcoverage/dif:Stop_Date)}
89                                                                        }
90                                                        }
91                                                else ()
92                                        }
93                                else ()
94                        },
95                        element dgDataRoles {
96                                if (exists($DIF/(dif:Data_Set_Citation/dif:Dataset_Creator | dif:Originating_Center))) then
97                                        element dgDataCreator {
98                                                element dgMetadataID {
99                                                        element schemeIdentifier {'NDG-B0'},
100                                                        element repositoryIdentifier {$input_repository},
101                                                        element localIdentifier {concat('generated_creator-', string($DIF/dif:Entry_ID))}
102                                                },
103                                                element roleName {'Data Creator'},
104                                                element abbreviation {'Creator'},
105                                                for $creatorID in $DIF/(dif:Data_Set_Citation/dif:Dataset_Creator | dif:Originating_Center)
106                                                return
107                                                element dgRoleHolder {
108                                                        element dgOrganisationID {
109                                                                element schemeIdentifier {'NDG-B0'},
110                                                                element repositoryIdentifier {$input_repository},
111                                                                element localIdentifier  {escape-uri(concat('generated_orgcit-', string($creatorID)), true())}
112                                                        },
113                                                element startDate {current-date()}
114                                                }
115                                        }
116                                else (),
117                                element dgDataCurator {
118                                        element dgMetadataID {
119                                                element schemeIdentifier {'NDG-B0'},
120                                                element repositoryIdentifier {$input_repository},
121                                                element localIdentifier {concat('generated_curator-', string($DIF/dif:Entry_ID))}
122                                        },
123                                        element roleName {'Data Curator'},
124                                        element abbreviation {'Curator'},
125                                        element dgRoleHolder {
126                                                element dgOrganisationID {
127                                                        element schemeIdentifier {'NDG-B0'},
128                                                        element repositoryIdentifier {$input_repository},
129                                                        element localIdentifier {$input_repository_local}
130                                                },
131                                        element startDate {current-date()}
132                                        }
133                                }
134                        }
135                },
136                element dgStructuredKeyword {
137                        element dgValidTerm {'MDIP'},
138                        element dgValidTermID {
139                                element ParentListID {$ndg_data_provider_vocab},
140                                element TermID {'NDGO0001'}
141                        }
142                },
143                for $structuredKeywords in $DIF/dif:Keywords
144                return
145                        element dgStructuredKeyword {
146                                element dgValidTerm {$structuredKeywords},
147                                element dgValidTermID {
148                                        element ParentListID {$unknown_vocab_id},
149                                        element TermID {escape-uri($structuredKeywords, true())}
150                                }
151                        },
152                for $structuredKeywords in $DIF/dif:ISO_Topic_Category
153                return
154                        element dgStructuredKeyword {
155                                element dgValidTerm {string($structuredKeywords)},
156                                element dgValidTermID {
157                                        element ParentListID {$gcmd_iso_topic_list},
158                                        element TermID {escape-uri($structuredKeywords, true())}
159                                }
160                        },
161                if (exists($DIF/dif:DIF_Creation_Date) or exists($DIF/dif:Last_DIF_Revision_Date)) then
162                        element dgMetadataProvenance {
163                                if (exists($DIF/dif:DIF_Creation_Date)) then
164                                        element RecordCreation {
165                                                element CreatedDate {
166                                                        if (string($DIF/dif:DIF_Creation_Date) castable as xs:date) then
167                                                                string($DIF/dif:DIF_Creation_Date) cast as xs:date
168                                                        else (current-date())
169                                                },
170                                        element CreatedBy {$input_repository}
171                                        }
172                                else
173                                        element RecordCreation {
174                                                element CreatedDate {current-date()},
175                                                element CreatedBy {'MOLES Import'}
176                                        },
177                                if (exists($DIF/dif:Last_DIF_Revision_Date)) then
178                                        element RecordUpdate {
179                                                element UpdateDate {
180                                                        if (string($DIF/dif:Last_DIF_Revision_Date) castable as xs:date) then
181                                                                string($DIF/dif:Last_DIF_Revision_Date) cast as xs:date
182                                                        else (current-date())
183                                                },
184                                                element UpdatedBy {$input_repository}
185                                        }
186                                else ()
187                        }
188                else ()
189        } (: </dgMetadataRecord>:),
190        for $creator in distinct-values($DIF/(dif:Data_Set_Citation/dif:Dataset_Creator | dif:Originating_Center))
191        return
192                element dgOrganisation {
193                        element dgMetadataID {
194                                element schemeIdentifier {'NDG-B0'},
195                                element repositoryIdentifier {$input_repository},
196                                element localIdentifier {escape-uri(concat('generated_orgcit-', string($creator)), true())}
197                        },
198                        element name {string($creator)},
199                        element abbreviation {string($creator)},
200                        element contactDetails {''}
201                }
202} (:    </dgMetadata> :)
Note: See TracBrowser for help on using the repository browser.