source: TI01-discovery-Ingest/trunk/v4n_MEDIN/ingestAutomation-upgrade/OAIBatch/medin_2_3_ISO19139.py @ 7052

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery-Ingest/trunk/v4n_MEDIN/ingestAutomation-upgrade/OAIBatch/medin_2_3_ISO19139.py@7052
Revision 7052, 12.7 KB checked in by sdonegan, 11 years ago (diff)

Added code to support requirement to extract DataFormats? from ISO

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 medin_2_3_ISO19139:
12       
13        def __init__(self):
14               
15                logging.info("Initiated ISO data model: MEDIN_v2.3 profile (accessor class date = 09/02/2010 SJD")
16       
17        '''
18        Method to extract the dataset ID from the xml
19        '''
20        def datasetID(self):
21               
22                #datasetID = (self.datasetID.__name__,{1:{'xpath':'gmd:fileIdentifier/gco:CharacterString'}})
23                datasetID = (self.datasetID.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString'}})
24               
25                return datasetID
26       
27        def dataSetName(self):
28                '''
29                See notes in metadataDates for tuple format
30                '''
31               
32                datasetName = (self.dataSetName.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString'}})
33               
34                return datasetName
35       
36       
37        def dataSetAbstract(self):
38                '''
39                See notes in metadataDates for tuple format
40                '''
41               
42                datasetName = (self.dataSetAbstract.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract/gco:CharacterString'}})
43               
44                return datasetName
45       
46       
47        def dataCentreName(self):
48                '''
49                See notes in metadataDates for tuple format
50                '''
51               
52                dataCentreName = (self.dataCentreName.__name__,{1:{
53                                                                                                        'baseXpath':'gmd:contact/gmd:CI_ResponsibleParty',
54                                                                                                        'elValXpath':'gmd:organisationName/gco:CharacterString',
55                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
56                                                                                                        'depVal':'pointOfContact'}},
57                                                                                                        {2:{
58                                                                                                        'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty',
59                                                                                                        'elValXpath':'gmd:organisationName/gco:CharacterString',
60                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
61                                                                                                        'depVal':'pointOfContact'}})
62               
63                return dataCentreName
64       
65               
66       
67        def boundingDates(self):
68                '''
69                See notes in metadataDates for tuple format
70                '''
71                               
72                date = (self.boundingDates.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition'}},
73                                                                                        {2:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition'}},
74                                                                                        {'order':{'start':1,'end':2}})
75                                                               
76               
77                return date
78       
79        def coordinates(self):
80               
81                '''
82                See notes in metadataDates for tuple format
83                '''
84                               
85                #NOTE coords in north,south,east,west sequence
86                coordinates = (self.coordinates.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:northBoundLatitude/gco:Decimal'}},
87                                                                        {2:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:southBoundLatitude/gco:Decimal'}},
88                                                                        {3:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal'}},
89                                                                        {4:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal'}},
90                                                                        {'order':{'north':1,'south':2,'east':3,'west':4}})
91               
92                return coordinates
93       
94               
95       
96        def originalFormat(self):
97                '''
98                See notes in metadataDates for tuple format
99                '''
100               
101                originalFormat = (self.originalFormat.__name__,{1:{'xpath':'metadataStandardName/gco:CharacterString'}})
102               
103                return originalFormat
104       
105       
106        def originalFormatVersion(self):
107                '''
108                See notes in metadataDates for tuple format
109                '''
110               
111                originalFormatVersion = (self.originalFormatVersion.__name__,{1:{'xpath':'metadataStandardVersion/gco:CharacterString'}})
112               
113                return originalFormatVersion
114       
115       
116       
117        def dataFormats(self):
118                '''
119                See notes in metadataDates for tuple format
120                '''
121               
122                originalFormat = (self.originalFormat.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceFormat/gmd:MD_Format/gmd:name/gco:CharacterString'}})
123               
124                return originalFormat
125       
126       
127        def authors(self):
128                '''
129                See notes in metadataDates for tuple format
130               
131                1. According to MEDIN profile (element 22 p37) -for authors I will use "individualName" whatever roleCode is - as currently (11/02/10) understand author in this context
132                   to be any identified individual contributing to the dataset.  To restrict to actual roles, use compound xpath type.
133               
134                '''
135               
136                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'}})
137                                       
138                return authors
139       
140       
141        def parameters(self):
142                '''
143                See notes in metadataDates for tuple format NOTE - USE KEYWORDS!!
144               
145                1. For MEDIN use the TopicCategories for parameters (not handled differently than in DIF's
146                '''
147                #Note that in StubISO same element structure is used for related_urls!
148               
149                parameters = (self.parameters.__name__, {1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_TopicCategoryCode'}})
150               
151                '''
152                parameters = (self.parameters.__name__,{1:{                                                                     
153                'baseXpath':'distributionInfo/gmd:MD_Distribution/transferOptions',
154                'elValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/description/gco:CharacterString',
155                'depValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/function/gmd:CI_onLineFunctionCode',
156                'depVal':'DIF:PARAMETERS'}})
157                '''
158               
159                return parameters
160       
161       
162       
163        def resourceType(self):
164       
165                '''
166                Method to extract and return resourceType - extra column required for this 'searchTarget' requested by Gaynor.
167               
168                MEDIN element 4 p12             
169               
170                '''
171               
172                resource = (self.resourceType.__name__,{1:{'xpath':'gmd:hierarchyLevel/gmd:MD_ScopeCode'}})
173       
174                return resource
175       
176       
177       
178       
179        def topicCategory(self):
180                '''
181                Method to extract and return topicCategory
182               
183                MEDIN element 9 p16,
184               
185                NB - equivalent to standard NDG ingest field
186                '''
187               
188                topicCategory = (self.topicCategory.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode'}})
189       
190                return topicCategory
191               
192       
193       
194       
195        def lineage(self):
196                '''
197                Method to extract and return lineage values. - extra column required for this 'searchTarget' requested by Gaynor.
198               
199                MEDIN element 17 p29
200                '''
201               
202                lineage = (self.lineage.__name__,{1:{'xpath':'gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage/gmd:statement/gco:CharacterString'}})
203               
204                return lineage
205       
206       
207        def publicAccessLimitations(self):
208                '''
209                Method to extract and return info on public access limitations - extra column required for this 'searchTarget' requested by Gaynor.
210               
211                MEDIN element 20 p33
212                '''
213               
214                publicAccess = (self.publicAccessLimitations.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:accessConstraints/gmd:MD_RestrictionCode'}})
215               
216                return publicAccess
217       
218       
219        def dataOriginator(self):
220                '''
221                Method to extract and return info on the Data Originator
222               
223                MEDIN element 22.1 p35.  For this will return a list of organisation names
224               
225                Mandatory - must have minimum of Organisation Name or Person Name.
226                '''
227               
228                #originator = (self.dataOriginator.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString'}})
229               
230                #revised 07/06/10 SJD - Needs to pick out values where CI_RoleCode = originator (not sure why its not already doing this..)
231                # also may not have Organisation name, so look uo
232                originator = (self.dataOriginator.__name__,{1:{
233                                                                                                        'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty',
234                                                                                                        'elValXpath':'gmd:organisationName/gco:CharacterString',
235                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
236                                                                                                        'depVal':'originator'}},
237                                                                                                        {2:{
238                                                                                                        'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty',
239                                                                                                        'elValXpath':'gmd:individualName/gco:CharacterString',
240                                                                                                        'depValXpath':'gmd:role/gmd:CI_RoleCode',
241                                                                                                        'depVal':'originator'}})
242               
243                return originator
244       
245       
246       
247        def keywords(self):
248               
249                '''
250                See notes in metadataDates for tuple format
251               
252                1. For MEDIN see Element 11 p18 - currently this method LUMPS ALL ISO keywords together!!!
253                '''
254                keywords = (self.keywords.__name__,{1:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString'}},
255                                                                                        {2:{'xpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gmx:Anchor'}}
256                                                                               
257                                )
258               
259                return keywords
260       
261       
262        def urlsToChange(self):
263                '''
264                Method containing standard iso xpath for URL's to be changed for purposes of NDG redirect
265               
266                MEDIN - updated to change home pages, resources etc : Element 5.1 (resource locator url), Element 7 (coupled resource)
267               
268                '''
269               
270                urls = (self.urlsToChange.__name__,
271                        {1:{'xpath':'distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL'}})
272                       
273                '''                                                             
274                'baseXpath':'distributionInfo/gmd:MD_Distribution/transferOptions',
275                'elValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL',
276                'depValXpath':'gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/function/gmd:CI_onLineFunctionCode',
277                'depVal':'DIF:RELATED_URL'}},
278                {3:{'baseXpath':'gmd:contact/gmd:CI_ResponsibleParty/gmd:contactInfo/gmd:CI_Contact/gmd:onlineResource',
279                                                                                                        'elValXpath':'gmd;linkage/gmd:URL',
280                                                                                                        'depValXpath':'function/gmd:CI_onLineFunctionCode',
281                                                                                                        'depVal':'DIF:DC_URL'}}
282                '''
283               
284                return urls
285               
286       
287       
288        def metadataCreationDate(self):
289               
290               
291                '''revised
292                Tuple to hold information data - return list of lists if list has 4 values
293                then its a dependant type in which case the list is the following format:
294                        [0] Base Xpath: the xpath from the root element to the element subtree at which point the required and dependant value branches
295                        [1] Value required xpath: the xpath to the subelement for the desired value
296                        [2] Dependant value xpath: the xpath to the subelement in which the dependant value resides i.e. an ISO role code
297                        [3] Dependant value: the value to match [2] - if it matches then value [1] returned, otherwise None returned
298                USE "returnDependantElementVal" method with this type!!
299               
300                If List has a SINGLE element then this is the xpath from the root element to the desired value
301                '''
302               
303                creationDate = (self.metadataCreationDate.__name__,{1:{'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date',
304                                                                                                                        'elValXpath':'gmd:CI_Date/gmd:date/gco:Date',
305                                                                                                                        'depValXpath':'gmd:CI_Date/gmd:dateType/gmd:CI_DateTypeCode',
306                                                                                                                        'depVal':'creation'}})
307                               
308                return creationDate
309       
310       
311        '''
312        Return xpaths to revisionDate
313        '''
314        def metadataPublicationDate(self):
315               
316                publicationDate = (self.metadataPublicationDate.__name__,{1:{'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date',
317                                                                                                                        'elValXpath':'gmd:CI_Date/gmd:date/gco:Date',
318                                                                                                                        'depValXpath':'gmd:CI_Date/gmd:dateType/gmd:CI_DateTypeCode',
319                                                                                                                        'depVal':'publication'}})
320               
321                return publicationDate
322       
323       
324        '''
325        Return xpaths to revisionDate
326        '''
327        def metadataRevisionDate(self):
328               
329                '''
330                revisionDate = (self.metadataRevisionDate.__name__,{1:{'baseXpath':'gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date',
331                                                                                                                        'elValXpath':'gmd:CI_Date/gmd:date/gco:Date',
332                                                                                                                        'depValXpath':'gmd:CI_Date/gmd:dateType/gmd:CI_DateTypeCode',
333                                                                                                                        'depVal':'revision'}})
334                '''
335               
336                #for medin - revisionDate is same as updateDate
337                revisionDate = (self.metadataRevisionDate.__name__,{1:{'xpath':'gmd:dateStamp/gco:Date'}})
338               
339                return revisionDate
340       
341       
342        def metadataUpdateDate(self):           
343                '''
344                Method to extract and return the timestamp of the metadata
345               
346                MEDIN element 26 p 43
347                '''
348               
349                updateDate = (self.metadataUpdateDate.__name__,{1:{'xpath':'gmd:dateStamp/gco:Date'}})
350               
351                return updateDate
352               
Note: See TracBrowser for help on using the repository browser.