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

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

XQuery refactoring process - 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
21
22for $Act in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[
23        moles:dgActivity!=''
24        and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
25        and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'
26        and moles:dgMetadataID/moles:localIdentifier='activity3']
27return
28f:strip-namespace(element dgMetadataRecord {
29        element dgMetadataID {
30                element schemeIdentifier {'NDG-B1'},
31                (element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}),
32                element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)}
33        },
34        $Act/moles:dgMetadataDescription,
35        $Act/moles:name,
36        $Act/moles:abbreviation,
37        element dgActivity {
38                for $RelatedActivities in $Act/dgActivity/moles:relatedActivity
39                        return
40                                element relatedActivity {
41                                        $RelatedActivities/moles:activityRelation,
42                                        f:return-stub-activity('activity', data($RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier), data($RelatedActivities/moles:relatedActivityID/moles:localIdentifier))
43                        },      (: </relatedActivity> :)
44                if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then ($Act/moles:dgActivity/moles:dgActivityDataCollection)
45                else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then ($Act/moles:dgActivity/moles:dgActivityDataProject)
46                else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then ($Act/moles:dgActivity/moles:dgActivityDataInvestigation)
47                else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then ($Act/moles:dgActivity/moles:dgActivityDataCampaign)
48                else (),
49                element dgActivityRole {
50                        element dgInvestigator {
51                                element dgPrincipalInvestigator {
52                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID),
53                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName),
54                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation),
55                                        ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:contactDetails),
56                                        for $PIRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgRoleHolder
57                                                order by $PIRole/moles:startDate empty least, $PIRole/moles:endDate empty least
58                                                return
59                                                element dgRoleHolder {
60                                                        if (exists($PIRole/moles:dgOrganisationID)) then
61                                                                f:return-stub-organisation('organisation', data($PIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PIRole/moles:dgOrganisationID/moles:localIdentifier))
62                                                         else if (exists($PIRole/moles:dgPersonID)) then
63                                                                f:return-stub-person('person', string($PIRole/moles:dgPersonID/moles:repositoryIdentifier), string($PIRole/moles:dgPersonID/moles:localIdentifier))
64                                                         else (),
65                                                        ($PIRole/moles:startDate),
66                                                        if (exists($PIRole/moles:endDate)) then
67                                                            ($PIRole/moles:endDate)
68                                                        else (),
69                                                        if (exists($PIRole/moles:localName)) then
70                                                            ($PIRole/moles:localName)
71                                                        else ()
72                                                } (: </dgRoleHolder> :)
73                                }, (: </dgPrincipalInvestigator> :)
74                                for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator
75                                return 
76                                        element dgCoInvestigator {
77                                            ($CI/moles:dgMetadataID),
78                                            ($CI/moles:roleName),
79                                            ($CI/moles:abbreviation),
80                                            ($CI/moles:contactDetails),
81                                            for $CIRole in $CI/moles:dgRoleHolder
82                                                order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least
83                                            return
84                                                element dgRoleHolder {
85                                                        if (exists(CIRole/moles:dgOrganisationID)) then
86                                                                f:return-stub-organisation('organisation', data($CIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($CIRole/moles:dgOrganisationID/moles:localIdentifier))
87                                                         else if (exists($CIRole/moles:dgPersonID)) then
88                                                                f:return-stub-person('person', string($CIRole/moles:dgPersonID/moles:repositoryIdentifier), string($CIRole/moles:dgPersonID/moles:localIdentifier))
89                                                         else (),
90                                                        ($CIRole/moles:startDate),
91                                                        if (exists($CIRole/moles:endDate)) then
92                                                            ($CIRole/moles:endDate)
93                                                        else (),
94                                                        if (exists($CIRole/moles:localName)) then
95                                                            ($CIRole/moles:localName)
96                                                        else ()
97                                                } (: </dgRoleHolder> :)
98                                } (: </dgCoInvestigator> :)
99                }, (: </dgInvestigator> :)
100                if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then (
101                        element dgTechnicalContact {
102                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID),
103                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName),
104                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation),
105                                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails),
106                                for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder
107                                        order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least
108                                        return
109                                        element dgRoleHolder {
110                                                if (exists($TechConRole/moles:dgOrganisationID)) then
111                                                        f:return-stub-organisation('organisation', data($TechConRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($TechConRole/moles:dgOrganisationID/moles:localIdentifier))
112                                                 else if (exists($TechConRole/moles:dgPersonID)) then
113                                                        f:return-stub-person('person', string($TechConRole/moles:dgPersonID/moles:repositoryIdentifier), string($TechConRole/moles:dgPersonID/moles:localIdentifier))
114                                                 else (),
115                                            ($TechConRole/moles:startDate),
116                                            if (exists($TechConRole/moles:endDate)) then
117                                                ($TechConRole/moles:endDate)
118                                            else (),
119                                            if (exists($TechConRole/moles:localName)) then
120                                                    ($TechConRole/moles:localName)
121                                            else ()
122                                        } (: </dgRoleHolder> :)
123                        } (: </dgTechnicalContact> :)
124                )
125                else (),
126                if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then (
127                        element dgProjectManager {
128                                ($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID),
129                                ($Act/dgActivity/dgActivityRole/dgProjectManager/roleName),
130                                ($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation),
131                                ($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails),
132                                for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder
133                                        order by $PMRole/startDate empty least, $PMRole/endDate empty least
134                                        return
135                                        element dgRoleHolder {
136                                                if (exists($PMRole/moles:dgOrganisationID)) then
137                                                        f:return-stub-organisation('organisation', data($PMRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PMRole/moles:dgOrganisationID/moles:localIdentifier))
138                                                 else if (exists($PMRole/moles:dgPersonID)) then
139                                                        f:return-stub-person('person', string($PMRole/moles:dgPersonID/moles:repositoryIdentifier), string($PMRole/moles:dgPersonID/moles:localIdentifier))
140                                                 else (),
141                                                ($PMRole/startDate),
142                                                if (exists($PMRole/moles:endDate)) then
143                                                    ($PMRole/moles:endDate)
144                                                else (),
145                                                if (exists($PMRole/moles:localName)) then
146                                                    ($PMRole/moles:localName)
147                                                else ()
148                                        } (: </dgRoleHolder> :)
149                        } (: </dgProjectManager> :)
150                )
151                else ()
152        }, (: </dgActivityRole> :)
153        for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment
154                return
155                element ActivityDeployment {
156                        ($RelDep/moles:DateStart),
157                        if (exists($RelDep/moles:DateEnd)) then
158                            ($RelDep/moles:DateEnd)
159                        else (),
160                        ($RelDep/moles:dgMetadataID),
161                        f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)),
162                        f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)),
163                        for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord
164                                where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier
165                                        and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier
166                        return
167                                f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier))
168                }, (: </ActivityDeployment> :)
169                if (exists($Act/dgActivityCoverage)) then
170                    ($Act/dgActivityCoverage)
171                    else (),
172                if (exists($Act/dgActivityDuration)) then
173                    ($Act/dgActivityDuration)
174                    else ()
175        } , (: </dgActivity> :)
176        for $strkwrd in $Act/moles:dgStructuredKeyword return $strkwrd,
177        if (exists($Act/moles:dgMetadataProvenance)) then $Act/moles:dgMetadataProvenance else (),
178        if (exists($Act/moles:dgMetadataSecurity)) then $Act/moles:dgMetadataSecurity else ()
179} (:</dgMRecord>:)
180) (: End namespace strip :)
Note: See TracBrowser for help on using the repository browser.