All Is Tag

En résumé

AIT est un ensemble de classes PHP permettant le stockage et la recherche de métadonnées. AIT se base sur 2 concepts : des items et des tags. A partir de là, on peut stocker et effectuer des recherches toutes informations formalisées sur ces 2 concepts.

Concrètement AIT peut être considéré simplement comme un moteur de Tag (Tag's engine) en PHP, ou alors si on pousse le raisonnement à l'extrême, comme un moteur générique de stockage d'information.

En pratique

Voici un exemple de code AIT pour stocker et rechercher des disques :


require_once 'AIT.php';
require_once 'AIT/Extended/Searching.php';

// Connexion à la base 
$db = AIT::connect(
        'mysql:host=localhost;dbname=test', 
        'root'
);

// Contrôle et création de la structure de données
$db->checkup();

// Ajout d'un plugin
$db->extendWith(new AIT_Extended_Searching());


// Définition d'un schéma de données
$sm = $db->registerSchema('Disques', array('titre', 'artiste', 'style'));


// Ajout de quelques Tags génériques
$jazz      = $sm->style->addTag('Jazz');
$blues     = $sm->style->addTag('Blues');
$electro   = $sm->style->addTag('Electro');
$classique = $sm->style->addTag('Musique Classique');

// Ajout de quelques items
$d1 = $sm->disques->addItem('a2407474');
$d1->addTag('Bossa nova stories', $sm->titre); 
$d1->addTag('Eliane Elias',       $sm->artiste);  
$d1->attach($jazz)->attach($blues);

$d2 = $sm->disques->addItem('a2274830');
$d2->addTag('Fuck me I\'m famous Ibiza mix 08', $sm->titre); 
$d2->addTag('David Guetta',                     $sm->artiste); 
$d2->attach($electro);

$d3 = $sm->disques->addItem('a1902425');
$d3->addTag('Heroes',             $sm->titre); 
$d3->addTag('Antonio Vivaldi',    $sm->artiste); 
$d3->addTag('Philippe Jaroussky', $sm->artiste); 
$d3->attach($classique);


// Recherche Full Text
$result = $sm->disques->searchItems('*es');
foreach($result as $item) $item->dump();

// Recherche par tags
$result = $sm->disques->fetchItems(new ArrayObject(array($electro)));
foreach($result as $item) $item->dump();

// Etc ...