XWiki Social

Last modified by Vincent Massol on 2024/11/19 16:12

 XWiki
 Feature
 Dormant
 

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
Facebook  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)
Twitter  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
Facebook  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)
Twitter  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
Facebook  User u1 updates her status facebook.png 
  • The social network here is made of 8 users that are connected using a symmetric relation, like the Facebook friendship.
  • Since the social relation is symmetric, the graph is not directed. We can imagine that an edge connecting two nodes ui and uj is actually made of two directed edges (ui, uj) and (uj, ui)
  • neighborhood(u1) = { u2, u3, u5 }
  • proximity(u1) = { u2, u3, u5 }
  • The impacted users of a status update performed by u1 are those that are part of u1's neighborhood and are marked in green.
  • When the social relation is symmetric ∀u ∈ U, neighborhood(u) = proximity(u)
Twitter  User u5 updates her status twitter.png 
  • Here we have a similar social network as in the previous example, but the relation is not symmetric (i.e., this models the Twitter's following relation)
  • neighborhood(u5) = { u4 } (i.e., the users u5 is following)
  • proximity(u5) = { u1, u6, u8 } (i.e., the users who follow u5 or u5's followers)
  • The impacted users of a status update performed by u5 are those that are part of u5's proximity and are marked in green.
Twitter  User u1 updates her status twitter2.png 
  • In this example we have the same social network of the previous one.
  • We can see that since proximity(u1) = ∅ no one is impacted by a status update performed by u1 (i.e., she has no followers)

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
      complete.png
    • 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.
Information

To resume we can say that:

  • XWiki activities are page centric
  • XWiki social networks are implicitly defined by the rights configuration on each given page

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?

 


Get Connected