import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; declare default element namespace 'http://www.oceannet.org/mdip/xml'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace gco='http://www.isotc211.org/2005/gco'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance'; (: Keep declare variable $targetCollection as xs:string {'TargetCollection'}; declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; declare variable $localIdentifier as xs:string {'LocalID'}; :) declare variable $targetCollection as xs:string {'/db/discovery'}; declare variable $repositoryIdentifier as xs:string {'grid.bodc.nerc.ac.uk'}; declare variable $localIdentifier as xs:string {'grid.bodc.nerc.ac.uk:DIF:EDMED1048001'}; declare variable $ISO_639-2_ns as xs:string{$voclib:ISO_639-2_ns}; declare variable $ISO_3166_ns as xs:string{$voclib:ISO_3166_ns}; for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ exists('moles:dgDataEntity') and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] return element Metadata { element Title {data($DE/moles:name)}, if (exists($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDatasetLanguage)) then for $lang in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDatasetLanguage return element Language{ element LanguageName {data($lang/moles:dgValidTerm)}, element LanguageVocab {data($lang/moles:dgValidTermID/moles:ParentListID)}, element LanguageCode {data($lang/moles:dgValidTermID/moles:TermID)} } else (), element Abstract {string($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)}, for $isoTopic in $DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)] return element TopicCategory { element TopicCategoryName {data($isoTopic/moles:dgValidTerm)}, element TopicCategoryVocab {data($isoTopic/moles:dgValidTermID/moles:ParentListID)}, element TopicCategoryCode {data($isoTopic/moles:dgValidTermID/moles:TermID)} }, for $subject in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured[ voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_project_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_categories, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:bodc_parameter_usage_vocab, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:bodc_parameter_discovery_vocab, moles:dgValidTermID/moles:ParentListID) ]) return (element Subject { element SubjectName {data($subject/moles:dgValidTerm)}, element SubjectVocab {data($subject/moles:dgValidTermID/moles:ParentListID)}, element SubjectCode {data($subject/moles:dgValidTermID/moles:TermID)} }, for $subterm in $subject//moles:dgValidSubterm return (element Subject { element SubjectName {data($subterm/moles:dgValidTerm)}, element SubjectVocab {data($subterm/moles:dgValidTermID/moles:ParentListID)}, element SubjectCode {data($subterm/moles:dgValidTermID/moles:TermID)} } ) ), if (exists($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange))) then element Date { element DatasetStartDate { let $dateStart:=min($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange/moles:DateRangeStart) cast as xs:date) return if (empty($dateStart)) then () else data($dateStart) }, element DatasetEndDate { let $dateEnd:=max($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange/moles:DateRangeEnd) cast as xs:date) return if (empty($dateEnd)) then () else data($dateEnd) } } else (), let $west := min($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitWest cast as xs:decimal) return element WestCoOrdinate {data($west)}, let $east := max($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitEast cast as xs:decimal) return element EastCoOrdinate {data($east)}, let $north := max($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitNorth cast as xs:decimal) return element NorthCoOrdinate {data($north)}, let $south := min($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitSouth cast as xs:decimal) return element SouthCoOrdinate {data($south)}, element DatasetIdentifier {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'MDIP', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)}, for $target in $DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:ndg_data_provider_vocab, moles:dgValidTermID/moles:ParentListID) ] return element Target { element TargetName {data($target/moles:dgValidTerm)}, element TargetVocab {data($target/moles:dgValidTermID/moles:ParentListID)}, element TargetCode {data($target/moles:dgValidTermID/moles:TermID)} } }