source: TI07-MOLES/trunk/StubB/XQuery/NDG-ActStubBmoles.xquery @ 1661

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

Refactoring XQuery - activity

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{
25for $SRAct in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
26        moles:dgMetadataID/moles:repositoryIdentifier=$repid
27        and moles:dgMetadataID/moles:localIdentifier=$locid]
28        return
29                element  {$out-element-name} {
30                        f:strip-namespace($SRAct/moles:dgMetadataID),
31                        f:strip-namespace($SRAct/moles:dgMetadataDescription),
32                        f:strip-namespace($SRAct/moles:name),
33                        f:strip-namespace($SRAct/moles:abbreviation),
34                        element dgActivity {
35                                if (exists($SRAct/*/moles:dgActivityDataCollection)) then
36                                        f:strip-namespace($SRAct/*/moles:dgActivityDataCollection)
37                                else if (exists($SRAct/*/moles:dgActivityDataProject)) then
38                                        f:strip-namespace($SRAct/*/moles:dgActivityDataProject)
39                                else if (exists($SRAct/*/dgActivityDataCampaign)) then
40                                        f:strip-namespace($SRAct/moles:dgActivity/moles:dgActivityDataCampaign)
41                                else
42                                        f:strip-namespace($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation),
43                                f:strip-namespace($SRAct/moles:dgActivity/moles:dgActivityCoverage),
44                                f:strip-namespace($SRAct/moles:dgActivity/moles:dgActivityDuration)
45                        } (: </dgActivity> :)
46                } (: </activity> :)
47} ;
48
49declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
50(: Returns a "stubB" style observation station record to expand an activity record :)
51(: Security not implemented here; it would be in a wrapper function :)
52{
53    for $SRDE in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[
54        moles:dgMetadataID/moles:repositoryIdentifier=$repid
55        and moles:dgMetadataID/moles:localIdentifier=$locid]
56        return 
57        element {$out-element-name}
58          {
59                f:strip-namespace($SRDE/moles:dgMetadataID),
60                f:strip-namespace($SRDE/moles:dgMetadataDescription),
61                f:strip-namespace($SRDE/moles:name),
62                f:strip-namespace($SRDE/moles:abbreviation),
63                element dgDataEntity {
64                        f:strip-namespace($SRDE/moles:dgDataEntity/moles:dgDataSetType),
65                        f:strip-namespace($SRDE/moles:dgDataEntity/moles:dgDataGranule),
66                        f:strip-namespace($SRDE/moles:dgDataEntity/moles:dgDataSummary)
67                } (: </dgDataEntity> :)         
68        }
69} ;
70
71declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
72(: Returns a "stubB" style dpt record to expand an activity record :)
73(: Security not implemented here; it would be in a wrapper function :)
74{
75    for $SRDPT in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[
76moles:dgMetadataID/moles:repositoryIdentifier=$repid
77        and moles:dgMetadataID/moles:localIdentifier=$locid]
78        return 
79                element {$out-element-name}
80                {
81                        f:strip-namespace($SRDPT/moles:dgMetadataID),
82                        f:strip-namespace($SRDPT/moles:dgMetadataDescription),
83                        f:strip-namespace($SRDPT/moles:name),
84                        f:strip-namespace($SRDPT/moles:abbreviation),
85                        element dgDataProductionTool {
86                                f:strip-namespace($SRDPT/moles:dgDataProductionTool/moles:contactDetails),
87                                if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then
88                                        f:strip-namespace($SRDPT/moles:dgDataProductionTool/moles:dgModel)
89                                else (),
90                                if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then
91                                        f:strip-namespace($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)
92                                else ()
93                                } (: </dgDataProductionTool> :)
94                        } (: </dataproductiontool> :)
95} ;
96
97declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
98(: Returns a "stubB" style observation station record to expand an activity record :)
99(: Security not implemented here; it would be in a wrapper function :)
100{
101        for $SRObsStn in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[
102                moles:dgMetadataID/moles:repositoryIdentifier=$repid
103                and moles:dgMetadataID/moles:localIdentifier=$locid]
104                return
105                        element {$out-element-name} {
106                                f:strip-namespace($SRObsStn/moles:dgMetadataID),
107                                f:strip-namespace($SRObsStn/moles:dgMetadataDescription),
108                                f:strip-namespace($SRObsStn/moles:name),
109                                f:strip-namespace($SRObsStn/moles:abbreviation),
110                                element dgObservationStation {
111                                        f:strip-namespace($SRObsStn/moles:dgObservationStation/moles:contactDetails),
112                                        if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then
113                                                f:strip-namespace($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)
114                                        else (),
115                                        if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then
116                                                f:strip-namespace($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)
117                                        else ()
118                                } (: </dgObservationStation> :)
119                        }
120} ;
121
122declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
123(: Returns a "stubB" style observation station record to expand an activity record :)
124(: Security not implemented here; it would be in a wrapper function :)
125{
126for $person in collection('/db/moles')/moles:dgMetadata/moles:dgPerson[
127        moles:dgMetadataID/moles:repositoryIdentifier=$repid
128        and moles:dgMetadataID/moles:localIdentifier=$locid]
129        return
130                element  {$out-element-name}
131                {
132                        f:strip-namespace($person)
133                }
134} ;
135
136declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
137(: Returns a "stubB" style observation station record to expand an activity record :)
138(: Security not implemented here; it would be in a wrapper function :)
139{
140for $org in collection('/db/moles')/moles:dgMetadata/moles:dgOrganisation[
141        moles:dgMetadataID/moles:repositoryIdentifier=$repid
142        and moles:dgMetadataID/moles:localIdentifier=$locid]
143        return
144                element  {$out-element-name} { f:strip-namespace($org)}
145} ;
146
147
148
149
150for $Act in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[
151        moles:dgActivity!=''
152        and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
153        and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'
154        and moles:dgMetadataID/moles:localIdentifier='activity3']
155return
156element dgMetadataRecord {
157        element dgMetadataID {
158                element schemeIdentifier {'NDG-B1'},
159                f:strip-namespace(element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}),
160                element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)}
161        },
162        f:strip-namespace($Act/moles:dgMetadataDescription),
163        f:strip-namespace($Act/moles:name),
164        f:strip-namespace($Act/moles:abbreviation),
165        element dgActivity {
166                for $RelatedActivities in $Act/dgActivity/moles:relatedActivity
167                        return
168                                element relatedActivity {
169                                        $RelatedActivities/moles:activityRelation,
170                                        f:return-stub-activity('activity', data($RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier), data($RelatedActivities/moles:relatedActivityID/moles:localIdentifier))
171                        },      (: </relatedActivity> :)
172                if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataCollection)
173                else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataProject)
174                else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataInvestigation)
175                else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataCampaign)
176                else (),
177                element dgActivityRole {
178                        element dgInvestigator {
179                                element dgPrincipalInvestigator {
180                                        f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID),
181                                        f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName),
182                                        f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation),
183                                        f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:contactDetails),
184                                        for $PIRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgRoleHolder
185                                                order by $PIRole/moles:startDate empty least, $PIRole/moles:endDate empty least
186                                                return
187                                                element dgRoleHolder {
188                                                        if (exists($PIRole/moles:dgOrganisationID)) then
189                                                                f:return-stub-organisation('organisation', data($PIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PIRole/moles:dgOrganisationID/moles:localIdentifier))
190                                                         else (),
191                                                        if (exists($PIRole/moles:dgPersonID)) then
192                                                                f:return-stub-person('person', string($PIRole/moles:dgPersonID/moles:repositoryIdentifier), string($PIRole/moles:dgPersonID/moles:localIdentifier))
193                                                         else (),
194                                                        f:strip-namespace($PIRole/moles:startDate),
195                                                        if (exists($PIRole/moles:endDate)) then
196                                                            f:strip-namespace($PIRole/moles:endDate)
197                                                        else (),
198                                                        if (exists($PIRole/moles:localName)) then
199                                                            f:strip-namespace($PIRole/moles:localName)
200                                                        else ()
201                                                } (: </dgRoleHolder> :)
202                                }, (: </dgPrincipalInvestigator> :)
203                                for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator
204                                return 
205                                        element dgCoInvestigator {
206                                            f:strip-namespace($CI/moles:dgMetadataID),
207                                            f:strip-namespace($CI/moles:roleName),
208                                            f:strip-namespace($CI/moles:abbreviation),
209                                            f:strip-namespace($CI/moles:contactDetails),
210                                            for $CIRole in $CI/moles:dgRoleHolder
211                                                order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least
212                                            return
213                                                element dgRoleHolder {
214                                                        if (exists($CIRole/moles:dgOrganisationID)) then (
215                                                                for $CIRoleHolder in collection('/db/moles')/moles:dgMetadata/moles:dgOrganisation
216                                                                    [moles:dgMetadataID
217                                                                        [moles:schemeIdentifier='NDG-B0'
218                                                                        and moles:repositoryIdentifier=$CIRole/moles:dgOrganisationID/moles:repositoryIdentifier
219                                                                        and moles:localIdentifier=$CIRole/moles:dgOrganisationID/moles:localIdentifier]
220                                                                    ]
221                                                                return f:strip-namespace($CIRoleHolder))
222                                                         else (),
223                                                        if (exists($CIRole/moles:dgPersonID)) then (
224                                                                for $CIRoleHolder in collection('/db/moles')/moles:dgMetadata/moles:dgPerson
225                                                                    [moles:dgMetadataID
226                                                                        [moles:schemeIdentifier='NDG-B0'
227                                                                        and moles:repositoryIdentifier=$CIRole/moles:dgPersonID/moles:repositoryIdentifier
228                                                                        and moles:localIdentifier=$CIRole/moles:dgPersonID/moles:localIdentifier]
229                                                                    ]
230                                                                return f:strip-namespace($CIRoleHolder))
231                                                         else (),
232                                                        f:strip-namespace($CIRole/moles:startDate),
233                                                        if (exists($CIRole/moles:endDate)) then
234                                                            f:strip-namespace($CIRole/moles:endDate)
235                                                        else (),
236                                                        if (exists($CIRole/moles:localName)) then
237                                                            f:strip-namespace($CIRole/moles:localName)
238                                                        else ()
239                                                } (: </dgRoleHolder> :)
240                                } (: </dgCoInvestigator> :)
241                }, (: </dgInvestigator> :)
242                if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then (
243                        element dgTechnicalContact {
244                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID),
245                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName),
246                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation),
247                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails),
248                                for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder
249                                        order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least
250                                        return
251                                        element dgRoleHolder {
252                                            for $TechConRoleHolder in collection('/db/moles')/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson)[
253                                                (moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
254                                                and moles:dgMetadataID/moles:repositoryIdentifier=$TechConRole/*/moles:repositoryIdentifier
255                                                and moles:dgMetadataID/moles:localIdentifier=$TechConRole/*/moles:localIdentifier)]
256                                                return f:strip-namespace($TechConRoleHolder),
257                                            f:strip-namespace($TechConRole/moles:startDate),
258                                            if (exists($TechConRole/moles:endDate)) then
259                                                f:strip-namespace($TechConRole/moles:endDate)
260                                            else (),
261                                            if (exists($TechConRole/moles:localName)) then
262                                                    f:strip-namespace($TechConRole/moles:localName)
263                                            else ()
264                                        } (: </dgRoleHolder> :)
265                        } (: </dgTechnicalContact> :)
266                )
267                else (),
268                if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then (
269                        element dgProjectManager {
270                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID),
271                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/roleName),
272                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation),
273                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails),
274                                for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder
275                                        order by $PMRole/startDate empty least, $PMRole/endDate empty least
276                                        return
277                                        element dgRoleHolder {
278                                                for $PMRoleHolder in collection('/db/moles')/dgMetadata/(dgOrganisation | dgPerson)[(dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier=$PMRole/*/repositoryIdentifier and dgMetadataID/localIdentifier=$PMRole/*/localIdentifier)]
279                                                return f:strip-namespace($PMRoleHolder),
280                                                f:strip-namespace($PMRole/startDate),
281                                                if (exists($PMRole/moles:endDate)) then
282                                                    f:strip-namespace($PMRole/moles:endDate)
283                                                else (),
284                                                if (exists($PMRole/moles:localName)) then
285                                                    f:strip-namespace($PMRole/moles:localName)
286                                                else ()
287                                        } (: </dgRoleHolder> :)
288                        } (: </dgProjectManager> :)
289                )
290                else ()
291        }, (: </dgActivityRole> :)
292        for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment
293                return
294                element ActivityDeployment {
295                        f:strip-namespace($RelDep/moles:DateStart),
296                        if (exists($RelDep/moles:DateEnd)) then
297                            f:strip-namespace($RelDep/moles:DateEnd)
298                        else (),
299                        f:strip-namespace($RelDep/moles:dgMetadataID),
300                        f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)),
301                        f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)),
302                        for $DE in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord
303                                where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier
304                                        and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier
305                        return
306                                f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier))
307                }, (: </ActivityDeployment> :)
308                if (exists($Act/dgActivityCoverage)) then
309                    f:strip-namespace($Act/dgActivityCoverage)
310                    else (),
311                if (exists($Act/dgActivityDuration)) then
312                    f:strip-namespace($Act/dgActivityDuration)
313                    else ()
314        }, (: </dgActivity> :)
315                if (exists($Act/dgStructuredKeyword)) then
316            f:strip-namespace($Act/dgStructuredKeyword)
317                else (),
318                if (exists($Act/DataProvenance)) then
319            f:strip-namespace($Act/DataProvenance)
320                else (),
321                if (exists($Act/MetadataSecurity)) then
322            f:strip-namespace($Act/MetadataSecurity)
323                else ()
324} (:</dgMRecord>:)
Note: See TracBrowser for help on using the repository browser.