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

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/StubB/XQuery/NDG-ActStubB.xquery@2064
Revision 1707, 17.8 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/activity';
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 $Act in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
232        moles:dgActivity!=''
233        and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
234        and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'
235        and moles:dgMetadataID/moles:localIdentifier='activity3']
236return
237f:strip-namespace(element dgMetadataRecord {
238        element dgMetadataID {
239                element schemeIdentifier {'NDG-B1'},
240                (element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}),
241                element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)}
242        },
243        $Act/moles:dgMetadataDescription,
244        $Act/moles:name,
245        $Act/moles:abbreviation,
246        element dgActivity {
247                for $RelatedActivities in $Act/dgActivity/moles:relatedActivity
248                        return
249                                element relatedActivity {
250                                        $RelatedActivities/moles:activityRelation,
251                                        f:return-stub-activity('activity', data($RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier), data($RelatedActivities/moles:relatedActivityID/moles:localIdentifier))
252                        },      (: </relatedActivity> :)
253                if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then ($Act/moles:dgActivity/moles:dgActivityDataCollection)
254                else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then ($Act/moles:dgActivity/moles:dgActivityDataProject)
255                else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then ($Act/moles:dgActivity/moles:dgActivityDataInvestigation)
256                else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then ($Act/moles:dgActivity/moles:dgActivityDataCampaign)
257                else (),
258                element dgActivityRole {
259                        element dgInvestigator {
260                                element dgPrincipalInvestigator {
261                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID),
262                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName),
263                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation),
264                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:contactDetails),
265                                        for $PIRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgRoleHolder
266                                                order by $PIRole/moles:startDate empty least, $PIRole/moles:endDate empty least
267                                                return
268                                                element dgRoleHolder {
269                                                        if (exists($PIRole/moles:dgOrganisationID)) then
270                                                                f:return-stub-organisation('organisation', data($PIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PIRole/moles:dgOrganisationID/moles:localIdentifier))
271                                                         else if (exists($PIRole/moles:dgPersonID)) then
272                                                                f:return-stub-person('person', string($PIRole/moles:dgPersonID/moles:repositoryIdentifier), string($PIRole/moles:dgPersonID/moles:localIdentifier))
273                                                         else (),
274                                                        ($PIRole/moles:startDate),
275                                                        if (exists($PIRole/moles:endDate)) then
276                                                            ($PIRole/moles:endDate)
277                                                        else (),
278                                                        if (exists($PIRole/moles:localName)) then
279                                                            ($PIRole/moles:localName)
280                                                        else ()
281                                                } (: </dgRoleHolder> :)
282                                }, (: </dgPrincipalInvestigator> :)
283                                for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator
284                                return 
285                                        element dgCoInvestigator {
286                                            ($CI/moles:dgMetadataID),
287                                            ($CI/moles:roleName),
288                                            ($CI/moles:abbreviation),
289                                            ($CI/moles:contactDetails),
290                                            for $CIRole in $CI/moles:dgRoleHolder
291                                                order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least
292                                            return
293                                                element dgRoleHolder {
294                                                        if (exists(CIRole/moles:dgOrganisationID)) then
295                                                                f:return-stub-organisation('organisation', data($CIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($CIRole/moles:dgOrganisationID/moles:localIdentifier))
296                                                         else if (exists($CIRole/moles:dgPersonID)) then
297                                                                f:return-stub-person('person', string($CIRole/moles:dgPersonID/moles:repositoryIdentifier), string($CIRole/moles:dgPersonID/moles:localIdentifier))
298                                                         else (),
299                                                        ($CIRole/moles:startDate),
300                                                        if (exists($CIRole/moles:endDate)) then
301                                                            ($CIRole/moles:endDate)
302                                                        else (),
303                                                        if (exists($CIRole/moles:localName)) then
304                                                            ($CIRole/moles:localName)
305                                                        else ()
306                                                } (: </dgRoleHolder> :)
307                                } (: </dgCoInvestigator> :)
308                }, (: </dgInvestigator> :)
309                if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then (
310                        element dgTechnicalContact {
311                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID),
312                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName),
313                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation),
314                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails),
315                                for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder
316                                        order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least
317                                        return
318                                        element dgRoleHolder {
319                                                if (exists($TechConRole/moles:dgOrganisationID)) then
320                                                        f:return-stub-organisation('organisation', data($TechConRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($TechConRole/moles:dgOrganisationID/moles:localIdentifier))
321                                                 else if (exists($TechConRole/moles:dgPersonID)) then
322                                                        f:return-stub-person('person', string($TechConRole/moles:dgPersonID/moles:repositoryIdentifier), string($TechConRole/moles:dgPersonID/moles:localIdentifier))
323                                                 else (),
324                                            ($TechConRole/moles:startDate),
325                                            if (exists($TechConRole/moles:endDate)) then
326                                                ($TechConRole/moles:endDate)
327                                            else (),
328                                            if (exists($TechConRole/moles:localName)) then
329                                                    ($TechConRole/moles:localName)
330                                            else ()
331                                        } (: </dgRoleHolder> :)
332                        } (: </dgTechnicalContact> :)
333                )
334                else (),
335                if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then (
336                        element dgProjectManager {
337                                ($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID),
338                                ($Act/dgActivity/dgActivityRole/dgProjectManager/roleName),
339                                ($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation),
340                                ($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails),
341                                for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder
342                                        order by $PMRole/startDate empty least, $PMRole/endDate empty least
343                                        return
344                                        element dgRoleHolder {
345                                                if (exists($PMRole/moles:dgOrganisationID)) then
346                                                        f:return-stub-organisation('organisation', data($PMRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PMRole/moles:dgOrganisationID/moles:localIdentifier))
347                                                 else if (exists($PMRole/moles:dgPersonID)) then
348                                                        f:return-stub-person('person', string($PMRole/moles:dgPersonID/moles:repositoryIdentifier), string($PMRole/moles:dgPersonID/moles:localIdentifier))
349                                                 else (),
350                                                ($PMRole/startDate),
351                                                if (exists($PMRole/moles:endDate)) then
352                                                    ($PMRole/moles:endDate)
353                                                else (),
354                                                if (exists($PMRole/moles:localName)) then
355                                                    ($PMRole/moles:localName)
356                                                else ()
357                                        } (: </dgRoleHolder> :)
358                        } (: </dgProjectManager> :)
359                )
360                else ()
361        }, (: </dgActivityRole> :)
362        for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment
363                return
364                element ActivityDeployment {
365                        ($RelDep/moles:DateStart),
366                        if (exists($RelDep/moles:DateEnd)) then
367                            ($RelDep/moles:DateEnd)
368                        else (),
369                        ($RelDep/moles:dgMetadataID),
370                        f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)),
371                        f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)),
372                        for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord
373                                where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier
374                                        and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier
375                        return
376                                f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier))
377                }, (: </ActivityDeployment> :)
378                if (exists($Act/dgActivityCoverage)) then
379                    ($Act/dgActivityCoverage)
380                    else (),
381                if (exists($Act/dgActivityDuration)) then
382                    ($Act/dgActivityDuration)
383                    else ()
384        } , (: </dgActivity> :)
385        for $strkwrd in $Act/moles:dgStructuredKeyword return $strkwrd,
386        if (exists($Act/moles:dgMetadataProvenance)) then $Act/moles:dgMetadataProvenance else (),
387        if (exists($Act/moles:dgMetadataSecurity)) then $Act/moles:dgMetadataSecurity else ()
388} (:</dgMRecord>:)
389) (: End namespace strip :)
Note: See TracBrowser for help on using the repository browser.