SIOC : mise en oeuvre

Décrire un forum avec SIOC

Sommaire

Les classes

Description

Les espaces de noms

Les utilisateurs

Le contenu

La structure

Mise en oeuvre

Les spécifications SIOC définissent la description RDF des communautés connectées (blogs, forums, wikis, etc.)

Voyons comment mettre en place concrètement ces spécifications.

Les classes

La spécification SIOC définit les classes suivantes :

  • Community : communauté d'utilisateurs ;

  • Container : classe générique définissant un sous-élément de Space, i.e un forum, un fil de discussion, etc.

  • Forum : classe spécifique définissant un forum, dérivée de la classe générique Container ;

  • Item : classe générique définissant un document au sens général, i.e un post de forum, un article de wiki, etc.

  • Post : classe spécifique définissant un post dans un forum, dérivée de la classe générique Item ;

  • Role : rôle d'un utilisateur (Administrator, Guest, Moderator, Registered_User, Banned_User) ;

  • Site : classe spécifique pour définir un site, dérivée de la classe générique Space ;

  • Space : classe générique définissant un espace de travail (classe racine), qui peut être un site web, un carnet d'adresses, un calendrier, etc.

  • Thread : classe spécifique dérivée de Container qui définit un fil de discussion ;

  • UserAccount : utilisateur; en réalité le compte d'un utilisateur, c'est-à-dire une personne ayant déjà une définition ailleurs (FOAF, ...);

  • Usergroup : groupe d'utilisateurs ;

Qui intéragissent de la façon suivante :

Schéma des classes SIOC
Schéma des classes SIOC (source : W3C)

Voyons comment utiliser les spécifications SIOC.

Description

Pour notre exemple de mise en oeuvre, nous prendrons l'exemple concret et courant du forum de discussions.

Avertissement

Bien que nous décrivions un forum dans nos exemples et que le forum possède des classes spécifiques pour le décrire, nous nous reposerons sur les classes génériques, ce qui permet de générer un code qui pourra facilement s'adapter à d'autres contextes, plus génériques. Bien entendu, l'usage des classes spécifiques aux forums reste valable.

Les espaces de noms

En plus des espaces de noms spécifiques au RDF/XML :

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"

Il convient d'ajouter les espaces suivants, définissant le SIOC :

xmlns:sioc="http://rdfs.org/sioc/ns#"
xmlns:sioct="http://rdfs.org/sioc/types#"
xmlns:sioca="http://rdfs.org/sioc/access#"
xmlns:siocs="http://rdfs.org/sioc/services#"
xmlns:siocarg="http://rdfs.org/sioc/argument#"

Les utilisateurs

Les comptes

Les utilisateurs sont définis de la façon suivante :

<sioc:UserAccount rdf:about="http://users/1/1">
<sioc:id>c44e74aaeb6837713a97d6ef3130b16529f78c9f</sioc:id>
<sioc:account_of rdf:resource="http://moi.foaf.rdf"/>
<sioc:has_function rdf:resource="http://roles/1"/>
</sioc:UserAccount>

<sioc:UserAccount rdf:about="http://users/1/2">
<sioc:account_of rdf:resource="http://toi.foaf.rdf"/>
</sioc:UserAccount>
[...]
  • sioc:UserAccount : définition de l'utilisateur lui-même, c'est-à-dire un compte d'utilisateur dans l'espace de travail.

  • sioc:account_of : renvoie vers la description de la personne en question. Ici, des descriptions FOAF des utilisateurs.

  • sioc:has_function : renvoie vers le rôle de la personne dans l'espace de travail.

  • sioc:id : identifiant de l'objet sioc:UserAccount.

Du côté de la description FOAF, le compte du forum sera défini, par exemple, de la façon suivante :

<foaf:holdsAccount>
<foaf:OnlineAccount rdf:about="http://lien/vers/le_compte">
<foaf:accountServiceHomepage rdf:resource="http://my-forum/"/>
<foaf:accountName>le_compte</foaf:accountName>
<foaf:name>Nom du service</foaf:name>
<foaf:thumbnail rdf:resource="http://lien/vers/service_favicon.jpg"/>
</foaf:OnlineAccount>
</foaf:holdsAccount>

Les groupes

Les groupes d'utilisateurs sont définis de la façon suivante :

