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

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/StubB/XQuery/NDG-ObsStnStubB.xquery@2064
Revision 1707, 13.3 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/observationstation';
2declare namespace moles='http://ndg.nerc.ac.uk/moles';
3declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions';
4declare function f:strip-namespace($e as element()) as element()
5(: Removes namespace info from the element tree being addressed so that it will lie in the default namespace  :)
6
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 $ObsStn in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
232        moles:dgObservationStation!='' and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
233        and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'
234        and moles:dgMetadataID/moles:localIdentifier='obs1']
235return
236f:strip-namespace(
237        element dgMetadataRecord {
238                element dgMetadataID {
239                        element schemeIdentifier {'NDG-B1',
240                        $ObsStn/moles:dgMetadataID/moles:repositoryIdentifier,
241                        $ObsStn/moles:dgMetadataID/moles:localIdentifier
242                } (: End </dgMetadataID> :),
243                $ObsStn/moles:dgMetadataDescription,
244                $ObsStn/moles:name,
245                $ObsStn/moles:abbreviation,
246                element dgObservationStation {
247                        $ObsStn/moles:dgObservationStation/moles:contactDetails,
248                        if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then
249                                element dgStationaryPlatform {
250                                $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position,
251                                if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring)) then   
252                                        element dgMooring {
253                                                $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateStart,
254                                                $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateEnd,
255                                                for $DepositingCruise in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:DepositingCruise
256                                                return
257                                                        f:return-stub-activity('depositingcruise', data($DepositingCruise/moles:dgMetadataID/moles:repositoryIdentifier), data($DepositingCruise/moles:dgMetadataID/moles:localIdentifier)),
258                                                        if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dgStationGrouping)) then   
259                                                                for $StationGrouping in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/dgStationGrouping
260                                                                return 
261                                                                        f:return-stub-obsstn('stationgrouping', data($StationGrouping/moles:dgMetadataID/moles:repositoryIdentifier), data($StationGrouping/moles:dgMetadataID/moles:localIdentifier))
262                                                        else ()
263                                        } (: End </dgMooring> :) 
264                                else if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup)) then   
265                                        element dgStationGroup {
266                                                element dgGroupedStations {
267                                                        if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStations)) then
268                                                                for $GroupedStation in $ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStation/dgGroupedStations
269                                                                return f:return-stub-obsstn('dgGroupedStation', data($GroupedStation/moles:dgMetadataID/moles:repositoryIdentifier), data($GroupedStation/moles:dgMetadataID/moles:localIdentifier))
270                                                        else ()
271                                                } (: End </dgGroupedStations> :)
272                                        } (: End </dgStationGroup> :)
273                                else $ObsStn/moles:dgObservationStation/moles:dgLandStation
274                                } (: End </dgStationaryPlatform>  :) 
275                                else $ObsStn/moles:dgObservationStation/moles:dgMovingPlatform
276                        } ,
277                        for $RelDep in $ObsStn/moles:dgObservationStation/moles:ObsStationDeployment
278                        return
279                                element ObsStationDeployment {
280                                $RelDep/moles:DateStart,
281                                $RelDep/moles:DateEnd,
282                                $RelDep/moles:dgMetadataID,
283                                f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)),
284                                f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)),
285                                for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord
286                                        where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier
287                                                and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier
288                                return
289                                        f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)),
290                                $RelDep/moles:Coverage
291                        } (: </RelatedDeployment> :)
292                } (: </dgObservationStation> :),
293        for $strkwrd in $ObsStn/moles:dgStructuredKeyword return $strkwrd,
294        if (exists($ObsStn/moles:dgMetadataProvenance)) then $ObsStn/moles:dgMetadataProvenance else (),
295        if (exists($ObsStn/moles:dgMetadataSecurity)) then $ObsStn/moles:dgMetadataSecurity else ()
296        } (: End </dgMetadataRecord> :)
297) (: End namespace strip :)
Note: See TracBrowser for help on using the repository browser.