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