• Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • ← Previous Change
  • Next Change →

Changeset 179 for Xml/xsd-fu

Show
Ignore:
Timestamp:
05/29/08 17:40:03 (6 months ago)
Author:
callan
Message:
  • Fixes issues with back references (totally broken previously)
  • Specific type resolution fixes which were made apparent by Correction and Immersion
Location:
Xml/xsd-fu/trunk
Files:
3 modified

  • fu.py (modified) (4 diffs)
  • generateDS/generateDS.py (modified) (15 diffs)
  • xsd-fu (modified) (2 diffs)

Legend:

Unmodified
Added
Removed
  • Xml/xsd-fu/trunk/fu.py

    r168 r179  
    280280                self.base = element.getBase() 
    281281                self.name = element.getName() 
     282                self.type = element.getType() 
    282283                self.properties = dict() 
    283284         
    … …  
    318319         
    319320        def __str__(self): 
    320                 return self.__repr__(self) 
     321                return self.__repr__() 
    321322         
    322323        def __repr__(self): 
    … …  
    385386                        logging.error("Element %s.%s extension chain contains mixed and non-mixed content, skipping." % (parent, e)) 
    386387                        return 
     388                if e.getType() != e.getName(): 
     389                    logging.info("Element %s.%s is not a concrete type, skipping." % (parent, e)) 
     390                    return 
    387391                obj = OMEModelObject(e, self) 
    388392                self.addObject(e, obj) 
    … …  
    412416                                if prop.type[-3:] == "Ref": 
    413417                                        shortName = prop.type[:-3] 
    414                                         if prop.type not in references: 
     418                                        if shortName not in references: 
    415419                                                references[shortName] = list() 
    416420                                        references[shortName].append(o.name) 
     421                logging.debug("Model references: %s" % references) 
    417422 
    418423                for o in self.objects.values(): 
  • Xml/xsd-fu/trunk/generateDS/generateDS.py

    r168 r179  
    228228    def setBase(self, base): self.base = base 
    229229    def getBase(self): return self.base 
    230     def setSimpleType(self, simpleType): self.simpleType = simpleType 
    231     def getSimpleType(self): return self.simpleType 
    232230    def getAttributeGroups(self): return self.attributeGroups 
    233231    def setAttributeGroup(self, attributeGroup): self.attributeGroup = attributeGroup 
    … …  
    354352    def getAnyAttribute(self): return self.anyAttribute 
    355353    def setSimpleType(self, simpleType): self.simpleType = simpleType 
    356     def getSimpleType(self): return self.simpleType 
     354    def getSimpleType(self): return self.simpleType.getName() 
    357355 
    358356    def show(self, outfile, level): 
    … …  
    423421            # type_val = '' 
    424422        type_val = self.resolve_type_1() 
     423        logging.debug("Resolving type of %s with initial type %s" %  
     424                      (self, type_val)) 
    425425        if type_val: 
    426426            if type_val in ElementDict: 
     427                logging.debug("Type %s is in ElementDict" % type_val) 
    427428                type_val1 = type_val 
    428429                # The following loop handles the case where an Element's  
    … …  
    438439                    element = ElementDict[type_val1] 
    439440                    t = element.resolve_type_1() 
    440                     # If the type is available in the SimpleTypeDict, we 
    441                     # know we've gone far enough in the Element hierarchy 
    442                     # and can return the correct base type. 
    443                     if t in SimpleTypeDict: 
    444                         type_val1 = SimpleTypeDict[t].getBase() 
     441                    logging.debug("Element[%s] %s from ElementDict's type " \ 
     442                                  " resolves to %s" % (i, element, t)) 
     443                    # If the type has a simple type, we know we've gone far  
     444                    # enough in the Element hierarchy and can return the  
     445                    # correct base type. 
     446                    if element.simpleType not in (None, 1): 
     447                        type_val1 = element.simpleType.getBase() 
     448                        logging.debug( 
     449                            "Resolving type based on SimpleType %s to %s" %  
     450                            (element.simpleType, type_val1)) 
    445451                        break 
    446452                    # If the type name is the same as the previous type name 
    … …  
    498504        else: 
    499505            type_val = StringType[0] 
     506        logging.debug("Resolved type of %s to be %s" % (self, type_val)) 
    500507        return type_val 
    501508 
    … …  
    507514            type_val = self.attrs['type'] 
    508515            if type_val in SimpleTypeDict: 
    509                 self.simpleType = type_val 
     516                self.simpleType = SimpleTypeDict[type_val] 
    510517        elif 'ref' in self.attrs: 
    511518            # fix 
    … …  
    727734        self.inAttributeGroup = 0 
    728735        self.inSimpleType = 0 
     736        self.inListType = 0 
     737        self.inUnionType = 0 
    729738        # The last attribute we processed. 
    730739        self.lastAttribute = None 
    … …  
    743752        print msg 
    744753        sys.exit(-1) 
     754         
     755    def findLastXschemaElement(self): 
     756        """ 
     757        Traverses the current stack of elements to find the first instance 
     758        of XschemaElement. 
     759        """ 
     760        element = None 
     761        reverse = list(self.stack) 
     762        reverse.reverse() 
     763        for entry in reverse: 
     764            if isinstance(entry, XschemaElement): 
     765                element = entry 
     766        return element 
    745767 
    746768    def startElement(self, name, attrs): 
    747769        logging.debug("Start element: %s %s" % (name, repr(attrs.items()))) 
     770        logging.debug("Stack: %s" % self.stack) 
    748771 
    749772        if name == SchemaType: 
    … …  
    866889                stName = None 
    867890            # If the parent is an element, mark it as a simpleType. 
    868             if len(self.stack) > 0: 
     891            if len(self.stack) > 0 and isinstance(self.stack[-1], XschemaElement): 
    869892                self.stack[-1].setSimpleType(1) 
    870893            element = SimpleTypeElement(stName) 
    … …  
    876899            #   the restriction base. 
    877900            if self.inSimpleType > 0 and 'base' in attrs.keys(): 
    878                 self.stack[-1].setBase(attrs['base']) 
     901                base = attrs['base'] 
     902                parent = self.stack[-1] 
     903                logging.debug("Setting base '%s' on: %s" % (base, parent)) 
     904                parent.setBase(base) 
    879905            self.inRestrictionType = 1 
    880906        elif name == EnumerationType: 
    … …  
    889915                # in the stack. We search backwards through the stack to 
    890916                # find the last element. 
    891                 element = None 
    892                 reverse = list(self.stack) 
    893                 reverse.reverse() 
    894                 logging.debug("Found enum, reverse stack: %s" % reverse) 
    895                 for entry in reverse: 
    896                     if type(entry) == XschemaElement: 
    897                         element = entry 
     917                element = self.findLastXschemaElement() 
    898918                if element is None: 
    899919                    sys.stderr.write( 
    … …  
    911931                for member in attrs['memberTypes'].split(" "): 
    912932                    self.stack[-1].unionOf.append(member) 
     933            self.inUnionType = 1 
    913934        elif name == WhiteSpaceType and self.inRestrictionType: 
    914935            if attrs.has_key('value'): 
    … …  
    919940            #ipshell('Parsing simpleType -- Entering ipshell.\nHit Ctrl-D to exit') 
    920941            #import pdb; pdb.set_trace() 
    921         logging.debug("Start element stack: %d" % len(self.stack)) 
    922942 
    923943    def endElement(self, name): 
    … …  
    932952            if len(self.stack) == 1: 
    933953                self.topLevelSimpleTypes.append(simpleType) 
     954            elif not self.inAttribute and not self.inListType \ 
     955                 and not self.inRestrictionType and not self.inUnionType: 
     956                logging.debug("Setting simple type on %s to %s" % (self.stack[-1], simpleType)) 
     957                self.stack[-1].simpleType = simpleType 
    934958        elif name == RestrictionType and self.inRestrictionType: 
    935959            self.inRestrictionType = 0 
    … …  
    9801004        elif name == ListType: 
    9811005            self.inListType = 0 
     1006        elif name == UnionType: 
     1007            self.inUnionType = 0 
    9821008 
    9831009    def characters(self, chrs): 
  • Xml/xsd-fu/trunk/xsd-fu

    r168 r179  
    5656 
    5757Report bugs to Chris Allan <callan@blackcat.ca>""" % \ 
    58         (error, cmd, DEFAULT_PACKAGE, NAMESPACE, cmd) 
     58        (error, cmd, DEFAULT_PACKAGE, DEFAULT_NAMESPACE, cmd) 
    5959        sys.exit(2) 
    6060 
    … …  
    104104        outputDirectory = None 
    105105        package = DEFAULT_PACKAGE 
    106         namespace = "xs:" 
     106        namespace = "xsd:" 
    107107 
    108         model = parseXmlSchema("tmp/schemas/2003/ome.xsd", namespace) 
     108        model = parseXmlSchema("tmp/schemas/2008-02/ome.xsd", namespace) 
    109109        fu = TemplateInfo(outputDirectory, package) 
    110110        template = NewTextTemplate(open(CLASS_TEMPLATE).read()) 
    111111        for obj in model.objects.values(): 
    112                 if obj.name == "Image": 
    113                         print " +-- %s(%s)" % (obj.name, obj.base) 
     112                if obj.name in ["Experimenter"]: 
     113                        print " +-- %s(base=%s, type=%s)" % (obj.name, obj.base, obj.type) 
    114114                        for prop in obj.properties.values(): 
    115115                                print " +---- %s(%s) [%d:%d]" % \ 

Download in other formats:

  • Unified Diff
  • Zip Archive

Trac Powered

Powered by Trac 0.11
By Edgewall Software.

Visit the Trac open source project at
http://trac.edgewall.org/