source: TI07-MOLES/trunk/ISO19115-19139/XQuery/NDG-ISO19115-139.xquery @ 2185

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/ISO19115-19139/XQuery/NDG-ISO19115-139.xquery@2185
Revision 2185, 12.0 KB checked in by ko23, 13 years ago (diff)

Refactoring intermediate

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
4
5declare variable $targetCollection as xs:string {'TargetCollection'};
6declare variable $repositoryIdentifier as xs:string {'RepositoryID'};
7declare variable $localIdentifier as xs:string {'LocalID'};
8
9declare default element namespace 'http://www.isotc211.org/2005/gmd';
10declare namespace moles='http://ndg.nerc.ac.uk/moles';
11declare namespace gco='http://www.isotc211.org/2005/gco';
12declare namespace gmd='http://www.isotc211.org/2005/gmd';
13declare namespace gml='http://www.opengis.net/gml';
14declare namespace xlink='http://www.w3.org/1999/xlink';
15declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';
16
17for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[
18        exists(moles:dgDataEntity)
19        and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
20        and moles:dgMetadataID/moles:repositoryIdentifier='grid.bodc.nerc.ac.uk'
21        and moles:dgMetadataID/moles:localIdentifier='HGFS3751']
22return
23element MD_Metadata {
24        attribute xsi:schemaLocation {'http://www.isotc211.org/2005/gmd http://www.isotc211.org/2005/gmd/metadataEntity.xsd'},
25        element fileIdentifier {element gco:CharacterString {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'ISO19115', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)}},
26        element language {
27                element gmd:LanguageCode {
28                        attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#LanguageCode'},
29                        attribute codeListValue {'eng'},
30                        'English'}
31        } (: </language> :),
32        element hierarchyLevel {
33                element MD_ScopeCode {
34                        attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode'},
35                        attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode_dataset'},
36                        'dataset'}
37        } (: </hierarchyLevel> :),
38        for $parent in $DE/moles:dgRelatedDataEntity[moles:RelationID/moles:dgValidTerm='is-part-of']
39        return
40                element parentIdentifier  {element gco:CharacterString {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, ':', $DE/moles:dgMetadataID/moles:localIdentifier, ':', $DE/moles:dgMetadataID/moles:localIdentifier)}},
41        for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder[not(exists(moles:endDate)) or moles:endDate='']
42        return
43                for $DataCuratorRoleHolder in collection($targetCollection)/moles:dgMetadata/(moles:dgPerson | moles:dgOrganisation)[
44                        moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'
45                        and moles:dgMetadataID/moles:repositoryIdentifier=$DataCuratorRole/(moles:dgPersonID | moles:dgOrganisationID)/moles:repositoryIdentifier
46                        and moles:dgMetadataID/moles:localIdentifier=$DataCuratorRole/(moles:dgPersonID | moles:dgOrganisationID)/moles:localIdentifier]
47                return
48                        element contact {
49                                element CI_ResponsibleParty {
50                                        if (string(local-name($DataCuratorRoleHolder))='dgOrganisation') then
51                                                element organisationName {element gco:CharacterString {string($DataCuratorRoleHolder/moles:name)}}
52                                        else if (string(local-name($DataCuratorRoleHolder))='dgPerson') then
53                                                element individualName {element gco:CharacterString {string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName)))}}
54                                        else ('empty content') ,       
55                                        element positionName {
56                                                if (exists($DataCuratorRoleHolder/moles:localName)) then
57                                                        element gco:CharacterString {$DataCuratorRoleHolder/moles:localName}
58                                                else if (exists($DataCuratorRole/moles:roleName)) then
59                                                        element gco:CharacterString {$DataCuratorRole/moles:roleName}
60                                                else
61                                                        element gco:CharacterString {'Curator'}
62                                        } (: </positionName>:),
63                                        element contactInfo {
64                                                element gmd:CI_Contact {
65                                                        if (exists($DataCuratorRole/moles:contactDetails/moles:telephone
66                                                                or $DataCuratorRole/moles:contactDetails/moles:fax
67                                                                or $DataCuratorRoleHolder/moles:contactDetails/moles:telephone
68                                                                or $DataCuratorRoleHolder/moles:contactDetails/moles:fax)) then
69                                                                element phone {
70                                                                        element gmd:CI_Telephone {
71                                                                                if (exists($DataCuratorRole/moles:contactDetails/moles:telephone)) then
72                                                                                        element voice {
73                                                                                                element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:telephone)}
74                                                                                        } (:</voice>:)
75                                                                                else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then
76                                                                                        element voice {
77                                                                                                element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)}
78                                                                                        } (:</voice>:)
79                                                                                else (),
80                                                                                if (exists($DataCuratorRole/moles:contactDetails/moles:fax)) then
81                                                                                        element facsimile {
82                                                                                                element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:fax)}
83                                                                                        } (: </facsimile> :)
84                                                                                else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then
85                                                                                        element facsimile {
86                                                                                                element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:fax)}
87                                                                                        } (: </facsimile> :)
88                                                                                else ()
89                                                                        } (: </gmd:CI_Telephone> :)
90                                                                } (: </phone> :)
91                                                                        else (),
92                                                        element address {
93                                                                element gmd:CI_Address {
94                                                                        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:addressline)) then                               
95                                                                                for $addressline in $DataCuratorRole/moles:contactDetails/moles:address/moles:addressline
96                                                                                return
97                                                                                        element deliveryPoint {element gco:CharacterString {data($addressline)}}
98                                                                        else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline)) then
99                                                                                for $addressline in $DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline
100                                                                                return
101                                                                                        element deliveryPoint {element gco:CharacterString {data($addressline)}}
102                                                                        else (),
103                                                                        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:city)) then
104                                                                                element city {element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:address/moles:city)}}
105                                                                        else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)) then
106                                                                                element city {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)}}
107                                                                        else (),
108                                                                        if (exists($DataCuratorRole/moles:contactDetails/moles:eMail)) then
109                                                                                element electronicMailAddress {element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:eMail)}}
110                                                                        else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)) then
111                                                                                element electronicMailAddress {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:eMail)}}
112                                                                        else ()
113                                                                } (: </gmd:CI_Address> :)
114                                                        } (: </address> :)
115                                                } (: </gmd:CI_Contact> :)
116                                        } (: </contactInfo> :),
117                                        element role {
118                                                element CI_RoleCode {
119                                                        attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode'},
120                                                        attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode_custodian'},
121                                                        if (exists($DataCuratorRole/moles:localName)) then                               
122                                                                data($DataCuratorRole/moles:localName)
123                                                        else if (exists($DataCuratorRoleHolder/moles:localName)) then
124                                                                data($DataCuratorRoleHolder/moles:localName)
125                                                        else 'Curator' 
126                                                } (: </CI_RoleCode> :)
127                                        } (: </role> :)
128                                } (: </CI_ResponsibleParty> :)
129                        } (: </contact> :),
130
131                        element dateStamp {element gco:Date {adjust-date-to-timezone(current-date())}},
132                        element metadataStandardName {element gco:CharacterString {'ISO 19115:2003'}},
133                        element metadataStandardVersion {element gco:CharacterString {'2003'}},
134                        element identificationInfo {
135                                element gmd:MD_DataIdentification {
136                                        element citation {
137                                                element gmd:CI_Citation {
138                                                        element title {element gco:CharacterString {data($DE/moles:name)}},
139                                                        if (exists($DE/moles:abbreviation) and not(empty($DE/moles:abbreviation))) then
140                                                                element alternateTitle {element gco:CharacterString {data($DE/moles:abbreviation)}}
141                                                        else (),
142                                                        element date {
143                                                                if (exists($DE/(moles:DataProvenance | moles:dgMetadataProvenance)/moles:RecordCreation/moles:CreatedDate)) then
144                                                                        element gmd:CI_Date {
145                                                                                element date {element gco:Date {adjust-date-to-timezone(data($DE/(moles:DataProvenance | moles:dgMetadataProvenance)/moles:RecordCreation/moles:CreatedDate))}},
146                                                                                element dateType {
147                                                                                        element CI_DateTypeCode {
148                                                                                                attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/moles:gmxCodelists.xml#CI_DateTypeCode'},
149                                                                                                attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode_creation' },
150                                                                                                'Creation'}
151                                                                                } (: </dataType> :)
152                                                                        } (: </gmd:CI_Date> :)
153                                                                else
154                                                                        attribute gco:nilReason {'unknown'}
155                                                        } (: </date> :)
156                                                } (: </gmd:CI_Citation> :)
157                                        } (: </citation> :),
158                                        element abstract {element gco:CharacterString {data($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)}},
159                                        element language {
160                                                element gmd:LanguageCode {
161                                                        attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#LanguageCode'},
162                                                        attribute codeListValue {'eng'},
163                                                        'English' }
164                                        } (: </language> :),
165                                        for $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[dgValidTermID/moles:ParentListID='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'])
166                                        return
167                                                element topicCategory {
168                                                        element gmd:MD_TopicCategoryCode {
169                                                                attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'},
170                                                                attribute codeListValue {string($ISOTopicCategory/moles:dgValidTerm)},
171                                                                string($ISOTopicCategory/moles:dgValidTerm)}
172                                                } (: </topicCategory> :),
173                                        if (exists($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage)) then
174                                                element extent {
175                                                        element gmd:EX_Extent {
176                                                                (: add bounding boxes:)
177                                                                for $geoBBox in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:BoundingBox
178                                                                return
179                                                                        element geographicElement {
180                                                                                element EX_GeographicBoundingBox {
181                                                                                        element westBoundLongitude {element gco:Decimal {data($geoBBox/moles:LimitWest)}},
182                                                                                        element eastBoundLongitude {element gco:Decimal {data($geoBBox/moles:LimitEast)}},
183                                                                                        element southBoundLatitude {element gco:Decimal {data($geoBBox/moles:LimitSouth)}},
184                                                                                        element northBoundLatitude {element gco:Decimal {data($geoBBox/moles:LimitNorth)}}
185                                                                                } (: </EX_GeographicBoundingBox> :)
186                                                                        } (: </geographicElement> :),
187                                                                (: add location terms:)
188                                                                for $geoArea in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgArea
189                                                                return
190                                                                        element geographicElement {
191                                                                                element EX_GeographicDescription {
192                                                                                        element geographicIdentifier {
193                                                                                                element gmd:RS_Identifier {
194                                                                                                        element gco:CharacterString {element code {data(dgArea/dgValidTerm)}},
195                                                                                                        element gco:CharacterString {element codeSpace {data(dgArea/dgValidTermID/ParentListID)}}
196                                                                                                        }
197                                                                                                }
198                                                                                } (: </EX_GeographicDescription> :)
199                                                                        } (: </geographicElement> :)
200                                                        } (: </gmd:EX_Extent> :)
201                                                } (: </extent> :)
202                                        else()
203                                } (:</gmd:MD_DataIdentification> :)
204                        } (: </identificationInfo> :)
205} (: </MD_Metadata> :)
Note: See TracBrowser for help on using the repository browser.