source: TI07-MOLES/trunk/StubB/XQuery/NDG-DPTStubB.xquery @ 1707

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/StubB/XQuery/NDG-DPTStubB.xquery@1707
Revision 1707, 11.2 KB checked in by ko23, 14 years ago (diff)

Extensions for MDIP (part one)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1declare default element namespace 'http://ndg.nerc.ac.uk/moles/dataproductiontool';
2declare namespace moles='http://ndg.nerc.ac.uk/moles';
3declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions';
4
5declare function f:strip-namespace($e as element()) as element()
6(: Removes namespace info from the element tree being addressed so that it will lie in the default namespace  :)
7{
8  element {QName('', local-name($e))} 
9  {
10    let $parent :=$e
11    let $childcount := count($parent/*)
12    return
13        if ($childcount>0) then
14            for $child in ($e/*)
15            return
16                f:strip-namespace($child)
17        else (data($e))         
18  }
19} ;
20
21declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
22(: Returns a 'stubB' style activity record to expand an activity record :)
23(: Security not implemented here yet :)
24{
25let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
26                        moles:dgMetadataID/moles:repositoryIdentifier=$repid
27                        and moles:dgMetadataID/moles:localIdentifier=$locid])
28return 
29        if ($found = 0) then
30                element {$out-element-name} {
31                        element error {'not found'},
32                        element repositoryIdentifier {$repid},
33                        element localIdentifier {$locid}
34                }
35        else (
36                for $SRAct in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
37                        moles:dgMetadataID/moles:repositoryIdentifier=$repid
38                        and moles:dgMetadataID/moles:localIdentifier=$locid]
39                return
40                        element  {$out-element-name} {
41                                ($SRAct/moles:dgMetadataID),
42                                ($SRAct/moles:dgMetadataDescription),
43                                ($SRAct/moles:name),
44                                ($SRAct/moles:abbreviation),
45                                element dgActivity {
46                                        if (exists($SRAct/*/moles:dgActivityDataCollection)) then
47                                                ($SRAct/*/moles:dgActivityDataCollection)
48                                        else if (exists($SRAct/*/moles:dgActivityDataProject)) then
49                                                ($SRAct/*/moles:dgActivityDataProject)
50                                        else if (exists($SRAct/*/dgActivityDataCampaign)) then
51                                                ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign)
52                                        else
53                                                ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation),
54                                        ($SRAct/moles:dgActivity/moles:dgActivityCoverage),
55                                        ($SRAct/moles:dgActivity/moles:dgActivityDuration)
56                                } (: </dgActivity> :)
57                        } (: </activity> :)
58        )
59} ;
60
61declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
62(: Returns a 'stubB' style observation station record to expand an data entity record :)
63(: Security not implemented yet :)
64{
65let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
66                moles:dgMetadataID/moles:repositoryIdentifier=$repid
67                and moles:dgMetadataID/moles:localIdentifier=$locid])
68return 
69        if ($found = 0) then
70                element {$out-element-name} {
71                        element error {'not found'},
72                        element repositoryIdentifier {$repid},
73                        element localIdentifier {$locid}
74                }
75        else (
76                for $SRDE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
77                        moles:dgMetadataID/moles:repositoryIdentifier=$repid
78                        and moles:dgMetadataID/moles:localIdentifier=$locid]
79                return 
80                        element {$out-element-name} {
81                                ($SRDE/moles:dgMetadataID),
82                                ($SRDE/moles:dgMetadataDescription),
83                                ($SRDE/moles:name),
84                                ($SRDE/moles:abbreviation),
85                                element dgDataEntity {
86                                        ($SRDE/moles:dgDataEntity/moles:dgDataSetType),
87                                        ($SRDE/moles:dgDataEntity/moles:dgDataGranule),
88                                        ($SRDE/moles:dgDataEntity/moles:dgDataSummary)
89                                } (: </dgDataEntity> :)         
90                        }
91        )
92} ;
93
94declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
95(: Returns a 'stubB' style dpt record to expand a dpt record :)
96(: Security not implemented yet :)
97{
98let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
99                moles:dgMetadataID/moles:repositoryIdentifier=$repid
100                and moles:dgMetadataID/moles:localIdentifier=$locid])
101return 
102        if ($found = 0) then
103                element {$out-element-name} {
104                        element error {'not found'},
105                        element repositoryIdentifier {$repid},
106                        element localIdentifier {$locid}
107                }
108        else (
109                for $SRDPT in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
110                                moles:dgMetadataID/moles:repositoryIdentifier=$repid
111                                and moles:dgMetadataID/moles:localIdentifier=$locid]
112                return 
113                        element {$out-element-name} {
114                                $SRDPT/moles:dgMetadataID,
115                                $SRDPT/moles:dgMetadataDescription,
116                                $SRDPT/moles:name,
117                                $SRDPT/moles:abbreviation,
118                                $SRDPT/moles:logos,
119                                element dgDataProductionTool {
120                                        $SRDPT/moles:dgDataProductionTool/moles:contactDetails,
121                                        if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then
122                                                $SRDPT/moles:dgDataProductionTool/moles:dgModel
123                                        else (),
124                                        if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then
125                                                $SRDPT/moles:dgDataProductionTool/moles:dgInstrument
126                                        else ()
127                                        } (: </dgDataProductionTool> :)
128                                } (: </dataproductiontool> :)
129        )
130} ;
131
132declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
133(: Returns a 'stubB' style observation station record to expand an observation station record :)
134(: Security not implemented here yet;  :)
135{
136let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
137                        moles:dgMetadataID/moles:repositoryIdentifier=$repid
138                        and moles:dgMetadataID/moles:localIdentifier=$locid])
139return 
140        if ($found = 0) then
141                element {$out-element-name} {
142                        element error {'not found'},
143                        element repositoryIdentifier {$repid},
144                        element localIdentifier {$locid}
145                }
146        else (
147                for $SRObsStn in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
148                        moles:dgMetadataID/moles:repositoryIdentifier=$repid
149                        and moles:dgMetadataID/moles:localIdentifier=$locid]
150                return
151                        element {$out-element-name} {
152                                ($SRObsStn/moles:dgMetadataID),
153                                ($SRObsStn/moles:dgMetadataDescription),
154                                ($SRObsStn/moles:name),
155                                ($SRObsStn/moles:abbreviation),
156                                element dgObservationStation {
157                                        ($SRObsStn/moles:dgObservationStation/moles:contactDetails),
158                                        if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then
159                                                element dgStationaryPlatform {
160                                                        $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position,
161                                                        if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''}
162                                                        else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''}
163                                                        else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''}
164                                                        else ()
165                                                        }
166                                        else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then
167                                                $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform
168                                        else ()
169                                } (: </dgObservationStation> :)
170                        }
171        )
172} ;
173
174declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
175(: Returns a 'stubB' style observation station record to expand a person record :)
176(: Security not implemented yet :)
177{
178let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgPerson[
179                        moles:dgMetadataID/moles:repositoryIdentifier=$repid
180                        and moles:dgMetadataID/moles:localIdentifier=$locid])
181return 
182        if ($found = 0) then
183                element {$out-element-name} {
184                        element error {'not found'},
185                        element repositoryIdentifier {$repid},
186                        element localIdentifier {$locid}
187                }
188        else (
189        for $person in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgPerson[
190                moles:dgMetadataID/moles:repositoryIdentifier=$repid
191                and moles:dgMetadataID/moles:localIdentifier=$locid]
192        return
193                element  {$out-element-name}
194                {
195                        ($person/moles:name),
196                        ($person/moles:contactDetails),
197                        ($person/moles:dgMetadataID)
198                }
199        )
200} ;
201
202declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
203(: Returns a 'stubB' style observation station record to expand an organisation record :)
204(: Security not implemented yet :)
205{
206        let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgOrganisation[
207                                moles:dgMetadataID/moles:repositoryIdentifier=$repid
208                                and moles:dgMetadataID/moles:localIdentifier=$locid])
209        return 
210                if ($found = 0) then
211                        element {$out-element-name} {
212                                element error {'not found'},
213                                element repositoryIdentifier {$repid},
214                                element localIdentifier {$locid}
215                        }
216                else (
217                        for $org in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgOrganisation[
218                                moles:dgMetadataID/moles:repositoryIdentifier=$repid
219                                and moles:dgMetadataID/moles:localIdentifier=$locid]
220                        return
221                                element  {$out-element-name} {
222                                        $org/moles:dgMetadataID,
223                                        $org/moles:name,
224                                        $org/moles:abbreviation,
225                                        $org/moles:contactDetails,
226                                        $org/moles:logos
227                                }
228                )
229} ;
230
231for $DPT in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
232        moles:dgDataProductionTool!=''
233        and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
234        and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'
235        and moles:dgMetadataID/moles:localIdentifier='dpt1']
236return
237f:strip-namespace(element dgMetadataRecord {
238        $DPT/dgMetadataID,
239                element dgMetadataID {
240                        element schemeIdentifier {'NDG-B1'},
241                        $DPT/moles:dgMetadataID/moles:repositoryIdentifier,
242                        $DPT/moles:dgMetadataID/moles:localIdentifier
243                } (: End </dgMetadataID> :),
244        $DPT/moles:dgMetadataDescription,
245        $DPT/moles:name,
246        $DPT/moles:abbreviation,
247        element dgDataProductionTool {
248                $DPT/moles:contactDetails,
249                if (exists($DPT/moles:dgModel)) then $DPT/moles:dgModel
250                else $DPT/moles:dgInstrument
251        ,
252        if (exists($DPT/moles:dgDPTRoles)) then
253                element dgDPTRoles {'Roles are available, and will be added soon'}
254         else(),
255        for $RelDep in $DPT/moles:dgDataProductionTool/moles:DPTDeployment
256        return
257                element DPTDeployment {
258                        $RelDep/moles:DateStart,
259                        $RelDep/moles:DateEnd,
260                        $RelDep/moles:dgMetadataID,
261                        f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)),
262                        f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)),
263                        for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord
264                                where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier
265                                        and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier
266                        return
267                                f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)),
268                        $RelDep/moles:Coverage
269                } (: </DPTDeployment> :)
270        } (: </dgDataProductionTool> :),
271        for $strkwrd in $DPT/moles:dgStructuredKeyword return $strkwrd,
272        if (exists($DPT/moles:dgMetadataProvenance)) then $DPT/moles:dgMetadataProvenance else (),
273        if (exists($DPT/moles:dgMetadataSecurity)) then $DPT/moles:dgMetadataSecurity else ()
274} (:End </dgMetadataRecord> :)
275) (: End namespace strip :)
Note: See TracBrowser for help on using the repository browser.