source: TI07-MOLES/trunk/MDIP/XQueries/NDG-MDIP.xquery @ 2372

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

Fix MDIP2MOLES cast (see #655)

Line 
1import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery';
2import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery';
3declare default element namespace 'http://www.oceannet.org/mdip/xml';
4declare namespace moles='http://ndg.nerc.ac.uk/moles';
5declare namespace gco='http://www.isotc211.org/2005/gco';
6declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';
7(: Keep
8declare variable $targetCollection as xs:string {'TargetCollection'};
9declare variable $repositoryIdentifier as xs:string {'RepositoryID'};
10declare variable $localIdentifier as xs:string {'LocalID'};
11:)
12declare variable $targetCollection as xs:string {'/db/discovery'};
13declare variable $repositoryIdentifier as xs:string {'grid.bodc.nerc.ac.uk'};
14declare variable $localIdentifier as xs:string {'grid.bodc.nerc.ac.uk:DIF:EDMED1048001'};
15
16declare variable $ISO_639-2_ns as xs:string{$voclib:ISO_639-2_ns};
17declare variable $ISO_3166_ns as xs:string{$voclib:ISO_3166_ns};
18
19for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
20exists('moles:dgDataEntity')
21and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
22and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier
23and moles:dgMetadataID/moles:localIdentifier=$localIdentifier]
24return
25element Metadata {
26element Title {data($DE/moles:name)},
27if (exists($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDatasetLanguage)) then
28for $lang in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDatasetLanguage
29return
30element Language{
31element LanguageName {data($lang/moles:dgValidTerm)},
32element LanguageVocab {data($lang/moles:dgValidTermID/moles:ParentListID)},
33element LanguageCode {data($lang/moles:dgValidTermID/moles:TermID)}
34}
35
36else (),
37
38element Abstract {string($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)},
39for $isoTopic in $DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)]
40return element TopicCategory {
41element TopicCategoryName {data($isoTopic/moles:dgValidTerm)},
42element TopicCategoryVocab {data($isoTopic/moles:dgValidTermID/moles:ParentListID)},
43element TopicCategoryCode {data($isoTopic/moles:dgValidTermID/moles:TermID)}
44},
45for $subject in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured[
46voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID)
47or voclib:spot-vocab($voclib:gcmd_project_valids, moles:dgValidTermID/moles:ParentListID)
48or voclib:spot-vocab($voclib:gcmd_science_valids_categories, moles:dgValidTermID/moles:ParentListID)
49or voclib:spot-vocab($voclib:bodc_parameter_usage_vocab, moles:dgValidTermID/moles:ParentListID)
50or voclib:spot-vocab($voclib:bodc_parameter_discovery_vocab, moles:dgValidTermID/moles:ParentListID)
51])
52return (element Subject {
53element SubjectName {data($subject/moles:dgValidTerm)},
54element SubjectVocab {data($subject/moles:dgValidTermID/moles:ParentListID)},
55element SubjectCode {data($subject/moles:dgValidTermID/moles:TermID)}
56},
57for $subterm in $subject//moles:dgValidSubterm
58return (element Subject {
59element SubjectName {data($subterm/moles:dgValidTerm)},
60element SubjectVocab {data($subterm/moles:dgValidTermID/moles:ParentListID)},
61element SubjectCode {data($subterm/moles:dgValidTermID/moles:TermID)}
62}
63)
64),
65if (exists($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange))) then
66element Date {
67element DatasetStartDate {
68let $dateStart:=min($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange/moles:DateRangeStart) cast as xs:date)
69return
70if (empty($dateStart)) then ()
71else data($dateStart)
72},
73element DatasetEndDate {
74let $dateEnd:=max($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange/moles:DateRangeEnd) cast as xs:date)
75return
76if (empty($dateEnd)) then ()
77else data($dateEnd)
78}
79}
80else (),
81let $west := min($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitWest cast as xs:decimal)
82return element WestCoOrdinate {data($west)},
83let $east := max($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitEast cast as xs:decimal)
84return element EastCoOrdinate {data($east)},
85let $north := max($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitNorth cast as xs:decimal)
86return element NorthCoOrdinate {data($north)},
87let $south := min($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitSouth cast as xs:decimal)
88return element SouthCoOrdinate {data($south)},
89element DatasetIdentifier {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'MDIP', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)},
90for $target in $DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:ndg_data_provider_vocab, moles:dgValidTermID/moles:ParentListID) ]
91return element Target {
92element TargetName {data($target/moles:dgValidTerm)},
93element TargetVocab {data($target/moles:dgValidTermID/moles:ParentListID)},
94element TargetCode {data($target/moles:dgValidTermID/moles:TermID)}
95}
96}
Note: See TracBrowser for help on using the repository browser.