DINA-Web / dina-model-concepts

Repository containing information to define data model boundaries
MIT License
3 stars 0 forks source link

Track agent known identifiers #3

Open cgendreau opened 4 years ago

cgendreau commented 4 years ago

Example: ORCID, VIAF, ISNI, wikidata

dshorthouse commented 4 years ago

Does "track" mean "periodically synchronize with"? Unlike ORCID, VIAF, or ISNI, wikidata Q numbers are unstable because items may be merged. While wikidata is an excellent resource, we have to treat it more like a service with its own unique features than an identity provider. When and if we get to it, here are a bunch of SPARQL queries that can be poached https://github.com/dshorthouse/bloodhound/blob/master/lib/wikidata_search.rb

cgendreau commented 4 years ago

Could we split it to have stable identifier in v1.0 and push the other sources?

dshorthouse commented 4 years ago

I think we should be agnostic about the provider, i.e. accept all of them. My comment was merely a flag that "track" means something different depending on the provider and the circumstances.

A more actionable item might be "make an abstract broker class" for the Agent module that has per-provider implementations in a manner similar to Keycloak. That abstract class makes the assumption that providers each have their own services & endpoints so implementing methods like get, create, refresh makes some sense. In some (most?) cases, an identity provider serves more authoritative content (= is the primary source) for attributes than the DINA Agent module itself & a resync is required because the source attributes may become newly populated or may change. In other cases, the Agent module may the more authoritative source and does not refresh/resync with anything perhaps because an instance of an Agent is not yet known (or knowable) and needs to be reconciled. In no cases will a provider serve the same attributes for an agent. So part of the duties of an implemented broker class is to transform responses from identifier providers into an object with attributes that the Agent module knows how to handle.

cgendreau commented 4 years ago

I see. The meaning of "track" in the title was more in the sense of " record agent known identifiers". In the sense that Agent 'x' as the ORCID 'y'.

dshorthouse commented 4 years ago

👍"Make a 1:many table to store all the known identifiers for an agent as rows"