{{tag>Brouillon DB sqlite}}
= Dokuwiki - Strata semi-structured data
== Intro
Voir :
* https://www.dokuwiki.org/plugin:strata
* http://www.opensym.org/os2014/proceedings-files/p807.pdf
* http://eprints.eemcs.utwente.nl/24181/01/Davison_thesis_v11.pdf
* 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**
* https://www.dokuwiki.org/plugin: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 **%%%%**
Pour requêter il existe les balises **%%%%** et **%%%%**
== Exemple
=== Données
Création d'un page sur DokuWiki
''people:alice_king''
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
page ''people:bob_marley''
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
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.
-- 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
Le **type** sert à la fois au stockage des données ainsi qu'à la présentation
=== Requête
Sur une autre page
~~NOCACHE~~
?p is a: person
?p Contact [link]: ?contact
?p Birthday [date]: ?birthday
?p Birthplace [page::places]: ?birthplace
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
?p is a: person
optional {
?p Contact [link]: ?contact
}
?p Birthday [date]: ?birthday
?p Birthplace [page::places]: ?birthplace
------------
Exemple avec **Union**
?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
}
}