rn7.net/wiki

Wikisem011

PagePrincipale :: rn7.net :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes 38.107.179.226

<?php

// Wikisem 0.1.1 du 10/01/2006
// Charles Népote 2005, 2006.

/* MVC divides an application into three concerns:

    * Model - Encapsulates core application data and functionality domain logic.
    * View - obtains data from the model and presents it to the user.
    * Controller - receives and translates input to requests on the model or the view.
*/


// wikisem.php (contrôleur)
// Usage :
// wikisem.php est inclus dans un autre fichier PHP qui intègre :
//    // Fichier de configuration relatif à cette instance de wikisem
    /*    $config = array (
            'wikisem_path' => '/var/www/wikisem',
            'tpl_path' => '/var/www/wikisem/tpl',
            'modelURI' => 'http://rn7.net/2005/05/15',
            'storage' => 'file'
            );*/
//    include "/var/www/wiki-s/config.inc.php";
//    // Bibliothèque wikisem
//    include "/var/www/wikisem/wikisem.php";


// -----------------------------------------------------------------------
// --- Contrôleur
// -----------------------------------------------------------------------

// (en fonction des entrées on sélectionne telle ou telle vue)
// Entrées possibles :
// -- une action : lire, modifier, etc.
// -- un objet
// -- un identifiant utilisateur et un mot-de-passe

// -----------------------------------------------------------------------
// -- 1. Lecture des arguments
// -----------------------------------------------------------------------
define ("WKS_BASE_URL""http://127.0.0.1/wiki-s/?s=");
define ("WKS_MODEL_BASE_URI""http://rn7.net/s/");
// URI par défaut ; si aucun paramètre n'est entré (ex : http://example.net/wikisem/ ),
// on utilise une resource par défaut : ex : http://example.net/uri/a )
$default_uri WKS_MODEL_BASE_URI "a";

// Partie variable de l'URL déterminant la ressource ; ex, dans http://127.0.0.1/wiki-s/?s=a
// la partie variable est "a"
$id = isset($_GET['s']) ? $_GET['s'] : "a";

// Détermination de la ressource (URI) à partir de l'URL
$resource = isset($_GET['s']) ? WKS_MODEL_BASE_URI $id $default_uri;
// Détermination de l'action à réaliser sur cette ressource (URI) :
// -- show : afficher une vue HTML de la ressource (action par défaut)
// -- edit : afficher un formulaire d'édition HTML de la ressource
// -- modify : enregistrer les valeurs relatives à une ressource
// -- rdf/xml
// -- n3
// -- delete
$action = isset($_GET['action']) ? $_GET['action'] : 'show';
// Paramètre de langue utile pour l'interface utilisateur
// TODO : calculer ce paramètre :
// -- 1. selon le choix prélable de l'utilisateur
// -- 2. à défaut selon la chaîne communiquée par le navigateur
// -- 3. à défaut selon la langue spécifiée par l'administrateur
// -- 4. à défaut selon la langue spécifiée par l'auteur de ce logiciel
$lang "fr";


// -----------------------------------------------------------------------
// --- Modèle
// -----------------------------------------------------------------------
//include $config['wikisem_path'] . "/model.inc.php";
include $config['wikisem_path'] . "/model2.inc.php";



// -----------------------------------------------------------------------
// -- 2. 
// -----------------------------------------------------------------------
$wiki = new Wiki($store,$resource,$action,$lang);




// -----------------------------------------------------------------------
// -- 3. Aff. de la vue en fonction des param. du script (action, etc.)
// -----------------------------------------------------------------------

// -- Si c'est un affichage
if($resource <> '' and $action == 'show')
{
    include 
$config['tpl_path'] . "/complete.inc.php";
    exit;
}


?>


<?php


// model2.inc.php


// -----------------------------------------------------------------------
// -- Include RAP
// -----------------------------------------------------------------------
define("RDFAPI_INCLUDE_DIR""/var/www/wikisem/rdfapi-php/api/");
include(
RDFAPI_INCLUDE_DIR "RdfAPI.php");

$store ModelFactory::getDbStore('MySQL''localhost''wikisem''root''craven2');
//print_r($test);
// Pour créer les tables il faut avoir préalablement créé la base dans MySQL
$test $store->createTables('MySQL');



