La struttura del database è abbastanza semplice. Sono state utilizzate alcune convenzioni di facile individuazione nel corso di questo documento. Per esempio la maggior parte degli oggetti è indicizzata da un intero incrementato automaticamente e il cui nome è del tipo id_objet, e che è dichiarato come chiave primaria nella tabella appropriata.
N.B.: questo articolo comincia ad essere obsoleto e nessuno ha ancora preso l’onere di aggiornarlo. È necessario leggerlo come un elemento che permette di comprendere il funzionamento di SPIP, ma non come uno strumento di riferimento. Se si desidera contribuire alla documentazione riscrivendo completamente questo articolo non esistate a proporvi!
Contenuto redazionale
Le rubriche: spip_rubriques
- Ogni rubrica è identificata con id_rubrique.
- id_parent è l’id_rubrique della rubrica che contiene questa rubrica (zero se la rubrica si trova alla radice del sito).
- titre, descriptif, texte sono rispettivamente il titolo, la descrizione e il testo.
- id_secteur è l’id_rubrique della rubrica a capo del percorso gerarchico che contiene questa rubrica. Una rubrica dipende da una rubrica che dipende da una rubrica...
fino ad una rubrica posta alla radice del sito; questa ultima rubrica determina l’id_secteur. Questo valore precalcolato permette di accelerare alcuni calcoli nell’area pubblica (in effetti, le brevi sono ordinate solo per settore e non secondo tutta la gerarchia).
- maj è un campo tecnico aggiornato automaticamente da MySQL, che contiene la data dell’ultima modifica dell’inserimento nella tabella.
- export, id_import sono campi riservati per funzionalità future.
Gli articoli: spip_articles
- Ogni articolo è identificato dal suo id_article.
- id_rubrique indica in quale rubrica è posto l’articolo.
- id_secteur indica la sezione corrispondente alla rubrica sopra menzionata (vedere il paragrafo precedente per la spiegazione della differenza tra le due).
- titre, surtitre, soustitre, descriptif, chapo, texte, ps corrispondono rispettivamente al titolo, occhiello, sottotitolo, descrizione, introduzione, testo, post scriptum.
- date è la data di pubblicazione dell’articolo (se l’articolo non è stato ancora pubblicato indica la data di creazione).
- date_redac è la data di pubblicazione anteriore se si imposta tale valore, altrimenti è uguale a "0000-00-00".
- statut è lo status attuale dell’articolo: prepa (in preparazione),
prop (proposto per la pubblicazione), publie (pubblicato), refuse (rifiutato), poubelle (nel cestino).
- accepter_forum: permette di impostare manualmente se l’articolo accetta i forum (di defalult, sì).
- maj: stesso significato della tabella delle rubriche.
- export è un campo riservato a funzionalità future.
- images è un campo contenente l’elenco delle immagini utilizzate dall’articolo, in un formato particolare. Questo campo è generato da spip_image.php3.
- visites e referers sono utilizzati per le statistiche degli articoli. Il primo è il numero di volte che una pagina viene caricata nell’area pubblica; il secondo contiene un estratto di hash dei diversi referrers, al fine di conoscere il numero di referrers distinti. Vedere inc-stats.php3.
Gli autori: spip_auteurs
- Ogni autore è identificato dal suo id_auteur.
- nom, bio, nom_site, url_site, pgp sono rispettivamente il nome dell’autore, la breve biografia, l’indirizzo email, il nome e l’URL del suo sito Web, la chiave PGP. Informazioni liberamente modificabili dall’autore.
- email, login sono la sua email di iscrizione e il suo login. Possono essere modificati solo da un amministratore.
- pass è l’hash MD5 della password.
- htpass è il valore criptato (cioè, generato da crypt()) della password per il file .htpasswd.
- statut è lo status dell’autore: 0minirezo (amministratore), 1comite (redattore), 5poubelle (nel cestino), 6forum (abbonato ai forum, quando essi sono impostati nel modo "su abbonamento").
- maj ha lo stesso significato delle altre tabelle.
Le brevi: spip_breves
- Ogni breve è identificata dal suo id_breve.
- id_rubrique è la rubrica (in effetti la sezione) nella quale è inserita la breve.
- titre, texte, lien_titre, lien_url sono il titolo, il testo, il nome e l’indirizzo del link associato alla breve.
- date_heure è la data della breve.
- statut è lo status della breve: prop (proposta per la pubblicazione), publie (pubblicata), refuse (rifiutata).
- maj: come per le altre tabelle.
Le parole chiave: spip_mots
- Ogni parola chiave è identificata dal suo id_mot.
- Il type della parola chiave è il suo tipo, o gruppo, scelto per la parola chiave. Definendo più tipi si definiscono più classificazioni indipendenti (per esempio "argomento", "epoca", "nazione"...).
- titre, descriptif, texte sono il titolo, la descrizione e il testo.
- maj: come per le altre tabelle.
I siti in syndication: spip_syndic
- Ogni sito in syndication viene identificato dal suo id_syndic.
- id_rubrique e id_secteur definiscono la localizzazione nella gerarchia del sito dove si inseriscono i contenuti in syndication.
- nom_site, url_site, descriptif sono il nome, l’indirizzo e la descrizione del sito in syndication.
- url_syndic è l’indirizzo del file dinamico utilizzato per recuperare i contenuti in syndication (spesso si tratta di url_site seguito da backend.php3).
Gli articoli in syndication: spip_syndic_articles
- Ogni articolo in syndication viene identificato dal suo id_syndic_article.
- id_syndic si riferisce al sito in syndication dal quale viene estratto l’articolo.
- titre, url, date, lesauteurs sono il titolo, l’URL, la data e gli autori dell’articolo in syndication.
Elementi interattivi
I messaggi dei forum: spip_forum
- Ogni messaggio di forum è identificato da un id_forum.
- L’oggetto al quale è allegato il forum è identificato da id_rubrique, id_article o id_breve. I valori di default sono uguali a zero.
- Il messaggio parent (cioè il messaggio al quale risponde questo messaggio) è identificato da id_parent. Se il messaggio non risponde a nessun altro messaggio questo valore è uguale a zero.
- titre, texte, nom_site, url_site sono il titolo e il testo del messaggio, il nome e l’indirizzo del link ad esso associato.
- auteur e email_auteur sono il nome e l’email dichiarate dall’autore.
Nel caso dei forum su abbonamento, essi non sono obbligatoriamente identici ai dati registrati nella scheda dell’autore (cioè, nella tabella spip_auteurs).
- id_auteur identifica l’autore del messaggio nel caso di forum su abbonamento.
- statut è lo status del messaggio: publie (leggibile nell’area pubblica), prive (scritto in reazione a un articolo nell’area riservata), privrac (scritto nel forumm interno nell’area riservata), off (eliminato o da convalidare, secondo il tipo di moderazione dei forum - a priori o a posteriori).
- ip è l’indirizzo IP dell’autore, nei forum pubblici.
- maj ha lo stesso significato delle altre tabelle.
Le petizioni: spip_petitions
- id_article identifica l’articolo al quale è associata la petizione (una sola petizione per articolo).
- email_unique, site_obli, site_unique, message definiscono la configurazione della petizione: l’indirizzo email dei firmatari deve essere unico nelle firme, l’indirizzo Web è obbligatorio, è unico, un messaggio contiguo alle firme è autorizzato (sì o no).
- texte è il testo della petizione.
- maj: come per le altre tabelle.
Le firme di petizione: spip_signatures
- Ogni firma è identificata dal proprio id_signature.
- id_article identifica l’articolo, quindi la petizione sulla quale è posta la firma.
- nom_email, ad_email, nom_site, url_site sono il nome, l’indirizzo email, come pure il sito Web dichiarati dal firmatario.
- message è il messaggio eventualmente digitato dal firmatario.
- statut è lo status della firma: publie (accettata), poubelle (eliminata); qualsiasi altro valore dà il valore della chiave di convalida utilizzata per la conferma via email.
- maj come per le altre tabelle.
Le relazioni tra oggetti
Queste tabelle non gestiscono alcun contenuto, semplicemente una relazione tra gli oggetti presenti in altre tabelle. Pertanto:
- spip_auteurs_articles specifica la relazione tra autori e articoli. Se un id_auteur è associato a un id_article, ciò vuol dire che l’autore in questione ha scritto l’articolo o ne è co-autore (possono esserci più autori per articolo e, ovviamente, più articoli per autore).
- spip_mots_articles definisce nello stesso modo la relazione di riferimento degli articoli con le parole chiave.
Gestione del sito
La tabella spip_meta è di fondamentale importanza. Essa contiene coppie (nome, valore) indicizzate secondo il nome (chiave primaria); queste coppie permettono di immmagazzinare diverse informazioni quali la configurazione del sito o la versione installata di SPIP.
La tabella spip_forum_cache viene utilizzata al fine di adattare il sistema della cache all’istantaneità dei forum. Per ogni file della cache che ha causato una richiesta sulla tabella spip_forum, la tabella spip_forum_cache immagazzina i parametri della richiesta (articolo, rubrica, breve e eventuale messaggio parent del forum). Quando viene inviato un messaggio, i parametri del messaggio sono confrontati con quelli presenti in spip_forum_cache, e per ogni corrispondenza trovata il file cache indicato nella tabella viene cancellato. In tal modo, per apparire nell’area pubblica, i messaggi non attendono la rigenerazione regolare della pagina nella quale si inseriscono.
Indicizzazione (motore di ricerca)
Il motore di ricerca utilizza sei tabelle. Esse sono divise in due categorie.
Il dizionario di indicizzazione: spip_index_dico
Ogni parola incontrata durante l’indicizzazione viene immagazzinata in questa tabella, come pure i primi 64 bit della sua hash MD5. È la parola che serve di chiave primaria, permettendo così di effettuare molto rapidamente delle query sull’inizio di una parola; si recupera l’hash che soddisfa la query, al fine di effettuare la ricerca propriamente detta nelle tabelle di indicizzazione.
Le tabelle di indicizzazione: spip_index_*
Queste cinque tabelle gestiscono ognuna l’indicizzazione di un tipo di oggetto: articoli, rubriche, brevi, autori, parole chiave. Una entry per parola e per oggetto viene immagazzinata. Ogni entry contiene l’hash della parola (in realtà i 64 bit di peso forte dell’hash MD5, vedi sopra), l’identificativo dell’oggetto indicizzato (per esempio l’id_article per un articolo), e il numero di punti associati all’indicizzazione della parola nell’oggetto. Questo numero di punti è calcolato in base al numero di occorrenze della parola, ponderato dal campo in cui appaiono queste occorrenze: un’occorrenza nel titolo di un articolo genera più punti di un’occorrenza nel corpo dell’articolo.
Il meccanismo di indicizzazione è spiegato più dettagliatamente qui.