code: def process(source, target, rdfsonly, base=None, logger=logging):
      '''
      Prepare a statement into a triple ready for rdflib graph
      '''
      for link in source.match():
          s, p, o = link[:3]
          if s == (base or '') + '@docheader': continue
          if p in RESOURCE_MAPPING: p = RESOURCE_MAPPING[p]
          if o in RESOURCE_MAPPING: o = RESOURCE_MAPPING[o]
          if p == VERSA_BASEIRI + 'refines':
              tlinks = list(source.match(s, TYPE_REL))
              if tlinks:
                  if tlinks[0][TARGET] == VERSA_BASEIRI + 'Resource':
                      p = I(RDFS_NAMESPACE + 'subClassOf')
                  elif tlinks[0][TARGET] == VERSA_BASEIRI + 'Property':
                      p = I(RDFS_NAMESPACE + 'subPropertyOf')
          if p == VERSA_BASEIRI + 'properties':
              suri = I(iri.absolutize(s, base)) if base else s
              target.add((URIRef(o), URIRef(RDFS_NAMESPACE + 'domain'), URIRef(suri)))
              continue
          if p == VERSA_BASEIRI + 'value':
              if o not in ['Literal', 'IRI']:
                  ouri = I(iri.absolutize(o, base)) if base else o
                  target.add((URIRef(s), URIRef(RDFS_NAMESPACE + 'range'), URIRef(ouri)))
                  continue
          s = URIRef(s)
          p = RDF.type if p == TYPE_REL else URIRef(p)
          o = URIRef(o) if isinstance(o, I) else Literal(o)
          if not rdfsonly or p.startswith(RDF_NAMESPACE) or p.startswith(RDFS_NAMESPACE):
              target.add((s, p, o))
      return