@classmethod
def __getDataSources(cls, node, direct=False):
    """ provides datasources and its records from xml string

        :param xmlc: xml string
        :type xmlc: :obj:`str`
        :returns: list of datasource descriptions
        :rtype: :obj:`list` <:obj:`dict` <:obj:`str`, :obj:`str`>>
        """
    dss = []
    if direct:
        dss.extend(node.findall('datasource'))
    else:
        if node.tag == 'datasource':
            dss.append(node)
        dss.extend(node.findall('.//datasource'))
    dslist = []
    for ds in dss:
        if ds.tag == 'datasource':
            dstype = ds.attrib['type']
            dsname = ds.attrib['name']
            record = cls.getRecord(ds)
            dslist.append({'source_type': dstype, 'source_name': dsname,
                'source': record})
    return dslist
