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 <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>