Abstract 'Agent', remove 'Person' & 'Organization'?
It has become quite clear in implementing a GraphQL version of the spec that many of the Person
and Organization
fields are common to both types; and that having Agent
defined as an interface leads to a great deal of duplicated query edges which all return basically the same data.
It seems as though it would be advisable to remove these statically declared concrete types and instead treat everything uniformly as Agent
, adding a new agentType
field which can be used to differentiate. Well-known values for this field achieving the same functionality would come from the FOAF spec (foaf:Person
, foaf:Organization
and foaf:Group
); and we could use these as filter parameters to query all people / orgs in applications which need to differentiate them.
This is particularly true given the intention to create other types of Agent
— for example Bonfire has Group
and hREA has EcologicalAgent
(which we could define ourselves or link to in another grammar).
This does not seem like a change that need affect the core vocabulary, since it essentially treats these agent types differently already via the natural consequences of using RDF data structures.