You are looking at the HTML representation of the XML format.
HTML is good for debugging, but is unsuitable for application use.
Specify the format parameter to change the output format.
To see the non HTML representation of the XML format, set format=xml.
See the complete documentation, or API help for more information.
<?xml version="1.0"?>
<api>
  <query>
    <pages>
      <page pageid="20" ns="0" title="Sujets en cours">
        <revisions>
          <rev contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">
==&lt;br/&gt; Intelligramme ==
&lt;br/&gt;
Un '''intelligramme''' est un datagramme couche six présentation. Il s'agit donc d'un concept multimatique utilisable au sein d'un &quot;neb&quot; pour supporter des échanges structurés comprenant à la fois de l'information et des [http://cnrtl.fr/definition/dmf/commandation commandations] &lt;ref&gt;c'est à dire, dans l'environnement PLUS des commandes que les retransmetteurs successifs et le receveur peuvent choisir d'exécuter ou d'ignorer selon ses raisons d'accès.&lt;/ref&gt;).

'''DJSON''' entend être une approche de l'intelligramme pouvant être utilisée en environnent '''[http://yiam.net YIAMnet]''' ou '''nebDB''' &lt;ref&gt; netDB est un projet d'étude d'une systémique mémorielle intégrable à l'intrastructure du réseau.&lt;/ref&gt;.

La description d'un intelligramme pourrait être celle d'un message (e-mail) structuré pour être utilisable aussi bien par un homme que par une machine.

* en-tête : les composants seraient associés en énonciation et réception à des utags ou à des ntags non transmis. 

* intro : texte non-formaté ou formaté (par exemple &quot;mediawiki&quot;).

* djson : utilisation d'un lexique polynyme des champs.

* pièces-jointes :


''&lt;small&gt;&lt;references/&gt;&lt;/small&gt;''

== &lt;br/&gt;Délinéation, perlition et émergence ==
&lt;br/&gt;
'''DJSON''' introduit le support pratique du concept d'intellition. Ceci est une importante évolution par rapport à la théorie de l'information. Une formule simple pour faire comprendre la différence :

* l''''information''' est ce qui '''étend''' la '''connaissance'''.
* l''''intellition''' est ce qui '''l'approfondit'''.

L'information traite d'un point précis concernant la réalité observable : comme une photo. L'on peut ajouter d'autres photos pour constituer un panormama.

L'intellition va résulter de l'observation et du traitement de :

* ce qu'il renferme en '''profondeur''' : c'est une première application de la '''délinéation'''. Un domaine est délinéé, auquel vont appartenir toutes les informations obtenues en le pénétrant.

* ce qu'il sera possible d'observer &quot;'''perligement'''&quot; &lt;ref&gt; ces notions sont explorées sur le blik http://perligence.com.&lt;/ref&gt; c'est à dire '''par l'entour''', à partir des points de cette pénétration et de sa dynamique : c'est la '''perlition'''. 

* et de manière générale de la délinéation &quot;'''plurigente'''&quot; de cette perligence : ce qui a été identifié comme les '''classes''' (des '''énonciateurs''' et les '''groupes''' des '''auditeus'''. 
 
Nous allons ainsi voire '''émerger''' peu à peu une &quot;'''entendance'''&quot;, une connaissance multiple, croisée et complexe d'où va à son tour '''émerger''' la compréhension, plus rapidement (par le filtrage des syllodonnées entre '''classes''' et '''groupes''' au sein du réseau intersemantique ['''intersem''']).

== &lt;br/&gt;Hyperespace ==
&lt;br/&gt;
Un hyperespace est l'espace d'une agora de données non directement accessible aux membres d'une nébularité et donc a tous les membres d'une communauté globale telle que définie par la RFC 6852. Les données d'un hyperespace sont des hyperdonnées pour qui n'y a pas intérieurement accès (ex. les hyperliens) et doit les résoudre selon un processus filtrant.

==&lt;br/&gt;Sémiotique artificielle ==
&lt;br/&gt;
Une lecture plus complexe va pouvoir être supportée par une délinéation mise au service d'une perlition distribuée. Une classe d'origine d'intelligrammes pourra être délinées en plusieurs parties associées à des groupes de desserveurs.  Lorsque l'intelligramme pénètre sur un de ces desserveurs la partie correspondante sera mise à jour. L'intelligramme pourra ainsi acquérir des compléments d'intellition. L'inter-compréhension sera atteinte lorsque le passage à travers tous les groupes de toutes les parties laissera l'intelligramme inchangé. 


''&lt;small&gt;&lt;references/&gt;&lt;/small&gt;''
&lt;br/&gt;</rev>
        </revisions>
      </page>
      <page pageid="35" ns="0" title="Utilisation Json comme base de données">
        <revisions>
          <rev contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">
(Cet article a été écrit il y a très longtemps, dans une galaxie très très lointaine, par un nakama inconnu) 

Aujourd’hui on va voir comment utiliser le Json comme base de données. L’avantage est de ne plus avoir besoin de MySQL.

Cette solution peut être intéressante pour de petits sites qui ne demandent pas trop d’administration.

Cet article va montrer comment utiliser le format Json et quelques points intéressants &amp;#63042; comme par exemple mettre en place une Api qui va stocker dans un fichier Json des utilisateurs.

Ce qu’il faut garder en tête ici, c’est que chaque fichier Json peut être comparé à une table d’une base de données.


__TOC__


==== Variables et constructeur ====

&lt;pre&gt;
class UserJson {
    private $id;
    private $data;
    private $table;
    private $table_id;
    private $user;
    private $users;
 
    public function __construct(){
        $this-&gt;table    = &quot;users.json&quot;;
        $this-&gt;table_id = &quot;users_id.txt&quot;;
 
        // si le fichier n'existe pas, on le crée
        if(!file_exists($this-&gt;table)){
            $this-&gt;createTable();
        }
    }
&lt;/pre&gt;
* ise en place des variables
* le constructeur va renseigner quelques informations : le nom du fichier Json et txt.
* on termine en vérifiant si les fichiers n’existent pas déjà, si ce n’est pas le cas on fera appel à la méthode qui les créera.


====Les méthodes====

&lt;pre&gt;
// création des fichiers Json et txt
// le fichier txt servira uniquement à l'incrémentation
public function createTable(){
    $handle    = @fopen($this-&gt;table, &quot;a+&quot;);
    $handle_id = @fopen($this-&gt;table_id, &quot;a+&quot;);
    if($handle &amp;&amp; $handle_id) {
        fclose($handle);
        fclose($handle_id);
        return true;
    }
}
&lt;/pre&gt;
&lt;pre&gt;
// Ajout d'un nouvel utilisateur
public function addUser($data){
 
    // info sur le nouvel user
    $this-&gt;data  = $data;
 
    // on récupère le nouvel ID
    $this-&gt;id = $this-&gt;getId();
 
    if( $this-&gt;id !== null ){
        // on ajoute l'ID au nouvel user
        $this-&gt;data = array('id'=&gt;$this-&gt;id) + $this-&gt;data;
 
        // on ajoute le nouvel user au fichier
        $file = @fopen($this-&gt;table, 'a+');
 
        fputs($file, json_encode($this-&gt;data).',');
 
        fclose($file);
 
        return true;
    }else{
        return &quot;Erreur pour l'ajout de l'utilisateur.&quot;;
    }
 }
&lt;/pre&gt;
* a méthode getId() récupère un nouvel identifiant qui est contenu dans le fichier txt
* ligne 10 : on teste bien que le résultat n’est pas null sinon c’est qu’il y a eu un problème lors de la création de l’identifiant
* chaque utilisateur est sauvegardé sous cette forme : {« id »:31, »pseudo »: »Iron Man », »date »:1387821811},

&lt;pre&gt;
// on récupère un nouvel ID
private function getId(){
 
    if( $txt = @fopen($this-&gt;table_id, &quot;r+&quot;) ){
        $this-&gt;id = fgets( $txt ); // récupération de la valeur
        $this-&gt;id = intval( $this-&gt;id ); // on vérifie qu’il s’agit bien d’un nombre
        $this-&gt;id++; // on incrémente
        fseek( $txt, 0 ); // réinitialisation du curseur
        fputs( $txt, $this-&gt;id ); // on écrit le nouveau nombre
        fclose($txt);
 
        return $this-&gt;id;
    }else{
        return null;
    }
}
&lt;/pre&gt;
Une simple méthode pour récupérer la valeur qui se trouve dans le fichier, l’incrémenter et ensuite sauvegarder la nouvelle valeur. J’ai repris la méthode du site openclassrooms pour compter le nombre de téléchargement.

Ici l’élément important : c’est que la méthode est en private, cela signifie qu’on va pouvoir y faire appel uniquement à l’intérieur de la class. Du coup on est certain qu’elle ne peut pas être appelé de l’extérieur, donc un identifiant sera créé uniquement quand on l’appellera dans la class elle-même.
&lt;pre&gt;
// on récupère un user spécifique
public function getUser($id){
 
    // l'id de l'user qu'on souhaite récupérer
    $this-&gt;id = $id;
 
    // liste de tous les users
    $datas = $this-&gt;getAllUser();
 
    // on teste si l'id correspond, si oui on renvoie le résultat
    foreach ($datas as $key =&gt; $row) {
        if($row-&gt;id == $id ) return $row;
    }
 
    // sinon
    return 'Aucun utilisateur ne correspond.';
}
&lt;/pre&gt;
&lt;pre&gt;
// liste de tous les users
public function getAllUser(){
 
    // Si les users sont déjà définis
    if (isset($this-&gt;users)) return $this-&gt;users;
 
    // on récupère le contenu du fichier
    $contents    = file_get_contents($this-&gt;table);
    $this-&gt;users = json_decode(&quot;[&quot;. substr($contents, 0, -1).&quot;]&quot;);
 
    // on renvoi le tableau des users
    return $this-&gt;users;
}
&lt;/pre&gt;
* ligne 5 : elle permet de renvoyer directement tous les utilisateurs si la variable est déjà définie. Cela évite de faire plusieurs fois le travail si on appelle cette méthode plusieurs fois dans un même object
* on récupère le contenu encoder en Json, que l’on va décoder pour pouvoir l’utiliser

Cependant, les données sont sauvegardées de cette manière :
&lt;pre&gt;
{&quot;id&quot;:31,&quot;pseudo&quot;:&quot;Iron&quot;,&quot;date&quot;:1387821811},{&quot;id&quot;:32,&quot;pseudo&quot;:&quot;Iron&quot;,&quot;date&quot;:1387821811},{&quot;id&quot;:33,&quot;pseudo&quot;:&quot;Iron&quot;,&quot;date&quot;:1387821811},
&lt;/pre&gt;
Et pour pouvoir décoder le format Json les données doivent être comme cela :
&lt;pre&gt;
[{&quot;id&quot;:31,&quot;pseudo&quot;:&quot;Iron&quot;,&quot;date&quot;:1387821811},{&quot;id&quot;:31,&quot;pseudo&quot;:&quot;Iron&quot;,&quot;date&quot;:1387821811},{&quot;id&quot;:31,&quot;pseudo&quot;:&quot;Iron&quot;,&quot;date&quot;:1387821811}]
&lt;/pre&gt;

C’est pour cela que j’ajoute les [ ] et que je supprime la dernière virgule (ligne 9).

Il est tout à fait possible de faire autrement, enregistrer directement le tableau des utilisateurs, du coup on aura tout de suite la bonne syntaxe. Cependant, pour chaque ajout il faudrait tout récupérer et ré-écrire à chaque fois … perso je préfère écrire uniquement le nouvel utilisateur 
&lt;pre&gt;
// modification d'un utilisateur
public function updateUser($id, $data){
    $this-&gt;id    = $id;
    $this-&gt;data  = $data;
 
    // liste de tous les users
    $this-&gt;users = $this-&gt;getAllUser();
 
    // on ouvre et on vide le fichier
    if($handle = @fopen($this-&gt;table, &quot;w+&quot;)) {
        $this-&gt;data = &quot;&quot;;
        foreach ($this-&gt;users as $key =&gt; $row) {
            // si l'id correspond
            // on modifie le nouveau pseudo par exemple
            if( $row-&gt;id == $this-&gt;id ){
                if($data['pseudo'] != &quot;&quot;) $row-&gt;pseudo = $data['pseudo'];
            }
 
            $this-&gt;data .= json_encode($row).',';
        }
        // on ajoute tous les utilisateurs dans le fichier
        fputs($handle, $this-&gt;data);
 
        fclose($handle);
        return true;
    }
}
&lt;/pre&gt;
&lt;pre&gt;
// suppression d'un utilisateur
public function removeUser($id){
    $this-&gt;id    = $id;
 
    // liste tous les users
    $this-&gt;users = $this-&gt;getAllUser();
 
    if($handle = @fopen($this-&gt;table, &quot;w+&quot;)) {
        $this-&gt;data = &quot;&quot;;
        foreach ($this-&gt;users as $key =&gt; $row) {
            if($row-&gt;id == $this-&gt;id )
                unset($this-&gt;users[$key]);
            else
                $this-&gt;data .= json_encode($row).',';
        }
 
        fputs($handle, $this-&gt;data);
 
        fclose($handle);
        return true;
    }
 }
&lt;/pre&gt;
La suppression se passe plus ou moins comme la modification, on regarde si l’id correspond, si oui on le supprime du tableau des utilisateurs et ensuite on ré-écrit le tout dans le fichier.

On n’oublie pas la dernière accolade de la class &amp;#63042;
&lt;pre&gt;
}
&lt;/pre&gt;


====C’est fini====

La class permet de créer, de modifier, de supprimer et de lister tous les utilisateurs. Évidemment, elle peut être améliorée &amp;#63042; ici je propose uniquement une base comme exemple &amp;#63042;


====Mais il ne manque rien ?====

Il manque peut-être les appels à la class &amp;#63042; enfin la création de l’object.
&lt;pre&gt;
// initialisation
$json = new UserJson();
 
// liste de tous les utilisateurs
print_r( $json-&gt;getAllUser() );
 
// appel d'un utilisateur spécifique
print_r( $json-&gt;getUser(31) );
 
// ajout d'un nouvel utilisateur
$user = array('pseudo' =&gt; 'Batman', 'date'=&gt;time());
var_dump( $json-&gt;addUser($user) );
 
// modification d'un utilisateur
$update = array('pseudo'=&gt;'Thor');
var_dump( $json-&gt;updateUser(44, $update) );
 
// suppression d'un utilisateur
print_r( $json-&gt;removeUser(42) );
&lt;/pre&gt;


====Idées d’amélioration ?====

* Pseudo et email unique
* Rajouter des champs : mdp, email, date de modification etc.
* Mettre en place une 2e table pour classer les utilisateurs par catégories
* Mettre en place un système d’identification (login/mdp)
* etc.</rev>
        </revisions>
      </page>
    </pages>
  </query>
</api>