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

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

Update of Python library ISO19139 xquery

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