docs: def select(self, *args):
          """
          This method retrieve an iterable object that implements the method
          __iter__. The arguments given will compose the parameters in the
          request url.
  
          This method can be used compounded with query, filter,
          sort and facet methods.
  
          args: valid FIELDS_SELECT arguments.
  
          return: iterable object of Works metadata
  
          Example 1:
              >>> from crossref.restful import Works
              >>> works = Works()
              >>> for i in works.filter(has_funder='true', has_license='true').sample(5).select('DOI, prefix'):
              ...     print(i)
              ...
              {'DOI': '10.1016/j.jdiacomp.2016.06.005', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.mssp.2015.07.076', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1002/slct.201700168', 'prefix': '10.1002', 'member': 'http://id.crossref.org/member/311'}
              {'DOI': '10.1016/j.actbio.2017.01.034', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.optcom.2013.11.013', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              ...
          Example 2:
              >>> from crossref.restful import Works
              >>> works = Works()
  
              >>> for i in works.filter(has_funder='true', has_license='true').sample(5).select('DOI').select('prefix'):
              >>>     print(i)
              ...
              {'DOI': '10.1016/j.sajb.2016.03.010', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.jneumeth.2009.08.017', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.tetlet.2016.05.058', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1007/s00170-017-0689-z', 'prefix': '10.1007', 'member': 'http://id.crossref.org/member/297'}
              {'DOI': '10.1016/j.dsr.2016.03.004', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              ...
          Example: 3:
              >>> from crossref.restful import Works
              >>> works = Works()
              >>>: for i in works.filter(has_funder='true', has_license='true').sample(5).select(['DOI', 'prefix']):
              >>>      print(i)
              ...
              {'DOI': '10.1111/zoj.12146', 'prefix': '10.1093', 'member': 'http://id.crossref.org/member/286'}
              {'DOI': '10.1016/j.bios.2014.04.018', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.cej.2016.10.011', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.dci.2017.08.001', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.icheatmasstransfer.2016.09.012', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              ...
          Example: 4:
              >>> from crossref.restful import Works
              >>> works = Works()
              >>>: for i in works.filter(has_funder='true', has_license='true').sample(5).select('DOI', 'prefix'):
              >>>      print(i)
              ...
              {'DOI': '10.1111/zoj.12146', 'prefix': '10.1093', 'member': 'http://id.crossref.org/member/286'}
              {'DOI': '10.1016/j.bios.2014.04.018', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.cej.2016.10.011', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.dci.2017.08.001', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              {'DOI': '10.1016/j.icheatmasstransfer.2016.09.012', 'prefix': '10.1016', 'member': 'http://id.crossref.org/member/78'}
              ...
          """
  
          context = str(self.context)
          request_url = build_url_endpoint(self.ENDPOINT, context)
          request_params = dict(self.request_params)
  
          select_args = []
  
          invalid_select_args = []
          for item in args:
              if isinstance(item, list):
                  select_args += [i.strip() for i in item]
  
              if isinstance(item, str):
                  select_args += [i.strip() for i in item.split(',')]
  
          invalid_select_args = set(select_args) - set(self.FIELDS_SELECT)
  
          if len(invalid_select_args) != 0:
              raise UrlSyntaxError(
                  'Select field\'s specified as (%s) but must be one of: %s' % (
                      ', '.join(invalid_select_args),
                      ', '.join(self.FIELDS_SELECT)
                  )
              )
  
          request_params['select'] = ','.join(
              sorted([i for i in set(request_params.get('select', '').split(',') + select_args) if i])
          )
  
          return self.__class__(request_url, request_params, context, self.etiquette)