Les objectifs du projet : modifier
WikiNi :
- pour qu'il génère automatiquement un fichier FOAF relativement à chaque utilisateur, en fonction des éléments qu'il a renseigné
- lire un fichier FOAF externe pour éviter à l'utilisateur de resaisir toutes les données le concernant
Solution "brutale"
WikiNi intègre un mode d'affichage "brut" (avec le handler "/raw"), permettant ainsi d'afficher du code RDF/XML sous forme de texte brut.
Voici un exemple :
Solution basique
Dans un premier temps, on peut utiliser uniquement les données existantes pour chaque utilsateur de
WikiNi :
- nom wiki : CharlesNepote
- mail
- mot-de-passe (mais là il va falloir qu'on m'explique comment partager un mot de passe entre plusieurs sites)
- n'est-ce pas l'info Une idée d'application qu'on trouve sur ce meme site : grace à la signature PGP inclus dans le fichier FOAF. Le serveur sur lequel on souhaite se connecter peut envoyer un code au client (l'appli locale, browser web ou autre, avec laquelle on tente de se connecter au serveur) qui n'a qu'à l'encrypter avec notre clé privée et l'envoyer afin que le serveur n'ait plus qu'a décrypter cette donnée avec la clé publique qu'il aura trouvé dans le fichier FOAF pour vérifer qu'il retrouve bien le code qu'il a initialement émis. Ce n'est donc pas le mot de passe qu'on partage mais, principe meme du fichier FOAF, son identité qui par nature est unique (en théorie) et que ce fichier contient. Ca nécessiterai non seulement un WikiNi modifié mais aussi des browser interagissant avec PGP ou GPG. Dites-moi si je me trompe... -- PatriceLegoux
Il existe également un champ "motto" dans la table "user" de la base. Il peut servir à autre chose que sa destination initiale sans avoir à modifier le modèle de données.
Ensuite, il faut créer un handler dans le répertoire /handler/page qui contienne le code pour générer le fichier FOAF. Comme
WikiNi est bien écrit ;), les handlers sont modulaires et il suffit seulement d'ajouter un fichier. Pour le fichier FOAF voici un code fonctionnel :
<?php
//vérification de sécurité
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) {
die ("accès direct interdit");
}
if ($this->HasAccess("read"))
{
if (!$this->page)
{
return;
}
else
{
$name = $this->tag;
if (!$user = $this->LoadUser($name))
{
//$email = sha1([requête]);
$user = $this->LoadUser($name);
$email = $user["email"];
}
else
{
echo $this->tag, " n'est pas un utilisateur.";
return;
}
//
// display the page
header("Content-type: text/xml");
print <<<FIN
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:login="http://websemantique.org/login">
<foaf:Person>
<foaf:name>$name</foaf:name>
<foaf:mbox>$email
</foaf:mbox>
</foaf:Person>
</rdf:RDF>
FIN;
}
}
else
{
return;
}
?>
Qui me donne :
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:login="http://websemantique.org/login">
<foaf:Person>
<foaf:name>CharlesNepote</foaf:name>
<foaf:mbox>charles02@nepote.org
</foaf:mbox>
</foaf:Person>
</rdf:RDF>
C'est assez simple non ? Bon, c'est encore un peu léger...
L'inconvénient c'est que la sha1 n'est intégrée que dans Php supérieur ou égal à 4.3. Il existe cependant des possibilités d'utiliser une classe externe (assez facile à adapter sur
WikiNi) : cf.
http://www.php.net/manual/fr/function.sha1.php
--
CharlesNepote
Stockage des données dans WikiNi
1. Modification de la table "user"
La première solution consiste à ajouter des champs à la table "user" de la base de données.
Avantages : facile à mettre en oeuvre.
Inconvénients :
- modifie le modèle de données
- limite le fichier FOAF aux champs ajoutés (pas évolutif à moins de modifier à chaque fois le modèle de données)
Je crois que cette solution est à écarter tout de suite.
2. Création d'une table dédiée aux triplets
Cette solution consiste à ajouter une table permettant de stocker des triplets RDF. C'est la solution que j'ai utilisé dans
http://wikisem.wikini.net
Avantages :
- facile à mettre en oeuvre (fonctions de lecture/écriture des triplets déjà écrites)
- modifie le modèle de données une fois pour toute ; on peut ajouter dans la table n'importe quel type de triplet
Inconvénients :
- alourdi WikiNi pour, actuellement, peu de résultats (je ne suis pas sûr que les développeurs de WikiNi accepte une telle modification sans broncher ; cela dit, on peut partir sur un wiki customisé)
Point d'attention :
- stockages des triplets très rustique (une seule table avec resource, namespace, property, value) mais suffisant
Interface de saisie
A définir.
A priori, deux pistes à regarder :
- saisie des triplets à l'aide d'une syntaxe du type de celle utilisée pour le wiki (par exemple : >>:CharlesNepote foaf:name "Charles Népote">> )
- comment gère-t'on a posteriori les cas antynomiques (exemple : :CharlesNepote rdf:type foaf:Person et :CharlesNepote rdf:type xxx:Cow)
- saisie plus ou moins assistée des triplets à l'aide de formulaires (cf. l'exemple très imparfait de http://wikisem.wikini.net/, notamment l'assistant)
Lecture de fichiers FOAF externes
A définir.
Questions :
- fonctionnelle : que fait-on si l'utilisateur désire à la fois importer un fichier FOAF et créer/modifier certaines métadonnées via le wiki ?
- technique : faut-il choisir forcément un analyseur syntaxique en fonction du modèle de données envisagé pour le stockage ?
Génération des fichiers FOAF
Quelquesoit la solution de stockage : cf. ci-dessus.
La génération des fichiers est assez facile et ne pose pas de problème hormis le choix de l'URL où les lire.