def __init__(self, identifier_strategy, create_strategy): self.identifier_strategy = identifier_strategy self.create_strategy = create_strategy self.bio_crosswalker = BioCrosswalk(identifier_strategy, create_strategy) self.affiliations_crosswalker = AffiliationsCrosswalk(identifier_strategy, create_strategy) self.funding_crosswalker = FundingCrosswalk(identifier_strategy, create_strategy) self.works_crosswalker = WorksCrosswalk(identifier_strategy, create_strategy)
class PersonCrosswalk(): def __init__(self, identifier_strategy, create_strategy): self.identifier_strategy = identifier_strategy self.create_strategy = create_strategy self.bio_crosswalker = BioCrosswalk(identifier_strategy, create_strategy) self.affiliations_crosswalker = AffiliationsCrosswalk(identifier_strategy, create_strategy) self.funding_crosswalker = FundingCrosswalk(identifier_strategy, create_strategy) self.works_crosswalker = WorksCrosswalk(identifier_strategy, create_strategy) def crosswalk(self, orcid_id, person_uri, person_class=None, confirmed_orcid_id=False): # Create an RDFLib Graph graph = Graph(namespace_manager=ns.ns_manager) # 0000-0003-3441-946X clean_orcid_id = clean_orcid(orcid_id) orcid_profile = fetch_orcid_profile(clean_orcid_id) # Determine the class to use for the person person_clazz = FOAF.Person if person_class: person_clazz = getattr(VIVO, person_class) # ORCID PersonCrosswalk._add_orcid_id(person_uri, clean_orcid_id, graph, confirmed_orcid_id) self.bio_crosswalker.crosswalk(orcid_profile, person_uri, graph, person_class=person_clazz) self.works_crosswalker.crosswalk(orcid_profile, person_uri, graph) self.affiliations_crosswalker.crosswalk(orcid_profile, person_uri, graph) self.funding_crosswalker.crosswalk(orcid_profile, person_uri, graph) return graph, orcid_profile, person_uri @staticmethod def _add_orcid_id(person_uri, orcid_id, graph, confirmed): orcid_id_uriref = URIRef("http://orcid.org/%s" % orcid_id) graph.add((person_uri, VIVO.orcidId, orcid_id_uriref)) graph.add((orcid_id_uriref, RDF.type, OWL.Thing)) if confirmed: graph.add((orcid_id_uriref, VIVO.confirmedOrcidId, person_uri))