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

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

Extended MDIP output from MOLES

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[
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]
24return
25element 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        }
Note: See TracBrowser for help on using the repository browser.