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

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

Namespaced queries starting points

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
21for $Act in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[moles:dgActivity!='' and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk' and moles:dgMetadataID/moles:localIdentifier='activity1']
22return
23element dgMetadataRecord {
24        element dgMetadataID {
25                element schemeIdentifier {'NDG-B1'},
26                f:strip-namespace(element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}),
27                element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)}
28        },
29        f:strip-namespace($Act/moles:dgMetadataDescription),
30        f:strip-namespace($Act/moles:name),
31        f:strip-namespace($Act/moles:abbreviation),
32        element dgActivity {
33                for $RelatedActivities in $Act/dgActivity/moles:relatedActivity
34                        for $RelatedActivity in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
35                            and moles:dgMetadataID/moles:repositoryIdentifier=$RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier
36                            and moles:dgMetadataID/moles:localIdentifier=$RelatedActivities/moles:relatedActivityID/moles:localIdentifier]
37                        return
38                        element relatedActivity {
39                                f:strip-namespace($RelatedActivities/moles:relatedActivityID),
40                                f:strip-namespace($RelatedActivity/moles:name),
41                                f:strip-namespace($RelatedActivity/moles:abbreviation),
42                                f:strip-namespace($RelatedActivities/moles:activityRelation)
43                        },      (: </relatedActivity> :)
44                if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataCollection)
45                else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataProject)
46                else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataInvestigation)
47                else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then f:strip-namespace($Act/moles:dgActivity/moles:dgActivityDataCampaign)
48                else (),
49                element dgActivityRole {
50                        element dgInvestigator {
51                                element dgPrincipalInvestigator {
52                                        f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID),
53                                        f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName),
54                                        f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation),
55                                        f:strip-namespace($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                                                                for $PIRoleHolder in collection('/db/moles')/moles:dgMetadata/moles:dgOrganisation[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$PIRole/moles:dgOrganisationID/moles:repositoryIdentifier and moles:localIdentifier=$PIRole/moles:dgOrganisationID/moles:localIdentifier]]
62                                                                return f:strip-namespace($PIRoleHolder))
63                                                         else (),
64                                                        if (exists($PIRole/moles:dgPersonID)) then (
65                                                                for $PIRoleHolder in collection('/db/moles')/moles:dgMetadata/moles:dgPerson[
66                                                                    dgMetadataID[
67                                                                        moles:schemeIdentifier='NDG-B0'
68                                                                        and moles:repositoryIdentifier=$PIRole/moles:dgPersonID/moles:repositoryIdentifier
69                                                                        and moles:localIdentifier=$PIRole/moles:dgPersonID/moles:localIdentifier]]
70                                                                return f:strip-namespace($PIRoleHolder))
71                                                         else (),
72                                                        f:strip-namespace($PIRole/moles:startDate),
73                                                        if (exists($PIRole/moles:endDate)) then
74                                                            f:strip-namespace($PIRole/moles:endDate)
75                                                        else (),
76                                                        if (exists($PIRole/moles:localName)) then
77                                                            f:strip-namespace($PIRole/moles:localName)
78                                                        else ()
79                                                } (: </dgRoleHolder> :)
80                                }, (: </dgPrincipalInvestigator> :)
81                                for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator
82                                return 
83                                        element dgCoInvestigator {
84                                            f:strip-namespace($CI/moles:dgMetadataID),
85                                            f:strip-namespace($CI/moles:roleName),
86                                            f:strip-namespace($CI/moles:abbreviation),
87                                            f:strip-namespace($CI/moles:contactDetails),
88                                            for $CIRole in $CI/moles:dgRoleHolder
89                                                order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least
90                                            return
91                                                element dgRoleHolder {
92                                                        if (exists($CIRole/moles:dgOrganisationID)) then (
93                                                                for $CIRoleHolder in collection('/db/moles')/moles:dgMetadata/moles:dgOrganisation
94                                                                    [moles:dgMetadataID
95                                                                        [moles:schemeIdentifier='NDG-B0'
96                                                                        and moles:repositoryIdentifier=$CIRole/moles:dgOrganisationID/moles:repositoryIdentifier
97                                                                        and moles:localIdentifier=$CIRole/moles:dgOrganisationID/moles:localIdentifier]
98                                                                    ]
99                                                                return f:strip-namespace($CIRoleHolder))
100                                                         else (),
101                                                        if (exists($CIRole/moles:dgPersonID)) then (
102                                                                for $CIRoleHolder in collection('/db/moles')/moles:dgMetadata/moles:dgPerson
103                                                                    [moles:dgMetadataID
104                                                                        [moles:schemeIdentifier='NDG-B0'
105                                                                        and moles:repositoryIdentifier=$CIRole/moles:dgPersonID/moles:repositoryIdentifier
106                                                                        and moles:localIdentifier=$CIRole/moles:dgPersonID/moles:localIdentifier]
107                                                                    ]
108                                                                return f:strip-namespace($CIRoleHolder))
109                                                         else (),
110                                                        f:strip-namespace($CIRole/moles:startDate),
111                                                        if (exists($CIRole/moles:endDate)) then
112                                                            f:strip-namespace($CIRole/moles:endDate)
113                                                        else (),
114                                                        if (exists($CIRole/moles:localName)) then
115                                                            f:strip-namespace($CIRole/moles:localName)
116                                                        else ()
117                                                } (: </dgRoleHolder> :)
118                                } (: </dgCoInvestigator> :)
119                }, (: </dgInvestigator> :)
120                if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then (
121                        element dgTechnicalContact {
122                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID),
123                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName),
124                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation),
125                                f:strip-namespace($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails),
126                                for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder
127                                        order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least
128                                        return
129                                        element dgRoleHolder {
130                                            for $TechConRoleHolder in collection('/db/moles')/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson)[
131                                                (moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
132                                                and moles:dgMetadataID/moles:repositoryIdentifier=$TechConRole/*/moles:repositoryIdentifier
133                                                and moles:dgMetadataID/moles:localIdentifier=$TechConRole/*/moles:localIdentifier)]
134                                                return f:strip-namespace($TechConRoleHolder),
135                                            f:strip-namespace($TechConRole/moles:startDate),
136                                            if (exists($TechConRole/moles:endDate)) then
137                                                f:strip-namespace($TechConRole/moles:endDate)
138                                            else (),
139                                            if (exists($TechConRole/moles:localName)) then
140                                                    f:strip-namespace($TechConRole/moles:localName)
141                                            else ()
142                                        } (: </dgRoleHolder> :)
143                        } (: </dgTechnicalContact> :)
144                )
145                else (),
146                if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then (
147                        element dgProjectManager {
148                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID),
149                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/roleName),
150                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation),
151                                f:strip-namespace($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails),
152                                for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder
153                                        order by $PMRole/startDate empty least, $PMRole/endDate empty least
154                                        return
155                                        element dgRoleHolder {
156                                                for $PMRoleHolder in collection('/db/moles')/dgMetadata/(dgOrganisation | dgPerson)[(dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier=$PMRole/*/repositoryIdentifier and dgMetadataID/localIdentifier=$PMRole/*/localIdentifier)]
157                                                return f:strip-namespace($PMRoleHolder),
158                                                f:strip-namespace($PMRole/startDate),
159                                                if (exists($PMRole/moles:endDate)) then
160                                                    f:strip-namespace($PMRole/moles:endDate)
161                                                else (),
162                                                if (exists($PMRole/moles:localName)) then
163                                                    f:strip-namespace($PMRole/moles:localName)
164                                                else ()
165                                        } (: </dgRoleHolder> :)
166                        } (: </dgProjectManager> :)
167                )
168                else ()
169        }, (: </dgActivityRole> :)
170        for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment
171                return
172                element ActivityDeployment {
173                        f:strip-namespace($RelDep/moles:DateStart),
174                        if (exists($RelDep/moles:DateEnd)) then
175                            f:strip-namespace($RelDep/moles:DateEnd)
176                        else (),
177                        f:strip-namespace($RelDep/moles:dgMetadataID),
178                        for $SRDPT in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[
179                            (moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
180                            and moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:DataProductionToolID/moles:repositoryIdentifier
181                            and moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:DataProductionToolID/moles:localIdentifier)]
182                                return
183                                element dataproductiontool {
184                                        f:strip-namespace($SRDPT/moles:dgMetadataID),
185                                        f:strip-namespace($SRDPT/moles:dgMetadataDescription),
186                                        f:strip-namespace($SRDPT/moles:name),
187                                        f:strip-namespace($SRDPT/moles:abbreviation),
188                                        element dgDataProductionTool {
189                                                f:strip-namespace($SRDPT/moles:dgDataProductionTool/moles:contactDetails),
190                                                if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then
191                                                    f:strip-namespace($SRDPT/moles:dgDataProductionTool/moles:dgModel)
192                                                else (),
193                                                if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then
194                                                    f:strip-namespace($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)
195                                                else ()
196                                        } (: </dgDataProductionTool> :)
197                                }, (: </dataproductiontool> :)
198                        for $SRObsStn in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[
199                            (moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
200                            and moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:ObservationStationID/moles:repositoryIdentifier
201                            and moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:ObservationStationID/moles:localIdentifier)]
202                                return
203                                element observationstation {
204                                        f:strip-namespace($SRObsStn/moles:dgMetadataID),
205                                        f:strip-namespace($SRObsStn/moles:dgMetadataDescription),
206                                        f:strip-namespace($SRObsStn/moles:name),
207                                        f:strip-namespace($SRObsStn/moles:abbreviation),
208                                        element dgObservationStation {
209                                                f:strip-namespace($SRObsStn/moles:dgObservationStation/moles:contactDetails),
210                                                if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then
211                                                    f:strip-namespace($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)
212                                                else (),
213                                                if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then
214                                                    f:strip-namespace($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)
215                                                else ()
216                                        } (: </dgObservationStation> :)
217                                }, (: </observationstation> :)
218                        for $DE in collection('/db/moles')/moles:dgMetadata/moles:dgMetadataRecord[
219                            moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
220                            and moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier
221                            and moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier]
222                            return
223                                element dataEntity {
224                                    f:strip-namespace($DE/moles:dgMetadataID),
225                                    f:strip-namespace($DE/moles:dgMetadataDescription),
226                                    f:strip-namespace($DE/moles:name),
227                                    f:strip-namespace($DE/moles:abbreviation),
228                                    element dgDataEntity {
229                                        f:strip-namespace($DE/moles:dgDataEntity/moles:dgDataSetType),
230                                        f:strip-namespace($DE/moles:dgDataEntity/moles:dgDataGranule),
231                                        f:strip-namespace($DE/moles:dgDataEntity/moles:dgDataSummary)
232                                    } (: </dgDataEntity> :)
233                                    }  (: </dataEntity> :)
234                }, (: </ActivityDeployment> :)
235                if (exists($Act/dgActivityCoverage)) then
236                    f:strip-namespace($Act/dgActivityCoverage)
237                    else (),
238                if (exists($Act/dgActivityDuration)) then
239                    f:strip-namespace($Act/dgActivityDuration)
240                    else ()
241        }, (: </dgActivity> :)
242                if (exists($Act/dgStructuredKeyword)) then
243            f:strip-namespace($Act/dgStructuredKeyword)
244                else (),
245                if (exists($Act/DataProvenance)) then
246            f:strip-namespace($Act/DataProvenance)
247                else (),
248                if (exists($Act/MetadataSecurity)) then
249            f:strip-namespace($Act/MetadataSecurity)
250                else ()
251
252
253} (:</dgMRecord>:)
Note: See TracBrowser for help on using the repository browser.