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

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

ISO19139 plus NS + BB and Area terms

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