Changeset 6613 for TI01-discovery-Ingest


Ignore:
Timestamp:
23/02/10 14:57:06 (10 years ago)
Author:
sdonegan
Message:

Added latest updates to extract all requested info from MEDIN iso

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery-Ingest/trunk/v4n_MEDIN/ingestAutomation-upgrade/OAIBatch/ExtractISO.py

    r6544 r6613  
    11 
    22from xml.etree import ElementTree as ET 
    3 import logging,urllib,os,sys 
     3import logging,urllib,os,sys,inspect 
    44 
    55class ExtractISO: 
     
    1010                self.isoFormatToExtract = isoFormat 
    1111                 
     12                #show actual values extracted from the XML in logging.info 
     13                self.showXMLvalues = True 
     14                 
    1215                logging.info("Have initialised ISO XML Extractor") 
    1316                 
     
    2629                rewriteIsoXml = self.changeElementUrlVal(self.isoModel.urlsToChange(), xmlOutputFile) 
    2730                 
    28                 #import pdb 
    29                 #pdb.set_trace() 
     31                 
    3032                #sys.exit() 
    3133                 
     
    6971                 
    7072                self.createDate = self.getElementVal(self.isoModel.metadataCreationDate()) 
    71                  
     73                                 
    7274                self.datasetName = self.getElementVal(self.isoModel.dataSetName())               
    7375                 
     
    8890                self.keywordsList = self.listify(self.keywords) 
    8991                 
    90                 self.boundingBoxCoordinates = self.getElementVal(self.isoModel.coordinates()) 
     92                self.boundingBoxCoordinates = self.getElementVal(self.isoModel.coordinates())                            
     93                 
     94                #These are the MEDIN requested extra fields - make optional 
     95                try: 
     96                        self.originalFormatVersion = self.getElementVal(self.isoModel.originalFormatVersion()) 
     97                except: 
     98                        self.originalFormatVersion = None 
     99                 
     100                try: 
     101                        self.publicationDate = self.getElementVal(self.isoModel.metadataPublicationDate()) 
     102                except: 
     103                        self.publicationDate = None 
     104                         
     105                try: 
     106                        self.resourceType = self.getElementVal(self.isoModel.resourceType()) 
     107                except: 
     108                        self.resourceType = None 
     109                 
     110                try: 
     111                        self.topicCategory = self.getElementVal(self.isoModel.topicCategory()) 
     112                except: 
     113                        self.topicCategory = None 
     114                 
     115                try: 
     116                        self.lineage = self.getElementVal(self.isoModel.lineage()) 
     117                except: 
     118                        self.lineage = None 
     119                 
     120                try: 
     121                        self.publicAccessLimitations = self.getElementVal(self.isoModel.publicAccessLimitations()) 
     122                except: 
     123                        self.publicAccessLimitations = None 
     124                         
     125                try: 
     126                        self.dataOriginator= self.getElementVal(self.isoModel.dataOriginator()) 
     127                except: 
     128                        self.dataOriginator = None 
     129                 
     130                try: 
     131                        self.dataFormat = self.getElementVal(self.isoModel.originalFormat()) 
     132                except: 
     133                        self.dataFormat = None 
     134                 
     135                try: 
     136                        self.metadataUpdateDate = self.getElementVal(self.isoModel.metadataUpdateDate()) 
     137                except: 
     138                        self.metadataUpdateDate = None 
     139                         
     140                         
     141                try: 
     142                        self.originalFormatName = self.getElementVal(self.isoModel.originalFormat()) 
     143                except: 
     144                        self.originalFormatName = None 
     145                         
     146                try: 
     147                        self.originalFormatVersion = self.getElementVal(self.isoModel.originalFormatVersion()) 
     148                except: 
     149                        self.originalFormatVersion = None 
    91150                 
    92151                logging.info("") 
     
    203262                                logging.info("Extracting xml using SIMPLE method for xpath def: " + str(cnt))                                            
    204263                                self.changeSimpleURLElementVal(thisData['xpath'])        
    205                                                  
     264                                                                                 
    206265                #having returned the completed xml tree... write it to the OP file dictated.. 
    207266                try: 
     
    250309                                except: 
    251310                                        logging.error("Could not change original (simple) url!") 
    252                                          
     311                 
     312                         
    253313                #no need to return anything -if we rewrite the doc, any successful changes will be incorporated, otherwise will be ignored 
    254314         
     
    301361                                                                                                                         
    302362                #no need to return anything -if we rewrite the doc, any successful changes will be incorporated, otherwise will be ignored 
    303          
    304          
     363                 
    305364         
    306365        ''' 
     
    345404                logging.info("******************************************************************************************") 
    346405                                 
     406                showValue = self.showXMLvalues 
    347407                 
    348408                #first need to interpret the contents of the tuple we've been passed everything is a dictionary in the tuple apart from element 0: 
     
    369429                valueList = [] 
    370430                ordering = False 
     431                 
    371432                cnt = 1 
    372433                 
     
    378439                        if 'baseXpath' in thisData.keys(): 
    379440                                logging.info("Extracting xml using COMPLEX dependant method for xpath def: " + str(cnt))                         
    380                                 returnVal = self.returnDependantElementVal(thisData['baseXpath'],thisData['elValXpath'],thisData['depValXpath'],thisData['depVal'])                              
     441                                returnVal = self.returnDependantElementVal(thisData['baseXpath'],thisData['elValXpath'],thisData['depValXpath'],thisData['depVal'],showValue)                            
    381442                                valueList.append(returnVal) 
    382443                                                                 
    383444                        if 'xpath' in thisData.keys():           
    384445                                logging.info("Extracting xml using SIMPLE method for xpath def: " + str(cnt))                                            
    385                                 returnVal =  self.returnSimpleElementVal(thisData['xpath'])                                                              
     446                                returnVal =  self.returnSimpleElementVal(thisData['xpath'],showValue)                                                            
    386447                                valueList.append(returnVal) 
    387448                                                                 
     
    406467                        i.e. [[start1,start2],[end1,end2]] to [[start1,end1],[start2,end2]] 
    407468                        ''' 
    408                          
     469                        #import pdb 
     470                        #pdb.set_trace() 
    409471                        #check that number of number of elements in ordering list is not less than number of items in list to be ordered! 
    410472                        #if multiple sets to be ordered, check numbers and return as dictionary 
     
    457519        otherwise an empty list is returned 
    458520        ''' 
    459         def returnDependantElementVal(self,baseXpath,elXpath,depXpath,depValReqd): 
     521        def returnDependantElementVal(self,baseXpath,elXpath,depXpath,depValReqd,showValue=False): 
    460522                         
    461523                #Note using single path namespath appender rather than list version.. (keeps it simpler)         
     
    489551                                                                         
    490552                                        if depVal == depValReqd: 
     553                                                 
     554                                                if showValue is True: 
     555                                                        logging.info("") 
     556                                                        logging.info("          Element Value: " + elVal) 
     557                                                        logging.info("") 
     558                                                 
    491559                                                resDependantVal.append(elVal) 
    492560                                                                                                                                                         
     
    496564        Method to extract a value from the doc using a simple xpath.  If no element found or no data present then None is returned 
    497565        ''' 
    498         def returnSimpleElementVal(self,xpath): 
     566        def returnSimpleElementVal(self,xpath,showValue=False): 
    499567                 
    500568                #Note using single path namespath appender rather than list version.. (keeps it simpler)         
     
    516584                                resElementVal.append('None') 
    517585                        else: 
    518                                 resElementVal.append(elVal.text) 
     586                                value = elVal.text 
     587                                if (showValue is True) and (value is not None): 
     588                                        logging.info("") 
     589                                        logging.info("          Element Value: " + value) 
     590                                        logging.info("") 
     591                                         
     592                                resElementVal.append(value) 
    519593                '''      
    520594                if rootEl[0].text is None:                                       
     
    571645                isoNs = {'gmd':'http://www.isotc211.org/2005/gmd','gco':'http://www.isotc211.org/2005/gco', 
    572646                                'gmx':'http://www.isotc211.org/2005/gmx','gml':'http://www.opengis.net/gml/3.2', 
    573                                 'none':'' 
     647                                'none':'','gts':'http://www.isotc211.org/2005/gts','gsr':'http://www.isotc211.org/2005/gsr', 
     648                                'gss':'http://www.isotc211.org/2005/gss' 
    574649                                } 
    575650                 
     
    597672                root=self.etree.getroot() # should be the "gmd:MD_Metadata" element 
    598673                 
     674                #avoid ns0 and ns1 etc etc namespaces when rewriting this ET 
     675                logging.info("Sorting out namespaces so can properly rewrite ISO xml..") 
     676                for ns in self.isoNameSpaces().keys():           
     677                        if ns != 'None':                                                 
     678                                ET._namespace_map[self.isoNameSpaces()[ns]] = ns 
     679                 
     680                                 
    599681                #check root element is an ISO one - use elementtree appended namespace.. 
    600682                if root.tag != '{http://www.isotc211.org/2005/gmd}MD_Metadata': 
    601683                        logging.error("XML document does not appear to be ISO (not gmd:MD_Metadata)!!")                  
    602684                        return None 
    603                                  
     685         
    604686                return root 
    605687                 
Note: See TracChangeset for help on using the changeset viewer.