Changeset 655


Ignore:
Timestamp:
24/02/06 16:07:14 (14 years ago)
Author:
domlowe
Message:

Point Feature complete, Namespaces fixed, EnvelopeWithTimeFeature? & boundedBy added

Location:
TI02-CSML/trunk/newparser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/newparser/Parser.py

    r654 r655  
    7070    if not hasattr(obj,attrib) or not isinstance(getattr(obj,attrib),list): 
    7171        setattr(obj,attrib,[]) 
    72          
    73 def fixNameSpaces(csmlFrag): 
    74     #function to convert element tree namespaces from defaults such as 
    75     # ns0 to gml, csml etc. 
    76     for elem in csmlFrag.getiterator(): 
    77         print str(elem.attrib) 
    78     return csmlFrag 
    79          
     72 
    8073##class TemplateClass(Base): 
    8174##    def __init__(self,myarg=None,*args,**kwargs): 
     
    111104class Description(MutableString): 
    112105    """Class representing a GML description element 
    113  
    114106    Description(string): 
    115107    """ 
     
    134126    def fromXML(self,csmlFrag): 
    135127        self.data = csmlFrag.text 
     128#Andrew: 
    136129## For some reason, namespace on 'codeSpace' attribute not being picked up... 
    137130##        if csmlFrag.attrib.has_key(GML('codeSpace')): 
    138131##            self.codeSpace = csmlFrag.attrib[GML('codeSpace')] 
     132#Dominic: 
     133##  I think this is because it has no explicit namespace in the XML doc eg.: <gml:name codeSpace="http://ndg.nerc.... 
     134## unlike say: gml:id which has the gml: prefix explicitly e.g. <gml:UnitDefinition gml:id="psu"> 
     135 
    139136        if csmlFrag.attrib.has_key('codeSpace'): 
    140137            self.codeSpace = csmlFrag.attrib['codeSpace'] 
     
    490487class AbstractDiscreteCoverage(AbstractGML): 
    491488     #note, does not inherit directly from AbstractGML but is sufficient for CSML purposes to inherit the standard GML attributes 
    492     #GML AbstractDiscreteCoverage 
     489    #GML AbstractDiscreteCoverage Class 
     490     
    493491    def __init__(self,*args,**kwargs): 
    494492        AbstractGML.__init__(self,*args,**kwargs) 
     
    547545 
    548546class AbstractDomain: 
    549     def __init__(self): 
    550         pass 
    551     def fromXML(self,csmlFrag): 
    552         pass 
    553     def toXML(self,csmlFrag): 
    554         return csmlFrag 
    555  
     547    #CSML AbstractDomain class 
     548    #   AbstractDomain() 
     549    #   +csml:domainReference 
     550    #   +csml:domainComplement [0...1] 
     551         
     552    def __init__(self,domainReference,domainComplement, *args,**kwargs): 
     553        if domainReference: 
     554            self.domainReference=domainReference 
     555        if domainComplement: 
     556            self.domainComplement=domainComplement 
     557    def fromXML(self,csmlFrag): 
     558        for frag in csmlFrag.getchildren(): 
     559            if frag.tag == CSML('domainReference'): 
     560                self.domainReference = domainReference() 
     561                self.domainReference.fromXML(frag) 
     562            if frag.tag == CSML('domainComplement'): 
     563                self.domainComplement = frag.text 
     564    def toXML(self,csmlFrag): 
     565        if hasattr(self,'domainReference'): 
     566            frag = Element(CSML('domainReference')) 
     567            domainReference.toXML(self.domainReference,frag) 
     568            csmlFrag.append(frag) 
     569        if hasattr(self,'domainComplement'): 
     570             frag = Element(CSML('domainComplement')) 
     571             domainComplement.toXML(self.domainComplement,frag) 
     572             csmlFrag.append(frag) 
     573        return csmlFrag 
     574 
     575class boundedBy: 
     576    #CSML boundedBy class 
     577     
     578    # boundedBy() 
     579    # +gml:EnvelopeWithTimePeriod 
     580     
     581    def __init__(self,EnvelopeWithTimePeriod=None): 
     582        if EnvelopeWithTimePeriod: 
     583            self.EnvelopeWithTimePeriod=EnvelopeWithTimePeriod() 
     584    def fromXML(self, csmlFrag): 
     585        for frag in csmlFrag.getchildren(): 
     586            if frag.tag == GML ('EnvelopeWithTimePeriod'): 
     587                self.EnvelopeWithTimePeriod=EnvelopeWithTimePeriod() 
     588                EnvelopeWithTimePeriod.fromXML(self.EnvelopeWithTimePeriod,frag) 
     589    def toXML(self,csmlFrag): 
     590        if hasattr(self, 'EnvelopeWithTimePeriod'): 
     591            frag = Element(GML('EnvelopeWithTimePeriod')) 
     592            EnvelopeWithTimePeriod.toXML(self.EnvelopeWithTimePeriod, frag) 
     593            csmlFrag.append(frag) 
     594        return csmlFrag 
     595     
     596class EnvelopeWithTimePeriod: 
     597    # CSML EnvelopeWithTimePeriod class 
     598    # EnvelopeWithTimePeriod(): 
     599        # +gml:lowerCorner 
     600        # +gml:upperCorner 
     601        # +gml:timePosition [2] ? 
     602         
     603    def __init__(self, srsName=None,lowerCorner=None,upperCorner=None, timePosition=None, timePosition2=None): 
     604        if srsName: 
     605            self.srsName=srsName 
     606        if lowerCorner: 
     607            self.lowerCorner=lowerCorner 
     608        if upperCorner: 
     609            self.upperCorner=upperCorner 
     610        if timePosition: 
     611            self.timePosition=timePosition 
     612        if timePosition2: 
     613            self.timePosition2=timePosition2 
     614    def fromXML(self,csmlFrag): 
     615        for frag in csmlFrag.getchildren(): 
     616            if frag.attrib.has_key('srsName'): 
     617                self.srsName=frag.attrib['srsName'] 
     618            if frag.tag == GML('lowerCorner'): 
     619                self.lowerCorner=frag.text 
     620            if frag.tag == GML('upperCorner'): 
     621                self.upperCorner=frag.text 
     622            if frag.tag == GML('timePosition'): 
     623                if hasattr(self, 'timePosition'): 
     624                    self.timePosition2=frag.text 
     625                else: 
     626                    self.timePosition=frag.text 
     627    def toXML(self,csmlFrag): 
     628        if hasattr(self,'srsName'): 
     629            csmlFrag.attrib['srsName'] = self.srsName 
     630        if hasattr(self,'lowerCorner'): 
     631            frag=Element(GML('lowerCorner')) 
     632            frag.text=self.lowerCorner 
     633            csmlFrag.append(frag) 
     634        if hasattr(self,'upperCorner'): 
     635            frag=Element(GML('upperCorner')) 
     636            frag.text=self.upperCorner 
     637            csmlFrag.append(frag) 
     638        if hasattr(self,'timePosition'): 
     639            frag=Element(GML('timePosition')) 
     640            frag.text=self.timePosition 
     641            csmlFrag.append(frag) 
     642        if hasattr(self,'timePosition2'): 
     643            frag=Element(GML('timePosition')) 
     644            frag.text=self.timePosition2 
     645            csmlFrag.append(frag) 
     646        return csmlFrag 
    556647class Position: 
    557648    def __init__(self,srsName=None,axisLabels=None,uomLabels=None): 
     
    563654            self.uomLabels=uomLabels 
    564655    def fromXML(self,csmlFrag): 
    565         print csmlFrag.attrib 
    566         #sys.exit()     
    567656        if csmlFrag.attrib.has_key('srsName'):             
    568657            self.srsName = csmlFrag.attrib['srsName'] 
    569658        if csmlFrag.attrib.has_key('axisLabels'): 
    570659            self.axisLabels = csmlFrag.attrib['axisLabels'] 
    571         if csmlFrag.attrib.has_key('uomLabels'): 
    572             self.uomLabels = csmlFrag.attrib['uomLabels'] 
     660            if csmlFrag.attrib.has_key('uomLabels'): 
     661                self.uomLabels = csmlFrag.attrib['uomLabels'] 
    573662        for frag in csmlFrag.getchildren(): 
    574663            print frag.tag 
     
    593682            csmlFrag.append(frag) 
    594683        return csmlFrag 
    595      
     684 
     685class rangeSet: 
     686    def __init__(self,QuantityList=None, uom=None): 
     687        if QuantityList: 
     688            self.QuantityList=QuantityList 
     689        if uom: 
     690            self.uom=uom 
     691    def fromXML(self,csmlFrag): 
     692        for frag in csmlFrag.getchildren(): 
     693            if frag.tag==GML('QuantityList'): 
     694                self.QuantityList=frag.text 
     695                if frag.attrib.has_key('uom'): 
     696                    self.uom = frag.attrib['uom'] 
     697    def toXML(self, csmlFrag): 
     698        if hasattr(self,'QuantityList'): 
     699            frag = Element(GML('QuantityList')) 
     700            frag.text=self.QuantityList 
     701        if hasattr(self,'uom'): 
     702             frag.attrib['uom'] = self.uom 
     703        csmlFrag.append(frag) 
     704        return csmlFrag 
     705 
     706 
    596707class domainReference: 
    597708    def __init__(self): 
     
    621732    def __init__(self): 
    622733        pass 
    623     def fromXML(self,csmlFrag): 
    624         AbstractDomain.fromXML(self,csmlFrag) 
    625         for frag in csmlFrag.getchildren(): 
    626             if frag.tag == CSML('domainReference'): 
    627                 self.domainReference = domainReference() 
    628                 self.domainReference.fromXML(frag) 
    629  
    630             if frag.tag == CSML('domainComplement'): 
    631                 self.domainComplement = frag.text 
    632     def toXML(self,csmlFrag): 
    633         AbstractDomain.toXML(self,csmlFrag) 
    634         if hasattr(self,'domainReference'): 
    635             frag = Element(CSML('domainReference')) 
    636             domainReference.toXML(self.domainReference,frag) 
    637             csmlFrag.append(frag) 
    638         if hasattr(self,'domainComplement'): 
    639              frag = Element(CSML('domainComplement')) 
    640              domainComplement.toXML(self.domainComplement,frag) 
    641              csmlFrag.append(frag) 
    642         return csmlFrag 
     734class ProfileDomain(AbstractDomain): 
     735    def __init__(self): 
     736        pass 
     737class GridDomain(AbstractDomain): 
     738    def __init__(self): 
     739        pass 
     740class PointSeriesDomain(AbstractDomain): 
     741    def __init__(self): 
     742        pass  
     743class ProfileSeriesDomain(AbstractDomain): 
     744    def __init__(self): 
     745        pass 
     746class GridSeriesDomain(AbstractDomain): 
     747    def __init__(self): 
     748        pass 
    643749     
     750     
     751             
    644752class PointFeature(AbstractStaticCoverageFeature): 
    645753#TODO: 
     
    672780                self.PointDomain = PointDomain() 
    673781                self.PointDomain.fromXML(frag) 
    674 #             if frag.tag == GML('rangeSet'): 
    675 #                self.rangeSet=rangeSet() 
    676 #                self.rangeSet.fromXML(frag) 
    677 #             if frag.tag == GML('coverageFunction'): 
     782            if frag.tag == GML('rangeSet'): 
     783                self.rangeSet=rangeSet() 
     784                self.rangeSet.fromXML(frag) 
     785            if frag.tag == CSML('parameter'): 
     786                self.parameter = frag.text 
     787                print frag.attrib 
     788                if frag.attrib.has_key(XLINK('href')): 
     789                    self.href = frag.attrib[XLINK('href')] 
     790 
     791# #             if frag.tag == GML('coverageFunction'): 
    678792#                 checkArrayAttrib(self,'coverageFunction') 
    679793#                 self.coverageFunction.append(frag.text) 
     
    686800             PointDomain.toXML(self.PointDomain,frag) 
    687801             csmlFrag.append(frag) 
    688 #         if hasattr(self,'rangeSet'): 
    689 #              frag = Element(CSML('rangeSet')) 
    690 #              PointDomain.toXML(self.PointDomain,frag) 
    691 #              csmlFrag.append(frag) 
    692 #         if hasattr(self,'parameter'): 
    693 #              frag = Element(CSML('parameter')) 
    694 #              frag.text=self.parameter 
    695 #              csmlFrag.append(frag) 
     802        if hasattr(self,'rangeSet'): 
     803             frag = Element(GML('rangeSet')) 
     804             rangeSet.toXML(self.rangeSet,frag) 
     805             csmlFrag.append(frag) 
     806        if hasattr(self,'parameter'): 
     807             frag = Element(CSML('parameter')) 
     808             frag.text=self.parameter 
     809             csmlFrag.append(frag) 
     810        if hasattr(self,'href'): 
     811             frag.attrib[XLINK('href')] = self.href 
     812        csmlFrag.append(frag) 
    696813        return csmlFrag 
    697814 
     
    747864        AbstractGML.toXML(self,csmlFrag) 
    748865        return csmlFrag 
     866 
    749867 
    750868 
     
    838956class FeatureCollection(AbstractFeatureCollection): 
    839957    """GML FeatureCollection class 
    840     """ 
    841     def __init__(self): 
    842         pass 
    843     def fromXML(self,csmlFrag): 
     958        FeatureCollection() 
     959        +boundedBy[1] 
     960        +FeatureMembers[0..*] 
     961    """ 
     962    def __init__(self,boundedBy=None): 
     963        if boundedBy: 
     964            self.boundedBy=boundedBy 
     965    def fromXML(self,csmlFrag): 
     966        for frag in csmlFrag.getchildren(): 
     967            if frag.tag == GML('boundedBy'): 
     968                self.boundedBy=boundedBy() 
     969                boundedBy.fromXML(self.boundedBy,frag) 
    844970        AbstractFeatureCollection.fromXML(self,csmlFrag) 
    845971    def toXML(self,csmlFrag): 
     972        if hasattr(self,'boundedBy'): 
     973            frag = Element(GML('boundedBy')) 
     974            boundedBy.toXML(self.boundedBy, frag) 
     975            csmlFrag.append(frag) 
    846976        AbstractFeatureCollection.toXML(self,csmlFrag) 
    847977        return csmlFrag 
  • TI02-CSML/trunk/newparser/test.py

    r654 r655  
    1414 
    1515 
     16def removeInlineNS(csmlstring): 
     17    # removeInlineNS: function removes "inline" namespaces and declares them as part of the Dataset element. 
     18    #remove all 
     19    csmlstring=csmlstring.replace(' xmlns:csml="http://ndg.nerc.ac.uk/csml"','') 
     20    csmlstring=csmlstring.replace(' xmlns:xlink="http://www.w3.org/1999/xlink"','') 
     21    csmlstring=csmlstring.replace('xmlns:om="http://www.opengis.net/om"','') 
     22    csmlstring=csmlstring.replace('xsi:schemaLocation="http://ndg.nerc.ac.uk/csml/XMLSchemas/CSMLAppSchema.xsd"','') 
     23    csmlstring=csmlstring.replace('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','') 
     24     
     25    #remove cmsl: prefixes 
     26    csmlstring=csmlstring.replace('<csml:','<') 
     27    csmlstring=csmlstring.replace('</csml:','</') 
     28    #add namespace declarations at top of document, after gml namespace declaration 
     29    csmlstring=csmlstring.replace('xmlns:gml="http://www.opengis.net/gml">', 'xmlns:gml="http://www.opengis.net/gml" xmlns:om="http://www.opengis.net/om" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://ndg.nerc.ac.uk/csml/XMLSchemas/CSMLAppSchema.xsd">') 
    1630 
     31     
     32     
     33     
     34 
     35     
     36    return csmlstring 
    1737############################################################################## 
    1838# ElementTree-based parser test 
     
    2444#csml = dataset.toXML(Element('Dataset')) 
    2545csml = dataset.toXML() 
    26 print parseString(tostring(csml)).toprettyxml() 
     46 
     47strCSML= parseString(tostring(csml)).toprettyxml() 
     48strCSML=removeInlineNS(strCSML) 
     49print strCSML 
    2750sys.exit() # stop here. 
    2851 
Note: See TracChangeset for help on using the changeset viewer.