Looks best option of the two, and has positive side-effect that it’ll encourage fedi apps to support type arrays. However, wondering about toot:Group
. The namespace prefix “toot” more or less indicates: This only applies to a Microblogging domain. But what you are modeling is Membership. A generic concept.
In ActivityStreams-Core par. 4.3: Actor is mentioned:
This specification intentionally defines Actors in only the most generalized way, stopping short of defining semantically specific properties for each. […] External vocabularies can be used to express additional detail not covered by the Activity Vocabulary. VCard [ vcard-rdf] SHOULD be used to provide additional metadata for Person, Group, and Organization instances.
VCard spec has a vcard:Group
, but also mentions that since it became recommendation other ontologies have appeared, such as The Organization Ontology (highlights mine):
This ontology is designed to enable publication of information on organizations and organizational structures including governmental organizations. It is intended to provide a generic, reusable core ontology that can be extended or specialized for use in particular situations.
This ontology is widely used, well understood. Though it has kinda of an intricate model… it defines Membership, Roles and more:
Now I don’t know how that would look like as AS msgs. Where the diagram says FOAF we have Actors. We might have @type = [as:Group, org:Organization]
and some membership construct to indicate a “Group with Membership” (group and organization aren’t disjoint). In a similar way there may be a use of org:Role
to model - in the case of a Microblogging domain - Moderators and Admin members. (While e.g. in a federated forge app the same ontology is used to define a role of Project Maintainer).
Biggest downside to me seems that now you are using a custom property to basically state that this is a different type of Group… one that supports Membership. Within the context of the Microblogging domain of “toot” vocabulary that may be acceptable, if everyone consents with it, but to my untrained eye it looks not to be a mechanism that scales well for broad interoperability (though a combination of a toot:Group
in the type array with this property may be perfectly fine).