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

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

added extra fields etc for medin

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