'@param name: The element\'s (tag) name.  May cotain a prefix.
@type name: basestring
@param parent: An optional parent element.
@type parent: I{Element}
@param ns: An optional namespace
@type ns: (I{prefix}, I{name})'

def __init__(self, name, parent=None, ns=None):

    self.rename(name)
    self.expns = None
    self.nsprefixes = {}
    self.attributes = []
    self.text = None
    if (parent is not None):
        if isinstance(parent, Element):
            self.parent = parent
        else:
            raise Exception('parent    (%s)    not-valid', parent.__class__.__name__)
    else:
        self.parent = None
    self.children = []
    self.applyns(ns)
