XWiki Social
Description
This document's goal is to describe in a more precise way the vision of the Social Extension for XWiki and the issues that should be addressed.
Definitions
| Social network (informal) |
|---|
A social network is a social structure made up of individuals (or organizations) called "nodes", which are tied (connected) by one or more specific types of interdependency, such as friendship, kinship, common interest, financial exchange, dislike, sexual relationships, or relationships of beliefs, knowledge or prestige. (Wikipedia) |
| Social network service |
|---|
A social network service is an online service, platform, or site that focuses on building and reflecting of social networks or social relations among people, e.g., who share interests and/or activities. A social network service essentially consists of a representation of each user (often a profile), his/her social links, and a variety of additional services. (Wikipedia) |
| Social network (formal) |
|---|
A social network is a directed graph SN = (U, L) where U is a set of users and L ⊆ U × U is a binary relation that defines the links between users. |
| Neighborhood |
|---|
Given a social network SN = (U, L) and a user u ∈ U, the neighbourhood of user u is the set of users ui who are linked to the user u, i.e., neigbourhood(u) = { ui | (u, ui) ∈ L }. |
In some cases it is useful to introduce also the following definition
| Proximity set |
|---|
Given a social network SN = (U, L) and a user u ∈ U, the proximity set of user u is the set of users ui who have user u in their neighborhood, i.e., proximity(u) = { ui | u ∈ neighborhood(ui) } or proximity(u) = { ui | (ui, u) ∈ L } |
Examples of how these definitions apply to some of the most known social network services.
| Social relation | Social relation properties | Neighborhood | Proximity | Remarks | |
|---|---|---|---|---|---|
| Friendship | Symmetric (ui, uj) ∈ L ⇒ (uj, ui) ∈ L | Friends | Friends | Since the social relation L is symmetric then ∀ u ∈ U, if ui ∈ neighborhood(u) then u ∈ proximity(ui) | |
| Following | Following | Followers |
Because of the nature of the relation that is established between users, the action of establishing links between users might entail some kind of validation.
| Social relation | Validation | Remarks | |
|---|---|---|---|
| Friendship | Yes | Due to the symmetric nature of the "friendship" relation, when a user u1 wants to become friend of a user u2 user u2 must accept this fact because u1 will automatically become part of neighborhood(u2) | |
| Following | No | In twitter when a user u1 follows a user u2 this does not imply that the user u2 also follows user u1 so there is no need to validate a link request. |
One of the most popular features that is present in these social network services is "user status", let's see how this is handled by using the previous definitions.
| Action | Impacted users | Remarks | |
|---|---|---|---|
| User u1 updates her status | |
| |
| User u5 updates her status | |
| |
| User u1 updates her status | |
|
Current XWiki infrastructure
This section describes the current XWiki infrastructure from a social point of view. In the next sections we will build upon this in order to define what the XWiki social extension should be.
- From a social perspective, what is interesting in the XWiki platform are the activities that are generated by the users while collaborating. Currently these activities are displayed in the activity stream:
- Page creation/deletion
- Page modification
- Comment creation/deletion
- Annotation creation/deletion
- XWiki activities are page centric while in social network services these activities are user centric
- Though a social network abstraction is not explicitly defined in XWiki, we can implicitly define a social network associated to each XWiki page (this is due to the fact that activities are page centric)
- Let UP be the set of users that have sufficient rights to read a page P. So for page P we will have an implicit social network SNP = (UP, L) where ∀ui, uj ∈ UP, (ui, uj) ∈ L

- These implicit social networks are actually complete graphs where every user is linked to all the others or, in other terms, all the activities made by a user in UP on page P impacts all the other users in UP.
- Often UP has a one-to-one correspondence to a well defined XWiki group. In fact rights on a page are usually defined by granting them to a group.
- If a page is public then the social network associated to it is the one made of all registered users interconnected each one to the other.
- Let UP be the set of users that have sufficient rights to read a page P. So for page P we will have an implicit social network SNP = (UP, L) where ∀ui, uj ∈ UP, (ui, uj) ∈ L
Adding user-centric social network services to XWiki
In order to add user-centric social network services to XWiki we must give users the ability to define their neighborhoods and to define user-centric activities.
We point out that XWiki already has the user abstraction in its model, modeled using a page and an object representing her profile. What is missing is the ability to manipulate the social binary function that defines a social network SN = (U, L)
- Let SN = (U, L) the current social network. A user u ∈ U can modify it either by adding or removing pairs of the form (u, ui) to the social relation L
- When a user u wants to add a pair (u, uj), user uj should be able to validate the operation.
The basic social network service is the user status where a user can asynchronously exchange messages with her neighborhood or proximity.
- Given a social network SN = (U, L) a user status sent by user u should be communicated to all the users ui ∈ proximity(u)
- If the social relation L is symmetric, then we will have a behavior à la Facebook
- If the social relation L is not symmetric, then we will have a behavior à la Twitter
- User statuses can be communicated on the standard activity stream
- By having an abstraction for a user's neighborhood, this information can be used to calculate a projection of the displayed activities
- Let u be the current user, an activity associated to user ui is displayed if and only if ui ∈ neighborhood(u)
Managing social network services for Workspaces
Workspaces are collaboration space where a group of people can collaborate on a given topic. The users associated to a workspace implicitly define a social network where every one is connected to everyone else: let UWS = { u | u is member of the workspace WS} the social network SNWS = (WS, LWS) where LWS = WS × WS
All activities performed in the context of a workspace have an impact on every user belonging to the workspace.
An activity stream for a user u and a workspace WS will show activities generated by all the users in UWS
Open issues
- What are the properties of the social relation we want to implement? (symmetric or not?)
- Should it be mandatory to validate the establishment of a social relation?
- Should it be possible, for a user, to define different kind of social relation (e.g., friends, colleagues, projectX members, XWiki Groups)
- If this is the case, the social relation L should be made of triples (ui, uj, kind) where ui, and uj, are the user linked by the relation and kind defines the kind of the social link.
- The neighborhood of a SN = (U, L) should be extended to take into account the kind of the social link: neighborhood(u, label) = { ui | (u, ui, label) ∈ L }
- The proximity of a SN = (U, L) should be extended to take into account the kind of the social link: proximity(u, kind) = { ui | u ∈ neighborhood(ui, kind) } or proximity(u, kind) = { ui | (ui, u, kind) ∈ L }
- Where to put UI for the components?
- What are the administration options for the new features?
Fabio Mancinelli