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

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

Refactoring - working versions. Still slow though.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
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';
3(:
4Will return when scope problem sussed... ;(
5import module namespace stubblib='http://ndg.nerc.ac.uk/xquery/lib/stubb' at 'xmldb:exist:///db/xqueryLib/StubB/stubb_xquery_lib.xquery';
6:)
7declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions';
8declare default element namespace 'http://ndg.nerc.ac.uk/moles/activity';
9declare namespace moles='http://ndg.nerc.ac.uk/moles';
10
11declare variable $targetCollection as xs:string {'TargetCollection'};
12declare variable $repositoryIdentifier as xs:string {'RepositoryID'};
13declare variable $localIdentifier as xs:string {'LocalID'};
14
15declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
16(: Returns a 'stubB' style activity record to expand an activity record :)
17(: Security not implemented here yet :)
18{
19let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
20            moles:dgMetadataID/moles:repositoryIdentifier=$repid
21            and moles:dgMetadataID/moles:localIdentifier=$locid])
22return 
23    if ($found = 0) then
24        element {$out-element-name} {
25            element error {'not found'},
26            element repositoryIdentifier {$repid},
27            element localIdentifier {$locid}
28        }
29    else (
30        for $SRAct in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
31            moles:dgMetadataID/moles:repositoryIdentifier=$repid
32            and moles:dgMetadataID/moles:localIdentifier=$locid]
33        return
34            element  {$out-element-name} {
35                ($SRAct/moles:dgMetadataID),
36                ($SRAct/moles:dgMetadataDescription),
37                ($SRAct/moles:name),
38                ($SRAct/moles:abbreviation),
39                element dgActivity {
40                    if (exists($SRAct/*/moles:dgActivityDataCollection)) then
41                        ($SRAct/*/moles:dgActivityDataCollection)
42                    else if (exists($SRAct/*/moles:dgActivityDataProject)) then
43                        ($SRAct/*/moles:dgActivityDataProject)
44                    else if (exists($SRAct/*/dgActivityDataCampaign)) then
45                        ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign)
46                    else
47                        ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation),
48                    ($SRAct/moles:dgActivity/moles:dgActivityCoverage),
49                    ($SRAct/moles:dgActivity/moles:dgActivityDuration)
50                } (: </dgActivity> :)
51            } (: </activity> :)
52    )
53} ;
54
55declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
56(: Returns a 'stubB' style observation station record to expand an data entity record :)
57(: Security not implemented yet :)
58{
59let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
60        moles:dgMetadataID/moles:repositoryIdentifier=$repid
61        and moles:dgMetadataID/moles:localIdentifier=$locid])
62return 
63    if ($found = 0) then
64        element {$out-element-name} {
65            element error {'not found'},
66            element repositoryIdentifier {$repid},
67            element localIdentifier {$locid}
68        }
69    else (
70        for $SRDE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
71            moles:dgMetadataID/moles:repositoryIdentifier=$repid
72            and moles:dgMetadataID/moles:localIdentifier=$locid]
73        return 
74            element {$out-element-name} {
75                ($SRDE/moles:dgMetadataID),
76                ($SRDE/moles:dgMetadataDescription),
77                ($SRDE/moles:name),
78                ($SRDE/moles:abbreviation),
79                element dgDataEntity {
80                    ($SRDE/moles:dgDataEntity/moles:dgDataSetType),
81                    ($SRDE/moles:dgDataEntity/moles:dgDataGranule),
82                    ($SRDE/moles:dgDataEntity/moles:dgDataSummary)
83                } (: </dgDataEntity> :)       
84            }
85    )
86} ;
87
88declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
89(: Returns a 'stubB' style dpt record to expand a dpt record :)
90(: Security not implemented yet :)
91{
92let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
93        moles:dgMetadataID/moles:repositoryIdentifier=$repid
94        and moles:dgMetadataID/moles:localIdentifier=$locid])
95return 
96    if ($found = 0) then
97        element {$out-element-name} {
98            element error {'not found'},
99            element repositoryIdentifier {$repid},
100            element localIdentifier {$locid}
101        }
102    else (
103        for $SRDPT in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
104                moles:dgMetadataID/moles:repositoryIdentifier=$repid
105                and moles:dgMetadataID/moles:localIdentifier=$locid]
106        return 
107            element {$out-element-name} {
108                $SRDPT/moles:dgMetadataID,
109                $SRDPT/moles:dgMetadataDescription,
110                $SRDPT/moles:name,
111                $SRDPT/moles:abbreviation,
112                $SRDPT/moles:logos,
113                element dgDataProductionTool {
114                    $SRDPT/moles:dgDataProductionTool/moles:contactDetails,
115                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then
116                        $SRDPT/moles:dgDataProductionTool/moles:dgModel
117                    else (),
118                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then
119                        $SRDPT/moles:dgDataProductionTool/moles:dgInstrument
120                    else ()
121                    } (: </dgDataProductionTool> :)
122                } (: </dataproductiontool> :)
123    )
124} ;
125
126declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
127(: Returns a 'stubB' style observation station record to expand an observation station record :)
128(: Security not implemented here yet;  :)
129{
130let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
131            moles:dgMetadataID/moles:repositoryIdentifier=$repid
132            and moles:dgMetadataID/moles:localIdentifier=$locid])
133return 
134    if ($found = 0) then
135        element {$out-element-name} {
136            element error {'not found'},
137            element repositoryIdentifier {$repid},
138            element localIdentifier {$locid}
139        }
140    else (
141        for $SRObsStn in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
142            moles:dgMetadataID/moles:repositoryIdentifier=$repid
143            and moles:dgMetadataID/moles:localIdentifier=$locid]
144        return
145            element {$out-element-name} {
146                ($SRObsStn/moles:dgMetadataID),
147                ($SRObsStn/moles:dgMetadataDescription),
148                ($SRObsStn/moles:name),
149                ($SRObsStn/moles:abbreviation),
150                element dgObservationStation {
151                    ($SRObsStn/moles:dgObservationStation/moles:contactDetails),
152                    if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then
153                        element dgStationaryPlatform {
154                            $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position,
155                            if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''}
156                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''}
157                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''}
158                            else ()
159                            }
160                    else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then
161                        $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform
162                    else ()
163                } (: </dgObservationStation> :)
164            }
165    )
166} ;
167
168declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
169(: Returns a 'stubB' style observation station record to expand a person record :)
170(: Security not implemented yet :)
171{
172let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgPerson[
173            moles:dgMetadataID/moles:repositoryIdentifier=$repid
174            and moles:dgMetadataID/moles:localIdentifier=$locid])
175return 
176    if ($found = 0) then
177        element {$out-element-name} {
178            element error {'not found'},
179            element repositoryIdentifier {$repid},
180            element localIdentifier {$locid}
181        }
182    else (
183    for $person in collection($targetCollection)/moles:dgMetadata/moles:dgPerson[
184        moles:dgMetadataID/moles:repositoryIdentifier=$repid
185        and moles:dgMetadataID/moles:localIdentifier=$locid]
186    return
187        element  {$out-element-name}
188        {
189            ($person/moles:name),
190            ($person/moles:contactDetails),
191            ($person/moles:dgMetadataID)
192        }
193    )
194} ;
195
196declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()
197(: Returns a 'stubB' style observation station record to expand an organisation record :)
198(: Security not implemented yet :)
199{
200    let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[
201                moles:dgMetadataID/moles:repositoryIdentifier=$repid
202                and moles:dgMetadataID/moles:localIdentifier=$locid])
203    return 
204        if ($found = 0) then
205            element {$out-element-name} {
206                element error {'not found'},
207                element repositoryIdentifier {$repid},
208                element localIdentifier {$locid}
209            }
210        else (
211            for $org in collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[
212                moles:dgMetadataID/moles:repositoryIdentifier=$repid
213                and moles:dgMetadataID/moles:localIdentifier=$locid]
214            return
215                element  {$out-element-name} {
216                    $org/moles:dgMetadataID,
217                    $org/moles:name,
218                    $org/moles:abbreviation,
219                    $org/moles:contactDetails,
220                    $org/moles:logos
221                }
222        )
223} ;
224
225for $Act in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
226    moles:dgActivity!=''
227    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
228    and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'
229    and moles:dgMetadataID/moles:localIdentifier='activity3']
230return
231utillib:strip-namespace(element dgMetadataRecord {
232    element dgMetadataID {
233        element schemeIdentifier {'NDG-B1'},
234        (element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}),
235        element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)}
236    },
237    $Act/moles:dgMetadataDescription,
238    $Act/moles:name,
239    $Act/moles:abbreviation,
240    element dgActivity {
241        for $RelatedActivities in $Act/dgActivity/moles:relatedActivity
242            return
243                element relatedActivity {
244                    $RelatedActivities/moles:activityRelation,
245                    f:return-stub-activity('activity', data($RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier), data($RelatedActivities/moles:relatedActivityID/moles:localIdentifier))
246            },    (: </relatedActivity> :)
247        if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then ($Act/moles:dgActivity/moles:dgActivityDataCollection)
248        else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then ($Act/moles:dgActivity/moles:dgActivityDataProject)
249        else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then ($Act/moles:dgActivity/moles:dgActivityDataInvestigation)
250        else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then ($Act/moles:dgActivity/moles:dgActivityDataCampaign)
251        else (),
252        element dgActivityRole {
253            element dgInvestigator {
254                element dgPrincipalInvestigator {
255                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID),
256                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName),
257                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation),
258                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:contactDetails),
259                    for $PIRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgRoleHolder
260                        order by $PIRole/moles:startDate empty least, $PIRole/moles:endDate empty least
261                        return
262                        element dgRoleHolder {
263                            if (exists($PIRole/moles:dgOrganisationID)) then
264                                f:return-stub-organisation('organisation', data($PIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PIRole/moles:dgOrganisationID/moles:localIdentifier))
265                             else if (exists($PIRole/moles:dgPersonID)) then
266                                f:return-stub-person('person', string($PIRole/moles:dgPersonID/moles:repositoryIdentifier), string($PIRole/moles:dgPersonID/moles:localIdentifier))
267                             else (),
268                            ($PIRole/moles:startDate),
269                            if (exists($PIRole/moles:endDate)) then
270                                ($PIRole/moles:endDate)
271                            else (),
272                            if (exists($PIRole/moles:localName)) then
273                                ($PIRole/moles:localName)
274                            else ()
275                        } (: </dgRoleHolder> :)
276                }, (: </dgPrincipalInvestigator> :)
277                for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator
278                return 
279                    element dgCoInvestigator {
280                        ($CI/moles:dgMetadataID),
281                        ($CI/moles:roleName),
282                        ($CI/moles:abbreviation),
283                        ($CI/moles:contactDetails),
284                        for $CIRole in $CI/moles:dgRoleHolder
285                            order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least
286                        return
287                        element dgRoleHolder {
288                            if (exists(CIRole/moles:dgOrganisationID)) then
289                                f:return-stub-organisation('organisation', data($CIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($CIRole/moles:dgOrganisationID/moles:localIdentifier))
290                             else if (exists($CIRole/moles:dgPersonID)) then
291                                f:return-stub-person('person', string($CIRole/moles:dgPersonID/moles:repositoryIdentifier), string($CIRole/moles:dgPersonID/moles:localIdentifier))
292                             else (),
293                            ($CIRole/moles:startDate),
294                            if (exists($CIRole/moles:endDate)) then
295                                ($CIRole/moles:endDate)
296                            else (),
297                            if (exists($CIRole/moles:localName)) then
298                                ($CIRole/moles:localName)
299                            else ()
300                        } (: </dgRoleHolder> :)
301                } (: </dgCoInvestigator> :)
302        }, (: </dgInvestigator> :)
303        if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then (
304            element dgTechnicalContact {
305                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID),
306                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName),
307                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation),
308                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails),
309                for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder
310                    order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least
311                    return
312                    element dgRoleHolder {
313                        if (exists($TechConRole/moles:dgOrganisationID)) then
314                            f:return-stub-organisation('organisation', data($TechConRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($TechConRole/moles:dgOrganisationID/moles:localIdentifier))
315                         else if (exists($TechConRole/moles:dgPersonID)) then
316                            f:return-stub-person('person', string($TechConRole/moles:dgPersonID/moles:repositoryIdentifier), string($TechConRole/moles:dgPersonID/moles:localIdentifier))
317                         else (),
318                        ($TechConRole/moles:startDate),
319                        if (exists($TechConRole/moles:endDate)) then
320                            ($TechConRole/moles:endDate)
321                        else (),
322                        if (exists($TechConRole/moles:localName)) then
323                                ($TechConRole/moles:localName)
324                           else ()
325                    } (: </dgRoleHolder> :)
326            } (: </dgTechnicalContact> :)
327        )
328        else (),
329        if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then (
330            element dgProjectManager {
331                ($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID),
332                ($Act/dgActivity/dgActivityRole/dgProjectManager/roleName),
333                ($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation),
334                ($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails),
335                for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder
336                    order by $PMRole/startDate empty least, $PMRole/endDate empty least
337                    return
338                    element dgRoleHolder {
339                        if (exists($PMRole/moles:dgOrganisationID)) then
340                            f:return-stub-organisation('organisation', data($PMRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PMRole/moles:dgOrganisationID/moles:localIdentifier))
341                         else if (exists($PMRole/moles:dgPersonID)) then
342                            f:return-stub-person('person', string($PMRole/moles:dgPersonID/moles:repositoryIdentifier), string($PMRole/moles:dgPersonID/moles:localIdentifier))
343                         else (),
344                        ($PMRole/startDate),
345                        if (exists($PMRole/moles:endDate)) then
346                            ($PMRole/moles:endDate)
347                        else (),
348                        if (exists($PMRole/moles:localName)) then
349                            ($PMRole/moles:localName)
350                        else ()
351                    } (: </dgRoleHolder> :)
352            } (: </dgProjectManager> :)
353        )
354        else ()
355    }, (: </dgActivityRole> :)
356    for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment
357        return
358        element ActivityDeployment {
359            ($RelDep/moles:DateStart),
360            if (exists($RelDep/moles:DateEnd)) then
361                ($RelDep/moles:DateEnd)
362            else (),
363            ($RelDep/moles:dgMetadataID),
364            f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)),
365            f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)),
366            for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord
367                where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier
368                        and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier
369            return
370                f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier))
371        }, (: </ActivityDeployment> :)
372        if (exists($Act/dgActivityCoverage)) then
373            ($Act/dgActivityCoverage)
374            else (),
375        if (exists($Act/dgActivityDuration)) then
376            ($Act/dgActivityDuration)
377            else ()
378    } , (: </dgActivity> :)
379    for $strkwrd in $Act/moles:dgStructuredKeyword return $strkwrd,
380    if (exists($Act/moles:dgMetadataProvenance)) then $Act/moles:dgMetadataProvenance else (),
381    if (exists($Act/moles:dgMetadataSecurity)) then $Act/moles:dgMetadataSecurity else ()
382} (:</dgMRecord>:)
383) (: End namespace strip :)
Note: See TracBrowser for help on using the repository browser.