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

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

Corrected problem with ISO19139 showing areas

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