// -----------------------------------------------------------------------
// La classe wiki permet de créer un wiki sémantique (un site) et de réaliser
// une action sur la ressource spécifiée ex : éditer la ressource
// http://example.net/ressources/a
/*
define ("WKS_BASE_URL", "http://127.0.0.1/wiki-s/?s=");
define ("WKS_MODEL_BASE_URI", "http://rn7.net/s/");
// URI par défaut ; si aucun paramètre n'est entré (ex : http://example.net/wikisem/ ),
// on utilise une resource par défaut : ex : http://example.net/uri/a )
$default_uri = WKS_MODEL_BASE_URI . "a";

// Partie variable de l'URL déterminant la ressource ; ex, dans http://127.0.0.1/wiki-s/?s=a
// la partie variable est "a"
$id = isset($_GET['s']) ? $_GET['s'] : "a";

// Détermination de la ressource (URI) à partir de l'URL
$resource = isset($_GET['s']) ? WKS_MODEL_BASE_URI . $id : $default_uri;
// Détermination de l'action à réaliser sur cette ressource (URI) :
// show, edit, modify, rdf/xml, n3, delete
$action = isset($_GET['action']) ? $_GET['action'] : 'show';
// Paramètre de langue utile pour l'interface utilisateur
// TODO : calculer ce paramètre selon cet ordre de choix :
// choix prélable de l'utilisateur, chaîne communiquée par le navigateur,
// langue spécifiée par l'administrateur, langue spécifiée par l'auteur de Wikisem
$lang = "fr";

*/


