Friday, November 20, 2009

Sketches for a Group Membership Vocabulary

(Or the Strange Tale of RDFa and the Room with Two Doors)

I am sketching these ideas out here because I think they may be useful at some point, and I would really appreciate feedback; if this sort of vocabulary is already available somewhere, please ping me and let me know. And I'm going to save the RPG analogy for the end, because I know these can be deterrent. [ed. whatever! skip to the jump; it's funny!]

An activity I have had to address on several projects now involves profiling or gate-keeping groups of people or objects for the purpose of authorization or processing. For instance, in a CRM application, it might be necessary to tag potential customers as prospects, clients, inactive, etc. Or for a workflow application for a working group, it might be necessary to track people who are actively developing, people who have left the group, but are still useful resources and so on. I have yet to see a reasonable vocabulary for tracking these people. If such a vocabulary exists, I am sure it has many uses in a variety of contexts.

This vocabulary would have the following component(s):

Membership Status (mg:status):
This is the status of an individual, group or artifact within a larger community, given the following states, which should be mutually exclusive:
  • unknown - this is a nicety and not essential. Undefined.
  • prospect - potential only to be a group member.
  • candidate - selected by an automated process to become a group member, but not one yet.
  • nominee - recommended to become a group member by an existing member.
  • initiate - has completed self-registration etc, but not yet a group member.
  • member - an active member of the group.
  • banned - removed from group by process with proviso of reentry.
  • permban - removed from groupt by process with no proviso for reentry. TERMINAL.
  • alumnus - a non-active former member of the group. TERMINAL.
  • permanent - a member that can never be removed from the group. TERMINAL.
This list is likely not complete, but it represents a fairly typical group workflow model. When you enter the system, you are unknown, and are "promoted" to membership. At this point, you are ripe for the picking. At some point you may reach a terminal, but the majority of people will probably reside in the prospect and member categories.

So here is the RPG example:
A group of adventurers is exploring a location, when they reach two doors, one red and one blue. At this point, with respect to each of the doors, the two rooms could be described using the following RDFa-like pseudoterminology:

<room id="behind_the_red_door">
<member id="adv1" property="mg:status" content="prospect"/>
<member id="adv2" property="mg:status" content="prospect"/>
<member id="adv3" property="mg:status" content="prospect"/>
</room>


...and similarly for the room behind_the_blue_door.

Now, one of the adventurers discovers a key to one of the doors. At this point, this adventurer becomes content="candidate", whereas the other adventurers become content="intitiate" - they have an understanding of how to enter, but only the first adventurer has the key. However, since the door is now unlocked. Sicne the door is locked, only candidates can enter. When the first adventurer unlocks the door, the state of the room changes such that now candidates and initiates may enter (the state of the door in this case might be handled by a separate vocabulary - also this example hinges painfully poorly on the assumption that once unlocked, a door cannot be relocked).

At this point, adv2, the knight steps forward and enters the room:

<room id="behind_the_red_door">
<member id="adv1" property="mg:status" content="candidate"/>
<member id="adv2" property="mg:status" content="member"/>
<member id="adv3" property="mg:status" content="intitiate"/>
</room>


Naturally, the brave knight discovers that the room is full of a poisonous gas, and sensibly flees. The group of adventurers investigates the second door:

<room id="behind_the_blue_door">
<member id="adv1" property="mg:status" content="prospect"/>
<member id="adv2" property="mg:status" content="prospect"/>
<member id="adv3" property="mg:status" content="prospect"/>
</room>


Fortunately, the same key unlocks this door as well, and the door is unlocked. The knight is less enthusiastic, so the curious wizard enters the room.

<room id="behind_the_blue_door">
<member id="adv1" property="mg:status" content="candidate"/>
<member id="adv2" property="mg:status" content="intitiate"/>
<member id="adv3" property="mg:status" content="member"/>
</room>


So far so good. Mind you, this room is full of a tasteless and odourless poisonous gas, but nobody seems to have noticed. The wizard beckons to his companions to enter the room:

<room id="behind_the_red_door">
<member id="adv1" property="mg:status" content="candidate"/>
<member id="adv2" property="mg:status" content="alumnus"/>
<member id="adv3" property="mg:status" content="initiate"/>
</room>
<room id="behind_the_blue_door">
<member id="adv1" property="mg:status" content="member"/>
<member id="adv2" property="mg:status" content="member"/>
<member id="adv3" property="mg:status" content="member"/>
</room>


And now the diabolically cunning design of the room becomes painfully clear, as the combined effect of the gases in the two rooms becomes apparent, and the unfortunate knight, who has membership || alumnus status for both rooms, turns into a pillar of salt.

<room id="behind_the_red_door">
<member id="adv1" property="mg:status" content="candidate"/>
<member id="adv2" property="mg:status" content="alumnus"/>
<member id="adv3" property="mg:status" content="initiate"/>
</room>
<room id="behind_the_blue_door">
<member id="adv1" property="mg:status" content="alumnus"/>
<member id="adv2" property="mg:status" content="permanent"/>
<member id="adv3" property="mg:status" content="alumnus"/>
</room>


So ends the story of "RDFa and the Diabolic Room with Two Doors."

No comments: