Changeset 742


Ignore:
Timestamp:
03/04/06 14:24:32 (13 years ago)
Author:
domlowe
Message:

Parser v0.1 commit, added comments to test docs

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

Legend:

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

    r718 r742  
    188188        return csmlFrag 
    189189 
     190 
     191class SRSReferenceGroup: 
     192# class to represeent gml:SRSReferenceGroup 
     193# class SRSReferenceGroup: 
     194#     +srsName[0...]:anyURI 
     195#     +srsDimension[0...1]:positiveInteger 
     196    def __init__(self,srsName=None,srsDimension=None): 
     197        if srsName: 
     198            self.srsName=srsName 
     199        if srsDimension: 
     200            self.srsDimension=srsDimension 
     201    def fromXML(self,csmlFrag): 
     202        if csmlFrag.attrib.has_key('srsName'): 
     203            self.srsName=csmlFrag.attrib['srsName'] 
     204        if csmlFrag.attrib.has_key('srsDimension'): 
     205            self.srsDimension=csmlFrag.attrib['srsDimension'] 
     206    def toXML(self,csmlFrag): 
     207            if hasattr(self,'srsName'): 
     208                csmlFrag.attrib['srsName']= self.srsName 
     209            if hasattr(self,'srsDimension'): 
     210                csmlFrag.attrib['srsDimension']= self.srsDimension 
     211            return csmlFrag 
    190212class AssociationAttributeGroup: 
    191213    '''Class to represent gml:AssociationAttributeGroup which is based on the xlink 'simplelink' attribute group (not implemented) 
     
    16111633        return csmlFrag 
    16121634 
    1613 class DirectPositionList: 
     1635class DirectPositionList(AssociationAttributeGroup, SRSReferenceGroup): 
    16141636    #class representing a DirectPositionList 
    1615     def __init__(self, srsName=None, vals=None): 
    1616         if srsName: 
    1617             self.srsName=srsName 
     1637    def __init__(self, order=None, vals=None,*args,**kwargs): 
     1638        if order: 
     1639            self.order=order 
    16181640        if vals: 
    16191641            self.vals=vals 
    1620     def fromXML(self,csmlFrag): 
     1642        AssociationAttributeGroup.__init__(self,*args,**kwargs) 
     1643        SRSReferenceGroup.__init__(self,*args,**kwargs) 
     1644    def fromXML(self,csmlFrag): 
     1645        AssociationAttributeGroup.fromXML(self,csmlFrag) 
     1646        SRSReferenceGroup.fromXML(self,csmlFrag) 
    16211647        self.vals=csmlFrag.text 
    1622         if csmlFrag.attrib.has_key('srsName'): 
    1623             self.srsName=csmlFrag.attrib['srsName'] 
     1648        if csmlFrag.attrib.has_key('order'): 
     1649            self.order=csmlFrag.attrib['order'] 
    16241650    def toXML(self,csmlFrag):  
     1651        AssociationAttributeGroup.toXML(self,csmlFrag) 
     1652        SRSReferenceGroup.toXML(self,csmlFrag) 
    16251653        csmlFrag.text=self.vals 
    1626         if hasattr(self,'srsName'): 
    1627             csmlFrag.attrib['srsName']=self.srsName 
     1654        if hasattr(self,'order'): 
     1655            csmlFrag.attrib['order']=self.order 
    16281656        return csmlFrag 
    16291657         
     
    20122040 
    20132041 
    2014 class Trajectory: 
    2015     def __init__(self,srsName=None,locations=None,times=None): 
    2016         if srsName: 
    2017             self.srsName=srsName 
     2042class Trajectory(SRSReferenceGroup): 
     2043    def __init__(self,locations=None,times=None,*args,**kwargs): 
     2044 
    20182045        if locations: 
    20192046            self.locations=locations 
    20202047        if times: 
    20212048            self.times = times 
    2022  
    2023     def fromXML(self,csmlFrag): 
    2024         if csmlFrag.attrib.has_key('srsName'): 
    2025             self.srsName = csmlFrag.attrib['srsName'] 
     2049        SRSReferenceGroup.__init__(self,*args,**kwargs) 
     2050    def fromXML(self,csmlFrag): 
     2051        SRSReferenceGroup.fromXML(self,csmlFrag) 
    20262052        for frag in csmlFrag.getchildren(): 
    20272053            print frag.tag 
    20282054            if frag.tag==CSML('locations'): 
    2029                 self.locations=frag.text 
     2055                self.locations=DirectPositionList() 
     2056                DirectPositionList.fromXML(self.locations,frag) 
    20302057            if frag.tag==CSML('times'): 
    20312058                self.times=TimePositionList() 
    20322059                TimePositionList.fromXML(self.times,frag) 
    20332060    def toXML(self,csmlFrag): 
     2061        SRSReferenceGroup.toXML(self,csmlFrag) 
    20342062        if hasattr(self,'srsName'): 
    20352063            csmlFrag.attrib['srsName'] = self.srsName 
    20362064        if hasattr(self,'locations'): 
    20372065            frag = Element(CSML('locations')) 
    2038             frag.text=self.locations 
     2066            frag=DirectPositionList.toXML(self.locations,frag) 
    20392067            csmlFrag.append(frag) 
    20402068        if hasattr(self,'times'): 
     
    22542282         return csmlFrag 
    22552283 
    2256 class TimePositionList: 
     2284class TimePositionList(AssociationAttributeGroup): 
    22572285              #class TimePositionList 
    22582286              #+frame[0..1]:anyURI  
    22592287              # + calendarEraName [0..1]:string (not implemented) 
    22602288              # +indeterminatePosition[0..1]:=gml:TimeIndeterminateValueType  (not implemented) 
    2261     def __init__(self, frame=None, timePositions=None): 
     2289    def __init__(self, frame=None, timePositions=None,*args, **kwargs): 
    22622290        if frame: 
    22632291            self.frame=frame 
    22642292        if timePositions: 
    22652293            self.timePositions=timePositions 
     2294        AssociationAttributeGroup.__init__(self,*args,**kwargs) 
    22662295    def fromXML(self,csmlFrag): 
    22672296        self.timePositions=csmlFrag.text 
    22682297        if csmlFrag.attrib.has_key('frame'): 
    22692298            self.frame = csmlFrag.attrib['frame'] 
     2299        AssociationAttributeGroup.fromXML(self,csmlFrag) 
    22702300    def toXML(self,csmlFrag): 
    22712301         if hasattr(self,'timePositions'): 
     
    22732303         if hasattr(self,'frame'): 
    22742304             csmlFrag.attrib['frame']=self.frame 
     2305         AssociationAttributeGroup.toXML(self,csmlFrag) 
    22752306         return csmlFrag 
    22762307              
     
    27612792        if hasattr(self,'gridSeriesDomain'): 
    27622793             frag = Element(CSML('GridSeriesDomain')) 
    2763              gridSeriesDomain.toXML(self.gridSeriesDomain,frag) 
     2794             GridSeriesDomain.toXML(self.gridSeriesDomain,frag) 
    27642795             csmlFrag.append(frag) 
    27652796        return csmlFrag 
  • TI02-CSML/trunk/newparser/demoCreateCSML.py

    r718 r742  
    3333 
    3434 
    35  
     35#Test starts here: 
    3636 
    3737  ######################################### 
     
    222222t=Trajectory() 
    223223t.srsName='urn:EPSG:geographicCRS:4979' 
    224 t.locations='0.1 1.5 25' 
     224t.locations=DirectPositionList(vals='0.1 1.5 25') 
    225225t.times=TimePositionList('#RefSys01','0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 26 27 28 29 30 31') 
    226226ptsd.domainReference=t 
     
    269269fms.append(prf) 
    270270 
    271 #### ProfileSeriesFeature: ##### 
     271#### ProfileSeriesFeature: (not-complete)##### 
    272272psf=ProfileSeriesFeature() 
    273273psf.id='feat05' 
     
    275275psd =ProfileSeriesDomain() 
    276276ot=OrientedTrajectory() 
    277 #... 
    278  
    279  
     277ot.srsName='urn:EPSG:geographicCRS:4326' 
     278psd.domainReference=ot 
     279psf.profileSeriesDomain=psd 
     280fms.append(psf) 
    280281#### GridFeature: ##### 
    281282#### GridSeriesFeature: ##### 
     
    293294 
    294295 
    295  
    296 ######################## The Dataset ########################## 
     296########### The Dataset  ############## 
    297297#Create an Empty Dataset 
    298298ds = Dataset() 
     
    304304setattr(ds, 'phenomenonDefinitions', pds) 
    305305setattr(ds, 'featureCollection',fc) 
    306 ############################################################# 
    307  
     306######################################## 
     307 
     308#call the toXML method of the Dataset object: 
    308309csml = ds.toXML() 
     310#parse and pretty print the result 
    309311strCSML= parseString(tostring(csml)).toprettyxml() 
     312#tidy up elementtree style namespaces 
    310313strCSML=removeInlineNS(strCSML) 
     314#strCSML contains the csml doc. 
    311315print strCSML 
  • TI02-CSML/trunk/newparser/test.py

    r680 r742  
    1515 
    1616def removeInlineNS(csmlstring): 
    17     # removeInlineNS: function removes "inline" namespaces and declares them as part of the Dataset element. 
     17    #  removeInlineNS: function removes "inline" namespaces and declares them as part of the Dataset element. 
     18     
    1819    #remove all 
    1920    csmlstring=csmlstring.replace(' xmlns:csml="http://ndg.nerc.ac.uk/csml"','') 
     
    2829    #add namespace declarations at top of document, after gml namespace declaration 
    2930    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">') 
    30  
    31      
    32      
    33      
    34  
    3531     
    3632    return csmlstring 
    37 ############################################################################## 
    38 # ElementTree-based parser test 
    39 ############################################################################## 
     33 
     34 
     35 
     36#Parsing starts here: 
     37 
     38####################################################### 
     39# ElementTree-based parser test ROUND TRIP 
     40####################################################### 
    4041# 1. Test parsing from CSML file 
    4142tree = ElementTree(file='example.xml') 
    42 #tree = ElementTree(file='/home/users/domlowe/CSML/Coapec/Coapec.v2.xml') 
    43 #tree = ElementTree(file='era40gridseries.xml') 
    4443dataset = Dataset() 
     44 
     45#Calling the fromXML method reads the CSML into memory. 
    4546dataset.fromXML(tree.getroot()) 
    46 #csml = dataset.toXML(Element('Dataset')) 
     47 
     48#Reading some values from memory and printing it out:: 
     49print dataset.featureCollection.members[3].profileSeriesDomain.domainReference.times.timePositions 
     50 
     51#This creates a new CSML document string from the CSML objects in memory. 
     52#Hopefully the CSML output should be the same as the CSML it read in. 
    4753csml = dataset.toXML() 
    4854 
     55#Tidy up and print the CSML document: 
    4956strCSML= parseString(tostring(csml)).toprettyxml() 
    5057strCSML=removeInlineNS(strCSML) 
    5158print strCSML 
    52 sys.exit() # stop here. 
    5359 
    54 ############################################################################## 
    55 #2. Test construction of objects from scratch 
    56  
    57 # AW changes made to DL code: 
    58 #  (NB: all these derive from the underlying UML model) 
    59 #  * AbstractFileExtract.arraySize is an array [] 
    60 #  * Dataset.metaDataProperty is an array [] 
    61 #  * Omit empty attributes entirely 
    62 #  * Dataset.arrayDescriptors is an array holding all file extract objects 
    63  
    64 #MetaDataProperty Object 
    65 md = MetaDataProperty() 
    66 setattr(md, 'href', 'http://ndg.nerc.ac.uk/Metadata/home/users/domlowe/CSML/demodata') 
    67  
    68 #An empty list to hold a collection of NASAAmesExtracts: 
    69 nalist=[] 
    70  
    71 #Create a NASAAmesExtract 
    72 na1 = NASAAmesExtract() 
    73 #set attributes: 
    74 setattr(na1, 'id', 'naextract_one') 
    75 setattr(na1, 'variableName', 'temp') 
    76 setattr(na1, 'index', '1') 
    77 setattr(na1, 'fileName', '/blah/testfile.na') 
    78 setattr(na1, 'arraySize', [50]) 
    79 setattr(na1, 'uom', 'celsius') 
    80 #setattr(na1, 'numericType', None) 
    81 #setattr(na1, 'numericTransform', None) 
    82 #setattr(na1,'regExpTransform',None) 
    83 #append NASAAmesExtract to list 
    84 nalist.append(na1) 
    85  
    86 #Create a second NASAAmesExtract 
    87 na2 = NASAAmesExtract() 
    88 #set attributes: 
    89 setattr(na2, 'id', 'naextract_two') 
    90 setattr(na2, 'variableName', 'pressure') 
    91 setattr(na2, 'index', '1') 
    92 setattr(na2, 'fileName', '/blah/testfile2.na') 
    93 setattr(na2, 'arraySize', [50]) 
    94 setattr(na2, 'uom', 'mb') 
    95 #setattr(na2, 'numericType', None) 
    96 #setattr(na2, 'numericTransform', None) 
    97 #setattr(na2,'regExpTransform',None) 
    98 #append second NASAAmesExtract to list 
    99 nalist.append(na2) 
    100  
    101 #An empty list to hold a collection of NetCDFExtracts: 
    102 nclist=[] 
    103  
    104 #Create a NetCDFExtract 
    105 nc1 = NetCDFExtract() 
    106 #set attributes: 
    107 setattr(nc1, 'id', 'ncextract_one') 
    108 setattr(nc1, 'variableName', 'temp2') 
    109 setattr(nc1, 'fileName', '/blah/testfile.nc') 
    110 setattr(nc1, 'arraySize', [100]) 
    111 setattr(nc1, 'uom', 'celsius') 
    112 #setattr(nc1, 'numericType', None) 
    113 #setattr(nc1, 'numericTransform', None) 
    114 #setattr(nc1,'regExpTransform',None) 
    115 #append NetCDFExtract to list 
    116 nclist.append(nc1) 
    117  
    118  
    119  
    120 #Create an Empty Dataset 
    121 ds = Dataset() 
    122 #Set objects as attributes of dataset 
    123 setattr(ds, 'metaDataProperty', [md]) 
    124 setattr(ds, 'arrayDescriptors', nalist+nclist) 
    125  
    126  
    127 csml = ds.toXML() 
    128 print parseString(tostring(csml)).toprettyxml() 
Note: See TracChangeset for help on using the changeset viewer.