Table des matières
Dokuwiki - Strata semi-structured data
Intro
Voir :
- SPARQL
DokuWiki utilise des fichiers plats, nul besoin de base de données relationnelle. Cependant il peut être utile d'utiliser des données structurées, sémantique et autre.
Une solution intéressante est l’extension Strata (semi-structured data) qui utilise par défaut sqlite (possibilité d'utiliser PostgreSQL ou MySQL).
Nous avons que les avantages d'une base de données relationnelle, sans les inconvénients. En effet, toutes les données sont dans les pages du Wiki au format texte. Un effacement de la base ne serait donc pas catastrophique !
Install
Nécessite l’extension DokuWiki sqlite
Module PHP pour communiquer avec sqlite. Sur Debian :
apt-get install php5-sqlite
Install sur alpine / PHP7
apk add php7-sqlite3 sqlite php7-pdo_sqlite
Note fichier :
| Conf DW | sqlite:@METADIR@/strata.sqlite3 |
| Emplacement | ./data/meta/strata.sqlite3 |
Notes
Pour commenter une ligne, préfixer là par “--” comme en SQL
Les données ne peuvent être saisi que par la balise <data> Pour requêter il existe les balises <table> et <list>
Exemple
Données
Création d'un page sur DokuWiki
people:alice_king
<data person> Full Name: Alice King Birthday [date::Y-m-d]: 1985-11-12 Birthplace [page::places]: London Contact [link]: alice.king@example.org Friends [ref]*: Bob Marley, Jean Paul </data>
page people:bob_marley
<data person> Full Name: Bob Marley Birthday [date::Y-m-d]: 1945-02-06 Birthplace [page::places]: Nine Miles Contact [link]: Friends [ref]*: Alice King, Jean Paul </data>
NB : Le ligne Contact [link]: ne contenant aucune valeur sera ignorée, elle ne sert à rien
La syntaxe basée sur SPARQL est assez simple pour la saisi de donnés.
<data nomDeLaTable> -- Les lignes commençant par -- sont ignorées -- Exemple Clef: Valeur -- Ou Clef [type]: valeur -- Ou encore -- Le symbole "*" signifie que plusieurs valeurs sont possibles Clef [type]*: valeur Clef [type::hint]: valeur -- Exemple DateFacture [date::Y-m-d]: 2016-03-04 </data>
Le type sert à la fois au stockage des données ainsi qu'à la présentation
Requête
Sur une autre page
~~NOCACHE~~ <table ?p "Person" ?birthday "Birthday" ?birthplace "Birthplace" ?contact "Contact"> ?p is a: person ?p Contact [link]: ?contact ?p Birthday [date]: ?birthday ?p Birthplace [page::places]: ?birthplace </table>
Bob Marley n’apparaît pas. Ce n'est pas parce que vous n'avez pas assez fumé. En fait ici tous les champs demandés sont obligatoires alors que le champ Contact est vide
Réécrivons notre requête avec le champ Contact optionnel
<table ?p "Person" ?birthday "Birthday" ?birthplace "Birthplace" ?contact "Contact">
?p is a: person
optional {
?p Contact [link]: ?contact
}
?p Birthday [date]: ?birthday
?p Birthplace [page::places]: ?birthplace
</table>
Exemple avec Union
<table ?p "Person" ?birthday "Birthday" ?birthplace "Birthplace" ?contact "Contact">
?p is a: person
optional {
?p Contact [link]: ?contact
}
?p Birthday [date]: ?birthday
--Lignes commentées
--?p Birthplace [page::places]: ?birthplace
--?birthplace = London
union {
{
?p Birthplace [page::places]: ?birthplace
?birthplace = London
}
{
?p Birthplace [page::places]: ?birthplace
?birthplace = Nine Miles
}
}
</table>
