Changeset 1692 for TI02-CSML


Ignore:
Timestamp:
13/11/06 15:31:01 (13 years ago)
Author:
domlowe
Message:

schema class added to keep track of sequences

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

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/csml2MolesStuff/csml2moles.py

    r1676 r1692  
    207207    moles=csml.parser_extra.PrettyPrint(molestree) 
    208208    print '\n \n \n BEFORE PARSING' 
    209     print moles 
     209    #print moles 
    210210    #tree.write(file='molesout.xml') 
    211211    f=open('molesout.xml','w') 
    212212    f.write(moles) 
    213213    f.close() 
    214     
     214    sys.exit() 
    215215    
    216216    #produce XML again (round trip) 
     
    221221    moles=csml.parser_extra.PrettyPrint(molestree) 
    222222    print '\n \n \n AFTER PARSING' 
    223     print moles    
     223    #print moles    
    224224 
    225225    
  • TI02-CSML/trunk/csml2MolesStuff/molesReadWrite.py

    r1676 r1692  
    22 
    33import cElementTree as ET 
     4import sys 
     5 
     6class xmlSchema(object): 
     7    def __init__(self, schema): 
     8        self.sequences={} 
     9         
     10        def __addSequence(molesname, sequence): 
     11            seqlist=[] 
     12            for elem in sequence[:]: 
     13                if elem.attrib.has_key('name'): 
     14                    seqlist.append(elem.attrib['name']) 
     15                if elem.attrib.has_key('ref'): 
     16                    seqlist.append(elem.attrib['ref'].split(':')[1]) 
     17            self.sequences[molesname]=seqlist 
     18 
     19        for event, elem in ET.iterparse(schema): 
     20            if elem.tag == '{http://www.w3.org/2001/XMLSchema}complexType': 
     21                if elem.attrib.has_key('name'): 
     22                    molesclassname= elem.attrib['name'] 
     23                    if elem.attrib['name'][-4:]=='Type': 
     24                        molesclassname=molesclassname[:-4] 
     25                    for subelem in elem[:]: 
     26                        if subelem.tag=='{http://www.w3.org/2001/XMLSchema}sequence': 
     27                            __addSequence(molesclassname,subelem) 
     28            if elem.tag == '{http://www.w3.org/2001/XMLSchema}element': 
     29                    #complexType is declared but does not have a name. 
     30                    #the name must belong to the parent 'element' element. 
     31                if elem.attrib.has_key('name'): 
     32                    molesclassname= elem.attrib['name'] 
     33                    for subelem in elem[:]: 
     34                        if subelem.tag == '{http://www.w3.org/2001/XMLSchema}complexType': 
     35                            for subsubelem in subelem[:]: 
     36                                if subsubelem.tag=='{http://www.w3.org/2001/XMLSchema}sequence': 
     37                                    __addSequence(molesclassname,subsubelem) 
     38 
     39    def lookupOrder(self, classname): 
     40        try: 
     41            order=self.sequences[classname] 
     42        except KeyError: 
     43            order = None 
     44        return order 
    445 
    546class molesElement(object): 
     
    1960            setattr(self, attname,att) 
    2061             
    21     def toXML(self,molesFrag): 
     62    def toXML(self,molesFrag, schema=None): 
     63        if schema != None: 
     64            self.schema=schema 
     65        else: 
     66            self.schema=None 
    2267        for attr in self.__dict__: 
     68            order=schema.lookupOrder(attr) 
     69            print order 
    2370            if attr=='ns': 
     71                pass 
     72            if attr=='schema': 
    2473                pass 
    2574            elif isinstance(self.__dict__[attr], molesElement): 
    2675                frag=ET.Element(attr) 
    27                 self.__dict__[attr].toXML(frag) 
     76                self.__dict__[attr].toXML(frag,schema=self.schema) 
    2877                molesFrag.append(frag) 
    2978            elif isinstance(self.__dict__[attr], list): 
     
    3180                    if isinstance(item, molesElement): 
    3281                        frag=ET.Element(attr) 
    33                         item.toXML(frag) 
     82                        item.toXML(frag, schema=self.schema) 
    3483                        molesFrag.append(frag) 
    3584                    else: 
     
    63112class dgMetadata(molesElement):     
    64113    def __init__(self, **kwargs): 
     114        self.schema = xmlSchema('ndgmetadata1.3.xsd') 
    65115        molesElement.__init__(self, **kwargs) 
    66116         
    67117    def toXML(self): 
    68118        molesFrag=ET.Element('dgMetadata') 
    69         molesElement.toXML(self,molesFrag) 
     119        molesElement.toXML(self,molesFrag,schema=self.schema) 
    70120        return molesFrag 
    71121 
     
    106156            newClass=self._create_a_class(className, molesElement) 
    107157            setattr(self,className,newClass) 
    108  
Note: See TracChangeset for help on using the changeset viewer.