<sioc:Usergroup rdf:about="http://users/1">
<sioc:has_member rdf:resource="http://users/1/1"/>
<sioc:has_member rdf:resource="http://users/1/2"/>
</sioc:Usergroup>
  • sioc:Usergroup : définition du groupe lui-même.

  • sioc:has_member : renvoie vers un membre du groupe. Un utilisateur peut appartenir à plusieurs groupe (avec des rôles différents dans chaque groupe.

Les permissions

Un rôle est associé à une ou plusieurs permissions. La classe Permission est définie dans http://rdfs.org/sioc/access#. :

<sioca:Permission rdf:about="http://permission/1" rdfs:label="Read"/>
<sioca:Permission rdf:about="http://permission/3" rdfs:label="Create"/>
<sioc:Permission rdf:about="http://permission/2" rdfs:label="Write"/>

Les rôles

La classe Role définit les rôles affectés à une personne sur un élément (site, forum, etc.). Un rôle possède des permissions grâce à has_permission (défini http://rdfs.org/sioc/access#).

Les rôles sont définis de la façon suivante :

<sioc:Role rdf:about="http://roles/1" rdfs:label="Admin">
<sioca:has_permission rdf:resource="http://permission/1"/>
<sioca:has_permission rdf:resource="http://permission/2"/>
[...]
</sioc:Role>
<sioc:Role rdf:about="http://roles/2" rdfs:label="Moderator">
...

Le rôle est appliqué grâce à has_scope (défini dans http://rdfs.org/sioc/ns#, mais en cours de migration dans http://rdfs.org/sioc/access#) ou son inverse scope_of appliqué à la ressource.

<sioc:Role rdf:about="http://roles/1" rdfs:label="Admin">
<sioca:has_permission rdf:resource="http://permission/1"/>
<sioca:has_permission rdf:resource="http://permission/2"/>
<sioc:has_scope rdf:resource="http://forum/1"/>
[...]
</sioc:Role>

Une personne possède un rôle grâce à has_function.

Le contenu

Le contenu correspond aux informations en elles-mêmes, c'est-à-dire les messages déposés sur le forum par les utilisateurs.

Ils sont définis par la classe Item (ou la classe spécifique Post) de la façon suivante :

<sioc:Item rdf:about="http://my-forum/1/20015/1" rdf:type="sioct:Comment">
<sioc:id>c44e74aaeb6837713a97d6ef3130b16529f78c9f</sioc:id>
<sioc:name>Message 1</sioc:name>
<sioc:has_creator rdf:resource="http://users/1/2"/>
<sioc:has_container rdf:resource="http://my-forum/1/20015"/>
<sioc:content rdf:resource="http://my-forum/1/20015.html"/>
<sioc:has_reply rdf:resource="http://my-forum/1/20015/2"/>
</sioc:Item>

<sioc:Item rdf:about="http://my-forum/1/20015/2" rdf:type="sioct:Comment">
<dc:title>Message 2</dc:title>
<sioc:name>Message 2</sioc:name>
<sioc:has_creator rdf:resource="http://users/1/1"/>
<sioc:has_container rdf:resource="http://my-forum/1/20015"/>
<sioc:reply_of rdf:resource="http://my-forum/1/20015/1"/>
<sioc:content rdf:parseType="Literal">
<div xmlns="http://www.w3.org/1999/xhtml">
<h1>Un exemple de post</h1>
<p>Et ici aussi.</p>
</div>
</sioc:content>
<sioc:attachment rdf:resource="http://link_to_the_document" rdfs:label="Ma source"/>
<sioc:topic rdfs:label="Sujet" rdf:resource="http://link_to_topic"/>
</sioc:Item>
  • sioc:Item : Item de type Post, ou plus exactement de type Comment, qui est une propriété de Post. Par transitivité, Item devient un Post. Les types de Post disponibles sont : BlogPost, BoardPost, Comment, InstantMessage, MailMessage, MicroblogPost, WikiArticle.

  • sioc:name : titre du message. Vous pouvez aussi utiliser dc:title conjointement ou en remplacement.

  • sioc:has_creator : créateur du message; renvoie à l'utilisateur qui a posté le message.

  • sioc:has_container : forum ou fil de discussion auquel le message appartient. Vous pouvez tout à fait employer sioc:Forum et/ou sioc:Thread pour décrire cette ressource.

  • sioc:content : décrit le contenu du message. Peut être soit le contenu direct ou bien un renvoi à une ressource (le cas ici).

  • sioc:reply_of : indique que le message est une réponse à un autre message.

  • sioc:has_reply : indique que le message possède une réponse.

  • sioc:attachment : document attaché au message.

  • sioc:id : identifiant de l'objet sioc:Item.

  • sioc:topic : sujet relié au message.

  • sioc:content : corps du message. Peut être soit une ressource externe, soit un contenu inclus dans le RDF.

remarque à propos de sioc:content

rdf:parseType="Literal" permet de définir un type Literal, c'est-à-dire contenant autre chose que du texte simple. Ce type est très utile lorsqu'il s'agit d'inclure du code HTML dans le sioc:content.

Bien entendu, la définition :

<sioc:Post rdf:about="http://my-forum/1/20015/1" rdf:type="sioct:Comment">
[...]
</sioc:Post>

<sioc:Post rdf:about="http://my-forum/1/20015/2" rdf:type="sioct:Comment">
[...]
</sioc:Post>

est tout à fait possible.

La structure

La structure définit l'organisation même de l'espace de travail et de ses sous éléments. Dans le cas d'un forum : son site (sioc:Site), le forum (sioc:Forum) en lui-même et les fils de discussion (sioc:Thread).

Elle est définie de la façon suivante :

L'espace de travail

Défini par sioc:Space, il n'a aucune propritété particulière. C'est juste une enveloppe. C'est le contenu qui en fera quelque chose d'unique. Il rassemble des utilisateurs, des documents est une structure. Un espace de travail est décrit de la façon suivante :

<sioc:Space rdf:about="http://my-forum">
<sioc:name>Espace 1</sioc:name>
<sioc:has_usergroup rdf:resource="http://users/1"/>
<sioc:has_administrator rdf:resource="http://users/1/1"/>
<sioc:space_of rdf:resource="http://my-forum/1"/>
</sioc:Space>
  • sioc:Space : l'espace de travail en lui-même. Pourrait tout aussi bien être sioc:Site.

  • sioc:name : nom de l'espace de travail (ou du site).

  • sioc:has_usergroup : groupe(s) d'utilisateurs associé(s).

  • sioc:has_administrator : administrateur du site; renvoie vers un utilisateur.

  • sioc:space_of : espace contenant un sous-élément (forum, etc.). L'inverse est (au niveau du sous-élément) sioc:has_space.

Le(s) forum(s)

<sioc:Container rdf:about="http://my-forum/1" rdf:type="sioct:ArgumentativeDiscussion">
<sioc:has_space rdf:resource="http://my-forum"/>
<sioc:has_moderator rdf:resource="http://users/1/1"/>
<sioc:name>Forum 1</sioc:name>
</sioc:Container>
  • sioc:Container : Container de type forum, ou plus exactement de type sioct:ArgumentativeDiscussion. sioct:ArgumentativeDiscussion est une propriété de forum. Par transitivité, Container est donc un forum. Les types de forum disponibles sont : ArgumentativeDiscussion, ChatChannel, MailingList, MessageBoard, Microblog, Weblog.

  • sioc:has_space : renvoie à l'espace de travail qui le contient. L'inverse (au niveau sioc:Space) est sioc:space_of.

    Dans le cas d'une classe spécifique, nous utiliserions sioc:Site avec le lien sioc:has_host.

  • sioc:has_moderator : modérateur du site; renvoie à l'utilisateur qui est le modérateur. Il peut y avoir plusieurs modérateurs pour un forum, bien entendu.

  • sioc:name : nom du forum.

Le(s) fil(s) de discussion

Comme nous utilisons des classes génériques, la définition d'un fil de discussion ressemble étonnement à un forum. Seul le type a changé :

<sioc:Container rdf:about="http://my-forum/1/20015" rdf:type="sioc:Thread">
<sioc:has_container rdf:resource="http://my-forum/1"/>
<sioc:name>Thread 1</sioc:name>
</sioc:Container>
  • sioc:Container : le fil de discussion en lui-même. Pourrait tout aussi bien être sioc:Thread.

  • sioc:has_container : renvoie au forum (ou pourquoi pas au fil de discussion) qui le contient.

  • sioc:name : nom/titre du fil.

Mise en oeuvre

haut