Changeset 705


Ignore:
Timestamp:
24/03/06 16:42:15 (14 years ago)
Author:
domlowe
Message:

Engineering Reference System, LinearCS, EngineeringDatum? classes added, along with Abstract classes

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

Legend:

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

    r693 r705  
    198198        return csmlFrag 
    199199 
     200class AssociationAttributeGroup: 
     201    #Class to represent gml:AssociationAttributeGroup which is based on the xlink 'simplelink' attribute group (not implemented) 
     202    #class AssociationAttributeGroup 
     203    #   +xlink:href[0..1] 
     204    #+xlink:role[0..1] 
     205    #+xlink:arcrole[0..1] 
     206    #+xlink:title[0..1] 
     207    #+xlink:show[0..1] 
     208    #+xlink:actuate[0..1] 
     209    def __init__(self, href=None, role=None,arcrole=None,title=None,show=None,actuate=None): 
     210         if href: 
     211             self.href=href 
     212         if role: 
     213             self.role=role 
     214         if arcrole: 
     215             self.arcrole=arcrole 
     216         if title: 
     217             self.title=title 
     218         if show: 
     219             self.show=show 
     220         if actuate: 
     221             self.actuate=actuate 
     222    def fromXML(self,csmlFrag): 
     223        if csmlFrag.attrib.has_key('href'): 
     224            self.href=csmlFrag.attrib['href'] 
     225    def toXML(self,csmlFrag): 
     226        if hasattr(self,'href'): 
     227            csmlFrag.attrib['href']= self.href 
     228        return csmlFrag 
     229     
    200230             
    201231class Definition(AbstractGML): 
     
    365395             
    366396 
     397class AbstractTimeReferenceSystem(Definition): 
     398    def __init__(self,*args,**kwargs): 
     399        Definition.__init__(self, *args, **kwargs) 
     400    def fromXML(self,csmlFrag): 
     401        Definition.fromXML(self, csmlFrag) 
     402    def toXML(self,csmlFrag): 
     403        Definition.toXML(self, csmlFrag) 
     404        return csmlFrag 
     405 
     406 
    367407class AbstractCoordinateReferenceSystem(AbstractCRS): 
    368408    def __init__(self,*args,**kwargs): 
     
    375415 
    376416     
    377 class DictionaryEntry: 
    378         #what does this inherit from? 
     417class DictionaryEntry(AssociationAttributeGroup,AbstractGML): 
    379418    def __init__(self,*args,**kwargs): 
    380419        pass 
     
    393432        return csmlFrag 
    394433 
    395 class EngineeringDatumRef(DatumRef): 
     434class AbstractDatumBase(Definition): 
     435#         <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/> 
     436#                                       <element ref="gml:remarks" minOccurs="0"> 
     437#                                               <annotation> 
     438#                                                       <documentation>Comments on this reference system, including source information. </documentation> 
     439#                                               </annotation> 
     440#                                       </element> 
     441#                                       <element ref="gml:datumName"/> 
     442    def __init__(self,metaDataProperty=None,remarks=None,datumName=None,*args,**kwargs): 
     443        Definition.__init__(self,*args,**kwargs) 
     444        if metaDataProperty: 
     445            self.metaDataProperty=metaDataProperty 
     446        if remarks: 
     447            self.remarks=remarks 
     448        if datumName: 
     449            self.datumName=datumName 
     450    def fromXML(self,csmlFrag): 
     451        if csmlFrag.attrib.has_key(GML('metaDataProperty')): 
     452            self.metaDataProperty=csmlFrag.attrib[GML('metaDataProperty')] 
     453        for frag in csmlFrag.getchildren(): 
     454            if frag.tag==GML('remarks'): 
     455                self.remarks=frag.text 
     456            if frag.tag==GML('datumName'): 
     457                self.datumName=frag.text 
     458        Definition.fromXML(self,csmlFrag) 
     459    def toXML(self,csmlFrag): 
     460        Definition.toXML(self,csmlFrag) 
     461        if hasattr(self,'metaDataProperty'): 
     462            csmlFrag.attrib[GML('metaDataProperty')]=self.metaDataProperty 
     463        if hasattr(self, 'remarks'): 
     464            frag=Element(GML('remarks')) 
     465            frag.text=self.remarks 
     466            csmlFrag.append(frag) 
     467        if hasattr(self, 'datumName'): 
     468            frag=Element(GML('datumName')) 
     469            frag.text=self.datumName 
     470            csmlFrag.append(frag) 
     471        return csmlFrag 
     472     
     473class AbstractDatum(AbstractDatumBase): 
     474#             <element ref="gml:datumID" minOccurs="0" maxOccurs="unbounded"> 
     475#                                               <annotation> 
     476#                                                       <documentation>Set of alternative identifications of this datum. The first datumID, if any, is normally the primary identification code, and any others are aliases. </documentation> 
     477#                                               </annotation> 
     478#                                       </element> 
     479#                                       <element ref="gml:anchorPoint" minOccurs="0"/> 
     480#                                       <element ref="gml:realizationEpoch" minOccurs="0"/> 
     481#                                       <element ref="gml:validArea" minOccurs="0"/> 
     482#                                       <element ref="gml:scope" minOccurs="0"/> 
     483    def __init__(self,datumID=None,anchorPoint=None,realizationEpoch=None,validArea=None, scope=None,*args,**kwargs): 
     484        if datumID: 
     485            self.datumID=datumID 
     486        if anchorPoint: 
     487            self.anchorPoint=anchorPoint 
     488        if realizationEpoch: 
     489            self.realizationEpoch=realizationEpoch 
     490        if validArea: 
     491            self.validArea=validArea 
     492        AbstractDatumBase.__init__(self,*args,**kwargs) 
     493    def fromXML(self,csmlFrag): 
     494        AbstractDatumBase.fromXML(self,csmlFrag) 
     495        for frag in csmlFrag.getchildren(): 
     496            if frag.tag==GML('datumID'): 
     497                self.datumID=frag.text 
     498            if frag.tag==GML('anchorPoint'): 
     499                self.anchorPoint=frag.text 
     500            if frag.tag==GML('realizationEpoch'): 
     501                self.realizationEpoch=frag.text 
     502            if frag.tag==GML('validArea'): 
     503                self.validArea=frag.text 
     504    def toXML(self,csmlFrag): 
     505        AbstractDatumBase.toXML(self,csmlFrag) 
     506        if hasattr(self, 'datumID'): 
     507            frag=Element(GML('datumID')) 
     508            frag.text=self.datumID 
     509            csmlFrag.append(frag) 
     510        if hasattr(self, 'anchorPoint'): 
     511            frag=Element(GML('anchorPoint')) 
     512            frag.text=self.anchorPoint 
     513            csmlFrag.append(frag) 
     514        if hasattr(self, 'realizationEpoch'): 
     515            frag=Element(GML('realizationEpoch')) 
     516            frag.text=self.realizationEpoch 
     517            csmlFrag.append(frag) 
     518        if hasattr(self, 'validArea'): 
     519            frag=Element(GML('validArea')) 
     520            frag.text=self.validArea 
     521            csmlFrag.append(frag) 
     522     
     523        return csmlFrag 
     524     
     525class EngineeringDatum(AbstractDatum): 
    396526    def __init__(self,*args,**kwargs): 
     527        AbstractDatum.__init__(self,*args,**kwargs) 
     528    def fromXML(self,csmlFrag): 
     529        AbstractDatum.fromXML(self,csmlFrag) 
     530    def toXML(self,csmlFrag): 
     531        AbstractDatum.toXML(self,csmlFrag) 
     532        return csmlFrag 
     533     
     534class EngineeringDatumRef(DatumRef, AssociationAttributeGroup): 
     535    def __init__(self,engineeringDatum=None,*args,**kwargs): 
    397536        DatumRef.__init__(self, *args, **kwargs) 
     537        AssociationAttributeGroup.__init__(self, *args, **kwargs) 
     538        if engineeringDatum: 
     539            self.engineeringDatum=engineeringDatum 
    398540    def fromXML(self,csmlFrag): 
    399541        DatumRef.fromXML(self, csmlFrag) 
     542        AssociationAttributeGroup.fromXML(self, csmlFrag) 
     543        for frag in csmlFrag.getchildren(): 
     544            if frag.tag==GML('EngineeringDatum'): 
     545                self.engineeringDatum=EngineeringDatum() 
     546                EngineeringDatum.fromXML(self.engineeringDatum,frag) 
    400547    def toXML(self,csmlFrag): 
    401548        DatumRef.toXML(self, csmlFrag) 
    402         return csmlFrag 
    403  
     549        AssociationAttributeGroup.toXML(self, csmlFrag) 
     550        if hasattr(self,'engineeringDatum'): 
     551            frag=Element(GML('EngineeringDatum')) 
     552            frag=EngineeringDatum.toXML(self.engineeringDatum,frag) 
     553            csmlFrag.append(frag) 
     554        return csmlFrag 
     555 
     556class CoordinateSystemAxisBase(Definition): 
     557    def __init__(self,*args,**kwargs): 
     558        Definition.__init__(self, *args, **kwargs) 
     559    def fromXML(self,csmlFrag): 
     560        Definition.fromXML(self, csmlFrag) 
     561    def toXML(self,csmlFrag): 
     562        Definition.toXML(self, csmlFrag) 
     563        return csmlFrag 
     564     
     565class CoordinateSystemAxis(CoordinateSystemAxisBase): 
     566    def __init__(self,uom=None,axisIDs=None,axisAbbrev=None, axisDirection=None, *args,**kwargs): 
     567        #gml:uom[1] 
     568        #gml:axisID[0..1]:identifier 
     569        #gml:axisAbbrev[0..1]:string 
     570        #gml:axisDirection[0...1]:string 
     571        CoordinateSystemAxisBase.__init__(self, *args, **kwargs) 
     572        if uom: 
     573            self.uom=uom 
     574        if axisIDs: 
     575            self.axisIDs=axisIDs 
     576        if axisAbbrev: 
     577            self.axisAbbrev=axisAbbrev 
     578        if axisDirection: 
     579            self.axisDirection=axisDirection 
     580 
     581    def fromXML(self,csmlFrag): 
     582        CoordinateSystemAxisBase.fromXML(self,csmlFrag) 
     583        if csmlFrag.attrib.has_key(GML('uom')): 
     584            self.uom=csmlFrag.attrib[GML('uom')] 
     585        for frag in csmlFrag.getchildren(): 
     586            if frag.tag==GML('axisID'): 
     587                checkArrayAttrib(self,'axisIDs') 
     588                axisID=frag.text 
     589                self.axisIDs.append(axisID) 
     590            if frag.tag==GML('axisAbbrev'): 
     591                self.axisAbbrev=frag.text 
     592            if frag.tag==GML('axisDirection'): 
     593                self.axisDirection=frag.text 
     594    def toXML(self,csmlFrag): 
     595        CoordinateSystemAxisBase.toXML(self,csmlFrag) 
     596        if hasattr(self,'uom'): 
     597            csmlFrag.attrib[GML('uom')]=self.uom 
     598        if hasattr(self,'axisIDs'): 
     599            print 'do something' 
     600        if hasattr(self,'axisAbbrev'): 
     601            frag=Element(GML('axisAbbrev')) 
     602            frag.text=self.axisAbbrev 
     603            csmlFrag.append(frag) 
     604        if hasattr(self,'axisDirection'): 
     605            frag=Element(GML('axisDirection')) 
     606            frag.text=self.axisDirection 
     607            csmlFrag.append(frag) 
     608        return csmlFrag 
     609     
    404610class CoordinateSystemRef(DictionaryEntry): 
    405611    def __init__(self,*args,**kwargs): 
     
    411617        return csmlFrag 
    412618 
    413 class EngineeringCRS(AbstractCoordinateReferenceSystem): 
     619class AbstractCoordinateSystemBase(Definition): 
     620#         <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/> 
     621#                                       <element ref="gml:remarks" minOccurs="0"> 
     622#                                               <annotation> 
     623#                                                       <documentation>Comments on or information about this coordinate system, including data source information. </documentation> 
     624#                                               </annotation> 
     625#                                       </element> 
     626#                                       <element ref="gml:csName"/> 
     627    def __init__(self,metaDataProperty=None,remarks=None,csName=None,*args,**kwargs): 
     628        Definition.__init__(self, *args, **kwargs) 
     629        if metaDataProperty: 
     630            self.metaDataProperty=metaDataProperty 
     631        if remarks: 
     632            self.remarks=remarks 
     633        if csName: 
     634            self.csName=csName 
     635    def fromXML(self,csmlFrag): 
     636        Definition.fromXML(self, csmlFrag) 
     637        for frag in csmlFrag.getchildren(): 
     638            if frag.tag==GML('metaDataProperty'): 
     639                self.metaDataProperty=MetaDataProperty() 
     640                MetaDataProperty.fromXML(self.metaDataProperty, frag) 
     641            if frag.tag==GML('remarks'): 
     642                self.remarks=frag.text 
     643            if frag.tag==GML('csName'): 
     644                self.csName=frag.text 
     645 
     646    def toXML(self,csmlFrag): 
     647        Definition.toXML(self, csmlFrag) 
     648        return csmlFrag 
     649     
     650class AbstractCoordinateSystem(AbstractCoordinateSystemBase): 
     651        #class AbstractCoordinateSystem 
     652        #+gml:csid[0...1]:string 
     653        #+gml:usesAxis[1...*] 
     654         
     655    def __init__(self,csid=None,usesAxes=None,*args,**kwargs): 
     656        AbstractCoordinateSystemBase.__init__(self, *args, **kwargs) 
     657        if csid: 
     658            self.csid=csid 
     659        if usesAxes: 
     660            self.usesAxes=usesAxes 
     661            #usesAxes should be a list containing multiple gml:usesAxis 
     662    def fromXML(self,csmlFrag): 
     663        AbstractCoordinateSystemBase.fromXML(self, csmlFrag) 
     664        for frag in csmlFrag.getchildren(): 
     665            if frag.tag==GML('csid'): 
     666                self.csid=frag.text 
     667            if frag.tag==GML('usesAxis'): 
     668                checkArrayAttrib(self,'usesAxes') 
     669                self.usesAxes.append(CoordinateSystemAxis()) 
     670                self.usesAxes[-1].fromXML(frag.getchildren()[0]) 
     671 
     672    def toXML(self,csmlFrag): 
     673        AbstractCoordinateSystemBase.toXML(self, csmlFrag) 
     674        if hasattr(self,'csid'): 
     675            frag=Element(GML('csid')) 
     676            frag.tag=self.csid 
     677            csmlFrag.append(frag) 
     678        if hasattr(self,'usesAxes'): 
     679            for axis in self.usesAxes: 
     680                frag=Element(GML('usesAxis')) 
     681                subFrag=Element(GML('CoordinateSystemAxis')) 
     682                subFrag=axis.toXML(subFrag) 
     683                frag.append(subFrag) 
     684                csmlFrag.append(frag) 
     685        return csmlFrag 
     686 
     687class LinearCS(AbstractCoordinateSystem): 
     688    def __init__(self,*args,**kwargs): 
     689        AbstractCoordinateSystem.__init__(self, *args, **kwargs) 
     690    def fromXML(self,csmlFrag): 
     691        AbstractCoordinateSystem.fromXML(self, csmlFrag) 
     692    def toXML(self,csmlFrag): 
     693        AbstractCoordinateSystem.toXML(self, csmlFrag) 
     694        return csmlFrag  
     695 
     696class EngineeringCRS(AbstractCoordinateReferenceSystem,AssociationAttributeGroup): 
    414697        #<element ref="gml:usesCS"/>type="gml:CoordinateSystemRefType"> 
    415698        #<element ref="gml:usesEngineeringDatum"/> 
    416699    def __init__(self,usesCS=None, usesEngineeringDatum=None,*args,**kwargs): 
    417700        AbstractCoordinateReferenceSystem.__init__(self, *args, **kwargs) 
     701        AssociationAttributeGroup.__init__(self, *args, **kwargs) 
    418702        if usesCS: 
    419703            self.usesCS=usesCS 
     
    421705            self.usesEngineeringDatum=usesEngineeringDatum 
    422706    def fromXML(self,csmlFrag): 
     707        AssociationAttributeGroup.fromXML(self, csmlFrag) 
    423708        AbstractCoordinateReferenceSystem.fromXML(self, csmlFrag) 
    424709        for frag in csmlFrag.getchildren(): 
    425710            if frag.tag == GML('usesCS'): 
    426                 self.usesCS=CoordinateSystemRef() 
    427                 CoordinateSystemRef.fromXML(self.usesCS,frag) 
     711                subFrag=frag.getchildren()[0] 
     712                if subFrag.tag==GML('LinearCS'): 
     713                    self.usesCS=LinearCS() 
     714                    LinearCS.fromXML(self.usesCS,subFrag) 
     715                else: 
     716                    print subFrag.tag + ' Coordinate System not supported' 
    428717            if frag.tag == GML('usesEngineeringDatum'): 
    429718                self.usesEngineeringDatum=EngineeringDatumRef() 
    430719                EngineeringDatumRef.fromXML(self.usesEngineeringDatum,frag) 
    431720    def toXML(self,csmlFrag): 
     721        AssociationAttributeGroup.toXML(self, csmlFrag) 
    432722        AbstractCoordinateReferenceSystem.toXML(self, csmlFrag) 
    433723        if hasattr(self, 'usesCS'): 
    434724            frag=Element(GML('usesCS')) 
    435             CoordinateSystemRef.toXML(self.usesCS, frag) 
    436             csmlFrag.append(frag) 
    437         if hasattr(self, 'usesCS'): 
     725            if isinstance(self.usesCS,LinearCS): 
     726                subFrag=Element(GML('LinearCS')) 
     727                LinearCS.toXML(self.usesCS,subFrag) 
     728                frag.append(subFrag) 
     729                csmlFrag.append(frag) 
     730        if hasattr(self, 'usesEngineeringDatum'): 
    438731            frag=Element(GML('usesEngineeringDatum')) 
    439732            EngineeringDatumRef.toXML(self.usesEngineeringDatum, frag) 
     733            csmlFrag.append(frag) 
    440734        return csmlFrag 
    441735 
     
    9131207                self.parameter=None 
    9141208                if frag.getchildren() == []: 
    915                     self.parameter=Definition() 
     1209                    self.parameter=Phenomenon() 
    9161210                    self.parameter.fromXML(frag) 
    9171211                else: 
     
    9401234                csmlFrag.append(frag) 
    9411235            elif isinstance(self.parameter,Phenomenon): 
     1236                Phenomenon.toXML(self.parameter,frag) 
    9421237                subFrag=Element(OM('Phenomenon')) 
    9431238                Phenomenon.toXML(self.parameter,subFrag) 
    944                 frag.append(subFrag) 
    945                 csmlFrag.append(frag) 
    946             #if hasattr(self, 'href'): 
    947             elif isinstance(self.parameter,Definition): 
    948                 Definition.toXML(self.parameter,frag) 
     1239                if subFrag.attrib != frag.attrib: 
     1240                    frag.append(subFrag) 
    9491241                csmlFrag.append(frag) 
    9501242                 
     
    16161908        return csmlFrag 
    16171909 
    1618 class Phenomenon(Definition): 
     1910class Phenomenon(Definition,AssociationAttributeGroup): 
    16191911    #class Obs& Measures: PhenomenonProperty 
    16201912    #Note, in this does not really inherit from AbstractGML, but for CMSL  
     
    16241916        self.MetaDataProperty=None 
    16251917        Definition.__init__(self, MetaDataProperty=self.MetaDataProperty,*args,**kwargs) 
     1918        AssociationAttributeGroup.__init__(self,*args,**kwargs) 
    16261919    def fromXML(self,csmlFrag): 
    16271920        Definition.fromXML(self,csmlFrag) 
     1921        AssociationAttributeGroup.fromXML(self,csmlFrag) 
     1922         
    16281923    def toXML(self,csmlFrag): 
    16291924        csmlFrag=Definition.toXML(self,csmlFrag) 
     1925        csmlFrag=AssociationAttributeGroup.toXML(self,csmlFrag) 
    16301926        return csmlFrag 
    16311927 
  • TI02-CSML/trunk/newparser/demoCreateCSML.py

    r693 r705  
    212212rs.quantityList=MeasureOrNullList(uom='udunits.xml#degreesC',val = '10') 
    213213ptf.rangeSet=rs 
    214 ptf.parameter=Definition()  #TO FIX 
     214ptf.parameter=Phenomenon(href='CFStandardNames.xml#air_temperature')  #TO FIX 
    215215fms.append(ptf) 
    216216 
     
    260260cp=CompositePhenomenon() 
    261261cp.id='wind' 
    262 cp.name = Name('Vector Wind') 
     262cp.name = Name(['Vector Wind']) 
    263263components=[] 
    264 component=ComponentPhenomenon() 
     264component=Phenomenon(href='CFStandardNames.xml#eastward_wind') 
    265265components.append(component) 
    266 component=ComponentPhenomenon() 
     266component=Phenomenon(href='CFStandardNames.xml#northward_wind') 
    267267components.append(component) 
     268cp.componentPhenomena=components 
    268269prf.parameter=cp 
    269  
    270270fms.append(prf) 
    271271 
Note: See TracChangeset for help on using the changeset viewer.