returns object instance representing namespace, name,
           or if does not exist return None if built-in, else
           raise SchemaError.
           
           namespace -- namespace item defined in.
           name -- name of item.
           collection -- collection in parent Schema instance to search.

def getSchemaItem(self, collection, namespace, name):
        """returns object instance representing namespace, name,
           or if does not exist return None if built-in, else
           raise SchemaError.
           
           namespace -- namespace item defined in.
           name -- name of item.
           collection -- collection in parent Schema instance to search.
        """
        parent = GetSchema(self)
        if parent.targetNamespace == namespace:
            try:
                obj = getattr(parent, collection)[name]
            except KeyError, ex:
                raise KeyError, 'targetNamespace(%s) collection(%s) has no item(%s)'\
                    %(namespace, collection, name)
                    
            return obj
        
        if not parent.imports.has_key(namespace):
            if namespace in BUILT_IN_NAMESPACES:            
                # built-in just return
                # WARNING: expecting import if "redefine" or add to built-in namespace.
                return
            
            raise SchemaError, 'schema "%s" does not import namespace "%s"' %(
                parent.targetNamespace, namespace)
            
        # Lazy Eval
        schema = parent.imports[namespace]
        if not isinstance(schema, XMLSchema):
            schema = schema.getSchema()    
            if schema is not None:
                parent.imports[namespace] = schema
            
        if schema is None:
            if namespace in BUILT_IN_NAMESPACES:
                # built-in just return
                return
            
            raise SchemaError, 'no schema instance for imported namespace (%s).'\
                %(namespace)
                
        if not isinstance(schema, XMLSchema):
            raise TypeError, 'expecting XMLSchema instance not "%r"' %schema
                
        try:
            obj = getattr(schema, collection)[name]
        except KeyError, ex:
            raise KeyError, 'targetNamespace(%s) collection(%s) has no item(%s)'\
                %(namespace, collection, name)
                    
        return obj