source: TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch/difConvertedto_ISO19139.py @ 7725

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/OAIBatch/difConvertedto_ISO19139.py@7725
Revision 7725, 9.3 KB checked in by sdonegan, 10 years ago (diff)

Updates to allow proper handling of NERC DMS format and uprated dif2iso conversion

Line 
1import string,logging
2
3'''
4Class to hold methods that define the tuples holding xpath information to be used with the iso accessor class to
5return information for various parameters needed to complete the NDG Discovery Service database as part of the MEDIN
6Upgraded ingest system.
7
8Steve Donegan Dec/Jan 2009/2010.
9
10'''
11class difConvertedto_ISO19139:
12       
13        def __init__(self):
14               
15                logging.info("Initiated ISO data model: GCMD converted to ISO19139 MEDIN v? profile")
16       
17        '''
18        Method to extract the dataset ID from the xml
19        '''
20        def datasetID(self):
21               
22                datasetID = (self.dataSetName.__name__,{1:{'xpath':'gmd:fileIdentifier/gco:CharacterString'}})
23               
24                return datasetID
25       
26        def dataSetName(self):
27                '''
28                See notes in metadataDates for tuple format
29                '''
30               
31                datasetName = (self.dataSetName.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/title/gco:CharacterString'}})
32               
33                return datasetName
34       
35       
36        def dataSetAbstract(self):
37                '''
38                See notes in metadataDates for tuple format
39                '''
40               
41                datasetName = (self.dataSetAbstract.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract/gco:CharacterString'}})
42               
43                return datasetName
44       
45       
46        def dataCentreName(self):
47                '''
48                See notes in metadataDates for tuple format
49                '''
50               
51                dataCentreName = (self.dataCentreName.__name__,{1:{
52                                                                                                        'baseXpath':'gmd:contact/gmd:CI_ResponsibleParty',
53                                                                                                        'elValXpath':'gmd:organisationName/gco:CharacterString',
54                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
55                                                                                                        'depVal':'pointOfContact'}},
56                                                                                                        {2:{
57                                                                                                        'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty',
58                                                                                                        'elValXpath':'gmd:organisationName/gco:CharacterString',
59                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
60                                                                                                        'depVal':'pointOfContact'}})
61               
62                return dataCentreName
63       
64       
65        def dataOriginator(self):
66                '''
67                Method to extract and return info on the Data Originator
68               
69                MEDIN element 22.1 p35.  For this will return a list of organisation names
70               
71                Mandatory - must have minimum of Organisation Name or Person Name.
72                '''
73               
74                #originator = (self.dataOriginator.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString'}})
75               
76                #revised 07/06/10 SJD - Needs to pick out values where CI_RoleCode = originator (not sure why its not already doing this..)
77                # also may not have Organisation name, so look uo
78                originator = (self.dataOriginator.__name__,{1:{
79                                                                                                        'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty',
80                                                                                                        'elValXpath':'gmd:organisationName/gco:CharacterString',
81                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
82                                                                                                        'depVal':'originator'}},
83                                                                                                        {2:{
84                                                                                                        'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty',
85                                                                                                        'elValXpath':'gmd:individualName/gco:CharacterString',
86                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
87                                                                                                        'depVal':'originator'}})
88               
89                return originator
90       
91               
92       
93        def boundingDates(self):
94                '''
95                See notes in metadataDates for tuple format
96                '''
97                               
98                date = (self.boundingDates.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition'}},
99                                                                                        {2:{'xpath':'gmd:identificationInfo/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition'}},
100                                                                                        {'order':{'start':1,'end':2}})
101                                                               
102               
103                return date
104       
105        def coordinates(self):
106               
107                '''
108                See notes in metadataDates for tuple format
109                '''
110                               
111                #NOTE coords in north,south,east,west sequence
112                coordinates = (self.coordinates.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:northBoundLongitude/gco:Decimal'}},
113                                                                        {2:{'xpath':'gmd:identificationInfo/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:southBoundLongitude/gco:Decimal'}},
114                                                                        {3:{'xpath':'gmd:identificationInfo/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal'}},
115                                                                        {4:{'xpath':'gmd:identificationInfo/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal'}},
116                                                                        {'order':{'north':1,'south':2,'east':3,'west':4}})
117               
118                return coordinates
119       
120               
121       
122        def originalFormat(self):
123                '''
124                See notes in metadataDates for tuple format
125                '''
126               
127                originalFormat = (self.originalFormat.__name__,{1:{'xpath':'metadataStandardName/gco:CharacterString'}})
128               
129                return originalFormat
130       
131       
132        def authors(self):
133                '''
134                See notes in metadataDates for tuple format
135                '''
136               
137                authors = (self.authors.__name__,{1:{'xpath':'gmd:contact/gmd:CI_ResponsibleParty/gmd:individualName/gco:CharacterString'}},{2:{'xpath':'gmd:contact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString'}},{3:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString'}})
138               
139                return authors
140       
141       
142        def parameters(self):
143                '''
144                See notes in metadataDates for tuple format
145                '''
146                #Note that in StubISO same element structure is used for related_urls!
147               
148                '''parameters = (self.parameters.__name__,{1:{                                                                 
149                'baseXpath':'distributionInfo/gmd:MD_Distribution/transferOptions',
150                'elValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/description/gco:CharacterString',
151                'depValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/function/gmd:CI_onLineFunctionCode',
152                'depVal':'DIF:PARAMETERS'}})'''
153               
154                parameters = (self.parameters.__name__, {1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_TopicCategoryCode'}})
155               
156                return parameters
157               
158       
159        def keywords(self):
160               
161                '''
162                See notes in metadataDates for tuple format
163                '''
164                keywords = (self.keywords.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString'}},
165                                                                                        {2:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gmx:Anchor'}}
166                                                                               
167                                )
168               
169                return keywords
170       
171       
172        def urlsToChange(self):
173                '''
174                Method containing standard iso xpath for URL's to be changed for purposes of NDG redirect
175               
176                '''
177               
178                urls = (self.urlsToChange.__name__,{1:{'xpath':'gmd:dataSetURI/gco:CharacterString'}},
179                        {2:{                                                                   
180                'baseXpath':'distributionInfo/gmd:MD_Distribution/transferOptions',
181                'elValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL',
182                'depValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/function/gmd:CI_onLineFunctionCode',
183                'depVal':'DIF:RELATED_URL'}},
184                {3:{'baseXpath':'gmd:contact/gmd:CI_ResponsibleParty/gmd:contactInfo/gmd:CI_Contact/gmd:onlineResource',
185                                                                                                        'elValXpath':'gmd;linkage/gmd:URL',
186                                                                                                        'depValXpath':'function/gmd:CI_onLineFunctionCode',
187                                                                                                        'depVal':'DIF:DC_URL'}}
188                )
189               
190                return urls
191       
192       
193        def topicCategory(self):
194                '''
195                Method to extract and return topicCategory
196               
197                MEDIN element 9 p16,
198               
199                NB - equivalent to standard NDG ingest field
200                '''
201               
202                topicCategory = (self.topicCategory.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode'}})
203       
204                return topicCategory
205               
206               
207       
208        def metadataCreationDate(self):
209               
210               
211                '''revised
212                Tuple to hold information data - return list of lists if list has 4 values
213                then its a dependant type in which case the list is the following format:
214                        [0] Base Xpath: the xpath from the root element to the element subtree at which point the required and dependant value branches
215                        [1] Value required xpath: the xpath to the subelement for the desired value
216                        [2] Dependant value xpath: the xpath to the subelement in which the dependant value resides i.e. an ISO role code
217                        [3] Dependant value: the value to match [2] - if it matches then value [1] returned, otherwise None returned
218                USE "returnDependantElementVal" method with this type!!
219               
220                If List has a SINGLE element then this is the xpath from the root element to the desired value
221                '''
222               
223                creationDate = (self.metadataCreationDate.__name__,{1:{'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date',
224                                                                                                                        'elValXpath':'gmd:CI_Date/gmd:date/gco:Date',
225                                                                                                                        'depValXpath':'gmd:CI_Date/gmd:dateType/gmd:CI_DateTypeCode',
226                                                                                                                        'depVal':'creation'}})
227                               
228                return creationDate
229       
230       
231        '''
232        Return xpaths to revisionDate
233        '''
234        def metadataPublicationDate(self):
235               
236                publicationDate = (self.metadataPublicationDate.__name__,{1:{'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date',
237                                                                                                                        'elValXpath':'gmd:CI_Date/gmd:date/gco:Date',
238                                                                                                                        'depValXpath':'gmd:CI_Date/gmd:dateType/gmd:CI_DateTypeCode',
239                                                                                                                        'depVal':'publication'}})
240               
241                return publicationDate
242       
243       
244       
245       
246        '''
247        Return xpaths to revisionDate
248        '''
249        def metadataRevisionDate(self):
250               
251                revisionDate = (self.metadataRevisionDate.__name__,{1:{'xpath':'gmd:dateStamp/gco:DateTime'}})
252               
253                return revisionDate
254               
Note: See TracBrowser for help on using the repository browser.