Class Wiki
{
    var 
$rd;
    var 
$dbModel;
    var 
$site;
    var 
$out;
    var 
$resource;
    var 
$subject;
    var 
$lang;
    
    function 
Wiki($store,$resource,$action,$lang)
    {
        
// Ouverture du modèle dont l'URI est http://rn7.net/2005/05/15
        // TODO : passage en paramètre :
        // -- du tableau de modèles à charger ??
        // -- du modèle de base contenant la liste des autres modèles ??
        
$this->dbModel $store->getModel('http://rn7.net/2005/05/15');

        
// -----------------------------------------------------------------------
        // -- Définition de la ressource rdfs:label
        
$this->label = new Resource("http://www.w3.org/2000/01/rdf-schema#label");

        
// -----------------------------------------------------------------------
        // -- Données sur le site
        // TODO : passage en paramètre :
        //   -- de la ressource ??
        //   -- 
        
$this->site = new Resource("http://rn7.net/s/");
        
        
// Titre de site (nom propre, donc non localisé)
        
$title $this->getRDFSLabel($this->dbModel$this->site);
        
$this->resource $resource;
        
$this->lang $lang;
        
        
// -----------------------------------------------------------------------
        // -- Données sur l'objet
        
        // -- Nom de l'objet
        // Recherche la première déclaration donnant le label de cet objet
        
$this->subject = new Resource($resource);
        
$this->objectLabel $this->getRDFSLabel($this->dbModel$this->subject$lang);
        
//$o = getRDFSLabel($dbModel, new Resource('http://rn7.net/s/b'), $lang);
        //echo $o;
        //$this->out = $this->dbModel->writeAsHtmlTable();
    
}
    
    
// -----------------------------------------------------------------------
    //
    // -----------------------------------------------------------------------
    
function getRDFSLabel($model$resource$lang="")
    {
        
// Ne fonctionne pas si le modèle ne contient pas la ressource
        
        // Si pas de label : "-- Sans label --"
        // Si un label sans indication de langue : on affiche
        // Si un label dans une autre langue :
        //  -- on affiche par défaut "-- sans label --"
        //  -- l'utilisateur peut vouloir les afficher par défaut
    
        
if(!empty($lang))
        {
            
$res_model $model->find($resource$this->labelNULL);
            
// Puis itération sur le modèle pour trouver le bon
            
$it $res_model->getStatementIterator();
            
// Traverse model and output statements
            
while ($it->hasNext())
            {
                
$statement $it->next();
                
$r $statement->getObject();
                
//echo $r->toString();
                //echo $lang;
                //echo $r->getLanguage();
                
if($r->getLanguage() == $lang)
                {
                    
$return $r->getLabel();
                    
//echo $return;
                    
return $return;
                    break;
                }
            }
        }
        else
        {
            
$res $model->findFirstMatchingStatement($resource$this->labelNULL);
            if(
$res$return $res->getLabelObject();
            else 
$return '';
        }
        return 
$return;
    }
    
    function 
resourceTypes($model$resource)
    {
        
// Renvoie un modèle contenant les classes d'appartenance d'une ressource
        
$type = new Resource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
        
$res_model $model->find($resource$typeNULL);
        return 
$res_model;
    }
    
    
// -----------------------------------------------------------------------
    // -- Content management functions (interface)
    // ----------------------------------------------------------------------
    
    
function getAllResourceTypes($model$resource$lang)
    {
        
// Renvoie une chaine contenant les classes d'appartenance d'un objet
        
$res_model $this->resourceTypes($model$resource);
        return 
$this->serializeObjectsLabels($res_model","$lang);
    }
    
    function 
getAllResourceTypesInHTML($model$resource$lang)
    {
        
// Renvoie une chaine HTML contenant les classes d'appartenance d'un objet
        
$res_model $this->resourceTypes($model$resource);
        
$it $res_model->getStatementIterator();
        
// Traverse model and output statements
        
while ($it->hasNext())
        {
            
$statement $it->next();
            
$r $statement->getObject();
            
//echo $r->toString();
            //echoResourceURL($resource, $html_id="", $css_classes="")
            
$result .= $this->echoResourceURL($r$html_id=""$css_classes="");
        }
        return 
$result;
        
        
        
        
        
//return $this->serializeObjectsLabels($res_model, ",", $lang);
    
}
    
    
    function 
serializeObjectsLabels($model$separator$lang)
    {
        
// Renvoie une liste textuelle des valeurs d'une série de triplets
        
        
$it $model->getStatementIterator();
        
// Traverse model and output statements
        
while ($it->hasNext())
        {
            
$statement $it->next();
            
$r $statement->getObject();
            
//echo $r->toString();
            
$result .= $this->getRDFSLabel($this->dbModel$r$lang); //ok
        
}
        return 
$result;
    }
    
    function 
getURLid($id)
    {
        
// Renvoie ...
        
return WKS_BASE_URL $id;
    }
    
    function 
echoResourceURL($resource$html_id=""$css_classes="")
    {
        
// Renvoie l'URL de la ressource : ie la page HTML qui décrit la ressource
        
echo
            
"<a href=\"",
            
$resource->getLocalName(),
            
"\">",
            
$this->getRDFSLabel($this->dbModel$resource),
            
"</a>";
        return;
    }
    
    function 
echoHTMLSelect4RangeOfAResource($resource)
    {
        
// Renvoie le code HTML des propriétés qui peuvent
        // s'appliquer à une ressource
        // Exemple :
        //
        //
        
    
}
    
    function 
htmlViewOfResource($dBmodel$subject$lang)
    {
        
// Renvoie ...
        
        // Calcule toutes les déclarations à propos de cette ressource
        //$this->subject = new Resource($subject);
        
$res $dBmodel->find($subjectNULLNULL);
        
        
// Sortie HTML
        
$res->writeAsHtmlTable();
        
        
// TODO : comment afficher les litéraux ?
        
    
}

    function 
htmlViewOfCurrentResource()
    {
        
// Renvoie ...
        
        // Calcule toutes les déclarations à propos de cette ressource
        
echo "****************".$this->resource."<br />";
        echo 
"****************".$this->lang."<br />";
        
$res $this->dbModel->find($this->subjectNULLNULL);
        
        
// Sortie HTML
        
$res->writeAsHtmlTable();
        
        
// TODO : comment afficher les litéraux ?
        
    
}

    function 
htmlViewOfResource3()
    {
        
// Renvoie, pour une ressource donnée, une liste HTML des propriétés et valeurs
        // correspondantes
        
        // -- ne renvoie pas le "type" (rdfs:type) de la ressource (car déjà donné dans le titre)
        // -- ne renvoie que les labels des ressources dans la langue spécifiée
        
        
$res $this->dbModel->find($this->subjectNULLNULL);
        
        
// Sortie HTML
        // Get Iterator from model
        
$it $res->getStatementIterator();

        
// Traverse model and output statements
        
while ($it->hasNext())
        {
            
$statement $it->next();
            
//echo "Statement number: " . $it->getCurrentPosition() . "<BR>";
            //echo "Subject: " . $statement->getLabelSubject() . "<BR>";
            
            
            
echo "Predicate: " $this->getRDFSLabel($this->dbModel$statement->predicate(), $this->lang) . "<BR>";
            echo 
"Object: " $this->getRDFSLabel($this->dbModel$statement->object(), $this->lang) . "<P>";
        }
        
    }
    
    function 
getPropertiesAndValuesOf($resource,$lang)
    {
        
// Renvoie, pour une ressource donnée, un tableau PHP des propriétés et valeurs
        // correspondantes
        
        // -- ne renvoie pas le "type" (rdfs:type) de la ressource (car déjà donné dans le titre)
        // -- ne renvoie pas le "label" (rdfs:label) de la ressource (car déjà donné dans le titre)
        // -- ne renvoie que les labels des ressources dans la langue spécifiée

        
$return = array();
        
        
$res_model $this->dbModel->find($resourceNULLNULL);
        
//print_r($res_model);
        // Puis itération sur le modèle pour trouver le bon
        
$it $res_model->getStatementIterator();
        
// Traverse model and output statements
        
while ($it->hasNext())
        {
            
$statement $it->next();
            
$object $statement->getObject();
            
$predicate $statement->getPredicate();
            
// Si la valeur est un littéral, on affiche la valeur
            
if (is_a($object'Literal'))
            {
                
//$it->setFindLiteralWithLang($lang);
                //echo $r->toString();
                //echo $lang;
                //echo $r->getLanguage();
                //print_r($object);
                
if(!$object->getLanguage() or $object->getLanguage() == $lang)
                {
                    
//$return[$predicate->getLabel] = $object->getLabel();
                    
$return[$this->getRDFSLabel($this->dbModel$predicate)] = $object->getLabel();
                    
//getRDFSLabel($model, $resource, $lang="")
                    
echo "*";
                }
            }
            
// Si la valeur est un objet, on affiche la valeur du label de cet objet
            //...
        
}
        return 
$return;
    
    }
        
    function 
htmlViewOfCurrentResource3()
    {
        
$return $this->getPropertiesAndValuesOf($this->subject,$this->lang);
        
print_r($return);
    }
}

?>


<?php

// complete.inc.php
$title $wiki->getRDFSLabel($wiki->dbModel$wiki->site);
$URLid $wiki->getURLid($id);
$objectLabel $wiki->objectLabel;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html>


<head>
<title><?php echo $title?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<style type="text/css">
body { font-family: Helvetica; font-size: 90%; }

/* --------------------- Menu ------------------------ */
#menu { font-size: 80%; margin-left: 5%; background-color: ; border-left: 4px outset; border-bottom: 0px outset;  width: 15%; margin-left: 82%; padding: 0.7%; }
/* ----------- */
#menu ul { margin: 0; padding: 0; margin-left: 2%; }
#menu li { margin-left: 9%; padding: 0; }
#menu li li { margin-left: 8% ; padding-left: 1%; }
#menu h2 { margin-top: 4%; margin-bottom: 0.5%; }
#copyright { padding: 3%; border-top: 1px inset; }
.selected { color:red; text-decoration:underline; }

/* --------------------- Objet ------------------------ */
#objet { float: left; width: 80%; border-top: 4px outset; }
/* ----------- */
#objet h2 { font-style: bold; }
#id { float:right; width:20%; margin: 2%; font-size: 100%; color: #ccccdd; text-align: right; border: none; }
#id a { color: #ccccdd; }
#type { margin:2%; width:70%; }
.type { font-size:70%; }

.propriete { clear:both; margin: 2%; }
  .entete { float:left; margin:0%;margin-top:0; margin-bottom:0; font-size:80%; background-color:yellow; padding:0.2% 0% 0.2% 0%; }
  .action_declaration { float:right; margin:2px; font-size:80%; }
    
.page { border:1px dashed;   }
.footer { border:1px dashed; }
.commentsheader { border:1px dashed; }    

.page, .footer, .commentsheader { clear: both; width: 100%; padding:0.2% 0% 0.2% 0%; }

#menu_objet { clear:both; background-color: pink; border: 1px solid; margin: 2%; }
#menu_objet .menu_suj { width:8%; font-size:80%; }
#menu_objet .menu_prop { width:8%; font-size:80%; background-color:yellow; }
#menu_objet .champ_val { width:78% }
#menu_objet p { margin: 0px; padding: 0.3em; }

#environ { background-color: #aaffbb; border-top: 4px solid; border-bottom: 5px solid; margin: 2%; }
#environ h3 { background-color: gray; margin: 0px; padding: 0.3em; }
#environ p { padding: 0.3em; }

/*.obj { background:transparent url('http://i.a.cnn.net/cnn/.element/img/1.0/misc/icon.external.links.gif') 100% 10% no-repeat;
padding-right:25px; }*/


@media screen {
.obj { background:transparent url('http://i.a.cnn.net/cnn/.element/img/1.0/misc/icon.external.links.gif') 100% 10% no-repeat;
padding-right:25px; }
}

@media print {
.obj { text-decoration: none; }
.obj:after { text-decoration: none; content:" *"; }
}
</style>
</head>


<body>

<?php

// Output the model as HTML table
//echo $wiki->out;

?>

<!-- ...............Titre du site .................. -->
<h1><?php echo $title?></h1>
<!-- h1><?php echo Wiki::getRDFSLabel($wiki->dbModel$wiki->site); ?></h1 -->


<!-- .................. Objet ...................... -->
<div id="objet">


<!-- Identifiant de l'objet (URI) -->
<h1 id="id">Identifiant de l'objet&nbsp;:&nbsp;<a href="<?php echo $URLid?>" title="<?php echo "Objet : ".$objectLabel?>"><?php echo $id?></a></h1>


<!-- Nom de l'objet -->
<h1 id="type"><a href="<?php echo $wiki->getURLid($id); ?>" class="obj"><?php echo $objectLabel?></a>
<!-- variable affichant les types de l'objet -->
<span class="type">(<?php echo $wiki->getAllResourceTypesInHTML($wiki->dbModel$wiki->subject"fr"); ?>)</span>
</h1>


<div class="propriete">

        <div style="font-size: 0.8em;">
        <?php //echo $wiki->htmlViewOfResource($wiki->dbModel, $wiki->subject, "fr"); ?>
        </div>
        <?php echo $wiki->htmlViewOfCurrentResource3(); ?>
</div>

<div class="propriete">

<p class="entete"><a href="#" class="obj">Auteur</a></p>
<div class="page">
<p class="action_declaration"><a href="#" title="&eacute;diter cette déclaration." >[modifier]</a></p>
<a href="#" class="obj">Hendrick Man</a>, <a href="#" class="obj">David Delon</a>
</div>
</div>


<div class="propriete">
<p class="entete"><a href="#" class="obj">License</a></p>
<div class="page">

<p class="action_declaration"><a href="#" title="&eacute;diter cette déclaration." >[modifier]</a></p>
<a href="#" class="obj">Licence GPL</a>
</div>
</div>

<!-- <hr style="color: red;" /> -->


<!-- menu objet -->
<div id="menu_objet">
<form action="#" method="get">
<p>
Ajouter une déclaration dont <?php $wiki->echoResourceURL($wiki->subject); ?> est le sujet (assistant)&nbsp;:<br />

<?php $wiki->echoResourceURL($wiki->subject); ?>
->
<input type="hidden" name="wiki" value="propriete" />
<select name="property" class="menu_prop" />
<option>...</option>
<option>auteur</option>
<option>commentaire</option>
<option>est définit par</option>
<option>label</option>
<option>licence</option>

<option>mode</option>
<option>type</option>
<option>voir également</option>
</select>
->
<input name="property" class="champ_val" />
</p>
</form>
</div>

<!-- ==================================================== -->

<!-- menu objet -->
<div id="menu_objet">

<form action="#" method="get">
<p>
Ajouter une déclaration dont <a href="#"><?php echo $objectLabel?></a> est l'objet (assistant)&nbsp;:<br />
<input type="hidden" name="wiki" value="propriete" />
<select name="property" class="menu_suj" />
<option>...</option>
</select>
->
<input type="hidden" name="wiki" value="propriete" />
<select name="property" class="menu_prop" />
<option>...</option>

<option>utilise</option>
<option>est équivalent à</option>
<option>est différent de</option>
</select>
->
<?php $wiki->echoResourceURL($wiki->subject); ?>
</p>
</form>
</div>

<!-- ==================================================== -->
<div id="environ">

<h3>Environnement <a href="#" style="text-decoration:none;">[-/+]</a></h3>

<p>
Autres logiciels : <a href="#" class="obj">...</a>, <a href="#" class="obj">...</a>
</p>
<p>
Autres outils collaboratifs : <a href="#" class="obj">...</a>, <a href="#" class="obj">...</a>

</p>
<p>
Propriétés possibles de cet objet :
<ul>
<li>En tant qu'objet : <a href="#" class="obj">commentaire</a>, <a href="#" class="obj">est définit par</a>, <a href="#" class="obj">label</a>, <a href="#" class="obj">type</a>, <a href="#" class="obj">voir également</a></li>
<li>En tant que logiciel : <a href="#" class="obj">auteur</a>, <a href="#" class="obj">licence</a>, <a href="#" class="obj">...</a></li>

<li>En tant qu'outil collaboratif : <a href="#" class="obj">mode</a>, <a href="#" class="obj">...</a></li>
</ul>
</p>
<p>
Cartographie :
<ul>
<li><a href="#" class="obj">Objet</a> --> <a href="#" class="obj">Produit</a> --> <a href="#" class="obj">Logiciel</a> --> <a href="#" class="obj">WikiNi</a></li>

<li><a href="#" class="obj">Objet</a> --> <a href="#" class="obj">Outil</a> --> <a href="#" class="obj">Outil collaboratif</a> --> <a href="#" class="obj">WikiNi</a></li>
</ul>
</p>

</div>
<!-- /menu objet -->

</div>
<!-- /Objet -->


<!-- Menu général -->
<div id="menu">

<h2>Objet</h2>
<ul>
    <li>Modifier l'objet</li>
        <li>Ajouter une propriété</li>
        <li>Modifier les droits</li>

    <li>Supprimer l'objet</li>
    <li>S'approprier l'objet</li>
    <li>Vue
    <ul>
        <li class="selected">Vue complète</li>
        <li>Vue simplifiée</li>
        <li>A la Wiki (par défaut)</li>

        <li>Réseau FOAF</li>
        <li>Historique</li>
        <li>En réseau</li>
        <li>RDF</li>
        <li>RSS</li>
    </ul>

    </li>
</ul>
<h2>Outil</h2>
<ul>
    <li>Présentation</li>
        <li>Configuration</li>
        <li>Requêtes
    <ul>
        <li>Historique des objets</li>

        <li>Liste des objets</li>
        <li>entrées de blog</li>
        <li>recherche simple...</li>
        <li>recherche complète...</li>
    </ul>
    </li>
        <li>Importer</li>

        <li>Exporter</li>
    <li>Synchroniser</li>
    <li>Créer un nouvel objet
    <ul>
        <li>Objet nu (assistant)</li>
        <li>Classe d'objets</li>
        <li>Propriété</li>

        <li>Modèle de vue</li>
                <li>Modèle de formulaire</li>
        <li>Personne</li>
                <li>Utilisateur</li>
        <li>Une nouvelle entrée...</li>
    </ul>

    </li>
</ul>
<h2>Utilisateur</h2>
<ul>
    <li>Vous &ecirc;tes <a href="#">CharlesNepote</a> (<a href="#">D&eacute;connexion</a>)</li>
    <li>Mes requêtes
    <ul>

        <li>Nouveaux utilisateurs</li>
        <li>Nouvelles web sémantiques</li>
        <li>Dernières contribs</li>
        <li>Gérer <em>mes requêtes</em>...</li>
    </ul>
    </li>

    <li>Préférences</li>
    <li>Style</li>
</ul>

<p id="copyright">
<a href="http://validator.w3.org/check/referer">XHTML 1.0 valide ?</a> ::
<a href="http://jigsaw.w3.org/css-validator/check/referer">CSS valide ?</a> ::
-- Maquette <a href="#">WikiSem</a> "Orandre" 2004-09-03 18:00

</p>
<!-- /Menu général -->


</body>
</head>

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]