41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
__all__ = ['RefElement', 'RefAttribute', 'RefAttributeGroup', 'RefGroup']
|
|
|
|
|
|
class RefElement(object):
|
|
|
|
def __init__(self, tag, ref, schema, is_qualified=False,
|
|
min_occurs=1, max_occurs=1):
|
|
self._ref = ref
|
|
self._is_qualified = is_qualified
|
|
self._schema = schema
|
|
self.min_occurs = min_occurs
|
|
self.max_occurs = max_occurs
|
|
|
|
def resolve(self):
|
|
elm = self._schema.get_element(self._ref)
|
|
elm = elm.clone(
|
|
elm.qname, min_occurs=self.min_occurs, max_occurs=self.max_occurs)
|
|
return elm.resolve()
|
|
|
|
|
|
class RefAttribute(RefElement):
|
|
def __init__(self, *args, **kwargs):
|
|
self._array_type = kwargs.pop('array_type', None)
|
|
super(RefAttribute, self).__init__(*args, **kwargs)
|
|
|
|
def resolve(self):
|
|
attrib = self._schema.get_attribute(self._ref)
|
|
attrib = attrib.clone(attrib.qname, array_type=self._array_type)
|
|
return attrib.resolve()
|
|
|
|
|
|
class RefAttributeGroup(RefElement):
|
|
def resolve(self):
|
|
value = self._schema.get_attribute_group(self._ref)
|
|
return value.resolve()
|
|
|
|
|
|
class RefGroup(RefElement):
|
|
def resolve(self):
|
|
return self._schema.get_group(self._ref)
|